xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/ada-lang.c (revision afab4e300d3a9fb07dd8c80daf53d0feb3345706)
1 /* Ada language support routines for GDB, the GNU debugger.
2 
3    Copyright (C) 1992-2020 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
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.
11 
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.
16 
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/>.  */
19 
20 
21 #include "defs.h"
22 #include <ctype.h>
23 #include "gdb_regex.h"
24 #include "frame.h"
25 #include "symtab.h"
26 #include "gdbtypes.h"
27 #include "gdbcmd.h"
28 #include "expression.h"
29 #include "parser-defs.h"
30 #include "language.h"
31 #include "varobj.h"
32 #include "inferior.h"
33 #include "symfile.h"
34 #include "objfiles.h"
35 #include "breakpoint.h"
36 #include "gdbcore.h"
37 #include "hashtab.h"
38 #include "gdb_obstack.h"
39 #include "ada-lang.h"
40 #include "completer.h"
41 #include "ui-out.h"
42 #include "block.h"
43 #include "infcall.h"
44 #include "annotate.h"
45 #include "valprint.h"
46 #include "source.h"
47 #include "observable.h"
48 #include "stack.h"
49 #include "typeprint.h"
50 #include "namespace.h"
51 #include "cli/cli-style.h"
52 
53 #include "value.h"
54 #include "mi/mi-common.h"
55 #include "arch-utils.h"
56 #include "cli/cli-utils.h"
57 #include "gdbsupport/function-view.h"
58 #include "gdbsupport/byte-vector.h"
59 #include <algorithm>
60 
61 /* Define whether or not the C operator '/' truncates towards zero for
62    differently signed operands (truncation direction is undefined in C).
63    Copied from valarith.c.  */
64 
65 #ifndef TRUNCATION_TOWARDS_ZERO
66 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
67 #endif
68 
69 static struct type *desc_base_type (struct type *);
70 
71 static struct type *desc_bounds_type (struct type *);
72 
73 static struct value *desc_bounds (struct value *);
74 
75 static int fat_pntr_bounds_bitpos (struct type *);
76 
77 static int fat_pntr_bounds_bitsize (struct type *);
78 
79 static struct type *desc_data_target_type (struct type *);
80 
81 static struct value *desc_data (struct value *);
82 
83 static int fat_pntr_data_bitpos (struct type *);
84 
85 static int fat_pntr_data_bitsize (struct type *);
86 
87 static struct value *desc_one_bound (struct value *, int, int);
88 
89 static int desc_bound_bitpos (struct type *, int, int);
90 
91 static int desc_bound_bitsize (struct type *, int, int);
92 
93 static struct type *desc_index_type (struct type *, int);
94 
95 static int desc_arity (struct type *);
96 
97 static int ada_type_match (struct type *, struct type *, int);
98 
99 static int ada_args_match (struct symbol *, struct value **, int);
100 
101 static struct value *make_array_descriptor (struct type *, struct value *);
102 
103 static void ada_add_block_symbols (struct obstack *,
104 				   const struct block *,
105 				   const lookup_name_info &lookup_name,
106 				   domain_enum, struct objfile *);
107 
108 static void ada_add_all_symbols (struct obstack *, const struct block *,
109 				 const lookup_name_info &lookup_name,
110 				 domain_enum, int, int *);
111 
112 static int is_nonfunction (struct block_symbol *, int);
113 
114 static void add_defn_to_vec (struct obstack *, struct symbol *,
115                              const struct block *);
116 
117 static int num_defns_collected (struct obstack *);
118 
119 static struct block_symbol *defns_collected (struct obstack *, int);
120 
121 static struct value *resolve_subexp (expression_up *, int *, int,
122                                      struct type *, int,
123 				     innermost_block_tracker *);
124 
125 static void replace_operator_with_call (expression_up *, int, int, int,
126                                         struct symbol *, const struct block *);
127 
128 static int possible_user_operator_p (enum exp_opcode, struct value **);
129 
130 static const char *ada_op_name (enum exp_opcode);
131 
132 static const char *ada_decoded_op_name (enum exp_opcode);
133 
134 static int numeric_type_p (struct type *);
135 
136 static int integer_type_p (struct type *);
137 
138 static int scalar_type_p (struct type *);
139 
140 static int discrete_type_p (struct type *);
141 
142 static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
143                                                 int, int);
144 
145 static struct value *evaluate_subexp_type (struct expression *, int *);
146 
147 static struct type *ada_find_parallel_type_with_name (struct type *,
148                                                       const char *);
149 
150 static int is_dynamic_field (struct type *, int);
151 
152 static struct type *to_fixed_variant_branch_type (struct type *,
153 						  const gdb_byte *,
154                                                   CORE_ADDR, struct value *);
155 
156 static struct type *to_fixed_array_type (struct type *, struct value *, int);
157 
158 static struct type *to_fixed_range_type (struct type *, struct value *);
159 
160 static struct type *to_static_fixed_type (struct type *);
161 static struct type *static_unwrap_type (struct type *type);
162 
163 static struct value *unwrap_value (struct value *);
164 
165 static struct type *constrained_packed_array_type (struct type *, long *);
166 
167 static struct type *decode_constrained_packed_array_type (struct type *);
168 
169 static long decode_packed_array_bitsize (struct type *);
170 
171 static struct value *decode_constrained_packed_array (struct value *);
172 
173 static int ada_is_packed_array_type  (struct type *);
174 
175 static int ada_is_unconstrained_packed_array_type (struct type *);
176 
177 static struct value *value_subscript_packed (struct value *, int,
178                                              struct value **);
179 
180 static struct value *coerce_unspec_val_to_type (struct value *,
181                                                 struct type *);
182 
183 static int lesseq_defined_than (struct symbol *, struct symbol *);
184 
185 static int equiv_types (struct type *, struct type *);
186 
187 static int is_name_suffix (const char *);
188 
189 static int advance_wild_match (const char **, const char *, int);
190 
191 static bool wild_match (const char *name, const char *patn);
192 
193 static struct value *ada_coerce_ref (struct value *);
194 
195 static LONGEST pos_atr (struct value *);
196 
197 static struct value *value_pos_atr (struct type *, struct value *);
198 
199 static struct value *val_atr (struct type *, LONGEST);
200 
201 static struct value *value_val_atr (struct type *, struct value *);
202 
203 static struct symbol *standard_lookup (const char *, const struct block *,
204                                        domain_enum);
205 
206 static struct value *ada_search_struct_field (const char *, struct value *, int,
207                                               struct type *);
208 
209 static int find_struct_field (const char *, struct type *, int,
210                               struct type **, int *, int *, int *, int *);
211 
212 static int ada_resolve_function (struct block_symbol *, int,
213                                  struct value **, int, const char *,
214                                  struct type *, int);
215 
216 static int ada_is_direct_array_type (struct type *);
217 
218 static struct value *ada_index_struct_field (int, struct value *, int,
219 					     struct type *);
220 
221 static struct value *assign_aggregate (struct value *, struct value *,
222 				       struct expression *,
223 				       int *, enum noside);
224 
225 static void aggregate_assign_from_choices (struct value *, struct value *,
226 					   struct expression *,
227 					   int *, LONGEST *, int *,
228 					   int, LONGEST, LONGEST);
229 
230 static void aggregate_assign_positional (struct value *, struct value *,
231 					 struct expression *,
232 					 int *, LONGEST *, int *, int,
233 					 LONGEST, LONGEST);
234 
235 
236 static void aggregate_assign_others (struct value *, struct value *,
237 				     struct expression *,
238 				     int *, LONGEST *, int, LONGEST, LONGEST);
239 
240 
241 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
242 
243 
244 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
245 					  int *, enum noside);
246 
247 static void ada_forward_operator_length (struct expression *, int, int *,
248 					 int *);
249 
250 static struct type *ada_find_any_type (const char *name);
251 
252 static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
253   (const lookup_name_info &lookup_name);
254 
255 
256 
257 /* The result of a symbol lookup to be stored in our symbol cache.  */
258 
259 struct cache_entry
260 {
261   /* The name used to perform the lookup.  */
262   const char *name;
263   /* The namespace used during the lookup.  */
264   domain_enum domain;
265   /* The symbol returned by the lookup, or NULL if no matching symbol
266      was found.  */
267   struct symbol *sym;
268   /* The block where the symbol was found, or NULL if no matching
269      symbol was found.  */
270   const struct block *block;
271   /* A pointer to the next entry with the same hash.  */
272   struct cache_entry *next;
273 };
274 
275 /* The Ada symbol cache, used to store the result of Ada-mode symbol
276    lookups in the course of executing the user's commands.
277 
278    The cache is implemented using a simple, fixed-sized hash.
279    The size is fixed on the grounds that there are not likely to be
280    all that many symbols looked up during any given session, regardless
281    of the size of the symbol table.  If we decide to go to a resizable
282    table, let's just use the stuff from libiberty instead.  */
283 
284 #define HASH_SIZE 1009
285 
286 struct ada_symbol_cache
287 {
288   /* An obstack used to store the entries in our cache.  */
289   struct obstack cache_space;
290 
291   /* The root of the hash table used to implement our symbol cache.  */
292   struct cache_entry *root[HASH_SIZE];
293 };
294 
295 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
296 
297 /* Maximum-sized dynamic type.  */
298 static unsigned int varsize_limit;
299 
300 static const char ada_completer_word_break_characters[] =
301 #ifdef VMS
302   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
303 #else
304   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
305 #endif
306 
307 /* The name of the symbol to use to get the name of the main subprogram.  */
308 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
309   = "__gnat_ada_main_program_name";
310 
311 /* Limit on the number of warnings to raise per expression evaluation.  */
312 static int warning_limit = 2;
313 
314 /* Number of warning messages issued; reset to 0 by cleanups after
315    expression evaluation.  */
316 static int warnings_issued = 0;
317 
318 static const char *known_runtime_file_name_patterns[] = {
319   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
320 };
321 
322 static const char *known_auxiliary_function_name_patterns[] = {
323   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
324 };
325 
326 /* Maintenance-related settings for this module.  */
327 
328 static struct cmd_list_element *maint_set_ada_cmdlist;
329 static struct cmd_list_element *maint_show_ada_cmdlist;
330 
331 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
332 
333 static bool ada_ignore_descriptive_types_p = false;
334 
335 			/* Inferior-specific data.  */
336 
337 /* Per-inferior data for this module.  */
338 
339 struct ada_inferior_data
340 {
341   /* The ada__tags__type_specific_data type, which is used when decoding
342      tagged types.  With older versions of GNAT, this type was directly
343      accessible through a component ("tsd") in the object tag.  But this
344      is no longer the case, so we cache it for each inferior.  */
345   struct type *tsd_type = nullptr;
346 
347   /* The exception_support_info data.  This data is used to determine
348      how to implement support for Ada exception catchpoints in a given
349      inferior.  */
350   const struct exception_support_info *exception_info = nullptr;
351 };
352 
353 /* Our key to this module's inferior data.  */
354 static const struct inferior_key<ada_inferior_data> ada_inferior_data;
355 
356 /* Return our inferior data for the given inferior (INF).
357 
358    This function always returns a valid pointer to an allocated
359    ada_inferior_data structure.  If INF's inferior data has not
360    been previously set, this functions creates a new one with all
361    fields set to zero, sets INF's inferior to it, and then returns
362    a pointer to that newly allocated ada_inferior_data.  */
363 
364 static struct ada_inferior_data *
365 get_ada_inferior_data (struct inferior *inf)
366 {
367   struct ada_inferior_data *data;
368 
369   data = ada_inferior_data.get (inf);
370   if (data == NULL)
371     data = ada_inferior_data.emplace (inf);
372 
373   return data;
374 }
375 
376 /* Perform all necessary cleanups regarding our module's inferior data
377    that is required after the inferior INF just exited.  */
378 
379 static void
380 ada_inferior_exit (struct inferior *inf)
381 {
382   ada_inferior_data.clear (inf);
383 }
384 
385 
386 			/* program-space-specific data.  */
387 
388 /* This module's per-program-space data.  */
389 struct ada_pspace_data
390 {
391   ~ada_pspace_data ()
392   {
393     if (sym_cache != NULL)
394       ada_free_symbol_cache (sym_cache);
395   }
396 
397   /* The Ada symbol cache.  */
398   struct ada_symbol_cache *sym_cache = nullptr;
399 };
400 
401 /* Key to our per-program-space data.  */
402 static const struct program_space_key<ada_pspace_data> ada_pspace_data_handle;
403 
404 /* Return this module's data for the given program space (PSPACE).
405    If not is found, add a zero'ed one now.
406 
407    This function always returns a valid object.  */
408 
409 static struct ada_pspace_data *
410 get_ada_pspace_data (struct program_space *pspace)
411 {
412   struct ada_pspace_data *data;
413 
414   data = ada_pspace_data_handle.get (pspace);
415   if (data == NULL)
416     data = ada_pspace_data_handle.emplace (pspace);
417 
418   return data;
419 }
420 
421                         /* Utilities */
422 
423 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
424    all typedef layers have been peeled.  Otherwise, return TYPE.
425 
426    Normally, we really expect a typedef type to only have 1 typedef layer.
427    In other words, we really expect the target type of a typedef type to be
428    a non-typedef type.  This is particularly true for Ada units, because
429    the language does not have a typedef vs not-typedef distinction.
430    In that respect, the Ada compiler has been trying to eliminate as many
431    typedef definitions in the debugging information, since they generally
432    do not bring any extra information (we still use typedef under certain
433    circumstances related mostly to the GNAT encoding).
434 
435    Unfortunately, we have seen situations where the debugging information
436    generated by the compiler leads to such multiple typedef layers.  For
437    instance, consider the following example with stabs:
438 
439      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
440      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
441 
442    This is an error in the debugging information which causes type
443    pck__float_array___XUP to be defined twice, and the second time,
444    it is defined as a typedef of a typedef.
445 
446    This is on the fringe of legality as far as debugging information is
447    concerned, and certainly unexpected.  But it is easy to handle these
448    situations correctly, so we can afford to be lenient in this case.  */
449 
450 static struct type *
451 ada_typedef_target_type (struct type *type)
452 {
453   while (type->code () == TYPE_CODE_TYPEDEF)
454     type = TYPE_TARGET_TYPE (type);
455   return type;
456 }
457 
458 /* Given DECODED_NAME a string holding a symbol name in its
459    decoded form (ie using the Ada dotted notation), returns
460    its unqualified name.  */
461 
462 static const char *
463 ada_unqualified_name (const char *decoded_name)
464 {
465   const char *result;
466 
467   /* If the decoded name starts with '<', it means that the encoded
468      name does not follow standard naming conventions, and thus that
469      it is not your typical Ada symbol name.  Trying to unqualify it
470      is therefore pointless and possibly erroneous.  */
471   if (decoded_name[0] == '<')
472     return decoded_name;
473 
474   result = strrchr (decoded_name, '.');
475   if (result != NULL)
476     result++;                   /* Skip the dot...  */
477   else
478     result = decoded_name;
479 
480   return result;
481 }
482 
483 /* Return a string starting with '<', followed by STR, and '>'.  */
484 
485 static std::string
486 add_angle_brackets (const char *str)
487 {
488   return string_printf ("<%s>", str);
489 }
490 
491 /* Assuming V points to an array of S objects,  make sure that it contains at
492    least M objects, updating V and S as necessary.  */
493 
494 #define GROW_VECT(v, s, m)                                    \
495    if ((s) < (m)) (v) = (char *) grow_vect (v, &(s), m, sizeof *(v));
496 
497 /* Assuming VECT points to an array of *SIZE objects of size
498    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
499    updating *SIZE as necessary and returning the (new) array.  */
500 
501 static void *
502 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
503 {
504   if (*size < min_size)
505     {
506       *size *= 2;
507       if (*size < min_size)
508         *size = min_size;
509       vect = xrealloc (vect, *size * element_size);
510     }
511   return vect;
512 }
513 
514 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
515    suffix of FIELD_NAME beginning "___".  */
516 
517 static int
518 field_name_match (const char *field_name, const char *target)
519 {
520   int len = strlen (target);
521 
522   return
523     (strncmp (field_name, target, len) == 0
524      && (field_name[len] == '\0'
525          || (startswith (field_name + len, "___")
526              && strcmp (field_name + strlen (field_name) - 6,
527                         "___XVN") != 0)));
528 }
529 
530 
531 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
532    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
533    and return its index.  This function also handles fields whose name
534    have ___ suffixes because the compiler sometimes alters their name
535    by adding such a suffix to represent fields with certain constraints.
536    If the field could not be found, return a negative number if
537    MAYBE_MISSING is set.  Otherwise raise an error.  */
538 
539 int
540 ada_get_field_index (const struct type *type, const char *field_name,
541                      int maybe_missing)
542 {
543   int fieldno;
544   struct type *struct_type = check_typedef ((struct type *) type);
545 
546   for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++)
547     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
548       return fieldno;
549 
550   if (!maybe_missing)
551     error (_("Unable to find field %s in struct %s.  Aborting"),
552            field_name, struct_type->name ());
553 
554   return -1;
555 }
556 
557 /* The length of the prefix of NAME prior to any "___" suffix.  */
558 
559 int
560 ada_name_prefix_len (const char *name)
561 {
562   if (name == NULL)
563     return 0;
564   else
565     {
566       const char *p = strstr (name, "___");
567 
568       if (p == NULL)
569         return strlen (name);
570       else
571         return p - name;
572     }
573 }
574 
575 /* Return non-zero if SUFFIX is a suffix of STR.
576    Return zero if STR is null.  */
577 
578 static int
579 is_suffix (const char *str, const char *suffix)
580 {
581   int len1, len2;
582 
583   if (str == NULL)
584     return 0;
585   len1 = strlen (str);
586   len2 = strlen (suffix);
587   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
588 }
589 
590 /* The contents of value VAL, treated as a value of type TYPE.  The
591    result is an lval in memory if VAL is.  */
592 
593 static struct value *
594 coerce_unspec_val_to_type (struct value *val, struct type *type)
595 {
596   type = ada_check_typedef (type);
597   if (value_type (val) == type)
598     return val;
599   else
600     {
601       struct value *result;
602 
603       /* Make sure that the object size is not unreasonable before
604          trying to allocate some memory for it.  */
605       ada_ensure_varsize_limit (type);
606 
607       if (value_lazy (val)
608           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
609 	result = allocate_value_lazy (type);
610       else
611 	{
612 	  result = allocate_value (type);
613 	  value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
614 	}
615       set_value_component_location (result, val);
616       set_value_bitsize (result, value_bitsize (val));
617       set_value_bitpos (result, value_bitpos (val));
618       if (VALUE_LVAL (result) == lval_memory)
619 	set_value_address (result, value_address (val));
620       return result;
621     }
622 }
623 
624 static const gdb_byte *
625 cond_offset_host (const gdb_byte *valaddr, long offset)
626 {
627   if (valaddr == NULL)
628     return NULL;
629   else
630     return valaddr + offset;
631 }
632 
633 static CORE_ADDR
634 cond_offset_target (CORE_ADDR address, long offset)
635 {
636   if (address == 0)
637     return 0;
638   else
639     return address + offset;
640 }
641 
642 /* Issue a warning (as for the definition of warning in utils.c, but
643    with exactly one argument rather than ...), unless the limit on the
644    number of warnings has passed during the evaluation of the current
645    expression.  */
646 
647 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
648    provided by "complaint".  */
649 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
650 
651 static void
652 lim_warning (const char *format, ...)
653 {
654   va_list args;
655 
656   va_start (args, format);
657   warnings_issued += 1;
658   if (warnings_issued <= warning_limit)
659     vwarning (format, args);
660 
661   va_end (args);
662 }
663 
664 /* Issue an error if the size of an object of type T is unreasonable,
665    i.e. if it would be a bad idea to allocate a value of this type in
666    GDB.  */
667 
668 void
669 ada_ensure_varsize_limit (const struct type *type)
670 {
671   if (TYPE_LENGTH (type) > varsize_limit)
672     error (_("object size is larger than varsize-limit"));
673 }
674 
675 /* Maximum value of a SIZE-byte signed integer type.  */
676 static LONGEST
677 max_of_size (int size)
678 {
679   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
680 
681   return top_bit | (top_bit - 1);
682 }
683 
684 /* Minimum value of a SIZE-byte signed integer type.  */
685 static LONGEST
686 min_of_size (int size)
687 {
688   return -max_of_size (size) - 1;
689 }
690 
691 /* Maximum value of a SIZE-byte unsigned integer type.  */
692 static ULONGEST
693 umax_of_size (int size)
694 {
695   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
696 
697   return top_bit | (top_bit - 1);
698 }
699 
700 /* Maximum value of integral type T, as a signed quantity.  */
701 static LONGEST
702 max_of_type (struct type *t)
703 {
704   if (TYPE_UNSIGNED (t))
705     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
706   else
707     return max_of_size (TYPE_LENGTH (t));
708 }
709 
710 /* Minimum value of integral type T, as a signed quantity.  */
711 static LONGEST
712 min_of_type (struct type *t)
713 {
714   if (TYPE_UNSIGNED (t))
715     return 0;
716   else
717     return min_of_size (TYPE_LENGTH (t));
718 }
719 
720 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
721 LONGEST
722 ada_discrete_type_high_bound (struct type *type)
723 {
724   type = resolve_dynamic_type (type, {}, 0);
725   switch (type->code ())
726     {
727     case TYPE_CODE_RANGE:
728       {
729 	const dynamic_prop &high = type->bounds ()->high;
730 
731 	if (high.kind () == PROP_CONST)
732 	  return high.const_val ();
733 	else
734 	  {
735 	    gdb_assert (high.kind () == PROP_UNDEFINED);
736 
737 	    /* This happens when trying to evaluate a type's dynamic bound
738 	       without a live target.  There is nothing relevant for us to
739 	       return here, so return 0.  */
740 	    return 0;
741 	  }
742       }
743     case TYPE_CODE_ENUM:
744       return TYPE_FIELD_ENUMVAL (type, type->num_fields () - 1);
745     case TYPE_CODE_BOOL:
746       return 1;
747     case TYPE_CODE_CHAR:
748     case TYPE_CODE_INT:
749       return max_of_type (type);
750     default:
751       error (_("Unexpected type in ada_discrete_type_high_bound."));
752     }
753 }
754 
755 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
756 LONGEST
757 ada_discrete_type_low_bound (struct type *type)
758 {
759   type = resolve_dynamic_type (type, {}, 0);
760   switch (type->code ())
761     {
762     case TYPE_CODE_RANGE:
763       {
764 	const dynamic_prop &low = type->bounds ()->low;
765 
766 	if (low.kind () == PROP_CONST)
767 	  return low.const_val ();
768 	else
769 	  {
770 	    gdb_assert (low.kind () == PROP_UNDEFINED);
771 
772 	    /* This happens when trying to evaluate a type's dynamic bound
773 	       without a live target.  There is nothing relevant for us to
774 	       return here, so return 0.  */
775 	    return 0;
776 	  }
777       }
778     case TYPE_CODE_ENUM:
779       return TYPE_FIELD_ENUMVAL (type, 0);
780     case TYPE_CODE_BOOL:
781       return 0;
782     case TYPE_CODE_CHAR:
783     case TYPE_CODE_INT:
784       return min_of_type (type);
785     default:
786       error (_("Unexpected type in ada_discrete_type_low_bound."));
787     }
788 }
789 
790 /* The identity on non-range types.  For range types, the underlying
791    non-range scalar type.  */
792 
793 static struct type *
794 get_base_type (struct type *type)
795 {
796   while (type != NULL && type->code () == TYPE_CODE_RANGE)
797     {
798       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
799         return type;
800       type = TYPE_TARGET_TYPE (type);
801     }
802   return type;
803 }
804 
805 /* Return a decoded version of the given VALUE.  This means returning
806    a value whose type is obtained by applying all the GNAT-specific
807    encodings, making the resulting type a static but standard description
808    of the initial type.  */
809 
810 struct value *
811 ada_get_decoded_value (struct value *value)
812 {
813   struct type *type = ada_check_typedef (value_type (value));
814 
815   if (ada_is_array_descriptor_type (type)
816       || (ada_is_constrained_packed_array_type (type)
817           && type->code () != TYPE_CODE_PTR))
818     {
819       if (type->code () == TYPE_CODE_TYPEDEF)  /* array access type.  */
820         value = ada_coerce_to_simple_array_ptr (value);
821       else
822         value = ada_coerce_to_simple_array (value);
823     }
824   else
825     value = ada_to_fixed_value (value);
826 
827   return value;
828 }
829 
830 /* Same as ada_get_decoded_value, but with the given TYPE.
831    Because there is no associated actual value for this type,
832    the resulting type might be a best-effort approximation in
833    the case of dynamic types.  */
834 
835 struct type *
836 ada_get_decoded_type (struct type *type)
837 {
838   type = to_static_fixed_type (type);
839   if (ada_is_constrained_packed_array_type (type))
840     type = ada_coerce_to_simple_array_type (type);
841   return type;
842 }
843 
844 
845 
846                                 /* Language Selection */
847 
848 /* If the main program is in Ada, return language_ada, otherwise return LANG
849    (the main program is in Ada iif the adainit symbol is found).  */
850 
851 static enum language
852 ada_update_initial_language (enum language lang)
853 {
854   if (lookup_minimal_symbol ("adainit", NULL, NULL).minsym != NULL)
855     return language_ada;
856 
857   return lang;
858 }
859 
860 /* If the main procedure is written in Ada, then return its name.
861    The result is good until the next call.  Return NULL if the main
862    procedure doesn't appear to be in Ada.  */
863 
864 char *
865 ada_main_name (void)
866 {
867   struct bound_minimal_symbol msym;
868   static gdb::unique_xmalloc_ptr<char> main_program_name;
869 
870   /* For Ada, the name of the main procedure is stored in a specific
871      string constant, generated by the binder.  Look for that symbol,
872      extract its address, and then read that string.  If we didn't find
873      that string, then most probably the main procedure is not written
874      in Ada.  */
875   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
876 
877   if (msym.minsym != NULL)
878     {
879       CORE_ADDR main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
880       if (main_program_name_addr == 0)
881         error (_("Invalid address for Ada main program name."));
882 
883       main_program_name = target_read_string (main_program_name_addr, 1024);
884       return main_program_name.get ();
885     }
886 
887   /* The main procedure doesn't seem to be in Ada.  */
888   return NULL;
889 }
890 
891                                 /* Symbols */
892 
893 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
894    of NULLs.  */
895 
896 const struct ada_opname_map ada_opname_table[] = {
897   {"Oadd", "\"+\"", BINOP_ADD},
898   {"Osubtract", "\"-\"", BINOP_SUB},
899   {"Omultiply", "\"*\"", BINOP_MUL},
900   {"Odivide", "\"/\"", BINOP_DIV},
901   {"Omod", "\"mod\"", BINOP_MOD},
902   {"Orem", "\"rem\"", BINOP_REM},
903   {"Oexpon", "\"**\"", BINOP_EXP},
904   {"Olt", "\"<\"", BINOP_LESS},
905   {"Ole", "\"<=\"", BINOP_LEQ},
906   {"Ogt", "\">\"", BINOP_GTR},
907   {"Oge", "\">=\"", BINOP_GEQ},
908   {"Oeq", "\"=\"", BINOP_EQUAL},
909   {"One", "\"/=\"", BINOP_NOTEQUAL},
910   {"Oand", "\"and\"", BINOP_BITWISE_AND},
911   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
912   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
913   {"Oconcat", "\"&\"", BINOP_CONCAT},
914   {"Oabs", "\"abs\"", UNOP_ABS},
915   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
916   {"Oadd", "\"+\"", UNOP_PLUS},
917   {"Osubtract", "\"-\"", UNOP_NEG},
918   {NULL, NULL}
919 };
920 
921 /* The "encoded" form of DECODED, according to GNAT conventions.  The
922    result is valid until the next call to ada_encode.  If
923    THROW_ERRORS, throw an error if invalid operator name is found.
924    Otherwise, return NULL in that case.  */
925 
926 static char *
927 ada_encode_1 (const char *decoded, bool throw_errors)
928 {
929   static char *encoding_buffer = NULL;
930   static size_t encoding_buffer_size = 0;
931   const char *p;
932   int k;
933 
934   if (decoded == NULL)
935     return NULL;
936 
937   GROW_VECT (encoding_buffer, encoding_buffer_size,
938              2 * strlen (decoded) + 10);
939 
940   k = 0;
941   for (p = decoded; *p != '\0'; p += 1)
942     {
943       if (*p == '.')
944         {
945           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
946           k += 2;
947         }
948       else if (*p == '"')
949         {
950           const struct ada_opname_map *mapping;
951 
952           for (mapping = ada_opname_table;
953                mapping->encoded != NULL
954                && !startswith (p, mapping->decoded); mapping += 1)
955             ;
956           if (mapping->encoded == NULL)
957 	    {
958 	      if (throw_errors)
959 		error (_("invalid Ada operator name: %s"), p);
960 	      else
961 		return NULL;
962 	    }
963           strcpy (encoding_buffer + k, mapping->encoded);
964           k += strlen (mapping->encoded);
965           break;
966         }
967       else
968         {
969           encoding_buffer[k] = *p;
970           k += 1;
971         }
972     }
973 
974   encoding_buffer[k] = '\0';
975   return encoding_buffer;
976 }
977 
978 /* The "encoded" form of DECODED, according to GNAT conventions.
979    The result is valid until the next call to ada_encode.  */
980 
981 char *
982 ada_encode (const char *decoded)
983 {
984   return ada_encode_1 (decoded, true);
985 }
986 
987 /* Return NAME folded to lower case, or, if surrounded by single
988    quotes, unfolded, but with the quotes stripped away.  Result good
989    to next call.  */
990 
991 static char *
992 ada_fold_name (gdb::string_view name)
993 {
994   static char *fold_buffer = NULL;
995   static size_t fold_buffer_size = 0;
996 
997   int len = name.size ();
998   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
999 
1000   if (name[0] == '\'')
1001     {
1002       strncpy (fold_buffer, name.data () + 1, len - 2);
1003       fold_buffer[len - 2] = '\000';
1004     }
1005   else
1006     {
1007       int i;
1008 
1009       for (i = 0; i <= len; i += 1)
1010         fold_buffer[i] = tolower (name[i]);
1011     }
1012 
1013   return fold_buffer;
1014 }
1015 
1016 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1017 
1018 static int
1019 is_lower_alphanum (const char c)
1020 {
1021   return (isdigit (c) || (isalpha (c) && islower (c)));
1022 }
1023 
1024 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1025    This function saves in LEN the length of that same symbol name but
1026    without either of these suffixes:
1027      . .{DIGIT}+
1028      . ${DIGIT}+
1029      . ___{DIGIT}+
1030      . __{DIGIT}+.
1031 
1032    These are suffixes introduced by the compiler for entities such as
1033    nested subprogram for instance, in order to avoid name clashes.
1034    They do not serve any purpose for the debugger.  */
1035 
1036 static void
1037 ada_remove_trailing_digits (const char *encoded, int *len)
1038 {
1039   if (*len > 1 && isdigit (encoded[*len - 1]))
1040     {
1041       int i = *len - 2;
1042 
1043       while (i > 0 && isdigit (encoded[i]))
1044         i--;
1045       if (i >= 0 && encoded[i] == '.')
1046         *len = i;
1047       else if (i >= 0 && encoded[i] == '$')
1048         *len = i;
1049       else if (i >= 2 && startswith (encoded + i - 2, "___"))
1050         *len = i - 2;
1051       else if (i >= 1 && startswith (encoded + i - 1, "__"))
1052         *len = i - 1;
1053     }
1054 }
1055 
1056 /* Remove the suffix introduced by the compiler for protected object
1057    subprograms.  */
1058 
1059 static void
1060 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1061 {
1062   /* Remove trailing N.  */
1063 
1064   /* Protected entry subprograms are broken into two
1065      separate subprograms: The first one is unprotected, and has
1066      a 'N' suffix; the second is the protected version, and has
1067      the 'P' suffix.  The second calls the first one after handling
1068      the protection.  Since the P subprograms are internally generated,
1069      we leave these names undecoded, giving the user a clue that this
1070      entity is internal.  */
1071 
1072   if (*len > 1
1073       && encoded[*len - 1] == 'N'
1074       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1075     *len = *len - 1;
1076 }
1077 
1078 /* If ENCODED follows the GNAT entity encoding conventions, then return
1079    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1080    replaced by ENCODED.  */
1081 
1082 std::string
1083 ada_decode (const char *encoded)
1084 {
1085   int i, j;
1086   int len0;
1087   const char *p;
1088   int at_start_name;
1089   std::string decoded;
1090 
1091   /* With function descriptors on PPC64, the value of a symbol named
1092      ".FN", if it exists, is the entry point of the function "FN".  */
1093   if (encoded[0] == '.')
1094     encoded += 1;
1095 
1096   /* The name of the Ada main procedure starts with "_ada_".
1097      This prefix is not part of the decoded name, so skip this part
1098      if we see this prefix.  */
1099   if (startswith (encoded, "_ada_"))
1100     encoded += 5;
1101 
1102   /* If the name starts with '_', then it is not a properly encoded
1103      name, so do not attempt to decode it.  Similarly, if the name
1104      starts with '<', the name should not be decoded.  */
1105   if (encoded[0] == '_' || encoded[0] == '<')
1106     goto Suppress;
1107 
1108   len0 = strlen (encoded);
1109 
1110   ada_remove_trailing_digits (encoded, &len0);
1111   ada_remove_po_subprogram_suffix (encoded, &len0);
1112 
1113   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1114      the suffix is located before the current "end" of ENCODED.  We want
1115      to avoid re-matching parts of ENCODED that have previously been
1116      marked as discarded (by decrementing LEN0).  */
1117   p = strstr (encoded, "___");
1118   if (p != NULL && p - encoded < len0 - 3)
1119     {
1120       if (p[3] == 'X')
1121         len0 = p - encoded;
1122       else
1123         goto Suppress;
1124     }
1125 
1126   /* Remove any trailing TKB suffix.  It tells us that this symbol
1127      is for the body of a task, but that information does not actually
1128      appear in the decoded name.  */
1129 
1130   if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
1131     len0 -= 3;
1132 
1133   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1134      from the TKB suffix because it is used for non-anonymous task
1135      bodies.  */
1136 
1137   if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
1138     len0 -= 2;
1139 
1140   /* Remove trailing "B" suffixes.  */
1141   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1142 
1143   if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
1144     len0 -= 1;
1145 
1146   /* Make decoded big enough for possible expansion by operator name.  */
1147 
1148   decoded.resize (2 * len0 + 1, 'X');
1149 
1150   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1151 
1152   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1153     {
1154       i = len0 - 2;
1155       while ((i >= 0 && isdigit (encoded[i]))
1156              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1157         i -= 1;
1158       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1159         len0 = i - 1;
1160       else if (encoded[i] == '$')
1161         len0 = i;
1162     }
1163 
1164   /* The first few characters that are not alphabetic are not part
1165      of any encoding we use, so we can copy them over verbatim.  */
1166 
1167   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1168     decoded[j] = encoded[i];
1169 
1170   at_start_name = 1;
1171   while (i < len0)
1172     {
1173       /* Is this a symbol function?  */
1174       if (at_start_name && encoded[i] == 'O')
1175         {
1176           int k;
1177 
1178           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1179             {
1180               int op_len = strlen (ada_opname_table[k].encoded);
1181               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1182                             op_len - 1) == 0)
1183                   && !isalnum (encoded[i + op_len]))
1184                 {
1185                   strcpy (&decoded.front() + j, ada_opname_table[k].decoded);
1186                   at_start_name = 0;
1187                   i += op_len;
1188                   j += strlen (ada_opname_table[k].decoded);
1189                   break;
1190                 }
1191             }
1192           if (ada_opname_table[k].encoded != NULL)
1193             continue;
1194         }
1195       at_start_name = 0;
1196 
1197       /* Replace "TK__" with "__", which will eventually be translated
1198          into "." (just below).  */
1199 
1200       if (i < len0 - 4 && startswith (encoded + i, "TK__"))
1201         i += 2;
1202 
1203       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1204          be translated into "." (just below).  These are internal names
1205          generated for anonymous blocks inside which our symbol is nested.  */
1206 
1207       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1208           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1209           && isdigit (encoded [i+4]))
1210         {
1211           int k = i + 5;
1212 
1213           while (k < len0 && isdigit (encoded[k]))
1214             k++;  /* Skip any extra digit.  */
1215 
1216           /* Double-check that the "__B_{DIGITS}+" sequence we found
1217              is indeed followed by "__".  */
1218           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1219             i = k;
1220         }
1221 
1222       /* Remove _E{DIGITS}+[sb] */
1223 
1224       /* Just as for protected object subprograms, there are 2 categories
1225          of subprograms created by the compiler for each entry.  The first
1226          one implements the actual entry code, and has a suffix following
1227          the convention above; the second one implements the barrier and
1228          uses the same convention as above, except that the 'E' is replaced
1229          by a 'B'.
1230 
1231          Just as above, we do not decode the name of barrier functions
1232          to give the user a clue that the code he is debugging has been
1233          internally generated.  */
1234 
1235       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1236           && isdigit (encoded[i+2]))
1237         {
1238           int k = i + 3;
1239 
1240           while (k < len0 && isdigit (encoded[k]))
1241             k++;
1242 
1243           if (k < len0
1244               && (encoded[k] == 'b' || encoded[k] == 's'))
1245             {
1246               k++;
1247               /* Just as an extra precaution, make sure that if this
1248                  suffix is followed by anything else, it is a '_'.
1249                  Otherwise, we matched this sequence by accident.  */
1250               if (k == len0
1251                   || (k < len0 && encoded[k] == '_'))
1252                 i = k;
1253             }
1254         }
1255 
1256       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1257          the GNAT front-end in protected object subprograms.  */
1258 
1259       if (i < len0 + 3
1260           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1261         {
1262           /* Backtrack a bit up until we reach either the begining of
1263              the encoded name, or "__".  Make sure that we only find
1264              digits or lowercase characters.  */
1265           const char *ptr = encoded + i - 1;
1266 
1267           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1268             ptr--;
1269           if (ptr < encoded
1270               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1271             i++;
1272         }
1273 
1274       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1275         {
1276           /* This is a X[bn]* sequence not separated from the previous
1277              part of the name with a non-alpha-numeric character (in other
1278              words, immediately following an alpha-numeric character), then
1279              verify that it is placed at the end of the encoded name.  If
1280              not, then the encoding is not valid and we should abort the
1281              decoding.  Otherwise, just skip it, it is used in body-nested
1282              package names.  */
1283           do
1284             i += 1;
1285           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1286           if (i < len0)
1287             goto Suppress;
1288         }
1289       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1290         {
1291          /* Replace '__' by '.'.  */
1292           decoded[j] = '.';
1293           at_start_name = 1;
1294           i += 2;
1295           j += 1;
1296         }
1297       else
1298         {
1299           /* It's a character part of the decoded name, so just copy it
1300              over.  */
1301           decoded[j] = encoded[i];
1302           i += 1;
1303           j += 1;
1304         }
1305     }
1306   decoded.resize (j);
1307 
1308   /* Decoded names should never contain any uppercase character.
1309      Double-check this, and abort the decoding if we find one.  */
1310 
1311   for (i = 0; i < decoded.length(); ++i)
1312     if (isupper (decoded[i]) || decoded[i] == ' ')
1313       goto Suppress;
1314 
1315   return decoded;
1316 
1317 Suppress:
1318   if (encoded[0] == '<')
1319     decoded = encoded;
1320   else
1321     decoded = '<' + std::string(encoded) + '>';
1322   return decoded;
1323 
1324 }
1325 
1326 /* Table for keeping permanent unique copies of decoded names.  Once
1327    allocated, names in this table are never released.  While this is a
1328    storage leak, it should not be significant unless there are massive
1329    changes in the set of decoded names in successive versions of a
1330    symbol table loaded during a single session.  */
1331 static struct htab *decoded_names_store;
1332 
1333 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1334    in the language-specific part of GSYMBOL, if it has not been
1335    previously computed.  Tries to save the decoded name in the same
1336    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1337    in any case, the decoded symbol has a lifetime at least that of
1338    GSYMBOL).
1339    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1340    const, but nevertheless modified to a semantically equivalent form
1341    when a decoded name is cached in it.  */
1342 
1343 const char *
1344 ada_decode_symbol (const struct general_symbol_info *arg)
1345 {
1346   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1347   const char **resultp =
1348     &gsymbol->language_specific.demangled_name;
1349 
1350   if (!gsymbol->ada_mangled)
1351     {
1352       std::string decoded = ada_decode (gsymbol->linkage_name ());
1353       struct obstack *obstack = gsymbol->language_specific.obstack;
1354 
1355       gsymbol->ada_mangled = 1;
1356 
1357       if (obstack != NULL)
1358 	*resultp = obstack_strdup (obstack, decoded.c_str ());
1359       else
1360         {
1361 	  /* Sometimes, we can't find a corresponding objfile, in
1362 	     which case, we put the result on the heap.  Since we only
1363 	     decode when needed, we hope this usually does not cause a
1364 	     significant memory leak (FIXME).  */
1365 
1366           char **slot = (char **) htab_find_slot (decoded_names_store,
1367                                                   decoded.c_str (), INSERT);
1368 
1369           if (*slot == NULL)
1370             *slot = xstrdup (decoded.c_str ());
1371           *resultp = *slot;
1372         }
1373     }
1374 
1375   return *resultp;
1376 }
1377 
1378 static char *
1379 ada_la_decode (const char *encoded, int options)
1380 {
1381   return xstrdup (ada_decode (encoded).c_str ());
1382 }
1383 
1384 
1385 
1386                                 /* Arrays */
1387 
1388 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1389    generated by the GNAT compiler to describe the index type used
1390    for each dimension of an array, check whether it follows the latest
1391    known encoding.  If not, fix it up to conform to the latest encoding.
1392    Otherwise, do nothing.  This function also does nothing if
1393    INDEX_DESC_TYPE is NULL.
1394 
1395    The GNAT encoding used to describe the array index type evolved a bit.
1396    Initially, the information would be provided through the name of each
1397    field of the structure type only, while the type of these fields was
1398    described as unspecified and irrelevant.  The debugger was then expected
1399    to perform a global type lookup using the name of that field in order
1400    to get access to the full index type description.  Because these global
1401    lookups can be very expensive, the encoding was later enhanced to make
1402    the global lookup unnecessary by defining the field type as being
1403    the full index type description.
1404 
1405    The purpose of this routine is to allow us to support older versions
1406    of the compiler by detecting the use of the older encoding, and by
1407    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1408    we essentially replace each field's meaningless type by the associated
1409    index subtype).  */
1410 
1411 void
1412 ada_fixup_array_indexes_type (struct type *index_desc_type)
1413 {
1414   int i;
1415 
1416   if (index_desc_type == NULL)
1417     return;
1418   gdb_assert (index_desc_type->num_fields () > 0);
1419 
1420   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1421      to check one field only, no need to check them all).  If not, return
1422      now.
1423 
1424      If our INDEX_DESC_TYPE was generated using the older encoding,
1425      the field type should be a meaningless integer type whose name
1426      is not equal to the field name.  */
1427   if (index_desc_type->field (0).type ()->name () != NULL
1428       && strcmp (index_desc_type->field (0).type ()->name (),
1429                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1430     return;
1431 
1432   /* Fixup each field of INDEX_DESC_TYPE.  */
1433   for (i = 0; i < index_desc_type->num_fields (); i++)
1434    {
1435      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1436      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1437 
1438      if (raw_type)
1439        index_desc_type->field (i).set_type (raw_type);
1440    }
1441 }
1442 
1443 /* The desc_* routines return primitive portions of array descriptors
1444    (fat pointers).  */
1445 
1446 /* The descriptor or array type, if any, indicated by TYPE; removes
1447    level of indirection, if needed.  */
1448 
1449 static struct type *
1450 desc_base_type (struct type *type)
1451 {
1452   if (type == NULL)
1453     return NULL;
1454   type = ada_check_typedef (type);
1455   if (type->code () == TYPE_CODE_TYPEDEF)
1456     type = ada_typedef_target_type (type);
1457 
1458   if (type != NULL
1459       && (type->code () == TYPE_CODE_PTR
1460           || type->code () == TYPE_CODE_REF))
1461     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1462   else
1463     return type;
1464 }
1465 
1466 /* True iff TYPE indicates a "thin" array pointer type.  */
1467 
1468 static int
1469 is_thin_pntr (struct type *type)
1470 {
1471   return
1472     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1473     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1474 }
1475 
1476 /* The descriptor type for thin pointer type TYPE.  */
1477 
1478 static struct type *
1479 thin_descriptor_type (struct type *type)
1480 {
1481   struct type *base_type = desc_base_type (type);
1482 
1483   if (base_type == NULL)
1484     return NULL;
1485   if (is_suffix (ada_type_name (base_type), "___XVE"))
1486     return base_type;
1487   else
1488     {
1489       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1490 
1491       if (alt_type == NULL)
1492         return base_type;
1493       else
1494         return alt_type;
1495     }
1496 }
1497 
1498 /* A pointer to the array data for thin-pointer value VAL.  */
1499 
1500 static struct value *
1501 thin_data_pntr (struct value *val)
1502 {
1503   struct type *type = ada_check_typedef (value_type (val));
1504   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1505 
1506   data_type = lookup_pointer_type (data_type);
1507 
1508   if (type->code () == TYPE_CODE_PTR)
1509     return value_cast (data_type, value_copy (val));
1510   else
1511     return value_from_longest (data_type, value_address (val));
1512 }
1513 
1514 /* True iff TYPE indicates a "thick" array pointer type.  */
1515 
1516 static int
1517 is_thick_pntr (struct type *type)
1518 {
1519   type = desc_base_type (type);
1520   return (type != NULL && type->code () == TYPE_CODE_STRUCT
1521           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1522 }
1523 
1524 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1525    pointer to one, the type of its bounds data; otherwise, NULL.  */
1526 
1527 static struct type *
1528 desc_bounds_type (struct type *type)
1529 {
1530   struct type *r;
1531 
1532   type = desc_base_type (type);
1533 
1534   if (type == NULL)
1535     return NULL;
1536   else if (is_thin_pntr (type))
1537     {
1538       type = thin_descriptor_type (type);
1539       if (type == NULL)
1540         return NULL;
1541       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1542       if (r != NULL)
1543         return ada_check_typedef (r);
1544     }
1545   else if (type->code () == TYPE_CODE_STRUCT)
1546     {
1547       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1548       if (r != NULL)
1549         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1550     }
1551   return NULL;
1552 }
1553 
1554 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1555    one, a pointer to its bounds data.   Otherwise NULL.  */
1556 
1557 static struct value *
1558 desc_bounds (struct value *arr)
1559 {
1560   struct type *type = ada_check_typedef (value_type (arr));
1561 
1562   if (is_thin_pntr (type))
1563     {
1564       struct type *bounds_type =
1565         desc_bounds_type (thin_descriptor_type (type));
1566       LONGEST addr;
1567 
1568       if (bounds_type == NULL)
1569         error (_("Bad GNAT array descriptor"));
1570 
1571       /* NOTE: The following calculation is not really kosher, but
1572          since desc_type is an XVE-encoded type (and shouldn't be),
1573          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1574       if (type->code () == TYPE_CODE_PTR)
1575         addr = value_as_long (arr);
1576       else
1577         addr = value_address (arr);
1578 
1579       return
1580         value_from_longest (lookup_pointer_type (bounds_type),
1581                             addr - TYPE_LENGTH (bounds_type));
1582     }
1583 
1584   else if (is_thick_pntr (type))
1585     {
1586       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1587 					       _("Bad GNAT array descriptor"));
1588       struct type *p_bounds_type = value_type (p_bounds);
1589 
1590       if (p_bounds_type
1591 	  && p_bounds_type->code () == TYPE_CODE_PTR)
1592 	{
1593 	  struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1594 
1595 	  if (TYPE_STUB (target_type))
1596 	    p_bounds = value_cast (lookup_pointer_type
1597 				   (ada_check_typedef (target_type)),
1598 				   p_bounds);
1599 	}
1600       else
1601 	error (_("Bad GNAT array descriptor"));
1602 
1603       return p_bounds;
1604     }
1605   else
1606     return NULL;
1607 }
1608 
1609 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1610    position of the field containing the address of the bounds data.  */
1611 
1612 static int
1613 fat_pntr_bounds_bitpos (struct type *type)
1614 {
1615   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1616 }
1617 
1618 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1619    size of the field containing the address of the bounds data.  */
1620 
1621 static int
1622 fat_pntr_bounds_bitsize (struct type *type)
1623 {
1624   type = desc_base_type (type);
1625 
1626   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1627     return TYPE_FIELD_BITSIZE (type, 1);
1628   else
1629     return 8 * TYPE_LENGTH (ada_check_typedef (type->field (1).type ()));
1630 }
1631 
1632 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1633    pointer to one, the type of its array data (a array-with-no-bounds type);
1634    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1635    data.  */
1636 
1637 static struct type *
1638 desc_data_target_type (struct type *type)
1639 {
1640   type = desc_base_type (type);
1641 
1642   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1643   if (is_thin_pntr (type))
1644     return desc_base_type (thin_descriptor_type (type)->field (1).type ());
1645   else if (is_thick_pntr (type))
1646     {
1647       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1648 
1649       if (data_type
1650 	  && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR)
1651 	return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1652     }
1653 
1654   return NULL;
1655 }
1656 
1657 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1658    its array data.  */
1659 
1660 static struct value *
1661 desc_data (struct value *arr)
1662 {
1663   struct type *type = value_type (arr);
1664 
1665   if (is_thin_pntr (type))
1666     return thin_data_pntr (arr);
1667   else if (is_thick_pntr (type))
1668     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1669                              _("Bad GNAT array descriptor"));
1670   else
1671     return NULL;
1672 }
1673 
1674 
1675 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1676    position of the field containing the address of the data.  */
1677 
1678 static int
1679 fat_pntr_data_bitpos (struct type *type)
1680 {
1681   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1682 }
1683 
1684 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1685    size of the field containing the address of the data.  */
1686 
1687 static int
1688 fat_pntr_data_bitsize (struct type *type)
1689 {
1690   type = desc_base_type (type);
1691 
1692   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1693     return TYPE_FIELD_BITSIZE (type, 0);
1694   else
1695     return TARGET_CHAR_BIT * TYPE_LENGTH (type->field (0).type ());
1696 }
1697 
1698 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1699    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1700    bound, if WHICH is 1.  The first bound is I=1.  */
1701 
1702 static struct value *
1703 desc_one_bound (struct value *bounds, int i, int which)
1704 {
1705   char bound_name[20];
1706   xsnprintf (bound_name, sizeof (bound_name), "%cB%d",
1707 	     which ? 'U' : 'L', i - 1);
1708   return value_struct_elt (&bounds, NULL, bound_name, NULL,
1709                            _("Bad GNAT array descriptor bounds"));
1710 }
1711 
1712 /* If BOUNDS is an array-bounds structure type, return the bit position
1713    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1714    bound, if WHICH is 1.  The first bound is I=1.  */
1715 
1716 static int
1717 desc_bound_bitpos (struct type *type, int i, int which)
1718 {
1719   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1720 }
1721 
1722 /* If BOUNDS is an array-bounds structure type, return the bit field size
1723    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1724    bound, if WHICH is 1.  The first bound is I=1.  */
1725 
1726 static int
1727 desc_bound_bitsize (struct type *type, int i, int which)
1728 {
1729   type = desc_base_type (type);
1730 
1731   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1732     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1733   else
1734     return 8 * TYPE_LENGTH (type->field (2 * i + which - 2).type ());
1735 }
1736 
1737 /* If TYPE is the type of an array-bounds structure, the type of its
1738    Ith bound (numbering from 1).  Otherwise, NULL.  */
1739 
1740 static struct type *
1741 desc_index_type (struct type *type, int i)
1742 {
1743   type = desc_base_type (type);
1744 
1745   if (type->code () == TYPE_CODE_STRUCT)
1746     {
1747       char bound_name[20];
1748       xsnprintf (bound_name, sizeof (bound_name), "LB%d", i - 1);
1749       return lookup_struct_elt_type (type, bound_name, 1);
1750     }
1751   else
1752     return NULL;
1753 }
1754 
1755 /* The number of index positions in the array-bounds type TYPE.
1756    Return 0 if TYPE is NULL.  */
1757 
1758 static int
1759 desc_arity (struct type *type)
1760 {
1761   type = desc_base_type (type);
1762 
1763   if (type != NULL)
1764     return type->num_fields () / 2;
1765   return 0;
1766 }
1767 
1768 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1769    an array descriptor type (representing an unconstrained array
1770    type).  */
1771 
1772 static int
1773 ada_is_direct_array_type (struct type *type)
1774 {
1775   if (type == NULL)
1776     return 0;
1777   type = ada_check_typedef (type);
1778   return (type->code () == TYPE_CODE_ARRAY
1779           || ada_is_array_descriptor_type (type));
1780 }
1781 
1782 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1783  * to one.  */
1784 
1785 static int
1786 ada_is_array_type (struct type *type)
1787 {
1788   while (type != NULL
1789 	 && (type->code () == TYPE_CODE_PTR
1790 	     || type->code () == TYPE_CODE_REF))
1791     type = TYPE_TARGET_TYPE (type);
1792   return ada_is_direct_array_type (type);
1793 }
1794 
1795 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1796 
1797 int
1798 ada_is_simple_array_type (struct type *type)
1799 {
1800   if (type == NULL)
1801     return 0;
1802   type = ada_check_typedef (type);
1803   return (type->code () == TYPE_CODE_ARRAY
1804 	  || (type->code () == TYPE_CODE_PTR
1805 	      && (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ()
1806 		  == TYPE_CODE_ARRAY)));
1807 }
1808 
1809 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1810 
1811 int
1812 ada_is_array_descriptor_type (struct type *type)
1813 {
1814   struct type *data_type = desc_data_target_type (type);
1815 
1816   if (type == NULL)
1817     return 0;
1818   type = ada_check_typedef (type);
1819   return (data_type != NULL
1820 	  && data_type->code () == TYPE_CODE_ARRAY
1821 	  && desc_arity (desc_bounds_type (type)) > 0);
1822 }
1823 
1824 /* Non-zero iff type is a partially mal-formed GNAT array
1825    descriptor.  FIXME: This is to compensate for some problems with
1826    debugging output from GNAT.  Re-examine periodically to see if it
1827    is still needed.  */
1828 
1829 int
1830 ada_is_bogus_array_descriptor (struct type *type)
1831 {
1832   return
1833     type != NULL
1834     && type->code () == TYPE_CODE_STRUCT
1835     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1836         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1837     && !ada_is_array_descriptor_type (type);
1838 }
1839 
1840 
1841 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1842    (fat pointer) returns the type of the array data described---specifically,
1843    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1844    in from the descriptor; otherwise, they are left unspecified.  If
1845    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1846    returns NULL.  The result is simply the type of ARR if ARR is not
1847    a descriptor.  */
1848 
1849 static struct type *
1850 ada_type_of_array (struct value *arr, int bounds)
1851 {
1852   if (ada_is_constrained_packed_array_type (value_type (arr)))
1853     return decode_constrained_packed_array_type (value_type (arr));
1854 
1855   if (!ada_is_array_descriptor_type (value_type (arr)))
1856     return value_type (arr);
1857 
1858   if (!bounds)
1859     {
1860       struct type *array_type =
1861 	ada_check_typedef (desc_data_target_type (value_type (arr)));
1862 
1863       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1864 	TYPE_FIELD_BITSIZE (array_type, 0) =
1865 	  decode_packed_array_bitsize (value_type (arr));
1866 
1867       return array_type;
1868     }
1869   else
1870     {
1871       struct type *elt_type;
1872       int arity;
1873       struct value *descriptor;
1874 
1875       elt_type = ada_array_element_type (value_type (arr), -1);
1876       arity = ada_array_arity (value_type (arr));
1877 
1878       if (elt_type == NULL || arity == 0)
1879         return ada_check_typedef (value_type (arr));
1880 
1881       descriptor = desc_bounds (arr);
1882       if (value_as_long (descriptor) == 0)
1883         return NULL;
1884       while (arity > 0)
1885         {
1886           struct type *range_type = alloc_type_copy (value_type (arr));
1887           struct type *array_type = alloc_type_copy (value_type (arr));
1888           struct value *low = desc_one_bound (descriptor, arity, 0);
1889           struct value *high = desc_one_bound (descriptor, arity, 1);
1890 
1891           arity -= 1;
1892           create_static_range_type (range_type, value_type (low),
1893 				    longest_to_int (value_as_long (low)),
1894 				    longest_to_int (value_as_long (high)));
1895           elt_type = create_array_type (array_type, elt_type, range_type);
1896 
1897 	  if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1898 	    {
1899 	      /* We need to store the element packed bitsize, as well as
1900 	         recompute the array size, because it was previously
1901 		 computed based on the unpacked element size.  */
1902 	      LONGEST lo = value_as_long (low);
1903 	      LONGEST hi = value_as_long (high);
1904 
1905 	      TYPE_FIELD_BITSIZE (elt_type, 0) =
1906 		decode_packed_array_bitsize (value_type (arr));
1907 	      /* If the array has no element, then the size is already
1908 	         zero, and does not need to be recomputed.  */
1909 	      if (lo < hi)
1910 		{
1911 		  int array_bitsize =
1912 		        (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
1913 
1914 		  TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1915 		}
1916 	    }
1917         }
1918 
1919       return lookup_pointer_type (elt_type);
1920     }
1921 }
1922 
1923 /* If ARR does not represent an array, returns ARR unchanged.
1924    Otherwise, returns either a standard GDB array with bounds set
1925    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1926    GDB array.  Returns NULL if ARR is a null fat pointer.  */
1927 
1928 struct value *
1929 ada_coerce_to_simple_array_ptr (struct value *arr)
1930 {
1931   if (ada_is_array_descriptor_type (value_type (arr)))
1932     {
1933       struct type *arrType = ada_type_of_array (arr, 1);
1934 
1935       if (arrType == NULL)
1936         return NULL;
1937       return value_cast (arrType, value_copy (desc_data (arr)));
1938     }
1939   else if (ada_is_constrained_packed_array_type (value_type (arr)))
1940     return decode_constrained_packed_array (arr);
1941   else
1942     return arr;
1943 }
1944 
1945 /* If ARR does not represent an array, returns ARR unchanged.
1946    Otherwise, returns a standard GDB array describing ARR (which may
1947    be ARR itself if it already is in the proper form).  */
1948 
1949 struct value *
1950 ada_coerce_to_simple_array (struct value *arr)
1951 {
1952   if (ada_is_array_descriptor_type (value_type (arr)))
1953     {
1954       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1955 
1956       if (arrVal == NULL)
1957         error (_("Bounds unavailable for null array pointer."));
1958       ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
1959       return value_ind (arrVal);
1960     }
1961   else if (ada_is_constrained_packed_array_type (value_type (arr)))
1962     return decode_constrained_packed_array (arr);
1963   else
1964     return arr;
1965 }
1966 
1967 /* If TYPE represents a GNAT array type, return it translated to an
1968    ordinary GDB array type (possibly with BITSIZE fields indicating
1969    packing).  For other types, is the identity.  */
1970 
1971 struct type *
1972 ada_coerce_to_simple_array_type (struct type *type)
1973 {
1974   if (ada_is_constrained_packed_array_type (type))
1975     return decode_constrained_packed_array_type (type);
1976 
1977   if (ada_is_array_descriptor_type (type))
1978     return ada_check_typedef (desc_data_target_type (type));
1979 
1980   return type;
1981 }
1982 
1983 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
1984 
1985 static int
1986 ada_is_packed_array_type  (struct type *type)
1987 {
1988   if (type == NULL)
1989     return 0;
1990   type = desc_base_type (type);
1991   type = ada_check_typedef (type);
1992   return
1993     ada_type_name (type) != NULL
1994     && strstr (ada_type_name (type), "___XP") != NULL;
1995 }
1996 
1997 /* Non-zero iff TYPE represents a standard GNAT constrained
1998    packed-array type.  */
1999 
2000 int
2001 ada_is_constrained_packed_array_type (struct type *type)
2002 {
2003   return ada_is_packed_array_type (type)
2004     && !ada_is_array_descriptor_type (type);
2005 }
2006 
2007 /* Non-zero iff TYPE represents an array descriptor for a
2008    unconstrained packed-array type.  */
2009 
2010 static int
2011 ada_is_unconstrained_packed_array_type (struct type *type)
2012 {
2013   return ada_is_packed_array_type (type)
2014     && ada_is_array_descriptor_type (type);
2015 }
2016 
2017 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2018    return the size of its elements in bits.  */
2019 
2020 static long
2021 decode_packed_array_bitsize (struct type *type)
2022 {
2023   const char *raw_name;
2024   const char *tail;
2025   long bits;
2026 
2027   /* Access to arrays implemented as fat pointers are encoded as a typedef
2028      of the fat pointer type.  We need the name of the fat pointer type
2029      to do the decoding, so strip the typedef layer.  */
2030   if (type->code () == TYPE_CODE_TYPEDEF)
2031     type = ada_typedef_target_type (type);
2032 
2033   raw_name = ada_type_name (ada_check_typedef (type));
2034   if (!raw_name)
2035     raw_name = ada_type_name (desc_base_type (type));
2036 
2037   if (!raw_name)
2038     return 0;
2039 
2040   tail = strstr (raw_name, "___XP");
2041   gdb_assert (tail != NULL);
2042 
2043   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2044     {
2045       lim_warning
2046 	(_("could not understand bit size information on packed array"));
2047       return 0;
2048     }
2049 
2050   return bits;
2051 }
2052 
2053 /* Given that TYPE is a standard GDB array type with all bounds filled
2054    in, and that the element size of its ultimate scalar constituents
2055    (that is, either its elements, or, if it is an array of arrays, its
2056    elements' elements, etc.) is *ELT_BITS, return an identical type,
2057    but with the bit sizes of its elements (and those of any
2058    constituent arrays) recorded in the BITSIZE components of its
2059    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2060    in bits.
2061 
2062    Note that, for arrays whose index type has an XA encoding where
2063    a bound references a record discriminant, getting that discriminant,
2064    and therefore the actual value of that bound, is not possible
2065    because none of the given parameters gives us access to the record.
2066    This function assumes that it is OK in the context where it is being
2067    used to return an array whose bounds are still dynamic and where
2068    the length is arbitrary.  */
2069 
2070 static struct type *
2071 constrained_packed_array_type (struct type *type, long *elt_bits)
2072 {
2073   struct type *new_elt_type;
2074   struct type *new_type;
2075   struct type *index_type_desc;
2076   struct type *index_type;
2077   LONGEST low_bound, high_bound;
2078 
2079   type = ada_check_typedef (type);
2080   if (type->code () != TYPE_CODE_ARRAY)
2081     return type;
2082 
2083   index_type_desc = ada_find_parallel_type (type, "___XA");
2084   if (index_type_desc)
2085     index_type = to_fixed_range_type (index_type_desc->field (0).type (),
2086 				      NULL);
2087   else
2088     index_type = type->index_type ();
2089 
2090   new_type = alloc_type_copy (type);
2091   new_elt_type =
2092     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2093 				   elt_bits);
2094   create_array_type (new_type, new_elt_type, index_type);
2095   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2096   new_type->set_name (ada_type_name (type));
2097 
2098   if ((check_typedef (index_type)->code () == TYPE_CODE_RANGE
2099        && is_dynamic_type (check_typedef (index_type)))
2100       || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2101     low_bound = high_bound = 0;
2102   if (high_bound < low_bound)
2103     *elt_bits = TYPE_LENGTH (new_type) = 0;
2104   else
2105     {
2106       *elt_bits *= (high_bound - low_bound + 1);
2107       TYPE_LENGTH (new_type) =
2108         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2109     }
2110 
2111   TYPE_FIXED_INSTANCE (new_type) = 1;
2112   return new_type;
2113 }
2114 
2115 /* The array type encoded by TYPE, where
2116    ada_is_constrained_packed_array_type (TYPE).  */
2117 
2118 static struct type *
2119 decode_constrained_packed_array_type (struct type *type)
2120 {
2121   const char *raw_name = ada_type_name (ada_check_typedef (type));
2122   char *name;
2123   const char *tail;
2124   struct type *shadow_type;
2125   long bits;
2126 
2127   if (!raw_name)
2128     raw_name = ada_type_name (desc_base_type (type));
2129 
2130   if (!raw_name)
2131     return NULL;
2132 
2133   name = (char *) alloca (strlen (raw_name) + 1);
2134   tail = strstr (raw_name, "___XP");
2135   type = desc_base_type (type);
2136 
2137   memcpy (name, raw_name, tail - raw_name);
2138   name[tail - raw_name] = '\000';
2139 
2140   shadow_type = ada_find_parallel_type_with_name (type, name);
2141 
2142   if (shadow_type == NULL)
2143     {
2144       lim_warning (_("could not find bounds information on packed array"));
2145       return NULL;
2146     }
2147   shadow_type = check_typedef (shadow_type);
2148 
2149   if (shadow_type->code () != TYPE_CODE_ARRAY)
2150     {
2151       lim_warning (_("could not understand bounds "
2152 		     "information on packed array"));
2153       return NULL;
2154     }
2155 
2156   bits = decode_packed_array_bitsize (type);
2157   return constrained_packed_array_type (shadow_type, &bits);
2158 }
2159 
2160 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2161    array, returns a simple array that denotes that array.  Its type is a
2162    standard GDB array type except that the BITSIZEs of the array
2163    target types are set to the number of bits in each element, and the
2164    type length is set appropriately.  */
2165 
2166 static struct value *
2167 decode_constrained_packed_array (struct value *arr)
2168 {
2169   struct type *type;
2170 
2171   /* If our value is a pointer, then dereference it. Likewise if
2172      the value is a reference.  Make sure that this operation does not
2173      cause the target type to be fixed, as this would indirectly cause
2174      this array to be decoded.  The rest of the routine assumes that
2175      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2176      and "value_ind" routines to perform the dereferencing, as opposed
2177      to using "ada_coerce_ref" or "ada_value_ind".  */
2178   arr = coerce_ref (arr);
2179   if (ada_check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
2180     arr = value_ind (arr);
2181 
2182   type = decode_constrained_packed_array_type (value_type (arr));
2183   if (type == NULL)
2184     {
2185       error (_("can't unpack array"));
2186       return NULL;
2187     }
2188 
2189   if (type_byte_order (value_type (arr)) == BFD_ENDIAN_BIG
2190       && ada_is_modular_type (value_type (arr)))
2191     {
2192        /* This is a (right-justified) modular type representing a packed
2193  	 array with no wrapper.  In order to interpret the value through
2194  	 the (left-justified) packed array type we just built, we must
2195  	 first left-justify it.  */
2196       int bit_size, bit_pos;
2197       ULONGEST mod;
2198 
2199       mod = ada_modulus (value_type (arr)) - 1;
2200       bit_size = 0;
2201       while (mod > 0)
2202 	{
2203 	  bit_size += 1;
2204 	  mod >>= 1;
2205 	}
2206       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2207       arr = ada_value_primitive_packed_val (arr, NULL,
2208 					    bit_pos / HOST_CHAR_BIT,
2209 					    bit_pos % HOST_CHAR_BIT,
2210 					    bit_size,
2211 					    type);
2212     }
2213 
2214   return coerce_unspec_val_to_type (arr, type);
2215 }
2216 
2217 
2218 /* The value of the element of packed array ARR at the ARITY indices
2219    given in IND.   ARR must be a simple array.  */
2220 
2221 static struct value *
2222 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2223 {
2224   int i;
2225   int bits, elt_off, bit_off;
2226   long elt_total_bit_offset;
2227   struct type *elt_type;
2228   struct value *v;
2229 
2230   bits = 0;
2231   elt_total_bit_offset = 0;
2232   elt_type = ada_check_typedef (value_type (arr));
2233   for (i = 0; i < arity; i += 1)
2234     {
2235       if (elt_type->code () != TYPE_CODE_ARRAY
2236           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2237         error
2238           (_("attempt to do packed indexing of "
2239 	     "something other than a packed array"));
2240       else
2241         {
2242           struct type *range_type = elt_type->index_type ();
2243           LONGEST lowerbound, upperbound;
2244           LONGEST idx;
2245 
2246           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2247             {
2248               lim_warning (_("don't know bounds of array"));
2249               lowerbound = upperbound = 0;
2250             }
2251 
2252           idx = pos_atr (ind[i]);
2253           if (idx < lowerbound || idx > upperbound)
2254             lim_warning (_("packed array index %ld out of bounds"),
2255 			 (long) idx);
2256           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2257           elt_total_bit_offset += (idx - lowerbound) * bits;
2258           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2259         }
2260     }
2261   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2262   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2263 
2264   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2265                                       bits, elt_type);
2266   return v;
2267 }
2268 
2269 /* Non-zero iff TYPE includes negative integer values.  */
2270 
2271 static int
2272 has_negatives (struct type *type)
2273 {
2274   switch (type->code ())
2275     {
2276     default:
2277       return 0;
2278     case TYPE_CODE_INT:
2279       return !TYPE_UNSIGNED (type);
2280     case TYPE_CODE_RANGE:
2281       return type->bounds ()->low.const_val () - type->bounds ()->bias < 0;
2282     }
2283 }
2284 
2285 /* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
2286    unpack that data into UNPACKED.  UNPACKED_LEN is the size in bytes of
2287    the unpacked buffer.
2288 
2289    The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2290    enough to contain at least BIT_OFFSET bits.  If not, an error is raised.
2291 
2292    IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2293    zero otherwise.
2294 
2295    IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
2296 
2297    IS_SCALAR is nonzero if the data corresponds to a signed type.  */
2298 
2299 static void
2300 ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2301 			  gdb_byte *unpacked, int unpacked_len,
2302 			  int is_big_endian, int is_signed_type,
2303 			  int is_scalar)
2304 {
2305   int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2306   int src_idx;                  /* Index into the source area */
2307   int src_bytes_left;           /* Number of source bytes left to process.  */
2308   int srcBitsLeft;              /* Number of source bits left to move */
2309   int unusedLS;                 /* Number of bits in next significant
2310                                    byte of source that are unused */
2311 
2312   int unpacked_idx;             /* Index into the unpacked buffer */
2313   int unpacked_bytes_left;      /* Number of bytes left to set in unpacked.  */
2314 
2315   unsigned long accum;          /* Staging area for bits being transferred */
2316   int accumSize;                /* Number of meaningful bits in accum */
2317   unsigned char sign;
2318 
2319   /* Transmit bytes from least to most significant; delta is the direction
2320      the indices move.  */
2321   int delta = is_big_endian ? -1 : 1;
2322 
2323   /* Make sure that unpacked is large enough to receive the BIT_SIZE
2324      bits from SRC.  .*/
2325   if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2326     error (_("Cannot unpack %d bits into buffer of %d bytes"),
2327 	   bit_size, unpacked_len);
2328 
2329   srcBitsLeft = bit_size;
2330   src_bytes_left = src_len;
2331   unpacked_bytes_left = unpacked_len;
2332   sign = 0;
2333 
2334   if (is_big_endian)
2335     {
2336       src_idx = src_len - 1;
2337       if (is_signed_type
2338 	  && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2339         sign = ~0;
2340 
2341       unusedLS =
2342         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2343         % HOST_CHAR_BIT;
2344 
2345       if (is_scalar)
2346 	{
2347           accumSize = 0;
2348           unpacked_idx = unpacked_len - 1;
2349 	}
2350       else
2351 	{
2352           /* Non-scalar values must be aligned at a byte boundary...  */
2353           accumSize =
2354             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2355           /* ... And are placed at the beginning (most-significant) bytes
2356              of the target.  */
2357           unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2358           unpacked_bytes_left = unpacked_idx + 1;
2359 	}
2360     }
2361   else
2362     {
2363       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2364 
2365       src_idx = unpacked_idx = 0;
2366       unusedLS = bit_offset;
2367       accumSize = 0;
2368 
2369       if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
2370         sign = ~0;
2371     }
2372 
2373   accum = 0;
2374   while (src_bytes_left > 0)
2375     {
2376       /* Mask for removing bits of the next source byte that are not
2377          part of the value.  */
2378       unsigned int unusedMSMask =
2379         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2380         1;
2381       /* Sign-extend bits for this byte.  */
2382       unsigned int signMask = sign & ~unusedMSMask;
2383 
2384       accum |=
2385         (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2386       accumSize += HOST_CHAR_BIT - unusedLS;
2387       if (accumSize >= HOST_CHAR_BIT)
2388         {
2389           unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2390           accumSize -= HOST_CHAR_BIT;
2391           accum >>= HOST_CHAR_BIT;
2392           unpacked_bytes_left -= 1;
2393           unpacked_idx += delta;
2394         }
2395       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2396       unusedLS = 0;
2397       src_bytes_left -= 1;
2398       src_idx += delta;
2399     }
2400   while (unpacked_bytes_left > 0)
2401     {
2402       accum |= sign << accumSize;
2403       unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2404       accumSize -= HOST_CHAR_BIT;
2405       if (accumSize < 0)
2406 	accumSize = 0;
2407       accum >>= HOST_CHAR_BIT;
2408       unpacked_bytes_left -= 1;
2409       unpacked_idx += delta;
2410     }
2411 }
2412 
2413 /* Create a new value of type TYPE from the contents of OBJ starting
2414    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2415    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2416    assigning through the result will set the field fetched from.
2417    VALADDR is ignored unless OBJ is NULL, in which case,
2418    VALADDR+OFFSET must address the start of storage containing the
2419    packed value.  The value returned  in this case is never an lval.
2420    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2421 
2422 struct value *
2423 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2424 				long offset, int bit_offset, int bit_size,
2425                                 struct type *type)
2426 {
2427   struct value *v;
2428   const gdb_byte *src;                /* First byte containing data to unpack */
2429   gdb_byte *unpacked;
2430   const int is_scalar = is_scalar_type (type);
2431   const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
2432   gdb::byte_vector staging;
2433 
2434   type = ada_check_typedef (type);
2435 
2436   if (obj == NULL)
2437     src = valaddr + offset;
2438   else
2439     src = value_contents (obj) + offset;
2440 
2441   if (is_dynamic_type (type))
2442     {
2443       /* The length of TYPE might by dynamic, so we need to resolve
2444 	 TYPE in order to know its actual size, which we then use
2445 	 to create the contents buffer of the value we return.
2446 	 The difficulty is that the data containing our object is
2447 	 packed, and therefore maybe not at a byte boundary.  So, what
2448 	 we do, is unpack the data into a byte-aligned buffer, and then
2449 	 use that buffer as our object's value for resolving the type.  */
2450       int staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2451       staging.resize (staging_len);
2452 
2453       ada_unpack_from_contents (src, bit_offset, bit_size,
2454 			        staging.data (), staging.size (),
2455 				is_big_endian, has_negatives (type),
2456 				is_scalar);
2457       type = resolve_dynamic_type (type, staging, 0);
2458       if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2459 	{
2460 	  /* This happens when the length of the object is dynamic,
2461 	     and is actually smaller than the space reserved for it.
2462 	     For instance, in an array of variant records, the bit_size
2463 	     we're given is the array stride, which is constant and
2464 	     normally equal to the maximum size of its element.
2465 	     But, in reality, each element only actually spans a portion
2466 	     of that stride.  */
2467 	  bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2468 	}
2469     }
2470 
2471   if (obj == NULL)
2472     {
2473       v = allocate_value (type);
2474       src = valaddr + offset;
2475     }
2476   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2477     {
2478       int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2479       gdb_byte *buf;
2480 
2481       v = value_at (type, value_address (obj) + offset);
2482       buf = (gdb_byte *) alloca (src_len);
2483       read_memory (value_address (v), buf, src_len);
2484       src = buf;
2485     }
2486   else
2487     {
2488       v = allocate_value (type);
2489       src = value_contents (obj) + offset;
2490     }
2491 
2492   if (obj != NULL)
2493     {
2494       long new_offset = offset;
2495 
2496       set_value_component_location (v, obj);
2497       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2498       set_value_bitsize (v, bit_size);
2499       if (value_bitpos (v) >= HOST_CHAR_BIT)
2500         {
2501 	  ++new_offset;
2502           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2503         }
2504       set_value_offset (v, new_offset);
2505 
2506       /* Also set the parent value.  This is needed when trying to
2507 	 assign a new value (in inferior memory).  */
2508       set_value_parent (v, obj);
2509     }
2510   else
2511     set_value_bitsize (v, bit_size);
2512   unpacked = value_contents_writeable (v);
2513 
2514   if (bit_size == 0)
2515     {
2516       memset (unpacked, 0, TYPE_LENGTH (type));
2517       return v;
2518     }
2519 
2520   if (staging.size () == TYPE_LENGTH (type))
2521     {
2522       /* Small short-cut: If we've unpacked the data into a buffer
2523 	 of the same size as TYPE's length, then we can reuse that,
2524 	 instead of doing the unpacking again.  */
2525       memcpy (unpacked, staging.data (), staging.size ());
2526     }
2527   else
2528     ada_unpack_from_contents (src, bit_offset, bit_size,
2529 			      unpacked, TYPE_LENGTH (type),
2530 			      is_big_endian, has_negatives (type), is_scalar);
2531 
2532   return v;
2533 }
2534 
2535 /* Store the contents of FROMVAL into the location of TOVAL.
2536    Return a new value with the location of TOVAL and contents of
2537    FROMVAL.   Handles assignment into packed fields that have
2538    floating-point or non-scalar types.  */
2539 
2540 static struct value *
2541 ada_value_assign (struct value *toval, struct value *fromval)
2542 {
2543   struct type *type = value_type (toval);
2544   int bits = value_bitsize (toval);
2545 
2546   toval = ada_coerce_ref (toval);
2547   fromval = ada_coerce_ref (fromval);
2548 
2549   if (ada_is_direct_array_type (value_type (toval)))
2550     toval = ada_coerce_to_simple_array (toval);
2551   if (ada_is_direct_array_type (value_type (fromval)))
2552     fromval = ada_coerce_to_simple_array (fromval);
2553 
2554   if (!deprecated_value_modifiable (toval))
2555     error (_("Left operand of assignment is not a modifiable lvalue."));
2556 
2557   if (VALUE_LVAL (toval) == lval_memory
2558       && bits > 0
2559       && (type->code () == TYPE_CODE_FLT
2560           || type->code () == TYPE_CODE_STRUCT))
2561     {
2562       int len = (value_bitpos (toval)
2563 		 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2564       int from_size;
2565       gdb_byte *buffer = (gdb_byte *) alloca (len);
2566       struct value *val;
2567       CORE_ADDR to_addr = value_address (toval);
2568 
2569       if (type->code () == TYPE_CODE_FLT)
2570         fromval = value_cast (type, fromval);
2571 
2572       read_memory (to_addr, buffer, len);
2573       from_size = value_bitsize (fromval);
2574       if (from_size == 0)
2575 	from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2576 
2577       const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
2578       ULONGEST from_offset = 0;
2579       if (is_big_endian && is_scalar_type (value_type (fromval)))
2580 	from_offset = from_size - bits;
2581       copy_bitwise (buffer, value_bitpos (toval),
2582 		    value_contents (fromval), from_offset,
2583 		    bits, is_big_endian);
2584       write_memory_with_notification (to_addr, buffer, len);
2585 
2586       val = value_copy (toval);
2587       memcpy (value_contents_raw (val), value_contents (fromval),
2588               TYPE_LENGTH (type));
2589       deprecated_set_value_type (val, type);
2590 
2591       return val;
2592     }
2593 
2594   return value_assign (toval, fromval);
2595 }
2596 
2597 
2598 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2599    CONTAINER, assign the contents of VAL to COMPONENTS's place in
2600    CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not
2601    COMPONENT, and not the inferior's memory.  The current contents
2602    of COMPONENT are ignored.
2603 
2604    Although not part of the initial design, this function also works
2605    when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2606    had a null address, and COMPONENT had an address which is equal to
2607    its offset inside CONTAINER.  */
2608 
2609 static void
2610 value_assign_to_component (struct value *container, struct value *component,
2611 			   struct value *val)
2612 {
2613   LONGEST offset_in_container =
2614     (LONGEST)  (value_address (component) - value_address (container));
2615   int bit_offset_in_container =
2616     value_bitpos (component) - value_bitpos (container);
2617   int bits;
2618 
2619   val = value_cast (value_type (component), val);
2620 
2621   if (value_bitsize (component) == 0)
2622     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2623   else
2624     bits = value_bitsize (component);
2625 
2626   if (type_byte_order (value_type (container)) == BFD_ENDIAN_BIG)
2627     {
2628       int src_offset;
2629 
2630       if (is_scalar_type (check_typedef (value_type (component))))
2631         src_offset
2632 	  = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
2633       else
2634 	src_offset = 0;
2635       copy_bitwise (value_contents_writeable (container) + offset_in_container,
2636 		    value_bitpos (container) + bit_offset_in_container,
2637 		    value_contents (val), src_offset, bits, 1);
2638     }
2639   else
2640     copy_bitwise (value_contents_writeable (container) + offset_in_container,
2641 		  value_bitpos (container) + bit_offset_in_container,
2642 		  value_contents (val), 0, bits, 0);
2643 }
2644 
2645 /* Determine if TYPE is an access to an unconstrained array.  */
2646 
2647 bool
2648 ada_is_access_to_unconstrained_array (struct type *type)
2649 {
2650   return (type->code () == TYPE_CODE_TYPEDEF
2651 	  && is_thick_pntr (ada_typedef_target_type (type)));
2652 }
2653 
2654 /* The value of the element of array ARR at the ARITY indices given in IND.
2655    ARR may be either a simple array, GNAT array descriptor, or pointer
2656    thereto.  */
2657 
2658 struct value *
2659 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2660 {
2661   int k;
2662   struct value *elt;
2663   struct type *elt_type;
2664 
2665   elt = ada_coerce_to_simple_array (arr);
2666 
2667   elt_type = ada_check_typedef (value_type (elt));
2668   if (elt_type->code () == TYPE_CODE_ARRAY
2669       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2670     return value_subscript_packed (elt, arity, ind);
2671 
2672   for (k = 0; k < arity; k += 1)
2673     {
2674       struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
2675 
2676       if (elt_type->code () != TYPE_CODE_ARRAY)
2677         error (_("too many subscripts (%d expected)"), k);
2678 
2679       elt = value_subscript (elt, pos_atr (ind[k]));
2680 
2681       if (ada_is_access_to_unconstrained_array (saved_elt_type)
2682 	  && value_type (elt)->code () != TYPE_CODE_TYPEDEF)
2683 	{
2684 	  /* The element is a typedef to an unconstrained array,
2685 	     except that the value_subscript call stripped the
2686 	     typedef layer.  The typedef layer is GNAT's way to
2687 	     specify that the element is, at the source level, an
2688 	     access to the unconstrained array, rather than the
2689 	     unconstrained array.  So, we need to restore that
2690 	     typedef layer, which we can do by forcing the element's
2691 	     type back to its original type. Otherwise, the returned
2692 	     value is going to be printed as the array, rather
2693 	     than as an access.  Another symptom of the same issue
2694 	     would be that an expression trying to dereference the
2695 	     element would also be improperly rejected.  */
2696 	  deprecated_set_value_type (elt, saved_elt_type);
2697 	}
2698 
2699       elt_type = ada_check_typedef (value_type (elt));
2700     }
2701 
2702   return elt;
2703 }
2704 
2705 /* Assuming ARR is a pointer to a GDB array, the value of the element
2706    of *ARR at the ARITY indices given in IND.
2707    Does not read the entire array into memory.
2708 
2709    Note: Unlike what one would expect, this function is used instead of
2710    ada_value_subscript for basically all non-packed array types.  The reason
2711    for this is that a side effect of doing our own pointer arithmetics instead
2712    of relying on value_subscript is that there is no implicit typedef peeling.
2713    This is important for arrays of array accesses, where it allows us to
2714    preserve the fact that the array's element is an array access, where the
2715    access part os encoded in a typedef layer.  */
2716 
2717 static struct value *
2718 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2719 {
2720   int k;
2721   struct value *array_ind = ada_value_ind (arr);
2722   struct type *type
2723     = check_typedef (value_enclosing_type (array_ind));
2724 
2725   if (type->code () == TYPE_CODE_ARRAY
2726       && TYPE_FIELD_BITSIZE (type, 0) > 0)
2727     return value_subscript_packed (array_ind, arity, ind);
2728 
2729   for (k = 0; k < arity; k += 1)
2730     {
2731       LONGEST lwb, upb;
2732 
2733       if (type->code () != TYPE_CODE_ARRAY)
2734         error (_("too many subscripts (%d expected)"), k);
2735       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2736                         value_copy (arr));
2737       get_discrete_bounds (type->index_type (), &lwb, &upb);
2738       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2739       type = TYPE_TARGET_TYPE (type);
2740     }
2741 
2742   return value_ind (arr);
2743 }
2744 
2745 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2746    actual type of ARRAY_PTR is ignored), returns the Ada slice of
2747    HIGH'Pos-LOW'Pos+1 elements starting at index LOW.  The lower bound of
2748    this array is LOW, as per Ada rules.  */
2749 static struct value *
2750 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2751                           int low, int high)
2752 {
2753   struct type *type0 = ada_check_typedef (type);
2754   struct type *base_index_type = TYPE_TARGET_TYPE (type0->index_type ());
2755   struct type *index_type
2756     = create_static_range_type (NULL, base_index_type, low, high);
2757   struct type *slice_type = create_array_type_with_stride
2758 			      (NULL, TYPE_TARGET_TYPE (type0), index_type,
2759 			       type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
2760 			       TYPE_FIELD_BITSIZE (type0, 0));
2761   int base_low =  ada_discrete_type_low_bound (type0->index_type ());
2762   LONGEST base_low_pos, low_pos;
2763   CORE_ADDR base;
2764 
2765   if (!discrete_position (base_index_type, low, &low_pos)
2766       || !discrete_position (base_index_type, base_low, &base_low_pos))
2767     {
2768       warning (_("unable to get positions in slice, use bounds instead"));
2769       low_pos = low;
2770       base_low_pos = base_low;
2771     }
2772 
2773   base = value_as_address (array_ptr)
2774     + ((low_pos - base_low_pos)
2775        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2776   return value_at_lazy (slice_type, base);
2777 }
2778 
2779 
2780 static struct value *
2781 ada_value_slice (struct value *array, int low, int high)
2782 {
2783   struct type *type = ada_check_typedef (value_type (array));
2784   struct type *base_index_type = TYPE_TARGET_TYPE (type->index_type ());
2785   struct type *index_type
2786     = create_static_range_type (NULL, type->index_type (), low, high);
2787   struct type *slice_type = create_array_type_with_stride
2788 			      (NULL, TYPE_TARGET_TYPE (type), index_type,
2789 			       type->dyn_prop (DYN_PROP_BYTE_STRIDE),
2790 			       TYPE_FIELD_BITSIZE (type, 0));
2791   LONGEST low_pos, high_pos;
2792 
2793   if (!discrete_position (base_index_type, low, &low_pos)
2794       || !discrete_position (base_index_type, high, &high_pos))
2795     {
2796       warning (_("unable to get positions in slice, use bounds instead"));
2797       low_pos = low;
2798       high_pos = high;
2799     }
2800 
2801   return value_cast (slice_type,
2802 		     value_slice (array, low, high_pos - low_pos + 1));
2803 }
2804 
2805 /* If type is a record type in the form of a standard GNAT array
2806    descriptor, returns the number of dimensions for type.  If arr is a
2807    simple array, returns the number of "array of"s that prefix its
2808    type designation.  Otherwise, returns 0.  */
2809 
2810 int
2811 ada_array_arity (struct type *type)
2812 {
2813   int arity;
2814 
2815   if (type == NULL)
2816     return 0;
2817 
2818   type = desc_base_type (type);
2819 
2820   arity = 0;
2821   if (type->code () == TYPE_CODE_STRUCT)
2822     return desc_arity (desc_bounds_type (type));
2823   else
2824     while (type->code () == TYPE_CODE_ARRAY)
2825       {
2826         arity += 1;
2827         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2828       }
2829 
2830   return arity;
2831 }
2832 
2833 /* If TYPE is a record type in the form of a standard GNAT array
2834    descriptor or a simple array type, returns the element type for
2835    TYPE after indexing by NINDICES indices, or by all indices if
2836    NINDICES is -1.  Otherwise, returns NULL.  */
2837 
2838 struct type *
2839 ada_array_element_type (struct type *type, int nindices)
2840 {
2841   type = desc_base_type (type);
2842 
2843   if (type->code () == TYPE_CODE_STRUCT)
2844     {
2845       int k;
2846       struct type *p_array_type;
2847 
2848       p_array_type = desc_data_target_type (type);
2849 
2850       k = ada_array_arity (type);
2851       if (k == 0)
2852         return NULL;
2853 
2854       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2855       if (nindices >= 0 && k > nindices)
2856         k = nindices;
2857       while (k > 0 && p_array_type != NULL)
2858         {
2859           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2860           k -= 1;
2861         }
2862       return p_array_type;
2863     }
2864   else if (type->code () == TYPE_CODE_ARRAY)
2865     {
2866       while (nindices != 0 && type->code () == TYPE_CODE_ARRAY)
2867         {
2868           type = TYPE_TARGET_TYPE (type);
2869           nindices -= 1;
2870         }
2871       return type;
2872     }
2873 
2874   return NULL;
2875 }
2876 
2877 /* The type of nth index in arrays of given type (n numbering from 1).
2878    Does not examine memory.  Throws an error if N is invalid or TYPE
2879    is not an array type.  NAME is the name of the Ada attribute being
2880    evaluated ('range, 'first, 'last, or 'length); it is used in building
2881    the error message.  */
2882 
2883 static struct type *
2884 ada_index_type (struct type *type, int n, const char *name)
2885 {
2886   struct type *result_type;
2887 
2888   type = desc_base_type (type);
2889 
2890   if (n < 0 || n > ada_array_arity (type))
2891     error (_("invalid dimension number to '%s"), name);
2892 
2893   if (ada_is_simple_array_type (type))
2894     {
2895       int i;
2896 
2897       for (i = 1; i < n; i += 1)
2898         type = TYPE_TARGET_TYPE (type);
2899       result_type = TYPE_TARGET_TYPE (type->index_type ());
2900       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2901          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2902          perhaps stabsread.c would make more sense.  */
2903       if (result_type && result_type->code () == TYPE_CODE_UNDEF)
2904         result_type = NULL;
2905     }
2906   else
2907     {
2908       result_type = desc_index_type (desc_bounds_type (type), n);
2909       if (result_type == NULL)
2910 	error (_("attempt to take bound of something that is not an array"));
2911     }
2912 
2913   return result_type;
2914 }
2915 
2916 /* Given that arr is an array type, returns the lower bound of the
2917    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2918    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2919    array-descriptor type.  It works for other arrays with bounds supplied
2920    by run-time quantities other than discriminants.  */
2921 
2922 static LONGEST
2923 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2924 {
2925   struct type *type, *index_type_desc, *index_type;
2926   int i;
2927 
2928   gdb_assert (which == 0 || which == 1);
2929 
2930   if (ada_is_constrained_packed_array_type (arr_type))
2931     arr_type = decode_constrained_packed_array_type (arr_type);
2932 
2933   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2934     return (LONGEST) - which;
2935 
2936   if (arr_type->code () == TYPE_CODE_PTR)
2937     type = TYPE_TARGET_TYPE (arr_type);
2938   else
2939     type = arr_type;
2940 
2941   if (TYPE_FIXED_INSTANCE (type))
2942     {
2943       /* The array has already been fixed, so we do not need to
2944 	 check the parallel ___XA type again.  That encoding has
2945 	 already been applied, so ignore it now.  */
2946       index_type_desc = NULL;
2947     }
2948   else
2949     {
2950       index_type_desc = ada_find_parallel_type (type, "___XA");
2951       ada_fixup_array_indexes_type (index_type_desc);
2952     }
2953 
2954   if (index_type_desc != NULL)
2955     index_type = to_fixed_range_type (index_type_desc->field (n - 1).type (),
2956 				      NULL);
2957   else
2958     {
2959       struct type *elt_type = check_typedef (type);
2960 
2961       for (i = 1; i < n; i++)
2962 	elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2963 
2964       index_type = elt_type->index_type ();
2965     }
2966 
2967   return
2968     (LONGEST) (which == 0
2969                ? ada_discrete_type_low_bound (index_type)
2970                : ada_discrete_type_high_bound (index_type));
2971 }
2972 
2973 /* Given that arr is an array value, returns the lower bound of the
2974    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2975    WHICH is 1.  This routine will also work for arrays with bounds
2976    supplied by run-time quantities other than discriminants.  */
2977 
2978 static LONGEST
2979 ada_array_bound (struct value *arr, int n, int which)
2980 {
2981   struct type *arr_type;
2982 
2983   if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
2984     arr = value_ind (arr);
2985   arr_type = value_enclosing_type (arr);
2986 
2987   if (ada_is_constrained_packed_array_type (arr_type))
2988     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2989   else if (ada_is_simple_array_type (arr_type))
2990     return ada_array_bound_from_type (arr_type, n, which);
2991   else
2992     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2993 }
2994 
2995 /* Given that arr is an array value, returns the length of the
2996    nth index.  This routine will also work for arrays with bounds
2997    supplied by run-time quantities other than discriminants.
2998    Does not work for arrays indexed by enumeration types with representation
2999    clauses at the moment.  */
3000 
3001 static LONGEST
3002 ada_array_length (struct value *arr, int n)
3003 {
3004   struct type *arr_type, *index_type;
3005   int low, high;
3006 
3007   if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
3008     arr = value_ind (arr);
3009   arr_type = value_enclosing_type (arr);
3010 
3011   if (ada_is_constrained_packed_array_type (arr_type))
3012     return ada_array_length (decode_constrained_packed_array (arr), n);
3013 
3014   if (ada_is_simple_array_type (arr_type))
3015     {
3016       low = ada_array_bound_from_type (arr_type, n, 0);
3017       high = ada_array_bound_from_type (arr_type, n, 1);
3018     }
3019   else
3020     {
3021       low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3022       high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3023     }
3024 
3025   arr_type = check_typedef (arr_type);
3026   index_type = ada_index_type (arr_type, n, "length");
3027   if (index_type != NULL)
3028     {
3029       struct type *base_type;
3030       if (index_type->code () == TYPE_CODE_RANGE)
3031 	base_type = TYPE_TARGET_TYPE (index_type);
3032       else
3033 	base_type = index_type;
3034 
3035       low = pos_atr (value_from_longest (base_type, low));
3036       high = pos_atr (value_from_longest (base_type, high));
3037     }
3038   return high - low + 1;
3039 }
3040 
3041 /* An array whose type is that of ARR_TYPE (an array type), with
3042    bounds LOW to HIGH, but whose contents are unimportant.  If HIGH is
3043    less than LOW, then LOW-1 is used.  */
3044 
3045 static struct value *
3046 empty_array (struct type *arr_type, int low, int high)
3047 {
3048   struct type *arr_type0 = ada_check_typedef (arr_type);
3049   struct type *index_type
3050     = create_static_range_type
3051         (NULL, TYPE_TARGET_TYPE (arr_type0->index_type ()), low,
3052 	 high < low ? low - 1 : high);
3053   struct type *elt_type = ada_array_element_type (arr_type0, 1);
3054 
3055   return allocate_value (create_array_type (NULL, elt_type, index_type));
3056 }
3057 
3058 
3059                                 /* Name resolution */
3060 
3061 /* The "decoded" name for the user-definable Ada operator corresponding
3062    to OP.  */
3063 
3064 static const char *
3065 ada_decoded_op_name (enum exp_opcode op)
3066 {
3067   int i;
3068 
3069   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3070     {
3071       if (ada_opname_table[i].op == op)
3072         return ada_opname_table[i].decoded;
3073     }
3074   error (_("Could not find operator name for opcode"));
3075 }
3076 
3077 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3078    in a listing of choices during disambiguation (see sort_choices, below).
3079    The idea is that overloadings of a subprogram name from the
3080    same package should sort in their source order.  We settle for ordering
3081    such symbols by their trailing number (__N  or $N).  */
3082 
3083 static int
3084 encoded_ordered_before (const char *N0, const char *N1)
3085 {
3086   if (N1 == NULL)
3087     return 0;
3088   else if (N0 == NULL)
3089     return 1;
3090   else
3091     {
3092       int k0, k1;
3093 
3094       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3095         ;
3096       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3097         ;
3098       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3099           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3100         {
3101           int n0, n1;
3102 
3103           n0 = k0;
3104           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3105             n0 -= 1;
3106           n1 = k1;
3107           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3108             n1 -= 1;
3109           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3110             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3111         }
3112       return (strcmp (N0, N1) < 0);
3113     }
3114 }
3115 
3116 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3117    encoded names.  */
3118 
3119 static void
3120 sort_choices (struct block_symbol syms[], int nsyms)
3121 {
3122   int i;
3123 
3124   for (i = 1; i < nsyms; i += 1)
3125     {
3126       struct block_symbol sym = syms[i];
3127       int j;
3128 
3129       for (j = i - 1; j >= 0; j -= 1)
3130         {
3131           if (encoded_ordered_before (syms[j].symbol->linkage_name (),
3132                                       sym.symbol->linkage_name ()))
3133             break;
3134           syms[j + 1] = syms[j];
3135         }
3136       syms[j + 1] = sym;
3137     }
3138 }
3139 
3140 /* Whether GDB should display formals and return types for functions in the
3141    overloads selection menu.  */
3142 static bool print_signatures = true;
3143 
3144 /* Print the signature for SYM on STREAM according to the FLAGS options.  For
3145    all but functions, the signature is just the name of the symbol.  For
3146    functions, this is the name of the function, the list of types for formals
3147    and the return type (if any).  */
3148 
3149 static void
3150 ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3151 			    const struct type_print_options *flags)
3152 {
3153   struct type *type = SYMBOL_TYPE (sym);
3154 
3155   fprintf_filtered (stream, "%s", sym->print_name ());
3156   if (!print_signatures
3157       || type == NULL
3158       || type->code () != TYPE_CODE_FUNC)
3159     return;
3160 
3161   if (type->num_fields () > 0)
3162     {
3163       int i;
3164 
3165       fprintf_filtered (stream, " (");
3166       for (i = 0; i < type->num_fields (); ++i)
3167 	{
3168 	  if (i > 0)
3169 	    fprintf_filtered (stream, "; ");
3170 	  ada_print_type (type->field (i).type (), NULL, stream, -1, 0,
3171 			  flags);
3172 	}
3173       fprintf_filtered (stream, ")");
3174     }
3175   if (TYPE_TARGET_TYPE (type) != NULL
3176       && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
3177     {
3178       fprintf_filtered (stream, " return ");
3179       ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3180     }
3181 }
3182 
3183 /* Read and validate a set of numeric choices from the user in the
3184    range 0 .. N_CHOICES-1.  Place the results in increasing
3185    order in CHOICES[0 .. N-1], and return N.
3186 
3187    The user types choices as a sequence of numbers on one line
3188    separated by blanks, encoding them as follows:
3189 
3190      + A choice of 0 means to cancel the selection, throwing an error.
3191      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3192      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3193 
3194    The user is not allowed to choose more than MAX_RESULTS values.
3195 
3196    ANNOTATION_SUFFIX, if present, is used to annotate the input
3197    prompts (for use with the -f switch).  */
3198 
3199 static int
3200 get_selections (int *choices, int n_choices, int max_results,
3201                 int is_all_choice, const char *annotation_suffix)
3202 {
3203   const char *args;
3204   const char *prompt;
3205   int n_chosen;
3206   int first_choice = is_all_choice ? 2 : 1;
3207 
3208   prompt = getenv ("PS2");
3209   if (prompt == NULL)
3210     prompt = "> ";
3211 
3212   args = command_line_input (prompt, annotation_suffix);
3213 
3214   if (args == NULL)
3215     error_no_arg (_("one or more choice numbers"));
3216 
3217   n_chosen = 0;
3218 
3219   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3220      order, as given in args.  Choices are validated.  */
3221   while (1)
3222     {
3223       char *args2;
3224       int choice, j;
3225 
3226       args = skip_spaces (args);
3227       if (*args == '\0' && n_chosen == 0)
3228         error_no_arg (_("one or more choice numbers"));
3229       else if (*args == '\0')
3230         break;
3231 
3232       choice = strtol (args, &args2, 10);
3233       if (args == args2 || choice < 0
3234           || choice > n_choices + first_choice - 1)
3235         error (_("Argument must be choice number"));
3236       args = args2;
3237 
3238       if (choice == 0)
3239         error (_("cancelled"));
3240 
3241       if (choice < first_choice)
3242         {
3243           n_chosen = n_choices;
3244           for (j = 0; j < n_choices; j += 1)
3245             choices[j] = j;
3246           break;
3247         }
3248       choice -= first_choice;
3249 
3250       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3251         {
3252         }
3253 
3254       if (j < 0 || choice != choices[j])
3255         {
3256           int k;
3257 
3258           for (k = n_chosen - 1; k > j; k -= 1)
3259             choices[k + 1] = choices[k];
3260           choices[j + 1] = choice;
3261           n_chosen += 1;
3262         }
3263     }
3264 
3265   if (n_chosen > max_results)
3266     error (_("Select no more than %d of the above"), max_results);
3267 
3268   return n_chosen;
3269 }
3270 
3271 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3272    by asking the user (if necessary), returning the number selected,
3273    and setting the first elements of SYMS items.  Error if no symbols
3274    selected.  */
3275 
3276 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3277    to be re-integrated one of these days.  */
3278 
3279 static int
3280 user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
3281 {
3282   int i;
3283   int *chosen = XALLOCAVEC (int , nsyms);
3284   int n_chosen;
3285   int first_choice = (max_results == 1) ? 1 : 2;
3286   const char *select_mode = multiple_symbols_select_mode ();
3287 
3288   if (max_results < 1)
3289     error (_("Request to select 0 symbols!"));
3290   if (nsyms <= 1)
3291     return nsyms;
3292 
3293   if (select_mode == multiple_symbols_cancel)
3294     error (_("\
3295 canceled because the command is ambiguous\n\
3296 See set/show multiple-symbol."));
3297 
3298   /* If select_mode is "all", then return all possible symbols.
3299      Only do that if more than one symbol can be selected, of course.
3300      Otherwise, display the menu as usual.  */
3301   if (select_mode == multiple_symbols_all && max_results > 1)
3302     return nsyms;
3303 
3304   printf_filtered (_("[0] cancel\n"));
3305   if (max_results > 1)
3306     printf_filtered (_("[1] all\n"));
3307 
3308   sort_choices (syms, nsyms);
3309 
3310   for (i = 0; i < nsyms; i += 1)
3311     {
3312       if (syms[i].symbol == NULL)
3313         continue;
3314 
3315       if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
3316         {
3317           struct symtab_and_line sal =
3318             find_function_start_sal (syms[i].symbol, 1);
3319 
3320 	  printf_filtered ("[%d] ", i + first_choice);
3321 	  ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3322 				      &type_print_raw_options);
3323 	  if (sal.symtab == NULL)
3324 	    printf_filtered (_(" at %p[<no source file available>%p]:%d\n"),
3325 			     metadata_style.style ().ptr (), nullptr, sal.line);
3326 	  else
3327 	    printf_filtered
3328 	      (_(" at %ps:%d\n"),
3329 	       styled_string (file_name_style.style (),
3330 			      symtab_to_filename_for_display (sal.symtab)),
3331 	       sal.line);
3332           continue;
3333         }
3334       else
3335         {
3336           int is_enumeral =
3337             (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3338              && SYMBOL_TYPE (syms[i].symbol) != NULL
3339              && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM);
3340 	  struct symtab *symtab = NULL;
3341 
3342 	  if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3343 	    symtab = symbol_symtab (syms[i].symbol);
3344 
3345           if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
3346 	    {
3347 	      printf_filtered ("[%d] ", i + first_choice);
3348 	      ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3349 					  &type_print_raw_options);
3350 	      printf_filtered (_(" at %s:%d\n"),
3351 			       symtab_to_filename_for_display (symtab),
3352 			       SYMBOL_LINE (syms[i].symbol));
3353 	    }
3354           else if (is_enumeral
3355                    && SYMBOL_TYPE (syms[i].symbol)->name () != NULL)
3356             {
3357               printf_filtered (("[%d] "), i + first_choice);
3358               ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3359                               gdb_stdout, -1, 0, &type_print_raw_options);
3360               printf_filtered (_("'(%s) (enumeral)\n"),
3361 			       syms[i].symbol->print_name ());
3362             }
3363 	  else
3364 	    {
3365 	      printf_filtered ("[%d] ", i + first_choice);
3366 	      ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3367 					  &type_print_raw_options);
3368 
3369 	      if (symtab != NULL)
3370 		printf_filtered (is_enumeral
3371 				 ? _(" in %s (enumeral)\n")
3372 				 : _(" at %s:?\n"),
3373 				 symtab_to_filename_for_display (symtab));
3374 	      else
3375 		printf_filtered (is_enumeral
3376 				 ? _(" (enumeral)\n")
3377 				 : _(" at ?\n"));
3378 	    }
3379         }
3380     }
3381 
3382   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3383                              "overload-choice");
3384 
3385   for (i = 0; i < n_chosen; i += 1)
3386     syms[i] = syms[chosen[i]];
3387 
3388   return n_chosen;
3389 }
3390 
3391 /* Resolve the operator of the subexpression beginning at
3392    position *POS of *EXPP.  "Resolving" consists of replacing
3393    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3394    with their resolutions, replacing built-in operators with
3395    function calls to user-defined operators, where appropriate, and,
3396    when DEPROCEDURE_P is non-zero, converting function-valued variables
3397    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3398    are as in ada_resolve, above.  */
3399 
3400 static struct value *
3401 resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
3402                 struct type *context_type, int parse_completion,
3403 		innermost_block_tracker *tracker)
3404 {
3405   int pc = *pos;
3406   int i;
3407   struct expression *exp;       /* Convenience: == *expp.  */
3408   enum exp_opcode op = (*expp)->elts[pc].opcode;
3409   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3410   int nargs;                    /* Number of operands.  */
3411   int oplen;
3412 
3413   argvec = NULL;
3414   nargs = 0;
3415   exp = expp->get ();
3416 
3417   /* Pass one: resolve operands, saving their types and updating *pos,
3418      if needed.  */
3419   switch (op)
3420     {
3421     case OP_FUNCALL:
3422       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3423           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3424         *pos += 7;
3425       else
3426         {
3427           *pos += 3;
3428           resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3429         }
3430       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3431       break;
3432 
3433     case UNOP_ADDR:
3434       *pos += 1;
3435       resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3436       break;
3437 
3438     case UNOP_QUAL:
3439       *pos += 3;
3440       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
3441 		      parse_completion, tracker);
3442       break;
3443 
3444     case OP_ATR_MODULUS:
3445     case OP_ATR_SIZE:
3446     case OP_ATR_TAG:
3447     case OP_ATR_FIRST:
3448     case OP_ATR_LAST:
3449     case OP_ATR_LENGTH:
3450     case OP_ATR_POS:
3451     case OP_ATR_VAL:
3452     case OP_ATR_MIN:
3453     case OP_ATR_MAX:
3454     case TERNOP_IN_RANGE:
3455     case BINOP_IN_BOUNDS:
3456     case UNOP_IN_RANGE:
3457     case OP_AGGREGATE:
3458     case OP_OTHERS:
3459     case OP_CHOICES:
3460     case OP_POSITIONAL:
3461     case OP_DISCRETE_RANGE:
3462     case OP_NAME:
3463       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3464       *pos += oplen;
3465       break;
3466 
3467     case BINOP_ASSIGN:
3468       {
3469         struct value *arg1;
3470 
3471         *pos += 1;
3472         arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3473         if (arg1 == NULL)
3474           resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
3475         else
3476           resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
3477 			  tracker);
3478         break;
3479       }
3480 
3481     case UNOP_CAST:
3482       *pos += 3;
3483       nargs = 1;
3484       break;
3485 
3486     case BINOP_ADD:
3487     case BINOP_SUB:
3488     case BINOP_MUL:
3489     case BINOP_DIV:
3490     case BINOP_REM:
3491     case BINOP_MOD:
3492     case BINOP_EXP:
3493     case BINOP_CONCAT:
3494     case BINOP_LOGICAL_AND:
3495     case BINOP_LOGICAL_OR:
3496     case BINOP_BITWISE_AND:
3497     case BINOP_BITWISE_IOR:
3498     case BINOP_BITWISE_XOR:
3499 
3500     case BINOP_EQUAL:
3501     case BINOP_NOTEQUAL:
3502     case BINOP_LESS:
3503     case BINOP_GTR:
3504     case BINOP_LEQ:
3505     case BINOP_GEQ:
3506 
3507     case BINOP_REPEAT:
3508     case BINOP_SUBSCRIPT:
3509     case BINOP_COMMA:
3510       *pos += 1;
3511       nargs = 2;
3512       break;
3513 
3514     case UNOP_NEG:
3515     case UNOP_PLUS:
3516     case UNOP_LOGICAL_NOT:
3517     case UNOP_ABS:
3518     case UNOP_IND:
3519       *pos += 1;
3520       nargs = 1;
3521       break;
3522 
3523     case OP_LONG:
3524     case OP_FLOAT:
3525     case OP_VAR_VALUE:
3526     case OP_VAR_MSYM_VALUE:
3527       *pos += 4;
3528       break;
3529 
3530     case OP_TYPE:
3531     case OP_BOOL:
3532     case OP_LAST:
3533     case OP_INTERNALVAR:
3534       *pos += 3;
3535       break;
3536 
3537     case UNOP_MEMVAL:
3538       *pos += 3;
3539       nargs = 1;
3540       break;
3541 
3542     case OP_REGISTER:
3543       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3544       break;
3545 
3546     case STRUCTOP_STRUCT:
3547       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3548       nargs = 1;
3549       break;
3550 
3551     case TERNOP_SLICE:
3552       *pos += 1;
3553       nargs = 3;
3554       break;
3555 
3556     case OP_STRING:
3557       break;
3558 
3559     default:
3560       error (_("Unexpected operator during name resolution"));
3561     }
3562 
3563   argvec = XALLOCAVEC (struct value *, nargs + 1);
3564   for (i = 0; i < nargs; i += 1)
3565     argvec[i] = resolve_subexp (expp, pos, 1, NULL, parse_completion,
3566 				tracker);
3567   argvec[i] = NULL;
3568   exp = expp->get ();
3569 
3570   /* Pass two: perform any resolution on principal operator.  */
3571   switch (op)
3572     {
3573     default:
3574       break;
3575 
3576     case OP_VAR_VALUE:
3577       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3578         {
3579           std::vector<struct block_symbol> candidates;
3580           int n_candidates;
3581 
3582           n_candidates =
3583             ada_lookup_symbol_list (exp->elts[pc + 2].symbol->linkage_name (),
3584                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3585                                     &candidates);
3586 
3587           if (n_candidates > 1)
3588             {
3589               /* Types tend to get re-introduced locally, so if there
3590                  are any local symbols that are not types, first filter
3591                  out all types.  */
3592               int j;
3593               for (j = 0; j < n_candidates; j += 1)
3594                 switch (SYMBOL_CLASS (candidates[j].symbol))
3595                   {
3596                   case LOC_REGISTER:
3597                   case LOC_ARG:
3598                   case LOC_REF_ARG:
3599                   case LOC_REGPARM_ADDR:
3600                   case LOC_LOCAL:
3601                   case LOC_COMPUTED:
3602                     goto FoundNonType;
3603                   default:
3604                     break;
3605                   }
3606             FoundNonType:
3607               if (j < n_candidates)
3608                 {
3609                   j = 0;
3610                   while (j < n_candidates)
3611                     {
3612                       if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
3613                         {
3614                           candidates[j] = candidates[n_candidates - 1];
3615                           n_candidates -= 1;
3616                         }
3617                       else
3618                         j += 1;
3619                     }
3620                 }
3621             }
3622 
3623           if (n_candidates == 0)
3624             error (_("No definition found for %s"),
3625                    exp->elts[pc + 2].symbol->print_name ());
3626           else if (n_candidates == 1)
3627             i = 0;
3628           else if (deprocedure_p
3629                    && !is_nonfunction (candidates.data (), n_candidates))
3630             {
3631               i = ada_resolve_function
3632                 (candidates.data (), n_candidates, NULL, 0,
3633                  exp->elts[pc + 2].symbol->linkage_name (),
3634                  context_type, parse_completion);
3635               if (i < 0)
3636                 error (_("Could not find a match for %s"),
3637                        exp->elts[pc + 2].symbol->print_name ());
3638             }
3639           else
3640             {
3641               printf_filtered (_("Multiple matches for %s\n"),
3642                                exp->elts[pc + 2].symbol->print_name ());
3643               user_select_syms (candidates.data (), n_candidates, 1);
3644               i = 0;
3645             }
3646 
3647           exp->elts[pc + 1].block = candidates[i].block;
3648           exp->elts[pc + 2].symbol = candidates[i].symbol;
3649 	  tracker->update (candidates[i]);
3650         }
3651 
3652       if (deprocedure_p
3653           && (SYMBOL_TYPE (exp->elts[pc + 2].symbol)->code ()
3654               == TYPE_CODE_FUNC))
3655         {
3656           replace_operator_with_call (expp, pc, 0, 4,
3657                                       exp->elts[pc + 2].symbol,
3658                                       exp->elts[pc + 1].block);
3659           exp = expp->get ();
3660         }
3661       break;
3662 
3663     case OP_FUNCALL:
3664       {
3665         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3666             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3667           {
3668 	    std::vector<struct block_symbol> candidates;
3669             int n_candidates;
3670 
3671             n_candidates =
3672               ada_lookup_symbol_list (exp->elts[pc + 5].symbol->linkage_name (),
3673                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3674                                       &candidates);
3675 
3676             if (n_candidates == 1)
3677               i = 0;
3678             else
3679               {
3680                 i = ada_resolve_function
3681                   (candidates.data (), n_candidates,
3682                    argvec, nargs,
3683                    exp->elts[pc + 5].symbol->linkage_name (),
3684                    context_type, parse_completion);
3685                 if (i < 0)
3686                   error (_("Could not find a match for %s"),
3687                          exp->elts[pc + 5].symbol->print_name ());
3688               }
3689 
3690             exp->elts[pc + 4].block = candidates[i].block;
3691             exp->elts[pc + 5].symbol = candidates[i].symbol;
3692 	    tracker->update (candidates[i]);
3693           }
3694       }
3695       break;
3696     case BINOP_ADD:
3697     case BINOP_SUB:
3698     case BINOP_MUL:
3699     case BINOP_DIV:
3700     case BINOP_REM:
3701     case BINOP_MOD:
3702     case BINOP_CONCAT:
3703     case BINOP_BITWISE_AND:
3704     case BINOP_BITWISE_IOR:
3705     case BINOP_BITWISE_XOR:
3706     case BINOP_EQUAL:
3707     case BINOP_NOTEQUAL:
3708     case BINOP_LESS:
3709     case BINOP_GTR:
3710     case BINOP_LEQ:
3711     case BINOP_GEQ:
3712     case BINOP_EXP:
3713     case UNOP_NEG:
3714     case UNOP_PLUS:
3715     case UNOP_LOGICAL_NOT:
3716     case UNOP_ABS:
3717       if (possible_user_operator_p (op, argvec))
3718         {
3719 	  std::vector<struct block_symbol> candidates;
3720           int n_candidates;
3721 
3722           n_candidates =
3723             ada_lookup_symbol_list (ada_decoded_op_name (op),
3724 				    NULL, VAR_DOMAIN,
3725                                     &candidates);
3726 
3727           i = ada_resolve_function (candidates.data (), n_candidates, argvec,
3728 				    nargs, ada_decoded_op_name (op), NULL,
3729 				    parse_completion);
3730           if (i < 0)
3731             break;
3732 
3733 	  replace_operator_with_call (expp, pc, nargs, 1,
3734 				      candidates[i].symbol,
3735 				      candidates[i].block);
3736           exp = expp->get ();
3737         }
3738       break;
3739 
3740     case OP_TYPE:
3741     case OP_REGISTER:
3742       return NULL;
3743     }
3744 
3745   *pos = pc;
3746   if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3747     return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3748 				    exp->elts[pc + 1].objfile,
3749 				    exp->elts[pc + 2].msymbol);
3750   else
3751     return evaluate_subexp_type (exp, pos);
3752 }
3753 
3754 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3755    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3756    a non-pointer.  */
3757 /* The term "match" here is rather loose.  The match is heuristic and
3758    liberal.  */
3759 
3760 static int
3761 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3762 {
3763   ftype = ada_check_typedef (ftype);
3764   atype = ada_check_typedef (atype);
3765 
3766   if (ftype->code () == TYPE_CODE_REF)
3767     ftype = TYPE_TARGET_TYPE (ftype);
3768   if (atype->code () == TYPE_CODE_REF)
3769     atype = TYPE_TARGET_TYPE (atype);
3770 
3771   switch (ftype->code ())
3772     {
3773     default:
3774       return ftype->code () == atype->code ();
3775     case TYPE_CODE_PTR:
3776       if (atype->code () == TYPE_CODE_PTR)
3777         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3778                                TYPE_TARGET_TYPE (atype), 0);
3779       else
3780         return (may_deref
3781                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3782     case TYPE_CODE_INT:
3783     case TYPE_CODE_ENUM:
3784     case TYPE_CODE_RANGE:
3785       switch (atype->code ())
3786         {
3787         case TYPE_CODE_INT:
3788         case TYPE_CODE_ENUM:
3789         case TYPE_CODE_RANGE:
3790           return 1;
3791         default:
3792           return 0;
3793         }
3794 
3795     case TYPE_CODE_ARRAY:
3796       return (atype->code () == TYPE_CODE_ARRAY
3797               || ada_is_array_descriptor_type (atype));
3798 
3799     case TYPE_CODE_STRUCT:
3800       if (ada_is_array_descriptor_type (ftype))
3801         return (atype->code () == TYPE_CODE_ARRAY
3802                 || ada_is_array_descriptor_type (atype));
3803       else
3804         return (atype->code () == TYPE_CODE_STRUCT
3805                 && !ada_is_array_descriptor_type (atype));
3806 
3807     case TYPE_CODE_UNION:
3808     case TYPE_CODE_FLT:
3809       return (atype->code () == ftype->code ());
3810     }
3811 }
3812 
3813 /* Return non-zero if the formals of FUNC "sufficiently match" the
3814    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3815    may also be an enumeral, in which case it is treated as a 0-
3816    argument function.  */
3817 
3818 static int
3819 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3820 {
3821   int i;
3822   struct type *func_type = SYMBOL_TYPE (func);
3823 
3824   if (SYMBOL_CLASS (func) == LOC_CONST
3825       && func_type->code () == TYPE_CODE_ENUM)
3826     return (n_actuals == 0);
3827   else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
3828     return 0;
3829 
3830   if (func_type->num_fields () != n_actuals)
3831     return 0;
3832 
3833   for (i = 0; i < n_actuals; i += 1)
3834     {
3835       if (actuals[i] == NULL)
3836         return 0;
3837       else
3838         {
3839           struct type *ftype = ada_check_typedef (func_type->field (i).type ());
3840           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3841 
3842           if (!ada_type_match (ftype, atype, 1))
3843             return 0;
3844         }
3845     }
3846   return 1;
3847 }
3848 
3849 /* False iff function type FUNC_TYPE definitely does not produce a value
3850    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3851    FUNC_TYPE is not a valid function type with a non-null return type
3852    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3853 
3854 static int
3855 return_match (struct type *func_type, struct type *context_type)
3856 {
3857   struct type *return_type;
3858 
3859   if (func_type == NULL)
3860     return 1;
3861 
3862   if (func_type->code () == TYPE_CODE_FUNC)
3863     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3864   else
3865     return_type = get_base_type (func_type);
3866   if (return_type == NULL)
3867     return 1;
3868 
3869   context_type = get_base_type (context_type);
3870 
3871   if (return_type->code () == TYPE_CODE_ENUM)
3872     return context_type == NULL || return_type == context_type;
3873   else if (context_type == NULL)
3874     return return_type->code () != TYPE_CODE_VOID;
3875   else
3876     return return_type->code () == context_type->code ();
3877 }
3878 
3879 
3880 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3881    function (if any) that matches the types of the NARGS arguments in
3882    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3883    that returns that type, then eliminate matches that don't.  If
3884    CONTEXT_TYPE is void and there is at least one match that does not
3885    return void, eliminate all matches that do.
3886 
3887    Asks the user if there is more than one match remaining.  Returns -1
3888    if there is no such symbol or none is selected.  NAME is used
3889    solely for messages.  May re-arrange and modify SYMS in
3890    the process; the index returned is for the modified vector.  */
3891 
3892 static int
3893 ada_resolve_function (struct block_symbol syms[],
3894                       int nsyms, struct value **args, int nargs,
3895                       const char *name, struct type *context_type,
3896 		      int parse_completion)
3897 {
3898   int fallback;
3899   int k;
3900   int m;                        /* Number of hits */
3901 
3902   m = 0;
3903   /* In the first pass of the loop, we only accept functions matching
3904      context_type.  If none are found, we add a second pass of the loop
3905      where every function is accepted.  */
3906   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3907     {
3908       for (k = 0; k < nsyms; k += 1)
3909         {
3910           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
3911 
3912           if (ada_args_match (syms[k].symbol, args, nargs)
3913               && (fallback || return_match (type, context_type)))
3914             {
3915               syms[m] = syms[k];
3916               m += 1;
3917             }
3918         }
3919     }
3920 
3921   /* If we got multiple matches, ask the user which one to use.  Don't do this
3922      interactive thing during completion, though, as the purpose of the
3923      completion is providing a list of all possible matches.  Prompting the
3924      user to filter it down would be completely unexpected in this case.  */
3925   if (m == 0)
3926     return -1;
3927   else if (m > 1 && !parse_completion)
3928     {
3929       printf_filtered (_("Multiple matches for %s\n"), name);
3930       user_select_syms (syms, m, 1);
3931       return 0;
3932     }
3933   return 0;
3934 }
3935 
3936 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3937    on the function identified by SYM and BLOCK, and taking NARGS
3938    arguments.  Update *EXPP as needed to hold more space.  */
3939 
3940 static void
3941 replace_operator_with_call (expression_up *expp, int pc, int nargs,
3942                             int oplen, struct symbol *sym,
3943                             const struct block *block)
3944 {
3945   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3946      symbol, -oplen for operator being replaced).  */
3947   struct expression *newexp = (struct expression *)
3948     xzalloc (sizeof (struct expression)
3949              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3950   struct expression *exp = expp->get ();
3951 
3952   newexp->nelts = exp->nelts + 7 - oplen;
3953   newexp->language_defn = exp->language_defn;
3954   newexp->gdbarch = exp->gdbarch;
3955   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3956   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3957           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3958 
3959   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3960   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3961 
3962   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3963   newexp->elts[pc + 4].block = block;
3964   newexp->elts[pc + 5].symbol = sym;
3965 
3966   expp->reset (newexp);
3967 }
3968 
3969 /* Type-class predicates */
3970 
3971 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3972    or FLOAT).  */
3973 
3974 static int
3975 numeric_type_p (struct type *type)
3976 {
3977   if (type == NULL)
3978     return 0;
3979   else
3980     {
3981       switch (type->code ())
3982         {
3983         case TYPE_CODE_INT:
3984         case TYPE_CODE_FLT:
3985           return 1;
3986         case TYPE_CODE_RANGE:
3987           return (type == TYPE_TARGET_TYPE (type)
3988                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3989         default:
3990           return 0;
3991         }
3992     }
3993 }
3994 
3995 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3996 
3997 static int
3998 integer_type_p (struct type *type)
3999 {
4000   if (type == NULL)
4001     return 0;
4002   else
4003     {
4004       switch (type->code ())
4005         {
4006         case TYPE_CODE_INT:
4007           return 1;
4008         case TYPE_CODE_RANGE:
4009           return (type == TYPE_TARGET_TYPE (type)
4010                   || integer_type_p (TYPE_TARGET_TYPE (type)));
4011         default:
4012           return 0;
4013         }
4014     }
4015 }
4016 
4017 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
4018 
4019 static int
4020 scalar_type_p (struct type *type)
4021 {
4022   if (type == NULL)
4023     return 0;
4024   else
4025     {
4026       switch (type->code ())
4027         {
4028         case TYPE_CODE_INT:
4029         case TYPE_CODE_RANGE:
4030         case TYPE_CODE_ENUM:
4031         case TYPE_CODE_FLT:
4032           return 1;
4033         default:
4034           return 0;
4035         }
4036     }
4037 }
4038 
4039 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
4040 
4041 static int
4042 discrete_type_p (struct type *type)
4043 {
4044   if (type == NULL)
4045     return 0;
4046   else
4047     {
4048       switch (type->code ())
4049         {
4050         case TYPE_CODE_INT:
4051         case TYPE_CODE_RANGE:
4052         case TYPE_CODE_ENUM:
4053         case TYPE_CODE_BOOL:
4054           return 1;
4055         default:
4056           return 0;
4057         }
4058     }
4059 }
4060 
4061 /* Returns non-zero if OP with operands in the vector ARGS could be
4062    a user-defined function.  Errs on the side of pre-defined operators
4063    (i.e., result 0).  */
4064 
4065 static int
4066 possible_user_operator_p (enum exp_opcode op, struct value *args[])
4067 {
4068   struct type *type0 =
4069     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
4070   struct type *type1 =
4071     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
4072 
4073   if (type0 == NULL)
4074     return 0;
4075 
4076   switch (op)
4077     {
4078     default:
4079       return 0;
4080 
4081     case BINOP_ADD:
4082     case BINOP_SUB:
4083     case BINOP_MUL:
4084     case BINOP_DIV:
4085       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
4086 
4087     case BINOP_REM:
4088     case BINOP_MOD:
4089     case BINOP_BITWISE_AND:
4090     case BINOP_BITWISE_IOR:
4091     case BINOP_BITWISE_XOR:
4092       return (!(integer_type_p (type0) && integer_type_p (type1)));
4093 
4094     case BINOP_EQUAL:
4095     case BINOP_NOTEQUAL:
4096     case BINOP_LESS:
4097     case BINOP_GTR:
4098     case BINOP_LEQ:
4099     case BINOP_GEQ:
4100       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4101 
4102     case BINOP_CONCAT:
4103       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4104 
4105     case BINOP_EXP:
4106       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4107 
4108     case UNOP_NEG:
4109     case UNOP_PLUS:
4110     case UNOP_LOGICAL_NOT:
4111     case UNOP_ABS:
4112       return (!numeric_type_p (type0));
4113 
4114     }
4115 }
4116 
4117                                 /* Renaming */
4118 
4119 /* NOTES:
4120 
4121    1. In the following, we assume that a renaming type's name may
4122       have an ___XD suffix.  It would be nice if this went away at some
4123       point.
4124    2. We handle both the (old) purely type-based representation of
4125       renamings and the (new) variable-based encoding.  At some point,
4126       it is devoutly to be hoped that the former goes away
4127       (FIXME: hilfinger-2007-07-09).
4128    3. Subprogram renamings are not implemented, although the XRS
4129       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4130 
4131 /* If SYM encodes a renaming,
4132 
4133        <renaming> renames <renamed entity>,
4134 
4135    sets *LEN to the length of the renamed entity's name,
4136    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4137    the string describing the subcomponent selected from the renamed
4138    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4139    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4140    are undefined).  Otherwise, returns a value indicating the category
4141    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4142    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4143    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4144    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4145    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4146    may be NULL, in which case they are not assigned.
4147 
4148    [Currently, however, GCC does not generate subprogram renamings.]  */
4149 
4150 enum ada_renaming_category
4151 ada_parse_renaming (struct symbol *sym,
4152 		    const char **renamed_entity, int *len,
4153 		    const char **renaming_expr)
4154 {
4155   enum ada_renaming_category kind;
4156   const char *info;
4157   const char *suffix;
4158 
4159   if (sym == NULL)
4160     return ADA_NOT_RENAMING;
4161   switch (SYMBOL_CLASS (sym))
4162     {
4163     default:
4164       return ADA_NOT_RENAMING;
4165     case LOC_LOCAL:
4166     case LOC_STATIC:
4167     case LOC_COMPUTED:
4168     case LOC_OPTIMIZED_OUT:
4169       info = strstr (sym->linkage_name (), "___XR");
4170       if (info == NULL)
4171 	return ADA_NOT_RENAMING;
4172       switch (info[5])
4173 	{
4174 	case '_':
4175 	  kind = ADA_OBJECT_RENAMING;
4176 	  info += 6;
4177 	  break;
4178 	case 'E':
4179 	  kind = ADA_EXCEPTION_RENAMING;
4180 	  info += 7;
4181 	  break;
4182 	case 'P':
4183 	  kind = ADA_PACKAGE_RENAMING;
4184 	  info += 7;
4185 	  break;
4186 	case 'S':
4187 	  kind = ADA_SUBPROGRAM_RENAMING;
4188 	  info += 7;
4189 	  break;
4190 	default:
4191 	  return ADA_NOT_RENAMING;
4192 	}
4193     }
4194 
4195   if (renamed_entity != NULL)
4196     *renamed_entity = info;
4197   suffix = strstr (info, "___XE");
4198   if (suffix == NULL || suffix == info)
4199     return ADA_NOT_RENAMING;
4200   if (len != NULL)
4201     *len = strlen (info) - strlen (suffix);
4202   suffix += 5;
4203   if (renaming_expr != NULL)
4204     *renaming_expr = suffix;
4205   return kind;
4206 }
4207 
4208 /* Compute the value of the given RENAMING_SYM, which is expected to
4209    be a symbol encoding a renaming expression.  BLOCK is the block
4210    used to evaluate the renaming.  */
4211 
4212 static struct value *
4213 ada_read_renaming_var_value (struct symbol *renaming_sym,
4214 			     const struct block *block)
4215 {
4216   const char *sym_name;
4217 
4218   sym_name = renaming_sym->linkage_name ();
4219   expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4220   return evaluate_expression (expr.get ());
4221 }
4222 
4223 
4224                                 /* Evaluation: Function Calls */
4225 
4226 /* Return an lvalue containing the value VAL.  This is the identity on
4227    lvalues, and otherwise has the side-effect of allocating memory
4228    in the inferior where a copy of the value contents is copied.  */
4229 
4230 static struct value *
4231 ensure_lval (struct value *val)
4232 {
4233   if (VALUE_LVAL (val) == not_lval
4234       || VALUE_LVAL (val) == lval_internalvar)
4235     {
4236       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4237       const CORE_ADDR addr =
4238         value_as_long (value_allocate_space_in_inferior (len));
4239 
4240       VALUE_LVAL (val) = lval_memory;
4241       set_value_address (val, addr);
4242       write_memory (addr, value_contents (val), len);
4243     }
4244 
4245   return val;
4246 }
4247 
4248 /* Given ARG, a value of type (pointer or reference to a)*
4249    structure/union, extract the component named NAME from the ultimate
4250    target structure/union and return it as a value with its
4251    appropriate type.
4252 
4253    The routine searches for NAME among all members of the structure itself
4254    and (recursively) among all members of any wrapper members
4255    (e.g., '_parent').
4256 
4257    If NO_ERR, then simply return NULL in case of error, rather than
4258    calling error.  */
4259 
4260 static struct value *
4261 ada_value_struct_elt (struct value *arg, const char *name, int no_err)
4262 {
4263   struct type *t, *t1;
4264   struct value *v;
4265   int check_tag;
4266 
4267   v = NULL;
4268   t1 = t = ada_check_typedef (value_type (arg));
4269   if (t->code () == TYPE_CODE_REF)
4270     {
4271       t1 = TYPE_TARGET_TYPE (t);
4272       if (t1 == NULL)
4273 	goto BadValue;
4274       t1 = ada_check_typedef (t1);
4275       if (t1->code () == TYPE_CODE_PTR)
4276         {
4277           arg = coerce_ref (arg);
4278           t = t1;
4279         }
4280     }
4281 
4282   while (t->code () == TYPE_CODE_PTR)
4283     {
4284       t1 = TYPE_TARGET_TYPE (t);
4285       if (t1 == NULL)
4286 	goto BadValue;
4287       t1 = ada_check_typedef (t1);
4288       if (t1->code () == TYPE_CODE_PTR)
4289         {
4290           arg = value_ind (arg);
4291           t = t1;
4292         }
4293       else
4294         break;
4295     }
4296 
4297   if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION)
4298     goto BadValue;
4299 
4300   if (t1 == t)
4301     v = ada_search_struct_field (name, arg, 0, t);
4302   else
4303     {
4304       int bit_offset, bit_size, byte_offset;
4305       struct type *field_type;
4306       CORE_ADDR address;
4307 
4308       if (t->code () == TYPE_CODE_PTR)
4309 	address = value_address (ada_value_ind (arg));
4310       else
4311 	address = value_address (ada_coerce_ref (arg));
4312 
4313       /* Check to see if this is a tagged type.  We also need to handle
4314          the case where the type is a reference to a tagged type, but
4315          we have to be careful to exclude pointers to tagged types.
4316          The latter should be shown as usual (as a pointer), whereas
4317          a reference should mostly be transparent to the user.  */
4318 
4319       if (ada_is_tagged_type (t1, 0)
4320           || (t1->code () == TYPE_CODE_REF
4321               && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
4322         {
4323           /* We first try to find the searched field in the current type.
4324 	     If not found then let's look in the fixed type.  */
4325 
4326           if (!find_struct_field (name, t1, 0,
4327                                   &field_type, &byte_offset, &bit_offset,
4328                                   &bit_size, NULL))
4329 	    check_tag = 1;
4330 	  else
4331 	    check_tag = 0;
4332         }
4333       else
4334 	check_tag = 0;
4335 
4336       /* Convert to fixed type in all cases, so that we have proper
4337 	 offsets to each field in unconstrained record types.  */
4338       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
4339 			      address, NULL, check_tag);
4340 
4341       if (find_struct_field (name, t1, 0,
4342                              &field_type, &byte_offset, &bit_offset,
4343                              &bit_size, NULL))
4344         {
4345           if (bit_size != 0)
4346             {
4347               if (t->code () == TYPE_CODE_REF)
4348                 arg = ada_coerce_ref (arg);
4349               else
4350                 arg = ada_value_ind (arg);
4351               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
4352                                                   bit_offset, bit_size,
4353                                                   field_type);
4354             }
4355           else
4356             v = value_at_lazy (field_type, address + byte_offset);
4357         }
4358     }
4359 
4360   if (v != NULL || no_err)
4361     return v;
4362   else
4363     error (_("There is no member named %s."), name);
4364 
4365  BadValue:
4366   if (no_err)
4367     return NULL;
4368   else
4369     error (_("Attempt to extract a component of "
4370 	     "a value that is not a record."));
4371 }
4372 
4373 /* Return the value ACTUAL, converted to be an appropriate value for a
4374    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4375    allocating any necessary descriptors (fat pointers), or copies of
4376    values not residing in memory, updating it as needed.  */
4377 
4378 struct value *
4379 ada_convert_actual (struct value *actual, struct type *formal_type0)
4380 {
4381   struct type *actual_type = ada_check_typedef (value_type (actual));
4382   struct type *formal_type = ada_check_typedef (formal_type0);
4383   struct type *formal_target =
4384     formal_type->code () == TYPE_CODE_PTR
4385     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4386   struct type *actual_target =
4387     actual_type->code () == TYPE_CODE_PTR
4388     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4389 
4390   if (ada_is_array_descriptor_type (formal_target)
4391       && actual_target->code () == TYPE_CODE_ARRAY)
4392     return make_array_descriptor (formal_type, actual);
4393   else if (formal_type->code () == TYPE_CODE_PTR
4394 	   || formal_type->code () == TYPE_CODE_REF)
4395     {
4396       struct value *result;
4397 
4398       if (formal_target->code () == TYPE_CODE_ARRAY
4399           && ada_is_array_descriptor_type (actual_target))
4400 	result = desc_data (actual);
4401       else if (formal_type->code () != TYPE_CODE_PTR)
4402         {
4403           if (VALUE_LVAL (actual) != lval_memory)
4404             {
4405               struct value *val;
4406 
4407               actual_type = ada_check_typedef (value_type (actual));
4408               val = allocate_value (actual_type);
4409               memcpy ((char *) value_contents_raw (val),
4410                       (char *) value_contents (actual),
4411                       TYPE_LENGTH (actual_type));
4412               actual = ensure_lval (val);
4413             }
4414           result = value_addr (actual);
4415         }
4416       else
4417 	return actual;
4418       return value_cast_pointers (formal_type, result, 0);
4419     }
4420   else if (actual_type->code () == TYPE_CODE_PTR)
4421     return ada_value_ind (actual);
4422   else if (ada_is_aligner_type (formal_type))
4423     {
4424       /* We need to turn this parameter into an aligner type
4425 	 as well.  */
4426       struct value *aligner = allocate_value (formal_type);
4427       struct value *component = ada_value_struct_elt (aligner, "F", 0);
4428 
4429       value_assign_to_component (aligner, component, actual);
4430       return aligner;
4431     }
4432 
4433   return actual;
4434 }
4435 
4436 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4437    type TYPE.  This is usually an inefficient no-op except on some targets
4438    (such as AVR) where the representation of a pointer and an address
4439    differs.  */
4440 
4441 static CORE_ADDR
4442 value_pointer (struct value *value, struct type *type)
4443 {
4444   struct gdbarch *gdbarch = get_type_arch (type);
4445   unsigned len = TYPE_LENGTH (type);
4446   gdb_byte *buf = (gdb_byte *) alloca (len);
4447   CORE_ADDR addr;
4448 
4449   addr = value_address (value);
4450   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4451   addr = extract_unsigned_integer (buf, len, type_byte_order (type));
4452   return addr;
4453 }
4454 
4455 
4456 /* Push a descriptor of type TYPE for array value ARR on the stack at
4457    *SP, updating *SP to reflect the new descriptor.  Return either
4458    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4459    to-descriptor type rather than a descriptor type), a struct value *
4460    representing a pointer to this descriptor.  */
4461 
4462 static struct value *
4463 make_array_descriptor (struct type *type, struct value *arr)
4464 {
4465   struct type *bounds_type = desc_bounds_type (type);
4466   struct type *desc_type = desc_base_type (type);
4467   struct value *descriptor = allocate_value (desc_type);
4468   struct value *bounds = allocate_value (bounds_type);
4469   int i;
4470 
4471   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4472        i > 0; i -= 1)
4473     {
4474       modify_field (value_type (bounds), value_contents_writeable (bounds),
4475 		    ada_array_bound (arr, i, 0),
4476 		    desc_bound_bitpos (bounds_type, i, 0),
4477 		    desc_bound_bitsize (bounds_type, i, 0));
4478       modify_field (value_type (bounds), value_contents_writeable (bounds),
4479 		    ada_array_bound (arr, i, 1),
4480 		    desc_bound_bitpos (bounds_type, i, 1),
4481 		    desc_bound_bitsize (bounds_type, i, 1));
4482     }
4483 
4484   bounds = ensure_lval (bounds);
4485 
4486   modify_field (value_type (descriptor),
4487 		value_contents_writeable (descriptor),
4488 		value_pointer (ensure_lval (arr),
4489 			       desc_type->field (0).type ()),
4490 		fat_pntr_data_bitpos (desc_type),
4491 		fat_pntr_data_bitsize (desc_type));
4492 
4493   modify_field (value_type (descriptor),
4494 		value_contents_writeable (descriptor),
4495 		value_pointer (bounds,
4496 			       desc_type->field (1).type ()),
4497 		fat_pntr_bounds_bitpos (desc_type),
4498 		fat_pntr_bounds_bitsize (desc_type));
4499 
4500   descriptor = ensure_lval (descriptor);
4501 
4502   if (type->code () == TYPE_CODE_PTR)
4503     return value_addr (descriptor);
4504   else
4505     return descriptor;
4506 }
4507 
4508                                 /* Symbol Cache Module */
4509 
4510 /* Performance measurements made as of 2010-01-15 indicate that
4511    this cache does bring some noticeable improvements.  Depending
4512    on the type of entity being printed, the cache can make it as much
4513    as an order of magnitude faster than without it.
4514 
4515    The descriptive type DWARF extension has significantly reduced
4516    the need for this cache, at least when DWARF is being used.  However,
4517    even in this case, some expensive name-based symbol searches are still
4518    sometimes necessary - to find an XVZ variable, mostly.  */
4519 
4520 /* Initialize the contents of SYM_CACHE.  */
4521 
4522 static void
4523 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4524 {
4525   obstack_init (&sym_cache->cache_space);
4526   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4527 }
4528 
4529 /* Free the memory used by SYM_CACHE.  */
4530 
4531 static void
4532 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4533 {
4534   obstack_free (&sym_cache->cache_space, NULL);
4535   xfree (sym_cache);
4536 }
4537 
4538 /* Return the symbol cache associated to the given program space PSPACE.
4539    If not allocated for this PSPACE yet, allocate and initialize one.  */
4540 
4541 static struct ada_symbol_cache *
4542 ada_get_symbol_cache (struct program_space *pspace)
4543 {
4544   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4545 
4546   if (pspace_data->sym_cache == NULL)
4547     {
4548       pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4549       ada_init_symbol_cache (pspace_data->sym_cache);
4550     }
4551 
4552   return pspace_data->sym_cache;
4553 }
4554 
4555 /* Clear all entries from the symbol cache.  */
4556 
4557 static void
4558 ada_clear_symbol_cache (void)
4559 {
4560   struct ada_symbol_cache *sym_cache
4561     = ada_get_symbol_cache (current_program_space);
4562 
4563   obstack_free (&sym_cache->cache_space, NULL);
4564   ada_init_symbol_cache (sym_cache);
4565 }
4566 
4567 /* Search our cache for an entry matching NAME and DOMAIN.
4568    Return it if found, or NULL otherwise.  */
4569 
4570 static struct cache_entry **
4571 find_entry (const char *name, domain_enum domain)
4572 {
4573   struct ada_symbol_cache *sym_cache
4574     = ada_get_symbol_cache (current_program_space);
4575   int h = msymbol_hash (name) % HASH_SIZE;
4576   struct cache_entry **e;
4577 
4578   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4579     {
4580       if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
4581         return e;
4582     }
4583   return NULL;
4584 }
4585 
4586 /* Search the symbol cache for an entry matching NAME and DOMAIN.
4587    Return 1 if found, 0 otherwise.
4588 
4589    If an entry was found and SYM is not NULL, set *SYM to the entry's
4590    SYM.  Same principle for BLOCK if not NULL.  */
4591 
4592 static int
4593 lookup_cached_symbol (const char *name, domain_enum domain,
4594                       struct symbol **sym, const struct block **block)
4595 {
4596   struct cache_entry **e = find_entry (name, domain);
4597 
4598   if (e == NULL)
4599     return 0;
4600   if (sym != NULL)
4601     *sym = (*e)->sym;
4602   if (block != NULL)
4603     *block = (*e)->block;
4604   return 1;
4605 }
4606 
4607 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4608    in domain DOMAIN, save this result in our symbol cache.  */
4609 
4610 static void
4611 cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
4612               const struct block *block)
4613 {
4614   struct ada_symbol_cache *sym_cache
4615     = ada_get_symbol_cache (current_program_space);
4616   int h;
4617   struct cache_entry *e;
4618 
4619   /* Symbols for builtin types don't have a block.
4620      For now don't cache such symbols.  */
4621   if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4622     return;
4623 
4624   /* If the symbol is a local symbol, then do not cache it, as a search
4625      for that symbol depends on the context.  To determine whether
4626      the symbol is local or not, we check the block where we found it
4627      against the global and static blocks of its associated symtab.  */
4628   if (sym
4629       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4630 			    GLOBAL_BLOCK) != block
4631       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4632 			    STATIC_BLOCK) != block)
4633     return;
4634 
4635   h = msymbol_hash (name) % HASH_SIZE;
4636   e = XOBNEW (&sym_cache->cache_space, cache_entry);
4637   e->next = sym_cache->root[h];
4638   sym_cache->root[h] = e;
4639   e->name = obstack_strdup (&sym_cache->cache_space, name);
4640   e->sym = sym;
4641   e->domain = domain;
4642   e->block = block;
4643 }
4644 
4645                                 /* Symbol Lookup */
4646 
4647 /* Return the symbol name match type that should be used used when
4648    searching for all symbols matching LOOKUP_NAME.
4649 
4650    LOOKUP_NAME is expected to be a symbol name after transformation
4651    for Ada lookups.  */
4652 
4653 static symbol_name_match_type
4654 name_match_type_from_name (const char *lookup_name)
4655 {
4656   return (strstr (lookup_name, "__") == NULL
4657 	  ? symbol_name_match_type::WILD
4658 	  : symbol_name_match_type::FULL);
4659 }
4660 
4661 /* Return the result of a standard (literal, C-like) lookup of NAME in
4662    given DOMAIN, visible from lexical block BLOCK.  */
4663 
4664 static struct symbol *
4665 standard_lookup (const char *name, const struct block *block,
4666                  domain_enum domain)
4667 {
4668   /* Initialize it just to avoid a GCC false warning.  */
4669   struct block_symbol sym = {};
4670 
4671   if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4672     return sym.symbol;
4673   ada_lookup_encoded_symbol (name, block, domain, &sym);
4674   cache_symbol (name, domain, sym.symbol, sym.block);
4675   return sym.symbol;
4676 }
4677 
4678 
4679 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4680    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions,
4681    since they contend in overloading in the same way.  */
4682 static int
4683 is_nonfunction (struct block_symbol syms[], int n)
4684 {
4685   int i;
4686 
4687   for (i = 0; i < n; i += 1)
4688     if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_FUNC
4689         && (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM
4690             || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
4691       return 1;
4692 
4693   return 0;
4694 }
4695 
4696 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4697    struct types.  Otherwise, they may not.  */
4698 
4699 static int
4700 equiv_types (struct type *type0, struct type *type1)
4701 {
4702   if (type0 == type1)
4703     return 1;
4704   if (type0 == NULL || type1 == NULL
4705       || type0->code () != type1->code ())
4706     return 0;
4707   if ((type0->code () == TYPE_CODE_STRUCT
4708        || type0->code () == TYPE_CODE_ENUM)
4709       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4710       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4711     return 1;
4712 
4713   return 0;
4714 }
4715 
4716 /* True iff SYM0 represents the same entity as SYM1, or one that is
4717    no more defined than that of SYM1.  */
4718 
4719 static int
4720 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4721 {
4722   if (sym0 == sym1)
4723     return 1;
4724   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4725       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4726     return 0;
4727 
4728   switch (SYMBOL_CLASS (sym0))
4729     {
4730     case LOC_UNDEF:
4731       return 1;
4732     case LOC_TYPEDEF:
4733       {
4734         struct type *type0 = SYMBOL_TYPE (sym0);
4735         struct type *type1 = SYMBOL_TYPE (sym1);
4736         const char *name0 = sym0->linkage_name ();
4737         const char *name1 = sym1->linkage_name ();
4738         int len0 = strlen (name0);
4739 
4740         return
4741           type0->code () == type1->code ()
4742           && (equiv_types (type0, type1)
4743               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4744                   && startswith (name1 + len0, "___XV")));
4745       }
4746     case LOC_CONST:
4747       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4748         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4749 
4750     case LOC_STATIC:
4751       {
4752         const char *name0 = sym0->linkage_name ();
4753         const char *name1 = sym1->linkage_name ();
4754         return (strcmp (name0, name1) == 0
4755                 && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
4756       }
4757 
4758     default:
4759       return 0;
4760     }
4761 }
4762 
4763 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
4764    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4765 
4766 static void
4767 add_defn_to_vec (struct obstack *obstackp,
4768                  struct symbol *sym,
4769                  const struct block *block)
4770 {
4771   int i;
4772   struct block_symbol *prevDefns = defns_collected (obstackp, 0);
4773 
4774   /* Do not try to complete stub types, as the debugger is probably
4775      already scanning all symbols matching a certain name at the
4776      time when this function is called.  Trying to replace the stub
4777      type by its associated full type will cause us to restart a scan
4778      which may lead to an infinite recursion.  Instead, the client
4779      collecting the matching symbols will end up collecting several
4780      matches, with at least one of them complete.  It can then filter
4781      out the stub ones if needed.  */
4782 
4783   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4784     {
4785       if (lesseq_defined_than (sym, prevDefns[i].symbol))
4786         return;
4787       else if (lesseq_defined_than (prevDefns[i].symbol, sym))
4788         {
4789           prevDefns[i].symbol = sym;
4790           prevDefns[i].block = block;
4791           return;
4792         }
4793     }
4794 
4795   {
4796     struct block_symbol info;
4797 
4798     info.symbol = sym;
4799     info.block = block;
4800     obstack_grow (obstackp, &info, sizeof (struct block_symbol));
4801   }
4802 }
4803 
4804 /* Number of block_symbol structures currently collected in current vector in
4805    OBSTACKP.  */
4806 
4807 static int
4808 num_defns_collected (struct obstack *obstackp)
4809 {
4810   return obstack_object_size (obstackp) / sizeof (struct block_symbol);
4811 }
4812 
4813 /* Vector of block_symbol structures currently collected in current vector in
4814    OBSTACKP.  If FINISH, close off the vector and return its final address.  */
4815 
4816 static struct block_symbol *
4817 defns_collected (struct obstack *obstackp, int finish)
4818 {
4819   if (finish)
4820     return (struct block_symbol *) obstack_finish (obstackp);
4821   else
4822     return (struct block_symbol *) obstack_base (obstackp);
4823 }
4824 
4825 /* Return a bound minimal symbol matching NAME according to Ada
4826    decoding rules.  Returns an invalid symbol if there is no such
4827    minimal symbol.  Names prefixed with "standard__" are handled
4828    specially: "standard__" is first stripped off, and only static and
4829    global symbols are searched.  */
4830 
4831 struct bound_minimal_symbol
4832 ada_lookup_simple_minsym (const char *name)
4833 {
4834   struct bound_minimal_symbol result;
4835 
4836   memset (&result, 0, sizeof (result));
4837 
4838   symbol_name_match_type match_type = name_match_type_from_name (name);
4839   lookup_name_info lookup_name (name, match_type);
4840 
4841   symbol_name_matcher_ftype *match_name
4842     = ada_get_symbol_name_matcher (lookup_name);
4843 
4844   for (objfile *objfile : current_program_space->objfiles ())
4845     {
4846       for (minimal_symbol *msymbol : objfile->msymbols ())
4847 	{
4848 	  if (match_name (msymbol->linkage_name (), lookup_name, NULL)
4849 	      && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4850 	    {
4851 	      result.minsym = msymbol;
4852 	      result.objfile = objfile;
4853 	      break;
4854 	    }
4855 	}
4856     }
4857 
4858   return result;
4859 }
4860 
4861 /* For all subprograms that statically enclose the subprogram of the
4862    selected frame, add symbols matching identifier NAME in DOMAIN
4863    and their blocks to the list of data in OBSTACKP, as for
4864    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4865    with a wildcard prefix.  */
4866 
4867 static void
4868 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4869 				  const lookup_name_info &lookup_name,
4870 				  domain_enum domain)
4871 {
4872 }
4873 
4874 /* True if TYPE is definitely an artificial type supplied to a symbol
4875    for which no debugging information was given in the symbol file.  */
4876 
4877 static int
4878 is_nondebugging_type (struct type *type)
4879 {
4880   const char *name = ada_type_name (type);
4881 
4882   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4883 }
4884 
4885 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4886    that are deemed "identical" for practical purposes.
4887 
4888    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4889    types and that their number of enumerals is identical (in other
4890    words, type1->num_fields () == type2->num_fields ()).  */
4891 
4892 static int
4893 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4894 {
4895   int i;
4896 
4897   /* The heuristic we use here is fairly conservative.  We consider
4898      that 2 enumerate types are identical if they have the same
4899      number of enumerals and that all enumerals have the same
4900      underlying value and name.  */
4901 
4902   /* All enums in the type should have an identical underlying value.  */
4903   for (i = 0; i < type1->num_fields (); i++)
4904     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4905       return 0;
4906 
4907   /* All enumerals should also have the same name (modulo any numerical
4908      suffix).  */
4909   for (i = 0; i < type1->num_fields (); i++)
4910     {
4911       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4912       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4913       int len_1 = strlen (name_1);
4914       int len_2 = strlen (name_2);
4915 
4916       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4917       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4918       if (len_1 != len_2
4919           || strncmp (TYPE_FIELD_NAME (type1, i),
4920 		      TYPE_FIELD_NAME (type2, i),
4921 		      len_1) != 0)
4922 	return 0;
4923     }
4924 
4925   return 1;
4926 }
4927 
4928 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4929    that are deemed "identical" for practical purposes.  Sometimes,
4930    enumerals are not strictly identical, but their types are so similar
4931    that they can be considered identical.
4932 
4933    For instance, consider the following code:
4934 
4935       type Color is (Black, Red, Green, Blue, White);
4936       type RGB_Color is new Color range Red .. Blue;
4937 
4938    Type RGB_Color is a subrange of an implicit type which is a copy
4939    of type Color. If we call that implicit type RGB_ColorB ("B" is
4940    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4941    As a result, when an expression references any of the enumeral
4942    by name (Eg. "print green"), the expression is technically
4943    ambiguous and the user should be asked to disambiguate. But
4944    doing so would only hinder the user, since it wouldn't matter
4945    what choice he makes, the outcome would always be the same.
4946    So, for practical purposes, we consider them as the same.  */
4947 
4948 static int
4949 symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
4950 {
4951   int i;
4952 
4953   /* Before performing a thorough comparison check of each type,
4954      we perform a series of inexpensive checks.  We expect that these
4955      checks will quickly fail in the vast majority of cases, and thus
4956      help prevent the unnecessary use of a more expensive comparison.
4957      Said comparison also expects us to make some of these checks
4958      (see ada_identical_enum_types_p).  */
4959 
4960   /* Quick check: All symbols should have an enum type.  */
4961   for (i = 0; i < syms.size (); i++)
4962     if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
4963       return 0;
4964 
4965   /* Quick check: They should all have the same value.  */
4966   for (i = 1; i < syms.size (); i++)
4967     if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
4968       return 0;
4969 
4970   /* Quick check: They should all have the same number of enumerals.  */
4971   for (i = 1; i < syms.size (); i++)
4972     if (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
4973         != SYMBOL_TYPE (syms[0].symbol)->num_fields ())
4974       return 0;
4975 
4976   /* All the sanity checks passed, so we might have a set of
4977      identical enumeration types.  Perform a more complete
4978      comparison of the type of each symbol.  */
4979   for (i = 1; i < syms.size (); i++)
4980     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
4981                                      SYMBOL_TYPE (syms[0].symbol)))
4982       return 0;
4983 
4984   return 1;
4985 }
4986 
4987 /* Remove any non-debugging symbols in SYMS that definitely
4988    duplicate other symbols in the list (The only case I know of where
4989    this happens is when object files containing stabs-in-ecoff are
4990    linked with files containing ordinary ecoff debugging symbols (or no
4991    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4992    Returns the number of items in the modified list.  */
4993 
4994 static int
4995 remove_extra_symbols (std::vector<struct block_symbol> *syms)
4996 {
4997   int i, j;
4998 
4999   /* We should never be called with less than 2 symbols, as there
5000      cannot be any extra symbol in that case.  But it's easy to
5001      handle, since we have nothing to do in that case.  */
5002   if (syms->size () < 2)
5003     return syms->size ();
5004 
5005   i = 0;
5006   while (i < syms->size ())
5007     {
5008       int remove_p = 0;
5009 
5010       /* If two symbols have the same name and one of them is a stub type,
5011          the get rid of the stub.  */
5012 
5013       if (TYPE_STUB (SYMBOL_TYPE ((*syms)[i].symbol))
5014           && (*syms)[i].symbol->linkage_name () != NULL)
5015         {
5016           for (j = 0; j < syms->size (); j++)
5017             {
5018               if (j != i
5019                   && !TYPE_STUB (SYMBOL_TYPE ((*syms)[j].symbol))
5020                   && (*syms)[j].symbol->linkage_name () != NULL
5021                   && strcmp ((*syms)[i].symbol->linkage_name (),
5022                              (*syms)[j].symbol->linkage_name ()) == 0)
5023                 remove_p = 1;
5024             }
5025         }
5026 
5027       /* Two symbols with the same name, same class and same address
5028          should be identical.  */
5029 
5030       else if ((*syms)[i].symbol->linkage_name () != NULL
5031           && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5032           && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
5033         {
5034           for (j = 0; j < syms->size (); j += 1)
5035             {
5036               if (i != j
5037                   && (*syms)[j].symbol->linkage_name () != NULL
5038                   && strcmp ((*syms)[i].symbol->linkage_name (),
5039                              (*syms)[j].symbol->linkage_name ()) == 0
5040                   && SYMBOL_CLASS ((*syms)[i].symbol)
5041 		       == SYMBOL_CLASS ((*syms)[j].symbol)
5042                   && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5043                   == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
5044                 remove_p = 1;
5045             }
5046         }
5047 
5048       if (remove_p)
5049 	syms->erase (syms->begin () + i);
5050       else
5051 	i += 1;
5052     }
5053 
5054   /* If all the remaining symbols are identical enumerals, then
5055      just keep the first one and discard the rest.
5056 
5057      Unlike what we did previously, we do not discard any entry
5058      unless they are ALL identical.  This is because the symbol
5059      comparison is not a strict comparison, but rather a practical
5060      comparison.  If all symbols are considered identical, then
5061      we can just go ahead and use the first one and discard the rest.
5062      But if we cannot reduce the list to a single element, we have
5063      to ask the user to disambiguate anyways.  And if we have to
5064      present a multiple-choice menu, it's less confusing if the list
5065      isn't missing some choices that were identical and yet distinct.  */
5066   if (symbols_are_identical_enums (*syms))
5067     syms->resize (1);
5068 
5069   return syms->size ();
5070 }
5071 
5072 /* Given a type that corresponds to a renaming entity, use the type name
5073    to extract the scope (package name or function name, fully qualified,
5074    and following the GNAT encoding convention) where this renaming has been
5075    defined.  */
5076 
5077 static std::string
5078 xget_renaming_scope (struct type *renaming_type)
5079 {
5080   /* The renaming types adhere to the following convention:
5081      <scope>__<rename>___<XR extension>.
5082      So, to extract the scope, we search for the "___XR" extension,
5083      and then backtrack until we find the first "__".  */
5084 
5085   const char *name = renaming_type->name ();
5086   const char *suffix = strstr (name, "___XR");
5087   const char *last;
5088 
5089   /* Now, backtrack a bit until we find the first "__".  Start looking
5090      at suffix - 3, as the <rename> part is at least one character long.  */
5091 
5092   for (last = suffix - 3; last > name; last--)
5093     if (last[0] == '_' && last[1] == '_')
5094       break;
5095 
5096   /* Make a copy of scope and return it.  */
5097   return std::string (name, last);
5098 }
5099 
5100 /* Return nonzero if NAME corresponds to a package name.  */
5101 
5102 static int
5103 is_package_name (const char *name)
5104 {
5105   /* Here, We take advantage of the fact that no symbols are generated
5106      for packages, while symbols are generated for each function.
5107      So the condition for NAME represent a package becomes equivalent
5108      to NAME not existing in our list of symbols.  There is only one
5109      small complication with library-level functions (see below).  */
5110 
5111   /* If it is a function that has not been defined at library level,
5112      then we should be able to look it up in the symbols.  */
5113   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5114     return 0;
5115 
5116   /* Library-level function names start with "_ada_".  See if function
5117      "_ada_" followed by NAME can be found.  */
5118 
5119   /* Do a quick check that NAME does not contain "__", since library-level
5120      functions names cannot contain "__" in them.  */
5121   if (strstr (name, "__") != NULL)
5122     return 0;
5123 
5124   std::string fun_name = string_printf ("_ada_%s", name);
5125 
5126   return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
5127 }
5128 
5129 /* Return nonzero if SYM corresponds to a renaming entity that is
5130    not visible from FUNCTION_NAME.  */
5131 
5132 static int
5133 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
5134 {
5135   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5136     return 0;
5137 
5138   std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
5139 
5140   /* If the rename has been defined in a package, then it is visible.  */
5141   if (is_package_name (scope.c_str ()))
5142     return 0;
5143 
5144   /* Check that the rename is in the current function scope by checking
5145      that its name starts with SCOPE.  */
5146 
5147   /* If the function name starts with "_ada_", it means that it is
5148      a library-level function.  Strip this prefix before doing the
5149      comparison, as the encoding for the renaming does not contain
5150      this prefix.  */
5151   if (startswith (function_name, "_ada_"))
5152     function_name += 5;
5153 
5154   return !startswith (function_name, scope.c_str ());
5155 }
5156 
5157 /* Remove entries from SYMS that corresponds to a renaming entity that
5158    is not visible from the function associated with CURRENT_BLOCK or
5159    that is superfluous due to the presence of more specific renaming
5160    information.  Places surviving symbols in the initial entries of
5161    SYMS and returns the number of surviving symbols.
5162 
5163    Rationale:
5164    First, in cases where an object renaming is implemented as a
5165    reference variable, GNAT may produce both the actual reference
5166    variable and the renaming encoding.  In this case, we discard the
5167    latter.
5168 
5169    Second, GNAT emits a type following a specified encoding for each renaming
5170    entity.  Unfortunately, STABS currently does not support the definition
5171    of types that are local to a given lexical block, so all renamings types
5172    are emitted at library level.  As a consequence, if an application
5173    contains two renaming entities using the same name, and a user tries to
5174    print the value of one of these entities, the result of the ada symbol
5175    lookup will also contain the wrong renaming type.
5176 
5177    This function partially covers for this limitation by attempting to
5178    remove from the SYMS list renaming symbols that should be visible
5179    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5180    method with the current information available.  The implementation
5181    below has a couple of limitations (FIXME: brobecker-2003-05-12):
5182 
5183       - When the user tries to print a rename in a function while there
5184         is another rename entity defined in a package:  Normally, the
5185         rename in the function has precedence over the rename in the
5186         package, so the latter should be removed from the list.  This is
5187         currently not the case.
5188 
5189       - This function will incorrectly remove valid renames if
5190         the CURRENT_BLOCK corresponds to a function which symbol name
5191         has been changed by an "Export" pragma.  As a consequence,
5192         the user will be unable to print such rename entities.  */
5193 
5194 static int
5195 remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5196 			     const struct block *current_block)
5197 {
5198   struct symbol *current_function;
5199   const char *current_function_name;
5200   int i;
5201   int is_new_style_renaming;
5202 
5203   /* If there is both a renaming foo___XR... encoded as a variable and
5204      a simple variable foo in the same block, discard the latter.
5205      First, zero out such symbols, then compress.  */
5206   is_new_style_renaming = 0;
5207   for (i = 0; i < syms->size (); i += 1)
5208     {
5209       struct symbol *sym = (*syms)[i].symbol;
5210       const struct block *block = (*syms)[i].block;
5211       const char *name;
5212       const char *suffix;
5213 
5214       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5215 	continue;
5216       name = sym->linkage_name ();
5217       suffix = strstr (name, "___XR");
5218 
5219       if (suffix != NULL)
5220 	{
5221 	  int name_len = suffix - name;
5222 	  int j;
5223 
5224 	  is_new_style_renaming = 1;
5225 	  for (j = 0; j < syms->size (); j += 1)
5226 	    if (i != j && (*syms)[j].symbol != NULL
5227 		&& strncmp (name, (*syms)[j].symbol->linkage_name (),
5228 			    name_len) == 0
5229 		&& block == (*syms)[j].block)
5230 	      (*syms)[j].symbol = NULL;
5231 	}
5232     }
5233   if (is_new_style_renaming)
5234     {
5235       int j, k;
5236 
5237       for (j = k = 0; j < syms->size (); j += 1)
5238 	if ((*syms)[j].symbol != NULL)
5239 	    {
5240 	      (*syms)[k] = (*syms)[j];
5241 	      k += 1;
5242 	    }
5243       return k;
5244     }
5245 
5246   /* Extract the function name associated to CURRENT_BLOCK.
5247      Abort if unable to do so.  */
5248 
5249   if (current_block == NULL)
5250     return syms->size ();
5251 
5252   current_function = block_linkage_function (current_block);
5253   if (current_function == NULL)
5254     return syms->size ();
5255 
5256   current_function_name = current_function->linkage_name ();
5257   if (current_function_name == NULL)
5258     return syms->size ();
5259 
5260   /* Check each of the symbols, and remove it from the list if it is
5261      a type corresponding to a renaming that is out of the scope of
5262      the current block.  */
5263 
5264   i = 0;
5265   while (i < syms->size ())
5266     {
5267       if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
5268           == ADA_OBJECT_RENAMING
5269           && old_renaming_is_invisible ((*syms)[i].symbol,
5270 					current_function_name))
5271 	syms->erase (syms->begin () + i);
5272       else
5273         i += 1;
5274     }
5275 
5276   return syms->size ();
5277 }
5278 
5279 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5280    whose name and domain match NAME and DOMAIN respectively.
5281    If no match was found, then extend the search to "enclosing"
5282    routines (in other words, if we're inside a nested function,
5283    search the symbols defined inside the enclosing functions).
5284    If WILD_MATCH_P is nonzero, perform the naming matching in
5285    "wild" mode (see function "wild_match" for more info).
5286 
5287    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5288 
5289 static void
5290 ada_add_local_symbols (struct obstack *obstackp,
5291 		       const lookup_name_info &lookup_name,
5292 		       const struct block *block, domain_enum domain)
5293 {
5294   int block_depth = 0;
5295 
5296   while (block != NULL)
5297     {
5298       block_depth += 1;
5299       ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
5300 
5301       /* If we found a non-function match, assume that's the one.  */
5302       if (is_nonfunction (defns_collected (obstackp, 0),
5303                           num_defns_collected (obstackp)))
5304         return;
5305 
5306       block = BLOCK_SUPERBLOCK (block);
5307     }
5308 
5309   /* If no luck so far, try to find NAME as a local symbol in some lexically
5310      enclosing subprogram.  */
5311   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5312     add_symbols_from_enclosing_procs (obstackp, lookup_name, domain);
5313 }
5314 
5315 /* An object of this type is used as the user_data argument when
5316    calling the map_matching_symbols method.  */
5317 
5318 struct match_data
5319 {
5320   struct objfile *objfile;
5321   struct obstack *obstackp;
5322   struct symbol *arg_sym;
5323   int found_sym;
5324 };
5325 
5326 /* A callback for add_nonlocal_symbols that adds symbol, found in BSYM,
5327    to a list of symbols.  DATA is a pointer to a struct match_data *
5328    containing the obstack that collects the symbol list, the file that SYM
5329    must come from, a flag indicating whether a non-argument symbol has
5330    been found in the current block, and the last argument symbol
5331    passed in SYM within the current block (if any).  When SYM is null,
5332    marking the end of a block, the argument symbol is added if no
5333    other has been found.  */
5334 
5335 static bool
5336 aux_add_nonlocal_symbols (struct block_symbol *bsym,
5337 			  struct match_data *data)
5338 {
5339   const struct block *block = bsym->block;
5340   struct symbol *sym = bsym->symbol;
5341 
5342   if (sym == NULL)
5343     {
5344       if (!data->found_sym && data->arg_sym != NULL)
5345 	add_defn_to_vec (data->obstackp,
5346 			 fixup_symbol_section (data->arg_sym, data->objfile),
5347 			 block);
5348       data->found_sym = 0;
5349       data->arg_sym = NULL;
5350     }
5351   else
5352     {
5353       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5354 	return true;
5355       else if (SYMBOL_IS_ARGUMENT (sym))
5356 	data->arg_sym = sym;
5357       else
5358 	{
5359 	  data->found_sym = 1;
5360 	  add_defn_to_vec (data->obstackp,
5361 			   fixup_symbol_section (sym, data->objfile),
5362 			   block);
5363 	}
5364     }
5365   return true;
5366 }
5367 
5368 /* Helper for add_nonlocal_symbols.  Find symbols in DOMAIN which are
5369    targeted by renamings matching LOOKUP_NAME in BLOCK.  Add these
5370    symbols to OBSTACKP.  Return whether we found such symbols.  */
5371 
5372 static int
5373 ada_add_block_renamings (struct obstack *obstackp,
5374 			 const struct block *block,
5375 			 const lookup_name_info &lookup_name,
5376 			 domain_enum domain)
5377 {
5378   struct using_direct *renaming;
5379   int defns_mark = num_defns_collected (obstackp);
5380 
5381   symbol_name_matcher_ftype *name_match
5382     = ada_get_symbol_name_matcher (lookup_name);
5383 
5384   for (renaming = block_using (block);
5385        renaming != NULL;
5386        renaming = renaming->next)
5387     {
5388       const char *r_name;
5389 
5390       /* Avoid infinite recursions: skip this renaming if we are actually
5391 	 already traversing it.
5392 
5393 	 Currently, symbol lookup in Ada don't use the namespace machinery from
5394 	 C++/Fortran support: skip namespace imports that use them.  */
5395       if (renaming->searched
5396 	  || (renaming->import_src != NULL
5397 	      && renaming->import_src[0] != '\0')
5398 	  || (renaming->import_dest != NULL
5399 	      && renaming->import_dest[0] != '\0'))
5400 	continue;
5401       renaming->searched = 1;
5402 
5403       /* TODO: here, we perform another name-based symbol lookup, which can
5404 	 pull its own multiple overloads.  In theory, we should be able to do
5405 	 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5406 	 not a simple name.  But in order to do this, we would need to enhance
5407 	 the DWARF reader to associate a symbol to this renaming, instead of a
5408 	 name.  So, for now, we do something simpler: re-use the C++/Fortran
5409 	 namespace machinery.  */
5410       r_name = (renaming->alias != NULL
5411 		? renaming->alias
5412 		: renaming->declaration);
5413       if (name_match (r_name, lookup_name, NULL))
5414 	{
5415 	  lookup_name_info decl_lookup_name (renaming->declaration,
5416 					     lookup_name.match_type ());
5417 	  ada_add_all_symbols (obstackp, block, decl_lookup_name, domain,
5418 			       1, NULL);
5419 	}
5420       renaming->searched = 0;
5421     }
5422   return num_defns_collected (obstackp) != defns_mark;
5423 }
5424 
5425 /* Implements compare_names, but only applying the comparision using
5426    the given CASING.  */
5427 
5428 static int
5429 compare_names_with_case (const char *string1, const char *string2,
5430 			 enum case_sensitivity casing)
5431 {
5432   while (*string1 != '\0' && *string2 != '\0')
5433     {
5434       char c1, c2;
5435 
5436       if (isspace (*string1) || isspace (*string2))
5437 	return strcmp_iw_ordered (string1, string2);
5438 
5439       if (casing == case_sensitive_off)
5440 	{
5441 	  c1 = tolower (*string1);
5442 	  c2 = tolower (*string2);
5443 	}
5444       else
5445 	{
5446 	  c1 = *string1;
5447 	  c2 = *string2;
5448 	}
5449       if (c1 != c2)
5450 	break;
5451 
5452       string1 += 1;
5453       string2 += 1;
5454     }
5455 
5456   switch (*string1)
5457     {
5458     case '(':
5459       return strcmp_iw_ordered (string1, string2);
5460     case '_':
5461       if (*string2 == '\0')
5462 	{
5463 	  if (is_name_suffix (string1))
5464 	    return 0;
5465 	  else
5466 	    return 1;
5467 	}
5468       /* FALLTHROUGH */
5469     default:
5470       if (*string2 == '(')
5471 	return strcmp_iw_ordered (string1, string2);
5472       else
5473 	{
5474 	  if (casing == case_sensitive_off)
5475 	    return tolower (*string1) - tolower (*string2);
5476 	  else
5477 	    return *string1 - *string2;
5478 	}
5479     }
5480 }
5481 
5482 /* Compare STRING1 to STRING2, with results as for strcmp.
5483    Compatible with strcmp_iw_ordered in that...
5484 
5485        strcmp_iw_ordered (STRING1, STRING2) <= 0
5486 
5487    ... implies...
5488 
5489        compare_names (STRING1, STRING2) <= 0
5490 
5491    (they may differ as to what symbols compare equal).  */
5492 
5493 static int
5494 compare_names (const char *string1, const char *string2)
5495 {
5496   int result;
5497 
5498   /* Similar to what strcmp_iw_ordered does, we need to perform
5499      a case-insensitive comparison first, and only resort to
5500      a second, case-sensitive, comparison if the first one was
5501      not sufficient to differentiate the two strings.  */
5502 
5503   result = compare_names_with_case (string1, string2, case_sensitive_off);
5504   if (result == 0)
5505     result = compare_names_with_case (string1, string2, case_sensitive_on);
5506 
5507   return result;
5508 }
5509 
5510 /* Convenience function to get at the Ada encoded lookup name for
5511    LOOKUP_NAME, as a C string.  */
5512 
5513 static const char *
5514 ada_lookup_name (const lookup_name_info &lookup_name)
5515 {
5516   return lookup_name.ada ().lookup_name ().c_str ();
5517 }
5518 
5519 /* Add to OBSTACKP all non-local symbols whose name and domain match
5520    LOOKUP_NAME and DOMAIN respectively.  The search is performed on
5521    GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5522    symbols otherwise.  */
5523 
5524 static void
5525 add_nonlocal_symbols (struct obstack *obstackp,
5526 		      const lookup_name_info &lookup_name,
5527 		      domain_enum domain, int global)
5528 {
5529   struct match_data data;
5530 
5531   memset (&data, 0, sizeof data);
5532   data.obstackp = obstackp;
5533 
5534   bool is_wild_match = lookup_name.ada ().wild_match_p ();
5535 
5536   auto callback = [&] (struct block_symbol *bsym)
5537     {
5538       return aux_add_nonlocal_symbols (bsym, &data);
5539     };
5540 
5541   for (objfile *objfile : current_program_space->objfiles ())
5542     {
5543       data.objfile = objfile;
5544 
5545       objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
5546 					     domain, global, callback,
5547 					     (is_wild_match
5548 					      ? NULL : compare_names));
5549 
5550       for (compunit_symtab *cu : objfile->compunits ())
5551 	{
5552 	  const struct block *global_block
5553 	    = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5554 
5555 	  if (ada_add_block_renamings (obstackp, global_block, lookup_name,
5556 				       domain))
5557 	    data.found_sym = 1;
5558 	}
5559     }
5560 
5561   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5562     {
5563       const char *name = ada_lookup_name (lookup_name);
5564       std::string bracket_name = std::string ("<_ada_") + name + '>';
5565       lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL);
5566 
5567       for (objfile *objfile : current_program_space->objfiles ())
5568         {
5569 	  data.objfile = objfile;
5570 	  objfile->sf->qf->map_matching_symbols (objfile, name1,
5571 						 domain, global, callback,
5572 						 compare_names);
5573 	}
5574     }
5575 }
5576 
5577 /* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5578    FULL_SEARCH is non-zero, enclosing scope and in global scopes,
5579    returning the number of matches.  Add these to OBSTACKP.
5580 
5581    When FULL_SEARCH is non-zero, any non-function/non-enumeral
5582    symbol match within the nest of blocks whose innermost member is BLOCK,
5583    is the one match returned (no other matches in that or
5584    enclosing blocks is returned).  If there are any matches in or
5585    surrounding BLOCK, then these alone are returned.
5586 
5587    Names prefixed with "standard__" are handled specially:
5588    "standard__" is first stripped off (by the lookup_name
5589    constructor), and only static and global symbols are searched.
5590 
5591    If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5592    to lookup global symbols.  */
5593 
5594 static void
5595 ada_add_all_symbols (struct obstack *obstackp,
5596 		     const struct block *block,
5597 		     const lookup_name_info &lookup_name,
5598 		     domain_enum domain,
5599 		     int full_search,
5600 		     int *made_global_lookup_p)
5601 {
5602   struct symbol *sym;
5603 
5604   if (made_global_lookup_p)
5605     *made_global_lookup_p = 0;
5606 
5607   /* Special case: If the user specifies a symbol name inside package
5608      Standard, do a non-wild matching of the symbol name without
5609      the "standard__" prefix.  This was primarily introduced in order
5610      to allow the user to specifically access the standard exceptions
5611      using, for instance, Standard.Constraint_Error when Constraint_Error
5612      is ambiguous (due to the user defining its own Constraint_Error
5613      entity inside its program).  */
5614   if (lookup_name.ada ().standard_p ())
5615     block = NULL;
5616 
5617   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5618 
5619   if (block != NULL)
5620     {
5621       if (full_search)
5622 	ada_add_local_symbols (obstackp, lookup_name, block, domain);
5623       else
5624 	{
5625 	  /* In the !full_search case we're are being called by
5626 	     iterate_over_symbols, and we don't want to search
5627 	     superblocks.  */
5628 	  ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
5629 	}
5630       if (num_defns_collected (obstackp) > 0 || !full_search)
5631 	return;
5632     }
5633 
5634   /* No non-global symbols found.  Check our cache to see if we have
5635      already performed this search before.  If we have, then return
5636      the same result.  */
5637 
5638   if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5639 			    domain, &sym, &block))
5640     {
5641       if (sym != NULL)
5642 	add_defn_to_vec (obstackp, sym, block);
5643       return;
5644     }
5645 
5646   if (made_global_lookup_p)
5647     *made_global_lookup_p = 1;
5648 
5649   /* Search symbols from all global blocks.  */
5650 
5651   add_nonlocal_symbols (obstackp, lookup_name, domain, 1);
5652 
5653   /* Now add symbols from all per-file blocks if we've gotten no hits
5654      (not strictly correct, but perhaps better than an error).  */
5655 
5656   if (num_defns_collected (obstackp) == 0)
5657     add_nonlocal_symbols (obstackp, lookup_name, domain, 0);
5658 }
5659 
5660 /* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
5661    is non-zero, enclosing scope and in global scopes, returning the number of
5662    matches.
5663    Fills *RESULTS with (SYM,BLOCK) tuples, indicating the symbols
5664    found and the blocks and symbol tables (if any) in which they were
5665    found.
5666 
5667    When full_search is non-zero, any non-function/non-enumeral
5668    symbol match within the nest of blocks whose innermost member is BLOCK,
5669    is the one match returned (no other matches in that or
5670    enclosing blocks is returned).  If there are any matches in or
5671    surrounding BLOCK, then these alone are returned.
5672 
5673    Names prefixed with "standard__" are handled specially: "standard__"
5674    is first stripped off, and only static and global symbols are searched.  */
5675 
5676 static int
5677 ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5678 			       const struct block *block,
5679 			       domain_enum domain,
5680 			       std::vector<struct block_symbol> *results,
5681 			       int full_search)
5682 {
5683   int syms_from_global_search;
5684   int ndefns;
5685   auto_obstack obstack;
5686 
5687   ada_add_all_symbols (&obstack, block, lookup_name,
5688 		       domain, full_search, &syms_from_global_search);
5689 
5690   ndefns = num_defns_collected (&obstack);
5691 
5692   struct block_symbol *base = defns_collected (&obstack, 1);
5693   for (int i = 0; i < ndefns; ++i)
5694     results->push_back (base[i]);
5695 
5696   ndefns = remove_extra_symbols (results);
5697 
5698   if (ndefns == 0 && full_search && syms_from_global_search)
5699     cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
5700 
5701   if (ndefns == 1 && full_search && syms_from_global_search)
5702     cache_symbol (ada_lookup_name (lookup_name), domain,
5703 		  (*results)[0].symbol, (*results)[0].block);
5704 
5705   ndefns = remove_irrelevant_renamings (results, block);
5706 
5707   return ndefns;
5708 }
5709 
5710 /* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
5711    in global scopes, returning the number of matches, and filling *RESULTS
5712    with (SYM,BLOCK) tuples.
5713 
5714    See ada_lookup_symbol_list_worker for further details.  */
5715 
5716 int
5717 ada_lookup_symbol_list (const char *name, const struct block *block,
5718 			domain_enum domain,
5719 			std::vector<struct block_symbol> *results)
5720 {
5721   symbol_name_match_type name_match_type = name_match_type_from_name (name);
5722   lookup_name_info lookup_name (name, name_match_type);
5723 
5724   return ada_lookup_symbol_list_worker (lookup_name, block, domain, results, 1);
5725 }
5726 
5727 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5728    to 1, but choosing the first symbol found if there are multiple
5729    choices.
5730 
5731    The result is stored in *INFO, which must be non-NULL.
5732    If no match is found, INFO->SYM is set to NULL.  */
5733 
5734 void
5735 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5736 			   domain_enum domain,
5737 			   struct block_symbol *info)
5738 {
5739   /* Since we already have an encoded name, wrap it in '<>' to force a
5740      verbatim match.  Otherwise, if the name happens to not look like
5741      an encoded name (because it doesn't include a "__"),
5742      ada_lookup_name_info would re-encode/fold it again, and that
5743      would e.g., incorrectly lowercase object renaming names like
5744      "R28b" -> "r28b".  */
5745   std::string verbatim = std::string ("<") + name + '>';
5746 
5747   gdb_assert (info != NULL);
5748   *info = ada_lookup_symbol (verbatim.c_str (), block, domain);
5749 }
5750 
5751 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5752    scope and in global scopes, or NULL if none.  NAME is folded and
5753    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5754    choosing the first symbol if there are multiple choices.  */
5755 
5756 struct block_symbol
5757 ada_lookup_symbol (const char *name, const struct block *block0,
5758                    domain_enum domain)
5759 {
5760   std::vector<struct block_symbol> candidates;
5761   int n_candidates;
5762 
5763   n_candidates = ada_lookup_symbol_list (name, block0, domain, &candidates);
5764 
5765   if (n_candidates == 0)
5766     return {};
5767 
5768   block_symbol info = candidates[0];
5769   info.symbol = fixup_symbol_section (info.symbol, NULL);
5770   return info;
5771 }
5772 
5773 
5774 /* True iff STR is a possible encoded suffix of a normal Ada name
5775    that is to be ignored for matching purposes.  Suffixes of parallel
5776    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5777    are given by any of the regular expressions:
5778 
5779    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5780    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5781    TKB              [subprogram suffix for task bodies]
5782    _E[0-9]+[bs]$    [protected object entry suffixes]
5783    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5784 
5785    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5786    match is performed.  This sequence is used to differentiate homonyms,
5787    is an optional part of a valid name suffix.  */
5788 
5789 static int
5790 is_name_suffix (const char *str)
5791 {
5792   int k;
5793   const char *matching;
5794   const int len = strlen (str);
5795 
5796   /* Skip optional leading __[0-9]+.  */
5797 
5798   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5799     {
5800       str += 3;
5801       while (isdigit (str[0]))
5802         str += 1;
5803     }
5804 
5805   /* [.$][0-9]+ */
5806 
5807   if (str[0] == '.' || str[0] == '$')
5808     {
5809       matching = str + 1;
5810       while (isdigit (matching[0]))
5811         matching += 1;
5812       if (matching[0] == '\0')
5813         return 1;
5814     }
5815 
5816   /* ___[0-9]+ */
5817 
5818   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5819     {
5820       matching = str + 3;
5821       while (isdigit (matching[0]))
5822         matching += 1;
5823       if (matching[0] == '\0')
5824         return 1;
5825     }
5826 
5827   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5828 
5829   if (strcmp (str, "TKB") == 0)
5830     return 1;
5831 
5832 #if 0
5833   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5834      with a N at the end.  Unfortunately, the compiler uses the same
5835      convention for other internal types it creates.  So treating
5836      all entity names that end with an "N" as a name suffix causes
5837      some regressions.  For instance, consider the case of an enumerated
5838      type.  To support the 'Image attribute, it creates an array whose
5839      name ends with N.
5840      Having a single character like this as a suffix carrying some
5841      information is a bit risky.  Perhaps we should change the encoding
5842      to be something like "_N" instead.  In the meantime, do not do
5843      the following check.  */
5844   /* Protected Object Subprograms */
5845   if (len == 1 && str [0] == 'N')
5846     return 1;
5847 #endif
5848 
5849   /* _E[0-9]+[bs]$ */
5850   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5851     {
5852       matching = str + 3;
5853       while (isdigit (matching[0]))
5854         matching += 1;
5855       if ((matching[0] == 'b' || matching[0] == 's')
5856           && matching [1] == '\0')
5857         return 1;
5858     }
5859 
5860   /* ??? We should not modify STR directly, as we are doing below.  This
5861      is fine in this case, but may become problematic later if we find
5862      that this alternative did not work, and want to try matching
5863      another one from the begining of STR.  Since we modified it, we
5864      won't be able to find the begining of the string anymore!  */
5865   if (str[0] == 'X')
5866     {
5867       str += 1;
5868       while (str[0] != '_' && str[0] != '\0')
5869         {
5870           if (str[0] != 'n' && str[0] != 'b')
5871             return 0;
5872           str += 1;
5873         }
5874     }
5875 
5876   if (str[0] == '\000')
5877     return 1;
5878 
5879   if (str[0] == '_')
5880     {
5881       if (str[1] != '_' || str[2] == '\000')
5882         return 0;
5883       if (str[2] == '_')
5884         {
5885           if (strcmp (str + 3, "JM") == 0)
5886             return 1;
5887           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5888              the LJM suffix in favor of the JM one.  But we will
5889              still accept LJM as a valid suffix for a reasonable
5890              amount of time, just to allow ourselves to debug programs
5891              compiled using an older version of GNAT.  */
5892           if (strcmp (str + 3, "LJM") == 0)
5893             return 1;
5894           if (str[3] != 'X')
5895             return 0;
5896           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5897               || str[4] == 'U' || str[4] == 'P')
5898             return 1;
5899           if (str[4] == 'R' && str[5] != 'T')
5900             return 1;
5901           return 0;
5902         }
5903       if (!isdigit (str[2]))
5904         return 0;
5905       for (k = 3; str[k] != '\0'; k += 1)
5906         if (!isdigit (str[k]) && str[k] != '_')
5907           return 0;
5908       return 1;
5909     }
5910   if (str[0] == '$' && isdigit (str[1]))
5911     {
5912       for (k = 2; str[k] != '\0'; k += 1)
5913         if (!isdigit (str[k]) && str[k] != '_')
5914           return 0;
5915       return 1;
5916     }
5917   return 0;
5918 }
5919 
5920 /* Return non-zero if the string starting at NAME and ending before
5921    NAME_END contains no capital letters.  */
5922 
5923 static int
5924 is_valid_name_for_wild_match (const char *name0)
5925 {
5926   std::string decoded_name = ada_decode (name0);
5927   int i;
5928 
5929   /* If the decoded name starts with an angle bracket, it means that
5930      NAME0 does not follow the GNAT encoding format.  It should then
5931      not be allowed as a possible wild match.  */
5932   if (decoded_name[0] == '<')
5933     return 0;
5934 
5935   for (i=0; decoded_name[i] != '\0'; i++)
5936     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5937       return 0;
5938 
5939   return 1;
5940 }
5941 
5942 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5943    that could start a simple name.  Assumes that *NAMEP points into
5944    the string beginning at NAME0.  */
5945 
5946 static int
5947 advance_wild_match (const char **namep, const char *name0, int target0)
5948 {
5949   const char *name = *namep;
5950 
5951   while (1)
5952     {
5953       int t0, t1;
5954 
5955       t0 = *name;
5956       if (t0 == '_')
5957 	{
5958 	  t1 = name[1];
5959 	  if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5960 	    {
5961 	      name += 1;
5962 	      if (name == name0 + 5 && startswith (name0, "_ada"))
5963 		break;
5964 	      else
5965 		name += 1;
5966 	    }
5967 	  else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5968 				 || name[2] == target0))
5969 	    {
5970 	      name += 2;
5971 	      break;
5972 	    }
5973 	  else
5974 	    return 0;
5975 	}
5976       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5977 	name += 1;
5978       else
5979 	return 0;
5980     }
5981 
5982   *namep = name;
5983   return 1;
5984 }
5985 
5986 /* Return true iff NAME encodes a name of the form prefix.PATN.
5987    Ignores any informational suffixes of NAME (i.e., for which
5988    is_name_suffix is true).  Assumes that PATN is a lower-cased Ada
5989    simple name.  */
5990 
5991 static bool
5992 wild_match (const char *name, const char *patn)
5993 {
5994   const char *p;
5995   const char *name0 = name;
5996 
5997   while (1)
5998     {
5999       const char *match = name;
6000 
6001       if (*name == *patn)
6002 	{
6003 	  for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6004 	    if (*p != *name)
6005 	      break;
6006 	  if (*p == '\0' && is_name_suffix (name))
6007 	    return match == name0 || is_valid_name_for_wild_match (name0);
6008 
6009 	  if (name[-1] == '_')
6010 	    name -= 1;
6011 	}
6012       if (!advance_wild_match (&name, name0, *patn))
6013 	return false;
6014     }
6015 }
6016 
6017 /* Returns true iff symbol name SYM_NAME matches SEARCH_NAME, ignoring
6018    any trailing suffixes that encode debugging information or leading
6019    _ada_ on SYM_NAME (see is_name_suffix commentary for the debugging
6020    information that is ignored).  */
6021 
6022 static bool
6023 full_match (const char *sym_name, const char *search_name)
6024 {
6025   size_t search_name_len = strlen (search_name);
6026 
6027   if (strncmp (sym_name, search_name, search_name_len) == 0
6028       && is_name_suffix (sym_name + search_name_len))
6029     return true;
6030 
6031   if (startswith (sym_name, "_ada_")
6032       && strncmp (sym_name + 5, search_name, search_name_len) == 0
6033       && is_name_suffix (sym_name + search_name_len + 5))
6034     return true;
6035 
6036   return false;
6037 }
6038 
6039 /* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to vector
6040    *defn_symbols, updating the list of symbols in OBSTACKP (if
6041    necessary).  OBJFILE is the section containing BLOCK.  */
6042 
6043 static void
6044 ada_add_block_symbols (struct obstack *obstackp,
6045 		       const struct block *block,
6046 		       const lookup_name_info &lookup_name,
6047 		       domain_enum domain, struct objfile *objfile)
6048 {
6049   struct block_iterator iter;
6050   /* A matching argument symbol, if any.  */
6051   struct symbol *arg_sym;
6052   /* Set true when we find a matching non-argument symbol.  */
6053   int found_sym;
6054   struct symbol *sym;
6055 
6056   arg_sym = NULL;
6057   found_sym = 0;
6058   for (sym = block_iter_match_first (block, lookup_name, &iter);
6059        sym != NULL;
6060        sym = block_iter_match_next (lookup_name, &iter))
6061     {
6062       if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
6063 	{
6064 	  if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6065 	    {
6066 	      if (SYMBOL_IS_ARGUMENT (sym))
6067 		arg_sym = sym;
6068 	      else
6069 		{
6070 		  found_sym = 1;
6071 		  add_defn_to_vec (obstackp,
6072 				   fixup_symbol_section (sym, objfile),
6073 				   block);
6074 		}
6075 	    }
6076 	}
6077     }
6078 
6079   /* Handle renamings.  */
6080 
6081   if (ada_add_block_renamings (obstackp, block, lookup_name, domain))
6082     found_sym = 1;
6083 
6084   if (!found_sym && arg_sym != NULL)
6085     {
6086       add_defn_to_vec (obstackp,
6087                        fixup_symbol_section (arg_sym, objfile),
6088                        block);
6089     }
6090 
6091   if (!lookup_name.ada ().wild_match_p ())
6092     {
6093       arg_sym = NULL;
6094       found_sym = 0;
6095       const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6096       const char *name = ada_lookup_name.c_str ();
6097       size_t name_len = ada_lookup_name.size ();
6098 
6099       ALL_BLOCK_SYMBOLS (block, iter, sym)
6100       {
6101         if (symbol_matches_domain (sym->language (),
6102                                    SYMBOL_DOMAIN (sym), domain))
6103           {
6104             int cmp;
6105 
6106             cmp = (int) '_' - (int) sym->linkage_name ()[0];
6107             if (cmp == 0)
6108               {
6109                 cmp = !startswith (sym->linkage_name (), "_ada_");
6110                 if (cmp == 0)
6111                   cmp = strncmp (name, sym->linkage_name () + 5,
6112                                  name_len);
6113               }
6114 
6115             if (cmp == 0
6116                 && is_name_suffix (sym->linkage_name () + name_len + 5))
6117               {
6118 		if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6119 		  {
6120 		    if (SYMBOL_IS_ARGUMENT (sym))
6121 		      arg_sym = sym;
6122 		    else
6123 		      {
6124 			found_sym = 1;
6125 			add_defn_to_vec (obstackp,
6126 					 fixup_symbol_section (sym, objfile),
6127 					 block);
6128 		      }
6129 		  }
6130               }
6131           }
6132       }
6133 
6134       /* NOTE: This really shouldn't be needed for _ada_ symbols.
6135          They aren't parameters, right?  */
6136       if (!found_sym && arg_sym != NULL)
6137         {
6138           add_defn_to_vec (obstackp,
6139                            fixup_symbol_section (arg_sym, objfile),
6140                            block);
6141         }
6142     }
6143 }
6144 
6145 
6146                                 /* Symbol Completion */
6147 
6148 /* See symtab.h.  */
6149 
6150 bool
6151 ada_lookup_name_info::matches
6152   (const char *sym_name,
6153    symbol_name_match_type match_type,
6154    completion_match_result *comp_match_res) const
6155 {
6156   bool match = false;
6157   const char *text = m_encoded_name.c_str ();
6158   size_t text_len = m_encoded_name.size ();
6159 
6160   /* First, test against the fully qualified name of the symbol.  */
6161 
6162   if (strncmp (sym_name, text, text_len) == 0)
6163     match = true;
6164 
6165   std::string decoded_name = ada_decode (sym_name);
6166   if (match && !m_encoded_p)
6167     {
6168       /* One needed check before declaring a positive match is to verify
6169          that iff we are doing a verbatim match, the decoded version
6170          of the symbol name starts with '<'.  Otherwise, this symbol name
6171          is not a suitable completion.  */
6172 
6173       bool has_angle_bracket = (decoded_name[0] == '<');
6174       match = (has_angle_bracket == m_verbatim_p);
6175     }
6176 
6177   if (match && !m_verbatim_p)
6178     {
6179       /* When doing non-verbatim match, another check that needs to
6180          be done is to verify that the potentially matching symbol name
6181          does not include capital letters, because the ada-mode would
6182          not be able to understand these symbol names without the
6183          angle bracket notation.  */
6184       const char *tmp;
6185 
6186       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6187       if (*tmp != '\0')
6188 	match = false;
6189     }
6190 
6191   /* Second: Try wild matching...  */
6192 
6193   if (!match && m_wild_match_p)
6194     {
6195       /* Since we are doing wild matching, this means that TEXT
6196          may represent an unqualified symbol name.  We therefore must
6197          also compare TEXT against the unqualified name of the symbol.  */
6198       sym_name = ada_unqualified_name (decoded_name.c_str ());
6199 
6200       if (strncmp (sym_name, text, text_len) == 0)
6201 	match = true;
6202     }
6203 
6204   /* Finally: If we found a match, prepare the result to return.  */
6205 
6206   if (!match)
6207     return false;
6208 
6209   if (comp_match_res != NULL)
6210     {
6211       std::string &match_str = comp_match_res->match.storage ();
6212 
6213       if (!m_encoded_p)
6214 	match_str = ada_decode (sym_name);
6215       else
6216 	{
6217 	  if (m_verbatim_p)
6218 	    match_str = add_angle_brackets (sym_name);
6219 	  else
6220 	    match_str = sym_name;
6221 
6222 	}
6223 
6224       comp_match_res->set_match (match_str.c_str ());
6225     }
6226 
6227   return true;
6228 }
6229 
6230                                 /* Field Access */
6231 
6232 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6233    for tagged types.  */
6234 
6235 static int
6236 ada_is_dispatch_table_ptr_type (struct type *type)
6237 {
6238   const char *name;
6239 
6240   if (type->code () != TYPE_CODE_PTR)
6241     return 0;
6242 
6243   name = TYPE_TARGET_TYPE (type)->name ();
6244   if (name == NULL)
6245     return 0;
6246 
6247   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6248 }
6249 
6250 /* Return non-zero if TYPE is an interface tag.  */
6251 
6252 static int
6253 ada_is_interface_tag (struct type *type)
6254 {
6255   const char *name = type->name ();
6256 
6257   if (name == NULL)
6258     return 0;
6259 
6260   return (strcmp (name, "ada__tags__interface_tag") == 0);
6261 }
6262 
6263 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6264    to be invisible to users.  */
6265 
6266 int
6267 ada_is_ignored_field (struct type *type, int field_num)
6268 {
6269   if (field_num < 0 || field_num > type->num_fields ())
6270     return 1;
6271 
6272   /* Check the name of that field.  */
6273   {
6274     const char *name = TYPE_FIELD_NAME (type, field_num);
6275 
6276     /* Anonymous field names should not be printed.
6277        brobecker/2007-02-20: I don't think this can actually happen
6278        but we don't want to print the value of anonymous fields anyway.  */
6279     if (name == NULL)
6280       return 1;
6281 
6282     /* Normally, fields whose name start with an underscore ("_")
6283        are fields that have been internally generated by the compiler,
6284        and thus should not be printed.  The "_parent" field is special,
6285        however: This is a field internally generated by the compiler
6286        for tagged types, and it contains the components inherited from
6287        the parent type.  This field should not be printed as is, but
6288        should not be ignored either.  */
6289     if (name[0] == '_' && !startswith (name, "_parent"))
6290       return 1;
6291   }
6292 
6293   /* If this is the dispatch table of a tagged type or an interface tag,
6294      then ignore.  */
6295   if (ada_is_tagged_type (type, 1)
6296       && (ada_is_dispatch_table_ptr_type (type->field (field_num).type ())
6297 	  || ada_is_interface_tag (type->field (field_num).type ())))
6298     return 1;
6299 
6300   /* Not a special field, so it should not be ignored.  */
6301   return 0;
6302 }
6303 
6304 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6305    pointer or reference type whose ultimate target has a tag field.  */
6306 
6307 int
6308 ada_is_tagged_type (struct type *type, int refok)
6309 {
6310   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
6311 }
6312 
6313 /* True iff TYPE represents the type of X'Tag */
6314 
6315 int
6316 ada_is_tag_type (struct type *type)
6317 {
6318   type = ada_check_typedef (type);
6319 
6320   if (type == NULL || type->code () != TYPE_CODE_PTR)
6321     return 0;
6322   else
6323     {
6324       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6325 
6326       return (name != NULL
6327               && strcmp (name, "ada__tags__dispatch_table") == 0);
6328     }
6329 }
6330 
6331 /* The type of the tag on VAL.  */
6332 
6333 static struct type *
6334 ada_tag_type (struct value *val)
6335 {
6336   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
6337 }
6338 
6339 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6340    retired at Ada 05).  */
6341 
6342 static int
6343 is_ada95_tag (struct value *tag)
6344 {
6345   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6346 }
6347 
6348 /* The value of the tag on VAL.  */
6349 
6350 static struct value *
6351 ada_value_tag (struct value *val)
6352 {
6353   return ada_value_struct_elt (val, "_tag", 0);
6354 }
6355 
6356 /* The value of the tag on the object of type TYPE whose contents are
6357    saved at VALADDR, if it is non-null, or is at memory address
6358    ADDRESS.  */
6359 
6360 static struct value *
6361 value_tag_from_contents_and_address (struct type *type,
6362 				     const gdb_byte *valaddr,
6363                                      CORE_ADDR address)
6364 {
6365   int tag_byte_offset;
6366   struct type *tag_type;
6367 
6368   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6369                          NULL, NULL, NULL))
6370     {
6371       const gdb_byte *valaddr1 = ((valaddr == NULL)
6372 				  ? NULL
6373 				  : valaddr + tag_byte_offset);
6374       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6375 
6376       return value_from_contents_and_address (tag_type, valaddr1, address1);
6377     }
6378   return NULL;
6379 }
6380 
6381 static struct type *
6382 type_from_tag (struct value *tag)
6383 {
6384   gdb::unique_xmalloc_ptr<char> type_name = ada_tag_name (tag);
6385 
6386   if (type_name != NULL)
6387     return ada_find_any_type (ada_encode (type_name.get ()));
6388   return NULL;
6389 }
6390 
6391 /* Given a value OBJ of a tagged type, return a value of this
6392    type at the base address of the object.  The base address, as
6393    defined in Ada.Tags, it is the address of the primary tag of
6394    the object, and therefore where the field values of its full
6395    view can be fetched.  */
6396 
6397 struct value *
6398 ada_tag_value_at_base_address (struct value *obj)
6399 {
6400   struct value *val;
6401   LONGEST offset_to_top = 0;
6402   struct type *ptr_type, *obj_type;
6403   struct value *tag;
6404   CORE_ADDR base_address;
6405 
6406   obj_type = value_type (obj);
6407 
6408   /* It is the responsability of the caller to deref pointers.  */
6409 
6410   if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF)
6411     return obj;
6412 
6413   tag = ada_value_tag (obj);
6414   if (!tag)
6415     return obj;
6416 
6417   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6418 
6419   if (is_ada95_tag (tag))
6420     return obj;
6421 
6422   ptr_type = language_lookup_primitive_type
6423     (language_def (language_ada), target_gdbarch(), "storage_offset");
6424   ptr_type = lookup_pointer_type (ptr_type);
6425   val = value_cast (ptr_type, tag);
6426   if (!val)
6427     return obj;
6428 
6429   /* It is perfectly possible that an exception be raised while
6430      trying to determine the base address, just like for the tag;
6431      see ada_tag_name for more details.  We do not print the error
6432      message for the same reason.  */
6433 
6434   try
6435     {
6436       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6437     }
6438 
6439   catch (const gdb_exception_error &e)
6440     {
6441       return obj;
6442     }
6443 
6444   /* If offset is null, nothing to do.  */
6445 
6446   if (offset_to_top == 0)
6447     return obj;
6448 
6449   /* -1 is a special case in Ada.Tags; however, what should be done
6450      is not quite clear from the documentation.  So do nothing for
6451      now.  */
6452 
6453   if (offset_to_top == -1)
6454     return obj;
6455 
6456   /* OFFSET_TO_TOP used to be a positive value to be subtracted
6457      from the base address.  This was however incompatible with
6458      C++ dispatch table: C++ uses a *negative* value to *add*
6459      to the base address.  Ada's convention has therefore been
6460      changed in GNAT 19.0w 20171023: since then, C++ and Ada
6461      use the same convention.  Here, we support both cases by
6462      checking the sign of OFFSET_TO_TOP.  */
6463 
6464   if (offset_to_top > 0)
6465     offset_to_top = -offset_to_top;
6466 
6467   base_address = value_address (obj) + offset_to_top;
6468   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6469 
6470   /* Make sure that we have a proper tag at the new address.
6471      Otherwise, offset_to_top is bogus (which can happen when
6472      the object is not initialized yet).  */
6473 
6474   if (!tag)
6475     return obj;
6476 
6477   obj_type = type_from_tag (tag);
6478 
6479   if (!obj_type)
6480     return obj;
6481 
6482   return value_from_contents_and_address (obj_type, NULL, base_address);
6483 }
6484 
6485 /* Return the "ada__tags__type_specific_data" type.  */
6486 
6487 static struct type *
6488 ada_get_tsd_type (struct inferior *inf)
6489 {
6490   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6491 
6492   if (data->tsd_type == 0)
6493     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6494   return data->tsd_type;
6495 }
6496 
6497 /* Return the TSD (type-specific data) associated to the given TAG.
6498    TAG is assumed to be the tag of a tagged-type entity.
6499 
6500    May return NULL if we are unable to get the TSD.  */
6501 
6502 static struct value *
6503 ada_get_tsd_from_tag (struct value *tag)
6504 {
6505   struct value *val;
6506   struct type *type;
6507 
6508   /* First option: The TSD is simply stored as a field of our TAG.
6509      Only older versions of GNAT would use this format, but we have
6510      to test it first, because there are no visible markers for
6511      the current approach except the absence of that field.  */
6512 
6513   val = ada_value_struct_elt (tag, "tsd", 1);
6514   if (val)
6515     return val;
6516 
6517   /* Try the second representation for the dispatch table (in which
6518      there is no explicit 'tsd' field in the referent of the tag pointer,
6519      and instead the tsd pointer is stored just before the dispatch
6520      table.  */
6521 
6522   type = ada_get_tsd_type (current_inferior());
6523   if (type == NULL)
6524     return NULL;
6525   type = lookup_pointer_type (lookup_pointer_type (type));
6526   val = value_cast (type, tag);
6527   if (val == NULL)
6528     return NULL;
6529   return value_ind (value_ptradd (val, -1));
6530 }
6531 
6532 /* Given the TSD of a tag (type-specific data), return a string
6533    containing the name of the associated type.
6534 
6535    May return NULL if we are unable to determine the tag name.  */
6536 
6537 static gdb::unique_xmalloc_ptr<char>
6538 ada_tag_name_from_tsd (struct value *tsd)
6539 {
6540   char *p;
6541   struct value *val;
6542 
6543   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6544   if (val == NULL)
6545     return NULL;
6546   gdb::unique_xmalloc_ptr<char> buffer
6547     = target_read_string (value_as_address (val), INT_MAX);
6548   if (buffer == nullptr)
6549     return nullptr;
6550 
6551   for (p = buffer.get (); *p != '\0'; ++p)
6552     {
6553       if (isalpha (*p))
6554 	*p = tolower (*p);
6555     }
6556 
6557   return buffer;
6558 }
6559 
6560 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6561    a C string.
6562 
6563    Return NULL if the TAG is not an Ada tag, or if we were unable to
6564    determine the name of that tag.  */
6565 
6566 gdb::unique_xmalloc_ptr<char>
6567 ada_tag_name (struct value *tag)
6568 {
6569   gdb::unique_xmalloc_ptr<char> name;
6570 
6571   if (!ada_is_tag_type (value_type (tag)))
6572     return NULL;
6573 
6574   /* It is perfectly possible that an exception be raised while trying
6575      to determine the TAG's name, even under normal circumstances:
6576      The associated variable may be uninitialized or corrupted, for
6577      instance. We do not let any exception propagate past this point.
6578      instead we return NULL.
6579 
6580      We also do not print the error message either (which often is very
6581      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6582      the caller print a more meaningful message if necessary.  */
6583   try
6584     {
6585       struct value *tsd = ada_get_tsd_from_tag (tag);
6586 
6587       if (tsd != NULL)
6588 	name = ada_tag_name_from_tsd (tsd);
6589     }
6590   catch (const gdb_exception_error &e)
6591     {
6592     }
6593 
6594   return name;
6595 }
6596 
6597 /* The parent type of TYPE, or NULL if none.  */
6598 
6599 struct type *
6600 ada_parent_type (struct type *type)
6601 {
6602   int i;
6603 
6604   type = ada_check_typedef (type);
6605 
6606   if (type == NULL || type->code () != TYPE_CODE_STRUCT)
6607     return NULL;
6608 
6609   for (i = 0; i < type->num_fields (); i += 1)
6610     if (ada_is_parent_field (type, i))
6611       {
6612         struct type *parent_type = type->field (i).type ();
6613 
6614         /* If the _parent field is a pointer, then dereference it.  */
6615         if (parent_type->code () == TYPE_CODE_PTR)
6616           parent_type = TYPE_TARGET_TYPE (parent_type);
6617         /* If there is a parallel XVS type, get the actual base type.  */
6618         parent_type = ada_get_base_type (parent_type);
6619 
6620         return ada_check_typedef (parent_type);
6621       }
6622 
6623   return NULL;
6624 }
6625 
6626 /* True iff field number FIELD_NUM of structure type TYPE contains the
6627    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6628    a structure type with at least FIELD_NUM+1 fields.  */
6629 
6630 int
6631 ada_is_parent_field (struct type *type, int field_num)
6632 {
6633   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6634 
6635   return (name != NULL
6636           && (startswith (name, "PARENT")
6637               || startswith (name, "_parent")));
6638 }
6639 
6640 /* True iff field number FIELD_NUM of structure type TYPE is a
6641    transparent wrapper field (which should be silently traversed when doing
6642    field selection and flattened when printing).  Assumes TYPE is a
6643    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6644    structures.  */
6645 
6646 int
6647 ada_is_wrapper_field (struct type *type, int field_num)
6648 {
6649   const char *name = TYPE_FIELD_NAME (type, field_num);
6650 
6651   if (name != NULL && strcmp (name, "RETVAL") == 0)
6652     {
6653       /* This happens in functions with "out" or "in out" parameters
6654 	 which are passed by copy.  For such functions, GNAT describes
6655 	 the function's return type as being a struct where the return
6656 	 value is in a field called RETVAL, and where the other "out"
6657 	 or "in out" parameters are fields of that struct.  This is not
6658 	 a wrapper.  */
6659       return 0;
6660     }
6661 
6662   return (name != NULL
6663           && (startswith (name, "PARENT")
6664               || strcmp (name, "REP") == 0
6665               || startswith (name, "_parent")
6666               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6667 }
6668 
6669 /* True iff field number FIELD_NUM of structure or union type TYPE
6670    is a variant wrapper.  Assumes TYPE is a structure type with at least
6671    FIELD_NUM+1 fields.  */
6672 
6673 int
6674 ada_is_variant_part (struct type *type, int field_num)
6675 {
6676   /* Only Ada types are eligible.  */
6677   if (!ADA_TYPE_P (type))
6678     return 0;
6679 
6680   struct type *field_type = type->field (field_num).type ();
6681 
6682   return (field_type->code () == TYPE_CODE_UNION
6683 	  || (is_dynamic_field (type, field_num)
6684 	      && (TYPE_TARGET_TYPE (field_type)->code ()
6685 		  == TYPE_CODE_UNION)));
6686 }
6687 
6688 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6689    whose discriminants are contained in the record type OUTER_TYPE,
6690    returns the type of the controlling discriminant for the variant.
6691    May return NULL if the type could not be found.  */
6692 
6693 struct type *
6694 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6695 {
6696   const char *name = ada_variant_discrim_name (var_type);
6697 
6698   return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
6699 }
6700 
6701 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6702    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6703    represents a 'when others' clause; otherwise 0.  */
6704 
6705 static int
6706 ada_is_others_clause (struct type *type, int field_num)
6707 {
6708   const char *name = TYPE_FIELD_NAME (type, field_num);
6709 
6710   return (name != NULL && name[0] == 'O');
6711 }
6712 
6713 /* Assuming that TYPE0 is the type of the variant part of a record,
6714    returns the name of the discriminant controlling the variant.
6715    The value is valid until the next call to ada_variant_discrim_name.  */
6716 
6717 const char *
6718 ada_variant_discrim_name (struct type *type0)
6719 {
6720   static char *result = NULL;
6721   static size_t result_len = 0;
6722   struct type *type;
6723   const char *name;
6724   const char *discrim_end;
6725   const char *discrim_start;
6726 
6727   if (type0->code () == TYPE_CODE_PTR)
6728     type = TYPE_TARGET_TYPE (type0);
6729   else
6730     type = type0;
6731 
6732   name = ada_type_name (type);
6733 
6734   if (name == NULL || name[0] == '\000')
6735     return "";
6736 
6737   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6738        discrim_end -= 1)
6739     {
6740       if (startswith (discrim_end, "___XVN"))
6741         break;
6742     }
6743   if (discrim_end == name)
6744     return "";
6745 
6746   for (discrim_start = discrim_end; discrim_start != name + 3;
6747        discrim_start -= 1)
6748     {
6749       if (discrim_start == name + 1)
6750         return "";
6751       if ((discrim_start > name + 3
6752            && startswith (discrim_start - 3, "___"))
6753           || discrim_start[-1] == '.')
6754         break;
6755     }
6756 
6757   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6758   strncpy (result, discrim_start, discrim_end - discrim_start);
6759   result[discrim_end - discrim_start] = '\0';
6760   return result;
6761 }
6762 
6763 /* Scan STR for a subtype-encoded number, beginning at position K.
6764    Put the position of the character just past the number scanned in
6765    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6766    Return 1 if there was a valid number at the given position, and 0
6767    otherwise.  A "subtype-encoded" number consists of the absolute value
6768    in decimal, followed by the letter 'm' to indicate a negative number.
6769    Assumes 0m does not occur.  */
6770 
6771 int
6772 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6773 {
6774   ULONGEST RU;
6775 
6776   if (!isdigit (str[k]))
6777     return 0;
6778 
6779   /* Do it the hard way so as not to make any assumption about
6780      the relationship of unsigned long (%lu scan format code) and
6781      LONGEST.  */
6782   RU = 0;
6783   while (isdigit (str[k]))
6784     {
6785       RU = RU * 10 + (str[k] - '0');
6786       k += 1;
6787     }
6788 
6789   if (str[k] == 'm')
6790     {
6791       if (R != NULL)
6792         *R = (-(LONGEST) (RU - 1)) - 1;
6793       k += 1;
6794     }
6795   else if (R != NULL)
6796     *R = (LONGEST) RU;
6797 
6798   /* NOTE on the above: Technically, C does not say what the results of
6799      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6800      number representable as a LONGEST (although either would probably work
6801      in most implementations).  When RU>0, the locution in the then branch
6802      above is always equivalent to the negative of RU.  */
6803 
6804   if (new_k != NULL)
6805     *new_k = k;
6806   return 1;
6807 }
6808 
6809 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6810    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6811    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6812 
6813 static int
6814 ada_in_variant (LONGEST val, struct type *type, int field_num)
6815 {
6816   const char *name = TYPE_FIELD_NAME (type, field_num);
6817   int p;
6818 
6819   p = 0;
6820   while (1)
6821     {
6822       switch (name[p])
6823         {
6824         case '\0':
6825           return 0;
6826         case 'S':
6827           {
6828             LONGEST W;
6829 
6830             if (!ada_scan_number (name, p + 1, &W, &p))
6831               return 0;
6832             if (val == W)
6833               return 1;
6834             break;
6835           }
6836         case 'R':
6837           {
6838             LONGEST L, U;
6839 
6840             if (!ada_scan_number (name, p + 1, &L, &p)
6841                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6842               return 0;
6843             if (val >= L && val <= U)
6844               return 1;
6845             break;
6846           }
6847         case 'O':
6848           return 1;
6849         default:
6850           return 0;
6851         }
6852     }
6853 }
6854 
6855 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6856 
6857 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6858    ARG_TYPE, extract and return the value of one of its (non-static)
6859    fields.  FIELDNO says which field.   Differs from value_primitive_field
6860    only in that it can handle packed values of arbitrary type.  */
6861 
6862 struct value *
6863 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6864                            struct type *arg_type)
6865 {
6866   struct type *type;
6867 
6868   arg_type = ada_check_typedef (arg_type);
6869   type = arg_type->field (fieldno).type ();
6870 
6871   /* Handle packed fields.  It might be that the field is not packed
6872      relative to its containing structure, but the structure itself is
6873      packed; in this case we must take the bit-field path.  */
6874   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
6875     {
6876       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6877       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6878 
6879       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6880                                              offset + bit_pos / 8,
6881                                              bit_pos % 8, bit_size, type);
6882     }
6883   else
6884     return value_primitive_field (arg1, offset, fieldno, arg_type);
6885 }
6886 
6887 /* Find field with name NAME in object of type TYPE.  If found,
6888    set the following for each argument that is non-null:
6889     - *FIELD_TYPE_P to the field's type;
6890     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6891       an object of that type;
6892     - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6893     - *BIT_SIZE_P to its size in bits if the field is packed, and
6894       0 otherwise;
6895    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6896    fields up to but not including the desired field, or by the total
6897    number of fields if not found.   A NULL value of NAME never
6898    matches; the function just counts visible fields in this case.
6899 
6900    Notice that we need to handle when a tagged record hierarchy
6901    has some components with the same name, like in this scenario:
6902 
6903       type Top_T is tagged record
6904          N : Integer := 1;
6905          U : Integer := 974;
6906          A : Integer := 48;
6907       end record;
6908 
6909       type Middle_T is new Top.Top_T with record
6910          N : Character := 'a';
6911          C : Integer := 3;
6912       end record;
6913 
6914      type Bottom_T is new Middle.Middle_T with record
6915         N : Float := 4.0;
6916         C : Character := '5';
6917         X : Integer := 6;
6918         A : Character := 'J';
6919      end record;
6920 
6921    Let's say we now have a variable declared and initialized as follow:
6922 
6923      TC : Top_A := new Bottom_T;
6924 
6925    And then we use this variable to call this function
6926 
6927      procedure Assign (Obj: in out Top_T; TV : Integer);
6928 
6929    as follow:
6930 
6931       Assign (Top_T (B), 12);
6932 
6933    Now, we're in the debugger, and we're inside that procedure
6934    then and we want to print the value of obj.c:
6935 
6936    Usually, the tagged record or one of the parent type owns the
6937    component to print and there's no issue but in this particular
6938    case, what does it mean to ask for Obj.C? Since the actual
6939    type for object is type Bottom_T, it could mean two things: type
6940    component C from the Middle_T view, but also component C from
6941    Bottom_T.  So in that "undefined" case, when the component is
6942    not found in the non-resolved type (which includes all the
6943    components of the parent type), then resolve it and see if we
6944    get better luck once expanded.
6945 
6946    In the case of homonyms in the derived tagged type, we don't
6947    guaranty anything, and pick the one that's easiest for us
6948    to program.
6949 
6950    Returns 1 if found, 0 otherwise.  */
6951 
6952 static int
6953 find_struct_field (const char *name, struct type *type, int offset,
6954                    struct type **field_type_p,
6955                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6956 		   int *index_p)
6957 {
6958   int i;
6959   int parent_offset = -1;
6960 
6961   type = ada_check_typedef (type);
6962 
6963   if (field_type_p != NULL)
6964     *field_type_p = NULL;
6965   if (byte_offset_p != NULL)
6966     *byte_offset_p = 0;
6967   if (bit_offset_p != NULL)
6968     *bit_offset_p = 0;
6969   if (bit_size_p != NULL)
6970     *bit_size_p = 0;
6971 
6972   for (i = 0; i < type->num_fields (); i += 1)
6973     {
6974       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6975       int fld_offset = offset + bit_pos / 8;
6976       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6977 
6978       if (t_field_name == NULL)
6979         continue;
6980 
6981       else if (ada_is_parent_field (type, i))
6982         {
6983 	  /* This is a field pointing us to the parent type of a tagged
6984 	     type.  As hinted in this function's documentation, we give
6985 	     preference to fields in the current record first, so what
6986 	     we do here is just record the index of this field before
6987 	     we skip it.  If it turns out we couldn't find our field
6988 	     in the current record, then we'll get back to it and search
6989 	     inside it whether the field might exist in the parent.  */
6990 
6991           parent_offset = i;
6992           continue;
6993         }
6994 
6995       else if (name != NULL && field_name_match (t_field_name, name))
6996         {
6997           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6998 
6999 	  if (field_type_p != NULL)
7000 	    *field_type_p = type->field (i).type ();
7001 	  if (byte_offset_p != NULL)
7002 	    *byte_offset_p = fld_offset;
7003 	  if (bit_offset_p != NULL)
7004 	    *bit_offset_p = bit_pos % 8;
7005 	  if (bit_size_p != NULL)
7006 	    *bit_size_p = bit_size;
7007           return 1;
7008         }
7009       else if (ada_is_wrapper_field (type, i))
7010         {
7011 	  if (find_struct_field (name, type->field (i).type (), fld_offset,
7012 				 field_type_p, byte_offset_p, bit_offset_p,
7013 				 bit_size_p, index_p))
7014             return 1;
7015         }
7016       else if (ada_is_variant_part (type, i))
7017         {
7018 	  /* PNH: Wait.  Do we ever execute this section, or is ARG always of
7019 	     fixed type?? */
7020           int j;
7021           struct type *field_type
7022 	    = ada_check_typedef (type->field (i).type ());
7023 
7024           for (j = 0; j < field_type->num_fields (); j += 1)
7025             {
7026               if (find_struct_field (name, field_type->field (j).type (),
7027                                      fld_offset
7028                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
7029                                      field_type_p, byte_offset_p,
7030                                      bit_offset_p, bit_size_p, index_p))
7031                 return 1;
7032             }
7033         }
7034       else if (index_p != NULL)
7035 	*index_p += 1;
7036     }
7037 
7038   /* Field not found so far.  If this is a tagged type which
7039      has a parent, try finding that field in the parent now.  */
7040 
7041   if (parent_offset != -1)
7042     {
7043       int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
7044       int fld_offset = offset + bit_pos / 8;
7045 
7046       if (find_struct_field (name, type->field (parent_offset).type (),
7047                              fld_offset, field_type_p, byte_offset_p,
7048                              bit_offset_p, bit_size_p, index_p))
7049         return 1;
7050     }
7051 
7052   return 0;
7053 }
7054 
7055 /* Number of user-visible fields in record type TYPE.  */
7056 
7057 static int
7058 num_visible_fields (struct type *type)
7059 {
7060   int n;
7061 
7062   n = 0;
7063   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7064   return n;
7065 }
7066 
7067 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
7068    and search in it assuming it has (class) type TYPE.
7069    If found, return value, else return NULL.
7070 
7071    Searches recursively through wrapper fields (e.g., '_parent').
7072 
7073    In the case of homonyms in the tagged types, please refer to the
7074    long explanation in find_struct_field's function documentation.  */
7075 
7076 static struct value *
7077 ada_search_struct_field (const char *name, struct value *arg, int offset,
7078                          struct type *type)
7079 {
7080   int i;
7081   int parent_offset = -1;
7082 
7083   type = ada_check_typedef (type);
7084   for (i = 0; i < type->num_fields (); i += 1)
7085     {
7086       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7087 
7088       if (t_field_name == NULL)
7089         continue;
7090 
7091       else if (ada_is_parent_field (type, i))
7092         {
7093 	  /* This is a field pointing us to the parent type of a tagged
7094 	     type.  As hinted in this function's documentation, we give
7095 	     preference to fields in the current record first, so what
7096 	     we do here is just record the index of this field before
7097 	     we skip it.  If it turns out we couldn't find our field
7098 	     in the current record, then we'll get back to it and search
7099 	     inside it whether the field might exist in the parent.  */
7100 
7101           parent_offset = i;
7102           continue;
7103         }
7104 
7105       else if (field_name_match (t_field_name, name))
7106         return ada_value_primitive_field (arg, offset, i, type);
7107 
7108       else if (ada_is_wrapper_field (type, i))
7109         {
7110           struct value *v =     /* Do not let indent join lines here.  */
7111             ada_search_struct_field (name, arg,
7112                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7113                                      type->field (i).type ());
7114 
7115           if (v != NULL)
7116             return v;
7117         }
7118 
7119       else if (ada_is_variant_part (type, i))
7120         {
7121 	  /* PNH: Do we ever get here?  See find_struct_field.  */
7122           int j;
7123           struct type *field_type = ada_check_typedef (type->field (i).type ());
7124           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7125 
7126           for (j = 0; j < field_type->num_fields (); j += 1)
7127             {
7128               struct value *v = ada_search_struct_field /* Force line
7129 							   break.  */
7130                 (name, arg,
7131                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7132                  field_type->field (j).type ());
7133 
7134               if (v != NULL)
7135                 return v;
7136             }
7137         }
7138     }
7139 
7140   /* Field not found so far.  If this is a tagged type which
7141      has a parent, try finding that field in the parent now.  */
7142 
7143   if (parent_offset != -1)
7144     {
7145       struct value *v = ada_search_struct_field (
7146 	name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
7147 	type->field (parent_offset).type ());
7148 
7149       if (v != NULL)
7150         return v;
7151     }
7152 
7153   return NULL;
7154 }
7155 
7156 static struct value *ada_index_struct_field_1 (int *, struct value *,
7157 					       int, struct type *);
7158 
7159 
7160 /* Return field #INDEX in ARG, where the index is that returned by
7161  * find_struct_field through its INDEX_P argument.  Adjust the address
7162  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7163  * If found, return value, else return NULL.  */
7164 
7165 static struct value *
7166 ada_index_struct_field (int index, struct value *arg, int offset,
7167 			struct type *type)
7168 {
7169   return ada_index_struct_field_1 (&index, arg, offset, type);
7170 }
7171 
7172 
7173 /* Auxiliary function for ada_index_struct_field.  Like
7174  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7175  * *INDEX_P.  */
7176 
7177 static struct value *
7178 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7179 			  struct type *type)
7180 {
7181   int i;
7182   type = ada_check_typedef (type);
7183 
7184   for (i = 0; i < type->num_fields (); i += 1)
7185     {
7186       if (TYPE_FIELD_NAME (type, i) == NULL)
7187         continue;
7188       else if (ada_is_wrapper_field (type, i))
7189         {
7190           struct value *v =     /* Do not let indent join lines here.  */
7191             ada_index_struct_field_1 (index_p, arg,
7192 				      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7193 				      type->field (i).type ());
7194 
7195           if (v != NULL)
7196             return v;
7197         }
7198 
7199       else if (ada_is_variant_part (type, i))
7200         {
7201 	  /* PNH: Do we ever get here?  See ada_search_struct_field,
7202 	     find_struct_field.  */
7203 	  error (_("Cannot assign this kind of variant record"));
7204         }
7205       else if (*index_p == 0)
7206         return ada_value_primitive_field (arg, offset, i, type);
7207       else
7208 	*index_p -= 1;
7209     }
7210   return NULL;
7211 }
7212 
7213 /* Return a string representation of type TYPE.  */
7214 
7215 static std::string
7216 type_as_string (struct type *type)
7217 {
7218   string_file tmp_stream;
7219 
7220   type_print (type, "", &tmp_stream, -1);
7221 
7222   return std::move (tmp_stream.string ());
7223 }
7224 
7225 /* Given a type TYPE, look up the type of the component of type named NAME.
7226    If DISPP is non-null, add its byte displacement from the beginning of a
7227    structure (pointed to by a value) of type TYPE to *DISPP (does not
7228    work for packed fields).
7229 
7230    Matches any field whose name has NAME as a prefix, possibly
7231    followed by "___".
7232 
7233    TYPE can be either a struct or union.  If REFOK, TYPE may also
7234    be a (pointer or reference)+ to a struct or union, and the
7235    ultimate target type will be searched.
7236 
7237    Looks recursively into variant clauses and parent types.
7238 
7239    In the case of homonyms in the tagged types, please refer to the
7240    long explanation in find_struct_field's function documentation.
7241 
7242    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7243    TYPE is not a type of the right kind.  */
7244 
7245 static struct type *
7246 ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
7247                             int noerr)
7248 {
7249   int i;
7250   int parent_offset = -1;
7251 
7252   if (name == NULL)
7253     goto BadName;
7254 
7255   if (refok && type != NULL)
7256     while (1)
7257       {
7258         type = ada_check_typedef (type);
7259         if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF)
7260           break;
7261         type = TYPE_TARGET_TYPE (type);
7262       }
7263 
7264   if (type == NULL
7265       || (type->code () != TYPE_CODE_STRUCT
7266 	  && type->code () != TYPE_CODE_UNION))
7267     {
7268       if (noerr)
7269         return NULL;
7270 
7271       error (_("Type %s is not a structure or union type"),
7272 	     type != NULL ? type_as_string (type).c_str () : _("(null)"));
7273     }
7274 
7275   type = to_static_fixed_type (type);
7276 
7277   for (i = 0; i < type->num_fields (); i += 1)
7278     {
7279       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7280       struct type *t;
7281 
7282       if (t_field_name == NULL)
7283         continue;
7284 
7285       else if (ada_is_parent_field (type, i))
7286         {
7287 	  /* This is a field pointing us to the parent type of a tagged
7288 	     type.  As hinted in this function's documentation, we give
7289 	     preference to fields in the current record first, so what
7290 	     we do here is just record the index of this field before
7291 	     we skip it.  If it turns out we couldn't find our field
7292 	     in the current record, then we'll get back to it and search
7293 	     inside it whether the field might exist in the parent.  */
7294 
7295           parent_offset = i;
7296           continue;
7297         }
7298 
7299       else if (field_name_match (t_field_name, name))
7300 	return type->field (i).type ();
7301 
7302       else if (ada_is_wrapper_field (type, i))
7303         {
7304           t = ada_lookup_struct_elt_type (type->field (i).type (), name,
7305                                           0, 1);
7306           if (t != NULL)
7307 	    return t;
7308         }
7309 
7310       else if (ada_is_variant_part (type, i))
7311         {
7312           int j;
7313           struct type *field_type = ada_check_typedef (type->field (i).type ());
7314 
7315           for (j = field_type->num_fields () - 1; j >= 0; j -= 1)
7316             {
7317 	      /* FIXME pnh 2008/01/26: We check for a field that is
7318 	         NOT wrapped in a struct, since the compiler sometimes
7319 		 generates these for unchecked variant types.  Revisit
7320 	         if the compiler changes this practice.  */
7321 	      const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7322 
7323 	      if (v_field_name != NULL
7324 		  && field_name_match (v_field_name, name))
7325 		t = field_type->field (j).type ();
7326 	      else
7327 		t = ada_lookup_struct_elt_type (field_type->field (j).type (),
7328 						name, 0, 1);
7329 
7330               if (t != NULL)
7331 		return t;
7332             }
7333         }
7334 
7335     }
7336 
7337     /* Field not found so far.  If this is a tagged type which
7338        has a parent, try finding that field in the parent now.  */
7339 
7340     if (parent_offset != -1)
7341       {
7342         struct type *t;
7343 
7344         t = ada_lookup_struct_elt_type (type->field (parent_offset).type (),
7345                                         name, 0, 1);
7346         if (t != NULL)
7347 	  return t;
7348       }
7349 
7350 BadName:
7351   if (!noerr)
7352     {
7353       const char *name_str = name != NULL ? name : _("<null>");
7354 
7355       error (_("Type %s has no component named %s"),
7356 	     type_as_string (type).c_str (), name_str);
7357     }
7358 
7359   return NULL;
7360 }
7361 
7362 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7363    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7364    represents an unchecked union (that is, the variant part of a
7365    record that is named in an Unchecked_Union pragma).  */
7366 
7367 static int
7368 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7369 {
7370   const char *discrim_name = ada_variant_discrim_name (var_type);
7371 
7372   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
7373 }
7374 
7375 
7376 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7377    within OUTER, determine which variant clause (field number in VAR_TYPE,
7378    numbering from 0) is applicable.  Returns -1 if none are.  */
7379 
7380 int
7381 ada_which_variant_applies (struct type *var_type, struct value *outer)
7382 {
7383   int others_clause;
7384   int i;
7385   const char *discrim_name = ada_variant_discrim_name (var_type);
7386   struct value *discrim;
7387   LONGEST discrim_val;
7388 
7389   /* Using plain value_from_contents_and_address here causes problems
7390      because we will end up trying to resolve a type that is currently
7391      being constructed.  */
7392   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7393   if (discrim == NULL)
7394     return -1;
7395   discrim_val = value_as_long (discrim);
7396 
7397   others_clause = -1;
7398   for (i = 0; i < var_type->num_fields (); i += 1)
7399     {
7400       if (ada_is_others_clause (var_type, i))
7401         others_clause = i;
7402       else if (ada_in_variant (discrim_val, var_type, i))
7403         return i;
7404     }
7405 
7406   return others_clause;
7407 }
7408 
7409 
7410 
7411                                 /* Dynamic-Sized Records */
7412 
7413 /* Strategy: The type ostensibly attached to a value with dynamic size
7414    (i.e., a size that is not statically recorded in the debugging
7415    data) does not accurately reflect the size or layout of the value.
7416    Our strategy is to convert these values to values with accurate,
7417    conventional types that are constructed on the fly.  */
7418 
7419 /* There is a subtle and tricky problem here.  In general, we cannot
7420    determine the size of dynamic records without its data.  However,
7421    the 'struct value' data structure, which GDB uses to represent
7422    quantities in the inferior process (the target), requires the size
7423    of the type at the time of its allocation in order to reserve space
7424    for GDB's internal copy of the data.  That's why the
7425    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7426    rather than struct value*s.
7427 
7428    However, GDB's internal history variables ($1, $2, etc.) are
7429    struct value*s containing internal copies of the data that are not, in
7430    general, the same as the data at their corresponding addresses in
7431    the target.  Fortunately, the types we give to these values are all
7432    conventional, fixed-size types (as per the strategy described
7433    above), so that we don't usually have to perform the
7434    'to_fixed_xxx_type' conversions to look at their values.
7435    Unfortunately, there is one exception: if one of the internal
7436    history variables is an array whose elements are unconstrained
7437    records, then we will need to create distinct fixed types for each
7438    element selected.  */
7439 
7440 /* The upshot of all of this is that many routines take a (type, host
7441    address, target address) triple as arguments to represent a value.
7442    The host address, if non-null, is supposed to contain an internal
7443    copy of the relevant data; otherwise, the program is to consult the
7444    target at the target address.  */
7445 
7446 /* Assuming that VAL0 represents a pointer value, the result of
7447    dereferencing it.  Differs from value_ind in its treatment of
7448    dynamic-sized types.  */
7449 
7450 struct value *
7451 ada_value_ind (struct value *val0)
7452 {
7453   struct value *val = value_ind (val0);
7454 
7455   if (ada_is_tagged_type (value_type (val), 0))
7456     val = ada_tag_value_at_base_address (val);
7457 
7458   return ada_to_fixed_value (val);
7459 }
7460 
7461 /* The value resulting from dereferencing any "reference to"
7462    qualifiers on VAL0.  */
7463 
7464 static struct value *
7465 ada_coerce_ref (struct value *val0)
7466 {
7467   if (value_type (val0)->code () == TYPE_CODE_REF)
7468     {
7469       struct value *val = val0;
7470 
7471       val = coerce_ref (val);
7472 
7473       if (ada_is_tagged_type (value_type (val), 0))
7474 	val = ada_tag_value_at_base_address (val);
7475 
7476       return ada_to_fixed_value (val);
7477     }
7478   else
7479     return val0;
7480 }
7481 
7482 /* Return the bit alignment required for field #F of template type TYPE.  */
7483 
7484 static unsigned int
7485 field_alignment (struct type *type, int f)
7486 {
7487   const char *name = TYPE_FIELD_NAME (type, f);
7488   int len;
7489   int align_offset;
7490 
7491   /* The field name should never be null, unless the debugging information
7492      is somehow malformed.  In this case, we assume the field does not
7493      require any alignment.  */
7494   if (name == NULL)
7495     return 1;
7496 
7497   len = strlen (name);
7498 
7499   if (!isdigit (name[len - 1]))
7500     return 1;
7501 
7502   if (isdigit (name[len - 2]))
7503     align_offset = len - 2;
7504   else
7505     align_offset = len - 1;
7506 
7507   if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
7508     return TARGET_CHAR_BIT;
7509 
7510   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7511 }
7512 
7513 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7514 
7515 static struct symbol *
7516 ada_find_any_type_symbol (const char *name)
7517 {
7518   struct symbol *sym;
7519 
7520   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7521   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7522     return sym;
7523 
7524   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7525   return sym;
7526 }
7527 
7528 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7529    solely for types defined by debug info, it will not search the GDB
7530    primitive types.  */
7531 
7532 static struct type *
7533 ada_find_any_type (const char *name)
7534 {
7535   struct symbol *sym = ada_find_any_type_symbol (name);
7536 
7537   if (sym != NULL)
7538     return SYMBOL_TYPE (sym);
7539 
7540   return NULL;
7541 }
7542 
7543 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7544    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7545    symbol, in which case it is returned.  Otherwise, this looks for
7546    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7547    Return symbol if found, and NULL otherwise.  */
7548 
7549 static bool
7550 ada_is_renaming_symbol (struct symbol *name_sym)
7551 {
7552   const char *name = name_sym->linkage_name ();
7553   return strstr (name, "___XR") != NULL;
7554 }
7555 
7556 /* Because of GNAT encoding conventions, several GDB symbols may match a
7557    given type name.  If the type denoted by TYPE0 is to be preferred to
7558    that of TYPE1 for purposes of type printing, return non-zero;
7559    otherwise return 0.  */
7560 
7561 int
7562 ada_prefer_type (struct type *type0, struct type *type1)
7563 {
7564   if (type1 == NULL)
7565     return 1;
7566   else if (type0 == NULL)
7567     return 0;
7568   else if (type1->code () == TYPE_CODE_VOID)
7569     return 1;
7570   else if (type0->code () == TYPE_CODE_VOID)
7571     return 0;
7572   else if (type1->name () == NULL && type0->name () != NULL)
7573     return 1;
7574   else if (ada_is_constrained_packed_array_type (type0))
7575     return 1;
7576   else if (ada_is_array_descriptor_type (type0)
7577            && !ada_is_array_descriptor_type (type1))
7578     return 1;
7579   else
7580     {
7581       const char *type0_name = type0->name ();
7582       const char *type1_name = type1->name ();
7583 
7584       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7585 	  && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7586 	return 1;
7587     }
7588   return 0;
7589 }
7590 
7591 /* The name of TYPE, which is its TYPE_NAME.  Null if TYPE is
7592    null.  */
7593 
7594 const char *
7595 ada_type_name (struct type *type)
7596 {
7597   if (type == NULL)
7598     return NULL;
7599   return type->name ();
7600 }
7601 
7602 /* Search the list of "descriptive" types associated to TYPE for a type
7603    whose name is NAME.  */
7604 
7605 static struct type *
7606 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7607 {
7608   struct type *result, *tmp;
7609 
7610   if (ada_ignore_descriptive_types_p)
7611     return NULL;
7612 
7613   /* If there no descriptive-type info, then there is no parallel type
7614      to be found.  */
7615   if (!HAVE_GNAT_AUX_INFO (type))
7616     return NULL;
7617 
7618   result = TYPE_DESCRIPTIVE_TYPE (type);
7619   while (result != NULL)
7620     {
7621       const char *result_name = ada_type_name (result);
7622 
7623       if (result_name == NULL)
7624         {
7625           warning (_("unexpected null name on descriptive type"));
7626           return NULL;
7627         }
7628 
7629       /* If the names match, stop.  */
7630       if (strcmp (result_name, name) == 0)
7631 	break;
7632 
7633       /* Otherwise, look at the next item on the list, if any.  */
7634       if (HAVE_GNAT_AUX_INFO (result))
7635 	tmp = TYPE_DESCRIPTIVE_TYPE (result);
7636       else
7637 	tmp = NULL;
7638 
7639       /* If not found either, try after having resolved the typedef.  */
7640       if (tmp != NULL)
7641 	result = tmp;
7642       else
7643 	{
7644 	  result = check_typedef (result);
7645 	  if (HAVE_GNAT_AUX_INFO (result))
7646 	    result = TYPE_DESCRIPTIVE_TYPE (result);
7647 	  else
7648 	    result = NULL;
7649 	}
7650     }
7651 
7652   /* If we didn't find a match, see whether this is a packed array.  With
7653      older compilers, the descriptive type information is either absent or
7654      irrelevant when it comes to packed arrays so the above lookup fails.
7655      Fall back to using a parallel lookup by name in this case.  */
7656   if (result == NULL && ada_is_constrained_packed_array_type (type))
7657     return ada_find_any_type (name);
7658 
7659   return result;
7660 }
7661 
7662 /* Find a parallel type to TYPE with the specified NAME, using the
7663    descriptive type taken from the debugging information, if available,
7664    and otherwise using the (slower) name-based method.  */
7665 
7666 static struct type *
7667 ada_find_parallel_type_with_name (struct type *type, const char *name)
7668 {
7669   struct type *result = NULL;
7670 
7671   if (HAVE_GNAT_AUX_INFO (type))
7672     result = find_parallel_type_by_descriptive_type (type, name);
7673   else
7674     result = ada_find_any_type (name);
7675 
7676   return result;
7677 }
7678 
7679 /* Same as above, but specify the name of the parallel type by appending
7680    SUFFIX to the name of TYPE.  */
7681 
7682 struct type *
7683 ada_find_parallel_type (struct type *type, const char *suffix)
7684 {
7685   char *name;
7686   const char *type_name = ada_type_name (type);
7687   int len;
7688 
7689   if (type_name == NULL)
7690     return NULL;
7691 
7692   len = strlen (type_name);
7693 
7694   name = (char *) alloca (len + strlen (suffix) + 1);
7695 
7696   strcpy (name, type_name);
7697   strcpy (name + len, suffix);
7698 
7699   return ada_find_parallel_type_with_name (type, name);
7700 }
7701 
7702 /* If TYPE is a variable-size record type, return the corresponding template
7703    type describing its fields.  Otherwise, return NULL.  */
7704 
7705 static struct type *
7706 dynamic_template_type (struct type *type)
7707 {
7708   type = ada_check_typedef (type);
7709 
7710   if (type == NULL || type->code () != TYPE_CODE_STRUCT
7711       || ada_type_name (type) == NULL)
7712     return NULL;
7713   else
7714     {
7715       int len = strlen (ada_type_name (type));
7716 
7717       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7718         return type;
7719       else
7720         return ada_find_parallel_type (type, "___XVE");
7721     }
7722 }
7723 
7724 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7725    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7726 
7727 static int
7728 is_dynamic_field (struct type *templ_type, int field_num)
7729 {
7730   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7731 
7732   return name != NULL
7733     && templ_type->field (field_num).type ()->code () == TYPE_CODE_PTR
7734     && strstr (name, "___XVL") != NULL;
7735 }
7736 
7737 /* The index of the variant field of TYPE, or -1 if TYPE does not
7738    represent a variant record type.  */
7739 
7740 static int
7741 variant_field_index (struct type *type)
7742 {
7743   int f;
7744 
7745   if (type == NULL || type->code () != TYPE_CODE_STRUCT)
7746     return -1;
7747 
7748   for (f = 0; f < type->num_fields (); f += 1)
7749     {
7750       if (ada_is_variant_part (type, f))
7751         return f;
7752     }
7753   return -1;
7754 }
7755 
7756 /* A record type with no fields.  */
7757 
7758 static struct type *
7759 empty_record (struct type *templ)
7760 {
7761   struct type *type = alloc_type_copy (templ);
7762 
7763   type->set_code (TYPE_CODE_STRUCT);
7764   INIT_NONE_SPECIFIC (type);
7765   type->set_name ("<empty>");
7766   TYPE_LENGTH (type) = 0;
7767   return type;
7768 }
7769 
7770 /* An ordinary record type (with fixed-length fields) that describes
7771    the value of type TYPE at VALADDR or ADDRESS (see comments at
7772    the beginning of this section) VAL according to GNAT conventions.
7773    DVAL0 should describe the (portion of a) record that contains any
7774    necessary discriminants.  It should be NULL if value_type (VAL) is
7775    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7776    variant field (unless unchecked) is replaced by a particular branch
7777    of the variant.
7778 
7779    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7780    length are not statically known are discarded.  As a consequence,
7781    VALADDR, ADDRESS and DVAL0 are ignored.
7782 
7783    NOTE: Limitations: For now, we assume that dynamic fields and
7784    variants occupy whole numbers of bytes.  However, they need not be
7785    byte-aligned.  */
7786 
7787 struct type *
7788 ada_template_to_fixed_record_type_1 (struct type *type,
7789 				     const gdb_byte *valaddr,
7790                                      CORE_ADDR address, struct value *dval0,
7791                                      int keep_dynamic_fields)
7792 {
7793   struct value *mark = value_mark ();
7794   struct value *dval;
7795   struct type *rtype;
7796   int nfields, bit_len;
7797   int variant_field;
7798   long off;
7799   int fld_bit_len;
7800   int f;
7801 
7802   /* Compute the number of fields in this record type that are going
7803      to be processed: unless keep_dynamic_fields, this includes only
7804      fields whose position and length are static will be processed.  */
7805   if (keep_dynamic_fields)
7806     nfields = type->num_fields ();
7807   else
7808     {
7809       nfields = 0;
7810       while (nfields < type->num_fields ()
7811              && !ada_is_variant_part (type, nfields)
7812              && !is_dynamic_field (type, nfields))
7813         nfields++;
7814     }
7815 
7816   rtype = alloc_type_copy (type);
7817   rtype->set_code (TYPE_CODE_STRUCT);
7818   INIT_NONE_SPECIFIC (rtype);
7819   rtype->set_num_fields (nfields);
7820   rtype->set_fields
7821    ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field)));
7822   rtype->set_name (ada_type_name (type));
7823   TYPE_FIXED_INSTANCE (rtype) = 1;
7824 
7825   off = 0;
7826   bit_len = 0;
7827   variant_field = -1;
7828 
7829   for (f = 0; f < nfields; f += 1)
7830     {
7831       off = align_up (off, field_alignment (type, f))
7832 	+ TYPE_FIELD_BITPOS (type, f);
7833       SET_FIELD_BITPOS (rtype->field (f), off);
7834       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7835 
7836       if (ada_is_variant_part (type, f))
7837         {
7838           variant_field = f;
7839           fld_bit_len = 0;
7840         }
7841       else if (is_dynamic_field (type, f))
7842         {
7843 	  const gdb_byte *field_valaddr = valaddr;
7844 	  CORE_ADDR field_address = address;
7845 	  struct type *field_type =
7846 	    TYPE_TARGET_TYPE (type->field (f).type ());
7847 
7848           if (dval0 == NULL)
7849 	    {
7850 	      /* rtype's length is computed based on the run-time
7851 		 value of discriminants.  If the discriminants are not
7852 		 initialized, the type size may be completely bogus and
7853 		 GDB may fail to allocate a value for it.  So check the
7854 		 size first before creating the value.  */
7855 	      ada_ensure_varsize_limit (rtype);
7856 	      /* Using plain value_from_contents_and_address here
7857 		 causes problems because we will end up trying to
7858 		 resolve a type that is currently being
7859 		 constructed.  */
7860 	      dval = value_from_contents_and_address_unresolved (rtype,
7861 								 valaddr,
7862 								 address);
7863 	      rtype = value_type (dval);
7864 	    }
7865           else
7866             dval = dval0;
7867 
7868 	  /* If the type referenced by this field is an aligner type, we need
7869 	     to unwrap that aligner type, because its size might not be set.
7870 	     Keeping the aligner type would cause us to compute the wrong
7871 	     size for this field, impacting the offset of the all the fields
7872 	     that follow this one.  */
7873 	  if (ada_is_aligner_type (field_type))
7874 	    {
7875 	      long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7876 
7877 	      field_valaddr = cond_offset_host (field_valaddr, field_offset);
7878 	      field_address = cond_offset_target (field_address, field_offset);
7879 	      field_type = ada_aligned_type (field_type);
7880 	    }
7881 
7882 	  field_valaddr = cond_offset_host (field_valaddr,
7883 					    off / TARGET_CHAR_BIT);
7884 	  field_address = cond_offset_target (field_address,
7885 					      off / TARGET_CHAR_BIT);
7886 
7887 	  /* Get the fixed type of the field.  Note that, in this case,
7888 	     we do not want to get the real type out of the tag: if
7889 	     the current field is the parent part of a tagged record,
7890 	     we will get the tag of the object.  Clearly wrong: the real
7891 	     type of the parent is not the real type of the child.  We
7892 	     would end up in an infinite loop.	*/
7893 	  field_type = ada_get_base_type (field_type);
7894 	  field_type = ada_to_fixed_type (field_type, field_valaddr,
7895 					  field_address, dval, 0);
7896 	  /* If the field size is already larger than the maximum
7897 	     object size, then the record itself will necessarily
7898 	     be larger than the maximum object size.  We need to make
7899 	     this check now, because the size might be so ridiculously
7900 	     large (due to an uninitialized variable in the inferior)
7901 	     that it would cause an overflow when adding it to the
7902 	     record size.  */
7903 	  ada_ensure_varsize_limit (field_type);
7904 
7905 	  rtype->field (f).set_type (field_type);
7906           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7907 	  /* The multiplication can potentially overflow.  But because
7908 	     the field length has been size-checked just above, and
7909 	     assuming that the maximum size is a reasonable value,
7910 	     an overflow should not happen in practice.  So rather than
7911 	     adding overflow recovery code to this already complex code,
7912 	     we just assume that it's not going to happen.  */
7913           fld_bit_len =
7914             TYPE_LENGTH (rtype->field (f).type ()) * TARGET_CHAR_BIT;
7915         }
7916       else
7917         {
7918 	  /* Note: If this field's type is a typedef, it is important
7919 	     to preserve the typedef layer.
7920 
7921 	     Otherwise, we might be transforming a typedef to a fat
7922 	     pointer (encoding a pointer to an unconstrained array),
7923 	     into a basic fat pointer (encoding an unconstrained
7924 	     array).  As both types are implemented using the same
7925 	     structure, the typedef is the only clue which allows us
7926 	     to distinguish between the two options.  Stripping it
7927 	     would prevent us from printing this field appropriately.  */
7928           rtype->field (f).set_type (type->field (f).type ());
7929           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7930           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7931             fld_bit_len =
7932               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7933           else
7934 	    {
7935 	      struct type *field_type = type->field (f).type ();
7936 
7937 	      /* We need to be careful of typedefs when computing
7938 		 the length of our field.  If this is a typedef,
7939 		 get the length of the target type, not the length
7940 		 of the typedef.  */
7941 	      if (field_type->code () == TYPE_CODE_TYPEDEF)
7942 		field_type = ada_typedef_target_type (field_type);
7943 
7944               fld_bit_len =
7945                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7946 	    }
7947         }
7948       if (off + fld_bit_len > bit_len)
7949         bit_len = off + fld_bit_len;
7950       off += fld_bit_len;
7951       TYPE_LENGTH (rtype) =
7952         align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7953     }
7954 
7955   /* We handle the variant part, if any, at the end because of certain
7956      odd cases in which it is re-ordered so as NOT to be the last field of
7957      the record.  This can happen in the presence of representation
7958      clauses.  */
7959   if (variant_field >= 0)
7960     {
7961       struct type *branch_type;
7962 
7963       off = TYPE_FIELD_BITPOS (rtype, variant_field);
7964 
7965       if (dval0 == NULL)
7966 	{
7967 	  /* Using plain value_from_contents_and_address here causes
7968 	     problems because we will end up trying to resolve a type
7969 	     that is currently being constructed.  */
7970 	  dval = value_from_contents_and_address_unresolved (rtype, valaddr,
7971 							     address);
7972 	  rtype = value_type (dval);
7973 	}
7974       else
7975         dval = dval0;
7976 
7977       branch_type =
7978         to_fixed_variant_branch_type
7979         (type->field (variant_field).type (),
7980          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7981          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7982       if (branch_type == NULL)
7983         {
7984           for (f = variant_field + 1; f < rtype->num_fields (); f += 1)
7985             rtype->field (f - 1) = rtype->field (f);
7986 	  rtype->set_num_fields (rtype->num_fields () - 1);
7987         }
7988       else
7989         {
7990           rtype->field (variant_field).set_type (branch_type);
7991           TYPE_FIELD_NAME (rtype, variant_field) = "S";
7992           fld_bit_len =
7993             TYPE_LENGTH (rtype->field (variant_field).type ()) *
7994             TARGET_CHAR_BIT;
7995           if (off + fld_bit_len > bit_len)
7996             bit_len = off + fld_bit_len;
7997           TYPE_LENGTH (rtype) =
7998             align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7999         }
8000     }
8001 
8002   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8003      should contain the alignment of that record, which should be a strictly
8004      positive value.  If null or negative, then something is wrong, most
8005      probably in the debug info.  In that case, we don't round up the size
8006      of the resulting type.  If this record is not part of another structure,
8007      the current RTYPE length might be good enough for our purposes.  */
8008   if (TYPE_LENGTH (type) <= 0)
8009     {
8010       if (rtype->name ())
8011 	warning (_("Invalid type size for `%s' detected: %s."),
8012 		 rtype->name (), pulongest (TYPE_LENGTH (type)));
8013       else
8014 	warning (_("Invalid type size for <unnamed> detected: %s."),
8015 		 pulongest (TYPE_LENGTH (type)));
8016     }
8017   else
8018     {
8019       TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype),
8020 				      TYPE_LENGTH (type));
8021     }
8022 
8023   value_free_to_mark (mark);
8024   if (TYPE_LENGTH (rtype) > varsize_limit)
8025     error (_("record type with dynamic size is larger than varsize-limit"));
8026   return rtype;
8027 }
8028 
8029 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8030    of 1.  */
8031 
8032 static struct type *
8033 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8034                                CORE_ADDR address, struct value *dval0)
8035 {
8036   return ada_template_to_fixed_record_type_1 (type, valaddr,
8037                                               address, dval0, 1);
8038 }
8039 
8040 /* An ordinary record type in which ___XVL-convention fields and
8041    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8042    static approximations, containing all possible fields.  Uses
8043    no runtime values.  Useless for use in values, but that's OK,
8044    since the results are used only for type determinations.   Works on both
8045    structs and unions.  Representation note: to save space, we memorize
8046    the result of this function in the TYPE_TARGET_TYPE of the
8047    template type.  */
8048 
8049 static struct type *
8050 template_to_static_fixed_type (struct type *type0)
8051 {
8052   struct type *type;
8053   int nfields;
8054   int f;
8055 
8056   /* No need no do anything if the input type is already fixed.  */
8057   if (TYPE_FIXED_INSTANCE (type0))
8058     return type0;
8059 
8060   /* Likewise if we already have computed the static approximation.  */
8061   if (TYPE_TARGET_TYPE (type0) != NULL)
8062     return TYPE_TARGET_TYPE (type0);
8063 
8064   /* Don't clone TYPE0 until we are sure we are going to need a copy.  */
8065   type = type0;
8066   nfields = type0->num_fields ();
8067 
8068   /* Whether or not we cloned TYPE0, cache the result so that we don't do
8069      recompute all over next time.  */
8070   TYPE_TARGET_TYPE (type0) = type;
8071 
8072   for (f = 0; f < nfields; f += 1)
8073     {
8074       struct type *field_type = type0->field (f).type ();
8075       struct type *new_type;
8076 
8077       if (is_dynamic_field (type0, f))
8078 	{
8079 	  field_type = ada_check_typedef (field_type);
8080           new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8081 	}
8082       else
8083         new_type = static_unwrap_type (field_type);
8084 
8085       if (new_type != field_type)
8086 	{
8087 	  /* Clone TYPE0 only the first time we get a new field type.  */
8088 	  if (type == type0)
8089 	    {
8090 	      TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8091 	      type->set_code (type0->code ());
8092 	      INIT_NONE_SPECIFIC (type);
8093 	      type->set_num_fields (nfields);
8094 
8095 	      field *fields =
8096 		((struct field *)
8097 		 TYPE_ALLOC (type, nfields * sizeof (struct field)));
8098 	      memcpy (fields, type0->fields (),
8099 		      sizeof (struct field) * nfields);
8100 	      type->set_fields (fields);
8101 
8102 	      type->set_name (ada_type_name (type0));
8103 	      TYPE_FIXED_INSTANCE (type) = 1;
8104 	      TYPE_LENGTH (type) = 0;
8105 	    }
8106 	  type->field (f).set_type (new_type);
8107 	  TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8108 	}
8109     }
8110 
8111   return type;
8112 }
8113 
8114 /* Given an object of type TYPE whose contents are at VALADDR and
8115    whose address in memory is ADDRESS, returns a revision of TYPE,
8116    which should be a non-dynamic-sized record, in which the variant
8117    part, if any, is replaced with the appropriate branch.  Looks
8118    for discriminant values in DVAL0, which can be NULL if the record
8119    contains the necessary discriminant values.  */
8120 
8121 static struct type *
8122 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8123                                    CORE_ADDR address, struct value *dval0)
8124 {
8125   struct value *mark = value_mark ();
8126   struct value *dval;
8127   struct type *rtype;
8128   struct type *branch_type;
8129   int nfields = type->num_fields ();
8130   int variant_field = variant_field_index (type);
8131 
8132   if (variant_field == -1)
8133     return type;
8134 
8135   if (dval0 == NULL)
8136     {
8137       dval = value_from_contents_and_address (type, valaddr, address);
8138       type = value_type (dval);
8139     }
8140   else
8141     dval = dval0;
8142 
8143   rtype = alloc_type_copy (type);
8144   rtype->set_code (TYPE_CODE_STRUCT);
8145   INIT_NONE_SPECIFIC (rtype);
8146   rtype->set_num_fields (nfields);
8147 
8148   field *fields =
8149     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8150   memcpy (fields, type->fields (), sizeof (struct field) * nfields);
8151   rtype->set_fields (fields);
8152 
8153   rtype->set_name (ada_type_name (type));
8154   TYPE_FIXED_INSTANCE (rtype) = 1;
8155   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8156 
8157   branch_type = to_fixed_variant_branch_type
8158     (type->field (variant_field).type (),
8159      cond_offset_host (valaddr,
8160                        TYPE_FIELD_BITPOS (type, variant_field)
8161                        / TARGET_CHAR_BIT),
8162      cond_offset_target (address,
8163                          TYPE_FIELD_BITPOS (type, variant_field)
8164                          / TARGET_CHAR_BIT), dval);
8165   if (branch_type == NULL)
8166     {
8167       int f;
8168 
8169       for (f = variant_field + 1; f < nfields; f += 1)
8170         rtype->field (f - 1) = rtype->field (f);
8171       rtype->set_num_fields (rtype->num_fields () - 1);
8172     }
8173   else
8174     {
8175       rtype->field (variant_field).set_type (branch_type);
8176       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8177       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8178       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8179     }
8180   TYPE_LENGTH (rtype) -= TYPE_LENGTH (type->field (variant_field).type ());
8181 
8182   value_free_to_mark (mark);
8183   return rtype;
8184 }
8185 
8186 /* An ordinary record type (with fixed-length fields) that describes
8187    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8188    beginning of this section].   Any necessary discriminants' values
8189    should be in DVAL, a record value; it may be NULL if the object
8190    at ADDR itself contains any necessary discriminant values.
8191    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8192    values from the record are needed.  Except in the case that DVAL,
8193    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8194    unchecked) is replaced by a particular branch of the variant.
8195 
8196    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8197    is questionable and may be removed.  It can arise during the
8198    processing of an unconstrained-array-of-record type where all the
8199    variant branches have exactly the same size.  This is because in
8200    such cases, the compiler does not bother to use the XVS convention
8201    when encoding the record.  I am currently dubious of this
8202    shortcut and suspect the compiler should be altered.  FIXME.  */
8203 
8204 static struct type *
8205 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8206                       CORE_ADDR address, struct value *dval)
8207 {
8208   struct type *templ_type;
8209 
8210   if (TYPE_FIXED_INSTANCE (type0))
8211     return type0;
8212 
8213   templ_type = dynamic_template_type (type0);
8214 
8215   if (templ_type != NULL)
8216     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8217   else if (variant_field_index (type0) >= 0)
8218     {
8219       if (dval == NULL && valaddr == NULL && address == 0)
8220         return type0;
8221       return to_record_with_fixed_variant_part (type0, valaddr, address,
8222                                                 dval);
8223     }
8224   else
8225     {
8226       TYPE_FIXED_INSTANCE (type0) = 1;
8227       return type0;
8228     }
8229 
8230 }
8231 
8232 /* An ordinary record type (with fixed-length fields) that describes
8233    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8234    union type.  Any necessary discriminants' values should be in DVAL,
8235    a record value.  That is, this routine selects the appropriate
8236    branch of the union at ADDR according to the discriminant value
8237    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8238    it represents a variant subject to a pragma Unchecked_Union.  */
8239 
8240 static struct type *
8241 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8242                               CORE_ADDR address, struct value *dval)
8243 {
8244   int which;
8245   struct type *templ_type;
8246   struct type *var_type;
8247 
8248   if (var_type0->code () == TYPE_CODE_PTR)
8249     var_type = TYPE_TARGET_TYPE (var_type0);
8250   else
8251     var_type = var_type0;
8252 
8253   templ_type = ada_find_parallel_type (var_type, "___XVU");
8254 
8255   if (templ_type != NULL)
8256     var_type = templ_type;
8257 
8258   if (is_unchecked_variant (var_type, value_type (dval)))
8259       return var_type0;
8260   which = ada_which_variant_applies (var_type, dval);
8261 
8262   if (which < 0)
8263     return empty_record (var_type);
8264   else if (is_dynamic_field (var_type, which))
8265     return to_fixed_record_type
8266       (TYPE_TARGET_TYPE (var_type->field (which).type ()),
8267        valaddr, address, dval);
8268   else if (variant_field_index (var_type->field (which).type ()) >= 0)
8269     return
8270       to_fixed_record_type
8271       (var_type->field (which).type (), valaddr, address, dval);
8272   else
8273     return var_type->field (which).type ();
8274 }
8275 
8276 /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8277    ENCODING_TYPE, a type following the GNAT conventions for discrete
8278    type encodings, only carries redundant information.  */
8279 
8280 static int
8281 ada_is_redundant_range_encoding (struct type *range_type,
8282 				 struct type *encoding_type)
8283 {
8284   const char *bounds_str;
8285   int n;
8286   LONGEST lo, hi;
8287 
8288   gdb_assert (range_type->code () == TYPE_CODE_RANGE);
8289 
8290   if (get_base_type (range_type)->code ()
8291       != get_base_type (encoding_type)->code ())
8292     {
8293       /* The compiler probably used a simple base type to describe
8294 	 the range type instead of the range's actual base type,
8295 	 expecting us to get the real base type from the encoding
8296 	 anyway.  In this situation, the encoding cannot be ignored
8297 	 as redundant.  */
8298       return 0;
8299     }
8300 
8301   if (is_dynamic_type (range_type))
8302     return 0;
8303 
8304   if (encoding_type->name () == NULL)
8305     return 0;
8306 
8307   bounds_str = strstr (encoding_type->name (), "___XDLU_");
8308   if (bounds_str == NULL)
8309     return 0;
8310 
8311   n = 8; /* Skip "___XDLU_".  */
8312   if (!ada_scan_number (bounds_str, n, &lo, &n))
8313     return 0;
8314   if (range_type->bounds ()->low.const_val () != lo)
8315     return 0;
8316 
8317   n += 2; /* Skip the "__" separator between the two bounds.  */
8318   if (!ada_scan_number (bounds_str, n, &hi, &n))
8319     return 0;
8320   if (range_type->bounds ()->high.const_val () != hi)
8321     return 0;
8322 
8323   return 1;
8324 }
8325 
8326 /* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8327    a type following the GNAT encoding for describing array type
8328    indices, only carries redundant information.  */
8329 
8330 static int
8331 ada_is_redundant_index_type_desc (struct type *array_type,
8332 				  struct type *desc_type)
8333 {
8334   struct type *this_layer = check_typedef (array_type);
8335   int i;
8336 
8337   for (i = 0; i < desc_type->num_fields (); i++)
8338     {
8339       if (!ada_is_redundant_range_encoding (this_layer->index_type (),
8340 					    desc_type->field (i).type ()))
8341 	return 0;
8342       this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8343     }
8344 
8345   return 1;
8346 }
8347 
8348 /* Assuming that TYPE0 is an array type describing the type of a value
8349    at ADDR, and that DVAL describes a record containing any
8350    discriminants used in TYPE0, returns a type for the value that
8351    contains no dynamic components (that is, no components whose sizes
8352    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8353    true, gives an error message if the resulting type's size is over
8354    varsize_limit.  */
8355 
8356 static struct type *
8357 to_fixed_array_type (struct type *type0, struct value *dval,
8358                      int ignore_too_big)
8359 {
8360   struct type *index_type_desc;
8361   struct type *result;
8362   int constrained_packed_array_p;
8363   static const char *xa_suffix = "___XA";
8364 
8365   type0 = ada_check_typedef (type0);
8366   if (TYPE_FIXED_INSTANCE (type0))
8367     return type0;
8368 
8369   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8370   if (constrained_packed_array_p)
8371     type0 = decode_constrained_packed_array_type (type0);
8372 
8373   index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8374 
8375   /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8376      encoding suffixed with 'P' may still be generated.  If so,
8377      it should be used to find the XA type.  */
8378 
8379   if (index_type_desc == NULL)
8380     {
8381       const char *type_name = ada_type_name (type0);
8382 
8383       if (type_name != NULL)
8384 	{
8385 	  const int len = strlen (type_name);
8386 	  char *name = (char *) alloca (len + strlen (xa_suffix));
8387 
8388 	  if (type_name[len - 1] == 'P')
8389 	    {
8390 	      strcpy (name, type_name);
8391 	      strcpy (name + len - 1, xa_suffix);
8392 	      index_type_desc = ada_find_parallel_type_with_name (type0, name);
8393 	    }
8394 	}
8395     }
8396 
8397   ada_fixup_array_indexes_type (index_type_desc);
8398   if (index_type_desc != NULL
8399       && ada_is_redundant_index_type_desc (type0, index_type_desc))
8400     {
8401       /* Ignore this ___XA parallel type, as it does not bring any
8402 	 useful information.  This allows us to avoid creating fixed
8403 	 versions of the array's index types, which would be identical
8404 	 to the original ones.  This, in turn, can also help avoid
8405 	 the creation of fixed versions of the array itself.  */
8406       index_type_desc = NULL;
8407     }
8408 
8409   if (index_type_desc == NULL)
8410     {
8411       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8412 
8413       /* NOTE: elt_type---the fixed version of elt_type0---should never
8414          depend on the contents of the array in properly constructed
8415          debugging data.  */
8416       /* Create a fixed version of the array element type.
8417          We're not providing the address of an element here,
8418          and thus the actual object value cannot be inspected to do
8419          the conversion.  This should not be a problem, since arrays of
8420          unconstrained objects are not allowed.  In particular, all
8421          the elements of an array of a tagged type should all be of
8422          the same type specified in the debugging info.  No need to
8423          consult the object tag.  */
8424       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8425 
8426       /* Make sure we always create a new array type when dealing with
8427 	 packed array types, since we're going to fix-up the array
8428 	 type length and element bitsize a little further down.  */
8429       if (elt_type0 == elt_type && !constrained_packed_array_p)
8430         result = type0;
8431       else
8432         result = create_array_type (alloc_type_copy (type0),
8433                                     elt_type, type0->index_type ());
8434     }
8435   else
8436     {
8437       int i;
8438       struct type *elt_type0;
8439 
8440       elt_type0 = type0;
8441       for (i = index_type_desc->num_fields (); i > 0; i -= 1)
8442         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8443 
8444       /* NOTE: result---the fixed version of elt_type0---should never
8445          depend on the contents of the array in properly constructed
8446          debugging data.  */
8447       /* Create a fixed version of the array element type.
8448          We're not providing the address of an element here,
8449          and thus the actual object value cannot be inspected to do
8450          the conversion.  This should not be a problem, since arrays of
8451          unconstrained objects are not allowed.  In particular, all
8452          the elements of an array of a tagged type should all be of
8453          the same type specified in the debugging info.  No need to
8454          consult the object tag.  */
8455       result =
8456         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8457 
8458       elt_type0 = type0;
8459       for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1)
8460         {
8461           struct type *range_type =
8462             to_fixed_range_type (index_type_desc->field (i).type (), dval);
8463 
8464           result = create_array_type (alloc_type_copy (elt_type0),
8465                                       result, range_type);
8466 	  elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8467         }
8468       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8469         error (_("array type with dynamic size is larger than varsize-limit"));
8470     }
8471 
8472   /* We want to preserve the type name.  This can be useful when
8473      trying to get the type name of a value that has already been
8474      printed (for instance, if the user did "print VAR; whatis $".  */
8475   result->set_name (type0->name ());
8476 
8477   if (constrained_packed_array_p)
8478     {
8479       /* So far, the resulting type has been created as if the original
8480 	 type was a regular (non-packed) array type.  As a result, the
8481 	 bitsize of the array elements needs to be set again, and the array
8482 	 length needs to be recomputed based on that bitsize.  */
8483       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8484       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8485 
8486       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8487       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8488       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8489         TYPE_LENGTH (result)++;
8490     }
8491 
8492   TYPE_FIXED_INSTANCE (result) = 1;
8493   return result;
8494 }
8495 
8496 
8497 /* A standard type (containing no dynamically sized components)
8498    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8499    DVAL describes a record containing any discriminants used in TYPE0,
8500    and may be NULL if there are none, or if the object of type TYPE at
8501    ADDRESS or in VALADDR contains these discriminants.
8502 
8503    If CHECK_TAG is not null, in the case of tagged types, this function
8504    attempts to locate the object's tag and use it to compute the actual
8505    type.  However, when ADDRESS is null, we cannot use it to determine the
8506    location of the tag, and therefore compute the tagged type's actual type.
8507    So we return the tagged type without consulting the tag.  */
8508 
8509 static struct type *
8510 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8511                    CORE_ADDR address, struct value *dval, int check_tag)
8512 {
8513   type = ada_check_typedef (type);
8514 
8515   /* Only un-fixed types need to be handled here.  */
8516   if (!HAVE_GNAT_AUX_INFO (type))
8517     return type;
8518 
8519   switch (type->code ())
8520     {
8521     default:
8522       return type;
8523     case TYPE_CODE_STRUCT:
8524       {
8525         struct type *static_type = to_static_fixed_type (type);
8526         struct type *fixed_record_type =
8527           to_fixed_record_type (type, valaddr, address, NULL);
8528 
8529         /* If STATIC_TYPE is a tagged type and we know the object's address,
8530            then we can determine its tag, and compute the object's actual
8531            type from there.  Note that we have to use the fixed record
8532            type (the parent part of the record may have dynamic fields
8533            and the way the location of _tag is expressed may depend on
8534            them).  */
8535 
8536         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8537           {
8538 	    struct value *tag =
8539 	      value_tag_from_contents_and_address
8540 	      (fixed_record_type,
8541 	       valaddr,
8542 	       address);
8543 	    struct type *real_type = type_from_tag (tag);
8544 	    struct value *obj =
8545 	      value_from_contents_and_address (fixed_record_type,
8546 					       valaddr,
8547 					       address);
8548             fixed_record_type = value_type (obj);
8549             if (real_type != NULL)
8550               return to_fixed_record_type
8551 		(real_type, NULL,
8552 		 value_address (ada_tag_value_at_base_address (obj)), NULL);
8553           }
8554 
8555         /* Check to see if there is a parallel ___XVZ variable.
8556            If there is, then it provides the actual size of our type.  */
8557         else if (ada_type_name (fixed_record_type) != NULL)
8558           {
8559             const char *name = ada_type_name (fixed_record_type);
8560             char *xvz_name
8561 	      = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
8562 	    bool xvz_found = false;
8563             LONGEST size;
8564 
8565             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8566 	    try
8567 	      {
8568 		xvz_found = get_int_var_value (xvz_name, size);
8569 	      }
8570 	    catch (const gdb_exception_error &except)
8571 	      {
8572 		/* We found the variable, but somehow failed to read
8573 		   its value.  Rethrow the same error, but with a little
8574 		   bit more information, to help the user understand
8575 		   what went wrong (Eg: the variable might have been
8576 		   optimized out).  */
8577 		throw_error (except.error,
8578 			     _("unable to read value of %s (%s)"),
8579 			     xvz_name, except.what ());
8580 	      }
8581 
8582             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8583               {
8584                 fixed_record_type = copy_type (fixed_record_type);
8585                 TYPE_LENGTH (fixed_record_type) = size;
8586 
8587                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8588                    observed this when the debugging info is STABS, and
8589                    apparently it is something that is hard to fix.
8590 
8591                    In practice, we don't need the actual type definition
8592                    at all, because the presence of the XVZ variable allows us
8593                    to assume that there must be a XVS type as well, which we
8594                    should be able to use later, when we need the actual type
8595                    definition.
8596 
8597                    In the meantime, pretend that the "fixed" type we are
8598                    returning is NOT a stub, because this can cause trouble
8599                    when using this type to create new types targeting it.
8600                    Indeed, the associated creation routines often check
8601                    whether the target type is a stub and will try to replace
8602                    it, thus using a type with the wrong size.  This, in turn,
8603                    might cause the new type to have the wrong size too.
8604                    Consider the case of an array, for instance, where the size
8605                    of the array is computed from the number of elements in
8606                    our array multiplied by the size of its element.  */
8607                 TYPE_STUB (fixed_record_type) = 0;
8608               }
8609           }
8610         return fixed_record_type;
8611       }
8612     case TYPE_CODE_ARRAY:
8613       return to_fixed_array_type (type, dval, 1);
8614     case TYPE_CODE_UNION:
8615       if (dval == NULL)
8616         return type;
8617       else
8618         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8619     }
8620 }
8621 
8622 /* The same as ada_to_fixed_type_1, except that it preserves the type
8623    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8624 
8625    The typedef layer needs be preserved in order to differentiate between
8626    arrays and array pointers when both types are implemented using the same
8627    fat pointer.  In the array pointer case, the pointer is encoded as
8628    a typedef of the pointer type.  For instance, considering:
8629 
8630 	  type String_Access is access String;
8631 	  S1 : String_Access := null;
8632 
8633    To the debugger, S1 is defined as a typedef of type String.  But
8634    to the user, it is a pointer.  So if the user tries to print S1,
8635    we should not dereference the array, but print the array address
8636    instead.
8637 
8638    If we didn't preserve the typedef layer, we would lose the fact that
8639    the type is to be presented as a pointer (needs de-reference before
8640    being printed).  And we would also use the source-level type name.  */
8641 
8642 struct type *
8643 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8644                    CORE_ADDR address, struct value *dval, int check_tag)
8645 
8646 {
8647   struct type *fixed_type =
8648     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8649 
8650   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8651       then preserve the typedef layer.
8652 
8653       Implementation note: We can only check the main-type portion of
8654       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8655       from TYPE now returns a type that has the same instance flags
8656       as TYPE.  For instance, if TYPE is a "typedef const", and its
8657       target type is a "struct", then the typedef elimination will return
8658       a "const" version of the target type.  See check_typedef for more
8659       details about how the typedef layer elimination is done.
8660 
8661       brobecker/2010-11-19: It seems to me that the only case where it is
8662       useful to preserve the typedef layer is when dealing with fat pointers.
8663       Perhaps, we could add a check for that and preserve the typedef layer
8664       only in that situation.  But this seems unnecessary so far, probably
8665       because we call check_typedef/ada_check_typedef pretty much everywhere.
8666       */
8667   if (type->code () == TYPE_CODE_TYPEDEF
8668       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8669 	  == TYPE_MAIN_TYPE (fixed_type)))
8670     return type;
8671 
8672   return fixed_type;
8673 }
8674 
8675 /* A standard (static-sized) type corresponding as well as possible to
8676    TYPE0, but based on no runtime data.  */
8677 
8678 static struct type *
8679 to_static_fixed_type (struct type *type0)
8680 {
8681   struct type *type;
8682 
8683   if (type0 == NULL)
8684     return NULL;
8685 
8686   if (TYPE_FIXED_INSTANCE (type0))
8687     return type0;
8688 
8689   type0 = ada_check_typedef (type0);
8690 
8691   switch (type0->code ())
8692     {
8693     default:
8694       return type0;
8695     case TYPE_CODE_STRUCT:
8696       type = dynamic_template_type (type0);
8697       if (type != NULL)
8698         return template_to_static_fixed_type (type);
8699       else
8700         return template_to_static_fixed_type (type0);
8701     case TYPE_CODE_UNION:
8702       type = ada_find_parallel_type (type0, "___XVU");
8703       if (type != NULL)
8704         return template_to_static_fixed_type (type);
8705       else
8706         return template_to_static_fixed_type (type0);
8707     }
8708 }
8709 
8710 /* A static approximation of TYPE with all type wrappers removed.  */
8711 
8712 static struct type *
8713 static_unwrap_type (struct type *type)
8714 {
8715   if (ada_is_aligner_type (type))
8716     {
8717       struct type *type1 = ada_check_typedef (type)->field (0).type ();
8718       if (ada_type_name (type1) == NULL)
8719 	type1->set_name (ada_type_name (type));
8720 
8721       return static_unwrap_type (type1);
8722     }
8723   else
8724     {
8725       struct type *raw_real_type = ada_get_base_type (type);
8726 
8727       if (raw_real_type == type)
8728         return type;
8729       else
8730         return to_static_fixed_type (raw_real_type);
8731     }
8732 }
8733 
8734 /* In some cases, incomplete and private types require
8735    cross-references that are not resolved as records (for example,
8736       type Foo;
8737       type FooP is access Foo;
8738       V: FooP;
8739       type Foo is array ...;
8740    ).  In these cases, since there is no mechanism for producing
8741    cross-references to such types, we instead substitute for FooP a
8742    stub enumeration type that is nowhere resolved, and whose tag is
8743    the name of the actual type.  Call these types "non-record stubs".  */
8744 
8745 /* A type equivalent to TYPE that is not a non-record stub, if one
8746    exists, otherwise TYPE.  */
8747 
8748 struct type *
8749 ada_check_typedef (struct type *type)
8750 {
8751   if (type == NULL)
8752     return NULL;
8753 
8754   /* If our type is an access to an unconstrained array, which is encoded
8755      as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
8756      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8757      what allows us to distinguish between fat pointers that represent
8758      array types, and fat pointers that represent array access types
8759      (in both cases, the compiler implements them as fat pointers).  */
8760   if (ada_is_access_to_unconstrained_array (type))
8761     return type;
8762 
8763   type = check_typedef (type);
8764   if (type == NULL || type->code () != TYPE_CODE_ENUM
8765       || !TYPE_STUB (type)
8766       || type->name () == NULL)
8767     return type;
8768   else
8769     {
8770       const char *name = type->name ();
8771       struct type *type1 = ada_find_any_type (name);
8772 
8773       if (type1 == NULL)
8774         return type;
8775 
8776       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8777 	 stubs pointing to arrays, as we don't create symbols for array
8778 	 types, only for the typedef-to-array types).  If that's the case,
8779 	 strip the typedef layer.  */
8780       if (type1->code () == TYPE_CODE_TYPEDEF)
8781 	type1 = ada_check_typedef (type1);
8782 
8783       return type1;
8784     }
8785 }
8786 
8787 /* A value representing the data at VALADDR/ADDRESS as described by
8788    type TYPE0, but with a standard (static-sized) type that correctly
8789    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8790    type, then return VAL0 [this feature is simply to avoid redundant
8791    creation of struct values].  */
8792 
8793 static struct value *
8794 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8795                            struct value *val0)
8796 {
8797   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8798 
8799   if (type == type0 && val0 != NULL)
8800     return val0;
8801 
8802   if (VALUE_LVAL (val0) != lval_memory)
8803     {
8804       /* Our value does not live in memory; it could be a convenience
8805 	 variable, for instance.  Create a not_lval value using val0's
8806 	 contents.  */
8807       return value_from_contents (type, value_contents (val0));
8808     }
8809 
8810   return value_from_contents_and_address (type, 0, address);
8811 }
8812 
8813 /* A value representing VAL, but with a standard (static-sized) type
8814    that correctly describes it.  Does not necessarily create a new
8815    value.  */
8816 
8817 struct value *
8818 ada_to_fixed_value (struct value *val)
8819 {
8820   val = unwrap_value (val);
8821   val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
8822   return val;
8823 }
8824 
8825 
8826 /* Attributes */
8827 
8828 /* Table mapping attribute numbers to names.
8829    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8830 
8831 static const char *attribute_names[] = {
8832   "<?>",
8833 
8834   "first",
8835   "last",
8836   "length",
8837   "image",
8838   "max",
8839   "min",
8840   "modulus",
8841   "pos",
8842   "size",
8843   "tag",
8844   "val",
8845   0
8846 };
8847 
8848 static const char *
8849 ada_attribute_name (enum exp_opcode n)
8850 {
8851   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8852     return attribute_names[n - OP_ATR_FIRST + 1];
8853   else
8854     return attribute_names[0];
8855 }
8856 
8857 /* Evaluate the 'POS attribute applied to ARG.  */
8858 
8859 static LONGEST
8860 pos_atr (struct value *arg)
8861 {
8862   struct value *val = coerce_ref (arg);
8863   struct type *type = value_type (val);
8864   LONGEST result;
8865 
8866   if (!discrete_type_p (type))
8867     error (_("'POS only defined on discrete types"));
8868 
8869   if (!discrete_position (type, value_as_long (val), &result))
8870     error (_("enumeration value is invalid: can't find 'POS"));
8871 
8872   return result;
8873 }
8874 
8875 static struct value *
8876 value_pos_atr (struct type *type, struct value *arg)
8877 {
8878   return value_from_longest (type, pos_atr (arg));
8879 }
8880 
8881 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8882 
8883 static struct value *
8884 val_atr (struct type *type, LONGEST val)
8885 {
8886   gdb_assert (discrete_type_p (type));
8887   if (type->code () == TYPE_CODE_RANGE)
8888     type = TYPE_TARGET_TYPE (type);
8889   if (type->code () == TYPE_CODE_ENUM)
8890     {
8891       if (val < 0 || val >= type->num_fields ())
8892         error (_("argument to 'VAL out of range"));
8893       val = TYPE_FIELD_ENUMVAL (type, val);
8894     }
8895   return value_from_longest (type, val);
8896 }
8897 
8898 static struct value *
8899 value_val_atr (struct type *type, struct value *arg)
8900 {
8901   if (!discrete_type_p (type))
8902     error (_("'VAL only defined on discrete types"));
8903   if (!integer_type_p (value_type (arg)))
8904     error (_("'VAL requires integral argument"));
8905 
8906   return val_atr (type, value_as_long (arg));
8907 }
8908 
8909 
8910                                 /* Evaluation */
8911 
8912 /* True if TYPE appears to be an Ada character type.
8913    [At the moment, this is true only for Character and Wide_Character;
8914    It is a heuristic test that could stand improvement].  */
8915 
8916 bool
8917 ada_is_character_type (struct type *type)
8918 {
8919   const char *name;
8920 
8921   /* If the type code says it's a character, then assume it really is,
8922      and don't check any further.  */
8923   if (type->code () == TYPE_CODE_CHAR)
8924     return true;
8925 
8926   /* Otherwise, assume it's a character type iff it is a discrete type
8927      with a known character type name.  */
8928   name = ada_type_name (type);
8929   return (name != NULL
8930           && (type->code () == TYPE_CODE_INT
8931               || type->code () == TYPE_CODE_RANGE)
8932           && (strcmp (name, "character") == 0
8933               || strcmp (name, "wide_character") == 0
8934               || strcmp (name, "wide_wide_character") == 0
8935               || strcmp (name, "unsigned char") == 0));
8936 }
8937 
8938 /* True if TYPE appears to be an Ada string type.  */
8939 
8940 bool
8941 ada_is_string_type (struct type *type)
8942 {
8943   type = ada_check_typedef (type);
8944   if (type != NULL
8945       && type->code () != TYPE_CODE_PTR
8946       && (ada_is_simple_array_type (type)
8947           || ada_is_array_descriptor_type (type))
8948       && ada_array_arity (type) == 1)
8949     {
8950       struct type *elttype = ada_array_element_type (type, 1);
8951 
8952       return ada_is_character_type (elttype);
8953     }
8954   else
8955     return false;
8956 }
8957 
8958 /* The compiler sometimes provides a parallel XVS type for a given
8959    PAD type.  Normally, it is safe to follow the PAD type directly,
8960    but older versions of the compiler have a bug that causes the offset
8961    of its "F" field to be wrong.  Following that field in that case
8962    would lead to incorrect results, but this can be worked around
8963    by ignoring the PAD type and using the associated XVS type instead.
8964 
8965    Set to True if the debugger should trust the contents of PAD types.
8966    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8967 static bool trust_pad_over_xvs = true;
8968 
8969 /* True if TYPE is a struct type introduced by the compiler to force the
8970    alignment of a value.  Such types have a single field with a
8971    distinctive name.  */
8972 
8973 int
8974 ada_is_aligner_type (struct type *type)
8975 {
8976   type = ada_check_typedef (type);
8977 
8978   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8979     return 0;
8980 
8981   return (type->code () == TYPE_CODE_STRUCT
8982           && type->num_fields () == 1
8983           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8984 }
8985 
8986 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8987    the parallel type.  */
8988 
8989 struct type *
8990 ada_get_base_type (struct type *raw_type)
8991 {
8992   struct type *real_type_namer;
8993   struct type *raw_real_type;
8994 
8995   if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT)
8996     return raw_type;
8997 
8998   if (ada_is_aligner_type (raw_type))
8999     /* The encoding specifies that we should always use the aligner type.
9000        So, even if this aligner type has an associated XVS type, we should
9001        simply ignore it.
9002 
9003        According to the compiler gurus, an XVS type parallel to an aligner
9004        type may exist because of a stabs limitation.  In stabs, aligner
9005        types are empty because the field has a variable-sized type, and
9006        thus cannot actually be used as an aligner type.  As a result,
9007        we need the associated parallel XVS type to decode the type.
9008        Since the policy in the compiler is to not change the internal
9009        representation based on the debugging info format, we sometimes
9010        end up having a redundant XVS type parallel to the aligner type.  */
9011     return raw_type;
9012 
9013   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
9014   if (real_type_namer == NULL
9015       || real_type_namer->code () != TYPE_CODE_STRUCT
9016       || real_type_namer->num_fields () != 1)
9017     return raw_type;
9018 
9019   if (real_type_namer->field (0).type ()->code () != TYPE_CODE_REF)
9020     {
9021       /* This is an older encoding form where the base type needs to be
9022 	 looked up by name.  We prefer the newer encoding because it is
9023 	 more efficient.  */
9024       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9025       if (raw_real_type == NULL)
9026 	return raw_type;
9027       else
9028 	return raw_real_type;
9029     }
9030 
9031   /* The field in our XVS type is a reference to the base type.  */
9032   return TYPE_TARGET_TYPE (real_type_namer->field (0).type ());
9033 }
9034 
9035 /* The type of value designated by TYPE, with all aligners removed.  */
9036 
9037 struct type *
9038 ada_aligned_type (struct type *type)
9039 {
9040   if (ada_is_aligner_type (type))
9041     return ada_aligned_type (type->field (0).type ());
9042   else
9043     return ada_get_base_type (type);
9044 }
9045 
9046 
9047 /* The address of the aligned value in an object at address VALADDR
9048    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
9049 
9050 const gdb_byte *
9051 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
9052 {
9053   if (ada_is_aligner_type (type))
9054     return ada_aligned_value_addr (type->field (0).type (),
9055                                    valaddr +
9056                                    TYPE_FIELD_BITPOS (type,
9057                                                       0) / TARGET_CHAR_BIT);
9058   else
9059     return valaddr;
9060 }
9061 
9062 
9063 
9064 /* The printed representation of an enumeration literal with encoded
9065    name NAME.  The value is good to the next call of ada_enum_name.  */
9066 const char *
9067 ada_enum_name (const char *name)
9068 {
9069   static char *result;
9070   static size_t result_len = 0;
9071   const char *tmp;
9072 
9073   /* First, unqualify the enumeration name:
9074      1. Search for the last '.' character.  If we find one, then skip
9075      all the preceding characters, the unqualified name starts
9076      right after that dot.
9077      2. Otherwise, we may be debugging on a target where the compiler
9078      translates dots into "__".  Search forward for double underscores,
9079      but stop searching when we hit an overloading suffix, which is
9080      of the form "__" followed by digits.  */
9081 
9082   tmp = strrchr (name, '.');
9083   if (tmp != NULL)
9084     name = tmp + 1;
9085   else
9086     {
9087       while ((tmp = strstr (name, "__")) != NULL)
9088         {
9089           if (isdigit (tmp[2]))
9090             break;
9091           else
9092             name = tmp + 2;
9093         }
9094     }
9095 
9096   if (name[0] == 'Q')
9097     {
9098       int v;
9099 
9100       if (name[1] == 'U' || name[1] == 'W')
9101         {
9102           if (sscanf (name + 2, "%x", &v) != 1)
9103             return name;
9104         }
9105       else if (((name[1] >= '0' && name[1] <= '9')
9106 		|| (name[1] >= 'a' && name[1] <= 'z'))
9107 	       && name[2] == '\0')
9108 	{
9109 	  GROW_VECT (result, result_len, 4);
9110 	  xsnprintf (result, result_len, "'%c'", name[1]);
9111 	  return result;
9112 	}
9113       else
9114         return name;
9115 
9116       GROW_VECT (result, result_len, 16);
9117       if (isascii (v) && isprint (v))
9118         xsnprintf (result, result_len, "'%c'", v);
9119       else if (name[1] == 'U')
9120         xsnprintf (result, result_len, "[\"%02x\"]", v);
9121       else
9122         xsnprintf (result, result_len, "[\"%04x\"]", v);
9123 
9124       return result;
9125     }
9126   else
9127     {
9128       tmp = strstr (name, "__");
9129       if (tmp == NULL)
9130 	tmp = strstr (name, "$");
9131       if (tmp != NULL)
9132         {
9133           GROW_VECT (result, result_len, tmp - name + 1);
9134           strncpy (result, name, tmp - name);
9135           result[tmp - name] = '\0';
9136           return result;
9137         }
9138 
9139       return name;
9140     }
9141 }
9142 
9143 /* Evaluate the subexpression of EXP starting at *POS as for
9144    evaluate_type, updating *POS to point just past the evaluated
9145    expression.  */
9146 
9147 static struct value *
9148 evaluate_subexp_type (struct expression *exp, int *pos)
9149 {
9150   return evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9151 }
9152 
9153 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9154    value it wraps.  */
9155 
9156 static struct value *
9157 unwrap_value (struct value *val)
9158 {
9159   struct type *type = ada_check_typedef (value_type (val));
9160 
9161   if (ada_is_aligner_type (type))
9162     {
9163       struct value *v = ada_value_struct_elt (val, "F", 0);
9164       struct type *val_type = ada_check_typedef (value_type (v));
9165 
9166       if (ada_type_name (val_type) == NULL)
9167 	val_type->set_name (ada_type_name (type));
9168 
9169       return unwrap_value (v);
9170     }
9171   else
9172     {
9173       struct type *raw_real_type =
9174         ada_check_typedef (ada_get_base_type (type));
9175 
9176       /* If there is no parallel XVS or XVE type, then the value is
9177 	 already unwrapped.  Return it without further modification.  */
9178       if ((type == raw_real_type)
9179 	  && ada_find_parallel_type (type, "___XVE") == NULL)
9180 	return val;
9181 
9182       return
9183         coerce_unspec_val_to_type
9184         (val, ada_to_fixed_type (raw_real_type, 0,
9185                                  value_address (val),
9186                                  NULL, 1));
9187     }
9188 }
9189 
9190 static struct value *
9191 cast_from_fixed (struct type *type, struct value *arg)
9192 {
9193   struct value *scale = ada_scaling_factor (value_type (arg));
9194   arg = value_cast (value_type (scale), arg);
9195 
9196   arg = value_binop (arg, scale, BINOP_MUL);
9197   return value_cast (type, arg);
9198 }
9199 
9200 static struct value *
9201 cast_to_fixed (struct type *type, struct value *arg)
9202 {
9203   if (type == value_type (arg))
9204     return arg;
9205 
9206   struct value *scale = ada_scaling_factor (type);
9207   if (ada_is_gnat_encoded_fixed_point_type (value_type (arg)))
9208     arg = cast_from_fixed (value_type (scale), arg);
9209   else
9210     arg = value_cast (value_type (scale), arg);
9211 
9212   arg = value_binop (arg, scale, BINOP_DIV);
9213   return value_cast (type, arg);
9214 }
9215 
9216 /* Given two array types T1 and T2, return nonzero iff both arrays
9217    contain the same number of elements.  */
9218 
9219 static int
9220 ada_same_array_size_p (struct type *t1, struct type *t2)
9221 {
9222   LONGEST lo1, hi1, lo2, hi2;
9223 
9224   /* Get the array bounds in order to verify that the size of
9225      the two arrays match.  */
9226   if (!get_array_bounds (t1, &lo1, &hi1)
9227       || !get_array_bounds (t2, &lo2, &hi2))
9228     error (_("unable to determine array bounds"));
9229 
9230   /* To make things easier for size comparison, normalize a bit
9231      the case of empty arrays by making sure that the difference
9232      between upper bound and lower bound is always -1.  */
9233   if (lo1 > hi1)
9234     hi1 = lo1 - 1;
9235   if (lo2 > hi2)
9236     hi2 = lo2 - 1;
9237 
9238   return (hi1 - lo1 == hi2 - lo2);
9239 }
9240 
9241 /* Assuming that VAL is an array of integrals, and TYPE represents
9242    an array with the same number of elements, but with wider integral
9243    elements, return an array "casted" to TYPE.  In practice, this
9244    means that the returned array is built by casting each element
9245    of the original array into TYPE's (wider) element type.  */
9246 
9247 static struct value *
9248 ada_promote_array_of_integrals (struct type *type, struct value *val)
9249 {
9250   struct type *elt_type = TYPE_TARGET_TYPE (type);
9251   LONGEST lo, hi;
9252   struct value *res;
9253   LONGEST i;
9254 
9255   /* Verify that both val and type are arrays of scalars, and
9256      that the size of val's elements is smaller than the size
9257      of type's element.  */
9258   gdb_assert (type->code () == TYPE_CODE_ARRAY);
9259   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9260   gdb_assert (value_type (val)->code () == TYPE_CODE_ARRAY);
9261   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9262   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9263 	      > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9264 
9265   if (!get_array_bounds (type, &lo, &hi))
9266     error (_("unable to determine array bounds"));
9267 
9268   res = allocate_value (type);
9269 
9270   /* Promote each array element.  */
9271   for (i = 0; i < hi - lo + 1; i++)
9272     {
9273       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9274 
9275       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9276 	      value_contents_all (elt), TYPE_LENGTH (elt_type));
9277     }
9278 
9279   return res;
9280 }
9281 
9282 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9283    return the converted value.  */
9284 
9285 static struct value *
9286 coerce_for_assign (struct type *type, struct value *val)
9287 {
9288   struct type *type2 = value_type (val);
9289 
9290   if (type == type2)
9291     return val;
9292 
9293   type2 = ada_check_typedef (type2);
9294   type = ada_check_typedef (type);
9295 
9296   if (type2->code () == TYPE_CODE_PTR
9297       && type->code () == TYPE_CODE_ARRAY)
9298     {
9299       val = ada_value_ind (val);
9300       type2 = value_type (val);
9301     }
9302 
9303   if (type2->code () == TYPE_CODE_ARRAY
9304       && type->code () == TYPE_CODE_ARRAY)
9305     {
9306       if (!ada_same_array_size_p (type, type2))
9307 	error (_("cannot assign arrays of different length"));
9308 
9309       if (is_integral_type (TYPE_TARGET_TYPE (type))
9310 	  && is_integral_type (TYPE_TARGET_TYPE (type2))
9311 	  && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9312 	       < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9313 	{
9314 	  /* Allow implicit promotion of the array elements to
9315 	     a wider type.  */
9316 	  return ada_promote_array_of_integrals (type, val);
9317 	}
9318 
9319       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9320           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9321         error (_("Incompatible types in assignment"));
9322       deprecated_set_value_type (val, type);
9323     }
9324   return val;
9325 }
9326 
9327 static struct value *
9328 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9329 {
9330   struct value *val;
9331   struct type *type1, *type2;
9332   LONGEST v, v1, v2;
9333 
9334   arg1 = coerce_ref (arg1);
9335   arg2 = coerce_ref (arg2);
9336   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9337   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9338 
9339   if (type1->code () != TYPE_CODE_INT
9340       || type2->code () != TYPE_CODE_INT)
9341     return value_binop (arg1, arg2, op);
9342 
9343   switch (op)
9344     {
9345     case BINOP_MOD:
9346     case BINOP_DIV:
9347     case BINOP_REM:
9348       break;
9349     default:
9350       return value_binop (arg1, arg2, op);
9351     }
9352 
9353   v2 = value_as_long (arg2);
9354   if (v2 == 0)
9355     error (_("second operand of %s must not be zero."), op_string (op));
9356 
9357   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9358     return value_binop (arg1, arg2, op);
9359 
9360   v1 = value_as_long (arg1);
9361   switch (op)
9362     {
9363     case BINOP_DIV:
9364       v = v1 / v2;
9365       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9366         v += v > 0 ? -1 : 1;
9367       break;
9368     case BINOP_REM:
9369       v = v1 % v2;
9370       if (v * v1 < 0)
9371         v -= v2;
9372       break;
9373     default:
9374       /* Should not reach this point.  */
9375       v = 0;
9376     }
9377 
9378   val = allocate_value (type1);
9379   store_unsigned_integer (value_contents_raw (val),
9380                           TYPE_LENGTH (value_type (val)),
9381 			  type_byte_order (type1), v);
9382   return val;
9383 }
9384 
9385 static int
9386 ada_value_equal (struct value *arg1, struct value *arg2)
9387 {
9388   if (ada_is_direct_array_type (value_type (arg1))
9389       || ada_is_direct_array_type (value_type (arg2)))
9390     {
9391       struct type *arg1_type, *arg2_type;
9392 
9393       /* Automatically dereference any array reference before
9394          we attempt to perform the comparison.  */
9395       arg1 = ada_coerce_ref (arg1);
9396       arg2 = ada_coerce_ref (arg2);
9397 
9398       arg1 = ada_coerce_to_simple_array (arg1);
9399       arg2 = ada_coerce_to_simple_array (arg2);
9400 
9401       arg1_type = ada_check_typedef (value_type (arg1));
9402       arg2_type = ada_check_typedef (value_type (arg2));
9403 
9404       if (arg1_type->code () != TYPE_CODE_ARRAY
9405           || arg2_type->code () != TYPE_CODE_ARRAY)
9406         error (_("Attempt to compare array with non-array"));
9407       /* FIXME: The following works only for types whose
9408          representations use all bits (no padding or undefined bits)
9409          and do not have user-defined equality.  */
9410       return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9411 	      && memcmp (value_contents (arg1), value_contents (arg2),
9412 			 TYPE_LENGTH (arg1_type)) == 0);
9413     }
9414   return value_equal (arg1, arg2);
9415 }
9416 
9417 /* Total number of component associations in the aggregate starting at
9418    index PC in EXP.  Assumes that index PC is the start of an
9419    OP_AGGREGATE.  */
9420 
9421 static int
9422 num_component_specs (struct expression *exp, int pc)
9423 {
9424   int n, m, i;
9425 
9426   m = exp->elts[pc + 1].longconst;
9427   pc += 3;
9428   n = 0;
9429   for (i = 0; i < m; i += 1)
9430     {
9431       switch (exp->elts[pc].opcode)
9432 	{
9433 	default:
9434 	  n += 1;
9435 	  break;
9436 	case OP_CHOICES:
9437 	  n += exp->elts[pc + 1].longconst;
9438 	  break;
9439 	}
9440       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9441     }
9442   return n;
9443 }
9444 
9445 /* Assign the result of evaluating EXP starting at *POS to the INDEXth
9446    component of LHS (a simple array or a record), updating *POS past
9447    the expression, assuming that LHS is contained in CONTAINER.  Does
9448    not modify the inferior's memory, nor does it modify LHS (unless
9449    LHS == CONTAINER).  */
9450 
9451 static void
9452 assign_component (struct value *container, struct value *lhs, LONGEST index,
9453 		  struct expression *exp, int *pos)
9454 {
9455   struct value *mark = value_mark ();
9456   struct value *elt;
9457   struct type *lhs_type = check_typedef (value_type (lhs));
9458 
9459   if (lhs_type->code () == TYPE_CODE_ARRAY)
9460     {
9461       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9462       struct value *index_val = value_from_longest (index_type, index);
9463 
9464       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9465     }
9466   else
9467     {
9468       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9469       elt = ada_to_fixed_value (elt);
9470     }
9471 
9472   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9473     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9474   else
9475     value_assign_to_component (container, elt,
9476 			       ada_evaluate_subexp (NULL, exp, pos,
9477 						    EVAL_NORMAL));
9478 
9479   value_free_to_mark (mark);
9480 }
9481 
9482 /* Assuming that LHS represents an lvalue having a record or array
9483    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9484    of that aggregate's value to LHS, advancing *POS past the
9485    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9486    lvalue containing LHS (possibly LHS itself).  Does not modify
9487    the inferior's memory, nor does it modify the contents of
9488    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9489 
9490 static struct value *
9491 assign_aggregate (struct value *container,
9492 		  struct value *lhs, struct expression *exp,
9493 		  int *pos, enum noside noside)
9494 {
9495   struct type *lhs_type;
9496   int n = exp->elts[*pos+1].longconst;
9497   LONGEST low_index, high_index;
9498   int num_specs;
9499   LONGEST *indices;
9500   int max_indices, num_indices;
9501   int i;
9502 
9503   *pos += 3;
9504   if (noside != EVAL_NORMAL)
9505     {
9506       for (i = 0; i < n; i += 1)
9507 	ada_evaluate_subexp (NULL, exp, pos, noside);
9508       return container;
9509     }
9510 
9511   container = ada_coerce_ref (container);
9512   if (ada_is_direct_array_type (value_type (container)))
9513     container = ada_coerce_to_simple_array (container);
9514   lhs = ada_coerce_ref (lhs);
9515   if (!deprecated_value_modifiable (lhs))
9516     error (_("Left operand of assignment is not a modifiable lvalue."));
9517 
9518   lhs_type = check_typedef (value_type (lhs));
9519   if (ada_is_direct_array_type (lhs_type))
9520     {
9521       lhs = ada_coerce_to_simple_array (lhs);
9522       lhs_type = check_typedef (value_type (lhs));
9523       low_index = lhs_type->bounds ()->low.const_val ();
9524       high_index = lhs_type->bounds ()->high.const_val ();
9525     }
9526   else if (lhs_type->code () == TYPE_CODE_STRUCT)
9527     {
9528       low_index = 0;
9529       high_index = num_visible_fields (lhs_type) - 1;
9530     }
9531   else
9532     error (_("Left-hand side must be array or record."));
9533 
9534   num_specs = num_component_specs (exp, *pos - 3);
9535   max_indices = 4 * num_specs + 4;
9536   indices = XALLOCAVEC (LONGEST, max_indices);
9537   indices[0] = indices[1] = low_index - 1;
9538   indices[2] = indices[3] = high_index + 1;
9539   num_indices = 4;
9540 
9541   for (i = 0; i < n; i += 1)
9542     {
9543       switch (exp->elts[*pos].opcode)
9544 	{
9545 	  case OP_CHOICES:
9546 	    aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9547 					   &num_indices, max_indices,
9548 					   low_index, high_index);
9549 	    break;
9550 	  case OP_POSITIONAL:
9551 	    aggregate_assign_positional (container, lhs, exp, pos, indices,
9552 					 &num_indices, max_indices,
9553 					 low_index, high_index);
9554 	    break;
9555 	  case OP_OTHERS:
9556 	    if (i != n-1)
9557 	      error (_("Misplaced 'others' clause"));
9558 	    aggregate_assign_others (container, lhs, exp, pos, indices,
9559 				     num_indices, low_index, high_index);
9560 	    break;
9561 	  default:
9562 	    error (_("Internal error: bad aggregate clause"));
9563 	}
9564     }
9565 
9566   return container;
9567 }
9568 
9569 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9570    construct at *POS, updating *POS past the construct, given that
9571    the positions are relative to lower bound LOW, where HIGH is the
9572    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9573    updating *NUM_INDICES as needed.  CONTAINER is as for
9574    assign_aggregate.  */
9575 static void
9576 aggregate_assign_positional (struct value *container,
9577 			     struct value *lhs, struct expression *exp,
9578 			     int *pos, LONGEST *indices, int *num_indices,
9579 			     int max_indices, LONGEST low, LONGEST high)
9580 {
9581   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9582 
9583   if (ind - 1 == high)
9584     warning (_("Extra components in aggregate ignored."));
9585   if (ind <= high)
9586     {
9587       add_component_interval (ind, ind, indices, num_indices, max_indices);
9588       *pos += 3;
9589       assign_component (container, lhs, ind, exp, pos);
9590     }
9591   else
9592     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9593 }
9594 
9595 /* Assign into the components of LHS indexed by the OP_CHOICES
9596    construct at *POS, updating *POS past the construct, given that
9597    the allowable indices are LOW..HIGH.  Record the indices assigned
9598    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9599    needed.  CONTAINER is as for assign_aggregate.  */
9600 static void
9601 aggregate_assign_from_choices (struct value *container,
9602 			       struct value *lhs, struct expression *exp,
9603 			       int *pos, LONGEST *indices, int *num_indices,
9604 			       int max_indices, LONGEST low, LONGEST high)
9605 {
9606   int j;
9607   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9608   int choice_pos, expr_pc;
9609   int is_array = ada_is_direct_array_type (value_type (lhs));
9610 
9611   choice_pos = *pos += 3;
9612 
9613   for (j = 0; j < n_choices; j += 1)
9614     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9615   expr_pc = *pos;
9616   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9617 
9618   for (j = 0; j < n_choices; j += 1)
9619     {
9620       LONGEST lower, upper;
9621       enum exp_opcode op = exp->elts[choice_pos].opcode;
9622 
9623       if (op == OP_DISCRETE_RANGE)
9624 	{
9625 	  choice_pos += 1;
9626 	  lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9627 						      EVAL_NORMAL));
9628 	  upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9629 						      EVAL_NORMAL));
9630 	}
9631       else if (is_array)
9632 	{
9633 	  lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9634 						      EVAL_NORMAL));
9635 	  upper = lower;
9636 	}
9637       else
9638 	{
9639 	  int ind;
9640 	  const char *name;
9641 
9642 	  switch (op)
9643 	    {
9644 	    case OP_NAME:
9645 	      name = &exp->elts[choice_pos + 2].string;
9646 	      break;
9647 	    case OP_VAR_VALUE:
9648 	      name = exp->elts[choice_pos + 2].symbol->natural_name ();
9649 	      break;
9650 	    default:
9651 	      error (_("Invalid record component association."));
9652 	    }
9653 	  ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9654 	  ind = 0;
9655 	  if (! find_struct_field (name, value_type (lhs), 0,
9656 				   NULL, NULL, NULL, NULL, &ind))
9657 	    error (_("Unknown component name: %s."), name);
9658 	  lower = upper = ind;
9659 	}
9660 
9661       if (lower <= upper && (lower < low || upper > high))
9662 	error (_("Index in component association out of bounds."));
9663 
9664       add_component_interval (lower, upper, indices, num_indices,
9665 			      max_indices);
9666       while (lower <= upper)
9667 	{
9668 	  int pos1;
9669 
9670 	  pos1 = expr_pc;
9671 	  assign_component (container, lhs, lower, exp, &pos1);
9672 	  lower += 1;
9673 	}
9674     }
9675 }
9676 
9677 /* Assign the value of the expression in the OP_OTHERS construct in
9678    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9679    have not been previously assigned.  The index intervals already assigned
9680    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the
9681    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9682 static void
9683 aggregate_assign_others (struct value *container,
9684 			 struct value *lhs, struct expression *exp,
9685 			 int *pos, LONGEST *indices, int num_indices,
9686 			 LONGEST low, LONGEST high)
9687 {
9688   int i;
9689   int expr_pc = *pos + 1;
9690 
9691   for (i = 0; i < num_indices - 2; i += 2)
9692     {
9693       LONGEST ind;
9694 
9695       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9696 	{
9697 	  int localpos;
9698 
9699 	  localpos = expr_pc;
9700 	  assign_component (container, lhs, ind, exp, &localpos);
9701 	}
9702     }
9703   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9704 }
9705 
9706 /* Add the interval [LOW .. HIGH] to the sorted set of intervals
9707    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9708    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9709    MAX_SIZE.  The resulting intervals do not overlap.  */
9710 static void
9711 add_component_interval (LONGEST low, LONGEST high,
9712 			LONGEST* indices, int *size, int max_size)
9713 {
9714   int i, j;
9715 
9716   for (i = 0; i < *size; i += 2) {
9717     if (high >= indices[i] && low <= indices[i + 1])
9718       {
9719 	int kh;
9720 
9721 	for (kh = i + 2; kh < *size; kh += 2)
9722 	  if (high < indices[kh])
9723 	    break;
9724 	if (low < indices[i])
9725 	  indices[i] = low;
9726 	indices[i + 1] = indices[kh - 1];
9727 	if (high > indices[i + 1])
9728 	  indices[i + 1] = high;
9729 	memcpy (indices + i + 2, indices + kh, *size - kh);
9730 	*size -= kh - i - 2;
9731 	return;
9732       }
9733     else if (high < indices[i])
9734       break;
9735   }
9736 
9737   if (*size == max_size)
9738     error (_("Internal error: miscounted aggregate components."));
9739   *size += 2;
9740   for (j = *size-1; j >= i+2; j -= 1)
9741     indices[j] = indices[j - 2];
9742   indices[i] = low;
9743   indices[i + 1] = high;
9744 }
9745 
9746 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9747    is different.  */
9748 
9749 static struct value *
9750 ada_value_cast (struct type *type, struct value *arg2)
9751 {
9752   if (type == ada_check_typedef (value_type (arg2)))
9753     return arg2;
9754 
9755   if (ada_is_gnat_encoded_fixed_point_type (type))
9756     return cast_to_fixed (type, arg2);
9757 
9758   if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
9759     return cast_from_fixed (type, arg2);
9760 
9761   return value_cast (type, arg2);
9762 }
9763 
9764 /*  Evaluating Ada expressions, and printing their result.
9765     ------------------------------------------------------
9766 
9767     1. Introduction:
9768     ----------------
9769 
9770     We usually evaluate an Ada expression in order to print its value.
9771     We also evaluate an expression in order to print its type, which
9772     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9773     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9774     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9775     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9776     similar.
9777 
9778     Evaluating expressions is a little more complicated for Ada entities
9779     than it is for entities in languages such as C.  The main reason for
9780     this is that Ada provides types whose definition might be dynamic.
9781     One example of such types is variant records.  Or another example
9782     would be an array whose bounds can only be known at run time.
9783 
9784     The following description is a general guide as to what should be
9785     done (and what should NOT be done) in order to evaluate an expression
9786     involving such types, and when.  This does not cover how the semantic
9787     information is encoded by GNAT as this is covered separatly.  For the
9788     document used as the reference for the GNAT encoding, see exp_dbug.ads
9789     in the GNAT sources.
9790 
9791     Ideally, we should embed each part of this description next to its
9792     associated code.  Unfortunately, the amount of code is so vast right
9793     now that it's hard to see whether the code handling a particular
9794     situation might be duplicated or not.  One day, when the code is
9795     cleaned up, this guide might become redundant with the comments
9796     inserted in the code, and we might want to remove it.
9797 
9798     2. ``Fixing'' an Entity, the Simple Case:
9799     -----------------------------------------
9800 
9801     When evaluating Ada expressions, the tricky issue is that they may
9802     reference entities whose type contents and size are not statically
9803     known.  Consider for instance a variant record:
9804 
9805        type Rec (Empty : Boolean := True) is record
9806           case Empty is
9807              when True => null;
9808              when False => Value : Integer;
9809           end case;
9810        end record;
9811        Yes : Rec := (Empty => False, Value => 1);
9812        No  : Rec := (empty => True);
9813 
9814     The size and contents of that record depends on the value of the
9815     descriminant (Rec.Empty).  At this point, neither the debugging
9816     information nor the associated type structure in GDB are able to
9817     express such dynamic types.  So what the debugger does is to create
9818     "fixed" versions of the type that applies to the specific object.
9819     We also informally refer to this operation as "fixing" an object,
9820     which means creating its associated fixed type.
9821 
9822     Example: when printing the value of variable "Yes" above, its fixed
9823     type would look like this:
9824 
9825        type Rec is record
9826           Empty : Boolean;
9827           Value : Integer;
9828        end record;
9829 
9830     On the other hand, if we printed the value of "No", its fixed type
9831     would become:
9832 
9833        type Rec is record
9834           Empty : Boolean;
9835        end record;
9836 
9837     Things become a little more complicated when trying to fix an entity
9838     with a dynamic type that directly contains another dynamic type,
9839     such as an array of variant records, for instance.  There are
9840     two possible cases: Arrays, and records.
9841 
9842     3. ``Fixing'' Arrays:
9843     ---------------------
9844 
9845     The type structure in GDB describes an array in terms of its bounds,
9846     and the type of its elements.  By design, all elements in the array
9847     have the same type and we cannot represent an array of variant elements
9848     using the current type structure in GDB.  When fixing an array,
9849     we cannot fix the array element, as we would potentially need one
9850     fixed type per element of the array.  As a result, the best we can do
9851     when fixing an array is to produce an array whose bounds and size
9852     are correct (allowing us to read it from memory), but without having
9853     touched its element type.  Fixing each element will be done later,
9854     when (if) necessary.
9855 
9856     Arrays are a little simpler to handle than records, because the same
9857     amount of memory is allocated for each element of the array, even if
9858     the amount of space actually used by each element differs from element
9859     to element.  Consider for instance the following array of type Rec:
9860 
9861        type Rec_Array is array (1 .. 2) of Rec;
9862 
9863     The actual amount of memory occupied by each element might be different
9864     from element to element, depending on the value of their discriminant.
9865     But the amount of space reserved for each element in the array remains
9866     fixed regardless.  So we simply need to compute that size using
9867     the debugging information available, from which we can then determine
9868     the array size (we multiply the number of elements of the array by
9869     the size of each element).
9870 
9871     The simplest case is when we have an array of a constrained element
9872     type. For instance, consider the following type declarations:
9873 
9874         type Bounded_String (Max_Size : Integer) is
9875            Length : Integer;
9876            Buffer : String (1 .. Max_Size);
9877         end record;
9878         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9879 
9880     In this case, the compiler describes the array as an array of
9881     variable-size elements (identified by its XVS suffix) for which
9882     the size can be read in the parallel XVZ variable.
9883 
9884     In the case of an array of an unconstrained element type, the compiler
9885     wraps the array element inside a private PAD type.  This type should not
9886     be shown to the user, and must be "unwrap"'ed before printing.  Note
9887     that we also use the adjective "aligner" in our code to designate
9888     these wrapper types.
9889 
9890     In some cases, the size allocated for each element is statically
9891     known.  In that case, the PAD type already has the correct size,
9892     and the array element should remain unfixed.
9893 
9894     But there are cases when this size is not statically known.
9895     For instance, assuming that "Five" is an integer variable:
9896 
9897         type Dynamic is array (1 .. Five) of Integer;
9898         type Wrapper (Has_Length : Boolean := False) is record
9899            Data : Dynamic;
9900            case Has_Length is
9901               when True => Length : Integer;
9902               when False => null;
9903            end case;
9904         end record;
9905         type Wrapper_Array is array (1 .. 2) of Wrapper;
9906 
9907         Hello : Wrapper_Array := (others => (Has_Length => True,
9908                                              Data => (others => 17),
9909                                              Length => 1));
9910 
9911 
9912     The debugging info would describe variable Hello as being an
9913     array of a PAD type.  The size of that PAD type is not statically
9914     known, but can be determined using a parallel XVZ variable.
9915     In that case, a copy of the PAD type with the correct size should
9916     be used for the fixed array.
9917 
9918     3. ``Fixing'' record type objects:
9919     ----------------------------------
9920 
9921     Things are slightly different from arrays in the case of dynamic
9922     record types.  In this case, in order to compute the associated
9923     fixed type, we need to determine the size and offset of each of
9924     its components.  This, in turn, requires us to compute the fixed
9925     type of each of these components.
9926 
9927     Consider for instance the example:
9928 
9929         type Bounded_String (Max_Size : Natural) is record
9930            Str : String (1 .. Max_Size);
9931            Length : Natural;
9932         end record;
9933         My_String : Bounded_String (Max_Size => 10);
9934 
9935     In that case, the position of field "Length" depends on the size
9936     of field Str, which itself depends on the value of the Max_Size
9937     discriminant.  In order to fix the type of variable My_String,
9938     we need to fix the type of field Str.  Therefore, fixing a variant
9939     record requires us to fix each of its components.
9940 
9941     However, if a component does not have a dynamic size, the component
9942     should not be fixed.  In particular, fields that use a PAD type
9943     should not fixed.  Here is an example where this might happen
9944     (assuming type Rec above):
9945 
9946        type Container (Big : Boolean) is record
9947           First : Rec;
9948           After : Integer;
9949           case Big is
9950              when True => Another : Integer;
9951              when False => null;
9952           end case;
9953        end record;
9954        My_Container : Container := (Big => False,
9955                                     First => (Empty => True),
9956                                     After => 42);
9957 
9958     In that example, the compiler creates a PAD type for component First,
9959     whose size is constant, and then positions the component After just
9960     right after it.  The offset of component After is therefore constant
9961     in this case.
9962 
9963     The debugger computes the position of each field based on an algorithm
9964     that uses, among other things, the actual position and size of the field
9965     preceding it.  Let's now imagine that the user is trying to print
9966     the value of My_Container.  If the type fixing was recursive, we would
9967     end up computing the offset of field After based on the size of the
9968     fixed version of field First.  And since in our example First has
9969     only one actual field, the size of the fixed type is actually smaller
9970     than the amount of space allocated to that field, and thus we would
9971     compute the wrong offset of field After.
9972 
9973     To make things more complicated, we need to watch out for dynamic
9974     components of variant records (identified by the ___XVL suffix in
9975     the component name).  Even if the target type is a PAD type, the size
9976     of that type might not be statically known.  So the PAD type needs
9977     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9978     we might end up with the wrong size for our component.  This can be
9979     observed with the following type declarations:
9980 
9981         type Octal is new Integer range 0 .. 7;
9982         type Octal_Array is array (Positive range <>) of Octal;
9983         pragma Pack (Octal_Array);
9984 
9985         type Octal_Buffer (Size : Positive) is record
9986            Buffer : Octal_Array (1 .. Size);
9987            Length : Integer;
9988         end record;
9989 
9990     In that case, Buffer is a PAD type whose size is unset and needs
9991     to be computed by fixing the unwrapped type.
9992 
9993     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9994     ----------------------------------------------------------
9995 
9996     Lastly, when should the sub-elements of an entity that remained unfixed
9997     thus far, be actually fixed?
9998 
9999     The answer is: Only when referencing that element.  For instance
10000     when selecting one component of a record, this specific component
10001     should be fixed at that point in time.  Or when printing the value
10002     of a record, each component should be fixed before its value gets
10003     printed.  Similarly for arrays, the element of the array should be
10004     fixed when printing each element of the array, or when extracting
10005     one element out of that array.  On the other hand, fixing should
10006     not be performed on the elements when taking a slice of an array!
10007 
10008     Note that one of the side effects of miscomputing the offset and
10009     size of each field is that we end up also miscomputing the size
10010     of the containing type.  This can have adverse results when computing
10011     the value of an entity.  GDB fetches the value of an entity based
10012     on the size of its type, and thus a wrong size causes GDB to fetch
10013     the wrong amount of memory.  In the case where the computed size is
10014     too small, GDB fetches too little data to print the value of our
10015     entity.  Results in this case are unpredictable, as we usually read
10016     past the buffer containing the data =:-o.  */
10017 
10018 /* Evaluate a subexpression of EXP, at index *POS, and return a value
10019    for that subexpression cast to TO_TYPE.  Advance *POS over the
10020    subexpression.  */
10021 
10022 static value *
10023 ada_evaluate_subexp_for_cast (expression *exp, int *pos,
10024 			      enum noside noside, struct type *to_type)
10025 {
10026   int pc = *pos;
10027 
10028   if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
10029       || exp->elts[pc].opcode == OP_VAR_VALUE)
10030     {
10031       (*pos) += 4;
10032 
10033       value *val;
10034       if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
10035         {
10036           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10037             return value_zero (to_type, not_lval);
10038 
10039           val = evaluate_var_msym_value (noside,
10040                                          exp->elts[pc + 1].objfile,
10041                                          exp->elts[pc + 2].msymbol);
10042         }
10043       else
10044         val = evaluate_var_value (noside,
10045                                   exp->elts[pc + 1].block,
10046                                   exp->elts[pc + 2].symbol);
10047 
10048       if (noside == EVAL_SKIP)
10049         return eval_skip_value (exp);
10050 
10051       val = ada_value_cast (to_type, val);
10052 
10053       /* Follow the Ada language semantics that do not allow taking
10054 	 an address of the result of a cast (view conversion in Ada).  */
10055       if (VALUE_LVAL (val) == lval_memory)
10056         {
10057           if (value_lazy (val))
10058             value_fetch_lazy (val);
10059           VALUE_LVAL (val) = not_lval;
10060         }
10061       return val;
10062     }
10063 
10064   value *val = evaluate_subexp (to_type, exp, pos, noside);
10065   if (noside == EVAL_SKIP)
10066     return eval_skip_value (exp);
10067   return ada_value_cast (to_type, val);
10068 }
10069 
10070 /* Implement the evaluate_exp routine in the exp_descriptor structure
10071    for the Ada language.  */
10072 
10073 static struct value *
10074 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
10075                      int *pos, enum noside noside)
10076 {
10077   enum exp_opcode op;
10078   int tem;
10079   int pc;
10080   int preeval_pos;
10081   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10082   struct type *type;
10083   int nargs, oplen;
10084   struct value **argvec;
10085 
10086   pc = *pos;
10087   *pos += 1;
10088   op = exp->elts[pc].opcode;
10089 
10090   switch (op)
10091     {
10092     default:
10093       *pos -= 1;
10094       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10095 
10096       if (noside == EVAL_NORMAL)
10097 	arg1 = unwrap_value (arg1);
10098 
10099       /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
10100          then we need to perform the conversion manually, because
10101          evaluate_subexp_standard doesn't do it.  This conversion is
10102          necessary in Ada because the different kinds of float/fixed
10103          types in Ada have different representations.
10104 
10105          Similarly, we need to perform the conversion from OP_LONG
10106          ourselves.  */
10107       if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
10108         arg1 = ada_value_cast (expect_type, arg1);
10109 
10110       return arg1;
10111 
10112     case OP_STRING:
10113       {
10114         struct value *result;
10115 
10116         *pos -= 1;
10117         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10118         /* The result type will have code OP_STRING, bashed there from
10119            OP_ARRAY.  Bash it back.  */
10120         if (value_type (result)->code () == TYPE_CODE_STRING)
10121           value_type (result)->set_code (TYPE_CODE_ARRAY);
10122         return result;
10123       }
10124 
10125     case UNOP_CAST:
10126       (*pos) += 2;
10127       type = exp->elts[pc + 1].type;
10128       return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
10129 
10130     case UNOP_QUAL:
10131       (*pos) += 2;
10132       type = exp->elts[pc + 1].type;
10133       return ada_evaluate_subexp (type, exp, pos, noside);
10134 
10135     case BINOP_ASSIGN:
10136       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10137       if (exp->elts[*pos].opcode == OP_AGGREGATE)
10138 	{
10139 	  arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10140 	  if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10141 	    return arg1;
10142 	  return ada_value_assign (arg1, arg1);
10143 	}
10144       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10145          except if the lhs of our assignment is a convenience variable.
10146          In the case of assigning to a convenience variable, the lhs
10147          should be exactly the result of the evaluation of the rhs.  */
10148       type = value_type (arg1);
10149       if (VALUE_LVAL (arg1) == lval_internalvar)
10150          type = NULL;
10151       arg2 = evaluate_subexp (type, exp, pos, noside);
10152       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10153         return arg1;
10154       if (VALUE_LVAL (arg1) == lval_internalvar)
10155 	{
10156 	  /* Nothing.  */
10157 	}
10158       else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1)))
10159         arg2 = cast_to_fixed (value_type (arg1), arg2);
10160       else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
10161         error
10162           (_("Fixed-point values must be assigned to fixed-point variables"));
10163       else
10164         arg2 = coerce_for_assign (value_type (arg1), arg2);
10165       return ada_value_assign (arg1, arg2);
10166 
10167     case BINOP_ADD:
10168       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10169       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10170       if (noside == EVAL_SKIP)
10171         goto nosideret;
10172       if (value_type (arg1)->code () == TYPE_CODE_PTR)
10173         return (value_from_longest
10174                  (value_type (arg1),
10175                   value_as_long (arg1) + value_as_long (arg2)));
10176       if (value_type (arg2)->code () == TYPE_CODE_PTR)
10177         return (value_from_longest
10178                  (value_type (arg2),
10179                   value_as_long (arg1) + value_as_long (arg2)));
10180       if ((ada_is_gnat_encoded_fixed_point_type (value_type (arg1))
10181            || ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
10182           && value_type (arg1) != value_type (arg2))
10183         error (_("Operands of fixed-point addition must have the same type"));
10184       /* Do the addition, and cast the result to the type of the first
10185          argument.  We cannot cast the result to a reference type, so if
10186          ARG1 is a reference type, find its underlying type.  */
10187       type = value_type (arg1);
10188       while (type->code () == TYPE_CODE_REF)
10189         type = TYPE_TARGET_TYPE (type);
10190       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10191       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10192 
10193     case BINOP_SUB:
10194       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10195       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10196       if (noside == EVAL_SKIP)
10197         goto nosideret;
10198       if (value_type (arg1)->code () == TYPE_CODE_PTR)
10199         return (value_from_longest
10200                  (value_type (arg1),
10201                   value_as_long (arg1) - value_as_long (arg2)));
10202       if (value_type (arg2)->code () == TYPE_CODE_PTR)
10203         return (value_from_longest
10204                  (value_type (arg2),
10205                   value_as_long (arg1) - value_as_long (arg2)));
10206       if ((ada_is_gnat_encoded_fixed_point_type (value_type (arg1))
10207            || ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
10208           && value_type (arg1) != value_type (arg2))
10209         error (_("Operands of fixed-point subtraction "
10210 		 "must have the same type"));
10211       /* Do the substraction, and cast the result to the type of the first
10212          argument.  We cannot cast the result to a reference type, so if
10213          ARG1 is a reference type, find its underlying type.  */
10214       type = value_type (arg1);
10215       while (type->code () == TYPE_CODE_REF)
10216         type = TYPE_TARGET_TYPE (type);
10217       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10218       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10219 
10220     case BINOP_MUL:
10221     case BINOP_DIV:
10222     case BINOP_REM:
10223     case BINOP_MOD:
10224       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10225       arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10226       if (noside == EVAL_SKIP)
10227         goto nosideret;
10228       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10229         {
10230           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10231           return value_zero (value_type (arg1), not_lval);
10232         }
10233       else
10234         {
10235           type = builtin_type (exp->gdbarch)->builtin_double;
10236           if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1)))
10237             arg1 = cast_from_fixed (type, arg1);
10238           if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
10239             arg2 = cast_from_fixed (type, arg2);
10240           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10241           return ada_value_binop (arg1, arg2, op);
10242         }
10243 
10244     case BINOP_EQUAL:
10245     case BINOP_NOTEQUAL:
10246       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10247       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10248       if (noside == EVAL_SKIP)
10249         goto nosideret;
10250       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10251         tem = 0;
10252       else
10253 	{
10254 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10255 	  tem = ada_value_equal (arg1, arg2);
10256 	}
10257       if (op == BINOP_NOTEQUAL)
10258         tem = !tem;
10259       type = language_bool_type (exp->language_defn, exp->gdbarch);
10260       return value_from_longest (type, (LONGEST) tem);
10261 
10262     case UNOP_NEG:
10263       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10264       if (noside == EVAL_SKIP)
10265         goto nosideret;
10266       else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1)))
10267         return value_cast (value_type (arg1), value_neg (arg1));
10268       else
10269 	{
10270 	  unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10271 	  return value_neg (arg1);
10272 	}
10273 
10274     case BINOP_LOGICAL_AND:
10275     case BINOP_LOGICAL_OR:
10276     case UNOP_LOGICAL_NOT:
10277       {
10278         struct value *val;
10279 
10280         *pos -= 1;
10281         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10282 	type = language_bool_type (exp->language_defn, exp->gdbarch);
10283         return value_cast (type, val);
10284       }
10285 
10286     case BINOP_BITWISE_AND:
10287     case BINOP_BITWISE_IOR:
10288     case BINOP_BITWISE_XOR:
10289       {
10290         struct value *val;
10291 
10292 	arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10293 	*pos = pc;
10294         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10295 
10296         return value_cast (value_type (arg1), val);
10297       }
10298 
10299     case OP_VAR_VALUE:
10300       *pos -= 1;
10301 
10302       if (noside == EVAL_SKIP)
10303         {
10304           *pos += 4;
10305           goto nosideret;
10306         }
10307 
10308       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10309         /* Only encountered when an unresolved symbol occurs in a
10310            context other than a function call, in which case, it is
10311            invalid.  */
10312         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10313                exp->elts[pc + 2].symbol->print_name ());
10314 
10315       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10316         {
10317           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10318           /* Check to see if this is a tagged type.  We also need to handle
10319              the case where the type is a reference to a tagged type, but
10320              we have to be careful to exclude pointers to tagged types.
10321              The latter should be shown as usual (as a pointer), whereas
10322              a reference should mostly be transparent to the user.  */
10323           if (ada_is_tagged_type (type, 0)
10324               || (type->code () == TYPE_CODE_REF
10325                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10326 	    {
10327 	      /* Tagged types are a little special in the fact that the real
10328 		 type is dynamic and can only be determined by inspecting the
10329 		 object's tag.  This means that we need to get the object's
10330 		 value first (EVAL_NORMAL) and then extract the actual object
10331 		 type from its tag.
10332 
10333 		 Note that we cannot skip the final step where we extract
10334 		 the object type from its tag, because the EVAL_NORMAL phase
10335 		 results in dynamic components being resolved into fixed ones.
10336 		 This can cause problems when trying to print the type
10337 		 description of tagged types whose parent has a dynamic size:
10338 		 We use the type name of the "_parent" component in order
10339 		 to print the name of the ancestor type in the type description.
10340 		 If that component had a dynamic size, the resolution into
10341 		 a fixed type would result in the loss of that type name,
10342 		 thus preventing us from printing the name of the ancestor
10343 		 type in the type description.  */
10344 	      arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);
10345 
10346 	      if (type->code () != TYPE_CODE_REF)
10347 		{
10348 		  struct type *actual_type;
10349 
10350 		  actual_type = type_from_tag (ada_value_tag (arg1));
10351 		  if (actual_type == NULL)
10352 		    /* If, for some reason, we were unable to determine
10353 		       the actual type from the tag, then use the static
10354 		       approximation that we just computed as a fallback.
10355 		       This can happen if the debugging information is
10356 		       incomplete, for instance.  */
10357 		    actual_type = type;
10358 		  return value_zero (actual_type, not_lval);
10359 		}
10360 	      else
10361 		{
10362 		  /* In the case of a ref, ada_coerce_ref takes care
10363 		     of determining the actual type.  But the evaluation
10364 		     should return a ref as it should be valid to ask
10365 		     for its address; so rebuild a ref after coerce.  */
10366 		  arg1 = ada_coerce_ref (arg1);
10367 		  return value_ref (arg1, TYPE_CODE_REF);
10368 		}
10369 	    }
10370 
10371 	  /* Records and unions for which GNAT encodings have been
10372 	     generated need to be statically fixed as well.
10373 	     Otherwise, non-static fixing produces a type where
10374 	     all dynamic properties are removed, which prevents "ptype"
10375 	     from being able to completely describe the type.
10376 	     For instance, a case statement in a variant record would be
10377 	     replaced by the relevant components based on the actual
10378 	     value of the discriminants.  */
10379 	  if ((type->code () == TYPE_CODE_STRUCT
10380 	       && dynamic_template_type (type) != NULL)
10381 	      || (type->code () == TYPE_CODE_UNION
10382 		  && ada_find_parallel_type (type, "___XVU") != NULL))
10383 	    {
10384 	      *pos += 4;
10385 	      return value_zero (to_static_fixed_type (type), not_lval);
10386 	    }
10387         }
10388 
10389       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10390       return ada_to_fixed_value (arg1);
10391 
10392     case OP_FUNCALL:
10393       (*pos) += 2;
10394 
10395       /* Allocate arg vector, including space for the function to be
10396          called in argvec[0] and a terminating NULL.  */
10397       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10398       argvec = XALLOCAVEC (struct value *, nargs + 2);
10399 
10400       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10401           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10402         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10403                exp->elts[pc + 5].symbol->print_name ());
10404       else
10405         {
10406           for (tem = 0; tem <= nargs; tem += 1)
10407 	    argvec[tem] = evaluate_subexp (nullptr, exp, pos, noside);
10408 	  argvec[tem] = 0;
10409 
10410           if (noside == EVAL_SKIP)
10411             goto nosideret;
10412         }
10413 
10414       if (ada_is_constrained_packed_array_type
10415 	  (desc_base_type (value_type (argvec[0]))))
10416         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10417       else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
10418                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10419         /* This is a packed array that has already been fixed, and
10420 	   therefore already coerced to a simple array.  Nothing further
10421 	   to do.  */
10422         ;
10423       else if (value_type (argvec[0])->code () == TYPE_CODE_REF)
10424 	{
10425 	  /* Make sure we dereference references so that all the code below
10426 	     feels like it's really handling the referenced value.  Wrapping
10427 	     types (for alignment) may be there, so make sure we strip them as
10428 	     well.  */
10429 	  argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10430 	}
10431       else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
10432 	       && VALUE_LVAL (argvec[0]) == lval_memory)
10433 	argvec[0] = value_addr (argvec[0]);
10434 
10435       type = ada_check_typedef (value_type (argvec[0]));
10436 
10437       /* Ada allows us to implicitly dereference arrays when subscripting
10438 	 them.  So, if this is an array typedef (encoding use for array
10439 	 access types encoded as fat pointers), strip it now.  */
10440       if (type->code () == TYPE_CODE_TYPEDEF)
10441 	type = ada_typedef_target_type (type);
10442 
10443       if (type->code () == TYPE_CODE_PTR)
10444         {
10445           switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
10446             {
10447             case TYPE_CODE_FUNC:
10448               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10449               break;
10450             case TYPE_CODE_ARRAY:
10451               break;
10452             case TYPE_CODE_STRUCT:
10453               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10454                 argvec[0] = ada_value_ind (argvec[0]);
10455               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10456               break;
10457             default:
10458               error (_("cannot subscript or call something of type `%s'"),
10459                      ada_type_name (value_type (argvec[0])));
10460               break;
10461             }
10462         }
10463 
10464       switch (type->code ())
10465         {
10466         case TYPE_CODE_FUNC:
10467           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10468 	    {
10469 	      if (TYPE_TARGET_TYPE (type) == NULL)
10470 		error_call_unknown_return_type (NULL);
10471 	      return allocate_value (TYPE_TARGET_TYPE (type));
10472 	    }
10473 	  return call_function_by_hand (argvec[0], NULL,
10474 					gdb::make_array_view (argvec + 1,
10475 							      nargs));
10476 	case TYPE_CODE_INTERNAL_FUNCTION:
10477 	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
10478 	    /* We don't know anything about what the internal
10479 	       function might return, but we have to return
10480 	       something.  */
10481 	    return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10482 			       not_lval);
10483 	  else
10484 	    return call_internal_function (exp->gdbarch, exp->language_defn,
10485 					   argvec[0], nargs, argvec + 1);
10486 
10487         case TYPE_CODE_STRUCT:
10488           {
10489             int arity;
10490 
10491             arity = ada_array_arity (type);
10492             type = ada_array_element_type (type, nargs);
10493             if (type == NULL)
10494               error (_("cannot subscript or call a record"));
10495             if (arity != nargs)
10496               error (_("wrong number of subscripts; expecting %d"), arity);
10497             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10498               return value_zero (ada_aligned_type (type), lval_memory);
10499             return
10500               unwrap_value (ada_value_subscript
10501                             (argvec[0], nargs, argvec + 1));
10502           }
10503         case TYPE_CODE_ARRAY:
10504           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10505             {
10506               type = ada_array_element_type (type, nargs);
10507               if (type == NULL)
10508                 error (_("element type of array unknown"));
10509               else
10510                 return value_zero (ada_aligned_type (type), lval_memory);
10511             }
10512           return
10513             unwrap_value (ada_value_subscript
10514                           (ada_coerce_to_simple_array (argvec[0]),
10515                            nargs, argvec + 1));
10516         case TYPE_CODE_PTR:     /* Pointer to array */
10517           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10518             {
10519 	      type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10520               type = ada_array_element_type (type, nargs);
10521               if (type == NULL)
10522                 error (_("element type of array unknown"));
10523               else
10524                 return value_zero (ada_aligned_type (type), lval_memory);
10525             }
10526           return
10527             unwrap_value (ada_value_ptr_subscript (argvec[0],
10528 						   nargs, argvec + 1));
10529 
10530         default:
10531           error (_("Attempt to index or call something other than an "
10532 		   "array or function"));
10533         }
10534 
10535     case TERNOP_SLICE:
10536       {
10537 	struct value *array = evaluate_subexp (nullptr, exp, pos, noside);
10538 	struct value *low_bound_val
10539 	  = evaluate_subexp (nullptr, exp, pos, noside);
10540 	struct value *high_bound_val
10541 	  = evaluate_subexp (nullptr, exp, pos, noside);
10542 	LONGEST low_bound;
10543         LONGEST high_bound;
10544 
10545         low_bound_val = coerce_ref (low_bound_val);
10546         high_bound_val = coerce_ref (high_bound_val);
10547         low_bound = value_as_long (low_bound_val);
10548         high_bound = value_as_long (high_bound_val);
10549 
10550         if (noside == EVAL_SKIP)
10551           goto nosideret;
10552 
10553         /* If this is a reference to an aligner type, then remove all
10554            the aligners.  */
10555         if (value_type (array)->code () == TYPE_CODE_REF
10556             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10557           TYPE_TARGET_TYPE (value_type (array)) =
10558             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10559 
10560         if (ada_is_constrained_packed_array_type (value_type (array)))
10561           error (_("cannot slice a packed array"));
10562 
10563         /* If this is a reference to an array or an array lvalue,
10564            convert to a pointer.  */
10565         if (value_type (array)->code () == TYPE_CODE_REF
10566             || (value_type (array)->code () == TYPE_CODE_ARRAY
10567                 && VALUE_LVAL (array) == lval_memory))
10568           array = value_addr (array);
10569 
10570         if (noside == EVAL_AVOID_SIDE_EFFECTS
10571             && ada_is_array_descriptor_type (ada_check_typedef
10572                                              (value_type (array))))
10573           return empty_array (ada_type_of_array (array, 0), low_bound,
10574 			      high_bound);
10575 
10576         array = ada_coerce_to_simple_array_ptr (array);
10577 
10578         /* If we have more than one level of pointer indirection,
10579            dereference the value until we get only one level.  */
10580         while (value_type (array)->code () == TYPE_CODE_PTR
10581                && (TYPE_TARGET_TYPE (value_type (array))->code ()
10582                      == TYPE_CODE_PTR))
10583           array = value_ind (array);
10584 
10585         /* Make sure we really do have an array type before going further,
10586            to avoid a SEGV when trying to get the index type or the target
10587            type later down the road if the debug info generated by
10588            the compiler is incorrect or incomplete.  */
10589         if (!ada_is_simple_array_type (value_type (array)))
10590           error (_("cannot take slice of non-array"));
10591 
10592         if (ada_check_typedef (value_type (array))->code ()
10593             == TYPE_CODE_PTR)
10594           {
10595             struct type *type0 = ada_check_typedef (value_type (array));
10596 
10597             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10598               return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
10599             else
10600               {
10601                 struct type *arr_type0 =
10602                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10603 
10604                 return ada_value_slice_from_ptr (array, arr_type0,
10605                                                  longest_to_int (low_bound),
10606                                                  longest_to_int (high_bound));
10607               }
10608           }
10609         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10610           return array;
10611         else if (high_bound < low_bound)
10612           return empty_array (value_type (array), low_bound, high_bound);
10613         else
10614           return ada_value_slice (array, longest_to_int (low_bound),
10615 				  longest_to_int (high_bound));
10616       }
10617 
10618     case UNOP_IN_RANGE:
10619       (*pos) += 2;
10620       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10621       type = check_typedef (exp->elts[pc + 1].type);
10622 
10623       if (noside == EVAL_SKIP)
10624         goto nosideret;
10625 
10626       switch (type->code ())
10627         {
10628         default:
10629           lim_warning (_("Membership test incompletely implemented; "
10630 			 "always returns true"));
10631 	  type = language_bool_type (exp->language_defn, exp->gdbarch);
10632 	  return value_from_longest (type, (LONGEST) 1);
10633 
10634         case TYPE_CODE_RANGE:
10635 	  arg2 = value_from_longest (type,
10636 				     type->bounds ()->low.const_val ());
10637 	  arg3 = value_from_longest (type,
10638 				     type->bounds ()->high.const_val ());
10639 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10640 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10641 	  type = language_bool_type (exp->language_defn, exp->gdbarch);
10642 	  return
10643 	    value_from_longest (type,
10644                                 (value_less (arg1, arg3)
10645                                  || value_equal (arg1, arg3))
10646                                 && (value_less (arg2, arg1)
10647                                     || value_equal (arg2, arg1)));
10648         }
10649 
10650     case BINOP_IN_BOUNDS:
10651       (*pos) += 2;
10652       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10653       arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10654 
10655       if (noside == EVAL_SKIP)
10656         goto nosideret;
10657 
10658       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10659 	{
10660 	  type = language_bool_type (exp->language_defn, exp->gdbarch);
10661 	  return value_zero (type, not_lval);
10662 	}
10663 
10664       tem = longest_to_int (exp->elts[pc + 1].longconst);
10665 
10666       type = ada_index_type (value_type (arg2), tem, "range");
10667       if (!type)
10668 	type = value_type (arg1);
10669 
10670       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10671       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10672 
10673       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10674       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10675       type = language_bool_type (exp->language_defn, exp->gdbarch);
10676       return
10677         value_from_longest (type,
10678                             (value_less (arg1, arg3)
10679                              || value_equal (arg1, arg3))
10680                             && (value_less (arg2, arg1)
10681                                 || value_equal (arg2, arg1)));
10682 
10683     case TERNOP_IN_RANGE:
10684       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10685       arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10686       arg3 = evaluate_subexp (nullptr, exp, pos, noside);
10687 
10688       if (noside == EVAL_SKIP)
10689         goto nosideret;
10690 
10691       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10692       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10693       type = language_bool_type (exp->language_defn, exp->gdbarch);
10694       return
10695         value_from_longest (type,
10696                             (value_less (arg1, arg3)
10697                              || value_equal (arg1, arg3))
10698                             && (value_less (arg2, arg1)
10699                                 || value_equal (arg2, arg1)));
10700 
10701     case OP_ATR_FIRST:
10702     case OP_ATR_LAST:
10703     case OP_ATR_LENGTH:
10704       {
10705         struct type *type_arg;
10706 
10707         if (exp->elts[*pos].opcode == OP_TYPE)
10708           {
10709 	    evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10710 	    arg1 = NULL;
10711             type_arg = check_typedef (exp->elts[pc + 2].type);
10712           }
10713         else
10714           {
10715 	    arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10716 	    type_arg = NULL;
10717           }
10718 
10719         if (exp->elts[*pos].opcode != OP_LONG)
10720           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10721         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10722         *pos += 4;
10723 
10724         if (noside == EVAL_SKIP)
10725           goto nosideret;
10726 	else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10727 	  {
10728 	    if (type_arg == NULL)
10729 	      type_arg = value_type (arg1);
10730 
10731             if (ada_is_constrained_packed_array_type (type_arg))
10732 	      type_arg = decode_constrained_packed_array_type (type_arg);
10733 
10734 	    if (!discrete_type_p (type_arg))
10735 	      {
10736 		switch (op)
10737 		  {
10738 		  default:          /* Should never happen.  */
10739 		    error (_("unexpected attribute encountered"));
10740 		  case OP_ATR_FIRST:
10741 		  case OP_ATR_LAST:
10742 		    type_arg = ada_index_type (type_arg, tem,
10743 					       ada_attribute_name (op));
10744 		    break;
10745 		  case OP_ATR_LENGTH:
10746 		    type_arg = builtin_type (exp->gdbarch)->builtin_int;
10747 		    break;
10748 		  }
10749 	      }
10750 
10751 	    return value_zero (type_arg, not_lval);
10752 	  }
10753         else if (type_arg == NULL)
10754           {
10755             arg1 = ada_coerce_ref (arg1);
10756 
10757             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10758               arg1 = ada_coerce_to_simple_array (arg1);
10759 
10760             if (op == OP_ATR_LENGTH)
10761 	      type = builtin_type (exp->gdbarch)->builtin_int;
10762 	    else
10763 	      {
10764 		type = ada_index_type (value_type (arg1), tem,
10765 				       ada_attribute_name (op));
10766 		if (type == NULL)
10767 		  type = builtin_type (exp->gdbarch)->builtin_int;
10768 	      }
10769 
10770             switch (op)
10771               {
10772               default:          /* Should never happen.  */
10773                 error (_("unexpected attribute encountered"));
10774               case OP_ATR_FIRST:
10775                 return value_from_longest
10776 			(type, ada_array_bound (arg1, tem, 0));
10777               case OP_ATR_LAST:
10778                 return value_from_longest
10779 			(type, ada_array_bound (arg1, tem, 1));
10780               case OP_ATR_LENGTH:
10781                 return value_from_longest
10782 			(type, ada_array_length (arg1, tem));
10783               }
10784           }
10785         else if (discrete_type_p (type_arg))
10786           {
10787             struct type *range_type;
10788             const char *name = ada_type_name (type_arg);
10789 
10790             range_type = NULL;
10791             if (name != NULL && type_arg->code () != TYPE_CODE_ENUM)
10792               range_type = to_fixed_range_type (type_arg, NULL);
10793             if (range_type == NULL)
10794               range_type = type_arg;
10795             switch (op)
10796               {
10797               default:
10798                 error (_("unexpected attribute encountered"));
10799               case OP_ATR_FIRST:
10800 		return value_from_longest
10801 		  (range_type, ada_discrete_type_low_bound (range_type));
10802               case OP_ATR_LAST:
10803                 return value_from_longest
10804 		  (range_type, ada_discrete_type_high_bound (range_type));
10805               case OP_ATR_LENGTH:
10806                 error (_("the 'length attribute applies only to array types"));
10807               }
10808           }
10809         else if (type_arg->code () == TYPE_CODE_FLT)
10810           error (_("unimplemented type attribute"));
10811         else
10812           {
10813             LONGEST low, high;
10814 
10815             if (ada_is_constrained_packed_array_type (type_arg))
10816               type_arg = decode_constrained_packed_array_type (type_arg);
10817 
10818 	    if (op == OP_ATR_LENGTH)
10819 	      type = builtin_type (exp->gdbarch)->builtin_int;
10820 	    else
10821 	      {
10822 		type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10823 		if (type == NULL)
10824 		  type = builtin_type (exp->gdbarch)->builtin_int;
10825 	      }
10826 
10827             switch (op)
10828               {
10829               default:
10830                 error (_("unexpected attribute encountered"));
10831               case OP_ATR_FIRST:
10832                 low = ada_array_bound_from_type (type_arg, tem, 0);
10833                 return value_from_longest (type, low);
10834               case OP_ATR_LAST:
10835                 high = ada_array_bound_from_type (type_arg, tem, 1);
10836                 return value_from_longest (type, high);
10837               case OP_ATR_LENGTH:
10838                 low = ada_array_bound_from_type (type_arg, tem, 0);
10839                 high = ada_array_bound_from_type (type_arg, tem, 1);
10840                 return value_from_longest (type, high - low + 1);
10841               }
10842           }
10843       }
10844 
10845     case OP_ATR_TAG:
10846       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10847       if (noside == EVAL_SKIP)
10848         goto nosideret;
10849 
10850       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10851         return value_zero (ada_tag_type (arg1), not_lval);
10852 
10853       return ada_value_tag (arg1);
10854 
10855     case OP_ATR_MIN:
10856     case OP_ATR_MAX:
10857       evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10858       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10859       arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10860       if (noside == EVAL_SKIP)
10861         goto nosideret;
10862       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10863         return value_zero (value_type (arg1), not_lval);
10864       else
10865 	{
10866 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10867 	  return value_binop (arg1, arg2,
10868 			      op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10869 	}
10870 
10871     case OP_ATR_MODULUS:
10872       {
10873         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10874 
10875 	evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10876 	if (noside == EVAL_SKIP)
10877           goto nosideret;
10878 
10879         if (!ada_is_modular_type (type_arg))
10880           error (_("'modulus must be applied to modular type"));
10881 
10882         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10883                                    ada_modulus (type_arg));
10884       }
10885 
10886 
10887     case OP_ATR_POS:
10888       evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10889       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10890       if (noside == EVAL_SKIP)
10891         goto nosideret;
10892       type = builtin_type (exp->gdbarch)->builtin_int;
10893       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10894 	return value_zero (type, not_lval);
10895       else
10896 	return value_pos_atr (type, arg1);
10897 
10898     case OP_ATR_SIZE:
10899       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10900       type = value_type (arg1);
10901 
10902       /* If the argument is a reference, then dereference its type, since
10903          the user is really asking for the size of the actual object,
10904          not the size of the pointer.  */
10905       if (type->code () == TYPE_CODE_REF)
10906         type = TYPE_TARGET_TYPE (type);
10907 
10908       if (noside == EVAL_SKIP)
10909         goto nosideret;
10910       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10911         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10912       else
10913         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10914                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10915 
10916     case OP_ATR_VAL:
10917       evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10918       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10919       type = exp->elts[pc + 2].type;
10920       if (noside == EVAL_SKIP)
10921         goto nosideret;
10922       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10923         return value_zero (type, not_lval);
10924       else
10925         return value_val_atr (type, arg1);
10926 
10927     case BINOP_EXP:
10928       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10929       arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10930       if (noside == EVAL_SKIP)
10931         goto nosideret;
10932       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10933         return value_zero (value_type (arg1), not_lval);
10934       else
10935 	{
10936 	  /* For integer exponentiation operations,
10937 	     only promote the first argument.  */
10938 	  if (is_integral_type (value_type (arg2)))
10939 	    unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10940 	  else
10941 	    binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10942 
10943 	  return value_binop (arg1, arg2, op);
10944 	}
10945 
10946     case UNOP_PLUS:
10947       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10948       if (noside == EVAL_SKIP)
10949         goto nosideret;
10950       else
10951         return arg1;
10952 
10953     case UNOP_ABS:
10954       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10955       if (noside == EVAL_SKIP)
10956         goto nosideret;
10957       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10958       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10959         return value_neg (arg1);
10960       else
10961         return arg1;
10962 
10963     case UNOP_IND:
10964       preeval_pos = *pos;
10965       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10966       if (noside == EVAL_SKIP)
10967         goto nosideret;
10968       type = ada_check_typedef (value_type (arg1));
10969       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10970         {
10971           if (ada_is_array_descriptor_type (type))
10972             /* GDB allows dereferencing GNAT array descriptors.  */
10973             {
10974               struct type *arrType = ada_type_of_array (arg1, 0);
10975 
10976               if (arrType == NULL)
10977                 error (_("Attempt to dereference null array pointer."));
10978               return value_at_lazy (arrType, 0);
10979             }
10980           else if (type->code () == TYPE_CODE_PTR
10981                    || type->code () == TYPE_CODE_REF
10982                    /* In C you can dereference an array to get the 1st elt.  */
10983                    || type->code () == TYPE_CODE_ARRAY)
10984             {
10985             /* As mentioned in the OP_VAR_VALUE case, tagged types can
10986                only be determined by inspecting the object's tag.
10987                This means that we need to evaluate completely the
10988                expression in order to get its type.  */
10989 
10990 	      if ((type->code () == TYPE_CODE_REF
10991 		   || type->code () == TYPE_CODE_PTR)
10992 		  && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10993 		{
10994 		  arg1
10995 		    = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
10996 		  type = value_type (ada_value_ind (arg1));
10997 		}
10998 	      else
10999 		{
11000 		  type = to_static_fixed_type
11001 		    (ada_aligned_type
11002 		     (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11003 		}
11004 	      ada_ensure_varsize_limit (type);
11005               return value_zero (type, lval_memory);
11006             }
11007           else if (type->code () == TYPE_CODE_INT)
11008 	    {
11009 	      /* GDB allows dereferencing an int.  */
11010 	      if (expect_type == NULL)
11011 		return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11012 				   lval_memory);
11013 	      else
11014 		{
11015 		  expect_type =
11016 		    to_static_fixed_type (ada_aligned_type (expect_type));
11017 		  return value_zero (expect_type, lval_memory);
11018 		}
11019 	    }
11020           else
11021             error (_("Attempt to take contents of a non-pointer value."));
11022         }
11023       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
11024       type = ada_check_typedef (value_type (arg1));
11025 
11026       if (type->code () == TYPE_CODE_INT)
11027           /* GDB allows dereferencing an int.  If we were given
11028              the expect_type, then use that as the target type.
11029              Otherwise, assume that the target type is an int.  */
11030         {
11031           if (expect_type != NULL)
11032 	    return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11033 					      arg1));
11034 	  else
11035 	    return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11036 				  (CORE_ADDR) value_as_address (arg1));
11037         }
11038 
11039       if (ada_is_array_descriptor_type (type))
11040         /* GDB allows dereferencing GNAT array descriptors.  */
11041         return ada_coerce_to_simple_array (arg1);
11042       else
11043         return ada_value_ind (arg1);
11044 
11045     case STRUCTOP_STRUCT:
11046       tem = longest_to_int (exp->elts[pc + 1].longconst);
11047       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
11048       preeval_pos = *pos;
11049       arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11050       if (noside == EVAL_SKIP)
11051         goto nosideret;
11052       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11053         {
11054           struct type *type1 = value_type (arg1);
11055 
11056           if (ada_is_tagged_type (type1, 1))
11057             {
11058               type = ada_lookup_struct_elt_type (type1,
11059                                                  &exp->elts[pc + 2].string,
11060                                                  1, 1);
11061 
11062 	      /* If the field is not found, check if it exists in the
11063 		 extension of this object's type. This means that we
11064 		 need to evaluate completely the expression.  */
11065 
11066               if (type == NULL)
11067 		{
11068 		  arg1
11069 		    = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
11070 		  arg1 = ada_value_struct_elt (arg1,
11071 					       &exp->elts[pc + 2].string,
11072 					       0);
11073 		  arg1 = unwrap_value (arg1);
11074 		  type = value_type (ada_to_fixed_value (arg1));
11075 		}
11076             }
11077           else
11078             type =
11079               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11080                                           0);
11081 
11082           return value_zero (ada_aligned_type (type), lval_memory);
11083         }
11084       else
11085 	{
11086 	  arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11087 	  arg1 = unwrap_value (arg1);
11088 	  return ada_to_fixed_value (arg1);
11089 	}
11090 
11091     case OP_TYPE:
11092       /* The value is not supposed to be used.  This is here to make it
11093          easier to accommodate expressions that contain types.  */
11094       (*pos) += 2;
11095       if (noside == EVAL_SKIP)
11096         goto nosideret;
11097       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11098         return allocate_value (exp->elts[pc + 1].type);
11099       else
11100         error (_("Attempt to use a type name as an expression"));
11101 
11102     case OP_AGGREGATE:
11103     case OP_CHOICES:
11104     case OP_OTHERS:
11105     case OP_DISCRETE_RANGE:
11106     case OP_POSITIONAL:
11107     case OP_NAME:
11108       if (noside == EVAL_NORMAL)
11109 	switch (op)
11110 	  {
11111 	  case OP_NAME:
11112 	    error (_("Undefined name, ambiguous name, or renaming used in "
11113 		     "component association: %s."), &exp->elts[pc+2].string);
11114 	  case OP_AGGREGATE:
11115 	    error (_("Aggregates only allowed on the right of an assignment"));
11116 	  default:
11117 	    internal_error (__FILE__, __LINE__,
11118 			    _("aggregate apparently mangled"));
11119 	  }
11120 
11121       ada_forward_operator_length (exp, pc, &oplen, &nargs);
11122       *pos += oplen - 1;
11123       for (tem = 0; tem < nargs; tem += 1)
11124 	ada_evaluate_subexp (NULL, exp, pos, noside);
11125       goto nosideret;
11126     }
11127 
11128 nosideret:
11129   return eval_skip_value (exp);
11130 }
11131 
11132 
11133                                 /* Fixed point */
11134 
11135 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
11136    type name that encodes the 'small and 'delta information.
11137    Otherwise, return NULL.  */
11138 
11139 static const char *
11140 gnat_encoded_fixed_type_info (struct type *type)
11141 {
11142   const char *name = ada_type_name (type);
11143   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : type->code ();
11144 
11145   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11146     {
11147       const char *tail = strstr (name, "___XF_");
11148 
11149       if (tail == NULL)
11150         return NULL;
11151       else
11152         return tail + 5;
11153     }
11154   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11155     return gnat_encoded_fixed_type_info (TYPE_TARGET_TYPE (type));
11156   else
11157     return NULL;
11158 }
11159 
11160 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
11161 
11162 int
11163 ada_is_gnat_encoded_fixed_point_type (struct type *type)
11164 {
11165   return gnat_encoded_fixed_type_info (type) != NULL;
11166 }
11167 
11168 /* Return non-zero iff TYPE represents a System.Address type.  */
11169 
11170 int
11171 ada_is_system_address_type (struct type *type)
11172 {
11173   return (type->name () && strcmp (type->name (), "system__address") == 0);
11174 }
11175 
11176 /* Assuming that TYPE is the representation of an Ada fixed-point
11177    type, return the target floating-point type to be used to represent
11178    of this type during internal computation.  */
11179 
11180 static struct type *
11181 ada_scaling_type (struct type *type)
11182 {
11183   return builtin_type (get_type_arch (type))->builtin_long_double;
11184 }
11185 
11186 /* Assuming that TYPE is the representation of an Ada fixed-point
11187    type, return its delta, or NULL if the type is malformed and the
11188    delta cannot be determined.  */
11189 
11190 struct value *
11191 gnat_encoded_fixed_point_delta (struct type *type)
11192 {
11193   const char *encoding = gnat_encoded_fixed_type_info (type);
11194   struct type *scale_type = ada_scaling_type (type);
11195 
11196   long long num, den;
11197 
11198   if (sscanf (encoding, "_%lld_%lld", &num, &den) < 2)
11199     return nullptr;
11200   else
11201     return value_binop (value_from_longest (scale_type, num),
11202 			value_from_longest (scale_type, den), BINOP_DIV);
11203 }
11204 
11205 /* Assuming that ada_is_gnat_encoded_fixed_point_type (TYPE), return
11206    the scaling factor ('SMALL value) associated with the type.  */
11207 
11208 struct value *
11209 ada_scaling_factor (struct type *type)
11210 {
11211   const char *encoding = gnat_encoded_fixed_type_info (type);
11212   struct type *scale_type = ada_scaling_type (type);
11213 
11214   long long num0, den0, num1, den1;
11215   int n;
11216 
11217   n = sscanf (encoding, "_%lld_%lld_%lld_%lld",
11218 	      &num0, &den0, &num1, &den1);
11219 
11220   if (n < 2)
11221     return value_from_longest (scale_type, 1);
11222   else if (n == 4)
11223     return value_binop (value_from_longest (scale_type, num1),
11224 			value_from_longest (scale_type, den1), BINOP_DIV);
11225   else
11226     return value_binop (value_from_longest (scale_type, num0),
11227 			value_from_longest (scale_type, den0), BINOP_DIV);
11228 }
11229 
11230 
11231 
11232                                 /* Range types */
11233 
11234 /* Scan STR beginning at position K for a discriminant name, and
11235    return the value of that discriminant field of DVAL in *PX.  If
11236    PNEW_K is not null, put the position of the character beyond the
11237    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11238    not alter *PX and *PNEW_K if unsuccessful.  */
11239 
11240 static int
11241 scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
11242                     int *pnew_k)
11243 {
11244   static char *bound_buffer = NULL;
11245   static size_t bound_buffer_len = 0;
11246   const char *pstart, *pend, *bound;
11247   struct value *bound_val;
11248 
11249   if (dval == NULL || str == NULL || str[k] == '\0')
11250     return 0;
11251 
11252   pstart = str + k;
11253   pend = strstr (pstart, "__");
11254   if (pend == NULL)
11255     {
11256       bound = pstart;
11257       k += strlen (bound);
11258     }
11259   else
11260     {
11261       int len = pend - pstart;
11262 
11263       /* Strip __ and beyond.  */
11264       GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
11265       strncpy (bound_buffer, pstart, len);
11266       bound_buffer[len] = '\0';
11267 
11268       bound = bound_buffer;
11269       k = pend - str;
11270     }
11271 
11272   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11273   if (bound_val == NULL)
11274     return 0;
11275 
11276   *px = value_as_long (bound_val);
11277   if (pnew_k != NULL)
11278     *pnew_k = k;
11279   return 1;
11280 }
11281 
11282 /* Value of variable named NAME in the current environment.  If
11283    no such variable found, then if ERR_MSG is null, returns 0, and
11284    otherwise causes an error with message ERR_MSG.  */
11285 
11286 static struct value *
11287 get_var_value (const char *name, const char *err_msg)
11288 {
11289   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
11290 
11291   std::vector<struct block_symbol> syms;
11292   int nsyms = ada_lookup_symbol_list_worker (lookup_name,
11293 					     get_selected_block (0),
11294 					     VAR_DOMAIN, &syms, 1);
11295 
11296   if (nsyms != 1)
11297     {
11298       if (err_msg == NULL)
11299         return 0;
11300       else
11301         error (("%s"), err_msg);
11302     }
11303 
11304   return value_of_variable (syms[0].symbol, syms[0].block);
11305 }
11306 
11307 /* Value of integer variable named NAME in the current environment.
11308    If no such variable is found, returns false.  Otherwise, sets VALUE
11309    to the variable's value and returns true.  */
11310 
11311 bool
11312 get_int_var_value (const char *name, LONGEST &value)
11313 {
11314   struct value *var_val = get_var_value (name, 0);
11315 
11316   if (var_val == 0)
11317     return false;
11318 
11319   value = value_as_long (var_val);
11320   return true;
11321 }
11322 
11323 
11324 /* Return a range type whose base type is that of the range type named
11325    NAME in the current environment, and whose bounds are calculated
11326    from NAME according to the GNAT range encoding conventions.
11327    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11328    corresponding range type from debug information; fall back to using it
11329    if symbol lookup fails.  If a new type must be created, allocate it
11330    like ORIG_TYPE was.  The bounds information, in general, is encoded
11331    in NAME, the base type given in the named range type.  */
11332 
11333 static struct type *
11334 to_fixed_range_type (struct type *raw_type, struct value *dval)
11335 {
11336   const char *name;
11337   struct type *base_type;
11338   const char *subtype_info;
11339 
11340   gdb_assert (raw_type != NULL);
11341   gdb_assert (raw_type->name () != NULL);
11342 
11343   if (raw_type->code () == TYPE_CODE_RANGE)
11344     base_type = TYPE_TARGET_TYPE (raw_type);
11345   else
11346     base_type = raw_type;
11347 
11348   name = raw_type->name ();
11349   subtype_info = strstr (name, "___XD");
11350   if (subtype_info == NULL)
11351     {
11352       LONGEST L = ada_discrete_type_low_bound (raw_type);
11353       LONGEST U = ada_discrete_type_high_bound (raw_type);
11354 
11355       if (L < INT_MIN || U > INT_MAX)
11356 	return raw_type;
11357       else
11358 	return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11359 					 L, U);
11360     }
11361   else
11362     {
11363       static char *name_buf = NULL;
11364       static size_t name_len = 0;
11365       int prefix_len = subtype_info - name;
11366       LONGEST L, U;
11367       struct type *type;
11368       const char *bounds_str;
11369       int n;
11370 
11371       GROW_VECT (name_buf, name_len, prefix_len + 5);
11372       strncpy (name_buf, name, prefix_len);
11373       name_buf[prefix_len] = '\0';
11374 
11375       subtype_info += 5;
11376       bounds_str = strchr (subtype_info, '_');
11377       n = 1;
11378 
11379       if (*subtype_info == 'L')
11380         {
11381           if (!ada_scan_number (bounds_str, n, &L, &n)
11382               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11383             return raw_type;
11384           if (bounds_str[n] == '_')
11385             n += 2;
11386           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11387             n += 1;
11388           subtype_info += 1;
11389         }
11390       else
11391         {
11392           strcpy (name_buf + prefix_len, "___L");
11393           if (!get_int_var_value (name_buf, L))
11394             {
11395               lim_warning (_("Unknown lower bound, using 1."));
11396               L = 1;
11397             }
11398         }
11399 
11400       if (*subtype_info == 'U')
11401         {
11402           if (!ada_scan_number (bounds_str, n, &U, &n)
11403               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11404             return raw_type;
11405         }
11406       else
11407         {
11408           strcpy (name_buf + prefix_len, "___U");
11409           if (!get_int_var_value (name_buf, U))
11410             {
11411               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11412               U = L;
11413             }
11414         }
11415 
11416       type = create_static_range_type (alloc_type_copy (raw_type),
11417 				       base_type, L, U);
11418       /* create_static_range_type alters the resulting type's length
11419          to match the size of the base_type, which is not what we want.
11420          Set it back to the original range type's length.  */
11421       TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
11422       type->set_name (name);
11423       return type;
11424     }
11425 }
11426 
11427 /* True iff NAME is the name of a range type.  */
11428 
11429 int
11430 ada_is_range_type_name (const char *name)
11431 {
11432   return (name != NULL && strstr (name, "___XD"));
11433 }
11434 
11435 
11436                                 /* Modular types */
11437 
11438 /* True iff TYPE is an Ada modular type.  */
11439 
11440 int
11441 ada_is_modular_type (struct type *type)
11442 {
11443   struct type *subranged_type = get_base_type (type);
11444 
11445   return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
11446           && subranged_type->code () == TYPE_CODE_INT
11447           && TYPE_UNSIGNED (subranged_type));
11448 }
11449 
11450 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11451 
11452 ULONGEST
11453 ada_modulus (struct type *type)
11454 {
11455   const dynamic_prop &high = type->bounds ()->high;
11456 
11457   if (high.kind () == PROP_CONST)
11458     return (ULONGEST) high.const_val () + 1;
11459 
11460   /* If TYPE is unresolved, the high bound might be a location list.  Return
11461      0, for lack of a better value to return.  */
11462   return 0;
11463 }
11464 
11465 
11466 /* Ada exception catchpoint support:
11467    ---------------------------------
11468 
11469    We support 3 kinds of exception catchpoints:
11470      . catchpoints on Ada exceptions
11471      . catchpoints on unhandled Ada exceptions
11472      . catchpoints on failed assertions
11473 
11474    Exceptions raised during failed assertions, or unhandled exceptions
11475    could perfectly be caught with the general catchpoint on Ada exceptions.
11476    However, we can easily differentiate these two special cases, and having
11477    the option to distinguish these two cases from the rest can be useful
11478    to zero-in on certain situations.
11479 
11480    Exception catchpoints are a specialized form of breakpoint,
11481    since they rely on inserting breakpoints inside known routines
11482    of the GNAT runtime.  The implementation therefore uses a standard
11483    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11484    of breakpoint_ops.
11485 
11486    Support in the runtime for exception catchpoints have been changed
11487    a few times already, and these changes affect the implementation
11488    of these catchpoints.  In order to be able to support several
11489    variants of the runtime, we use a sniffer that will determine
11490    the runtime variant used by the program being debugged.  */
11491 
11492 /* Ada's standard exceptions.
11493 
11494    The Ada 83 standard also defined Numeric_Error.  But there so many
11495    situations where it was unclear from the Ada 83 Reference Manual
11496    (RM) whether Constraint_Error or Numeric_Error should be raised,
11497    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11498    Interpretation saying that anytime the RM says that Numeric_Error
11499    should be raised, the implementation may raise Constraint_Error.
11500    Ada 95 went one step further and pretty much removed Numeric_Error
11501    from the list of standard exceptions (it made it a renaming of
11502    Constraint_Error, to help preserve compatibility when compiling
11503    an Ada83 compiler). As such, we do not include Numeric_Error from
11504    this list of standard exceptions.  */
11505 
11506 static const char *standard_exc[] = {
11507   "constraint_error",
11508   "program_error",
11509   "storage_error",
11510   "tasking_error"
11511 };
11512 
11513 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11514 
11515 /* A structure that describes how to support exception catchpoints
11516    for a given executable.  */
11517 
11518 struct exception_support_info
11519 {
11520    /* The name of the symbol to break on in order to insert
11521       a catchpoint on exceptions.  */
11522    const char *catch_exception_sym;
11523 
11524    /* The name of the symbol to break on in order to insert
11525       a catchpoint on unhandled exceptions.  */
11526    const char *catch_exception_unhandled_sym;
11527 
11528    /* The name of the symbol to break on in order to insert
11529       a catchpoint on failed assertions.  */
11530    const char *catch_assert_sym;
11531 
11532    /* The name of the symbol to break on in order to insert
11533       a catchpoint on exception handling.  */
11534    const char *catch_handlers_sym;
11535 
11536    /* Assuming that the inferior just triggered an unhandled exception
11537       catchpoint, this function is responsible for returning the address
11538       in inferior memory where the name of that exception is stored.
11539       Return zero if the address could not be computed.  */
11540    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11541 };
11542 
11543 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11544 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11545 
11546 /* The following exception support info structure describes how to
11547    implement exception catchpoints with the latest version of the
11548    Ada runtime (as of 2019-08-??).  */
11549 
11550 static const struct exception_support_info default_exception_support_info =
11551 {
11552   "__gnat_debug_raise_exception", /* catch_exception_sym */
11553   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11554   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11555   "__gnat_begin_handler_v1", /* catch_handlers_sym */
11556   ada_unhandled_exception_name_addr
11557 };
11558 
11559 /* The following exception support info structure describes how to
11560    implement exception catchpoints with an earlier version of the
11561    Ada runtime (as of 2007-03-06) using v0 of the EH ABI.  */
11562 
11563 static const struct exception_support_info exception_support_info_v0 =
11564 {
11565   "__gnat_debug_raise_exception", /* catch_exception_sym */
11566   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11567   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11568   "__gnat_begin_handler", /* catch_handlers_sym */
11569   ada_unhandled_exception_name_addr
11570 };
11571 
11572 /* The following exception support info structure describes how to
11573    implement exception catchpoints with a slightly older version
11574    of the Ada runtime.  */
11575 
11576 static const struct exception_support_info exception_support_info_fallback =
11577 {
11578   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11579   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11580   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11581   "__gnat_begin_handler", /* catch_handlers_sym */
11582   ada_unhandled_exception_name_addr_from_raise
11583 };
11584 
11585 /* Return nonzero if we can detect the exception support routines
11586    described in EINFO.
11587 
11588    This function errors out if an abnormal situation is detected
11589    (for instance, if we find the exception support routines, but
11590    that support is found to be incomplete).  */
11591 
11592 static int
11593 ada_has_this_exception_support (const struct exception_support_info *einfo)
11594 {
11595   struct symbol *sym;
11596 
11597   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11598      that should be compiled with debugging information.  As a result, we
11599      expect to find that symbol in the symtabs.  */
11600 
11601   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11602   if (sym == NULL)
11603     {
11604       /* Perhaps we did not find our symbol because the Ada runtime was
11605 	 compiled without debugging info, or simply stripped of it.
11606 	 It happens on some GNU/Linux distributions for instance, where
11607 	 users have to install a separate debug package in order to get
11608 	 the runtime's debugging info.  In that situation, let the user
11609 	 know why we cannot insert an Ada exception catchpoint.
11610 
11611 	 Note: Just for the purpose of inserting our Ada exception
11612 	 catchpoint, we could rely purely on the associated minimal symbol.
11613 	 But we would be operating in degraded mode anyway, since we are
11614 	 still lacking the debugging info needed later on to extract
11615 	 the name of the exception being raised (this name is printed in
11616 	 the catchpoint message, and is also used when trying to catch
11617 	 a specific exception).  We do not handle this case for now.  */
11618       struct bound_minimal_symbol msym
11619 	= lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11620 
11621       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11622 	error (_("Your Ada runtime appears to be missing some debugging "
11623 		 "information.\nCannot insert Ada exception catchpoint "
11624 		 "in this configuration."));
11625 
11626       return 0;
11627     }
11628 
11629   /* Make sure that the symbol we found corresponds to a function.  */
11630 
11631   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11632     {
11633       error (_("Symbol \"%s\" is not a function (class = %d)"),
11634 	     sym->linkage_name (), SYMBOL_CLASS (sym));
11635       return 0;
11636     }
11637 
11638   sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
11639   if (sym == NULL)
11640     {
11641       struct bound_minimal_symbol msym
11642 	= lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
11643 
11644       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11645 	error (_("Your Ada runtime appears to be missing some debugging "
11646 		 "information.\nCannot insert Ada exception catchpoint "
11647 		 "in this configuration."));
11648 
11649       return 0;
11650     }
11651 
11652   /* Make sure that the symbol we found corresponds to a function.  */
11653 
11654   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11655     {
11656       error (_("Symbol \"%s\" is not a function (class = %d)"),
11657 	     sym->linkage_name (), SYMBOL_CLASS (sym));
11658       return 0;
11659     }
11660 
11661   return 1;
11662 }
11663 
11664 /* Inspect the Ada runtime and determine which exception info structure
11665    should be used to provide support for exception catchpoints.
11666 
11667    This function will always set the per-inferior exception_info,
11668    or raise an error.  */
11669 
11670 static void
11671 ada_exception_support_info_sniffer (void)
11672 {
11673   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11674 
11675   /* If the exception info is already known, then no need to recompute it.  */
11676   if (data->exception_info != NULL)
11677     return;
11678 
11679   /* Check the latest (default) exception support info.  */
11680   if (ada_has_this_exception_support (&default_exception_support_info))
11681     {
11682       data->exception_info = &default_exception_support_info;
11683       return;
11684     }
11685 
11686   /* Try the v0 exception suport info.  */
11687   if (ada_has_this_exception_support (&exception_support_info_v0))
11688     {
11689       data->exception_info = &exception_support_info_v0;
11690       return;
11691     }
11692 
11693   /* Try our fallback exception suport info.  */
11694   if (ada_has_this_exception_support (&exception_support_info_fallback))
11695     {
11696       data->exception_info = &exception_support_info_fallback;
11697       return;
11698     }
11699 
11700   /* Sometimes, it is normal for us to not be able to find the routine
11701      we are looking for.  This happens when the program is linked with
11702      the shared version of the GNAT runtime, and the program has not been
11703      started yet.  Inform the user of these two possible causes if
11704      applicable.  */
11705 
11706   if (ada_update_initial_language (language_unknown) != language_ada)
11707     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11708 
11709   /* If the symbol does not exist, then check that the program is
11710      already started, to make sure that shared libraries have been
11711      loaded.  If it is not started, this may mean that the symbol is
11712      in a shared library.  */
11713 
11714   if (inferior_ptid.pid () == 0)
11715     error (_("Unable to insert catchpoint. Try to start the program first."));
11716 
11717   /* At this point, we know that we are debugging an Ada program and
11718      that the inferior has been started, but we still are not able to
11719      find the run-time symbols.  That can mean that we are in
11720      configurable run time mode, or that a-except as been optimized
11721      out by the linker...  In any case, at this point it is not worth
11722      supporting this feature.  */
11723 
11724   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11725 }
11726 
11727 /* True iff FRAME is very likely to be that of a function that is
11728    part of the runtime system.  This is all very heuristic, but is
11729    intended to be used as advice as to what frames are uninteresting
11730    to most users.  */
11731 
11732 static int
11733 is_known_support_routine (struct frame_info *frame)
11734 {
11735   enum language func_lang;
11736   int i;
11737   const char *fullname;
11738 
11739   /* If this code does not have any debugging information (no symtab),
11740      This cannot be any user code.  */
11741 
11742   symtab_and_line sal = find_frame_sal (frame);
11743   if (sal.symtab == NULL)
11744     return 1;
11745 
11746   /* If there is a symtab, but the associated source file cannot be
11747      located, then assume this is not user code:  Selecting a frame
11748      for which we cannot display the code would not be very helpful
11749      for the user.  This should also take care of case such as VxWorks
11750      where the kernel has some debugging info provided for a few units.  */
11751 
11752   fullname = symtab_to_fullname (sal.symtab);
11753   if (access (fullname, R_OK) != 0)
11754     return 1;
11755 
11756   /* Check the unit filename against the Ada runtime file naming.
11757      We also check the name of the objfile against the name of some
11758      known system libraries that sometimes come with debugging info
11759      too.  */
11760 
11761   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11762     {
11763       re_comp (known_runtime_file_name_patterns[i]);
11764       if (re_exec (lbasename (sal.symtab->filename)))
11765         return 1;
11766       if (SYMTAB_OBJFILE (sal.symtab) != NULL
11767           && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11768         return 1;
11769     }
11770 
11771   /* Check whether the function is a GNAT-generated entity.  */
11772 
11773   gdb::unique_xmalloc_ptr<char> func_name
11774     = find_frame_funname (frame, &func_lang, NULL);
11775   if (func_name == NULL)
11776     return 1;
11777 
11778   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11779     {
11780       re_comp (known_auxiliary_function_name_patterns[i]);
11781       if (re_exec (func_name.get ()))
11782 	return 1;
11783     }
11784 
11785   return 0;
11786 }
11787 
11788 /* Find the first frame that contains debugging information and that is not
11789    part of the Ada run-time, starting from FI and moving upward.  */
11790 
11791 void
11792 ada_find_printable_frame (struct frame_info *fi)
11793 {
11794   for (; fi != NULL; fi = get_prev_frame (fi))
11795     {
11796       if (!is_known_support_routine (fi))
11797         {
11798           select_frame (fi);
11799           break;
11800         }
11801     }
11802 
11803 }
11804 
11805 /* Assuming that the inferior just triggered an unhandled exception
11806    catchpoint, return the address in inferior memory where the name
11807    of the exception is stored.
11808 
11809    Return zero if the address could not be computed.  */
11810 
11811 static CORE_ADDR
11812 ada_unhandled_exception_name_addr (void)
11813 {
11814   return parse_and_eval_address ("e.full_name");
11815 }
11816 
11817 /* Same as ada_unhandled_exception_name_addr, except that this function
11818    should be used when the inferior uses an older version of the runtime,
11819    where the exception name needs to be extracted from a specific frame
11820    several frames up in the callstack.  */
11821 
11822 static CORE_ADDR
11823 ada_unhandled_exception_name_addr_from_raise (void)
11824 {
11825   int frame_level;
11826   struct frame_info *fi;
11827   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11828 
11829   /* To determine the name of this exception, we need to select
11830      the frame corresponding to RAISE_SYM_NAME.  This frame is
11831      at least 3 levels up, so we simply skip the first 3 frames
11832      without checking the name of their associated function.  */
11833   fi = get_current_frame ();
11834   for (frame_level = 0; frame_level < 3; frame_level += 1)
11835     if (fi != NULL)
11836       fi = get_prev_frame (fi);
11837 
11838   while (fi != NULL)
11839     {
11840       enum language func_lang;
11841 
11842       gdb::unique_xmalloc_ptr<char> func_name
11843 	= find_frame_funname (fi, &func_lang, NULL);
11844       if (func_name != NULL)
11845 	{
11846           if (strcmp (func_name.get (),
11847 		      data->exception_info->catch_exception_sym) == 0)
11848 	    break; /* We found the frame we were looking for...  */
11849 	}
11850       fi = get_prev_frame (fi);
11851     }
11852 
11853   if (fi == NULL)
11854     return 0;
11855 
11856   select_frame (fi);
11857   return parse_and_eval_address ("id.full_name");
11858 }
11859 
11860 /* Assuming the inferior just triggered an Ada exception catchpoint
11861    (of any type), return the address in inferior memory where the name
11862    of the exception is stored, if applicable.
11863 
11864    Assumes the selected frame is the current frame.
11865 
11866    Return zero if the address could not be computed, or if not relevant.  */
11867 
11868 static CORE_ADDR
11869 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11870                            struct breakpoint *b)
11871 {
11872   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11873 
11874   switch (ex)
11875     {
11876       case ada_catch_exception:
11877         return (parse_and_eval_address ("e.full_name"));
11878         break;
11879 
11880       case ada_catch_exception_unhandled:
11881         return data->exception_info->unhandled_exception_name_addr ();
11882         break;
11883 
11884       case ada_catch_handlers:
11885         return 0;  /* The runtimes does not provide access to the exception
11886 		      name.  */
11887         break;
11888 
11889       case ada_catch_assert:
11890         return 0;  /* Exception name is not relevant in this case.  */
11891         break;
11892 
11893       default:
11894         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11895         break;
11896     }
11897 
11898   return 0; /* Should never be reached.  */
11899 }
11900 
11901 /* Assuming the inferior is stopped at an exception catchpoint,
11902    return the message which was associated to the exception, if
11903    available.  Return NULL if the message could not be retrieved.
11904 
11905    Note: The exception message can be associated to an exception
11906    either through the use of the Raise_Exception function, or
11907    more simply (Ada 2005 and later), via:
11908 
11909        raise Exception_Name with "exception message";
11910 
11911    */
11912 
11913 static gdb::unique_xmalloc_ptr<char>
11914 ada_exception_message_1 (void)
11915 {
11916   struct value *e_msg_val;
11917   int e_msg_len;
11918 
11919   /* For runtimes that support this feature, the exception message
11920      is passed as an unbounded string argument called "message".  */
11921   e_msg_val = parse_and_eval ("message");
11922   if (e_msg_val == NULL)
11923     return NULL; /* Exception message not supported.  */
11924 
11925   e_msg_val = ada_coerce_to_simple_array (e_msg_val);
11926   gdb_assert (e_msg_val != NULL);
11927   e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
11928 
11929   /* If the message string is empty, then treat it as if there was
11930      no exception message.  */
11931   if (e_msg_len <= 0)
11932     return NULL;
11933 
11934   gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
11935   read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (),
11936 	       e_msg_len);
11937   e_msg.get ()[e_msg_len] = '\0';
11938 
11939   return e_msg;
11940 }
11941 
11942 /* Same as ada_exception_message_1, except that all exceptions are
11943    contained here (returning NULL instead).  */
11944 
11945 static gdb::unique_xmalloc_ptr<char>
11946 ada_exception_message (void)
11947 {
11948   gdb::unique_xmalloc_ptr<char> e_msg;
11949 
11950   try
11951     {
11952       e_msg = ada_exception_message_1 ();
11953     }
11954   catch (const gdb_exception_error &e)
11955     {
11956       e_msg.reset (nullptr);
11957     }
11958 
11959   return e_msg;
11960 }
11961 
11962 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11963    any error that ada_exception_name_addr_1 might cause to be thrown.
11964    When an error is intercepted, a warning with the error message is printed,
11965    and zero is returned.  */
11966 
11967 static CORE_ADDR
11968 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11969                          struct breakpoint *b)
11970 {
11971   CORE_ADDR result = 0;
11972 
11973   try
11974     {
11975       result = ada_exception_name_addr_1 (ex, b);
11976     }
11977 
11978   catch (const gdb_exception_error &e)
11979     {
11980       warning (_("failed to get exception name: %s"), e.what ());
11981       return 0;
11982     }
11983 
11984   return result;
11985 }
11986 
11987 static std::string ada_exception_catchpoint_cond_string
11988   (const char *excep_string,
11989    enum ada_exception_catchpoint_kind ex);
11990 
11991 /* Ada catchpoints.
11992 
11993    In the case of catchpoints on Ada exceptions, the catchpoint will
11994    stop the target on every exception the program throws.  When a user
11995    specifies the name of a specific exception, we translate this
11996    request into a condition expression (in text form), and then parse
11997    it into an expression stored in each of the catchpoint's locations.
11998    We then use this condition to check whether the exception that was
11999    raised is the one the user is interested in.  If not, then the
12000    target is resumed again.  We store the name of the requested
12001    exception, in order to be able to re-set the condition expression
12002    when symbols change.  */
12003 
12004 /* An instance of this type is used to represent an Ada catchpoint
12005    breakpoint location.  */
12006 
12007 class ada_catchpoint_location : public bp_location
12008 {
12009 public:
12010   ada_catchpoint_location (breakpoint *owner)
12011     : bp_location (owner, bp_loc_software_breakpoint)
12012   {}
12013 
12014   /* The condition that checks whether the exception that was raised
12015      is the specific exception the user specified on catchpoint
12016      creation.  */
12017   expression_up excep_cond_expr;
12018 };
12019 
12020 /* An instance of this type is used to represent an Ada catchpoint.  */
12021 
12022 struct ada_catchpoint : public breakpoint
12023 {
12024   explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
12025     : m_kind (kind)
12026   {
12027   }
12028 
12029   /* The name of the specific exception the user specified.  */
12030   std::string excep_string;
12031 
12032   /* What kind of catchpoint this is.  */
12033   enum ada_exception_catchpoint_kind m_kind;
12034 };
12035 
12036 /* Parse the exception condition string in the context of each of the
12037    catchpoint's locations, and store them for later evaluation.  */
12038 
12039 static void
12040 create_excep_cond_exprs (struct ada_catchpoint *c,
12041                          enum ada_exception_catchpoint_kind ex)
12042 {
12043   struct bp_location *bl;
12044 
12045   /* Nothing to do if there's no specific exception to catch.  */
12046   if (c->excep_string.empty ())
12047     return;
12048 
12049   /* Same if there are no locations... */
12050   if (c->loc == NULL)
12051     return;
12052 
12053   /* Compute the condition expression in text form, from the specific
12054      expection we want to catch.  */
12055   std::string cond_string
12056     = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
12057 
12058   /* Iterate over all the catchpoint's locations, and parse an
12059      expression for each.  */
12060   for (bl = c->loc; bl != NULL; bl = bl->next)
12061     {
12062       struct ada_catchpoint_location *ada_loc
12063 	= (struct ada_catchpoint_location *) bl;
12064       expression_up exp;
12065 
12066       if (!bl->shlib_disabled)
12067 	{
12068 	  const char *s;
12069 
12070 	  s = cond_string.c_str ();
12071 	  try
12072 	    {
12073 	      exp = parse_exp_1 (&s, bl->address,
12074 				 block_for_pc (bl->address),
12075 				 0);
12076 	    }
12077 	  catch (const gdb_exception_error &e)
12078 	    {
12079 	      warning (_("failed to reevaluate internal exception condition "
12080 			 "for catchpoint %d: %s"),
12081 		       c->number, e.what ());
12082 	    }
12083 	}
12084 
12085       ada_loc->excep_cond_expr = std::move (exp);
12086     }
12087 }
12088 
12089 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12090    structure for all exception catchpoint kinds.  */
12091 
12092 static struct bp_location *
12093 allocate_location_exception (struct breakpoint *self)
12094 {
12095   return new ada_catchpoint_location (self);
12096 }
12097 
12098 /* Implement the RE_SET method in the breakpoint_ops structure for all
12099    exception catchpoint kinds.  */
12100 
12101 static void
12102 re_set_exception (struct breakpoint *b)
12103 {
12104   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12105 
12106   /* Call the base class's method.  This updates the catchpoint's
12107      locations.  */
12108   bkpt_breakpoint_ops.re_set (b);
12109 
12110   /* Reparse the exception conditional expressions.  One for each
12111      location.  */
12112   create_excep_cond_exprs (c, c->m_kind);
12113 }
12114 
12115 /* Returns true if we should stop for this breakpoint hit.  If the
12116    user specified a specific exception, we only want to cause a stop
12117    if the program thrown that exception.  */
12118 
12119 static int
12120 should_stop_exception (const struct bp_location *bl)
12121 {
12122   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12123   const struct ada_catchpoint_location *ada_loc
12124     = (const struct ada_catchpoint_location *) bl;
12125   int stop;
12126 
12127   struct internalvar *var = lookup_internalvar ("_ada_exception");
12128   if (c->m_kind == ada_catch_assert)
12129     clear_internalvar (var);
12130   else
12131     {
12132       try
12133 	{
12134 	  const char *expr;
12135 
12136 	  if (c->m_kind == ada_catch_handlers)
12137 	    expr = ("GNAT_GCC_exception_Access(gcc_exception)"
12138 		    ".all.occurrence.id");
12139 	  else
12140 	    expr = "e";
12141 
12142 	  struct value *exc = parse_and_eval (expr);
12143 	  set_internalvar (var, exc);
12144 	}
12145       catch (const gdb_exception_error &ex)
12146 	{
12147 	  clear_internalvar (var);
12148 	}
12149     }
12150 
12151   /* With no specific exception, should always stop.  */
12152   if (c->excep_string.empty ())
12153     return 1;
12154 
12155   if (ada_loc->excep_cond_expr == NULL)
12156     {
12157       /* We will have a NULL expression if back when we were creating
12158 	 the expressions, this location's had failed to parse.  */
12159       return 1;
12160     }
12161 
12162   stop = 1;
12163   try
12164     {
12165       struct value *mark;
12166 
12167       mark = value_mark ();
12168       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
12169       value_free_to_mark (mark);
12170     }
12171   catch (const gdb_exception &ex)
12172     {
12173       exception_fprintf (gdb_stderr, ex,
12174 			 _("Error in testing exception condition:\n"));
12175     }
12176 
12177   return stop;
12178 }
12179 
12180 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
12181    for all exception catchpoint kinds.  */
12182 
12183 static void
12184 check_status_exception (bpstat bs)
12185 {
12186   bs->stop = should_stop_exception (bs->bp_location_at);
12187 }
12188 
12189 /* Implement the PRINT_IT method in the breakpoint_ops structure
12190    for all exception catchpoint kinds.  */
12191 
12192 static enum print_stop_action
12193 print_it_exception (bpstat bs)
12194 {
12195   struct ui_out *uiout = current_uiout;
12196   struct breakpoint *b = bs->breakpoint_at;
12197 
12198   annotate_catchpoint (b->number);
12199 
12200   if (uiout->is_mi_like_p ())
12201     {
12202       uiout->field_string ("reason",
12203 			   async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12204       uiout->field_string ("disp", bpdisp_text (b->disposition));
12205     }
12206 
12207   uiout->text (b->disposition == disp_del
12208 	       ? "\nTemporary catchpoint " : "\nCatchpoint ");
12209   uiout->field_signed ("bkptno", b->number);
12210   uiout->text (", ");
12211 
12212   /* ada_exception_name_addr relies on the selected frame being the
12213      current frame.  Need to do this here because this function may be
12214      called more than once when printing a stop, and below, we'll
12215      select the first frame past the Ada run-time (see
12216      ada_find_printable_frame).  */
12217   select_frame (get_current_frame ());
12218 
12219   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12220   switch (c->m_kind)
12221     {
12222       case ada_catch_exception:
12223       case ada_catch_exception_unhandled:
12224       case ada_catch_handlers:
12225 	{
12226 	  const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
12227 	  char exception_name[256];
12228 
12229 	  if (addr != 0)
12230 	    {
12231 	      read_memory (addr, (gdb_byte *) exception_name,
12232 			   sizeof (exception_name) - 1);
12233 	      exception_name [sizeof (exception_name) - 1] = '\0';
12234 	    }
12235 	  else
12236 	    {
12237 	      /* For some reason, we were unable to read the exception
12238 		 name.  This could happen if the Runtime was compiled
12239 		 without debugging info, for instance.  In that case,
12240 		 just replace the exception name by the generic string
12241 		 "exception" - it will read as "an exception" in the
12242 		 notification we are about to print.  */
12243 	      memcpy (exception_name, "exception", sizeof ("exception"));
12244 	    }
12245 	  /* In the case of unhandled exception breakpoints, we print
12246 	     the exception name as "unhandled EXCEPTION_NAME", to make
12247 	     it clearer to the user which kind of catchpoint just got
12248 	     hit.  We used ui_out_text to make sure that this extra
12249 	     info does not pollute the exception name in the MI case.  */
12250 	  if (c->m_kind == ada_catch_exception_unhandled)
12251 	    uiout->text ("unhandled ");
12252 	  uiout->field_string ("exception-name", exception_name);
12253 	}
12254 	break;
12255       case ada_catch_assert:
12256 	/* In this case, the name of the exception is not really
12257 	   important.  Just print "failed assertion" to make it clearer
12258 	   that his program just hit an assertion-failure catchpoint.
12259 	   We used ui_out_text because this info does not belong in
12260 	   the MI output.  */
12261 	uiout->text ("failed assertion");
12262 	break;
12263     }
12264 
12265   gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
12266   if (exception_message != NULL)
12267     {
12268       uiout->text (" (");
12269       uiout->field_string ("exception-message", exception_message.get ());
12270       uiout->text (")");
12271     }
12272 
12273   uiout->text (" at ");
12274   ada_find_printable_frame (get_current_frame ());
12275 
12276   return PRINT_SRC_AND_LOC;
12277 }
12278 
12279 /* Implement the PRINT_ONE method in the breakpoint_ops structure
12280    for all exception catchpoint kinds.  */
12281 
12282 static void
12283 print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
12284 {
12285   struct ui_out *uiout = current_uiout;
12286   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12287   struct value_print_options opts;
12288 
12289   get_user_print_options (&opts);
12290 
12291   if (opts.addressprint)
12292     uiout->field_skip ("addr");
12293 
12294   annotate_field (5);
12295   switch (c->m_kind)
12296     {
12297       case ada_catch_exception:
12298         if (!c->excep_string.empty ())
12299           {
12300 	    std::string msg = string_printf (_("`%s' Ada exception"),
12301 					     c->excep_string.c_str ());
12302 
12303             uiout->field_string ("what", msg);
12304           }
12305         else
12306           uiout->field_string ("what", "all Ada exceptions");
12307 
12308         break;
12309 
12310       case ada_catch_exception_unhandled:
12311         uiout->field_string ("what", "unhandled Ada exceptions");
12312         break;
12313 
12314       case ada_catch_handlers:
12315         if (!c->excep_string.empty ())
12316           {
12317 	    uiout->field_fmt ("what",
12318 			      _("`%s' Ada exception handlers"),
12319 			      c->excep_string.c_str ());
12320           }
12321         else
12322 	  uiout->field_string ("what", "all Ada exceptions handlers");
12323         break;
12324 
12325       case ada_catch_assert:
12326         uiout->field_string ("what", "failed Ada assertions");
12327         break;
12328 
12329       default:
12330         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12331         break;
12332     }
12333 }
12334 
12335 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12336    for all exception catchpoint kinds.  */
12337 
12338 static void
12339 print_mention_exception (struct breakpoint *b)
12340 {
12341   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12342   struct ui_out *uiout = current_uiout;
12343 
12344   uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
12345                                                  : _("Catchpoint "));
12346   uiout->field_signed ("bkptno", b->number);
12347   uiout->text (": ");
12348 
12349   switch (c->m_kind)
12350     {
12351       case ada_catch_exception:
12352         if (!c->excep_string.empty ())
12353 	  {
12354 	    std::string info = string_printf (_("`%s' Ada exception"),
12355 					      c->excep_string.c_str ());
12356 	    uiout->text (info.c_str ());
12357 	  }
12358         else
12359           uiout->text (_("all Ada exceptions"));
12360         break;
12361 
12362       case ada_catch_exception_unhandled:
12363         uiout->text (_("unhandled Ada exceptions"));
12364         break;
12365 
12366       case ada_catch_handlers:
12367         if (!c->excep_string.empty ())
12368 	  {
12369 	    std::string info
12370 	      = string_printf (_("`%s' Ada exception handlers"),
12371 			       c->excep_string.c_str ());
12372 	    uiout->text (info.c_str ());
12373 	  }
12374         else
12375           uiout->text (_("all Ada exceptions handlers"));
12376         break;
12377 
12378       case ada_catch_assert:
12379         uiout->text (_("failed Ada assertions"));
12380         break;
12381 
12382       default:
12383         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12384         break;
12385     }
12386 }
12387 
12388 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12389    for all exception catchpoint kinds.  */
12390 
12391 static void
12392 print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
12393 {
12394   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12395 
12396   switch (c->m_kind)
12397     {
12398       case ada_catch_exception:
12399 	fprintf_filtered (fp, "catch exception");
12400 	if (!c->excep_string.empty ())
12401 	  fprintf_filtered (fp, " %s", c->excep_string.c_str ());
12402 	break;
12403 
12404       case ada_catch_exception_unhandled:
12405 	fprintf_filtered (fp, "catch exception unhandled");
12406 	break;
12407 
12408       case ada_catch_handlers:
12409 	fprintf_filtered (fp, "catch handlers");
12410 	break;
12411 
12412       case ada_catch_assert:
12413 	fprintf_filtered (fp, "catch assert");
12414 	break;
12415 
12416       default:
12417 	internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12418     }
12419   print_recreate_thread (b, fp);
12420 }
12421 
12422 /* Virtual tables for various breakpoint types.  */
12423 static struct breakpoint_ops catch_exception_breakpoint_ops;
12424 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12425 static struct breakpoint_ops catch_assert_breakpoint_ops;
12426 static struct breakpoint_ops catch_handlers_breakpoint_ops;
12427 
12428 /* See ada-lang.h.  */
12429 
12430 bool
12431 is_ada_exception_catchpoint (breakpoint *bp)
12432 {
12433   return (bp->ops == &catch_exception_breakpoint_ops
12434 	  || bp->ops == &catch_exception_unhandled_breakpoint_ops
12435 	  || bp->ops == &catch_assert_breakpoint_ops
12436 	  || bp->ops == &catch_handlers_breakpoint_ops);
12437 }
12438 
12439 /* Split the arguments specified in a "catch exception" command.
12440    Set EX to the appropriate catchpoint type.
12441    Set EXCEP_STRING to the name of the specific exception if
12442    specified by the user.
12443    IS_CATCH_HANDLERS_CMD: True if the arguments are for a
12444    "catch handlers" command.  False otherwise.
12445    If a condition is found at the end of the arguments, the condition
12446    expression is stored in COND_STRING (memory must be deallocated
12447    after use).  Otherwise COND_STRING is set to NULL.  */
12448 
12449 static void
12450 catch_ada_exception_command_split (const char *args,
12451 				   bool is_catch_handlers_cmd,
12452                                    enum ada_exception_catchpoint_kind *ex,
12453 				   std::string *excep_string,
12454 				   std::string *cond_string)
12455 {
12456   std::string exception_name;
12457 
12458   exception_name = extract_arg (&args);
12459   if (exception_name == "if")
12460     {
12461       /* This is not an exception name; this is the start of a condition
12462 	 expression for a catchpoint on all exceptions.  So, "un-get"
12463 	 this token, and set exception_name to NULL.  */
12464       exception_name.clear ();
12465       args -= 2;
12466     }
12467 
12468   /* Check to see if we have a condition.  */
12469 
12470   args = skip_spaces (args);
12471   if (startswith (args, "if")
12472       && (isspace (args[2]) || args[2] == '\0'))
12473     {
12474       args += 2;
12475       args = skip_spaces (args);
12476 
12477       if (args[0] == '\0')
12478         error (_("Condition missing after `if' keyword"));
12479       *cond_string = args;
12480 
12481       args += strlen (args);
12482     }
12483 
12484   /* Check that we do not have any more arguments.  Anything else
12485      is unexpected.  */
12486 
12487   if (args[0] != '\0')
12488     error (_("Junk at end of expression"));
12489 
12490   if (is_catch_handlers_cmd)
12491     {
12492       /* Catch handling of exceptions.  */
12493       *ex = ada_catch_handlers;
12494       *excep_string = exception_name;
12495     }
12496   else if (exception_name.empty ())
12497     {
12498       /* Catch all exceptions.  */
12499       *ex = ada_catch_exception;
12500       excep_string->clear ();
12501     }
12502   else if (exception_name == "unhandled")
12503     {
12504       /* Catch unhandled exceptions.  */
12505       *ex = ada_catch_exception_unhandled;
12506       excep_string->clear ();
12507     }
12508   else
12509     {
12510       /* Catch a specific exception.  */
12511       *ex = ada_catch_exception;
12512       *excep_string = exception_name;
12513     }
12514 }
12515 
12516 /* Return the name of the symbol on which we should break in order to
12517    implement a catchpoint of the EX kind.  */
12518 
12519 static const char *
12520 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12521 {
12522   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12523 
12524   gdb_assert (data->exception_info != NULL);
12525 
12526   switch (ex)
12527     {
12528       case ada_catch_exception:
12529         return (data->exception_info->catch_exception_sym);
12530         break;
12531       case ada_catch_exception_unhandled:
12532         return (data->exception_info->catch_exception_unhandled_sym);
12533         break;
12534       case ada_catch_assert:
12535         return (data->exception_info->catch_assert_sym);
12536         break;
12537       case ada_catch_handlers:
12538         return (data->exception_info->catch_handlers_sym);
12539         break;
12540       default:
12541         internal_error (__FILE__, __LINE__,
12542                         _("unexpected catchpoint kind (%d)"), ex);
12543     }
12544 }
12545 
12546 /* Return the breakpoint ops "virtual table" used for catchpoints
12547    of the EX kind.  */
12548 
12549 static const struct breakpoint_ops *
12550 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12551 {
12552   switch (ex)
12553     {
12554       case ada_catch_exception:
12555         return (&catch_exception_breakpoint_ops);
12556         break;
12557       case ada_catch_exception_unhandled:
12558         return (&catch_exception_unhandled_breakpoint_ops);
12559         break;
12560       case ada_catch_assert:
12561         return (&catch_assert_breakpoint_ops);
12562         break;
12563       case ada_catch_handlers:
12564         return (&catch_handlers_breakpoint_ops);
12565         break;
12566       default:
12567         internal_error (__FILE__, __LINE__,
12568                         _("unexpected catchpoint kind (%d)"), ex);
12569     }
12570 }
12571 
12572 /* Return the condition that will be used to match the current exception
12573    being raised with the exception that the user wants to catch.  This
12574    assumes that this condition is used when the inferior just triggered
12575    an exception catchpoint.
12576    EX: the type of catchpoints used for catching Ada exceptions.  */
12577 
12578 static std::string
12579 ada_exception_catchpoint_cond_string (const char *excep_string,
12580                                       enum ada_exception_catchpoint_kind ex)
12581 {
12582   int i;
12583   bool is_standard_exc = false;
12584   std::string result;
12585 
12586   if (ex == ada_catch_handlers)
12587     {
12588       /* For exception handlers catchpoints, the condition string does
12589          not use the same parameter as for the other exceptions.  */
12590       result = ("long_integer (GNAT_GCC_exception_Access"
12591 		"(gcc_exception).all.occurrence.id)");
12592     }
12593   else
12594     result = "long_integer (e)";
12595 
12596   /* The standard exceptions are a special case.  They are defined in
12597      runtime units that have been compiled without debugging info; if
12598      EXCEP_STRING is the not-fully-qualified name of a standard
12599      exception (e.g. "constraint_error") then, during the evaluation
12600      of the condition expression, the symbol lookup on this name would
12601      *not* return this standard exception.  The catchpoint condition
12602      may then be set only on user-defined exceptions which have the
12603      same not-fully-qualified name (e.g. my_package.constraint_error).
12604 
12605      To avoid this unexcepted behavior, these standard exceptions are
12606      systematically prefixed by "standard".  This means that "catch
12607      exception constraint_error" is rewritten into "catch exception
12608      standard.constraint_error".
12609 
12610      If an exception named constraint_error is defined in another package of
12611      the inferior program, then the only way to specify this exception as a
12612      breakpoint condition is to use its fully-qualified named:
12613      e.g. my_package.constraint_error.  */
12614 
12615   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12616     {
12617       if (strcmp (standard_exc [i], excep_string) == 0)
12618 	{
12619 	  is_standard_exc = true;
12620 	  break;
12621 	}
12622     }
12623 
12624   result += " = ";
12625 
12626   if (is_standard_exc)
12627     string_appendf (result, "long_integer (&standard.%s)", excep_string);
12628   else
12629     string_appendf (result, "long_integer (&%s)", excep_string);
12630 
12631   return result;
12632 }
12633 
12634 /* Return the symtab_and_line that should be used to insert an exception
12635    catchpoint of the TYPE kind.
12636 
12637    ADDR_STRING returns the name of the function where the real
12638    breakpoint that implements the catchpoints is set, depending on the
12639    type of catchpoint we need to create.  */
12640 
12641 static struct symtab_and_line
12642 ada_exception_sal (enum ada_exception_catchpoint_kind ex,
12643 		   std::string *addr_string, const struct breakpoint_ops **ops)
12644 {
12645   const char *sym_name;
12646   struct symbol *sym;
12647 
12648   /* First, find out which exception support info to use.  */
12649   ada_exception_support_info_sniffer ();
12650 
12651   /* Then lookup the function on which we will break in order to catch
12652      the Ada exceptions requested by the user.  */
12653   sym_name = ada_exception_sym_name (ex);
12654   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12655 
12656   if (sym == NULL)
12657     error (_("Catchpoint symbol not found: %s"), sym_name);
12658 
12659   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12660     error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
12661 
12662   /* Set ADDR_STRING.  */
12663   *addr_string = sym_name;
12664 
12665   /* Set OPS.  */
12666   *ops = ada_exception_breakpoint_ops (ex);
12667 
12668   return find_function_start_sal (sym, 1);
12669 }
12670 
12671 /* Create an Ada exception catchpoint.
12672 
12673    EX_KIND is the kind of exception catchpoint to be created.
12674 
12675    If EXCEPT_STRING is empty, this catchpoint is expected to trigger
12676    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12677    of the exception to which this catchpoint applies.
12678 
12679    COND_STRING, if not empty, is the catchpoint condition.
12680 
12681    TEMPFLAG, if nonzero, means that the underlying breakpoint
12682    should be temporary.
12683 
12684    FROM_TTY is the usual argument passed to all commands implementations.  */
12685 
12686 void
12687 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12688 				 enum ada_exception_catchpoint_kind ex_kind,
12689 				 const std::string &excep_string,
12690 				 const std::string &cond_string,
12691 				 int tempflag,
12692 				 int disabled,
12693 				 int from_tty)
12694 {
12695   std::string addr_string;
12696   const struct breakpoint_ops *ops = NULL;
12697   struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
12698 
12699   std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
12700   init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
12701 				 ops, tempflag, disabled, from_tty);
12702   c->excep_string = excep_string;
12703   create_excep_cond_exprs (c.get (), ex_kind);
12704   if (!cond_string.empty ())
12705     set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty);
12706   install_breakpoint (0, std::move (c), 1);
12707 }
12708 
12709 /* Implement the "catch exception" command.  */
12710 
12711 static void
12712 catch_ada_exception_command (const char *arg_entry, int from_tty,
12713 			     struct cmd_list_element *command)
12714 {
12715   const char *arg = arg_entry;
12716   struct gdbarch *gdbarch = get_current_arch ();
12717   int tempflag;
12718   enum ada_exception_catchpoint_kind ex_kind;
12719   std::string excep_string;
12720   std::string cond_string;
12721 
12722   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12723 
12724   if (!arg)
12725     arg = "";
12726   catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
12727 				     &cond_string);
12728   create_ada_exception_catchpoint (gdbarch, ex_kind,
12729 				   excep_string, cond_string,
12730 				   tempflag, 1 /* enabled */,
12731 				   from_tty);
12732 }
12733 
12734 /* Implement the "catch handlers" command.  */
12735 
12736 static void
12737 catch_ada_handlers_command (const char *arg_entry, int from_tty,
12738 			    struct cmd_list_element *command)
12739 {
12740   const char *arg = arg_entry;
12741   struct gdbarch *gdbarch = get_current_arch ();
12742   int tempflag;
12743   enum ada_exception_catchpoint_kind ex_kind;
12744   std::string excep_string;
12745   std::string cond_string;
12746 
12747   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12748 
12749   if (!arg)
12750     arg = "";
12751   catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
12752 				     &cond_string);
12753   create_ada_exception_catchpoint (gdbarch, ex_kind,
12754 				   excep_string, cond_string,
12755 				   tempflag, 1 /* enabled */,
12756 				   from_tty);
12757 }
12758 
12759 /* Completion function for the Ada "catch" commands.  */
12760 
12761 static void
12762 catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
12763 		     const char *text, const char *word)
12764 {
12765   std::vector<ada_exc_info> exceptions = ada_exceptions_list (NULL);
12766 
12767   for (const ada_exc_info &info : exceptions)
12768     {
12769       if (startswith (info.name, word))
12770 	tracker.add_completion (make_unique_xstrdup (info.name));
12771     }
12772 }
12773 
12774 /* Split the arguments specified in a "catch assert" command.
12775 
12776    ARGS contains the command's arguments (or the empty string if
12777    no arguments were passed).
12778 
12779    If ARGS contains a condition, set COND_STRING to that condition
12780    (the memory needs to be deallocated after use).  */
12781 
12782 static void
12783 catch_ada_assert_command_split (const char *args, std::string &cond_string)
12784 {
12785   args = skip_spaces (args);
12786 
12787   /* Check whether a condition was provided.  */
12788   if (startswith (args, "if")
12789       && (isspace (args[2]) || args[2] == '\0'))
12790     {
12791       args += 2;
12792       args = skip_spaces (args);
12793       if (args[0] == '\0')
12794         error (_("condition missing after `if' keyword"));
12795       cond_string.assign (args);
12796     }
12797 
12798   /* Otherwise, there should be no other argument at the end of
12799      the command.  */
12800   else if (args[0] != '\0')
12801     error (_("Junk at end of arguments."));
12802 }
12803 
12804 /* Implement the "catch assert" command.  */
12805 
12806 static void
12807 catch_assert_command (const char *arg_entry, int from_tty,
12808 		      struct cmd_list_element *command)
12809 {
12810   const char *arg = arg_entry;
12811   struct gdbarch *gdbarch = get_current_arch ();
12812   int tempflag;
12813   std::string cond_string;
12814 
12815   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12816 
12817   if (!arg)
12818     arg = "";
12819   catch_ada_assert_command_split (arg, cond_string);
12820   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12821 				   "", cond_string,
12822 				   tempflag, 1 /* enabled */,
12823 				   from_tty);
12824 }
12825 
12826 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12827 
12828 static int
12829 ada_is_exception_sym (struct symbol *sym)
12830 {
12831   const char *type_name = SYMBOL_TYPE (sym)->name ();
12832 
12833   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12834           && SYMBOL_CLASS (sym) != LOC_BLOCK
12835           && SYMBOL_CLASS (sym) != LOC_CONST
12836           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12837           && type_name != NULL && strcmp (type_name, "exception") == 0);
12838 }
12839 
12840 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12841    Ada exception object.  This matches all exceptions except the ones
12842    defined by the Ada language.  */
12843 
12844 static int
12845 ada_is_non_standard_exception_sym (struct symbol *sym)
12846 {
12847   int i;
12848 
12849   if (!ada_is_exception_sym (sym))
12850     return 0;
12851 
12852   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12853     if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
12854       return 0;  /* A standard exception.  */
12855 
12856   /* Numeric_Error is also a standard exception, so exclude it.
12857      See the STANDARD_EXC description for more details as to why
12858      this exception is not listed in that array.  */
12859   if (strcmp (sym->linkage_name (), "numeric_error") == 0)
12860     return 0;
12861 
12862   return 1;
12863 }
12864 
12865 /* A helper function for std::sort, comparing two struct ada_exc_info
12866    objects.
12867 
12868    The comparison is determined first by exception name, and then
12869    by exception address.  */
12870 
12871 bool
12872 ada_exc_info::operator< (const ada_exc_info &other) const
12873 {
12874   int result;
12875 
12876   result = strcmp (name, other.name);
12877   if (result < 0)
12878     return true;
12879   if (result == 0 && addr < other.addr)
12880     return true;
12881   return false;
12882 }
12883 
12884 bool
12885 ada_exc_info::operator== (const ada_exc_info &other) const
12886 {
12887   return addr == other.addr && strcmp (name, other.name) == 0;
12888 }
12889 
12890 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12891    routine, but keeping the first SKIP elements untouched.
12892 
12893    All duplicates are also removed.  */
12894 
12895 static void
12896 sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
12897 				      int skip)
12898 {
12899   std::sort (exceptions->begin () + skip, exceptions->end ());
12900   exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
12901 		     exceptions->end ());
12902 }
12903 
12904 /* Add all exceptions defined by the Ada standard whose name match
12905    a regular expression.
12906 
12907    If PREG is not NULL, then this regexp_t object is used to
12908    perform the symbol name matching.  Otherwise, no name-based
12909    filtering is performed.
12910 
12911    EXCEPTIONS is a vector of exceptions to which matching exceptions
12912    gets pushed.  */
12913 
12914 static void
12915 ada_add_standard_exceptions (compiled_regex *preg,
12916 			     std::vector<ada_exc_info> *exceptions)
12917 {
12918   int i;
12919 
12920   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12921     {
12922       if (preg == NULL
12923 	  || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
12924 	{
12925 	  struct bound_minimal_symbol msymbol
12926 	    = ada_lookup_simple_minsym (standard_exc[i]);
12927 
12928 	  if (msymbol.minsym != NULL)
12929 	    {
12930 	      struct ada_exc_info info
12931 		= {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12932 
12933 	      exceptions->push_back (info);
12934 	    }
12935 	}
12936     }
12937 }
12938 
12939 /* Add all Ada exceptions defined locally and accessible from the given
12940    FRAME.
12941 
12942    If PREG is not NULL, then this regexp_t object is used to
12943    perform the symbol name matching.  Otherwise, no name-based
12944    filtering is performed.
12945 
12946    EXCEPTIONS is a vector of exceptions to which matching exceptions
12947    gets pushed.  */
12948 
12949 static void
12950 ada_add_exceptions_from_frame (compiled_regex *preg,
12951 			       struct frame_info *frame,
12952 			       std::vector<ada_exc_info> *exceptions)
12953 {
12954   const struct block *block = get_frame_block (frame, 0);
12955 
12956   while (block != 0)
12957     {
12958       struct block_iterator iter;
12959       struct symbol *sym;
12960 
12961       ALL_BLOCK_SYMBOLS (block, iter, sym)
12962 	{
12963 	  switch (SYMBOL_CLASS (sym))
12964 	    {
12965 	    case LOC_TYPEDEF:
12966 	    case LOC_BLOCK:
12967 	    case LOC_CONST:
12968 	      break;
12969 	    default:
12970 	      if (ada_is_exception_sym (sym))
12971 		{
12972 		  struct ada_exc_info info = {sym->print_name (),
12973 					      SYMBOL_VALUE_ADDRESS (sym)};
12974 
12975 		  exceptions->push_back (info);
12976 		}
12977 	    }
12978 	}
12979       if (BLOCK_FUNCTION (block) != NULL)
12980 	break;
12981       block = BLOCK_SUPERBLOCK (block);
12982     }
12983 }
12984 
12985 /* Return true if NAME matches PREG or if PREG is NULL.  */
12986 
12987 static bool
12988 name_matches_regex (const char *name, compiled_regex *preg)
12989 {
12990   return (preg == NULL
12991 	  || preg->exec (ada_decode (name).c_str (), 0, NULL, 0) == 0);
12992 }
12993 
12994 /* Add all exceptions defined globally whose name name match
12995    a regular expression, excluding standard exceptions.
12996 
12997    The reason we exclude standard exceptions is that they need
12998    to be handled separately: Standard exceptions are defined inside
12999    a runtime unit which is normally not compiled with debugging info,
13000    and thus usually do not show up in our symbol search.  However,
13001    if the unit was in fact built with debugging info, we need to
13002    exclude them because they would duplicate the entry we found
13003    during the special loop that specifically searches for those
13004    standard exceptions.
13005 
13006    If PREG is not NULL, then this regexp_t object is used to
13007    perform the symbol name matching.  Otherwise, no name-based
13008    filtering is performed.
13009 
13010    EXCEPTIONS is a vector of exceptions to which matching exceptions
13011    gets pushed.  */
13012 
13013 static void
13014 ada_add_global_exceptions (compiled_regex *preg,
13015 			   std::vector<ada_exc_info> *exceptions)
13016 {
13017   /* In Ada, the symbol "search name" is a linkage name, whereas the
13018      regular expression used to do the matching refers to the natural
13019      name.  So match against the decoded name.  */
13020   expand_symtabs_matching (NULL,
13021 			   lookup_name_info::match_any (),
13022 			   [&] (const char *search_name)
13023 			   {
13024 			     std::string decoded = ada_decode (search_name);
13025 			     return name_matches_regex (decoded.c_str (), preg);
13026 			   },
13027 			   NULL,
13028 			   VARIABLES_DOMAIN);
13029 
13030   for (objfile *objfile : current_program_space->objfiles ())
13031     {
13032       for (compunit_symtab *s : objfile->compunits ())
13033 	{
13034 	  const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13035 	  int i;
13036 
13037 	  for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13038 	    {
13039 	      const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13040 	      struct block_iterator iter;
13041 	      struct symbol *sym;
13042 
13043 	      ALL_BLOCK_SYMBOLS (b, iter, sym)
13044 		if (ada_is_non_standard_exception_sym (sym)
13045 		    && name_matches_regex (sym->natural_name (), preg))
13046 		  {
13047 		    struct ada_exc_info info
13048 		      = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
13049 
13050 		    exceptions->push_back (info);
13051 		  }
13052 	    }
13053 	}
13054     }
13055 }
13056 
13057 /* Implements ada_exceptions_list with the regular expression passed
13058    as a regex_t, rather than a string.
13059 
13060    If not NULL, PREG is used to filter out exceptions whose names
13061    do not match.  Otherwise, all exceptions are listed.  */
13062 
13063 static std::vector<ada_exc_info>
13064 ada_exceptions_list_1 (compiled_regex *preg)
13065 {
13066   std::vector<ada_exc_info> result;
13067   int prev_len;
13068 
13069   /* First, list the known standard exceptions.  These exceptions
13070      need to be handled separately, as they are usually defined in
13071      runtime units that have been compiled without debugging info.  */
13072 
13073   ada_add_standard_exceptions (preg, &result);
13074 
13075   /* Next, find all exceptions whose scope is local and accessible
13076      from the currently selected frame.  */
13077 
13078   if (has_stack_frames ())
13079     {
13080       prev_len = result.size ();
13081       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13082 				     &result);
13083       if (result.size () > prev_len)
13084 	sort_remove_dups_ada_exceptions_list (&result, prev_len);
13085     }
13086 
13087   /* Add all exceptions whose scope is global.  */
13088 
13089   prev_len = result.size ();
13090   ada_add_global_exceptions (preg, &result);
13091   if (result.size () > prev_len)
13092     sort_remove_dups_ada_exceptions_list (&result, prev_len);
13093 
13094   return result;
13095 }
13096 
13097 /* Return a vector of ada_exc_info.
13098 
13099    If REGEXP is NULL, all exceptions are included in the result.
13100    Otherwise, it should contain a valid regular expression,
13101    and only the exceptions whose names match that regular expression
13102    are included in the result.
13103 
13104    The exceptions are sorted in the following order:
13105      - Standard exceptions (defined by the Ada language), in
13106        alphabetical order;
13107      - Exceptions only visible from the current frame, in
13108        alphabetical order;
13109      - Exceptions whose scope is global, in alphabetical order.  */
13110 
13111 std::vector<ada_exc_info>
13112 ada_exceptions_list (const char *regexp)
13113 {
13114   if (regexp == NULL)
13115     return ada_exceptions_list_1 (NULL);
13116 
13117   compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13118   return ada_exceptions_list_1 (&reg);
13119 }
13120 
13121 /* Implement the "info exceptions" command.  */
13122 
13123 static void
13124 info_exceptions_command (const char *regexp, int from_tty)
13125 {
13126   struct gdbarch *gdbarch = get_current_arch ();
13127 
13128   std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
13129 
13130   if (regexp != NULL)
13131     printf_filtered
13132       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13133   else
13134     printf_filtered (_("All defined Ada exceptions:\n"));
13135 
13136   for (const ada_exc_info &info : exceptions)
13137     printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
13138 }
13139 
13140                                 /* Operators */
13141 /* Information about operators given special treatment in functions
13142    below.  */
13143 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
13144 
13145 #define ADA_OPERATORS \
13146     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13147     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13148     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13149     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13150     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13151     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13152     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13153     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13154     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13155     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13156     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13157     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13158     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13159     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13160     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
13161     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13162     OP_DEFN (OP_OTHERS, 1, 1, 0) \
13163     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13164     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
13165 
13166 static void
13167 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13168 		     int *argsp)
13169 {
13170   switch (exp->elts[pc - 1].opcode)
13171     {
13172     default:
13173       operator_length_standard (exp, pc, oplenp, argsp);
13174       break;
13175 
13176 #define OP_DEFN(op, len, args, binop) \
13177     case op: *oplenp = len; *argsp = args; break;
13178       ADA_OPERATORS;
13179 #undef OP_DEFN
13180 
13181     case OP_AGGREGATE:
13182       *oplenp = 3;
13183       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13184       break;
13185 
13186     case OP_CHOICES:
13187       *oplenp = 3;
13188       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13189       break;
13190     }
13191 }
13192 
13193 /* Implementation of the exp_descriptor method operator_check.  */
13194 
13195 static int
13196 ada_operator_check (struct expression *exp, int pos,
13197 		    int (*objfile_func) (struct objfile *objfile, void *data),
13198 		    void *data)
13199 {
13200   const union exp_element *const elts = exp->elts;
13201   struct type *type = NULL;
13202 
13203   switch (elts[pos].opcode)
13204     {
13205       case UNOP_IN_RANGE:
13206       case UNOP_QUAL:
13207 	type = elts[pos + 1].type;
13208 	break;
13209 
13210       default:
13211 	return operator_check_standard (exp, pos, objfile_func, data);
13212     }
13213 
13214   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13215 
13216   if (type && TYPE_OBJFILE (type)
13217       && (*objfile_func) (TYPE_OBJFILE (type), data))
13218     return 1;
13219 
13220   return 0;
13221 }
13222 
13223 static const char *
13224 ada_op_name (enum exp_opcode opcode)
13225 {
13226   switch (opcode)
13227     {
13228     default:
13229       return op_name_standard (opcode);
13230 
13231 #define OP_DEFN(op, len, args, binop) case op: return #op;
13232       ADA_OPERATORS;
13233 #undef OP_DEFN
13234 
13235     case OP_AGGREGATE:
13236       return "OP_AGGREGATE";
13237     case OP_CHOICES:
13238       return "OP_CHOICES";
13239     case OP_NAME:
13240       return "OP_NAME";
13241     }
13242 }
13243 
13244 /* As for operator_length, but assumes PC is pointing at the first
13245    element of the operator, and gives meaningful results only for the
13246    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13247 
13248 static void
13249 ada_forward_operator_length (struct expression *exp, int pc,
13250                              int *oplenp, int *argsp)
13251 {
13252   switch (exp->elts[pc].opcode)
13253     {
13254     default:
13255       *oplenp = *argsp = 0;
13256       break;
13257 
13258 #define OP_DEFN(op, len, args, binop) \
13259     case op: *oplenp = len; *argsp = args; break;
13260       ADA_OPERATORS;
13261 #undef OP_DEFN
13262 
13263     case OP_AGGREGATE:
13264       *oplenp = 3;
13265       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13266       break;
13267 
13268     case OP_CHOICES:
13269       *oplenp = 3;
13270       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13271       break;
13272 
13273     case OP_STRING:
13274     case OP_NAME:
13275       {
13276 	int len = longest_to_int (exp->elts[pc + 1].longconst);
13277 
13278 	*oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13279 	*argsp = 0;
13280 	break;
13281       }
13282     }
13283 }
13284 
13285 static int
13286 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13287 {
13288   enum exp_opcode op = exp->elts[elt].opcode;
13289   int oplen, nargs;
13290   int pc = elt;
13291   int i;
13292 
13293   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13294 
13295   switch (op)
13296     {
13297       /* Ada attributes ('Foo).  */
13298     case OP_ATR_FIRST:
13299     case OP_ATR_LAST:
13300     case OP_ATR_LENGTH:
13301     case OP_ATR_IMAGE:
13302     case OP_ATR_MAX:
13303     case OP_ATR_MIN:
13304     case OP_ATR_MODULUS:
13305     case OP_ATR_POS:
13306     case OP_ATR_SIZE:
13307     case OP_ATR_TAG:
13308     case OP_ATR_VAL:
13309       break;
13310 
13311     case UNOP_IN_RANGE:
13312     case UNOP_QUAL:
13313       /* XXX: gdb_sprint_host_address, type_sprint */
13314       fprintf_filtered (stream, _("Type @"));
13315       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13316       fprintf_filtered (stream, " (");
13317       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13318       fprintf_filtered (stream, ")");
13319       break;
13320     case BINOP_IN_BOUNDS:
13321       fprintf_filtered (stream, " (%d)",
13322 			longest_to_int (exp->elts[pc + 2].longconst));
13323       break;
13324     case TERNOP_IN_RANGE:
13325       break;
13326 
13327     case OP_AGGREGATE:
13328     case OP_OTHERS:
13329     case OP_DISCRETE_RANGE:
13330     case OP_POSITIONAL:
13331     case OP_CHOICES:
13332       break;
13333 
13334     case OP_NAME:
13335     case OP_STRING:
13336       {
13337 	char *name = &exp->elts[elt + 2].string;
13338 	int len = longest_to_int (exp->elts[elt + 1].longconst);
13339 
13340 	fprintf_filtered (stream, "Text: `%.*s'", len, name);
13341 	break;
13342       }
13343 
13344     default:
13345       return dump_subexp_body_standard (exp, stream, elt);
13346     }
13347 
13348   elt += oplen;
13349   for (i = 0; i < nargs; i += 1)
13350     elt = dump_subexp (exp, stream, elt);
13351 
13352   return elt;
13353 }
13354 
13355 /* The Ada extension of print_subexp (q.v.).  */
13356 
13357 static void
13358 ada_print_subexp (struct expression *exp, int *pos,
13359                   struct ui_file *stream, enum precedence prec)
13360 {
13361   int oplen, nargs, i;
13362   int pc = *pos;
13363   enum exp_opcode op = exp->elts[pc].opcode;
13364 
13365   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13366 
13367   *pos += oplen;
13368   switch (op)
13369     {
13370     default:
13371       *pos -= oplen;
13372       print_subexp_standard (exp, pos, stream, prec);
13373       return;
13374 
13375     case OP_VAR_VALUE:
13376       fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
13377       return;
13378 
13379     case BINOP_IN_BOUNDS:
13380       /* XXX: sprint_subexp */
13381       print_subexp (exp, pos, stream, PREC_SUFFIX);
13382       fputs_filtered (" in ", stream);
13383       print_subexp (exp, pos, stream, PREC_SUFFIX);
13384       fputs_filtered ("'range", stream);
13385       if (exp->elts[pc + 1].longconst > 1)
13386         fprintf_filtered (stream, "(%ld)",
13387                           (long) exp->elts[pc + 1].longconst);
13388       return;
13389 
13390     case TERNOP_IN_RANGE:
13391       if (prec >= PREC_EQUAL)
13392         fputs_filtered ("(", stream);
13393       /* XXX: sprint_subexp */
13394       print_subexp (exp, pos, stream, PREC_SUFFIX);
13395       fputs_filtered (" in ", stream);
13396       print_subexp (exp, pos, stream, PREC_EQUAL);
13397       fputs_filtered (" .. ", stream);
13398       print_subexp (exp, pos, stream, PREC_EQUAL);
13399       if (prec >= PREC_EQUAL)
13400         fputs_filtered (")", stream);
13401       return;
13402 
13403     case OP_ATR_FIRST:
13404     case OP_ATR_LAST:
13405     case OP_ATR_LENGTH:
13406     case OP_ATR_IMAGE:
13407     case OP_ATR_MAX:
13408     case OP_ATR_MIN:
13409     case OP_ATR_MODULUS:
13410     case OP_ATR_POS:
13411     case OP_ATR_SIZE:
13412     case OP_ATR_TAG:
13413     case OP_ATR_VAL:
13414       if (exp->elts[*pos].opcode == OP_TYPE)
13415         {
13416           if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID)
13417             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13418 			   &type_print_raw_options);
13419           *pos += 3;
13420         }
13421       else
13422         print_subexp (exp, pos, stream, PREC_SUFFIX);
13423       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13424       if (nargs > 1)
13425         {
13426           int tem;
13427 
13428           for (tem = 1; tem < nargs; tem += 1)
13429             {
13430               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13431               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13432             }
13433           fputs_filtered (")", stream);
13434         }
13435       return;
13436 
13437     case UNOP_QUAL:
13438       type_print (exp->elts[pc + 1].type, "", stream, 0);
13439       fputs_filtered ("'(", stream);
13440       print_subexp (exp, pos, stream, PREC_PREFIX);
13441       fputs_filtered (")", stream);
13442       return;
13443 
13444     case UNOP_IN_RANGE:
13445       /* XXX: sprint_subexp */
13446       print_subexp (exp, pos, stream, PREC_SUFFIX);
13447       fputs_filtered (" in ", stream);
13448       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13449 		     &type_print_raw_options);
13450       return;
13451 
13452     case OP_DISCRETE_RANGE:
13453       print_subexp (exp, pos, stream, PREC_SUFFIX);
13454       fputs_filtered ("..", stream);
13455       print_subexp (exp, pos, stream, PREC_SUFFIX);
13456       return;
13457 
13458     case OP_OTHERS:
13459       fputs_filtered ("others => ", stream);
13460       print_subexp (exp, pos, stream, PREC_SUFFIX);
13461       return;
13462 
13463     case OP_CHOICES:
13464       for (i = 0; i < nargs-1; i += 1)
13465 	{
13466 	  if (i > 0)
13467 	    fputs_filtered ("|", stream);
13468 	  print_subexp (exp, pos, stream, PREC_SUFFIX);
13469 	}
13470       fputs_filtered (" => ", stream);
13471       print_subexp (exp, pos, stream, PREC_SUFFIX);
13472       return;
13473 
13474     case OP_POSITIONAL:
13475       print_subexp (exp, pos, stream, PREC_SUFFIX);
13476       return;
13477 
13478     case OP_AGGREGATE:
13479       fputs_filtered ("(", stream);
13480       for (i = 0; i < nargs; i += 1)
13481 	{
13482 	  if (i > 0)
13483 	    fputs_filtered (", ", stream);
13484 	  print_subexp (exp, pos, stream, PREC_SUFFIX);
13485 	}
13486       fputs_filtered (")", stream);
13487       return;
13488     }
13489 }
13490 
13491 /* Table mapping opcodes into strings for printing operators
13492    and precedences of the operators.  */
13493 
13494 static const struct op_print ada_op_print_tab[] = {
13495   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13496   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13497   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13498   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13499   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13500   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13501   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13502   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13503   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13504   {">=", BINOP_GEQ, PREC_ORDER, 0},
13505   {">", BINOP_GTR, PREC_ORDER, 0},
13506   {"<", BINOP_LESS, PREC_ORDER, 0},
13507   {">>", BINOP_RSH, PREC_SHIFT, 0},
13508   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13509   {"+", BINOP_ADD, PREC_ADD, 0},
13510   {"-", BINOP_SUB, PREC_ADD, 0},
13511   {"&", BINOP_CONCAT, PREC_ADD, 0},
13512   {"*", BINOP_MUL, PREC_MUL, 0},
13513   {"/", BINOP_DIV, PREC_MUL, 0},
13514   {"rem", BINOP_REM, PREC_MUL, 0},
13515   {"mod", BINOP_MOD, PREC_MUL, 0},
13516   {"**", BINOP_EXP, PREC_REPEAT, 0},
13517   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13518   {"-", UNOP_NEG, PREC_PREFIX, 0},
13519   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13520   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13521   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13522   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13523   {".all", UNOP_IND, PREC_SUFFIX, 1},
13524   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13525   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13526   {NULL, OP_NULL, PREC_SUFFIX, 0}
13527 };
13528 
13529 enum ada_primitive_types {
13530   ada_primitive_type_int,
13531   ada_primitive_type_long,
13532   ada_primitive_type_short,
13533   ada_primitive_type_char,
13534   ada_primitive_type_float,
13535   ada_primitive_type_double,
13536   ada_primitive_type_void,
13537   ada_primitive_type_long_long,
13538   ada_primitive_type_long_double,
13539   ada_primitive_type_natural,
13540   ada_primitive_type_positive,
13541   ada_primitive_type_system_address,
13542   ada_primitive_type_storage_offset,
13543   nr_ada_primitive_types
13544 };
13545 
13546 
13547 				/* Language vector */
13548 
13549 static const struct exp_descriptor ada_exp_descriptor = {
13550   ada_print_subexp,
13551   ada_operator_length,
13552   ada_operator_check,
13553   ada_op_name,
13554   ada_dump_subexp_body,
13555   ada_evaluate_subexp
13556 };
13557 
13558 /* symbol_name_matcher_ftype adapter for wild_match.  */
13559 
13560 static bool
13561 do_wild_match (const char *symbol_search_name,
13562 	       const lookup_name_info &lookup_name,
13563 	       completion_match_result *comp_match_res)
13564 {
13565   return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
13566 }
13567 
13568 /* symbol_name_matcher_ftype adapter for full_match.  */
13569 
13570 static bool
13571 do_full_match (const char *symbol_search_name,
13572 	       const lookup_name_info &lookup_name,
13573 	       completion_match_result *comp_match_res)
13574 {
13575   return full_match (symbol_search_name, ada_lookup_name (lookup_name));
13576 }
13577 
13578 /* symbol_name_matcher_ftype for exact (verbatim) matches.  */
13579 
13580 static bool
13581 do_exact_match (const char *symbol_search_name,
13582 		const lookup_name_info &lookup_name,
13583 		completion_match_result *comp_match_res)
13584 {
13585   return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
13586 }
13587 
13588 /* Build the Ada lookup name for LOOKUP_NAME.  */
13589 
13590 ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
13591 {
13592   gdb::string_view user_name = lookup_name.name ();
13593 
13594   if (user_name[0] == '<')
13595     {
13596       if (user_name.back () == '>')
13597 	m_encoded_name
13598 	  = gdb::to_string (user_name.substr (1, user_name.size () - 2));
13599       else
13600 	m_encoded_name
13601 	  = gdb::to_string (user_name.substr (1, user_name.size () - 1));
13602       m_encoded_p = true;
13603       m_verbatim_p = true;
13604       m_wild_match_p = false;
13605       m_standard_p = false;
13606     }
13607   else
13608     {
13609       m_verbatim_p = false;
13610 
13611       m_encoded_p = user_name.find ("__") != gdb::string_view::npos;
13612 
13613       if (!m_encoded_p)
13614 	{
13615 	  const char *folded = ada_fold_name (user_name);
13616 	  const char *encoded = ada_encode_1 (folded, false);
13617 	  if (encoded != NULL)
13618 	    m_encoded_name = encoded;
13619 	  else
13620 	    m_encoded_name = gdb::to_string (user_name);
13621 	}
13622       else
13623 	m_encoded_name = gdb::to_string (user_name);
13624 
13625       /* Handle the 'package Standard' special case.  See description
13626 	 of m_standard_p.  */
13627       if (startswith (m_encoded_name.c_str (), "standard__"))
13628 	{
13629 	  m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
13630 	  m_standard_p = true;
13631 	}
13632       else
13633 	m_standard_p = false;
13634 
13635       /* If the name contains a ".", then the user is entering a fully
13636 	 qualified entity name, and the match must not be done in wild
13637 	 mode.  Similarly, if the user wants to complete what looks
13638 	 like an encoded name, the match must not be done in wild
13639 	 mode.  Also, in the standard__ special case always do
13640 	 non-wild matching.  */
13641       m_wild_match_p
13642 	= (lookup_name.match_type () != symbol_name_match_type::FULL
13643 	   && !m_encoded_p
13644 	   && !m_standard_p
13645 	   && user_name.find ('.') == std::string::npos);
13646     }
13647 }
13648 
13649 /* symbol_name_matcher_ftype method for Ada.  This only handles
13650    completion mode.  */
13651 
13652 static bool
13653 ada_symbol_name_matches (const char *symbol_search_name,
13654 			 const lookup_name_info &lookup_name,
13655 			 completion_match_result *comp_match_res)
13656 {
13657   return lookup_name.ada ().matches (symbol_search_name,
13658 				     lookup_name.match_type (),
13659 				     comp_match_res);
13660 }
13661 
13662 /* A name matcher that matches the symbol name exactly, with
13663    strcmp.  */
13664 
13665 static bool
13666 literal_symbol_name_matcher (const char *symbol_search_name,
13667 			     const lookup_name_info &lookup_name,
13668 			     completion_match_result *comp_match_res)
13669 {
13670   gdb::string_view name_view = lookup_name.name ();
13671 
13672   if (lookup_name.completion_mode ()
13673       ? (strncmp (symbol_search_name, name_view.data (),
13674 		  name_view.size ()) == 0)
13675       : symbol_search_name == name_view)
13676     {
13677       if (comp_match_res != NULL)
13678 	comp_match_res->set_match (symbol_search_name);
13679       return true;
13680     }
13681   else
13682     return false;
13683 }
13684 
13685 /* Implement the "get_symbol_name_matcher" language_defn method for
13686    Ada.  */
13687 
13688 static symbol_name_matcher_ftype *
13689 ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
13690 {
13691   if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
13692     return literal_symbol_name_matcher;
13693 
13694   if (lookup_name.completion_mode ())
13695     return ada_symbol_name_matches;
13696   else
13697     {
13698       if (lookup_name.ada ().wild_match_p ())
13699 	return do_wild_match;
13700       else if (lookup_name.ada ().verbatim_p ())
13701 	return do_exact_match;
13702       else
13703 	return do_full_match;
13704     }
13705 }
13706 
13707 static const char *ada_extensions[] =
13708 {
13709   ".adb", ".ads", ".a", ".ada", ".dg", NULL
13710 };
13711 
13712 /* Constant data that describes the Ada language.  */
13713 
13714 extern const struct language_data ada_language_data =
13715 {
13716   "ada",                        /* Language name */
13717   "Ada",
13718   language_ada,
13719   range_check_off,
13720   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13721                                    that's not quite what this means.  */
13722   array_row_major,
13723   macro_expansion_no,
13724   ada_extensions,
13725   &ada_exp_descriptor,
13726   NULL,                         /* name_of_this */
13727   true,                         /* la_store_sym_names_in_linkage_form_p */
13728   ada_op_print_tab,             /* expression operators for printing */
13729   0,                            /* c-style arrays */
13730   1,                            /* String lower bound */
13731   &ada_varobj_ops,
13732   "(...)"			/* la_struct_too_deep_ellipsis */
13733 };
13734 
13735 /* Class representing the Ada language.  */
13736 
13737 class ada_language : public language_defn
13738 {
13739 public:
13740   ada_language ()
13741     : language_defn (language_ada, ada_language_data)
13742   { /* Nothing.  */ }
13743 
13744   /* Print an array element index using the Ada syntax.  */
13745 
13746   void print_array_index (struct type *index_type,
13747 			  LONGEST index,
13748 			  struct ui_file *stream,
13749 			  const value_print_options *options) const override
13750   {
13751     struct value *index_value = val_atr (index_type, index);
13752 
13753     LA_VALUE_PRINT (index_value, stream, options);
13754     fprintf_filtered (stream, " => ");
13755   }
13756 
13757   /* Implement the "read_var_value" language_defn method for Ada.  */
13758 
13759   struct value *read_var_value (struct symbol *var,
13760 				const struct block *var_block,
13761 				struct frame_info *frame) const override
13762   {
13763     /* The only case where default_read_var_value is not sufficient
13764        is when VAR is a renaming...  */
13765     if (frame != nullptr)
13766       {
13767 	const struct block *frame_block = get_frame_block (frame, NULL);
13768 	if (frame_block != nullptr && ada_is_renaming_symbol (var))
13769 	  return ada_read_renaming_var_value (var, frame_block);
13770       }
13771 
13772     /* This is a typical case where we expect the default_read_var_value
13773        function to work.  */
13774     return language_defn::read_var_value (var, var_block, frame);
13775   }
13776 
13777   /* See language.h.  */
13778   void language_arch_info (struct gdbarch *gdbarch,
13779 			   struct language_arch_info *lai) const override
13780   {
13781     const struct builtin_type *builtin = builtin_type (gdbarch);
13782 
13783     lai->primitive_type_vector
13784       = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13785 				struct type *);
13786 
13787     lai->primitive_type_vector [ada_primitive_type_int]
13788       = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13789 			   0, "integer");
13790     lai->primitive_type_vector [ada_primitive_type_long]
13791       = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13792 			   0, "long_integer");
13793     lai->primitive_type_vector [ada_primitive_type_short]
13794       = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13795 			   0, "short_integer");
13796     lai->string_char_type
13797       = lai->primitive_type_vector [ada_primitive_type_char]
13798       = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13799     lai->primitive_type_vector [ada_primitive_type_float]
13800       = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13801 			 "float", gdbarch_float_format (gdbarch));
13802     lai->primitive_type_vector [ada_primitive_type_double]
13803       = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13804 			 "long_float", gdbarch_double_format (gdbarch));
13805     lai->primitive_type_vector [ada_primitive_type_long_long]
13806       = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13807 			   0, "long_long_integer");
13808     lai->primitive_type_vector [ada_primitive_type_long_double]
13809       = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
13810 			 "long_long_float", gdbarch_long_double_format (gdbarch));
13811     lai->primitive_type_vector [ada_primitive_type_natural]
13812       = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13813 			   0, "natural");
13814     lai->primitive_type_vector [ada_primitive_type_positive]
13815       = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13816 			   0, "positive");
13817     lai->primitive_type_vector [ada_primitive_type_void]
13818       = builtin->builtin_void;
13819 
13820     lai->primitive_type_vector [ada_primitive_type_system_address]
13821       = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
13822 					"void"));
13823     lai->primitive_type_vector [ada_primitive_type_system_address]
13824       ->set_name ("system__address");
13825 
13826     /* Create the equivalent of the System.Storage_Elements.Storage_Offset
13827        type.  This is a signed integral type whose size is the same as
13828        the size of addresses.  */
13829     {
13830       unsigned int addr_length = TYPE_LENGTH
13831 	(lai->primitive_type_vector [ada_primitive_type_system_address]);
13832 
13833       lai->primitive_type_vector [ada_primitive_type_storage_offset]
13834 	= arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
13835 			     "storage_offset");
13836     }
13837 
13838     lai->bool_type_symbol = NULL;
13839     lai->bool_type_default = builtin->builtin_bool;
13840   }
13841 
13842   /* See language.h.  */
13843 
13844   bool iterate_over_symbols
13845 	(const struct block *block, const lookup_name_info &name,
13846 	 domain_enum domain,
13847 	 gdb::function_view<symbol_found_callback_ftype> callback) const override
13848   {
13849     std::vector<struct block_symbol> results;
13850 
13851     ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
13852     for (block_symbol &sym : results)
13853       {
13854 	if (!callback (&sym))
13855 	  return false;
13856       }
13857 
13858     return true;
13859   }
13860 
13861   /* See language.h.  */
13862   bool sniff_from_mangled_name (const char *mangled,
13863 				char **out) const override
13864   {
13865     std::string demangled = ada_decode (mangled);
13866 
13867     *out = NULL;
13868 
13869     if (demangled != mangled && demangled[0] != '<')
13870       {
13871 	/* Set the gsymbol language to Ada, but still return 0.
13872 	   Two reasons for that:
13873 
13874 	   1. For Ada, we prefer computing the symbol's decoded name
13875 	   on the fly rather than pre-compute it, in order to save
13876 	   memory (Ada projects are typically very large).
13877 
13878 	   2. There are some areas in the definition of the GNAT
13879 	   encoding where, with a bit of bad luck, we might be able
13880 	   to decode a non-Ada symbol, generating an incorrect
13881 	   demangled name (Eg: names ending with "TB" for instance
13882 	   are identified as task bodies and so stripped from
13883 	   the decoded name returned).
13884 
13885 	   Returning true, here, but not setting *DEMANGLED, helps us get
13886 	   a little bit of the best of both worlds.  Because we're last,
13887 	   we should not affect any of the other languages that were
13888 	   able to demangle the symbol before us; we get to correctly
13889 	   tag Ada symbols as such; and even if we incorrectly tagged a
13890 	   non-Ada symbol, which should be rare, any routing through the
13891 	   Ada language should be transparent (Ada tries to behave much
13892 	   like C/C++ with non-Ada symbols).  */
13893 	return true;
13894       }
13895 
13896     return false;
13897   }
13898 
13899   /* See language.h.  */
13900 
13901   char *demangle (const char *mangled, int options) const override
13902   {
13903     return ada_la_decode (mangled, options);
13904   }
13905 
13906   /* See language.h.  */
13907 
13908   void print_type (struct type *type, const char *varstring,
13909 		   struct ui_file *stream, int show, int level,
13910 		   const struct type_print_options *flags) const override
13911   {
13912     ada_print_type (type, varstring, stream, show, level, flags);
13913   }
13914 
13915   /* See language.h.  */
13916 
13917   const char *word_break_characters (void) const override
13918   {
13919     return ada_completer_word_break_characters;
13920   }
13921 
13922   /* See language.h.  */
13923 
13924   void collect_symbol_completion_matches (completion_tracker &tracker,
13925 					  complete_symbol_mode mode,
13926 					  symbol_name_match_type name_match_type,
13927 					  const char *text, const char *word,
13928 					  enum type_code code) const override
13929   {
13930     struct symbol *sym;
13931     const struct block *b, *surrounding_static_block = 0;
13932     struct block_iterator iter;
13933 
13934     gdb_assert (code == TYPE_CODE_UNDEF);
13935 
13936     lookup_name_info lookup_name (text, name_match_type, true);
13937 
13938     /* First, look at the partial symtab symbols.  */
13939     expand_symtabs_matching (NULL,
13940 			     lookup_name,
13941 			     NULL,
13942 			     NULL,
13943 			     ALL_DOMAIN);
13944 
13945     /* At this point scan through the misc symbol vectors and add each
13946        symbol you find to the list.  Eventually we want to ignore
13947        anything that isn't a text symbol (everything else will be
13948        handled by the psymtab code above).  */
13949 
13950     for (objfile *objfile : current_program_space->objfiles ())
13951       {
13952 	for (minimal_symbol *msymbol : objfile->msymbols ())
13953 	  {
13954 	    QUIT;
13955 
13956 	    if (completion_skip_symbol (mode, msymbol))
13957 	      continue;
13958 
13959 	    language symbol_language = msymbol->language ();
13960 
13961 	    /* Ada minimal symbols won't have their language set to Ada.  If
13962 	       we let completion_list_add_name compare using the
13963 	       default/C-like matcher, then when completing e.g., symbols in a
13964 	       package named "pck", we'd match internal Ada symbols like
13965 	       "pckS", which are invalid in an Ada expression, unless you wrap
13966 	       them in '<' '>' to request a verbatim match.
13967 
13968 	       Unfortunately, some Ada encoded names successfully demangle as
13969 	       C++ symbols (using an old mangling scheme), such as "name__2Xn"
13970 	       -> "Xn::name(void)" and thus some Ada minimal symbols end up
13971 	       with the wrong language set.  Paper over that issue here.  */
13972 	    if (symbol_language == language_auto
13973 		|| symbol_language == language_cplus)
13974 	      symbol_language = language_ada;
13975 
13976 	    completion_list_add_name (tracker,
13977 				      symbol_language,
13978 				      msymbol->linkage_name (),
13979 				      lookup_name, text, word);
13980 	  }
13981       }
13982 
13983     /* Search upwards from currently selected frame (so that we can
13984        complete on local vars.  */
13985 
13986     for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
13987       {
13988 	if (!BLOCK_SUPERBLOCK (b))
13989 	  surrounding_static_block = b;   /* For elmin of dups */
13990 
13991 	ALL_BLOCK_SYMBOLS (b, iter, sym)
13992 	  {
13993 	    if (completion_skip_symbol (mode, sym))
13994 	      continue;
13995 
13996 	    completion_list_add_name (tracker,
13997 				      sym->language (),
13998 				      sym->linkage_name (),
13999 				      lookup_name, text, word);
14000 	  }
14001       }
14002 
14003     /* Go through the symtabs and check the externs and statics for
14004        symbols which match.  */
14005 
14006     for (objfile *objfile : current_program_space->objfiles ())
14007       {
14008 	for (compunit_symtab *s : objfile->compunits ())
14009 	  {
14010 	    QUIT;
14011 	    b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
14012 	    ALL_BLOCK_SYMBOLS (b, iter, sym)
14013 	      {
14014 		if (completion_skip_symbol (mode, sym))
14015 		  continue;
14016 
14017 		completion_list_add_name (tracker,
14018 					  sym->language (),
14019 					  sym->linkage_name (),
14020 					  lookup_name, text, word);
14021 	      }
14022 	  }
14023       }
14024 
14025     for (objfile *objfile : current_program_space->objfiles ())
14026       {
14027 	for (compunit_symtab *s : objfile->compunits ())
14028 	  {
14029 	    QUIT;
14030 	    b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
14031 	    /* Don't do this block twice.  */
14032 	    if (b == surrounding_static_block)
14033 	      continue;
14034 	    ALL_BLOCK_SYMBOLS (b, iter, sym)
14035 	      {
14036 		if (completion_skip_symbol (mode, sym))
14037 		  continue;
14038 
14039 		completion_list_add_name (tracker,
14040 					  sym->language (),
14041 					  sym->linkage_name (),
14042 					  lookup_name, text, word);
14043 	      }
14044 	  }
14045       }
14046   }
14047 
14048   /* See language.h.  */
14049 
14050   gdb::unique_xmalloc_ptr<char> watch_location_expression
14051 	(struct type *type, CORE_ADDR addr) const override
14052   {
14053     type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
14054     std::string name = type_to_string (type);
14055     return gdb::unique_xmalloc_ptr<char>
14056       (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
14057   }
14058 
14059   /* See language.h.  */
14060 
14061   void value_print (struct value *val, struct ui_file *stream,
14062 		    const struct value_print_options *options) const override
14063   {
14064     return ada_value_print (val, stream, options);
14065   }
14066 
14067   /* See language.h.  */
14068 
14069   void value_print_inner
14070 	(struct value *val, struct ui_file *stream, int recurse,
14071 	 const struct value_print_options *options) const override
14072   {
14073     return ada_value_print_inner (val, stream, recurse, options);
14074   }
14075 
14076   /* See language.h.  */
14077 
14078   struct block_symbol lookup_symbol_nonlocal
14079 	(const char *name, const struct block *block,
14080 	 const domain_enum domain) const override
14081   {
14082     struct block_symbol sym;
14083 
14084     sym = ada_lookup_symbol (name, block_static_block (block), domain);
14085     if (sym.symbol != NULL)
14086       return sym;
14087 
14088     /* If we haven't found a match at this point, try the primitive
14089        types.  In other languages, this search is performed before
14090        searching for global symbols in order to short-circuit that
14091        global-symbol search if it happens that the name corresponds
14092        to a primitive type.  But we cannot do the same in Ada, because
14093        it is perfectly legitimate for a program to declare a type which
14094        has the same name as a standard type.  If looking up a type in
14095        that situation, we have traditionally ignored the primitive type
14096        in favor of user-defined types.  This is why, unlike most other
14097        languages, we search the primitive types this late and only after
14098        having searched the global symbols without success.  */
14099 
14100     if (domain == VAR_DOMAIN)
14101       {
14102 	struct gdbarch *gdbarch;
14103 
14104 	if (block == NULL)
14105 	  gdbarch = target_gdbarch ();
14106 	else
14107 	  gdbarch = block_gdbarch (block);
14108 	sym.symbol
14109 	  = language_lookup_primitive_type_as_symbol (this, gdbarch, name);
14110 	if (sym.symbol != NULL)
14111 	  return sym;
14112       }
14113 
14114     return {};
14115   }
14116 
14117   /* See language.h.  */
14118 
14119   int parser (struct parser_state *ps) const override
14120   {
14121     warnings_issued = 0;
14122     return ada_parse (ps);
14123   }
14124 
14125   /* See language.h.
14126 
14127      Same as evaluate_type (*EXP), but resolves ambiguous symbol references
14128      (marked by OP_VAR_VALUE nodes in which the symbol has an undefined
14129      namespace) and converts operators that are user-defined into
14130      appropriate function calls.  If CONTEXT_TYPE is non-null, it provides
14131      a preferred result type [at the moment, only type void has any
14132      effect---causing procedures to be preferred over functions in calls].
14133      A null CONTEXT_TYPE indicates that a non-void return type is
14134      preferred.  May change (expand) *EXP.  */
14135 
14136   void post_parser (expression_up *expp, int void_context_p, int completing,
14137 		    innermost_block_tracker *tracker) const override
14138   {
14139     struct type *context_type = NULL;
14140     int pc = 0;
14141 
14142     if (void_context_p)
14143       context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
14144 
14145     resolve_subexp (expp, &pc, 1, context_type, completing, tracker);
14146   }
14147 
14148   /* See language.h.  */
14149 
14150   void emitchar (int ch, struct type *chtype,
14151 		 struct ui_file *stream, int quoter) const override
14152   {
14153     ada_emit_char (ch, chtype, stream, quoter, 1);
14154   }
14155 
14156   /* See language.h.  */
14157 
14158   void printchar (int ch, struct type *chtype,
14159 		  struct ui_file *stream) const override
14160   {
14161     ada_printchar (ch, chtype, stream);
14162   }
14163 
14164   /* See language.h.  */
14165 
14166   void printstr (struct ui_file *stream, struct type *elttype,
14167 		 const gdb_byte *string, unsigned int length,
14168 		 const char *encoding, int force_ellipses,
14169 		 const struct value_print_options *options) const override
14170   {
14171     ada_printstr (stream, elttype, string, length, encoding,
14172 		  force_ellipses, options);
14173   }
14174 
14175   /* See language.h.  */
14176 
14177   void print_typedef (struct type *type, struct symbol *new_symbol,
14178 		      struct ui_file *stream) const override
14179   {
14180     ada_print_typedef (type, new_symbol, stream);
14181   }
14182 
14183   /* See language.h.  */
14184 
14185   bool is_string_type_p (struct type *type) const override
14186   {
14187     return ada_is_string_type (type);
14188   }
14189 
14190 
14191 protected:
14192   /* See language.h.  */
14193 
14194   symbol_name_matcher_ftype *get_symbol_name_matcher_inner
14195 	(const lookup_name_info &lookup_name) const override
14196   {
14197     return ada_get_symbol_name_matcher (lookup_name);
14198   }
14199 };
14200 
14201 /* Single instance of the Ada language class.  */
14202 
14203 static ada_language ada_language_defn;
14204 
14205 /* Command-list for the "set/show ada" prefix command.  */
14206 static struct cmd_list_element *set_ada_list;
14207 static struct cmd_list_element *show_ada_list;
14208 
14209 static void
14210 initialize_ada_catchpoint_ops (void)
14211 {
14212   struct breakpoint_ops *ops;
14213 
14214   initialize_breakpoint_ops ();
14215 
14216   ops = &catch_exception_breakpoint_ops;
14217   *ops = bkpt_breakpoint_ops;
14218   ops->allocate_location = allocate_location_exception;
14219   ops->re_set = re_set_exception;
14220   ops->check_status = check_status_exception;
14221   ops->print_it = print_it_exception;
14222   ops->print_one = print_one_exception;
14223   ops->print_mention = print_mention_exception;
14224   ops->print_recreate = print_recreate_exception;
14225 
14226   ops = &catch_exception_unhandled_breakpoint_ops;
14227   *ops = bkpt_breakpoint_ops;
14228   ops->allocate_location = allocate_location_exception;
14229   ops->re_set = re_set_exception;
14230   ops->check_status = check_status_exception;
14231   ops->print_it = print_it_exception;
14232   ops->print_one = print_one_exception;
14233   ops->print_mention = print_mention_exception;
14234   ops->print_recreate = print_recreate_exception;
14235 
14236   ops = &catch_assert_breakpoint_ops;
14237   *ops = bkpt_breakpoint_ops;
14238   ops->allocate_location = allocate_location_exception;
14239   ops->re_set = re_set_exception;
14240   ops->check_status = check_status_exception;
14241   ops->print_it = print_it_exception;
14242   ops->print_one = print_one_exception;
14243   ops->print_mention = print_mention_exception;
14244   ops->print_recreate = print_recreate_exception;
14245 
14246   ops = &catch_handlers_breakpoint_ops;
14247   *ops = bkpt_breakpoint_ops;
14248   ops->allocate_location = allocate_location_exception;
14249   ops->re_set = re_set_exception;
14250   ops->check_status = check_status_exception;
14251   ops->print_it = print_it_exception;
14252   ops->print_one = print_one_exception;
14253   ops->print_mention = print_mention_exception;
14254   ops->print_recreate = print_recreate_exception;
14255 }
14256 
14257 /* This module's 'new_objfile' observer.  */
14258 
14259 static void
14260 ada_new_objfile_observer (struct objfile *objfile)
14261 {
14262   ada_clear_symbol_cache ();
14263 }
14264 
14265 /* This module's 'free_objfile' observer.  */
14266 
14267 static void
14268 ada_free_objfile_observer (struct objfile *objfile)
14269 {
14270   ada_clear_symbol_cache ();
14271 }
14272 
14273 void _initialize_ada_language ();
14274 void
14275 _initialize_ada_language ()
14276 {
14277   initialize_ada_catchpoint_ops ();
14278 
14279   add_basic_prefix_cmd ("ada", no_class,
14280 			_("Prefix command for changing Ada-specific settings."),
14281 			&set_ada_list, "set ada ", 0, &setlist);
14282 
14283   add_show_prefix_cmd ("ada", no_class,
14284 		       _("Generic command for showing Ada-specific settings."),
14285 		       &show_ada_list, "show ada ", 0, &showlist);
14286 
14287   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14288                            &trust_pad_over_xvs, _("\
14289 Enable or disable an optimization trusting PAD types over XVS types."), _("\
14290 Show whether an optimization trusting PAD types over XVS types is activated."),
14291                            _("\
14292 This is related to the encoding used by the GNAT compiler.  The debugger\n\
14293 should normally trust the contents of PAD types, but certain older versions\n\
14294 of GNAT have a bug that sometimes causes the information in the PAD type\n\
14295 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
14296 work around this bug.  It is always safe to turn this option \"off\", but\n\
14297 this incurs a slight performance penalty, so it is recommended to NOT change\n\
14298 this option to \"off\" unless necessary."),
14299                             NULL, NULL, &set_ada_list, &show_ada_list);
14300 
14301   add_setshow_boolean_cmd ("print-signatures", class_vars,
14302 			   &print_signatures, _("\
14303 Enable or disable the output of formal and return types for functions in the \
14304 overloads selection menu."), _("\
14305 Show whether the output of formal and return types for functions in the \
14306 overloads selection menu is activated."),
14307 			   NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14308 
14309   add_catch_command ("exception", _("\
14310 Catch Ada exceptions, when raised.\n\
14311 Usage: catch exception [ARG] [if CONDITION]\n\
14312 Without any argument, stop when any Ada exception is raised.\n\
14313 If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14314 being raised does not have a handler (and will therefore lead to the task's\n\
14315 termination).\n\
14316 Otherwise, the catchpoint only stops when the name of the exception being\n\
14317 raised is the same as ARG.\n\
14318 CONDITION is a boolean expression that is evaluated to see whether the\n\
14319 exception should cause a stop."),
14320 		     catch_ada_exception_command,
14321 		     catch_ada_completer,
14322 		     CATCH_PERMANENT,
14323 		     CATCH_TEMPORARY);
14324 
14325   add_catch_command ("handlers", _("\
14326 Catch Ada exceptions, when handled.\n\
14327 Usage: catch handlers [ARG] [if CONDITION]\n\
14328 Without any argument, stop when any Ada exception is handled.\n\
14329 With an argument, catch only exceptions with the given name.\n\
14330 CONDITION is a boolean expression that is evaluated to see whether the\n\
14331 exception should cause a stop."),
14332 		     catch_ada_handlers_command,
14333                      catch_ada_completer,
14334 		     CATCH_PERMANENT,
14335 		     CATCH_TEMPORARY);
14336   add_catch_command ("assert", _("\
14337 Catch failed Ada assertions, when raised.\n\
14338 Usage: catch assert [if CONDITION]\n\
14339 CONDITION is a boolean expression that is evaluated to see whether the\n\
14340 exception should cause a stop."),
14341 		     catch_assert_command,
14342                      NULL,
14343 		     CATCH_PERMANENT,
14344 		     CATCH_TEMPORARY);
14345 
14346   varsize_limit = 65536;
14347   add_setshow_uinteger_cmd ("varsize-limit", class_support,
14348 			    &varsize_limit, _("\
14349 Set the maximum number of bytes allowed in a variable-size object."), _("\
14350 Show the maximum number of bytes allowed in a variable-size object."), _("\
14351 Attempts to access an object whose size is not a compile-time constant\n\
14352 and exceeds this limit will cause an error."),
14353 			    NULL, NULL, &setlist, &showlist);
14354 
14355   add_info ("exceptions", info_exceptions_command,
14356 	    _("\
14357 List all Ada exception names.\n\
14358 Usage: info exceptions [REGEXP]\n\
14359 If a regular expression is passed as an argument, only those matching\n\
14360 the regular expression are listed."));
14361 
14362   add_basic_prefix_cmd ("ada", class_maintenance,
14363 			_("Set Ada maintenance-related variables."),
14364 			&maint_set_ada_cmdlist, "maintenance set ada ",
14365 			0/*allow-unknown*/, &maintenance_set_cmdlist);
14366 
14367   add_show_prefix_cmd ("ada", class_maintenance,
14368 		       _("Show Ada maintenance-related variables."),
14369 		       &maint_show_ada_cmdlist, "maintenance show ada ",
14370 		       0/*allow-unknown*/, &maintenance_show_cmdlist);
14371 
14372   add_setshow_boolean_cmd
14373     ("ignore-descriptive-types", class_maintenance,
14374      &ada_ignore_descriptive_types_p,
14375      _("Set whether descriptive types generated by GNAT should be ignored."),
14376      _("Show whether descriptive types generated by GNAT should be ignored."),
14377      _("\
14378 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14379 DWARF attribute."),
14380      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14381 
14382   decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14383 					   NULL, xcalloc, xfree);
14384 
14385   /* The ada-lang observers.  */
14386   gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14387   gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14388   gdb::observers::inferior_exit.attach (ada_inferior_exit);
14389 }
14390