xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/ada-lang.c (revision 212397c69a103ae7e5eafa8731ddfae671d2dee7)
1 /* Ada language support routines for GDB, the GNU debugger.
2 
3    Copyright (C) 1992-2015 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 "demangle.h"
24 #include "gdb_regex.h"
25 #include "frame.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "gdbcmd.h"
29 #include "expression.h"
30 #include "parser-defs.h"
31 #include "language.h"
32 #include "varobj.h"
33 #include "c-lang.h"
34 #include "inferior.h"
35 #include "symfile.h"
36 #include "objfiles.h"
37 #include "breakpoint.h"
38 #include "gdbcore.h"
39 #include "hashtab.h"
40 #include "gdb_obstack.h"
41 #include "ada-lang.h"
42 #include "completer.h"
43 #include <sys/stat.h>
44 #include "ui-out.h"
45 #include "block.h"
46 #include "infcall.h"
47 #include "dictionary.h"
48 #include "annotate.h"
49 #include "valprint.h"
50 #include "source.h"
51 #include "observer.h"
52 #include "vec.h"
53 #include "stack.h"
54 #include "gdb_vecs.h"
55 #include "typeprint.h"
56 
57 #include "psymtab.h"
58 #include "value.h"
59 #include "mi/mi-common.h"
60 #include "arch-utils.h"
61 #include "cli/cli-utils.h"
62 
63 /* Define whether or not the C operator '/' truncates towards zero for
64    differently signed operands (truncation direction is undefined in C).
65    Copied from valarith.c.  */
66 
67 #ifndef TRUNCATION_TOWARDS_ZERO
68 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
69 #endif
70 
71 static struct type *desc_base_type (struct type *);
72 
73 static struct type *desc_bounds_type (struct type *);
74 
75 static struct value *desc_bounds (struct value *);
76 
77 static int fat_pntr_bounds_bitpos (struct type *);
78 
79 static int fat_pntr_bounds_bitsize (struct type *);
80 
81 static struct type *desc_data_target_type (struct type *);
82 
83 static struct value *desc_data (struct value *);
84 
85 static int fat_pntr_data_bitpos (struct type *);
86 
87 static int fat_pntr_data_bitsize (struct type *);
88 
89 static struct value *desc_one_bound (struct value *, int, int);
90 
91 static int desc_bound_bitpos (struct type *, int, int);
92 
93 static int desc_bound_bitsize (struct type *, int, int);
94 
95 static struct type *desc_index_type (struct type *, int);
96 
97 static int desc_arity (struct type *);
98 
99 static int ada_type_match (struct type *, struct type *, int);
100 
101 static int ada_args_match (struct symbol *, struct value **, int);
102 
103 static int full_match (const char *, const char *);
104 
105 static struct value *make_array_descriptor (struct type *, struct value *);
106 
107 static void ada_add_block_symbols (struct obstack *,
108                                    const struct block *, const char *,
109                                    domain_enum, struct objfile *, int);
110 
111 static int is_nonfunction (struct ada_symbol_info *, int);
112 
113 static void add_defn_to_vec (struct obstack *, struct symbol *,
114                              const struct block *);
115 
116 static int num_defns_collected (struct obstack *);
117 
118 static struct ada_symbol_info *defns_collected (struct obstack *, int);
119 
120 static struct value *resolve_subexp (struct expression **, int *, int,
121                                      struct type *);
122 
123 static void replace_operator_with_call (struct expression **, int, int, int,
124                                         struct symbol *, const struct block *);
125 
126 static int possible_user_operator_p (enum exp_opcode, struct value **);
127 
128 static char *ada_op_name (enum exp_opcode);
129 
130 static const char *ada_decoded_op_name (enum exp_opcode);
131 
132 static int numeric_type_p (struct type *);
133 
134 static int integer_type_p (struct type *);
135 
136 static int scalar_type_p (struct type *);
137 
138 static int discrete_type_p (struct type *);
139 
140 static enum ada_renaming_category parse_old_style_renaming (struct type *,
141 							    const char **,
142 							    int *,
143 							    const char **);
144 
145 static struct symbol *find_old_style_renaming_symbol (const char *,
146 						      const struct block *);
147 
148 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
149                                                 int, int, int *);
150 
151 static struct value *evaluate_subexp_type (struct expression *, int *);
152 
153 static struct type *ada_find_parallel_type_with_name (struct type *,
154                                                       const char *);
155 
156 static int is_dynamic_field (struct type *, int);
157 
158 static struct type *to_fixed_variant_branch_type (struct type *,
159 						  const gdb_byte *,
160                                                   CORE_ADDR, struct value *);
161 
162 static struct type *to_fixed_array_type (struct type *, struct value *, int);
163 
164 static struct type *to_fixed_range_type (struct type *, struct value *);
165 
166 static struct type *to_static_fixed_type (struct type *);
167 static struct type *static_unwrap_type (struct type *type);
168 
169 static struct value *unwrap_value (struct value *);
170 
171 static struct type *constrained_packed_array_type (struct type *, long *);
172 
173 static struct type *decode_constrained_packed_array_type (struct type *);
174 
175 static long decode_packed_array_bitsize (struct type *);
176 
177 static struct value *decode_constrained_packed_array (struct value *);
178 
179 static int ada_is_packed_array_type  (struct type *);
180 
181 static int ada_is_unconstrained_packed_array_type (struct type *);
182 
183 static struct value *value_subscript_packed (struct value *, int,
184                                              struct value **);
185 
186 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
187 
188 static struct value *coerce_unspec_val_to_type (struct value *,
189                                                 struct type *);
190 
191 static struct value *get_var_value (char *, char *);
192 
193 static int lesseq_defined_than (struct symbol *, struct symbol *);
194 
195 static int equiv_types (struct type *, struct type *);
196 
197 static int is_name_suffix (const char *);
198 
199 static int advance_wild_match (const char **, const char *, int);
200 
201 static int wild_match (const char *, const char *);
202 
203 static struct value *ada_coerce_ref (struct value *);
204 
205 static LONGEST pos_atr (struct value *);
206 
207 static struct value *value_pos_atr (struct type *, struct value *);
208 
209 static struct value *value_val_atr (struct type *, struct value *);
210 
211 static struct symbol *standard_lookup (const char *, const struct block *,
212                                        domain_enum);
213 
214 static struct value *ada_search_struct_field (char *, struct value *, int,
215                                               struct type *);
216 
217 static struct value *ada_value_primitive_field (struct value *, int, int,
218                                                 struct type *);
219 
220 static int find_struct_field (const char *, struct type *, int,
221                               struct type **, int *, int *, int *, int *);
222 
223 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
224                                                 struct value *);
225 
226 static int ada_resolve_function (struct ada_symbol_info *, int,
227                                  struct value **, int, const char *,
228                                  struct type *);
229 
230 static int ada_is_direct_array_type (struct type *);
231 
232 static void ada_language_arch_info (struct gdbarch *,
233 				    struct language_arch_info *);
234 
235 static struct value *ada_index_struct_field (int, struct value *, int,
236 					     struct type *);
237 
238 static struct value *assign_aggregate (struct value *, struct value *,
239 				       struct expression *,
240 				       int *, enum noside);
241 
242 static void aggregate_assign_from_choices (struct value *, struct value *,
243 					   struct expression *,
244 					   int *, LONGEST *, int *,
245 					   int, LONGEST, LONGEST);
246 
247 static void aggregate_assign_positional (struct value *, struct value *,
248 					 struct expression *,
249 					 int *, LONGEST *, int *, int,
250 					 LONGEST, LONGEST);
251 
252 
253 static void aggregate_assign_others (struct value *, struct value *,
254 				     struct expression *,
255 				     int *, LONGEST *, int, LONGEST, LONGEST);
256 
257 
258 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
259 
260 
261 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
262 					  int *, enum noside);
263 
264 static void ada_forward_operator_length (struct expression *, int, int *,
265 					 int *);
266 
267 static struct type *ada_find_any_type (const char *name);
268 
269 
270 /* The result of a symbol lookup to be stored in our symbol cache.  */
271 
272 struct cache_entry
273 {
274   /* The name used to perform the lookup.  */
275   const char *name;
276   /* The namespace used during the lookup.  */
277   domain_enum namespace;
278   /* The symbol returned by the lookup, or NULL if no matching symbol
279      was found.  */
280   struct symbol *sym;
281   /* The block where the symbol was found, or NULL if no matching
282      symbol was found.  */
283   const struct block *block;
284   /* A pointer to the next entry with the same hash.  */
285   struct cache_entry *next;
286 };
287 
288 /* The Ada symbol cache, used to store the result of Ada-mode symbol
289    lookups in the course of executing the user's commands.
290 
291    The cache is implemented using a simple, fixed-sized hash.
292    The size is fixed on the grounds that there are not likely to be
293    all that many symbols looked up during any given session, regardless
294    of the size of the symbol table.  If we decide to go to a resizable
295    table, let's just use the stuff from libiberty instead.  */
296 
297 #define HASH_SIZE 1009
298 
299 struct ada_symbol_cache
300 {
301   /* An obstack used to store the entries in our cache.  */
302   struct obstack cache_space;
303 
304   /* The root of the hash table used to implement our symbol cache.  */
305   struct cache_entry *root[HASH_SIZE];
306 };
307 
308 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
309 
310 /* Maximum-sized dynamic type.  */
311 static unsigned int varsize_limit;
312 
313 /* FIXME: brobecker/2003-09-17: No longer a const because it is
314    returned by a function that does not return a const char *.  */
315 static char *ada_completer_word_break_characters =
316 #ifdef VMS
317   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
318 #else
319   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
320 #endif
321 
322 /* The name of the symbol to use to get the name of the main subprogram.  */
323 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
324   = "__gnat_ada_main_program_name";
325 
326 /* Limit on the number of warnings to raise per expression evaluation.  */
327 static int warning_limit = 2;
328 
329 /* Number of warning messages issued; reset to 0 by cleanups after
330    expression evaluation.  */
331 static int warnings_issued = 0;
332 
333 static const char *known_runtime_file_name_patterns[] = {
334   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
335 };
336 
337 static const char *known_auxiliary_function_name_patterns[] = {
338   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
339 };
340 
341 /* Space for allocating results of ada_lookup_symbol_list.  */
342 static struct obstack symbol_list_obstack;
343 
344 /* Maintenance-related settings for this module.  */
345 
346 static struct cmd_list_element *maint_set_ada_cmdlist;
347 static struct cmd_list_element *maint_show_ada_cmdlist;
348 
349 /* Implement the "maintenance set ada" (prefix) command.  */
350 
351 static void
352 maint_set_ada_cmd (char *args, int from_tty)
353 {
354   help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
355 	     gdb_stdout);
356 }
357 
358 /* Implement the "maintenance show ada" (prefix) command.  */
359 
360 static void
361 maint_show_ada_cmd (char *args, int from_tty)
362 {
363   cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
364 }
365 
366 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
367 
368 static int ada_ignore_descriptive_types_p = 0;
369 
370 			/* Inferior-specific data.  */
371 
372 /* Per-inferior data for this module.  */
373 
374 struct ada_inferior_data
375 {
376   /* The ada__tags__type_specific_data type, which is used when decoding
377      tagged types.  With older versions of GNAT, this type was directly
378      accessible through a component ("tsd") in the object tag.  But this
379      is no longer the case, so we cache it for each inferior.  */
380   struct type *tsd_type;
381 
382   /* The exception_support_info data.  This data is used to determine
383      how to implement support for Ada exception catchpoints in a given
384      inferior.  */
385   const struct exception_support_info *exception_info;
386 };
387 
388 /* Our key to this module's inferior data.  */
389 static const struct inferior_data *ada_inferior_data;
390 
391 /* A cleanup routine for our inferior data.  */
392 static void
393 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
394 {
395   struct ada_inferior_data *data;
396 
397   data = inferior_data (inf, ada_inferior_data);
398   if (data != NULL)
399     xfree (data);
400 }
401 
402 /* Return our inferior data for the given inferior (INF).
403 
404    This function always returns a valid pointer to an allocated
405    ada_inferior_data structure.  If INF's inferior data has not
406    been previously set, this functions creates a new one with all
407    fields set to zero, sets INF's inferior to it, and then returns
408    a pointer to that newly allocated ada_inferior_data.  */
409 
410 static struct ada_inferior_data *
411 get_ada_inferior_data (struct inferior *inf)
412 {
413   struct ada_inferior_data *data;
414 
415   data = inferior_data (inf, ada_inferior_data);
416   if (data == NULL)
417     {
418       data = XCNEW (struct ada_inferior_data);
419       set_inferior_data (inf, ada_inferior_data, data);
420     }
421 
422   return data;
423 }
424 
425 /* Perform all necessary cleanups regarding our module's inferior data
426    that is required after the inferior INF just exited.  */
427 
428 static void
429 ada_inferior_exit (struct inferior *inf)
430 {
431   ada_inferior_data_cleanup (inf, NULL);
432   set_inferior_data (inf, ada_inferior_data, NULL);
433 }
434 
435 
436 			/* program-space-specific data.  */
437 
438 /* This module's per-program-space data.  */
439 struct ada_pspace_data
440 {
441   /* The Ada symbol cache.  */
442   struct ada_symbol_cache *sym_cache;
443 };
444 
445 /* Key to our per-program-space data.  */
446 static const struct program_space_data *ada_pspace_data_handle;
447 
448 /* Return this module's data for the given program space (PSPACE).
449    If not is found, add a zero'ed one now.
450 
451    This function always returns a valid object.  */
452 
453 static struct ada_pspace_data *
454 get_ada_pspace_data (struct program_space *pspace)
455 {
456   struct ada_pspace_data *data;
457 
458   data = program_space_data (pspace, ada_pspace_data_handle);
459   if (data == NULL)
460     {
461       data = XCNEW (struct ada_pspace_data);
462       set_program_space_data (pspace, ada_pspace_data_handle, data);
463     }
464 
465   return data;
466 }
467 
468 /* The cleanup callback for this module's per-program-space data.  */
469 
470 static void
471 ada_pspace_data_cleanup (struct program_space *pspace, void *data)
472 {
473   struct ada_pspace_data *pspace_data = data;
474 
475   if (pspace_data->sym_cache != NULL)
476     ada_free_symbol_cache (pspace_data->sym_cache);
477   xfree (pspace_data);
478 }
479 
480                         /* Utilities */
481 
482 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
483    all typedef layers have been peeled.  Otherwise, return TYPE.
484 
485    Normally, we really expect a typedef type to only have 1 typedef layer.
486    In other words, we really expect the target type of a typedef type to be
487    a non-typedef type.  This is particularly true for Ada units, because
488    the language does not have a typedef vs not-typedef distinction.
489    In that respect, the Ada compiler has been trying to eliminate as many
490    typedef definitions in the debugging information, since they generally
491    do not bring any extra information (we still use typedef under certain
492    circumstances related mostly to the GNAT encoding).
493 
494    Unfortunately, we have seen situations where the debugging information
495    generated by the compiler leads to such multiple typedef layers.  For
496    instance, consider the following example with stabs:
497 
498      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
499      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
500 
501    This is an error in the debugging information which causes type
502    pck__float_array___XUP to be defined twice, and the second time,
503    it is defined as a typedef of a typedef.
504 
505    This is on the fringe of legality as far as debugging information is
506    concerned, and certainly unexpected.  But it is easy to handle these
507    situations correctly, so we can afford to be lenient in this case.  */
508 
509 static struct type *
510 ada_typedef_target_type (struct type *type)
511 {
512   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
513     type = TYPE_TARGET_TYPE (type);
514   return type;
515 }
516 
517 /* Given DECODED_NAME a string holding a symbol name in its
518    decoded form (ie using the Ada dotted notation), returns
519    its unqualified name.  */
520 
521 static const char *
522 ada_unqualified_name (const char *decoded_name)
523 {
524   const char *result;
525 
526   /* If the decoded name starts with '<', it means that the encoded
527      name does not follow standard naming conventions, and thus that
528      it is not your typical Ada symbol name.  Trying to unqualify it
529      is therefore pointless and possibly erroneous.  */
530   if (decoded_name[0] == '<')
531     return decoded_name;
532 
533   result = strrchr (decoded_name, '.');
534   if (result != NULL)
535     result++;                   /* Skip the dot...  */
536   else
537     result = decoded_name;
538 
539   return result;
540 }
541 
542 /* Return a string starting with '<', followed by STR, and '>'.
543    The result is good until the next call.  */
544 
545 static char *
546 add_angle_brackets (const char *str)
547 {
548   static char *result = NULL;
549 
550   xfree (result);
551   result = xstrprintf ("<%s>", str);
552   return result;
553 }
554 
555 static char *
556 ada_get_gdb_completer_word_break_characters (void)
557 {
558   return ada_completer_word_break_characters;
559 }
560 
561 /* Print an array element index using the Ada syntax.  */
562 
563 static void
564 ada_print_array_index (struct value *index_value, struct ui_file *stream,
565                        const struct value_print_options *options)
566 {
567   LA_VALUE_PRINT (index_value, stream, options);
568   fprintf_filtered (stream, " => ");
569 }
570 
571 /* Assuming VECT points to an array of *SIZE objects of size
572    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
573    updating *SIZE as necessary and returning the (new) array.  */
574 
575 void *
576 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
577 {
578   if (*size < min_size)
579     {
580       *size *= 2;
581       if (*size < min_size)
582         *size = min_size;
583       vect = xrealloc (vect, *size * element_size);
584     }
585   return vect;
586 }
587 
588 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
589    suffix of FIELD_NAME beginning "___".  */
590 
591 static int
592 field_name_match (const char *field_name, const char *target)
593 {
594   int len = strlen (target);
595 
596   return
597     (strncmp (field_name, target, len) == 0
598      && (field_name[len] == '\0'
599          || (strncmp (field_name + len, "___", 3) == 0
600              && strcmp (field_name + strlen (field_name) - 6,
601                         "___XVN") != 0)));
602 }
603 
604 
605 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
606    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
607    and return its index.  This function also handles fields whose name
608    have ___ suffixes because the compiler sometimes alters their name
609    by adding such a suffix to represent fields with certain constraints.
610    If the field could not be found, return a negative number if
611    MAYBE_MISSING is set.  Otherwise raise an error.  */
612 
613 int
614 ada_get_field_index (const struct type *type, const char *field_name,
615                      int maybe_missing)
616 {
617   int fieldno;
618   struct type *struct_type = check_typedef ((struct type *) type);
619 
620   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
621     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
622       return fieldno;
623 
624   if (!maybe_missing)
625     error (_("Unable to find field %s in struct %s.  Aborting"),
626            field_name, TYPE_NAME (struct_type));
627 
628   return -1;
629 }
630 
631 /* The length of the prefix of NAME prior to any "___" suffix.  */
632 
633 int
634 ada_name_prefix_len (const char *name)
635 {
636   if (name == NULL)
637     return 0;
638   else
639     {
640       const char *p = strstr (name, "___");
641 
642       if (p == NULL)
643         return strlen (name);
644       else
645         return p - name;
646     }
647 }
648 
649 /* Return non-zero if SUFFIX is a suffix of STR.
650    Return zero if STR is null.  */
651 
652 static int
653 is_suffix (const char *str, const char *suffix)
654 {
655   int len1, len2;
656 
657   if (str == NULL)
658     return 0;
659   len1 = strlen (str);
660   len2 = strlen (suffix);
661   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
662 }
663 
664 /* The contents of value VAL, treated as a value of type TYPE.  The
665    result is an lval in memory if VAL is.  */
666 
667 static struct value *
668 coerce_unspec_val_to_type (struct value *val, struct type *type)
669 {
670   type = ada_check_typedef (type);
671   if (value_type (val) == type)
672     return val;
673   else
674     {
675       struct value *result;
676 
677       /* Make sure that the object size is not unreasonable before
678          trying to allocate some memory for it.  */
679       ada_ensure_varsize_limit (type);
680 
681       if (value_lazy (val)
682           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
683 	result = allocate_value_lazy (type);
684       else
685 	{
686 	  result = allocate_value (type);
687 	  value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
688 	}
689       set_value_component_location (result, val);
690       set_value_bitsize (result, value_bitsize (val));
691       set_value_bitpos (result, value_bitpos (val));
692       set_value_address (result, value_address (val));
693       return result;
694     }
695 }
696 
697 static const gdb_byte *
698 cond_offset_host (const gdb_byte *valaddr, long offset)
699 {
700   if (valaddr == NULL)
701     return NULL;
702   else
703     return valaddr + offset;
704 }
705 
706 static CORE_ADDR
707 cond_offset_target (CORE_ADDR address, long offset)
708 {
709   if (address == 0)
710     return 0;
711   else
712     return address + offset;
713 }
714 
715 /* Issue a warning (as for the definition of warning in utils.c, but
716    with exactly one argument rather than ...), unless the limit on the
717    number of warnings has passed during the evaluation of the current
718    expression.  */
719 
720 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
721    provided by "complaint".  */
722 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
723 
724 static void
725 lim_warning (const char *format, ...)
726 {
727   va_list args;
728 
729   va_start (args, format);
730   warnings_issued += 1;
731   if (warnings_issued <= warning_limit)
732     vwarning (format, args);
733 
734   va_end (args);
735 }
736 
737 /* Issue an error if the size of an object of type T is unreasonable,
738    i.e. if it would be a bad idea to allocate a value of this type in
739    GDB.  */
740 
741 void
742 ada_ensure_varsize_limit (const struct type *type)
743 {
744   if (TYPE_LENGTH (type) > varsize_limit)
745     error (_("object size is larger than varsize-limit"));
746 }
747 
748 /* Maximum value of a SIZE-byte signed integer type.  */
749 static LONGEST
750 max_of_size (int size)
751 {
752   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
753 
754   return top_bit | (top_bit - 1);
755 }
756 
757 /* Minimum value of a SIZE-byte signed integer type.  */
758 static LONGEST
759 min_of_size (int size)
760 {
761   return -max_of_size (size) - 1;
762 }
763 
764 /* Maximum value of a SIZE-byte unsigned integer type.  */
765 static ULONGEST
766 umax_of_size (int size)
767 {
768   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
769 
770   return top_bit | (top_bit - 1);
771 }
772 
773 /* Maximum value of integral type T, as a signed quantity.  */
774 static LONGEST
775 max_of_type (struct type *t)
776 {
777   if (TYPE_UNSIGNED (t))
778     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
779   else
780     return max_of_size (TYPE_LENGTH (t));
781 }
782 
783 /* Minimum value of integral type T, as a signed quantity.  */
784 static LONGEST
785 min_of_type (struct type *t)
786 {
787   if (TYPE_UNSIGNED (t))
788     return 0;
789   else
790     return min_of_size (TYPE_LENGTH (t));
791 }
792 
793 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
794 LONGEST
795 ada_discrete_type_high_bound (struct type *type)
796 {
797   type = resolve_dynamic_type (type, 0);
798   switch (TYPE_CODE (type))
799     {
800     case TYPE_CODE_RANGE:
801       return TYPE_HIGH_BOUND (type);
802     case TYPE_CODE_ENUM:
803       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
804     case TYPE_CODE_BOOL:
805       return 1;
806     case TYPE_CODE_CHAR:
807     case TYPE_CODE_INT:
808       return max_of_type (type);
809     default:
810       error (_("Unexpected type in ada_discrete_type_high_bound."));
811     }
812 }
813 
814 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
815 LONGEST
816 ada_discrete_type_low_bound (struct type *type)
817 {
818   type = resolve_dynamic_type (type, 0);
819   switch (TYPE_CODE (type))
820     {
821     case TYPE_CODE_RANGE:
822       return TYPE_LOW_BOUND (type);
823     case TYPE_CODE_ENUM:
824       return TYPE_FIELD_ENUMVAL (type, 0);
825     case TYPE_CODE_BOOL:
826       return 0;
827     case TYPE_CODE_CHAR:
828     case TYPE_CODE_INT:
829       return min_of_type (type);
830     default:
831       error (_("Unexpected type in ada_discrete_type_low_bound."));
832     }
833 }
834 
835 /* The identity on non-range types.  For range types, the underlying
836    non-range scalar type.  */
837 
838 static struct type *
839 get_base_type (struct type *type)
840 {
841   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
842     {
843       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
844         return type;
845       type = TYPE_TARGET_TYPE (type);
846     }
847   return type;
848 }
849 
850 /* Return a decoded version of the given VALUE.  This means returning
851    a value whose type is obtained by applying all the GNAT-specific
852    encondings, making the resulting type a static but standard description
853    of the initial type.  */
854 
855 struct value *
856 ada_get_decoded_value (struct value *value)
857 {
858   struct type *type = ada_check_typedef (value_type (value));
859 
860   if (ada_is_array_descriptor_type (type)
861       || (ada_is_constrained_packed_array_type (type)
862           && TYPE_CODE (type) != TYPE_CODE_PTR))
863     {
864       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
865         value = ada_coerce_to_simple_array_ptr (value);
866       else
867         value = ada_coerce_to_simple_array (value);
868     }
869   else
870     value = ada_to_fixed_value (value);
871 
872   return value;
873 }
874 
875 /* Same as ada_get_decoded_value, but with the given TYPE.
876    Because there is no associated actual value for this type,
877    the resulting type might be a best-effort approximation in
878    the case of dynamic types.  */
879 
880 struct type *
881 ada_get_decoded_type (struct type *type)
882 {
883   type = to_static_fixed_type (type);
884   if (ada_is_constrained_packed_array_type (type))
885     type = ada_coerce_to_simple_array_type (type);
886   return type;
887 }
888 
889 
890 
891                                 /* Language Selection */
892 
893 /* If the main program is in Ada, return language_ada, otherwise return LANG
894    (the main program is in Ada iif the adainit symbol is found).  */
895 
896 enum language
897 ada_update_initial_language (enum language lang)
898 {
899   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
900                              (struct objfile *) NULL).minsym != NULL)
901     return language_ada;
902 
903   return lang;
904 }
905 
906 /* If the main procedure is written in Ada, then return its name.
907    The result is good until the next call.  Return NULL if the main
908    procedure doesn't appear to be in Ada.  */
909 
910 char *
911 ada_main_name (void)
912 {
913   struct bound_minimal_symbol msym;
914   static char *main_program_name = NULL;
915 
916   /* For Ada, the name of the main procedure is stored in a specific
917      string constant, generated by the binder.  Look for that symbol,
918      extract its address, and then read that string.  If we didn't find
919      that string, then most probably the main procedure is not written
920      in Ada.  */
921   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
922 
923   if (msym.minsym != NULL)
924     {
925       CORE_ADDR main_program_name_addr;
926       int err_code;
927 
928       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
929       if (main_program_name_addr == 0)
930         error (_("Invalid address for Ada main program name."));
931 
932       xfree (main_program_name);
933       target_read_string (main_program_name_addr, &main_program_name,
934                           1024, &err_code);
935 
936       if (err_code != 0)
937         return NULL;
938       return main_program_name;
939     }
940 
941   /* The main procedure doesn't seem to be in Ada.  */
942   return NULL;
943 }
944 
945                                 /* Symbols */
946 
947 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
948    of NULLs.  */
949 
950 const struct ada_opname_map ada_opname_table[] = {
951   {"Oadd", "\"+\"", BINOP_ADD},
952   {"Osubtract", "\"-\"", BINOP_SUB},
953   {"Omultiply", "\"*\"", BINOP_MUL},
954   {"Odivide", "\"/\"", BINOP_DIV},
955   {"Omod", "\"mod\"", BINOP_MOD},
956   {"Orem", "\"rem\"", BINOP_REM},
957   {"Oexpon", "\"**\"", BINOP_EXP},
958   {"Olt", "\"<\"", BINOP_LESS},
959   {"Ole", "\"<=\"", BINOP_LEQ},
960   {"Ogt", "\">\"", BINOP_GTR},
961   {"Oge", "\">=\"", BINOP_GEQ},
962   {"Oeq", "\"=\"", BINOP_EQUAL},
963   {"One", "\"/=\"", BINOP_NOTEQUAL},
964   {"Oand", "\"and\"", BINOP_BITWISE_AND},
965   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
966   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
967   {"Oconcat", "\"&\"", BINOP_CONCAT},
968   {"Oabs", "\"abs\"", UNOP_ABS},
969   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
970   {"Oadd", "\"+\"", UNOP_PLUS},
971   {"Osubtract", "\"-\"", UNOP_NEG},
972   {NULL, NULL}
973 };
974 
975 /* The "encoded" form of DECODED, according to GNAT conventions.
976    The result is valid until the next call to ada_encode.  */
977 
978 char *
979 ada_encode (const char *decoded)
980 {
981   static char *encoding_buffer = NULL;
982   static size_t encoding_buffer_size = 0;
983   const char *p;
984   int k;
985 
986   if (decoded == NULL)
987     return NULL;
988 
989   GROW_VECT (encoding_buffer, encoding_buffer_size,
990              2 * strlen (decoded) + 10);
991 
992   k = 0;
993   for (p = decoded; *p != '\0'; p += 1)
994     {
995       if (*p == '.')
996         {
997           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
998           k += 2;
999         }
1000       else if (*p == '"')
1001         {
1002           const struct ada_opname_map *mapping;
1003 
1004           for (mapping = ada_opname_table;
1005                mapping->encoded != NULL
1006                && strncmp (mapping->decoded, p,
1007                            strlen (mapping->decoded)) != 0; mapping += 1)
1008             ;
1009           if (mapping->encoded == NULL)
1010             error (_("invalid Ada operator name: %s"), p);
1011           strcpy (encoding_buffer + k, mapping->encoded);
1012           k += strlen (mapping->encoded);
1013           break;
1014         }
1015       else
1016         {
1017           encoding_buffer[k] = *p;
1018           k += 1;
1019         }
1020     }
1021 
1022   encoding_buffer[k] = '\0';
1023   return encoding_buffer;
1024 }
1025 
1026 /* Return NAME folded to lower case, or, if surrounded by single
1027    quotes, unfolded, but with the quotes stripped away.  Result good
1028    to next call.  */
1029 
1030 char *
1031 ada_fold_name (const char *name)
1032 {
1033   static char *fold_buffer = NULL;
1034   static size_t fold_buffer_size = 0;
1035 
1036   int len = strlen (name);
1037   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1038 
1039   if (name[0] == '\'')
1040     {
1041       strncpy (fold_buffer, name + 1, len - 2);
1042       fold_buffer[len - 2] = '\000';
1043     }
1044   else
1045     {
1046       int i;
1047 
1048       for (i = 0; i <= len; i += 1)
1049         fold_buffer[i] = tolower (name[i]);
1050     }
1051 
1052   return fold_buffer;
1053 }
1054 
1055 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1056 
1057 static int
1058 is_lower_alphanum (const char c)
1059 {
1060   return (isdigit (c) || (isalpha (c) && islower (c)));
1061 }
1062 
1063 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1064    This function saves in LEN the length of that same symbol name but
1065    without either of these suffixes:
1066      . .{DIGIT}+
1067      . ${DIGIT}+
1068      . ___{DIGIT}+
1069      . __{DIGIT}+.
1070 
1071    These are suffixes introduced by the compiler for entities such as
1072    nested subprogram for instance, in order to avoid name clashes.
1073    They do not serve any purpose for the debugger.  */
1074 
1075 static void
1076 ada_remove_trailing_digits (const char *encoded, int *len)
1077 {
1078   if (*len > 1 && isdigit (encoded[*len - 1]))
1079     {
1080       int i = *len - 2;
1081 
1082       while (i > 0 && isdigit (encoded[i]))
1083         i--;
1084       if (i >= 0 && encoded[i] == '.')
1085         *len = i;
1086       else if (i >= 0 && encoded[i] == '$')
1087         *len = i;
1088       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
1089         *len = i - 2;
1090       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
1091         *len = i - 1;
1092     }
1093 }
1094 
1095 /* Remove the suffix introduced by the compiler for protected object
1096    subprograms.  */
1097 
1098 static void
1099 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1100 {
1101   /* Remove trailing N.  */
1102 
1103   /* Protected entry subprograms are broken into two
1104      separate subprograms: The first one is unprotected, and has
1105      a 'N' suffix; the second is the protected version, and has
1106      the 'P' suffix.  The second calls the first one after handling
1107      the protection.  Since the P subprograms are internally generated,
1108      we leave these names undecoded, giving the user a clue that this
1109      entity is internal.  */
1110 
1111   if (*len > 1
1112       && encoded[*len - 1] == 'N'
1113       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1114     *len = *len - 1;
1115 }
1116 
1117 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1118 
1119 static void
1120 ada_remove_Xbn_suffix (const char *encoded, int *len)
1121 {
1122   int i = *len - 1;
1123 
1124   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1125     i--;
1126 
1127   if (encoded[i] != 'X')
1128     return;
1129 
1130   if (i == 0)
1131     return;
1132 
1133   if (isalnum (encoded[i-1]))
1134     *len = i;
1135 }
1136 
1137 /* If ENCODED follows the GNAT entity encoding conventions, then return
1138    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1139    replaced by ENCODED.
1140 
1141    The resulting string is valid until the next call of ada_decode.
1142    If the string is unchanged by decoding, the original string pointer
1143    is returned.  */
1144 
1145 const char *
1146 ada_decode (const char *encoded)
1147 {
1148   int i, j;
1149   int len0;
1150   const char *p;
1151   char *decoded;
1152   int at_start_name;
1153   static char *decoding_buffer = NULL;
1154   static size_t decoding_buffer_size = 0;
1155 
1156   /* The name of the Ada main procedure starts with "_ada_".
1157      This prefix is not part of the decoded name, so skip this part
1158      if we see this prefix.  */
1159   if (strncmp (encoded, "_ada_", 5) == 0)
1160     encoded += 5;
1161 
1162   /* If the name starts with '_', then it is not a properly encoded
1163      name, so do not attempt to decode it.  Similarly, if the name
1164      starts with '<', the name should not be decoded.  */
1165   if (encoded[0] == '_' || encoded[0] == '<')
1166     goto Suppress;
1167 
1168   len0 = strlen (encoded);
1169 
1170   ada_remove_trailing_digits (encoded, &len0);
1171   ada_remove_po_subprogram_suffix (encoded, &len0);
1172 
1173   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1174      the suffix is located before the current "end" of ENCODED.  We want
1175      to avoid re-matching parts of ENCODED that have previously been
1176      marked as discarded (by decrementing LEN0).  */
1177   p = strstr (encoded, "___");
1178   if (p != NULL && p - encoded < len0 - 3)
1179     {
1180       if (p[3] == 'X')
1181         len0 = p - encoded;
1182       else
1183         goto Suppress;
1184     }
1185 
1186   /* Remove any trailing TKB suffix.  It tells us that this symbol
1187      is for the body of a task, but that information does not actually
1188      appear in the decoded name.  */
1189 
1190   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
1191     len0 -= 3;
1192 
1193   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1194      from the TKB suffix because it is used for non-anonymous task
1195      bodies.  */
1196 
1197   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1198     len0 -= 2;
1199 
1200   /* Remove trailing "B" suffixes.  */
1201   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1202 
1203   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
1204     len0 -= 1;
1205 
1206   /* Make decoded big enough for possible expansion by operator name.  */
1207 
1208   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1209   decoded = decoding_buffer;
1210 
1211   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1212 
1213   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1214     {
1215       i = len0 - 2;
1216       while ((i >= 0 && isdigit (encoded[i]))
1217              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1218         i -= 1;
1219       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1220         len0 = i - 1;
1221       else if (encoded[i] == '$')
1222         len0 = i;
1223     }
1224 
1225   /* The first few characters that are not alphabetic are not part
1226      of any encoding we use, so we can copy them over verbatim.  */
1227 
1228   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1229     decoded[j] = encoded[i];
1230 
1231   at_start_name = 1;
1232   while (i < len0)
1233     {
1234       /* Is this a symbol function?  */
1235       if (at_start_name && encoded[i] == 'O')
1236         {
1237           int k;
1238 
1239           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1240             {
1241               int op_len = strlen (ada_opname_table[k].encoded);
1242               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1243                             op_len - 1) == 0)
1244                   && !isalnum (encoded[i + op_len]))
1245                 {
1246                   strcpy (decoded + j, ada_opname_table[k].decoded);
1247                   at_start_name = 0;
1248                   i += op_len;
1249                   j += strlen (ada_opname_table[k].decoded);
1250                   break;
1251                 }
1252             }
1253           if (ada_opname_table[k].encoded != NULL)
1254             continue;
1255         }
1256       at_start_name = 0;
1257 
1258       /* Replace "TK__" with "__", which will eventually be translated
1259          into "." (just below).  */
1260 
1261       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1262         i += 2;
1263 
1264       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1265          be translated into "." (just below).  These are internal names
1266          generated for anonymous blocks inside which our symbol is nested.  */
1267 
1268       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1269           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1270           && isdigit (encoded [i+4]))
1271         {
1272           int k = i + 5;
1273 
1274           while (k < len0 && isdigit (encoded[k]))
1275             k++;  /* Skip any extra digit.  */
1276 
1277           /* Double-check that the "__B_{DIGITS}+" sequence we found
1278              is indeed followed by "__".  */
1279           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1280             i = k;
1281         }
1282 
1283       /* Remove _E{DIGITS}+[sb] */
1284 
1285       /* Just as for protected object subprograms, there are 2 categories
1286          of subprograms created by the compiler for each entry.  The first
1287          one implements the actual entry code, and has a suffix following
1288          the convention above; the second one implements the barrier and
1289          uses the same convention as above, except that the 'E' is replaced
1290          by a 'B'.
1291 
1292          Just as above, we do not decode the name of barrier functions
1293          to give the user a clue that the code he is debugging has been
1294          internally generated.  */
1295 
1296       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1297           && isdigit (encoded[i+2]))
1298         {
1299           int k = i + 3;
1300 
1301           while (k < len0 && isdigit (encoded[k]))
1302             k++;
1303 
1304           if (k < len0
1305               && (encoded[k] == 'b' || encoded[k] == 's'))
1306             {
1307               k++;
1308               /* Just as an extra precaution, make sure that if this
1309                  suffix is followed by anything else, it is a '_'.
1310                  Otherwise, we matched this sequence by accident.  */
1311               if (k == len0
1312                   || (k < len0 && encoded[k] == '_'))
1313                 i = k;
1314             }
1315         }
1316 
1317       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1318          the GNAT front-end in protected object subprograms.  */
1319 
1320       if (i < len0 + 3
1321           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1322         {
1323           /* Backtrack a bit up until we reach either the begining of
1324              the encoded name, or "__".  Make sure that we only find
1325              digits or lowercase characters.  */
1326           const char *ptr = encoded + i - 1;
1327 
1328           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1329             ptr--;
1330           if (ptr < encoded
1331               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1332             i++;
1333         }
1334 
1335       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1336         {
1337           /* This is a X[bn]* sequence not separated from the previous
1338              part of the name with a non-alpha-numeric character (in other
1339              words, immediately following an alpha-numeric character), then
1340              verify that it is placed at the end of the encoded name.  If
1341              not, then the encoding is not valid and we should abort the
1342              decoding.  Otherwise, just skip it, it is used in body-nested
1343              package names.  */
1344           do
1345             i += 1;
1346           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1347           if (i < len0)
1348             goto Suppress;
1349         }
1350       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1351         {
1352          /* Replace '__' by '.'.  */
1353           decoded[j] = '.';
1354           at_start_name = 1;
1355           i += 2;
1356           j += 1;
1357         }
1358       else
1359         {
1360           /* It's a character part of the decoded name, so just copy it
1361              over.  */
1362           decoded[j] = encoded[i];
1363           i += 1;
1364           j += 1;
1365         }
1366     }
1367   decoded[j] = '\000';
1368 
1369   /* Decoded names should never contain any uppercase character.
1370      Double-check this, and abort the decoding if we find one.  */
1371 
1372   for (i = 0; decoded[i] != '\0'; i += 1)
1373     if (isupper (decoded[i]) || decoded[i] == ' ')
1374       goto Suppress;
1375 
1376   if (strcmp (decoded, encoded) == 0)
1377     return encoded;
1378   else
1379     return decoded;
1380 
1381 Suppress:
1382   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1383   decoded = decoding_buffer;
1384   if (encoded[0] == '<')
1385     strcpy (decoded, encoded);
1386   else
1387     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1388   return decoded;
1389 
1390 }
1391 
1392 /* Table for keeping permanent unique copies of decoded names.  Once
1393    allocated, names in this table are never released.  While this is a
1394    storage leak, it should not be significant unless there are massive
1395    changes in the set of decoded names in successive versions of a
1396    symbol table loaded during a single session.  */
1397 static struct htab *decoded_names_store;
1398 
1399 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1400    in the language-specific part of GSYMBOL, if it has not been
1401    previously computed.  Tries to save the decoded name in the same
1402    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1403    in any case, the decoded symbol has a lifetime at least that of
1404    GSYMBOL).
1405    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1406    const, but nevertheless modified to a semantically equivalent form
1407    when a decoded name is cached in it.  */
1408 
1409 const char *
1410 ada_decode_symbol (const struct general_symbol_info *arg)
1411 {
1412   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1413   const char **resultp =
1414     &gsymbol->language_specific.mangled_lang.demangled_name;
1415 
1416   if (!gsymbol->ada_mangled)
1417     {
1418       const char *decoded = ada_decode (gsymbol->name);
1419       struct obstack *obstack = gsymbol->language_specific.obstack;
1420 
1421       gsymbol->ada_mangled = 1;
1422 
1423       if (obstack != NULL)
1424 	*resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1425       else
1426         {
1427 	  /* Sometimes, we can't find a corresponding objfile, in
1428 	     which case, we put the result on the heap.  Since we only
1429 	     decode when needed, we hope this usually does not cause a
1430 	     significant memory leak (FIXME).  */
1431 
1432           char **slot = (char **) htab_find_slot (decoded_names_store,
1433                                                   decoded, INSERT);
1434 
1435           if (*slot == NULL)
1436             *slot = xstrdup (decoded);
1437           *resultp = *slot;
1438         }
1439     }
1440 
1441   return *resultp;
1442 }
1443 
1444 static char *
1445 ada_la_decode (const char *encoded, int options)
1446 {
1447   return xstrdup (ada_decode (encoded));
1448 }
1449 
1450 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1451    suffixes that encode debugging information or leading _ada_ on
1452    SYM_NAME (see is_name_suffix commentary for the debugging
1453    information that is ignored).  If WILD, then NAME need only match a
1454    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1455    either argument is NULL.  */
1456 
1457 static int
1458 match_name (const char *sym_name, const char *name, int wild)
1459 {
1460   if (sym_name == NULL || name == NULL)
1461     return 0;
1462   else if (wild)
1463     return wild_match (sym_name, name) == 0;
1464   else
1465     {
1466       int len_name = strlen (name);
1467 
1468       return (strncmp (sym_name, name, len_name) == 0
1469               && is_name_suffix (sym_name + len_name))
1470         || (strncmp (sym_name, "_ada_", 5) == 0
1471             && strncmp (sym_name + 5, name, len_name) == 0
1472             && is_name_suffix (sym_name + len_name + 5));
1473     }
1474 }
1475 
1476 
1477                                 /* Arrays */
1478 
1479 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1480    generated by the GNAT compiler to describe the index type used
1481    for each dimension of an array, check whether it follows the latest
1482    known encoding.  If not, fix it up to conform to the latest encoding.
1483    Otherwise, do nothing.  This function also does nothing if
1484    INDEX_DESC_TYPE is NULL.
1485 
1486    The GNAT encoding used to describle the array index type evolved a bit.
1487    Initially, the information would be provided through the name of each
1488    field of the structure type only, while the type of these fields was
1489    described as unspecified and irrelevant.  The debugger was then expected
1490    to perform a global type lookup using the name of that field in order
1491    to get access to the full index type description.  Because these global
1492    lookups can be very expensive, the encoding was later enhanced to make
1493    the global lookup unnecessary by defining the field type as being
1494    the full index type description.
1495 
1496    The purpose of this routine is to allow us to support older versions
1497    of the compiler by detecting the use of the older encoding, and by
1498    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1499    we essentially replace each field's meaningless type by the associated
1500    index subtype).  */
1501 
1502 void
1503 ada_fixup_array_indexes_type (struct type *index_desc_type)
1504 {
1505   int i;
1506 
1507   if (index_desc_type == NULL)
1508     return;
1509   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1510 
1511   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1512      to check one field only, no need to check them all).  If not, return
1513      now.
1514 
1515      If our INDEX_DESC_TYPE was generated using the older encoding,
1516      the field type should be a meaningless integer type whose name
1517      is not equal to the field name.  */
1518   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1519       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1520                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1521     return;
1522 
1523   /* Fixup each field of INDEX_DESC_TYPE.  */
1524   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1525    {
1526      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1527      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1528 
1529      if (raw_type)
1530        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1531    }
1532 }
1533 
1534 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1535 
1536 static char *bound_name[] = {
1537   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1538   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1539 };
1540 
1541 /* Maximum number of array dimensions we are prepared to handle.  */
1542 
1543 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1544 
1545 
1546 /* The desc_* routines return primitive portions of array descriptors
1547    (fat pointers).  */
1548 
1549 /* The descriptor or array type, if any, indicated by TYPE; removes
1550    level of indirection, if needed.  */
1551 
1552 static struct type *
1553 desc_base_type (struct type *type)
1554 {
1555   if (type == NULL)
1556     return NULL;
1557   type = ada_check_typedef (type);
1558   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1559     type = ada_typedef_target_type (type);
1560 
1561   if (type != NULL
1562       && (TYPE_CODE (type) == TYPE_CODE_PTR
1563           || TYPE_CODE (type) == TYPE_CODE_REF))
1564     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1565   else
1566     return type;
1567 }
1568 
1569 /* True iff TYPE indicates a "thin" array pointer type.  */
1570 
1571 static int
1572 is_thin_pntr (struct type *type)
1573 {
1574   return
1575     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1576     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1577 }
1578 
1579 /* The descriptor type for thin pointer type TYPE.  */
1580 
1581 static struct type *
1582 thin_descriptor_type (struct type *type)
1583 {
1584   struct type *base_type = desc_base_type (type);
1585 
1586   if (base_type == NULL)
1587     return NULL;
1588   if (is_suffix (ada_type_name (base_type), "___XVE"))
1589     return base_type;
1590   else
1591     {
1592       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1593 
1594       if (alt_type == NULL)
1595         return base_type;
1596       else
1597         return alt_type;
1598     }
1599 }
1600 
1601 /* A pointer to the array data for thin-pointer value VAL.  */
1602 
1603 static struct value *
1604 thin_data_pntr (struct value *val)
1605 {
1606   struct type *type = ada_check_typedef (value_type (val));
1607   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1608 
1609   data_type = lookup_pointer_type (data_type);
1610 
1611   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1612     return value_cast (data_type, value_copy (val));
1613   else
1614     return value_from_longest (data_type, value_address (val));
1615 }
1616 
1617 /* True iff TYPE indicates a "thick" array pointer type.  */
1618 
1619 static int
1620 is_thick_pntr (struct type *type)
1621 {
1622   type = desc_base_type (type);
1623   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1624           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1625 }
1626 
1627 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1628    pointer to one, the type of its bounds data; otherwise, NULL.  */
1629 
1630 static struct type *
1631 desc_bounds_type (struct type *type)
1632 {
1633   struct type *r;
1634 
1635   type = desc_base_type (type);
1636 
1637   if (type == NULL)
1638     return NULL;
1639   else if (is_thin_pntr (type))
1640     {
1641       type = thin_descriptor_type (type);
1642       if (type == NULL)
1643         return NULL;
1644       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1645       if (r != NULL)
1646         return ada_check_typedef (r);
1647     }
1648   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1649     {
1650       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1651       if (r != NULL)
1652         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1653     }
1654   return NULL;
1655 }
1656 
1657 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1658    one, a pointer to its bounds data.   Otherwise NULL.  */
1659 
1660 static struct value *
1661 desc_bounds (struct value *arr)
1662 {
1663   struct type *type = ada_check_typedef (value_type (arr));
1664 
1665   if (is_thin_pntr (type))
1666     {
1667       struct type *bounds_type =
1668         desc_bounds_type (thin_descriptor_type (type));
1669       LONGEST addr;
1670 
1671       if (bounds_type == NULL)
1672         error (_("Bad GNAT array descriptor"));
1673 
1674       /* NOTE: The following calculation is not really kosher, but
1675          since desc_type is an XVE-encoded type (and shouldn't be),
1676          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1677       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1678         addr = value_as_long (arr);
1679       else
1680         addr = value_address (arr);
1681 
1682       return
1683         value_from_longest (lookup_pointer_type (bounds_type),
1684                             addr - TYPE_LENGTH (bounds_type));
1685     }
1686 
1687   else if (is_thick_pntr (type))
1688     {
1689       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1690 					       _("Bad GNAT array descriptor"));
1691       struct type *p_bounds_type = value_type (p_bounds);
1692 
1693       if (p_bounds_type
1694 	  && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1695 	{
1696 	  struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1697 
1698 	  if (TYPE_STUB (target_type))
1699 	    p_bounds = value_cast (lookup_pointer_type
1700 				   (ada_check_typedef (target_type)),
1701 				   p_bounds);
1702 	}
1703       else
1704 	error (_("Bad GNAT array descriptor"));
1705 
1706       return p_bounds;
1707     }
1708   else
1709     return NULL;
1710 }
1711 
1712 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1713    position of the field containing the address of the bounds data.  */
1714 
1715 static int
1716 fat_pntr_bounds_bitpos (struct type *type)
1717 {
1718   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1719 }
1720 
1721 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1722    size of the field containing the address of the bounds data.  */
1723 
1724 static int
1725 fat_pntr_bounds_bitsize (struct type *type)
1726 {
1727   type = desc_base_type (type);
1728 
1729   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1730     return TYPE_FIELD_BITSIZE (type, 1);
1731   else
1732     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1733 }
1734 
1735 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1736    pointer to one, the type of its array data (a array-with-no-bounds type);
1737    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1738    data.  */
1739 
1740 static struct type *
1741 desc_data_target_type (struct type *type)
1742 {
1743   type = desc_base_type (type);
1744 
1745   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1746   if (is_thin_pntr (type))
1747     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1748   else if (is_thick_pntr (type))
1749     {
1750       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1751 
1752       if (data_type
1753 	  && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1754 	return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1755     }
1756 
1757   return NULL;
1758 }
1759 
1760 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1761    its array data.  */
1762 
1763 static struct value *
1764 desc_data (struct value *arr)
1765 {
1766   struct type *type = value_type (arr);
1767 
1768   if (is_thin_pntr (type))
1769     return thin_data_pntr (arr);
1770   else if (is_thick_pntr (type))
1771     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1772                              _("Bad GNAT array descriptor"));
1773   else
1774     return NULL;
1775 }
1776 
1777 
1778 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1779    position of the field containing the address of the data.  */
1780 
1781 static int
1782 fat_pntr_data_bitpos (struct type *type)
1783 {
1784   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1785 }
1786 
1787 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1788    size of the field containing the address of the data.  */
1789 
1790 static int
1791 fat_pntr_data_bitsize (struct type *type)
1792 {
1793   type = desc_base_type (type);
1794 
1795   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1796     return TYPE_FIELD_BITSIZE (type, 0);
1797   else
1798     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1799 }
1800 
1801 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1802    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1803    bound, if WHICH is 1.  The first bound is I=1.  */
1804 
1805 static struct value *
1806 desc_one_bound (struct value *bounds, int i, int which)
1807 {
1808   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1809                            _("Bad GNAT array descriptor bounds"));
1810 }
1811 
1812 /* If BOUNDS is an array-bounds structure type, return the bit position
1813    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1814    bound, if WHICH is 1.  The first bound is I=1.  */
1815 
1816 static int
1817 desc_bound_bitpos (struct type *type, int i, int which)
1818 {
1819   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1820 }
1821 
1822 /* If BOUNDS is an array-bounds structure type, return the bit field size
1823    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1824    bound, if WHICH is 1.  The first bound is I=1.  */
1825 
1826 static int
1827 desc_bound_bitsize (struct type *type, int i, int which)
1828 {
1829   type = desc_base_type (type);
1830 
1831   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1832     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1833   else
1834     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1835 }
1836 
1837 /* If TYPE is the type of an array-bounds structure, the type of its
1838    Ith bound (numbering from 1).  Otherwise, NULL.  */
1839 
1840 static struct type *
1841 desc_index_type (struct type *type, int i)
1842 {
1843   type = desc_base_type (type);
1844 
1845   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1846     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1847   else
1848     return NULL;
1849 }
1850 
1851 /* The number of index positions in the array-bounds type TYPE.
1852    Return 0 if TYPE is NULL.  */
1853 
1854 static int
1855 desc_arity (struct type *type)
1856 {
1857   type = desc_base_type (type);
1858 
1859   if (type != NULL)
1860     return TYPE_NFIELDS (type) / 2;
1861   return 0;
1862 }
1863 
1864 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1865    an array descriptor type (representing an unconstrained array
1866    type).  */
1867 
1868 static int
1869 ada_is_direct_array_type (struct type *type)
1870 {
1871   if (type == NULL)
1872     return 0;
1873   type = ada_check_typedef (type);
1874   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1875           || ada_is_array_descriptor_type (type));
1876 }
1877 
1878 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1879  * to one.  */
1880 
1881 static int
1882 ada_is_array_type (struct type *type)
1883 {
1884   while (type != NULL
1885 	 && (TYPE_CODE (type) == TYPE_CODE_PTR
1886 	     || TYPE_CODE (type) == TYPE_CODE_REF))
1887     type = TYPE_TARGET_TYPE (type);
1888   return ada_is_direct_array_type (type);
1889 }
1890 
1891 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1892 
1893 int
1894 ada_is_simple_array_type (struct type *type)
1895 {
1896   if (type == NULL)
1897     return 0;
1898   type = ada_check_typedef (type);
1899   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1900           || (TYPE_CODE (type) == TYPE_CODE_PTR
1901               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1902                  == TYPE_CODE_ARRAY));
1903 }
1904 
1905 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1906 
1907 int
1908 ada_is_array_descriptor_type (struct type *type)
1909 {
1910   struct type *data_type = desc_data_target_type (type);
1911 
1912   if (type == NULL)
1913     return 0;
1914   type = ada_check_typedef (type);
1915   return (data_type != NULL
1916 	  && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1917 	  && desc_arity (desc_bounds_type (type)) > 0);
1918 }
1919 
1920 /* Non-zero iff type is a partially mal-formed GNAT array
1921    descriptor.  FIXME: This is to compensate for some problems with
1922    debugging output from GNAT.  Re-examine periodically to see if it
1923    is still needed.  */
1924 
1925 int
1926 ada_is_bogus_array_descriptor (struct type *type)
1927 {
1928   return
1929     type != NULL
1930     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1931     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1932         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1933     && !ada_is_array_descriptor_type (type);
1934 }
1935 
1936 
1937 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1938    (fat pointer) returns the type of the array data described---specifically,
1939    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1940    in from the descriptor; otherwise, they are left unspecified.  If
1941    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1942    returns NULL.  The result is simply the type of ARR if ARR is not
1943    a descriptor.  */
1944 struct type *
1945 ada_type_of_array (struct value *arr, int bounds)
1946 {
1947   if (ada_is_constrained_packed_array_type (value_type (arr)))
1948     return decode_constrained_packed_array_type (value_type (arr));
1949 
1950   if (!ada_is_array_descriptor_type (value_type (arr)))
1951     return value_type (arr);
1952 
1953   if (!bounds)
1954     {
1955       struct type *array_type =
1956 	ada_check_typedef (desc_data_target_type (value_type (arr)));
1957 
1958       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1959 	TYPE_FIELD_BITSIZE (array_type, 0) =
1960 	  decode_packed_array_bitsize (value_type (arr));
1961 
1962       return array_type;
1963     }
1964   else
1965     {
1966       struct type *elt_type;
1967       int arity;
1968       struct value *descriptor;
1969 
1970       elt_type = ada_array_element_type (value_type (arr), -1);
1971       arity = ada_array_arity (value_type (arr));
1972 
1973       if (elt_type == NULL || arity == 0)
1974         return ada_check_typedef (value_type (arr));
1975 
1976       descriptor = desc_bounds (arr);
1977       if (value_as_long (descriptor) == 0)
1978         return NULL;
1979       while (arity > 0)
1980         {
1981           struct type *range_type = alloc_type_copy (value_type (arr));
1982           struct type *array_type = alloc_type_copy (value_type (arr));
1983           struct value *low = desc_one_bound (descriptor, arity, 0);
1984           struct value *high = desc_one_bound (descriptor, arity, 1);
1985 
1986           arity -= 1;
1987           create_static_range_type (range_type, value_type (low),
1988 				    longest_to_int (value_as_long (low)),
1989 				    longest_to_int (value_as_long (high)));
1990           elt_type = create_array_type (array_type, elt_type, range_type);
1991 
1992 	  if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1993 	    {
1994 	      /* We need to store the element packed bitsize, as well as
1995 	         recompute the array size, because it was previously
1996 		 computed based on the unpacked element size.  */
1997 	      LONGEST lo = value_as_long (low);
1998 	      LONGEST hi = value_as_long (high);
1999 
2000 	      TYPE_FIELD_BITSIZE (elt_type, 0) =
2001 		decode_packed_array_bitsize (value_type (arr));
2002 	      /* If the array has no element, then the size is already
2003 	         zero, and does not need to be recomputed.  */
2004 	      if (lo < hi)
2005 		{
2006 		  int array_bitsize =
2007 		        (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2008 
2009 		  TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2010 		}
2011 	    }
2012         }
2013 
2014       return lookup_pointer_type (elt_type);
2015     }
2016 }
2017 
2018 /* If ARR does not represent an array, returns ARR unchanged.
2019    Otherwise, returns either a standard GDB array with bounds set
2020    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2021    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2022 
2023 struct value *
2024 ada_coerce_to_simple_array_ptr (struct value *arr)
2025 {
2026   if (ada_is_array_descriptor_type (value_type (arr)))
2027     {
2028       struct type *arrType = ada_type_of_array (arr, 1);
2029 
2030       if (arrType == NULL)
2031         return NULL;
2032       return value_cast (arrType, value_copy (desc_data (arr)));
2033     }
2034   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2035     return decode_constrained_packed_array (arr);
2036   else
2037     return arr;
2038 }
2039 
2040 /* If ARR does not represent an array, returns ARR unchanged.
2041    Otherwise, returns a standard GDB array describing ARR (which may
2042    be ARR itself if it already is in the proper form).  */
2043 
2044 struct value *
2045 ada_coerce_to_simple_array (struct value *arr)
2046 {
2047   if (ada_is_array_descriptor_type (value_type (arr)))
2048     {
2049       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2050 
2051       if (arrVal == NULL)
2052         error (_("Bounds unavailable for null array pointer."));
2053       ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
2054       return value_ind (arrVal);
2055     }
2056   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2057     return decode_constrained_packed_array (arr);
2058   else
2059     return arr;
2060 }
2061 
2062 /* If TYPE represents a GNAT array type, return it translated to an
2063    ordinary GDB array type (possibly with BITSIZE fields indicating
2064    packing).  For other types, is the identity.  */
2065 
2066 struct type *
2067 ada_coerce_to_simple_array_type (struct type *type)
2068 {
2069   if (ada_is_constrained_packed_array_type (type))
2070     return decode_constrained_packed_array_type (type);
2071 
2072   if (ada_is_array_descriptor_type (type))
2073     return ada_check_typedef (desc_data_target_type (type));
2074 
2075   return type;
2076 }
2077 
2078 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2079 
2080 static int
2081 ada_is_packed_array_type  (struct type *type)
2082 {
2083   if (type == NULL)
2084     return 0;
2085   type = desc_base_type (type);
2086   type = ada_check_typedef (type);
2087   return
2088     ada_type_name (type) != NULL
2089     && strstr (ada_type_name (type), "___XP") != NULL;
2090 }
2091 
2092 /* Non-zero iff TYPE represents a standard GNAT constrained
2093    packed-array type.  */
2094 
2095 int
2096 ada_is_constrained_packed_array_type (struct type *type)
2097 {
2098   return ada_is_packed_array_type (type)
2099     && !ada_is_array_descriptor_type (type);
2100 }
2101 
2102 /* Non-zero iff TYPE represents an array descriptor for a
2103    unconstrained packed-array type.  */
2104 
2105 static int
2106 ada_is_unconstrained_packed_array_type (struct type *type)
2107 {
2108   return ada_is_packed_array_type (type)
2109     && ada_is_array_descriptor_type (type);
2110 }
2111 
2112 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2113    return the size of its elements in bits.  */
2114 
2115 static long
2116 decode_packed_array_bitsize (struct type *type)
2117 {
2118   const char *raw_name;
2119   const char *tail;
2120   long bits;
2121 
2122   /* Access to arrays implemented as fat pointers are encoded as a typedef
2123      of the fat pointer type.  We need the name of the fat pointer type
2124      to do the decoding, so strip the typedef layer.  */
2125   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2126     type = ada_typedef_target_type (type);
2127 
2128   raw_name = ada_type_name (ada_check_typedef (type));
2129   if (!raw_name)
2130     raw_name = ada_type_name (desc_base_type (type));
2131 
2132   if (!raw_name)
2133     return 0;
2134 
2135   tail = strstr (raw_name, "___XP");
2136   gdb_assert (tail != NULL);
2137 
2138   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2139     {
2140       lim_warning
2141 	(_("could not understand bit size information on packed array"));
2142       return 0;
2143     }
2144 
2145   return bits;
2146 }
2147 
2148 /* Given that TYPE is a standard GDB array type with all bounds filled
2149    in, and that the element size of its ultimate scalar constituents
2150    (that is, either its elements, or, if it is an array of arrays, its
2151    elements' elements, etc.) is *ELT_BITS, return an identical type,
2152    but with the bit sizes of its elements (and those of any
2153    constituent arrays) recorded in the BITSIZE components of its
2154    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2155    in bits.
2156 
2157    Note that, for arrays whose index type has an XA encoding where
2158    a bound references a record discriminant, getting that discriminant,
2159    and therefore the actual value of that bound, is not possible
2160    because none of the given parameters gives us access to the record.
2161    This function assumes that it is OK in the context where it is being
2162    used to return an array whose bounds are still dynamic and where
2163    the length is arbitrary.  */
2164 
2165 static struct type *
2166 constrained_packed_array_type (struct type *type, long *elt_bits)
2167 {
2168   struct type *new_elt_type;
2169   struct type *new_type;
2170   struct type *index_type_desc;
2171   struct type *index_type;
2172   LONGEST low_bound, high_bound;
2173 
2174   type = ada_check_typedef (type);
2175   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2176     return type;
2177 
2178   index_type_desc = ada_find_parallel_type (type, "___XA");
2179   if (index_type_desc)
2180     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2181 				      NULL);
2182   else
2183     index_type = TYPE_INDEX_TYPE (type);
2184 
2185   new_type = alloc_type_copy (type);
2186   new_elt_type =
2187     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2188 				   elt_bits);
2189   create_array_type (new_type, new_elt_type, index_type);
2190   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2191   TYPE_NAME (new_type) = ada_type_name (type);
2192 
2193   if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2194        && is_dynamic_type (check_typedef (index_type)))
2195       || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2196     low_bound = high_bound = 0;
2197   if (high_bound < low_bound)
2198     *elt_bits = TYPE_LENGTH (new_type) = 0;
2199   else
2200     {
2201       *elt_bits *= (high_bound - low_bound + 1);
2202       TYPE_LENGTH (new_type) =
2203         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2204     }
2205 
2206   TYPE_FIXED_INSTANCE (new_type) = 1;
2207   return new_type;
2208 }
2209 
2210 /* The array type encoded by TYPE, where
2211    ada_is_constrained_packed_array_type (TYPE).  */
2212 
2213 static struct type *
2214 decode_constrained_packed_array_type (struct type *type)
2215 {
2216   const char *raw_name = ada_type_name (ada_check_typedef (type));
2217   char *name;
2218   const char *tail;
2219   struct type *shadow_type;
2220   long bits;
2221 
2222   if (!raw_name)
2223     raw_name = ada_type_name (desc_base_type (type));
2224 
2225   if (!raw_name)
2226     return NULL;
2227 
2228   name = (char *) alloca (strlen (raw_name) + 1);
2229   tail = strstr (raw_name, "___XP");
2230   type = desc_base_type (type);
2231 
2232   memcpy (name, raw_name, tail - raw_name);
2233   name[tail - raw_name] = '\000';
2234 
2235   shadow_type = ada_find_parallel_type_with_name (type, name);
2236 
2237   if (shadow_type == NULL)
2238     {
2239       lim_warning (_("could not find bounds information on packed array"));
2240       return NULL;
2241     }
2242   CHECK_TYPEDEF (shadow_type);
2243 
2244   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2245     {
2246       lim_warning (_("could not understand bounds "
2247 		     "information on packed array"));
2248       return NULL;
2249     }
2250 
2251   bits = decode_packed_array_bitsize (type);
2252   return constrained_packed_array_type (shadow_type, &bits);
2253 }
2254 
2255 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2256    array, returns a simple array that denotes that array.  Its type is a
2257    standard GDB array type except that the BITSIZEs of the array
2258    target types are set to the number of bits in each element, and the
2259    type length is set appropriately.  */
2260 
2261 static struct value *
2262 decode_constrained_packed_array (struct value *arr)
2263 {
2264   struct type *type;
2265 
2266   /* If our value is a pointer, then dereference it. Likewise if
2267      the value is a reference.  Make sure that this operation does not
2268      cause the target type to be fixed, as this would indirectly cause
2269      this array to be decoded.  The rest of the routine assumes that
2270      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2271      and "value_ind" routines to perform the dereferencing, as opposed
2272      to using "ada_coerce_ref" or "ada_value_ind".  */
2273   arr = coerce_ref (arr);
2274   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2275     arr = value_ind (arr);
2276 
2277   type = decode_constrained_packed_array_type (value_type (arr));
2278   if (type == NULL)
2279     {
2280       error (_("can't unpack array"));
2281       return NULL;
2282     }
2283 
2284   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2285       && ada_is_modular_type (value_type (arr)))
2286     {
2287        /* This is a (right-justified) modular type representing a packed
2288  	 array with no wrapper.  In order to interpret the value through
2289  	 the (left-justified) packed array type we just built, we must
2290  	 first left-justify it.  */
2291       int bit_size, bit_pos;
2292       ULONGEST mod;
2293 
2294       mod = ada_modulus (value_type (arr)) - 1;
2295       bit_size = 0;
2296       while (mod > 0)
2297 	{
2298 	  bit_size += 1;
2299 	  mod >>= 1;
2300 	}
2301       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2302       arr = ada_value_primitive_packed_val (arr, NULL,
2303 					    bit_pos / HOST_CHAR_BIT,
2304 					    bit_pos % HOST_CHAR_BIT,
2305 					    bit_size,
2306 					    type);
2307     }
2308 
2309   return coerce_unspec_val_to_type (arr, type);
2310 }
2311 
2312 
2313 /* The value of the element of packed array ARR at the ARITY indices
2314    given in IND.   ARR must be a simple array.  */
2315 
2316 static struct value *
2317 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2318 {
2319   int i;
2320   int bits, elt_off, bit_off;
2321   long elt_total_bit_offset;
2322   struct type *elt_type;
2323   struct value *v;
2324 
2325   bits = 0;
2326   elt_total_bit_offset = 0;
2327   elt_type = ada_check_typedef (value_type (arr));
2328   for (i = 0; i < arity; i += 1)
2329     {
2330       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2331           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2332         error
2333           (_("attempt to do packed indexing of "
2334 	     "something other than a packed array"));
2335       else
2336         {
2337           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2338           LONGEST lowerbound, upperbound;
2339           LONGEST idx;
2340 
2341           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2342             {
2343               lim_warning (_("don't know bounds of array"));
2344               lowerbound = upperbound = 0;
2345             }
2346 
2347           idx = pos_atr (ind[i]);
2348           if (idx < lowerbound || idx > upperbound)
2349             lim_warning (_("packed array index %ld out of bounds"),
2350 			 (long) idx);
2351           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2352           elt_total_bit_offset += (idx - lowerbound) * bits;
2353           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2354         }
2355     }
2356   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2357   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2358 
2359   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2360                                       bits, elt_type);
2361   return v;
2362 }
2363 
2364 /* Non-zero iff TYPE includes negative integer values.  */
2365 
2366 static int
2367 has_negatives (struct type *type)
2368 {
2369   switch (TYPE_CODE (type))
2370     {
2371     default:
2372       return 0;
2373     case TYPE_CODE_INT:
2374       return !TYPE_UNSIGNED (type);
2375     case TYPE_CODE_RANGE:
2376       return TYPE_LOW_BOUND (type) < 0;
2377     }
2378 }
2379 
2380 
2381 /* Create a new value of type TYPE from the contents of OBJ starting
2382    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2383    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2384    assigning through the result will set the field fetched from.
2385    VALADDR is ignored unless OBJ is NULL, in which case,
2386    VALADDR+OFFSET must address the start of storage containing the
2387    packed value.  The value returned  in this case is never an lval.
2388    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2389 
2390 struct value *
2391 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2392 				long offset, int bit_offset, int bit_size,
2393                                 struct type *type)
2394 {
2395   struct value *v;
2396   int src,                      /* Index into the source area */
2397     targ,                       /* Index into the target area */
2398     srcBitsLeft,                /* Number of source bits left to move */
2399     nsrc, ntarg,                /* Number of source and target bytes */
2400     unusedLS,                   /* Number of bits in next significant
2401                                    byte of source that are unused */
2402     accumSize;                  /* Number of meaningful bits in accum */
2403   unsigned char *bytes;         /* First byte containing data to unpack */
2404   unsigned char *unpacked;
2405   unsigned long accum;          /* Staging area for bits being transferred */
2406   unsigned char sign;
2407   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2408   /* Transmit bytes from least to most significant; delta is the direction
2409      the indices move.  */
2410   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2411 
2412   type = ada_check_typedef (type);
2413 
2414   if (obj == NULL)
2415     {
2416       v = allocate_value (type);
2417       bytes = (unsigned char *) (valaddr + offset);
2418     }
2419   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2420     {
2421       v = value_at (type, value_address (obj));
2422       type = value_type (v);
2423       bytes = (unsigned char *) alloca (len);
2424       read_memory (value_address (v) + offset, bytes, len);
2425     }
2426   else
2427     {
2428       v = allocate_value (type);
2429       bytes = (unsigned char *) value_contents (obj) + offset;
2430     }
2431 
2432   if (obj != NULL)
2433     {
2434       long new_offset = offset;
2435 
2436       set_value_component_location (v, obj);
2437       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2438       set_value_bitsize (v, bit_size);
2439       if (value_bitpos (v) >= HOST_CHAR_BIT)
2440         {
2441 	  ++new_offset;
2442           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2443         }
2444       set_value_offset (v, new_offset);
2445 
2446       /* Also set the parent value.  This is needed when trying to
2447 	 assign a new value (in inferior memory).  */
2448       set_value_parent (v, obj);
2449     }
2450   else
2451     set_value_bitsize (v, bit_size);
2452   unpacked = (unsigned char *) value_contents (v);
2453 
2454   srcBitsLeft = bit_size;
2455   nsrc = len;
2456   ntarg = TYPE_LENGTH (type);
2457   sign = 0;
2458   if (bit_size == 0)
2459     {
2460       memset (unpacked, 0, TYPE_LENGTH (type));
2461       return v;
2462     }
2463   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2464     {
2465       src = len - 1;
2466       if (has_negatives (type)
2467           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2468         sign = ~0;
2469 
2470       unusedLS =
2471         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2472         % HOST_CHAR_BIT;
2473 
2474       switch (TYPE_CODE (type))
2475         {
2476         case TYPE_CODE_ARRAY:
2477         case TYPE_CODE_UNION:
2478         case TYPE_CODE_STRUCT:
2479           /* Non-scalar values must be aligned at a byte boundary...  */
2480           accumSize =
2481             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2482           /* ... And are placed at the beginning (most-significant) bytes
2483              of the target.  */
2484           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2485           ntarg = targ + 1;
2486           break;
2487         default:
2488           accumSize = 0;
2489           targ = TYPE_LENGTH (type) - 1;
2490           break;
2491         }
2492     }
2493   else
2494     {
2495       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2496 
2497       src = targ = 0;
2498       unusedLS = bit_offset;
2499       accumSize = 0;
2500 
2501       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2502         sign = ~0;
2503     }
2504 
2505   accum = 0;
2506   while (nsrc > 0)
2507     {
2508       /* Mask for removing bits of the next source byte that are not
2509          part of the value.  */
2510       unsigned int unusedMSMask =
2511         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2512         1;
2513       /* Sign-extend bits for this byte.  */
2514       unsigned int signMask = sign & ~unusedMSMask;
2515 
2516       accum |=
2517         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2518       accumSize += HOST_CHAR_BIT - unusedLS;
2519       if (accumSize >= HOST_CHAR_BIT)
2520         {
2521           unpacked[targ] = accum & ~(~0UL << HOST_CHAR_BIT);
2522           accumSize -= HOST_CHAR_BIT;
2523           accum >>= HOST_CHAR_BIT;
2524           ntarg -= 1;
2525           targ += delta;
2526         }
2527       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2528       unusedLS = 0;
2529       nsrc -= 1;
2530       src += delta;
2531     }
2532   while (ntarg > 0)
2533     {
2534       accum |= sign << accumSize;
2535       unpacked[targ] = accum & ~(~0UL << HOST_CHAR_BIT);
2536       accumSize -= HOST_CHAR_BIT;
2537       accum >>= HOST_CHAR_BIT;
2538       ntarg -= 1;
2539       targ += delta;
2540     }
2541 
2542   return v;
2543 }
2544 
2545 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2546    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2547    not overlap.  */
2548 static void
2549 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2550 	   int src_offset, int n, int bits_big_endian_p)
2551 {
2552   unsigned int accum, mask;
2553   int accum_bits, chunk_size;
2554 
2555   target += targ_offset / HOST_CHAR_BIT;
2556   targ_offset %= HOST_CHAR_BIT;
2557   source += src_offset / HOST_CHAR_BIT;
2558   src_offset %= HOST_CHAR_BIT;
2559   if (bits_big_endian_p)
2560     {
2561       accum = (unsigned char) *source;
2562       source += 1;
2563       accum_bits = HOST_CHAR_BIT - src_offset;
2564 
2565       while (n > 0)
2566         {
2567           int unused_right;
2568 
2569           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2570           accum_bits += HOST_CHAR_BIT;
2571           source += 1;
2572           chunk_size = HOST_CHAR_BIT - targ_offset;
2573           if (chunk_size > n)
2574             chunk_size = n;
2575           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2576           mask = ((1 << chunk_size) - 1) << unused_right;
2577           *target =
2578             (*target & ~mask)
2579             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2580           n -= chunk_size;
2581           accum_bits -= chunk_size;
2582           target += 1;
2583           targ_offset = 0;
2584         }
2585     }
2586   else
2587     {
2588       accum = (unsigned char) *source >> src_offset;
2589       source += 1;
2590       accum_bits = HOST_CHAR_BIT - src_offset;
2591 
2592       while (n > 0)
2593         {
2594           accum = accum + ((unsigned char) *source << accum_bits);
2595           accum_bits += HOST_CHAR_BIT;
2596           source += 1;
2597           chunk_size = HOST_CHAR_BIT - targ_offset;
2598           if (chunk_size > n)
2599             chunk_size = n;
2600           mask = ((1 << chunk_size) - 1) << targ_offset;
2601           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2602           n -= chunk_size;
2603           accum_bits -= chunk_size;
2604           accum >>= chunk_size;
2605           target += 1;
2606           targ_offset = 0;
2607         }
2608     }
2609 }
2610 
2611 /* Store the contents of FROMVAL into the location of TOVAL.
2612    Return a new value with the location of TOVAL and contents of
2613    FROMVAL.   Handles assignment into packed fields that have
2614    floating-point or non-scalar types.  */
2615 
2616 static struct value *
2617 ada_value_assign (struct value *toval, struct value *fromval)
2618 {
2619   struct type *type = value_type (toval);
2620   int bits = value_bitsize (toval);
2621 
2622   toval = ada_coerce_ref (toval);
2623   fromval = ada_coerce_ref (fromval);
2624 
2625   if (ada_is_direct_array_type (value_type (toval)))
2626     toval = ada_coerce_to_simple_array (toval);
2627   if (ada_is_direct_array_type (value_type (fromval)))
2628     fromval = ada_coerce_to_simple_array (fromval);
2629 
2630   if (!deprecated_value_modifiable (toval))
2631     error (_("Left operand of assignment is not a modifiable lvalue."));
2632 
2633   if (VALUE_LVAL (toval) == lval_memory
2634       && bits > 0
2635       && (TYPE_CODE (type) == TYPE_CODE_FLT
2636           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2637     {
2638       int len = (value_bitpos (toval)
2639 		 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2640       int from_size;
2641       gdb_byte *buffer = alloca (len);
2642       struct value *val;
2643       CORE_ADDR to_addr = value_address (toval);
2644 
2645       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2646         fromval = value_cast (type, fromval);
2647 
2648       read_memory (to_addr, buffer, len);
2649       from_size = value_bitsize (fromval);
2650       if (from_size == 0)
2651 	from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2652       if (gdbarch_bits_big_endian (get_type_arch (type)))
2653         move_bits (buffer, value_bitpos (toval),
2654 		   value_contents (fromval), from_size - bits, bits, 1);
2655       else
2656         move_bits (buffer, value_bitpos (toval),
2657 		   value_contents (fromval), 0, bits, 0);
2658       write_memory_with_notification (to_addr, buffer, len);
2659 
2660       val = value_copy (toval);
2661       memcpy (value_contents_raw (val), value_contents (fromval),
2662               TYPE_LENGTH (type));
2663       deprecated_set_value_type (val, type);
2664 
2665       return val;
2666     }
2667 
2668   return value_assign (toval, fromval);
2669 }
2670 
2671 
2672 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2673  * CONTAINER, assign the contents of VAL to COMPONENTS's place in
2674  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not
2675  * COMPONENT, and not the inferior's memory.  The current contents
2676  * of COMPONENT are ignored.  */
2677 static void
2678 value_assign_to_component (struct value *container, struct value *component,
2679 			   struct value *val)
2680 {
2681   LONGEST offset_in_container =
2682     (LONGEST)  (value_address (component) - value_address (container));
2683   int bit_offset_in_container =
2684     value_bitpos (component) - value_bitpos (container);
2685   int bits;
2686 
2687   val = value_cast (value_type (component), val);
2688 
2689   if (value_bitsize (component) == 0)
2690     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2691   else
2692     bits = value_bitsize (component);
2693 
2694   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2695     move_bits (value_contents_writeable (container) + offset_in_container,
2696 	       value_bitpos (container) + bit_offset_in_container,
2697 	       value_contents (val),
2698 	       TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2699 	       bits, 1);
2700   else
2701     move_bits (value_contents_writeable (container) + offset_in_container,
2702 	       value_bitpos (container) + bit_offset_in_container,
2703 	       value_contents (val), 0, bits, 0);
2704 }
2705 
2706 /* The value of the element of array ARR at the ARITY indices given in IND.
2707    ARR may be either a simple array, GNAT array descriptor, or pointer
2708    thereto.  */
2709 
2710 struct value *
2711 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2712 {
2713   int k;
2714   struct value *elt;
2715   struct type *elt_type;
2716 
2717   elt = ada_coerce_to_simple_array (arr);
2718 
2719   elt_type = ada_check_typedef (value_type (elt));
2720   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2721       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2722     return value_subscript_packed (elt, arity, ind);
2723 
2724   for (k = 0; k < arity; k += 1)
2725     {
2726       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2727         error (_("too many subscripts (%d expected)"), k);
2728       elt = value_subscript (elt, pos_atr (ind[k]));
2729     }
2730   return elt;
2731 }
2732 
2733 /* Assuming ARR is a pointer to a GDB array, the value of the element
2734    of *ARR at the ARITY indices given in IND.
2735    Does not read the entire array into memory.  */
2736 
2737 static struct value *
2738 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2739 {
2740   int k;
2741   struct type *type
2742     = check_typedef (value_enclosing_type (ada_value_ind (arr)));
2743 
2744   for (k = 0; k < arity; k += 1)
2745     {
2746       LONGEST lwb, upb;
2747 
2748       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2749         error (_("too many subscripts (%d expected)"), k);
2750       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2751                         value_copy (arr));
2752       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2753       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2754       type = TYPE_TARGET_TYPE (type);
2755     }
2756 
2757   return value_ind (arr);
2758 }
2759 
2760 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2761    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2762    elements starting at index LOW.  The lower bound of this array is LOW, as
2763    per Ada rules.  */
2764 static struct value *
2765 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2766                           int low, int high)
2767 {
2768   struct type *type0 = ada_check_typedef (type);
2769   CORE_ADDR base = value_as_address (array_ptr)
2770     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2771        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2772   struct type *index_type
2773     = create_static_range_type (NULL,
2774 				TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2775 				low, high);
2776   struct type *slice_type =
2777     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2778 
2779   return value_at_lazy (slice_type, base);
2780 }
2781 
2782 
2783 static struct value *
2784 ada_value_slice (struct value *array, int low, int high)
2785 {
2786   struct type *type = ada_check_typedef (value_type (array));
2787   struct type *index_type
2788     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2789   struct type *slice_type =
2790     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2791 
2792   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2793 }
2794 
2795 /* If type is a record type in the form of a standard GNAT array
2796    descriptor, returns the number of dimensions for type.  If arr is a
2797    simple array, returns the number of "array of"s that prefix its
2798    type designation.  Otherwise, returns 0.  */
2799 
2800 int
2801 ada_array_arity (struct type *type)
2802 {
2803   int arity;
2804 
2805   if (type == NULL)
2806     return 0;
2807 
2808   type = desc_base_type (type);
2809 
2810   arity = 0;
2811   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2812     return desc_arity (desc_bounds_type (type));
2813   else
2814     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2815       {
2816         arity += 1;
2817         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2818       }
2819 
2820   return arity;
2821 }
2822 
2823 /* If TYPE is a record type in the form of a standard GNAT array
2824    descriptor or a simple array type, returns the element type for
2825    TYPE after indexing by NINDICES indices, or by all indices if
2826    NINDICES is -1.  Otherwise, returns NULL.  */
2827 
2828 struct type *
2829 ada_array_element_type (struct type *type, int nindices)
2830 {
2831   type = desc_base_type (type);
2832 
2833   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2834     {
2835       int k;
2836       struct type *p_array_type;
2837 
2838       p_array_type = desc_data_target_type (type);
2839 
2840       k = ada_array_arity (type);
2841       if (k == 0)
2842         return NULL;
2843 
2844       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2845       if (nindices >= 0 && k > nindices)
2846         k = nindices;
2847       while (k > 0 && p_array_type != NULL)
2848         {
2849           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2850           k -= 1;
2851         }
2852       return p_array_type;
2853     }
2854   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2855     {
2856       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2857         {
2858           type = TYPE_TARGET_TYPE (type);
2859           nindices -= 1;
2860         }
2861       return type;
2862     }
2863 
2864   return NULL;
2865 }
2866 
2867 /* The type of nth index in arrays of given type (n numbering from 1).
2868    Does not examine memory.  Throws an error if N is invalid or TYPE
2869    is not an array type.  NAME is the name of the Ada attribute being
2870    evaluated ('range, 'first, 'last, or 'length); it is used in building
2871    the error message.  */
2872 
2873 static struct type *
2874 ada_index_type (struct type *type, int n, const char *name)
2875 {
2876   struct type *result_type;
2877 
2878   type = desc_base_type (type);
2879 
2880   if (n < 0 || n > ada_array_arity (type))
2881     error (_("invalid dimension number to '%s"), name);
2882 
2883   if (ada_is_simple_array_type (type))
2884     {
2885       int i;
2886 
2887       for (i = 1; i < n; i += 1)
2888         type = TYPE_TARGET_TYPE (type);
2889       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2890       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2891          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2892          perhaps stabsread.c would make more sense.  */
2893       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2894         result_type = NULL;
2895     }
2896   else
2897     {
2898       result_type = desc_index_type (desc_bounds_type (type), n);
2899       if (result_type == NULL)
2900 	error (_("attempt to take bound of something that is not an array"));
2901     }
2902 
2903   return result_type;
2904 }
2905 
2906 /* Given that arr is an array type, returns the lower bound of the
2907    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2908    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2909    array-descriptor type.  It works for other arrays with bounds supplied
2910    by run-time quantities other than discriminants.  */
2911 
2912 static LONGEST
2913 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2914 {
2915   struct type *type, *index_type_desc, *index_type;
2916   int i;
2917 
2918   gdb_assert (which == 0 || which == 1);
2919 
2920   if (ada_is_constrained_packed_array_type (arr_type))
2921     arr_type = decode_constrained_packed_array_type (arr_type);
2922 
2923   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2924     return (LONGEST) - which;
2925 
2926   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2927     type = TYPE_TARGET_TYPE (arr_type);
2928   else
2929     type = arr_type;
2930 
2931   index_type_desc = ada_find_parallel_type (type, "___XA");
2932   ada_fixup_array_indexes_type (index_type_desc);
2933   if (index_type_desc != NULL)
2934     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2935 				      NULL);
2936   else
2937     {
2938       struct type *elt_type = check_typedef (type);
2939 
2940       for (i = 1; i < n; i++)
2941 	elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2942 
2943       index_type = TYPE_INDEX_TYPE (elt_type);
2944     }
2945 
2946   return
2947     (LONGEST) (which == 0
2948                ? ada_discrete_type_low_bound (index_type)
2949                : ada_discrete_type_high_bound (index_type));
2950 }
2951 
2952 /* Given that arr is an array value, returns the lower bound of the
2953    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2954    WHICH is 1.  This routine will also work for arrays with bounds
2955    supplied by run-time quantities other than discriminants.  */
2956 
2957 static LONGEST
2958 ada_array_bound (struct value *arr, int n, int which)
2959 {
2960   struct type *arr_type;
2961 
2962   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2963     arr = value_ind (arr);
2964   arr_type = value_enclosing_type (arr);
2965 
2966   if (ada_is_constrained_packed_array_type (arr_type))
2967     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2968   else if (ada_is_simple_array_type (arr_type))
2969     return ada_array_bound_from_type (arr_type, n, which);
2970   else
2971     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2972 }
2973 
2974 /* Given that arr is an array value, returns the length of the
2975    nth index.  This routine will also work for arrays with bounds
2976    supplied by run-time quantities other than discriminants.
2977    Does not work for arrays indexed by enumeration types with representation
2978    clauses at the moment.  */
2979 
2980 static LONGEST
2981 ada_array_length (struct value *arr, int n)
2982 {
2983   struct type *arr_type;
2984 
2985   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2986     arr = value_ind (arr);
2987   arr_type = value_enclosing_type (arr);
2988 
2989   if (ada_is_constrained_packed_array_type (arr_type))
2990     return ada_array_length (decode_constrained_packed_array (arr), n);
2991 
2992   if (ada_is_simple_array_type (arr_type))
2993     return (ada_array_bound_from_type (arr_type, n, 1)
2994 	    - ada_array_bound_from_type (arr_type, n, 0) + 1);
2995   else
2996     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2997 	    - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2998 }
2999 
3000 /* An empty array whose type is that of ARR_TYPE (an array type),
3001    with bounds LOW to LOW-1.  */
3002 
3003 static struct value *
3004 empty_array (struct type *arr_type, int low)
3005 {
3006   struct type *arr_type0 = ada_check_typedef (arr_type);
3007   struct type *index_type
3008     = create_static_range_type
3009         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
3010   struct type *elt_type = ada_array_element_type (arr_type0, 1);
3011 
3012   return allocate_value (create_array_type (NULL, elt_type, index_type));
3013 }
3014 
3015 
3016                                 /* Name resolution */
3017 
3018 /* The "decoded" name for the user-definable Ada operator corresponding
3019    to OP.  */
3020 
3021 static const char *
3022 ada_decoded_op_name (enum exp_opcode op)
3023 {
3024   int i;
3025 
3026   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3027     {
3028       if (ada_opname_table[i].op == op)
3029         return ada_opname_table[i].decoded;
3030     }
3031   error (_("Could not find operator name for opcode"));
3032 }
3033 
3034 
3035 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3036    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3037    undefined namespace) and converts operators that are
3038    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3039    non-null, it provides a preferred result type [at the moment, only
3040    type void has any effect---causing procedures to be preferred over
3041    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3042    return type is preferred.  May change (expand) *EXP.  */
3043 
3044 static void
3045 resolve (struct expression **expp, int void_context_p)
3046 {
3047   struct type *context_type = NULL;
3048   int pc = 0;
3049 
3050   if (void_context_p)
3051     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3052 
3053   resolve_subexp (expp, &pc, 1, context_type);
3054 }
3055 
3056 /* Resolve the operator of the subexpression beginning at
3057    position *POS of *EXPP.  "Resolving" consists of replacing
3058    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3059    with their resolutions, replacing built-in operators with
3060    function calls to user-defined operators, where appropriate, and,
3061    when DEPROCEDURE_P is non-zero, converting function-valued variables
3062    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3063    are as in ada_resolve, above.  */
3064 
3065 static struct value *
3066 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3067                 struct type *context_type)
3068 {
3069   int pc = *pos;
3070   int i;
3071   struct expression *exp;       /* Convenience: == *expp.  */
3072   enum exp_opcode op = (*expp)->elts[pc].opcode;
3073   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3074   int nargs;                    /* Number of operands.  */
3075   int oplen;
3076 
3077   argvec = NULL;
3078   nargs = 0;
3079   exp = *expp;
3080 
3081   /* Pass one: resolve operands, saving their types and updating *pos,
3082      if needed.  */
3083   switch (op)
3084     {
3085     case OP_FUNCALL:
3086       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3087           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3088         *pos += 7;
3089       else
3090         {
3091           *pos += 3;
3092           resolve_subexp (expp, pos, 0, NULL);
3093         }
3094       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3095       break;
3096 
3097     case UNOP_ADDR:
3098       *pos += 1;
3099       resolve_subexp (expp, pos, 0, NULL);
3100       break;
3101 
3102     case UNOP_QUAL:
3103       *pos += 3;
3104       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3105       break;
3106 
3107     case OP_ATR_MODULUS:
3108     case OP_ATR_SIZE:
3109     case OP_ATR_TAG:
3110     case OP_ATR_FIRST:
3111     case OP_ATR_LAST:
3112     case OP_ATR_LENGTH:
3113     case OP_ATR_POS:
3114     case OP_ATR_VAL:
3115     case OP_ATR_MIN:
3116     case OP_ATR_MAX:
3117     case TERNOP_IN_RANGE:
3118     case BINOP_IN_BOUNDS:
3119     case UNOP_IN_RANGE:
3120     case OP_AGGREGATE:
3121     case OP_OTHERS:
3122     case OP_CHOICES:
3123     case OP_POSITIONAL:
3124     case OP_DISCRETE_RANGE:
3125     case OP_NAME:
3126       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3127       *pos += oplen;
3128       break;
3129 
3130     case BINOP_ASSIGN:
3131       {
3132         struct value *arg1;
3133 
3134         *pos += 1;
3135         arg1 = resolve_subexp (expp, pos, 0, NULL);
3136         if (arg1 == NULL)
3137           resolve_subexp (expp, pos, 1, NULL);
3138         else
3139           resolve_subexp (expp, pos, 1, value_type (arg1));
3140         break;
3141       }
3142 
3143     case UNOP_CAST:
3144       *pos += 3;
3145       nargs = 1;
3146       break;
3147 
3148     case BINOP_ADD:
3149     case BINOP_SUB:
3150     case BINOP_MUL:
3151     case BINOP_DIV:
3152     case BINOP_REM:
3153     case BINOP_MOD:
3154     case BINOP_EXP:
3155     case BINOP_CONCAT:
3156     case BINOP_LOGICAL_AND:
3157     case BINOP_LOGICAL_OR:
3158     case BINOP_BITWISE_AND:
3159     case BINOP_BITWISE_IOR:
3160     case BINOP_BITWISE_XOR:
3161 
3162     case BINOP_EQUAL:
3163     case BINOP_NOTEQUAL:
3164     case BINOP_LESS:
3165     case BINOP_GTR:
3166     case BINOP_LEQ:
3167     case BINOP_GEQ:
3168 
3169     case BINOP_REPEAT:
3170     case BINOP_SUBSCRIPT:
3171     case BINOP_COMMA:
3172       *pos += 1;
3173       nargs = 2;
3174       break;
3175 
3176     case UNOP_NEG:
3177     case UNOP_PLUS:
3178     case UNOP_LOGICAL_NOT:
3179     case UNOP_ABS:
3180     case UNOP_IND:
3181       *pos += 1;
3182       nargs = 1;
3183       break;
3184 
3185     case OP_LONG:
3186     case OP_DOUBLE:
3187     case OP_VAR_VALUE:
3188       *pos += 4;
3189       break;
3190 
3191     case OP_TYPE:
3192     case OP_BOOL:
3193     case OP_LAST:
3194     case OP_INTERNALVAR:
3195       *pos += 3;
3196       break;
3197 
3198     case UNOP_MEMVAL:
3199       *pos += 3;
3200       nargs = 1;
3201       break;
3202 
3203     case OP_REGISTER:
3204       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3205       break;
3206 
3207     case STRUCTOP_STRUCT:
3208       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3209       nargs = 1;
3210       break;
3211 
3212     case TERNOP_SLICE:
3213       *pos += 1;
3214       nargs = 3;
3215       break;
3216 
3217     case OP_STRING:
3218       break;
3219 
3220     default:
3221       error (_("Unexpected operator during name resolution"));
3222     }
3223 
3224   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3225   for (i = 0; i < nargs; i += 1)
3226     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3227   argvec[i] = NULL;
3228   exp = *expp;
3229 
3230   /* Pass two: perform any resolution on principal operator.  */
3231   switch (op)
3232     {
3233     default:
3234       break;
3235 
3236     case OP_VAR_VALUE:
3237       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3238         {
3239           struct ada_symbol_info *candidates;
3240           int n_candidates;
3241 
3242           n_candidates =
3243             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3244                                     (exp->elts[pc + 2].symbol),
3245                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3246                                     &candidates);
3247 
3248           if (n_candidates > 1)
3249             {
3250               /* Types tend to get re-introduced locally, so if there
3251                  are any local symbols that are not types, first filter
3252                  out all types.  */
3253               int j;
3254               for (j = 0; j < n_candidates; j += 1)
3255                 switch (SYMBOL_CLASS (candidates[j].sym))
3256                   {
3257                   case LOC_REGISTER:
3258                   case LOC_ARG:
3259                   case LOC_REF_ARG:
3260                   case LOC_REGPARM_ADDR:
3261                   case LOC_LOCAL:
3262                   case LOC_COMPUTED:
3263                     goto FoundNonType;
3264                   default:
3265                     break;
3266                   }
3267             FoundNonType:
3268               if (j < n_candidates)
3269                 {
3270                   j = 0;
3271                   while (j < n_candidates)
3272                     {
3273                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3274                         {
3275                           candidates[j] = candidates[n_candidates - 1];
3276                           n_candidates -= 1;
3277                         }
3278                       else
3279                         j += 1;
3280                     }
3281                 }
3282             }
3283 
3284           if (n_candidates == 0)
3285             error (_("No definition found for %s"),
3286                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3287           else if (n_candidates == 1)
3288             i = 0;
3289           else if (deprocedure_p
3290                    && !is_nonfunction (candidates, n_candidates))
3291             {
3292               i = ada_resolve_function
3293                 (candidates, n_candidates, NULL, 0,
3294                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3295                  context_type);
3296               if (i < 0)
3297                 error (_("Could not find a match for %s"),
3298                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3299             }
3300           else
3301             {
3302               printf_filtered (_("Multiple matches for %s\n"),
3303                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3304               user_select_syms (candidates, n_candidates, 1);
3305               i = 0;
3306             }
3307 
3308           exp->elts[pc + 1].block = candidates[i].block;
3309           exp->elts[pc + 2].symbol = candidates[i].sym;
3310           if (innermost_block == NULL
3311               || contained_in (candidates[i].block, innermost_block))
3312             innermost_block = candidates[i].block;
3313         }
3314 
3315       if (deprocedure_p
3316           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3317               == TYPE_CODE_FUNC))
3318         {
3319           replace_operator_with_call (expp, pc, 0, 0,
3320                                       exp->elts[pc + 2].symbol,
3321                                       exp->elts[pc + 1].block);
3322           exp = *expp;
3323         }
3324       break;
3325 
3326     case OP_FUNCALL:
3327       {
3328         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3329             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3330           {
3331             struct ada_symbol_info *candidates;
3332             int n_candidates;
3333 
3334             n_candidates =
3335               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3336                                       (exp->elts[pc + 5].symbol),
3337                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3338                                       &candidates);
3339             if (n_candidates == 1)
3340               i = 0;
3341             else
3342               {
3343                 i = ada_resolve_function
3344                   (candidates, n_candidates,
3345                    argvec, nargs,
3346                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3347                    context_type);
3348                 if (i < 0)
3349                   error (_("Could not find a match for %s"),
3350                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3351               }
3352 
3353             exp->elts[pc + 4].block = candidates[i].block;
3354             exp->elts[pc + 5].symbol = candidates[i].sym;
3355             if (innermost_block == NULL
3356                 || contained_in (candidates[i].block, innermost_block))
3357               innermost_block = candidates[i].block;
3358           }
3359       }
3360       break;
3361     case BINOP_ADD:
3362     case BINOP_SUB:
3363     case BINOP_MUL:
3364     case BINOP_DIV:
3365     case BINOP_REM:
3366     case BINOP_MOD:
3367     case BINOP_CONCAT:
3368     case BINOP_BITWISE_AND:
3369     case BINOP_BITWISE_IOR:
3370     case BINOP_BITWISE_XOR:
3371     case BINOP_EQUAL:
3372     case BINOP_NOTEQUAL:
3373     case BINOP_LESS:
3374     case BINOP_GTR:
3375     case BINOP_LEQ:
3376     case BINOP_GEQ:
3377     case BINOP_EXP:
3378     case UNOP_NEG:
3379     case UNOP_PLUS:
3380     case UNOP_LOGICAL_NOT:
3381     case UNOP_ABS:
3382       if (possible_user_operator_p (op, argvec))
3383         {
3384           struct ada_symbol_info *candidates;
3385           int n_candidates;
3386 
3387           n_candidates =
3388             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3389                                     (struct block *) NULL, VAR_DOMAIN,
3390                                     &candidates);
3391           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3392                                     ada_decoded_op_name (op), NULL);
3393           if (i < 0)
3394             break;
3395 
3396           replace_operator_with_call (expp, pc, nargs, 1,
3397                                       candidates[i].sym, candidates[i].block);
3398           exp = *expp;
3399         }
3400       break;
3401 
3402     case OP_TYPE:
3403     case OP_REGISTER:
3404       return NULL;
3405     }
3406 
3407   *pos = pc;
3408   return evaluate_subexp_type (exp, pos);
3409 }
3410 
3411 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3412    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3413    a non-pointer.  */
3414 /* The term "match" here is rather loose.  The match is heuristic and
3415    liberal.  */
3416 
3417 static int
3418 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3419 {
3420   ftype = ada_check_typedef (ftype);
3421   atype = ada_check_typedef (atype);
3422 
3423   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3424     ftype = TYPE_TARGET_TYPE (ftype);
3425   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3426     atype = TYPE_TARGET_TYPE (atype);
3427 
3428   switch (TYPE_CODE (ftype))
3429     {
3430     default:
3431       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3432     case TYPE_CODE_PTR:
3433       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3434         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3435                                TYPE_TARGET_TYPE (atype), 0);
3436       else
3437         return (may_deref
3438                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3439     case TYPE_CODE_INT:
3440     case TYPE_CODE_ENUM:
3441     case TYPE_CODE_RANGE:
3442       switch (TYPE_CODE (atype))
3443         {
3444         case TYPE_CODE_INT:
3445         case TYPE_CODE_ENUM:
3446         case TYPE_CODE_RANGE:
3447           return 1;
3448         default:
3449           return 0;
3450         }
3451 
3452     case TYPE_CODE_ARRAY:
3453       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3454               || ada_is_array_descriptor_type (atype));
3455 
3456     case TYPE_CODE_STRUCT:
3457       if (ada_is_array_descriptor_type (ftype))
3458         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3459                 || ada_is_array_descriptor_type (atype));
3460       else
3461         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3462                 && !ada_is_array_descriptor_type (atype));
3463 
3464     case TYPE_CODE_UNION:
3465     case TYPE_CODE_FLT:
3466       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3467     }
3468 }
3469 
3470 /* Return non-zero if the formals of FUNC "sufficiently match" the
3471    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3472    may also be an enumeral, in which case it is treated as a 0-
3473    argument function.  */
3474 
3475 static int
3476 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3477 {
3478   int i;
3479   struct type *func_type = SYMBOL_TYPE (func);
3480 
3481   if (SYMBOL_CLASS (func) == LOC_CONST
3482       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3483     return (n_actuals == 0);
3484   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3485     return 0;
3486 
3487   if (TYPE_NFIELDS (func_type) != n_actuals)
3488     return 0;
3489 
3490   for (i = 0; i < n_actuals; i += 1)
3491     {
3492       if (actuals[i] == NULL)
3493         return 0;
3494       else
3495         {
3496           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3497 								   i));
3498           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3499 
3500           if (!ada_type_match (ftype, atype, 1))
3501             return 0;
3502         }
3503     }
3504   return 1;
3505 }
3506 
3507 /* False iff function type FUNC_TYPE definitely does not produce a value
3508    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3509    FUNC_TYPE is not a valid function type with a non-null return type
3510    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3511 
3512 static int
3513 return_match (struct type *func_type, struct type *context_type)
3514 {
3515   struct type *return_type;
3516 
3517   if (func_type == NULL)
3518     return 1;
3519 
3520   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3521     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3522   else
3523     return_type = get_base_type (func_type);
3524   if (return_type == NULL)
3525     return 1;
3526 
3527   context_type = get_base_type (context_type);
3528 
3529   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3530     return context_type == NULL || return_type == context_type;
3531   else if (context_type == NULL)
3532     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3533   else
3534     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3535 }
3536 
3537 
3538 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3539    function (if any) that matches the types of the NARGS arguments in
3540    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3541    that returns that type, then eliminate matches that don't.  If
3542    CONTEXT_TYPE is void and there is at least one match that does not
3543    return void, eliminate all matches that do.
3544 
3545    Asks the user if there is more than one match remaining.  Returns -1
3546    if there is no such symbol or none is selected.  NAME is used
3547    solely for messages.  May re-arrange and modify SYMS in
3548    the process; the index returned is for the modified vector.  */
3549 
3550 static int
3551 ada_resolve_function (struct ada_symbol_info syms[],
3552                       int nsyms, struct value **args, int nargs,
3553                       const char *name, struct type *context_type)
3554 {
3555   int fallback;
3556   int k;
3557   int m;                        /* Number of hits */
3558 
3559   m = 0;
3560   /* In the first pass of the loop, we only accept functions matching
3561      context_type.  If none are found, we add a second pass of the loop
3562      where every function is accepted.  */
3563   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3564     {
3565       for (k = 0; k < nsyms; k += 1)
3566         {
3567           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3568 
3569           if (ada_args_match (syms[k].sym, args, nargs)
3570               && (fallback || return_match (type, context_type)))
3571             {
3572               syms[m] = syms[k];
3573               m += 1;
3574             }
3575         }
3576     }
3577 
3578   if (m == 0)
3579     return -1;
3580   else if (m > 1)
3581     {
3582       printf_filtered (_("Multiple matches for %s\n"), name);
3583       user_select_syms (syms, m, 1);
3584       return 0;
3585     }
3586   return 0;
3587 }
3588 
3589 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3590    in a listing of choices during disambiguation (see sort_choices, below).
3591    The idea is that overloadings of a subprogram name from the
3592    same package should sort in their source order.  We settle for ordering
3593    such symbols by their trailing number (__N  or $N).  */
3594 
3595 static int
3596 encoded_ordered_before (const char *N0, const char *N1)
3597 {
3598   if (N1 == NULL)
3599     return 0;
3600   else if (N0 == NULL)
3601     return 1;
3602   else
3603     {
3604       int k0, k1;
3605 
3606       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3607         ;
3608       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3609         ;
3610       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3611           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3612         {
3613           int n0, n1;
3614 
3615           n0 = k0;
3616           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3617             n0 -= 1;
3618           n1 = k1;
3619           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3620             n1 -= 1;
3621           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3622             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3623         }
3624       return (strcmp (N0, N1) < 0);
3625     }
3626 }
3627 
3628 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3629    encoded names.  */
3630 
3631 static void
3632 sort_choices (struct ada_symbol_info syms[], int nsyms)
3633 {
3634   int i;
3635 
3636   for (i = 1; i < nsyms; i += 1)
3637     {
3638       struct ada_symbol_info sym = syms[i];
3639       int j;
3640 
3641       for (j = i - 1; j >= 0; j -= 1)
3642         {
3643           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3644                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3645             break;
3646           syms[j + 1] = syms[j];
3647         }
3648       syms[j + 1] = sym;
3649     }
3650 }
3651 
3652 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3653    by asking the user (if necessary), returning the number selected,
3654    and setting the first elements of SYMS items.  Error if no symbols
3655    selected.  */
3656 
3657 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3658    to be re-integrated one of these days.  */
3659 
3660 int
3661 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3662 {
3663   int i;
3664   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3665   int n_chosen;
3666   int first_choice = (max_results == 1) ? 1 : 2;
3667   const char *select_mode = multiple_symbols_select_mode ();
3668 
3669   if (max_results < 1)
3670     error (_("Request to select 0 symbols!"));
3671   if (nsyms <= 1)
3672     return nsyms;
3673 
3674   if (select_mode == multiple_symbols_cancel)
3675     error (_("\
3676 canceled because the command is ambiguous\n\
3677 See set/show multiple-symbol."));
3678 
3679   /* If select_mode is "all", then return all possible symbols.
3680      Only do that if more than one symbol can be selected, of course.
3681      Otherwise, display the menu as usual.  */
3682   if (select_mode == multiple_symbols_all && max_results > 1)
3683     return nsyms;
3684 
3685   printf_unfiltered (_("[0] cancel\n"));
3686   if (max_results > 1)
3687     printf_unfiltered (_("[1] all\n"));
3688 
3689   sort_choices (syms, nsyms);
3690 
3691   for (i = 0; i < nsyms; i += 1)
3692     {
3693       if (syms[i].sym == NULL)
3694         continue;
3695 
3696       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3697         {
3698           struct symtab_and_line sal =
3699             find_function_start_sal (syms[i].sym, 1);
3700 
3701 	  if (sal.symtab == NULL)
3702 	    printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3703 			       i + first_choice,
3704 			       SYMBOL_PRINT_NAME (syms[i].sym),
3705 			       sal.line);
3706 	  else
3707 	    printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3708 			       SYMBOL_PRINT_NAME (syms[i].sym),
3709 			       symtab_to_filename_for_display (sal.symtab),
3710 			       sal.line);
3711           continue;
3712         }
3713       else
3714         {
3715           int is_enumeral =
3716             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3717              && SYMBOL_TYPE (syms[i].sym) != NULL
3718              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3719 	  struct symtab *symtab = NULL;
3720 
3721 	  if (SYMBOL_OBJFILE_OWNED (syms[i].sym))
3722 	    symtab = symbol_symtab (syms[i].sym);
3723 
3724           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3725             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3726                                i + first_choice,
3727                                SYMBOL_PRINT_NAME (syms[i].sym),
3728 			       symtab_to_filename_for_display (symtab),
3729 			       SYMBOL_LINE (syms[i].sym));
3730           else if (is_enumeral
3731                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3732             {
3733               printf_unfiltered (("[%d] "), i + first_choice);
3734               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3735                               gdb_stdout, -1, 0, &type_print_raw_options);
3736               printf_unfiltered (_("'(%s) (enumeral)\n"),
3737                                  SYMBOL_PRINT_NAME (syms[i].sym));
3738             }
3739           else if (symtab != NULL)
3740             printf_unfiltered (is_enumeral
3741                                ? _("[%d] %s in %s (enumeral)\n")
3742                                : _("[%d] %s at %s:?\n"),
3743                                i + first_choice,
3744                                SYMBOL_PRINT_NAME (syms[i].sym),
3745                                symtab_to_filename_for_display (symtab));
3746           else
3747             printf_unfiltered (is_enumeral
3748                                ? _("[%d] %s (enumeral)\n")
3749                                : _("[%d] %s at ?\n"),
3750                                i + first_choice,
3751                                SYMBOL_PRINT_NAME (syms[i].sym));
3752         }
3753     }
3754 
3755   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3756                              "overload-choice");
3757 
3758   for (i = 0; i < n_chosen; i += 1)
3759     syms[i] = syms[chosen[i]];
3760 
3761   return n_chosen;
3762 }
3763 
3764 /* Read and validate a set of numeric choices from the user in the
3765    range 0 .. N_CHOICES-1.  Place the results in increasing
3766    order in CHOICES[0 .. N-1], and return N.
3767 
3768    The user types choices as a sequence of numbers on one line
3769    separated by blanks, encoding them as follows:
3770 
3771      + A choice of 0 means to cancel the selection, throwing an error.
3772      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3773      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3774 
3775    The user is not allowed to choose more than MAX_RESULTS values.
3776 
3777    ANNOTATION_SUFFIX, if present, is used to annotate the input
3778    prompts (for use with the -f switch).  */
3779 
3780 int
3781 get_selections (int *choices, int n_choices, int max_results,
3782                 int is_all_choice, char *annotation_suffix)
3783 {
3784   char *args;
3785   char *prompt;
3786   int n_chosen;
3787   int first_choice = is_all_choice ? 2 : 1;
3788 
3789   prompt = getenv ("PS2");
3790   if (prompt == NULL)
3791     prompt = "> ";
3792 
3793   args = command_line_input (prompt, 0, annotation_suffix);
3794 
3795   if (args == NULL)
3796     error_no_arg (_("one or more choice numbers"));
3797 
3798   n_chosen = 0;
3799 
3800   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3801      order, as given in args.  Choices are validated.  */
3802   while (1)
3803     {
3804       char *args2;
3805       int choice, j;
3806 
3807       args = skip_spaces (args);
3808       if (*args == '\0' && n_chosen == 0)
3809         error_no_arg (_("one or more choice numbers"));
3810       else if (*args == '\0')
3811         break;
3812 
3813       choice = strtol (args, &args2, 10);
3814       if (args == args2 || choice < 0
3815           || choice > n_choices + first_choice - 1)
3816         error (_("Argument must be choice number"));
3817       args = args2;
3818 
3819       if (choice == 0)
3820         error (_("cancelled"));
3821 
3822       if (choice < first_choice)
3823         {
3824           n_chosen = n_choices;
3825           for (j = 0; j < n_choices; j += 1)
3826             choices[j] = j;
3827           break;
3828         }
3829       choice -= first_choice;
3830 
3831       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3832         {
3833         }
3834 
3835       if (j < 0 || choice != choices[j])
3836         {
3837           int k;
3838 
3839           for (k = n_chosen - 1; k > j; k -= 1)
3840             choices[k + 1] = choices[k];
3841           choices[j + 1] = choice;
3842           n_chosen += 1;
3843         }
3844     }
3845 
3846   if (n_chosen > max_results)
3847     error (_("Select no more than %d of the above"), max_results);
3848 
3849   return n_chosen;
3850 }
3851 
3852 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3853    on the function identified by SYM and BLOCK, and taking NARGS
3854    arguments.  Update *EXPP as needed to hold more space.  */
3855 
3856 static void
3857 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3858                             int oplen, struct symbol *sym,
3859                             const struct block *block)
3860 {
3861   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3862      symbol, -oplen for operator being replaced).  */
3863   struct expression *newexp = (struct expression *)
3864     xzalloc (sizeof (struct expression)
3865              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3866   struct expression *exp = *expp;
3867 
3868   newexp->nelts = exp->nelts + 7 - oplen;
3869   newexp->language_defn = exp->language_defn;
3870   newexp->gdbarch = exp->gdbarch;
3871   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3872   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3873           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3874 
3875   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3876   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3877 
3878   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3879   newexp->elts[pc + 4].block = block;
3880   newexp->elts[pc + 5].symbol = sym;
3881 
3882   *expp = newexp;
3883   xfree (exp);
3884 }
3885 
3886 /* Type-class predicates */
3887 
3888 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3889    or FLOAT).  */
3890 
3891 static int
3892 numeric_type_p (struct type *type)
3893 {
3894   if (type == NULL)
3895     return 0;
3896   else
3897     {
3898       switch (TYPE_CODE (type))
3899         {
3900         case TYPE_CODE_INT:
3901         case TYPE_CODE_FLT:
3902           return 1;
3903         case TYPE_CODE_RANGE:
3904           return (type == TYPE_TARGET_TYPE (type)
3905                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3906         default:
3907           return 0;
3908         }
3909     }
3910 }
3911 
3912 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3913 
3914 static int
3915 integer_type_p (struct type *type)
3916 {
3917   if (type == NULL)
3918     return 0;
3919   else
3920     {
3921       switch (TYPE_CODE (type))
3922         {
3923         case TYPE_CODE_INT:
3924           return 1;
3925         case TYPE_CODE_RANGE:
3926           return (type == TYPE_TARGET_TYPE (type)
3927                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3928         default:
3929           return 0;
3930         }
3931     }
3932 }
3933 
3934 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3935 
3936 static int
3937 scalar_type_p (struct type *type)
3938 {
3939   if (type == NULL)
3940     return 0;
3941   else
3942     {
3943       switch (TYPE_CODE (type))
3944         {
3945         case TYPE_CODE_INT:
3946         case TYPE_CODE_RANGE:
3947         case TYPE_CODE_ENUM:
3948         case TYPE_CODE_FLT:
3949           return 1;
3950         default:
3951           return 0;
3952         }
3953     }
3954 }
3955 
3956 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3957 
3958 static int
3959 discrete_type_p (struct type *type)
3960 {
3961   if (type == NULL)
3962     return 0;
3963   else
3964     {
3965       switch (TYPE_CODE (type))
3966         {
3967         case TYPE_CODE_INT:
3968         case TYPE_CODE_RANGE:
3969         case TYPE_CODE_ENUM:
3970         case TYPE_CODE_BOOL:
3971           return 1;
3972         default:
3973           return 0;
3974         }
3975     }
3976 }
3977 
3978 /* Returns non-zero if OP with operands in the vector ARGS could be
3979    a user-defined function.  Errs on the side of pre-defined operators
3980    (i.e., result 0).  */
3981 
3982 static int
3983 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3984 {
3985   struct type *type0 =
3986     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3987   struct type *type1 =
3988     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3989 
3990   if (type0 == NULL)
3991     return 0;
3992 
3993   switch (op)
3994     {
3995     default:
3996       return 0;
3997 
3998     case BINOP_ADD:
3999     case BINOP_SUB:
4000     case BINOP_MUL:
4001     case BINOP_DIV:
4002       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
4003 
4004     case BINOP_REM:
4005     case BINOP_MOD:
4006     case BINOP_BITWISE_AND:
4007     case BINOP_BITWISE_IOR:
4008     case BINOP_BITWISE_XOR:
4009       return (!(integer_type_p (type0) && integer_type_p (type1)));
4010 
4011     case BINOP_EQUAL:
4012     case BINOP_NOTEQUAL:
4013     case BINOP_LESS:
4014     case BINOP_GTR:
4015     case BINOP_LEQ:
4016     case BINOP_GEQ:
4017       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4018 
4019     case BINOP_CONCAT:
4020       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4021 
4022     case BINOP_EXP:
4023       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4024 
4025     case UNOP_NEG:
4026     case UNOP_PLUS:
4027     case UNOP_LOGICAL_NOT:
4028     case UNOP_ABS:
4029       return (!numeric_type_p (type0));
4030 
4031     }
4032 }
4033 
4034                                 /* Renaming */
4035 
4036 /* NOTES:
4037 
4038    1. In the following, we assume that a renaming type's name may
4039       have an ___XD suffix.  It would be nice if this went away at some
4040       point.
4041    2. We handle both the (old) purely type-based representation of
4042       renamings and the (new) variable-based encoding.  At some point,
4043       it is devoutly to be hoped that the former goes away
4044       (FIXME: hilfinger-2007-07-09).
4045    3. Subprogram renamings are not implemented, although the XRS
4046       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4047 
4048 /* If SYM encodes a renaming,
4049 
4050        <renaming> renames <renamed entity>,
4051 
4052    sets *LEN to the length of the renamed entity's name,
4053    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4054    the string describing the subcomponent selected from the renamed
4055    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4056    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4057    are undefined).  Otherwise, returns a value indicating the category
4058    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4059    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4060    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4061    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4062    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4063    may be NULL, in which case they are not assigned.
4064 
4065    [Currently, however, GCC does not generate subprogram renamings.]  */
4066 
4067 enum ada_renaming_category
4068 ada_parse_renaming (struct symbol *sym,
4069 		    const char **renamed_entity, int *len,
4070 		    const char **renaming_expr)
4071 {
4072   enum ada_renaming_category kind;
4073   const char *info;
4074   const char *suffix;
4075 
4076   if (sym == NULL)
4077     return ADA_NOT_RENAMING;
4078   switch (SYMBOL_CLASS (sym))
4079     {
4080     default:
4081       return ADA_NOT_RENAMING;
4082     case LOC_TYPEDEF:
4083       return parse_old_style_renaming (SYMBOL_TYPE (sym),
4084 				       renamed_entity, len, renaming_expr);
4085     case LOC_LOCAL:
4086     case LOC_STATIC:
4087     case LOC_COMPUTED:
4088     case LOC_OPTIMIZED_OUT:
4089       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4090       if (info == NULL)
4091 	return ADA_NOT_RENAMING;
4092       switch (info[5])
4093 	{
4094 	case '_':
4095 	  kind = ADA_OBJECT_RENAMING;
4096 	  info += 6;
4097 	  break;
4098 	case 'E':
4099 	  kind = ADA_EXCEPTION_RENAMING;
4100 	  info += 7;
4101 	  break;
4102 	case 'P':
4103 	  kind = ADA_PACKAGE_RENAMING;
4104 	  info += 7;
4105 	  break;
4106 	case 'S':
4107 	  kind = ADA_SUBPROGRAM_RENAMING;
4108 	  info += 7;
4109 	  break;
4110 	default:
4111 	  return ADA_NOT_RENAMING;
4112 	}
4113     }
4114 
4115   if (renamed_entity != NULL)
4116     *renamed_entity = info;
4117   suffix = strstr (info, "___XE");
4118   if (suffix == NULL || suffix == info)
4119     return ADA_NOT_RENAMING;
4120   if (len != NULL)
4121     *len = strlen (info) - strlen (suffix);
4122   suffix += 5;
4123   if (renaming_expr != NULL)
4124     *renaming_expr = suffix;
4125   return kind;
4126 }
4127 
4128 /* Assuming TYPE encodes a renaming according to the old encoding in
4129    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4130    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4131    ADA_NOT_RENAMING otherwise.  */
4132 static enum ada_renaming_category
4133 parse_old_style_renaming (struct type *type,
4134 			  const char **renamed_entity, int *len,
4135 			  const char **renaming_expr)
4136 {
4137   enum ada_renaming_category kind;
4138   const char *name;
4139   const char *info;
4140   const char *suffix;
4141 
4142   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4143       || TYPE_NFIELDS (type) != 1)
4144     return ADA_NOT_RENAMING;
4145 
4146   name = type_name_no_tag (type);
4147   if (name == NULL)
4148     return ADA_NOT_RENAMING;
4149 
4150   name = strstr (name, "___XR");
4151   if (name == NULL)
4152     return ADA_NOT_RENAMING;
4153   switch (name[5])
4154     {
4155     case '\0':
4156     case '_':
4157       kind = ADA_OBJECT_RENAMING;
4158       break;
4159     case 'E':
4160       kind = ADA_EXCEPTION_RENAMING;
4161       break;
4162     case 'P':
4163       kind = ADA_PACKAGE_RENAMING;
4164       break;
4165     case 'S':
4166       kind = ADA_SUBPROGRAM_RENAMING;
4167       break;
4168     default:
4169       return ADA_NOT_RENAMING;
4170     }
4171 
4172   info = TYPE_FIELD_NAME (type, 0);
4173   if (info == NULL)
4174     return ADA_NOT_RENAMING;
4175   if (renamed_entity != NULL)
4176     *renamed_entity = info;
4177   suffix = strstr (info, "___XE");
4178   if (renaming_expr != NULL)
4179     *renaming_expr = suffix + 5;
4180   if (suffix == NULL || suffix == info)
4181     return ADA_NOT_RENAMING;
4182   if (len != NULL)
4183     *len = suffix - info;
4184   return kind;
4185 }
4186 
4187 /* Compute the value of the given RENAMING_SYM, which is expected to
4188    be a symbol encoding a renaming expression.  BLOCK is the block
4189    used to evaluate the renaming.  */
4190 
4191 static struct value *
4192 ada_read_renaming_var_value (struct symbol *renaming_sym,
4193 			     const struct block *block)
4194 {
4195   const char *sym_name;
4196   struct expression *expr;
4197   struct value *value;
4198   struct cleanup *old_chain = NULL;
4199 
4200   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4201   expr = parse_exp_1 (&sym_name, 0, block, 0);
4202   old_chain = make_cleanup (free_current_contents, &expr);
4203   value = evaluate_expression (expr);
4204 
4205   do_cleanups (old_chain);
4206   return value;
4207 }
4208 
4209 
4210                                 /* Evaluation: Function Calls */
4211 
4212 /* Return an lvalue containing the value VAL.  This is the identity on
4213    lvalues, and otherwise has the side-effect of allocating memory
4214    in the inferior where a copy of the value contents is copied.  */
4215 
4216 static struct value *
4217 ensure_lval (struct value *val)
4218 {
4219   if (VALUE_LVAL (val) == not_lval
4220       || VALUE_LVAL (val) == lval_internalvar)
4221     {
4222       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4223       const CORE_ADDR addr =
4224         value_as_long (value_allocate_space_in_inferior (len));
4225 
4226       set_value_address (val, addr);
4227       VALUE_LVAL (val) = lval_memory;
4228       write_memory (addr, value_contents (val), len);
4229     }
4230 
4231   return val;
4232 }
4233 
4234 /* Return the value ACTUAL, converted to be an appropriate value for a
4235    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4236    allocating any necessary descriptors (fat pointers), or copies of
4237    values not residing in memory, updating it as needed.  */
4238 
4239 struct value *
4240 ada_convert_actual (struct value *actual, struct type *formal_type0)
4241 {
4242   struct type *actual_type = ada_check_typedef (value_type (actual));
4243   struct type *formal_type = ada_check_typedef (formal_type0);
4244   struct type *formal_target =
4245     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4246     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4247   struct type *actual_target =
4248     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4249     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4250 
4251   if (ada_is_array_descriptor_type (formal_target)
4252       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4253     return make_array_descriptor (formal_type, actual);
4254   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4255 	   || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4256     {
4257       struct value *result;
4258 
4259       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4260           && ada_is_array_descriptor_type (actual_target))
4261 	result = desc_data (actual);
4262       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4263         {
4264           if (VALUE_LVAL (actual) != lval_memory)
4265             {
4266               struct value *val;
4267 
4268               actual_type = ada_check_typedef (value_type (actual));
4269               val = allocate_value (actual_type);
4270               memcpy ((char *) value_contents_raw (val),
4271                       (char *) value_contents (actual),
4272                       TYPE_LENGTH (actual_type));
4273               actual = ensure_lval (val);
4274             }
4275           result = value_addr (actual);
4276         }
4277       else
4278 	return actual;
4279       return value_cast_pointers (formal_type, result, 0);
4280     }
4281   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4282     return ada_value_ind (actual);
4283 
4284   return actual;
4285 }
4286 
4287 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4288    type TYPE.  This is usually an inefficient no-op except on some targets
4289    (such as AVR) where the representation of a pointer and an address
4290    differs.  */
4291 
4292 static CORE_ADDR
4293 value_pointer (struct value *value, struct type *type)
4294 {
4295   struct gdbarch *gdbarch = get_type_arch (type);
4296   unsigned len = TYPE_LENGTH (type);
4297   gdb_byte *buf = alloca (len);
4298   CORE_ADDR addr;
4299 
4300   addr = value_address (value);
4301   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4302   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4303   return addr;
4304 }
4305 
4306 
4307 /* Push a descriptor of type TYPE for array value ARR on the stack at
4308    *SP, updating *SP to reflect the new descriptor.  Return either
4309    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4310    to-descriptor type rather than a descriptor type), a struct value *
4311    representing a pointer to this descriptor.  */
4312 
4313 static struct value *
4314 make_array_descriptor (struct type *type, struct value *arr)
4315 {
4316   struct type *bounds_type = desc_bounds_type (type);
4317   struct type *desc_type = desc_base_type (type);
4318   struct value *descriptor = allocate_value (desc_type);
4319   struct value *bounds = allocate_value (bounds_type);
4320   int i;
4321 
4322   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4323        i > 0; i -= 1)
4324     {
4325       modify_field (value_type (bounds), value_contents_writeable (bounds),
4326 		    ada_array_bound (arr, i, 0),
4327 		    desc_bound_bitpos (bounds_type, i, 0),
4328 		    desc_bound_bitsize (bounds_type, i, 0));
4329       modify_field (value_type (bounds), value_contents_writeable (bounds),
4330 		    ada_array_bound (arr, i, 1),
4331 		    desc_bound_bitpos (bounds_type, i, 1),
4332 		    desc_bound_bitsize (bounds_type, i, 1));
4333     }
4334 
4335   bounds = ensure_lval (bounds);
4336 
4337   modify_field (value_type (descriptor),
4338 		value_contents_writeable (descriptor),
4339 		value_pointer (ensure_lval (arr),
4340 			       TYPE_FIELD_TYPE (desc_type, 0)),
4341 		fat_pntr_data_bitpos (desc_type),
4342 		fat_pntr_data_bitsize (desc_type));
4343 
4344   modify_field (value_type (descriptor),
4345 		value_contents_writeable (descriptor),
4346 		value_pointer (bounds,
4347 			       TYPE_FIELD_TYPE (desc_type, 1)),
4348 		fat_pntr_bounds_bitpos (desc_type),
4349 		fat_pntr_bounds_bitsize (desc_type));
4350 
4351   descriptor = ensure_lval (descriptor);
4352 
4353   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4354     return value_addr (descriptor);
4355   else
4356     return descriptor;
4357 }
4358 
4359                                 /* Symbol Cache Module */
4360 
4361 /* Performance measurements made as of 2010-01-15 indicate that
4362    this cache does bring some noticeable improvements.  Depending
4363    on the type of entity being printed, the cache can make it as much
4364    as an order of magnitude faster than without it.
4365 
4366    The descriptive type DWARF extension has significantly reduced
4367    the need for this cache, at least when DWARF is being used.  However,
4368    even in this case, some expensive name-based symbol searches are still
4369    sometimes necessary - to find an XVZ variable, mostly.  */
4370 
4371 /* Initialize the contents of SYM_CACHE.  */
4372 
4373 static void
4374 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4375 {
4376   obstack_init (&sym_cache->cache_space);
4377   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4378 }
4379 
4380 /* Free the memory used by SYM_CACHE.  */
4381 
4382 static void
4383 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4384 {
4385   obstack_free (&sym_cache->cache_space, NULL);
4386   xfree (sym_cache);
4387 }
4388 
4389 /* Return the symbol cache associated to the given program space PSPACE.
4390    If not allocated for this PSPACE yet, allocate and initialize one.  */
4391 
4392 static struct ada_symbol_cache *
4393 ada_get_symbol_cache (struct program_space *pspace)
4394 {
4395   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4396 
4397   if (pspace_data->sym_cache == NULL)
4398     {
4399       pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4400       ada_init_symbol_cache (pspace_data->sym_cache);
4401     }
4402 
4403   return pspace_data->sym_cache;
4404 }
4405 
4406 /* Clear all entries from the symbol cache.  */
4407 
4408 static void
4409 ada_clear_symbol_cache (void)
4410 {
4411   struct ada_symbol_cache *sym_cache
4412     = ada_get_symbol_cache (current_program_space);
4413 
4414   obstack_free (&sym_cache->cache_space, NULL);
4415   ada_init_symbol_cache (sym_cache);
4416 }
4417 
4418 /* Search our cache for an entry matching NAME and NAMESPACE.
4419    Return it if found, or NULL otherwise.  */
4420 
4421 static struct cache_entry **
4422 find_entry (const char *name, domain_enum namespace)
4423 {
4424   struct ada_symbol_cache *sym_cache
4425     = ada_get_symbol_cache (current_program_space);
4426   int h = msymbol_hash (name) % HASH_SIZE;
4427   struct cache_entry **e;
4428 
4429   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4430     {
4431       if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4432         return e;
4433     }
4434   return NULL;
4435 }
4436 
4437 /* Search the symbol cache for an entry matching NAME and NAMESPACE.
4438    Return 1 if found, 0 otherwise.
4439 
4440    If an entry was found and SYM is not NULL, set *SYM to the entry's
4441    SYM.  Same principle for BLOCK if not NULL.  */
4442 
4443 static int
4444 lookup_cached_symbol (const char *name, domain_enum namespace,
4445                       struct symbol **sym, const struct block **block)
4446 {
4447   struct cache_entry **e = find_entry (name, namespace);
4448 
4449   if (e == NULL)
4450     return 0;
4451   if (sym != NULL)
4452     *sym = (*e)->sym;
4453   if (block != NULL)
4454     *block = (*e)->block;
4455   return 1;
4456 }
4457 
4458 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4459    in domain NAMESPACE, save this result in our symbol cache.  */
4460 
4461 static void
4462 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
4463               const struct block *block)
4464 {
4465   struct ada_symbol_cache *sym_cache
4466     = ada_get_symbol_cache (current_program_space);
4467   int h;
4468   char *copy;
4469   struct cache_entry *e;
4470 
4471   /* Symbols for builtin types don't have a block.
4472      For now don't cache such symbols.  */
4473   if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4474     return;
4475 
4476   /* If the symbol is a local symbol, then do not cache it, as a search
4477      for that symbol depends on the context.  To determine whether
4478      the symbol is local or not, we check the block where we found it
4479      against the global and static blocks of its associated symtab.  */
4480   if (sym
4481       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4482 			    GLOBAL_BLOCK) != block
4483       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4484 			    STATIC_BLOCK) != block)
4485     return;
4486 
4487   h = msymbol_hash (name) % HASH_SIZE;
4488   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4489 					    sizeof (*e));
4490   e->next = sym_cache->root[h];
4491   sym_cache->root[h] = e;
4492   e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4493   strcpy (copy, name);
4494   e->sym = sym;
4495   e->namespace = namespace;
4496   e->block = block;
4497 }
4498 
4499                                 /* Symbol Lookup */
4500 
4501 /* Return nonzero if wild matching should be used when searching for
4502    all symbols matching LOOKUP_NAME.
4503 
4504    LOOKUP_NAME is expected to be a symbol name after transformation
4505    for Ada lookups (see ada_name_for_lookup).  */
4506 
4507 static int
4508 should_use_wild_match (const char *lookup_name)
4509 {
4510   return (strstr (lookup_name, "__") == NULL);
4511 }
4512 
4513 /* Return the result of a standard (literal, C-like) lookup of NAME in
4514    given DOMAIN, visible from lexical block BLOCK.  */
4515 
4516 static struct symbol *
4517 standard_lookup (const char *name, const struct block *block,
4518                  domain_enum domain)
4519 {
4520   /* Initialize it just to avoid a GCC false warning.  */
4521   struct symbol *sym = NULL;
4522 
4523   if (lookup_cached_symbol (name, domain, &sym, NULL))
4524     return sym;
4525   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4526   cache_symbol (name, domain, sym, block_found);
4527   return sym;
4528 }
4529 
4530 
4531 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4532    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions,
4533    since they contend in overloading in the same way.  */
4534 static int
4535 is_nonfunction (struct ada_symbol_info syms[], int n)
4536 {
4537   int i;
4538 
4539   for (i = 0; i < n; i += 1)
4540     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4541         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4542             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4543       return 1;
4544 
4545   return 0;
4546 }
4547 
4548 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4549    struct types.  Otherwise, they may not.  */
4550 
4551 static int
4552 equiv_types (struct type *type0, struct type *type1)
4553 {
4554   if (type0 == type1)
4555     return 1;
4556   if (type0 == NULL || type1 == NULL
4557       || TYPE_CODE (type0) != TYPE_CODE (type1))
4558     return 0;
4559   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4560        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4561       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4562       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4563     return 1;
4564 
4565   return 0;
4566 }
4567 
4568 /* True iff SYM0 represents the same entity as SYM1, or one that is
4569    no more defined than that of SYM1.  */
4570 
4571 static int
4572 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4573 {
4574   if (sym0 == sym1)
4575     return 1;
4576   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4577       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4578     return 0;
4579 
4580   switch (SYMBOL_CLASS (sym0))
4581     {
4582     case LOC_UNDEF:
4583       return 1;
4584     case LOC_TYPEDEF:
4585       {
4586         struct type *type0 = SYMBOL_TYPE (sym0);
4587         struct type *type1 = SYMBOL_TYPE (sym1);
4588         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4589         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4590         int len0 = strlen (name0);
4591 
4592         return
4593           TYPE_CODE (type0) == TYPE_CODE (type1)
4594           && (equiv_types (type0, type1)
4595               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4596                   && strncmp (name1 + len0, "___XV", 5) == 0));
4597       }
4598     case LOC_CONST:
4599       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4600         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4601     default:
4602       return 0;
4603     }
4604 }
4605 
4606 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4607    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4608 
4609 static void
4610 add_defn_to_vec (struct obstack *obstackp,
4611                  struct symbol *sym,
4612                  const struct block *block)
4613 {
4614   int i;
4615   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4616 
4617   /* Do not try to complete stub types, as the debugger is probably
4618      already scanning all symbols matching a certain name at the
4619      time when this function is called.  Trying to replace the stub
4620      type by its associated full type will cause us to restart a scan
4621      which may lead to an infinite recursion.  Instead, the client
4622      collecting the matching symbols will end up collecting several
4623      matches, with at least one of them complete.  It can then filter
4624      out the stub ones if needed.  */
4625 
4626   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4627     {
4628       if (lesseq_defined_than (sym, prevDefns[i].sym))
4629         return;
4630       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4631         {
4632           prevDefns[i].sym = sym;
4633           prevDefns[i].block = block;
4634           return;
4635         }
4636     }
4637 
4638   {
4639     struct ada_symbol_info info;
4640 
4641     info.sym = sym;
4642     info.block = block;
4643     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4644   }
4645 }
4646 
4647 /* Number of ada_symbol_info structures currently collected in
4648    current vector in *OBSTACKP.  */
4649 
4650 static int
4651 num_defns_collected (struct obstack *obstackp)
4652 {
4653   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4654 }
4655 
4656 /* Vector of ada_symbol_info structures currently collected in current
4657    vector in *OBSTACKP.  If FINISH, close off the vector and return
4658    its final address.  */
4659 
4660 static struct ada_symbol_info *
4661 defns_collected (struct obstack *obstackp, int finish)
4662 {
4663   if (finish)
4664     return obstack_finish (obstackp);
4665   else
4666     return (struct ada_symbol_info *) obstack_base (obstackp);
4667 }
4668 
4669 /* Return a bound minimal symbol matching NAME according to Ada
4670    decoding rules.  Returns an invalid symbol if there is no such
4671    minimal symbol.  Names prefixed with "standard__" are handled
4672    specially: "standard__" is first stripped off, and only static and
4673    global symbols are searched.  */
4674 
4675 struct bound_minimal_symbol
4676 ada_lookup_simple_minsym (const char *name)
4677 {
4678   struct bound_minimal_symbol result;
4679   struct objfile *objfile;
4680   struct minimal_symbol *msymbol;
4681   const int wild_match_p = should_use_wild_match (name);
4682 
4683   memset (&result, 0, sizeof (result));
4684 
4685   /* Special case: If the user specifies a symbol name inside package
4686      Standard, do a non-wild matching of the symbol name without
4687      the "standard__" prefix.  This was primarily introduced in order
4688      to allow the user to specifically access the standard exceptions
4689      using, for instance, Standard.Constraint_Error when Constraint_Error
4690      is ambiguous (due to the user defining its own Constraint_Error
4691      entity inside its program).  */
4692   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4693     name += sizeof ("standard__") - 1;
4694 
4695   ALL_MSYMBOLS (objfile, msymbol)
4696   {
4697     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4698         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4699       {
4700 	result.minsym = msymbol;
4701 	result.objfile = objfile;
4702 	break;
4703       }
4704   }
4705 
4706   return result;
4707 }
4708 
4709 /* For all subprograms that statically enclose the subprogram of the
4710    selected frame, add symbols matching identifier NAME in DOMAIN
4711    and their blocks to the list of data in OBSTACKP, as for
4712    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4713    with a wildcard prefix.  */
4714 
4715 static void
4716 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4717                                   const char *name, domain_enum namespace,
4718                                   int wild_match_p)
4719 {
4720 }
4721 
4722 /* True if TYPE is definitely an artificial type supplied to a symbol
4723    for which no debugging information was given in the symbol file.  */
4724 
4725 static int
4726 is_nondebugging_type (struct type *type)
4727 {
4728   const char *name = ada_type_name (type);
4729 
4730   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4731 }
4732 
4733 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4734    that are deemed "identical" for practical purposes.
4735 
4736    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4737    types and that their number of enumerals is identical (in other
4738    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4739 
4740 static int
4741 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4742 {
4743   int i;
4744 
4745   /* The heuristic we use here is fairly conservative.  We consider
4746      that 2 enumerate types are identical if they have the same
4747      number of enumerals and that all enumerals have the same
4748      underlying value and name.  */
4749 
4750   /* All enums in the type should have an identical underlying value.  */
4751   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4752     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4753       return 0;
4754 
4755   /* All enumerals should also have the same name (modulo any numerical
4756      suffix).  */
4757   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4758     {
4759       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4760       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4761       int len_1 = strlen (name_1);
4762       int len_2 = strlen (name_2);
4763 
4764       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4765       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4766       if (len_1 != len_2
4767           || strncmp (TYPE_FIELD_NAME (type1, i),
4768 		      TYPE_FIELD_NAME (type2, i),
4769 		      len_1) != 0)
4770 	return 0;
4771     }
4772 
4773   return 1;
4774 }
4775 
4776 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4777    that are deemed "identical" for practical purposes.  Sometimes,
4778    enumerals are not strictly identical, but their types are so similar
4779    that they can be considered identical.
4780 
4781    For instance, consider the following code:
4782 
4783       type Color is (Black, Red, Green, Blue, White);
4784       type RGB_Color is new Color range Red .. Blue;
4785 
4786    Type RGB_Color is a subrange of an implicit type which is a copy
4787    of type Color. If we call that implicit type RGB_ColorB ("B" is
4788    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4789    As a result, when an expression references any of the enumeral
4790    by name (Eg. "print green"), the expression is technically
4791    ambiguous and the user should be asked to disambiguate. But
4792    doing so would only hinder the user, since it wouldn't matter
4793    what choice he makes, the outcome would always be the same.
4794    So, for practical purposes, we consider them as the same.  */
4795 
4796 static int
4797 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4798 {
4799   int i;
4800 
4801   /* Before performing a thorough comparison check of each type,
4802      we perform a series of inexpensive checks.  We expect that these
4803      checks will quickly fail in the vast majority of cases, and thus
4804      help prevent the unnecessary use of a more expensive comparison.
4805      Said comparison also expects us to make some of these checks
4806      (see ada_identical_enum_types_p).  */
4807 
4808   /* Quick check: All symbols should have an enum type.  */
4809   for (i = 0; i < nsyms; i++)
4810     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4811       return 0;
4812 
4813   /* Quick check: They should all have the same value.  */
4814   for (i = 1; i < nsyms; i++)
4815     if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4816       return 0;
4817 
4818   /* Quick check: They should all have the same number of enumerals.  */
4819   for (i = 1; i < nsyms; i++)
4820     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4821         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4822       return 0;
4823 
4824   /* All the sanity checks passed, so we might have a set of
4825      identical enumeration types.  Perform a more complete
4826      comparison of the type of each symbol.  */
4827   for (i = 1; i < nsyms; i++)
4828     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4829                                      SYMBOL_TYPE (syms[0].sym)))
4830       return 0;
4831 
4832   return 1;
4833 }
4834 
4835 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4836    duplicate other symbols in the list (The only case I know of where
4837    this happens is when object files containing stabs-in-ecoff are
4838    linked with files containing ordinary ecoff debugging symbols (or no
4839    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4840    Returns the number of items in the modified list.  */
4841 
4842 static int
4843 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4844 {
4845   int i, j;
4846 
4847   /* We should never be called with less than 2 symbols, as there
4848      cannot be any extra symbol in that case.  But it's easy to
4849      handle, since we have nothing to do in that case.  */
4850   if (nsyms < 2)
4851     return nsyms;
4852 
4853   i = 0;
4854   while (i < nsyms)
4855     {
4856       int remove_p = 0;
4857 
4858       /* If two symbols have the same name and one of them is a stub type,
4859          the get rid of the stub.  */
4860 
4861       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4862           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4863         {
4864           for (j = 0; j < nsyms; j++)
4865             {
4866               if (j != i
4867                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4868                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4869                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4870                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4871                 remove_p = 1;
4872             }
4873         }
4874 
4875       /* Two symbols with the same name, same class and same address
4876          should be identical.  */
4877 
4878       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4879           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4880           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4881         {
4882           for (j = 0; j < nsyms; j += 1)
4883             {
4884               if (i != j
4885                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4886                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4887                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4888                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4889                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4890                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4891                 remove_p = 1;
4892             }
4893         }
4894 
4895       if (remove_p)
4896         {
4897           for (j = i + 1; j < nsyms; j += 1)
4898             syms[j - 1] = syms[j];
4899           nsyms -= 1;
4900         }
4901 
4902       i += 1;
4903     }
4904 
4905   /* If all the remaining symbols are identical enumerals, then
4906      just keep the first one and discard the rest.
4907 
4908      Unlike what we did previously, we do not discard any entry
4909      unless they are ALL identical.  This is because the symbol
4910      comparison is not a strict comparison, but rather a practical
4911      comparison.  If all symbols are considered identical, then
4912      we can just go ahead and use the first one and discard the rest.
4913      But if we cannot reduce the list to a single element, we have
4914      to ask the user to disambiguate anyways.  And if we have to
4915      present a multiple-choice menu, it's less confusing if the list
4916      isn't missing some choices that were identical and yet distinct.  */
4917   if (symbols_are_identical_enums (syms, nsyms))
4918     nsyms = 1;
4919 
4920   return nsyms;
4921 }
4922 
4923 /* Given a type that corresponds to a renaming entity, use the type name
4924    to extract the scope (package name or function name, fully qualified,
4925    and following the GNAT encoding convention) where this renaming has been
4926    defined.  The string returned needs to be deallocated after use.  */
4927 
4928 static char *
4929 xget_renaming_scope (struct type *renaming_type)
4930 {
4931   /* The renaming types adhere to the following convention:
4932      <scope>__<rename>___<XR extension>.
4933      So, to extract the scope, we search for the "___XR" extension,
4934      and then backtrack until we find the first "__".  */
4935 
4936   const char *name = type_name_no_tag (renaming_type);
4937   char *suffix = strstr (name, "___XR");
4938   char *last;
4939   int scope_len;
4940   char *scope;
4941 
4942   /* Now, backtrack a bit until we find the first "__".  Start looking
4943      at suffix - 3, as the <rename> part is at least one character long.  */
4944 
4945   for (last = suffix - 3; last > name; last--)
4946     if (last[0] == '_' && last[1] == '_')
4947       break;
4948 
4949   /* Make a copy of scope and return it.  */
4950 
4951   scope_len = last - name;
4952   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4953 
4954   strncpy (scope, name, scope_len);
4955   scope[scope_len] = '\0';
4956 
4957   return scope;
4958 }
4959 
4960 /* Return nonzero if NAME corresponds to a package name.  */
4961 
4962 static int
4963 is_package_name (const char *name)
4964 {
4965   /* Here, We take advantage of the fact that no symbols are generated
4966      for packages, while symbols are generated for each function.
4967      So the condition for NAME represent a package becomes equivalent
4968      to NAME not existing in our list of symbols.  There is only one
4969      small complication with library-level functions (see below).  */
4970 
4971   char *fun_name;
4972 
4973   /* If it is a function that has not been defined at library level,
4974      then we should be able to look it up in the symbols.  */
4975   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4976     return 0;
4977 
4978   /* Library-level function names start with "_ada_".  See if function
4979      "_ada_" followed by NAME can be found.  */
4980 
4981   /* Do a quick check that NAME does not contain "__", since library-level
4982      functions names cannot contain "__" in them.  */
4983   if (strstr (name, "__") != NULL)
4984     return 0;
4985 
4986   fun_name = xstrprintf ("_ada_%s", name);
4987 
4988   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4989 }
4990 
4991 /* Return nonzero if SYM corresponds to a renaming entity that is
4992    not visible from FUNCTION_NAME.  */
4993 
4994 static int
4995 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
4996 {
4997   char *scope;
4998   struct cleanup *old_chain;
4999 
5000   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5001     return 0;
5002 
5003   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
5004   old_chain = make_cleanup (xfree, scope);
5005 
5006   /* If the rename has been defined in a package, then it is visible.  */
5007   if (is_package_name (scope))
5008     {
5009       do_cleanups (old_chain);
5010       return 0;
5011     }
5012 
5013   /* Check that the rename is in the current function scope by checking
5014      that its name starts with SCOPE.  */
5015 
5016   /* If the function name starts with "_ada_", it means that it is
5017      a library-level function.  Strip this prefix before doing the
5018      comparison, as the encoding for the renaming does not contain
5019      this prefix.  */
5020   if (strncmp (function_name, "_ada_", 5) == 0)
5021     function_name += 5;
5022 
5023   {
5024     int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
5025 
5026     do_cleanups (old_chain);
5027     return is_invisible;
5028   }
5029 }
5030 
5031 /* Remove entries from SYMS that corresponds to a renaming entity that
5032    is not visible from the function associated with CURRENT_BLOCK or
5033    that is superfluous due to the presence of more specific renaming
5034    information.  Places surviving symbols in the initial entries of
5035    SYMS and returns the number of surviving symbols.
5036 
5037    Rationale:
5038    First, in cases where an object renaming is implemented as a
5039    reference variable, GNAT may produce both the actual reference
5040    variable and the renaming encoding.  In this case, we discard the
5041    latter.
5042 
5043    Second, GNAT emits a type following a specified encoding for each renaming
5044    entity.  Unfortunately, STABS currently does not support the definition
5045    of types that are local to a given lexical block, so all renamings types
5046    are emitted at library level.  As a consequence, if an application
5047    contains two renaming entities using the same name, and a user tries to
5048    print the value of one of these entities, the result of the ada symbol
5049    lookup will also contain the wrong renaming type.
5050 
5051    This function partially covers for this limitation by attempting to
5052    remove from the SYMS list renaming symbols that should be visible
5053    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5054    method with the current information available.  The implementation
5055    below has a couple of limitations (FIXME: brobecker-2003-05-12):
5056 
5057       - When the user tries to print a rename in a function while there
5058         is another rename entity defined in a package:  Normally, the
5059         rename in the function has precedence over the rename in the
5060         package, so the latter should be removed from the list.  This is
5061         currently not the case.
5062 
5063       - This function will incorrectly remove valid renames if
5064         the CURRENT_BLOCK corresponds to a function which symbol name
5065         has been changed by an "Export" pragma.  As a consequence,
5066         the user will be unable to print such rename entities.  */
5067 
5068 static int
5069 remove_irrelevant_renamings (struct ada_symbol_info *syms,
5070 			     int nsyms, const struct block *current_block)
5071 {
5072   struct symbol *current_function;
5073   const char *current_function_name;
5074   int i;
5075   int is_new_style_renaming;
5076 
5077   /* If there is both a renaming foo___XR... encoded as a variable and
5078      a simple variable foo in the same block, discard the latter.
5079      First, zero out such symbols, then compress.  */
5080   is_new_style_renaming = 0;
5081   for (i = 0; i < nsyms; i += 1)
5082     {
5083       struct symbol *sym = syms[i].sym;
5084       const struct block *block = syms[i].block;
5085       const char *name;
5086       const char *suffix;
5087 
5088       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5089 	continue;
5090       name = SYMBOL_LINKAGE_NAME (sym);
5091       suffix = strstr (name, "___XR");
5092 
5093       if (suffix != NULL)
5094 	{
5095 	  int name_len = suffix - name;
5096 	  int j;
5097 
5098 	  is_new_style_renaming = 1;
5099 	  for (j = 0; j < nsyms; j += 1)
5100 	    if (i != j && syms[j].sym != NULL
5101 		&& strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5102 			    name_len) == 0
5103 		&& block == syms[j].block)
5104 	      syms[j].sym = NULL;
5105 	}
5106     }
5107   if (is_new_style_renaming)
5108     {
5109       int j, k;
5110 
5111       for (j = k = 0; j < nsyms; j += 1)
5112 	if (syms[j].sym != NULL)
5113 	    {
5114 	      syms[k] = syms[j];
5115 	      k += 1;
5116 	    }
5117       return k;
5118     }
5119 
5120   /* Extract the function name associated to CURRENT_BLOCK.
5121      Abort if unable to do so.  */
5122 
5123   if (current_block == NULL)
5124     return nsyms;
5125 
5126   current_function = block_linkage_function (current_block);
5127   if (current_function == NULL)
5128     return nsyms;
5129 
5130   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5131   if (current_function_name == NULL)
5132     return nsyms;
5133 
5134   /* Check each of the symbols, and remove it from the list if it is
5135      a type corresponding to a renaming that is out of the scope of
5136      the current block.  */
5137 
5138   i = 0;
5139   while (i < nsyms)
5140     {
5141       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5142           == ADA_OBJECT_RENAMING
5143           && old_renaming_is_invisible (syms[i].sym, current_function_name))
5144         {
5145           int j;
5146 
5147           for (j = i + 1; j < nsyms; j += 1)
5148             syms[j - 1] = syms[j];
5149           nsyms -= 1;
5150         }
5151       else
5152         i += 1;
5153     }
5154 
5155   return nsyms;
5156 }
5157 
5158 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5159    whose name and domain match NAME and DOMAIN respectively.
5160    If no match was found, then extend the search to "enclosing"
5161    routines (in other words, if we're inside a nested function,
5162    search the symbols defined inside the enclosing functions).
5163    If WILD_MATCH_P is nonzero, perform the naming matching in
5164    "wild" mode (see function "wild_match" for more info).
5165 
5166    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5167 
5168 static void
5169 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5170                        const struct block *block, domain_enum domain,
5171                        int wild_match_p)
5172 {
5173   int block_depth = 0;
5174 
5175   while (block != NULL)
5176     {
5177       block_depth += 1;
5178       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5179 			     wild_match_p);
5180 
5181       /* If we found a non-function match, assume that's the one.  */
5182       if (is_nonfunction (defns_collected (obstackp, 0),
5183                           num_defns_collected (obstackp)))
5184         return;
5185 
5186       block = BLOCK_SUPERBLOCK (block);
5187     }
5188 
5189   /* If no luck so far, try to find NAME as a local symbol in some lexically
5190      enclosing subprogram.  */
5191   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5192     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5193 }
5194 
5195 /* An object of this type is used as the user_data argument when
5196    calling the map_matching_symbols method.  */
5197 
5198 struct match_data
5199 {
5200   struct objfile *objfile;
5201   struct obstack *obstackp;
5202   struct symbol *arg_sym;
5203   int found_sym;
5204 };
5205 
5206 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5207    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5208    containing the obstack that collects the symbol list, the file that SYM
5209    must come from, a flag indicating whether a non-argument symbol has
5210    been found in the current block, and the last argument symbol
5211    passed in SYM within the current block (if any).  When SYM is null,
5212    marking the end of a block, the argument symbol is added if no
5213    other has been found.  */
5214 
5215 static int
5216 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5217 {
5218   struct match_data *data = (struct match_data *) data0;
5219 
5220   if (sym == NULL)
5221     {
5222       if (!data->found_sym && data->arg_sym != NULL)
5223 	add_defn_to_vec (data->obstackp,
5224 			 fixup_symbol_section (data->arg_sym, data->objfile),
5225 			 block);
5226       data->found_sym = 0;
5227       data->arg_sym = NULL;
5228     }
5229   else
5230     {
5231       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5232 	return 0;
5233       else if (SYMBOL_IS_ARGUMENT (sym))
5234 	data->arg_sym = sym;
5235       else
5236 	{
5237 	  data->found_sym = 1;
5238 	  add_defn_to_vec (data->obstackp,
5239 			   fixup_symbol_section (sym, data->objfile),
5240 			   block);
5241 	}
5242     }
5243   return 0;
5244 }
5245 
5246 /* Implements compare_names, but only applying the comparision using
5247    the given CASING.  */
5248 
5249 static int
5250 compare_names_with_case (const char *string1, const char *string2,
5251 			 enum case_sensitivity casing)
5252 {
5253   while (*string1 != '\0' && *string2 != '\0')
5254     {
5255       char c1, c2;
5256 
5257       if (isspace (*string1) || isspace (*string2))
5258 	return strcmp_iw_ordered (string1, string2);
5259 
5260       if (casing == case_sensitive_off)
5261 	{
5262 	  c1 = tolower (*string1);
5263 	  c2 = tolower (*string2);
5264 	}
5265       else
5266 	{
5267 	  c1 = *string1;
5268 	  c2 = *string2;
5269 	}
5270       if (c1 != c2)
5271 	break;
5272 
5273       string1 += 1;
5274       string2 += 1;
5275     }
5276 
5277   switch (*string1)
5278     {
5279     case '(':
5280       return strcmp_iw_ordered (string1, string2);
5281     case '_':
5282       if (*string2 == '\0')
5283 	{
5284 	  if (is_name_suffix (string1))
5285 	    return 0;
5286 	  else
5287 	    return 1;
5288 	}
5289       /* FALLTHROUGH */
5290     default:
5291       if (*string2 == '(')
5292 	return strcmp_iw_ordered (string1, string2);
5293       else
5294 	{
5295 	  if (casing == case_sensitive_off)
5296 	    return tolower (*string1) - tolower (*string2);
5297 	  else
5298 	    return *string1 - *string2;
5299 	}
5300     }
5301 }
5302 
5303 /* Compare STRING1 to STRING2, with results as for strcmp.
5304    Compatible with strcmp_iw_ordered in that...
5305 
5306        strcmp_iw_ordered (STRING1, STRING2) <= 0
5307 
5308    ... implies...
5309 
5310        compare_names (STRING1, STRING2) <= 0
5311 
5312    (they may differ as to what symbols compare equal).  */
5313 
5314 static int
5315 compare_names (const char *string1, const char *string2)
5316 {
5317   int result;
5318 
5319   /* Similar to what strcmp_iw_ordered does, we need to perform
5320      a case-insensitive comparison first, and only resort to
5321      a second, case-sensitive, comparison if the first one was
5322      not sufficient to differentiate the two strings.  */
5323 
5324   result = compare_names_with_case (string1, string2, case_sensitive_off);
5325   if (result == 0)
5326     result = compare_names_with_case (string1, string2, case_sensitive_on);
5327 
5328   return result;
5329 }
5330 
5331 /* Add to OBSTACKP all non-local symbols whose name and domain match
5332    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5333    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5334 
5335 static void
5336 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5337 		      domain_enum domain, int global,
5338 		      int is_wild_match)
5339 {
5340   struct objfile *objfile;
5341   struct match_data data;
5342 
5343   memset (&data, 0, sizeof data);
5344   data.obstackp = obstackp;
5345 
5346   ALL_OBJFILES (objfile)
5347     {
5348       data.objfile = objfile;
5349 
5350       if (is_wild_match)
5351 	objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5352 					       aux_add_nonlocal_symbols, &data,
5353 					       wild_match, NULL);
5354       else
5355 	objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5356 					       aux_add_nonlocal_symbols, &data,
5357 					       full_match, compare_names);
5358     }
5359 
5360   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5361     {
5362       ALL_OBJFILES (objfile)
5363         {
5364 	  char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5365 	  strcpy (name1, "_ada_");
5366 	  strcpy (name1 + sizeof ("_ada_") - 1, name);
5367 	  data.objfile = objfile;
5368 	  objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5369 						 global,
5370 						 aux_add_nonlocal_symbols,
5371 						 &data,
5372 						 full_match, compare_names);
5373 	}
5374     }
5375 }
5376 
5377 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5378    non-zero, enclosing scope and in global scopes, returning the number of
5379    matches.
5380    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5381    indicating the symbols found and the blocks and symbol tables (if
5382    any) in which they were found.  This vector is transient---good only to
5383    the next call of ada_lookup_symbol_list.
5384 
5385    When full_search is non-zero, any non-function/non-enumeral
5386    symbol match within the nest of blocks whose innermost member is BLOCK0,
5387    is the one match returned (no other matches in that or
5388    enclosing blocks is returned).  If there are any matches in or
5389    surrounding BLOCK0, then these alone are returned.
5390 
5391    Names prefixed with "standard__" are handled specially: "standard__"
5392    is first stripped off, and only static and global symbols are searched.  */
5393 
5394 static int
5395 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5396 			       domain_enum namespace,
5397 			       struct ada_symbol_info **results,
5398 			       int full_search)
5399 {
5400   struct symbol *sym;
5401   const struct block *block;
5402   const char *name;
5403   const int wild_match_p = should_use_wild_match (name0);
5404   int syms_from_global_search = 0;
5405   int ndefns;
5406 
5407   obstack_free (&symbol_list_obstack, NULL);
5408   obstack_init (&symbol_list_obstack);
5409 
5410   /* Search specified block and its superiors.  */
5411 
5412   name = name0;
5413   block = block0;
5414 
5415   /* Special case: If the user specifies a symbol name inside package
5416      Standard, do a non-wild matching of the symbol name without
5417      the "standard__" prefix.  This was primarily introduced in order
5418      to allow the user to specifically access the standard exceptions
5419      using, for instance, Standard.Constraint_Error when Constraint_Error
5420      is ambiguous (due to the user defining its own Constraint_Error
5421      entity inside its program).  */
5422   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5423     {
5424       block = NULL;
5425       name = name0 + sizeof ("standard__") - 1;
5426     }
5427 
5428   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5429 
5430   if (block != NULL)
5431     {
5432       if (full_search)
5433 	{
5434 	  ada_add_local_symbols (&symbol_list_obstack, name, block,
5435 				 namespace, wild_match_p);
5436 	}
5437       else
5438 	{
5439 	  /* In the !full_search case we're are being called by
5440 	     ada_iterate_over_symbols, and we don't want to search
5441 	     superblocks.  */
5442 	  ada_add_block_symbols (&symbol_list_obstack, block, name,
5443 				 namespace, NULL, wild_match_p);
5444 	}
5445       if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5446 	goto done;
5447     }
5448 
5449   /* No non-global symbols found.  Check our cache to see if we have
5450      already performed this search before.  If we have, then return
5451      the same result.  */
5452 
5453   if (lookup_cached_symbol (name0, namespace, &sym, &block))
5454     {
5455       if (sym != NULL)
5456         add_defn_to_vec (&symbol_list_obstack, sym, block);
5457       goto done;
5458     }
5459 
5460   syms_from_global_search = 1;
5461 
5462   /* Search symbols from all global blocks.  */
5463 
5464   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5465 			wild_match_p);
5466 
5467   /* Now add symbols from all per-file blocks if we've gotten no hits
5468      (not strictly correct, but perhaps better than an error).  */
5469 
5470   if (num_defns_collected (&symbol_list_obstack) == 0)
5471     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5472 			  wild_match_p);
5473 
5474 done:
5475   ndefns = num_defns_collected (&symbol_list_obstack);
5476   *results = defns_collected (&symbol_list_obstack, 1);
5477 
5478   ndefns = remove_extra_symbols (*results, ndefns);
5479 
5480   if (ndefns == 0 && full_search && syms_from_global_search)
5481     cache_symbol (name0, namespace, NULL, NULL);
5482 
5483   if (ndefns == 1 && full_search && syms_from_global_search)
5484     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
5485 
5486   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5487 
5488   return ndefns;
5489 }
5490 
5491 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5492    in global scopes, returning the number of matches, and setting *RESULTS
5493    to a vector of (SYM,BLOCK) tuples.
5494    See ada_lookup_symbol_list_worker for further details.  */
5495 
5496 int
5497 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5498 			domain_enum domain, struct ada_symbol_info **results)
5499 {
5500   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5501 }
5502 
5503 /* Implementation of the la_iterate_over_symbols method.  */
5504 
5505 static void
5506 ada_iterate_over_symbols (const struct block *block,
5507 			  const char *name, domain_enum domain,
5508 			  symbol_found_callback_ftype *callback,
5509 			  void *data)
5510 {
5511   int ndefs, i;
5512   struct ada_symbol_info *results;
5513 
5514   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5515   for (i = 0; i < ndefs; ++i)
5516     {
5517       if (! (*callback) (results[i].sym, data))
5518 	break;
5519     }
5520 }
5521 
5522 /* If NAME is the name of an entity, return a string that should
5523    be used to look that entity up in Ada units.  This string should
5524    be deallocated after use using xfree.
5525 
5526    NAME can have any form that the "break" or "print" commands might
5527    recognize.  In other words, it does not have to be the "natural"
5528    name, or the "encoded" name.  */
5529 
5530 char *
5531 ada_name_for_lookup (const char *name)
5532 {
5533   char *canon;
5534   int nlen = strlen (name);
5535 
5536   if (name[0] == '<' && name[nlen - 1] == '>')
5537     {
5538       canon = xmalloc (nlen - 1);
5539       memcpy (canon, name + 1, nlen - 2);
5540       canon[nlen - 2] = '\0';
5541     }
5542   else
5543     canon = xstrdup (ada_encode (ada_fold_name (name)));
5544   return canon;
5545 }
5546 
5547 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5548    to 1, but choosing the first symbol found if there are multiple
5549    choices.
5550 
5551    The result is stored in *INFO, which must be non-NULL.
5552    If no match is found, INFO->SYM is set to NULL.  */
5553 
5554 void
5555 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5556 			   domain_enum namespace,
5557 			   struct ada_symbol_info *info)
5558 {
5559   struct ada_symbol_info *candidates;
5560   int n_candidates;
5561 
5562   gdb_assert (info != NULL);
5563   memset (info, 0, sizeof (struct ada_symbol_info));
5564 
5565   n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
5566   if (n_candidates == 0)
5567     return;
5568 
5569   *info = candidates[0];
5570   info->sym = fixup_symbol_section (info->sym, NULL);
5571 }
5572 
5573 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5574    scope and in global scopes, or NULL if none.  NAME is folded and
5575    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5576    choosing the first symbol if there are multiple choices.
5577    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5578 
5579 struct symbol *
5580 ada_lookup_symbol (const char *name, const struct block *block0,
5581                    domain_enum namespace, int *is_a_field_of_this)
5582 {
5583   struct ada_symbol_info info;
5584 
5585   if (is_a_field_of_this != NULL)
5586     *is_a_field_of_this = 0;
5587 
5588   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5589 			     block0, namespace, &info);
5590   return info.sym;
5591 }
5592 
5593 static struct symbol *
5594 ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5595 			    const char *name,
5596                             const struct block *block,
5597                             const domain_enum domain)
5598 {
5599   struct symbol *sym;
5600 
5601   sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5602   if (sym != NULL)
5603     return sym;
5604 
5605   /* If we haven't found a match at this point, try the primitive
5606      types.  In other languages, this search is performed before
5607      searching for global symbols in order to short-circuit that
5608      global-symbol search if it happens that the name corresponds
5609      to a primitive type.  But we cannot do the same in Ada, because
5610      it is perfectly legitimate for a program to declare a type which
5611      has the same name as a standard type.  If looking up a type in
5612      that situation, we have traditionally ignored the primitive type
5613      in favor of user-defined types.  This is why, unlike most other
5614      languages, we search the primitive types this late and only after
5615      having searched the global symbols without success.  */
5616 
5617   if (domain == VAR_DOMAIN)
5618     {
5619       struct gdbarch *gdbarch;
5620 
5621       if (block == NULL)
5622 	gdbarch = target_gdbarch ();
5623       else
5624 	gdbarch = block_gdbarch (block);
5625       sym = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5626       if (sym != NULL)
5627 	return sym;
5628     }
5629 
5630   return NULL;
5631 }
5632 
5633 
5634 /* True iff STR is a possible encoded suffix of a normal Ada name
5635    that is to be ignored for matching purposes.  Suffixes of parallel
5636    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5637    are given by any of the regular expressions:
5638 
5639    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5640    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5641    TKB              [subprogram suffix for task bodies]
5642    _E[0-9]+[bs]$    [protected object entry suffixes]
5643    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5644 
5645    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5646    match is performed.  This sequence is used to differentiate homonyms,
5647    is an optional part of a valid name suffix.  */
5648 
5649 static int
5650 is_name_suffix (const char *str)
5651 {
5652   int k;
5653   const char *matching;
5654   const int len = strlen (str);
5655 
5656   /* Skip optional leading __[0-9]+.  */
5657 
5658   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5659     {
5660       str += 3;
5661       while (isdigit (str[0]))
5662         str += 1;
5663     }
5664 
5665   /* [.$][0-9]+ */
5666 
5667   if (str[0] == '.' || str[0] == '$')
5668     {
5669       matching = str + 1;
5670       while (isdigit (matching[0]))
5671         matching += 1;
5672       if (matching[0] == '\0')
5673         return 1;
5674     }
5675 
5676   /* ___[0-9]+ */
5677 
5678   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5679     {
5680       matching = str + 3;
5681       while (isdigit (matching[0]))
5682         matching += 1;
5683       if (matching[0] == '\0')
5684         return 1;
5685     }
5686 
5687   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5688 
5689   if (strcmp (str, "TKB") == 0)
5690     return 1;
5691 
5692 #if 0
5693   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5694      with a N at the end.  Unfortunately, the compiler uses the same
5695      convention for other internal types it creates.  So treating
5696      all entity names that end with an "N" as a name suffix causes
5697      some regressions.  For instance, consider the case of an enumerated
5698      type.  To support the 'Image attribute, it creates an array whose
5699      name ends with N.
5700      Having a single character like this as a suffix carrying some
5701      information is a bit risky.  Perhaps we should change the encoding
5702      to be something like "_N" instead.  In the meantime, do not do
5703      the following check.  */
5704   /* Protected Object Subprograms */
5705   if (len == 1 && str [0] == 'N')
5706     return 1;
5707 #endif
5708 
5709   /* _E[0-9]+[bs]$ */
5710   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5711     {
5712       matching = str + 3;
5713       while (isdigit (matching[0]))
5714         matching += 1;
5715       if ((matching[0] == 'b' || matching[0] == 's')
5716           && matching [1] == '\0')
5717         return 1;
5718     }
5719 
5720   /* ??? We should not modify STR directly, as we are doing below.  This
5721      is fine in this case, but may become problematic later if we find
5722      that this alternative did not work, and want to try matching
5723      another one from the begining of STR.  Since we modified it, we
5724      won't be able to find the begining of the string anymore!  */
5725   if (str[0] == 'X')
5726     {
5727       str += 1;
5728       while (str[0] != '_' && str[0] != '\0')
5729         {
5730           if (str[0] != 'n' && str[0] != 'b')
5731             return 0;
5732           str += 1;
5733         }
5734     }
5735 
5736   if (str[0] == '\000')
5737     return 1;
5738 
5739   if (str[0] == '_')
5740     {
5741       if (str[1] != '_' || str[2] == '\000')
5742         return 0;
5743       if (str[2] == '_')
5744         {
5745           if (strcmp (str + 3, "JM") == 0)
5746             return 1;
5747           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5748              the LJM suffix in favor of the JM one.  But we will
5749              still accept LJM as a valid suffix for a reasonable
5750              amount of time, just to allow ourselves to debug programs
5751              compiled using an older version of GNAT.  */
5752           if (strcmp (str + 3, "LJM") == 0)
5753             return 1;
5754           if (str[3] != 'X')
5755             return 0;
5756           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5757               || str[4] == 'U' || str[4] == 'P')
5758             return 1;
5759           if (str[4] == 'R' && str[5] != 'T')
5760             return 1;
5761           return 0;
5762         }
5763       if (!isdigit (str[2]))
5764         return 0;
5765       for (k = 3; str[k] != '\0'; k += 1)
5766         if (!isdigit (str[k]) && str[k] != '_')
5767           return 0;
5768       return 1;
5769     }
5770   if (str[0] == '$' && isdigit (str[1]))
5771     {
5772       for (k = 2; str[k] != '\0'; k += 1)
5773         if (!isdigit (str[k]) && str[k] != '_')
5774           return 0;
5775       return 1;
5776     }
5777   return 0;
5778 }
5779 
5780 /* Return non-zero if the string starting at NAME and ending before
5781    NAME_END contains no capital letters.  */
5782 
5783 static int
5784 is_valid_name_for_wild_match (const char *name0)
5785 {
5786   const char *decoded_name = ada_decode (name0);
5787   int i;
5788 
5789   /* If the decoded name starts with an angle bracket, it means that
5790      NAME0 does not follow the GNAT encoding format.  It should then
5791      not be allowed as a possible wild match.  */
5792   if (decoded_name[0] == '<')
5793     return 0;
5794 
5795   for (i=0; decoded_name[i] != '\0'; i++)
5796     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5797       return 0;
5798 
5799   return 1;
5800 }
5801 
5802 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5803    that could start a simple name.  Assumes that *NAMEP points into
5804    the string beginning at NAME0.  */
5805 
5806 static int
5807 advance_wild_match (const char **namep, const char *name0, int target0)
5808 {
5809   const char *name = *namep;
5810 
5811   while (1)
5812     {
5813       int t0, t1;
5814 
5815       t0 = *name;
5816       if (t0 == '_')
5817 	{
5818 	  t1 = name[1];
5819 	  if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5820 	    {
5821 	      name += 1;
5822 	      if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5823 		break;
5824 	      else
5825 		name += 1;
5826 	    }
5827 	  else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5828 				 || name[2] == target0))
5829 	    {
5830 	      name += 2;
5831 	      break;
5832 	    }
5833 	  else
5834 	    return 0;
5835 	}
5836       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5837 	name += 1;
5838       else
5839 	return 0;
5840     }
5841 
5842   *namep = name;
5843   return 1;
5844 }
5845 
5846 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5847    informational suffixes of NAME (i.e., for which is_name_suffix is
5848    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5849 
5850 static int
5851 wild_match (const char *name, const char *patn)
5852 {
5853   const char *p;
5854   const char *name0 = name;
5855 
5856   while (1)
5857     {
5858       const char *match = name;
5859 
5860       if (*name == *patn)
5861 	{
5862 	  for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5863 	    if (*p != *name)
5864 	      break;
5865 	  if (*p == '\0' && is_name_suffix (name))
5866 	    return match != name0 && !is_valid_name_for_wild_match (name0);
5867 
5868 	  if (name[-1] == '_')
5869 	    name -= 1;
5870 	}
5871       if (!advance_wild_match (&name, name0, *patn))
5872 	return 1;
5873     }
5874 }
5875 
5876 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5877    informational suffix.  */
5878 
5879 static int
5880 full_match (const char *sym_name, const char *search_name)
5881 {
5882   return !match_name (sym_name, search_name, 0);
5883 }
5884 
5885 
5886 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5887    vector *defn_symbols, updating the list of symbols in OBSTACKP
5888    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5889    OBJFILE is the section containing BLOCK.  */
5890 
5891 static void
5892 ada_add_block_symbols (struct obstack *obstackp,
5893                        const struct block *block, const char *name,
5894                        domain_enum domain, struct objfile *objfile,
5895                        int wild)
5896 {
5897   struct block_iterator iter;
5898   int name_len = strlen (name);
5899   /* A matching argument symbol, if any.  */
5900   struct symbol *arg_sym;
5901   /* Set true when we find a matching non-argument symbol.  */
5902   int found_sym;
5903   struct symbol *sym;
5904 
5905   arg_sym = NULL;
5906   found_sym = 0;
5907   if (wild)
5908     {
5909       for (sym = block_iter_match_first (block, name, wild_match, &iter);
5910 	   sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5911       {
5912         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5913                                    SYMBOL_DOMAIN (sym), domain)
5914             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5915           {
5916 	    if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5917 	      continue;
5918 	    else if (SYMBOL_IS_ARGUMENT (sym))
5919 	      arg_sym = sym;
5920 	    else
5921 	      {
5922                 found_sym = 1;
5923                 add_defn_to_vec (obstackp,
5924                                  fixup_symbol_section (sym, objfile),
5925                                  block);
5926               }
5927           }
5928       }
5929     }
5930   else
5931     {
5932      for (sym = block_iter_match_first (block, name, full_match, &iter);
5933 	  sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5934       {
5935         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5936                                    SYMBOL_DOMAIN (sym), domain))
5937           {
5938 	    if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5939 	      {
5940 		if (SYMBOL_IS_ARGUMENT (sym))
5941 		  arg_sym = sym;
5942 		else
5943 		  {
5944 		    found_sym = 1;
5945 		    add_defn_to_vec (obstackp,
5946 				     fixup_symbol_section (sym, objfile),
5947 				     block);
5948 		  }
5949 	      }
5950           }
5951       }
5952     }
5953 
5954   if (!found_sym && arg_sym != NULL)
5955     {
5956       add_defn_to_vec (obstackp,
5957                        fixup_symbol_section (arg_sym, objfile),
5958                        block);
5959     }
5960 
5961   if (!wild)
5962     {
5963       arg_sym = NULL;
5964       found_sym = 0;
5965 
5966       ALL_BLOCK_SYMBOLS (block, iter, sym)
5967       {
5968         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5969                                    SYMBOL_DOMAIN (sym), domain))
5970           {
5971             int cmp;
5972 
5973             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5974             if (cmp == 0)
5975               {
5976                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5977                 if (cmp == 0)
5978                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5979                                  name_len);
5980               }
5981 
5982             if (cmp == 0
5983                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5984               {
5985 		if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5986 		  {
5987 		    if (SYMBOL_IS_ARGUMENT (sym))
5988 		      arg_sym = sym;
5989 		    else
5990 		      {
5991 			found_sym = 1;
5992 			add_defn_to_vec (obstackp,
5993 					 fixup_symbol_section (sym, objfile),
5994 					 block);
5995 		      }
5996 		  }
5997               }
5998           }
5999       }
6000 
6001       /* NOTE: This really shouldn't be needed for _ada_ symbols.
6002          They aren't parameters, right?  */
6003       if (!found_sym && arg_sym != NULL)
6004         {
6005           add_defn_to_vec (obstackp,
6006                            fixup_symbol_section (arg_sym, objfile),
6007                            block);
6008         }
6009     }
6010 }
6011 
6012 
6013                                 /* Symbol Completion */
6014 
6015 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
6016    name in a form that's appropriate for the completion.  The result
6017    does not need to be deallocated, but is only good until the next call.
6018 
6019    TEXT_LEN is equal to the length of TEXT.
6020    Perform a wild match if WILD_MATCH_P is set.
6021    ENCODED_P should be set if TEXT represents the start of a symbol name
6022    in its encoded form.  */
6023 
6024 static const char *
6025 symbol_completion_match (const char *sym_name,
6026                          const char *text, int text_len,
6027                          int wild_match_p, int encoded_p)
6028 {
6029   const int verbatim_match = (text[0] == '<');
6030   int match = 0;
6031 
6032   if (verbatim_match)
6033     {
6034       /* Strip the leading angle bracket.  */
6035       text = text + 1;
6036       text_len--;
6037     }
6038 
6039   /* First, test against the fully qualified name of the symbol.  */
6040 
6041   if (strncmp (sym_name, text, text_len) == 0)
6042     match = 1;
6043 
6044   if (match && !encoded_p)
6045     {
6046       /* One needed check before declaring a positive match is to verify
6047          that iff we are doing a verbatim match, the decoded version
6048          of the symbol name starts with '<'.  Otherwise, this symbol name
6049          is not a suitable completion.  */
6050       const char *sym_name_copy = sym_name;
6051       int has_angle_bracket;
6052 
6053       sym_name = ada_decode (sym_name);
6054       has_angle_bracket = (sym_name[0] == '<');
6055       match = (has_angle_bracket == verbatim_match);
6056       sym_name = sym_name_copy;
6057     }
6058 
6059   if (match && !verbatim_match)
6060     {
6061       /* When doing non-verbatim match, another check that needs to
6062          be done is to verify that the potentially matching symbol name
6063          does not include capital letters, because the ada-mode would
6064          not be able to understand these symbol names without the
6065          angle bracket notation.  */
6066       const char *tmp;
6067 
6068       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6069       if (*tmp != '\0')
6070         match = 0;
6071     }
6072 
6073   /* Second: Try wild matching...  */
6074 
6075   if (!match && wild_match_p)
6076     {
6077       /* Since we are doing wild matching, this means that TEXT
6078          may represent an unqualified symbol name.  We therefore must
6079          also compare TEXT against the unqualified name of the symbol.  */
6080       sym_name = ada_unqualified_name (ada_decode (sym_name));
6081 
6082       if (strncmp (sym_name, text, text_len) == 0)
6083         match = 1;
6084     }
6085 
6086   /* Finally: If we found a mach, prepare the result to return.  */
6087 
6088   if (!match)
6089     return NULL;
6090 
6091   if (verbatim_match)
6092     sym_name = add_angle_brackets (sym_name);
6093 
6094   if (!encoded_p)
6095     sym_name = ada_decode (sym_name);
6096 
6097   return sym_name;
6098 }
6099 
6100 /* A companion function to ada_make_symbol_completion_list().
6101    Check if SYM_NAME represents a symbol which name would be suitable
6102    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6103    it is appended at the end of the given string vector SV.
6104 
6105    ORIG_TEXT is the string original string from the user command
6106    that needs to be completed.  WORD is the entire command on which
6107    completion should be performed.  These two parameters are used to
6108    determine which part of the symbol name should be added to the
6109    completion vector.
6110    if WILD_MATCH_P is set, then wild matching is performed.
6111    ENCODED_P should be set if TEXT represents a symbol name in its
6112    encoded formed (in which case the completion should also be
6113    encoded).  */
6114 
6115 static void
6116 symbol_completion_add (VEC(char_ptr) **sv,
6117                        const char *sym_name,
6118                        const char *text, int text_len,
6119                        const char *orig_text, const char *word,
6120                        int wild_match_p, int encoded_p)
6121 {
6122   const char *match = symbol_completion_match (sym_name, text, text_len,
6123                                                wild_match_p, encoded_p);
6124   char *completion;
6125 
6126   if (match == NULL)
6127     return;
6128 
6129   /* We found a match, so add the appropriate completion to the given
6130      string vector.  */
6131 
6132   if (word == orig_text)
6133     {
6134       completion = xmalloc (strlen (match) + 5);
6135       strcpy (completion, match);
6136     }
6137   else if (word > orig_text)
6138     {
6139       /* Return some portion of sym_name.  */
6140       completion = xmalloc (strlen (match) + 5);
6141       strcpy (completion, match + (word - orig_text));
6142     }
6143   else
6144     {
6145       /* Return some of ORIG_TEXT plus sym_name.  */
6146       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6147       strncpy (completion, word, orig_text - word);
6148       completion[orig_text - word] = '\0';
6149       strcat (completion, match);
6150     }
6151 
6152   VEC_safe_push (char_ptr, *sv, completion);
6153 }
6154 
6155 /* An object of this type is passed as the user_data argument to the
6156    expand_symtabs_matching method.  */
6157 struct add_partial_datum
6158 {
6159   VEC(char_ptr) **completions;
6160   const char *text;
6161   int text_len;
6162   const char *text0;
6163   const char *word;
6164   int wild_match;
6165   int encoded;
6166 };
6167 
6168 /* A callback for expand_symtabs_matching.  */
6169 
6170 static int
6171 ada_complete_symbol_matcher (const char *name, void *user_data)
6172 {
6173   struct add_partial_datum *data = user_data;
6174 
6175   return symbol_completion_match (name, data->text, data->text_len,
6176                                   data->wild_match, data->encoded) != NULL;
6177 }
6178 
6179 /* Return a list of possible symbol names completing TEXT0.  WORD is
6180    the entire command on which completion is made.  */
6181 
6182 static VEC (char_ptr) *
6183 ada_make_symbol_completion_list (const char *text0, const char *word,
6184 				 enum type_code code)
6185 {
6186   char *text;
6187   int text_len;
6188   int wild_match_p;
6189   int encoded_p;
6190   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6191   struct symbol *sym;
6192   struct compunit_symtab *s;
6193   struct minimal_symbol *msymbol;
6194   struct objfile *objfile;
6195   const struct block *b, *surrounding_static_block = 0;
6196   int i;
6197   struct block_iterator iter;
6198   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6199 
6200   gdb_assert (code == TYPE_CODE_UNDEF);
6201 
6202   if (text0[0] == '<')
6203     {
6204       text = xstrdup (text0);
6205       make_cleanup (xfree, text);
6206       text_len = strlen (text);
6207       wild_match_p = 0;
6208       encoded_p = 1;
6209     }
6210   else
6211     {
6212       text = xstrdup (ada_encode (text0));
6213       make_cleanup (xfree, text);
6214       text_len = strlen (text);
6215       for (i = 0; i < text_len; i++)
6216         text[i] = tolower (text[i]);
6217 
6218       encoded_p = (strstr (text0, "__") != NULL);
6219       /* If the name contains a ".", then the user is entering a fully
6220          qualified entity name, and the match must not be done in wild
6221          mode.  Similarly, if the user wants to complete what looks like
6222          an encoded name, the match must not be done in wild mode.  */
6223       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6224     }
6225 
6226   /* First, look at the partial symtab symbols.  */
6227   {
6228     struct add_partial_datum data;
6229 
6230     data.completions = &completions;
6231     data.text = text;
6232     data.text_len = text_len;
6233     data.text0 = text0;
6234     data.word = word;
6235     data.wild_match = wild_match_p;
6236     data.encoded = encoded_p;
6237     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6238 			     &data);
6239   }
6240 
6241   /* At this point scan through the misc symbol vectors and add each
6242      symbol you find to the list.  Eventually we want to ignore
6243      anything that isn't a text symbol (everything else will be
6244      handled by the psymtab code above).  */
6245 
6246   ALL_MSYMBOLS (objfile, msymbol)
6247   {
6248     QUIT;
6249     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6250 			   text, text_len, text0, word, wild_match_p,
6251 			   encoded_p);
6252   }
6253 
6254   /* Search upwards from currently selected frame (so that we can
6255      complete on local vars.  */
6256 
6257   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6258     {
6259       if (!BLOCK_SUPERBLOCK (b))
6260         surrounding_static_block = b;   /* For elmin of dups */
6261 
6262       ALL_BLOCK_SYMBOLS (b, iter, sym)
6263       {
6264         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6265                                text, text_len, text0, word,
6266                                wild_match_p, encoded_p);
6267       }
6268     }
6269 
6270   /* Go through the symtabs and check the externs and statics for
6271      symbols which match.  */
6272 
6273   ALL_COMPUNITS (objfile, s)
6274   {
6275     QUIT;
6276     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
6277     ALL_BLOCK_SYMBOLS (b, iter, sym)
6278     {
6279       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6280                              text, text_len, text0, word,
6281                              wild_match_p, encoded_p);
6282     }
6283   }
6284 
6285   ALL_COMPUNITS (objfile, s)
6286   {
6287     QUIT;
6288     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
6289     /* Don't do this block twice.  */
6290     if (b == surrounding_static_block)
6291       continue;
6292     ALL_BLOCK_SYMBOLS (b, iter, sym)
6293     {
6294       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6295                              text, text_len, text0, word,
6296                              wild_match_p, encoded_p);
6297     }
6298   }
6299 
6300   do_cleanups (old_chain);
6301   return completions;
6302 }
6303 
6304                                 /* Field Access */
6305 
6306 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6307    for tagged types.  */
6308 
6309 static int
6310 ada_is_dispatch_table_ptr_type (struct type *type)
6311 {
6312   const char *name;
6313 
6314   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6315     return 0;
6316 
6317   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6318   if (name == NULL)
6319     return 0;
6320 
6321   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6322 }
6323 
6324 /* Return non-zero if TYPE is an interface tag.  */
6325 
6326 static int
6327 ada_is_interface_tag (struct type *type)
6328 {
6329   const char *name = TYPE_NAME (type);
6330 
6331   if (name == NULL)
6332     return 0;
6333 
6334   return (strcmp (name, "ada__tags__interface_tag") == 0);
6335 }
6336 
6337 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6338    to be invisible to users.  */
6339 
6340 int
6341 ada_is_ignored_field (struct type *type, int field_num)
6342 {
6343   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6344     return 1;
6345 
6346   /* Check the name of that field.  */
6347   {
6348     const char *name = TYPE_FIELD_NAME (type, field_num);
6349 
6350     /* Anonymous field names should not be printed.
6351        brobecker/2007-02-20: I don't think this can actually happen
6352        but we don't want to print the value of annonymous fields anyway.  */
6353     if (name == NULL)
6354       return 1;
6355 
6356     /* Normally, fields whose name start with an underscore ("_")
6357        are fields that have been internally generated by the compiler,
6358        and thus should not be printed.  The "_parent" field is special,
6359        however: This is a field internally generated by the compiler
6360        for tagged types, and it contains the components inherited from
6361        the parent type.  This field should not be printed as is, but
6362        should not be ignored either.  */
6363     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6364       return 1;
6365   }
6366 
6367   /* If this is the dispatch table of a tagged type or an interface tag,
6368      then ignore.  */
6369   if (ada_is_tagged_type (type, 1)
6370       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6371 	  || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6372     return 1;
6373 
6374   /* Not a special field, so it should not be ignored.  */
6375   return 0;
6376 }
6377 
6378 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6379    pointer or reference type whose ultimate target has a tag field.  */
6380 
6381 int
6382 ada_is_tagged_type (struct type *type, int refok)
6383 {
6384   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6385 }
6386 
6387 /* True iff TYPE represents the type of X'Tag */
6388 
6389 int
6390 ada_is_tag_type (struct type *type)
6391 {
6392   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6393     return 0;
6394   else
6395     {
6396       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6397 
6398       return (name != NULL
6399               && strcmp (name, "ada__tags__dispatch_table") == 0);
6400     }
6401 }
6402 
6403 /* The type of the tag on VAL.  */
6404 
6405 struct type *
6406 ada_tag_type (struct value *val)
6407 {
6408   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6409 }
6410 
6411 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6412    retired at Ada 05).  */
6413 
6414 static int
6415 is_ada95_tag (struct value *tag)
6416 {
6417   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6418 }
6419 
6420 /* The value of the tag on VAL.  */
6421 
6422 struct value *
6423 ada_value_tag (struct value *val)
6424 {
6425   return ada_value_struct_elt (val, "_tag", 0);
6426 }
6427 
6428 /* The value of the tag on the object of type TYPE whose contents are
6429    saved at VALADDR, if it is non-null, or is at memory address
6430    ADDRESS.  */
6431 
6432 static struct value *
6433 value_tag_from_contents_and_address (struct type *type,
6434 				     const gdb_byte *valaddr,
6435                                      CORE_ADDR address)
6436 {
6437   int tag_byte_offset;
6438   struct type *tag_type;
6439 
6440   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6441                          NULL, NULL, NULL))
6442     {
6443       const gdb_byte *valaddr1 = ((valaddr == NULL)
6444 				  ? NULL
6445 				  : valaddr + tag_byte_offset);
6446       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6447 
6448       return value_from_contents_and_address (tag_type, valaddr1, address1);
6449     }
6450   return NULL;
6451 }
6452 
6453 static struct type *
6454 type_from_tag (struct value *tag)
6455 {
6456   const char *type_name = ada_tag_name (tag);
6457 
6458   if (type_name != NULL)
6459     return ada_find_any_type (ada_encode (type_name));
6460   return NULL;
6461 }
6462 
6463 /* Given a value OBJ of a tagged type, return a value of this
6464    type at the base address of the object.  The base address, as
6465    defined in Ada.Tags, it is the address of the primary tag of
6466    the object, and therefore where the field values of its full
6467    view can be fetched.  */
6468 
6469 struct value *
6470 ada_tag_value_at_base_address (struct value *obj)
6471 {
6472   volatile struct gdb_exception e;
6473   struct value *val;
6474   LONGEST offset_to_top = 0;
6475   struct type *ptr_type, *obj_type;
6476   struct value *tag;
6477   CORE_ADDR base_address;
6478 
6479   obj_type = value_type (obj);
6480 
6481   /* It is the responsability of the caller to deref pointers.  */
6482 
6483   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6484       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6485     return obj;
6486 
6487   tag = ada_value_tag (obj);
6488   if (!tag)
6489     return obj;
6490 
6491   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6492 
6493   if (is_ada95_tag (tag))
6494     return obj;
6495 
6496   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6497   ptr_type = lookup_pointer_type (ptr_type);
6498   val = value_cast (ptr_type, tag);
6499   if (!val)
6500     return obj;
6501 
6502   /* It is perfectly possible that an exception be raised while
6503      trying to determine the base address, just like for the tag;
6504      see ada_tag_name for more details.  We do not print the error
6505      message for the same reason.  */
6506 
6507   TRY_CATCH (e, RETURN_MASK_ERROR)
6508     {
6509       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6510     }
6511 
6512   if (e.reason < 0)
6513     return obj;
6514 
6515   /* If offset is null, nothing to do.  */
6516 
6517   if (offset_to_top == 0)
6518     return obj;
6519 
6520   /* -1 is a special case in Ada.Tags; however, what should be done
6521      is not quite clear from the documentation.  So do nothing for
6522      now.  */
6523 
6524   if (offset_to_top == -1)
6525     return obj;
6526 
6527   base_address = value_address (obj) - offset_to_top;
6528   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6529 
6530   /* Make sure that we have a proper tag at the new address.
6531      Otherwise, offset_to_top is bogus (which can happen when
6532      the object is not initialized yet).  */
6533 
6534   if (!tag)
6535     return obj;
6536 
6537   obj_type = type_from_tag (tag);
6538 
6539   if (!obj_type)
6540     return obj;
6541 
6542   return value_from_contents_and_address (obj_type, NULL, base_address);
6543 }
6544 
6545 /* Return the "ada__tags__type_specific_data" type.  */
6546 
6547 static struct type *
6548 ada_get_tsd_type (struct inferior *inf)
6549 {
6550   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6551 
6552   if (data->tsd_type == 0)
6553     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6554   return data->tsd_type;
6555 }
6556 
6557 /* Return the TSD (type-specific data) associated to the given TAG.
6558    TAG is assumed to be the tag of a tagged-type entity.
6559 
6560    May return NULL if we are unable to get the TSD.  */
6561 
6562 static struct value *
6563 ada_get_tsd_from_tag (struct value *tag)
6564 {
6565   struct value *val;
6566   struct type *type;
6567 
6568   /* First option: The TSD is simply stored as a field of our TAG.
6569      Only older versions of GNAT would use this format, but we have
6570      to test it first, because there are no visible markers for
6571      the current approach except the absence of that field.  */
6572 
6573   val = ada_value_struct_elt (tag, "tsd", 1);
6574   if (val)
6575     return val;
6576 
6577   /* Try the second representation for the dispatch table (in which
6578      there is no explicit 'tsd' field in the referent of the tag pointer,
6579      and instead the tsd pointer is stored just before the dispatch
6580      table.  */
6581 
6582   type = ada_get_tsd_type (current_inferior());
6583   if (type == NULL)
6584     return NULL;
6585   type = lookup_pointer_type (lookup_pointer_type (type));
6586   val = value_cast (type, tag);
6587   if (val == NULL)
6588     return NULL;
6589   return value_ind (value_ptradd (val, -1));
6590 }
6591 
6592 /* Given the TSD of a tag (type-specific data), return a string
6593    containing the name of the associated type.
6594 
6595    The returned value is good until the next call.  May return NULL
6596    if we are unable to determine the tag name.  */
6597 
6598 static char *
6599 ada_tag_name_from_tsd (struct value *tsd)
6600 {
6601   static char name[1024];
6602   char *p;
6603   struct value *val;
6604 
6605   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6606   if (val == NULL)
6607     return NULL;
6608   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6609   for (p = name; *p != '\0'; p += 1)
6610     if (isalpha (*p))
6611       *p = tolower (*p);
6612   return name;
6613 }
6614 
6615 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6616    a C string.
6617 
6618    Return NULL if the TAG is not an Ada tag, or if we were unable to
6619    determine the name of that tag.  The result is good until the next
6620    call.  */
6621 
6622 const char *
6623 ada_tag_name (struct value *tag)
6624 {
6625   volatile struct gdb_exception e;
6626   char *name = NULL;
6627 
6628   if (!ada_is_tag_type (value_type (tag)))
6629     return NULL;
6630 
6631   /* It is perfectly possible that an exception be raised while trying
6632      to determine the TAG's name, even under normal circumstances:
6633      The associated variable may be uninitialized or corrupted, for
6634      instance. We do not let any exception propagate past this point.
6635      instead we return NULL.
6636 
6637      We also do not print the error message either (which often is very
6638      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6639      the caller print a more meaningful message if necessary.  */
6640   TRY_CATCH (e, RETURN_MASK_ERROR)
6641     {
6642       struct value *tsd = ada_get_tsd_from_tag (tag);
6643 
6644       if (tsd != NULL)
6645 	name = ada_tag_name_from_tsd (tsd);
6646     }
6647 
6648   return name;
6649 }
6650 
6651 /* The parent type of TYPE, or NULL if none.  */
6652 
6653 struct type *
6654 ada_parent_type (struct type *type)
6655 {
6656   int i;
6657 
6658   type = ada_check_typedef (type);
6659 
6660   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6661     return NULL;
6662 
6663   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6664     if (ada_is_parent_field (type, i))
6665       {
6666         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6667 
6668         /* If the _parent field is a pointer, then dereference it.  */
6669         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6670           parent_type = TYPE_TARGET_TYPE (parent_type);
6671         /* If there is a parallel XVS type, get the actual base type.  */
6672         parent_type = ada_get_base_type (parent_type);
6673 
6674         return ada_check_typedef (parent_type);
6675       }
6676 
6677   return NULL;
6678 }
6679 
6680 /* True iff field number FIELD_NUM of structure type TYPE contains the
6681    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6682    a structure type with at least FIELD_NUM+1 fields.  */
6683 
6684 int
6685 ada_is_parent_field (struct type *type, int field_num)
6686 {
6687   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6688 
6689   return (name != NULL
6690           && (strncmp (name, "PARENT", 6) == 0
6691               || strncmp (name, "_parent", 7) == 0));
6692 }
6693 
6694 /* True iff field number FIELD_NUM of structure type TYPE is a
6695    transparent wrapper field (which should be silently traversed when doing
6696    field selection and flattened when printing).  Assumes TYPE is a
6697    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6698    structures.  */
6699 
6700 int
6701 ada_is_wrapper_field (struct type *type, int field_num)
6702 {
6703   const char *name = TYPE_FIELD_NAME (type, field_num);
6704 
6705   return (name != NULL
6706           && (strncmp (name, "PARENT", 6) == 0
6707               || strcmp (name, "REP") == 0
6708               || strncmp (name, "_parent", 7) == 0
6709               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6710 }
6711 
6712 /* True iff field number FIELD_NUM of structure or union type TYPE
6713    is a variant wrapper.  Assumes TYPE is a structure type with at least
6714    FIELD_NUM+1 fields.  */
6715 
6716 int
6717 ada_is_variant_part (struct type *type, int field_num)
6718 {
6719   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6720 
6721   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6722           || (is_dynamic_field (type, field_num)
6723               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6724 		  == TYPE_CODE_UNION)));
6725 }
6726 
6727 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6728    whose discriminants are contained in the record type OUTER_TYPE,
6729    returns the type of the controlling discriminant for the variant.
6730    May return NULL if the type could not be found.  */
6731 
6732 struct type *
6733 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6734 {
6735   char *name = ada_variant_discrim_name (var_type);
6736 
6737   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6738 }
6739 
6740 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6741    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6742    represents a 'when others' clause; otherwise 0.  */
6743 
6744 int
6745 ada_is_others_clause (struct type *type, int field_num)
6746 {
6747   const char *name = TYPE_FIELD_NAME (type, field_num);
6748 
6749   return (name != NULL && name[0] == 'O');
6750 }
6751 
6752 /* Assuming that TYPE0 is the type of the variant part of a record,
6753    returns the name of the discriminant controlling the variant.
6754    The value is valid until the next call to ada_variant_discrim_name.  */
6755 
6756 char *
6757 ada_variant_discrim_name (struct type *type0)
6758 {
6759   static char *result = NULL;
6760   static size_t result_len = 0;
6761   struct type *type;
6762   const char *name;
6763   const char *discrim_end;
6764   const char *discrim_start;
6765 
6766   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6767     type = TYPE_TARGET_TYPE (type0);
6768   else
6769     type = type0;
6770 
6771   name = ada_type_name (type);
6772 
6773   if (name == NULL || name[0] == '\000')
6774     return "";
6775 
6776   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6777        discrim_end -= 1)
6778     {
6779       if (strncmp (discrim_end, "___XVN", 6) == 0)
6780         break;
6781     }
6782   if (discrim_end == name)
6783     return "";
6784 
6785   for (discrim_start = discrim_end; discrim_start != name + 3;
6786        discrim_start -= 1)
6787     {
6788       if (discrim_start == name + 1)
6789         return "";
6790       if ((discrim_start > name + 3
6791            && strncmp (discrim_start - 3, "___", 3) == 0)
6792           || discrim_start[-1] == '.')
6793         break;
6794     }
6795 
6796   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6797   strncpy (result, discrim_start, discrim_end - discrim_start);
6798   result[discrim_end - discrim_start] = '\0';
6799   return result;
6800 }
6801 
6802 /* Scan STR for a subtype-encoded number, beginning at position K.
6803    Put the position of the character just past the number scanned in
6804    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6805    Return 1 if there was a valid number at the given position, and 0
6806    otherwise.  A "subtype-encoded" number consists of the absolute value
6807    in decimal, followed by the letter 'm' to indicate a negative number.
6808    Assumes 0m does not occur.  */
6809 
6810 int
6811 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6812 {
6813   ULONGEST RU;
6814 
6815   if (!isdigit (str[k]))
6816     return 0;
6817 
6818   /* Do it the hard way so as not to make any assumption about
6819      the relationship of unsigned long (%lu scan format code) and
6820      LONGEST.  */
6821   RU = 0;
6822   while (isdigit (str[k]))
6823     {
6824       RU = RU * 10 + (str[k] - '0');
6825       k += 1;
6826     }
6827 
6828   if (str[k] == 'm')
6829     {
6830       if (R != NULL)
6831         *R = (-(LONGEST) (RU - 1)) - 1;
6832       k += 1;
6833     }
6834   else if (R != NULL)
6835     *R = (LONGEST) RU;
6836 
6837   /* NOTE on the above: Technically, C does not say what the results of
6838      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6839      number representable as a LONGEST (although either would probably work
6840      in most implementations).  When RU>0, the locution in the then branch
6841      above is always equivalent to the negative of RU.  */
6842 
6843   if (new_k != NULL)
6844     *new_k = k;
6845   return 1;
6846 }
6847 
6848 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6849    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6850    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6851 
6852 int
6853 ada_in_variant (LONGEST val, struct type *type, int field_num)
6854 {
6855   const char *name = TYPE_FIELD_NAME (type, field_num);
6856   int p;
6857 
6858   p = 0;
6859   while (1)
6860     {
6861       switch (name[p])
6862         {
6863         case '\0':
6864           return 0;
6865         case 'S':
6866           {
6867             LONGEST W;
6868 
6869             if (!ada_scan_number (name, p + 1, &W, &p))
6870               return 0;
6871             if (val == W)
6872               return 1;
6873             break;
6874           }
6875         case 'R':
6876           {
6877             LONGEST L, U;
6878 
6879             if (!ada_scan_number (name, p + 1, &L, &p)
6880                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6881               return 0;
6882             if (val >= L && val <= U)
6883               return 1;
6884             break;
6885           }
6886         case 'O':
6887           return 1;
6888         default:
6889           return 0;
6890         }
6891     }
6892 }
6893 
6894 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6895 
6896 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6897    ARG_TYPE, extract and return the value of one of its (non-static)
6898    fields.  FIELDNO says which field.   Differs from value_primitive_field
6899    only in that it can handle packed values of arbitrary type.  */
6900 
6901 static struct value *
6902 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6903                            struct type *arg_type)
6904 {
6905   struct type *type;
6906 
6907   arg_type = ada_check_typedef (arg_type);
6908   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6909 
6910   /* Handle packed fields.  */
6911 
6912   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6913     {
6914       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6915       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6916 
6917       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6918                                              offset + bit_pos / 8,
6919                                              bit_pos % 8, bit_size, type);
6920     }
6921   else
6922     return value_primitive_field (arg1, offset, fieldno, arg_type);
6923 }
6924 
6925 /* Find field with name NAME in object of type TYPE.  If found,
6926    set the following for each argument that is non-null:
6927     - *FIELD_TYPE_P to the field's type;
6928     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6929       an object of that type;
6930     - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6931     - *BIT_SIZE_P to its size in bits if the field is packed, and
6932       0 otherwise;
6933    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6934    fields up to but not including the desired field, or by the total
6935    number of fields if not found.   A NULL value of NAME never
6936    matches; the function just counts visible fields in this case.
6937 
6938    Returns 1 if found, 0 otherwise.  */
6939 
6940 static int
6941 find_struct_field (const char *name, struct type *type, int offset,
6942                    struct type **field_type_p,
6943                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6944 		   int *index_p)
6945 {
6946   int i;
6947 
6948   type = ada_check_typedef (type);
6949 
6950   if (field_type_p != NULL)
6951     *field_type_p = NULL;
6952   if (byte_offset_p != NULL)
6953     *byte_offset_p = 0;
6954   if (bit_offset_p != NULL)
6955     *bit_offset_p = 0;
6956   if (bit_size_p != NULL)
6957     *bit_size_p = 0;
6958 
6959   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6960     {
6961       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6962       int fld_offset = offset + bit_pos / 8;
6963       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6964 
6965       if (t_field_name == NULL)
6966         continue;
6967 
6968       else if (name != NULL && field_name_match (t_field_name, name))
6969         {
6970           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6971 
6972 	  if (field_type_p != NULL)
6973 	    *field_type_p = TYPE_FIELD_TYPE (type, i);
6974 	  if (byte_offset_p != NULL)
6975 	    *byte_offset_p = fld_offset;
6976 	  if (bit_offset_p != NULL)
6977 	    *bit_offset_p = bit_pos % 8;
6978 	  if (bit_size_p != NULL)
6979 	    *bit_size_p = bit_size;
6980           return 1;
6981         }
6982       else if (ada_is_wrapper_field (type, i))
6983         {
6984 	  if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6985 				 field_type_p, byte_offset_p, bit_offset_p,
6986 				 bit_size_p, index_p))
6987             return 1;
6988         }
6989       else if (ada_is_variant_part (type, i))
6990         {
6991 	  /* PNH: Wait.  Do we ever execute this section, or is ARG always of
6992 	     fixed type?? */
6993           int j;
6994           struct type *field_type
6995 	    = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6996 
6997           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6998             {
6999               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7000                                      fld_offset
7001                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
7002                                      field_type_p, byte_offset_p,
7003                                      bit_offset_p, bit_size_p, index_p))
7004                 return 1;
7005             }
7006         }
7007       else if (index_p != NULL)
7008 	*index_p += 1;
7009     }
7010   return 0;
7011 }
7012 
7013 /* Number of user-visible fields in record type TYPE.  */
7014 
7015 static int
7016 num_visible_fields (struct type *type)
7017 {
7018   int n;
7019 
7020   n = 0;
7021   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7022   return n;
7023 }
7024 
7025 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
7026    and search in it assuming it has (class) type TYPE.
7027    If found, return value, else return NULL.
7028 
7029    Searches recursively through wrapper fields (e.g., '_parent').  */
7030 
7031 static struct value *
7032 ada_search_struct_field (char *name, struct value *arg, int offset,
7033                          struct type *type)
7034 {
7035   int i;
7036 
7037   type = ada_check_typedef (type);
7038   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7039     {
7040       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7041 
7042       if (t_field_name == NULL)
7043         continue;
7044 
7045       else if (field_name_match (t_field_name, name))
7046         return ada_value_primitive_field (arg, offset, i, type);
7047 
7048       else if (ada_is_wrapper_field (type, i))
7049         {
7050           struct value *v =     /* Do not let indent join lines here.  */
7051             ada_search_struct_field (name, arg,
7052                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7053                                      TYPE_FIELD_TYPE (type, i));
7054 
7055           if (v != NULL)
7056             return v;
7057         }
7058 
7059       else if (ada_is_variant_part (type, i))
7060         {
7061 	  /* PNH: Do we ever get here?  See find_struct_field.  */
7062           int j;
7063           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7064 									i));
7065           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7066 
7067           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7068             {
7069               struct value *v = ada_search_struct_field /* Force line
7070 							   break.  */
7071                 (name, arg,
7072                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7073                  TYPE_FIELD_TYPE (field_type, j));
7074 
7075               if (v != NULL)
7076                 return v;
7077             }
7078         }
7079     }
7080   return NULL;
7081 }
7082 
7083 static struct value *ada_index_struct_field_1 (int *, struct value *,
7084 					       int, struct type *);
7085 
7086 
7087 /* Return field #INDEX in ARG, where the index is that returned by
7088  * find_struct_field through its INDEX_P argument.  Adjust the address
7089  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7090  * If found, return value, else return NULL.  */
7091 
7092 static struct value *
7093 ada_index_struct_field (int index, struct value *arg, int offset,
7094 			struct type *type)
7095 {
7096   return ada_index_struct_field_1 (&index, arg, offset, type);
7097 }
7098 
7099 
7100 /* Auxiliary function for ada_index_struct_field.  Like
7101  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7102  * *INDEX_P.  */
7103 
7104 static struct value *
7105 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7106 			  struct type *type)
7107 {
7108   int i;
7109   type = ada_check_typedef (type);
7110 
7111   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7112     {
7113       if (TYPE_FIELD_NAME (type, i) == NULL)
7114         continue;
7115       else if (ada_is_wrapper_field (type, i))
7116         {
7117           struct value *v =     /* Do not let indent join lines here.  */
7118             ada_index_struct_field_1 (index_p, arg,
7119 				      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7120 				      TYPE_FIELD_TYPE (type, i));
7121 
7122           if (v != NULL)
7123             return v;
7124         }
7125 
7126       else if (ada_is_variant_part (type, i))
7127         {
7128 	  /* PNH: Do we ever get here?  See ada_search_struct_field,
7129 	     find_struct_field.  */
7130 	  error (_("Cannot assign this kind of variant record"));
7131         }
7132       else if (*index_p == 0)
7133         return ada_value_primitive_field (arg, offset, i, type);
7134       else
7135 	*index_p -= 1;
7136     }
7137   return NULL;
7138 }
7139 
7140 /* Given ARG, a value of type (pointer or reference to a)*
7141    structure/union, extract the component named NAME from the ultimate
7142    target structure/union and return it as a value with its
7143    appropriate type.
7144 
7145    The routine searches for NAME among all members of the structure itself
7146    and (recursively) among all members of any wrapper members
7147    (e.g., '_parent').
7148 
7149    If NO_ERR, then simply return NULL in case of error, rather than
7150    calling error.  */
7151 
7152 struct value *
7153 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7154 {
7155   struct type *t, *t1;
7156   struct value *v;
7157 
7158   v = NULL;
7159   t1 = t = ada_check_typedef (value_type (arg));
7160   if (TYPE_CODE (t) == TYPE_CODE_REF)
7161     {
7162       t1 = TYPE_TARGET_TYPE (t);
7163       if (t1 == NULL)
7164 	goto BadValue;
7165       t1 = ada_check_typedef (t1);
7166       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7167         {
7168           arg = coerce_ref (arg);
7169           t = t1;
7170         }
7171     }
7172 
7173   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7174     {
7175       t1 = TYPE_TARGET_TYPE (t);
7176       if (t1 == NULL)
7177 	goto BadValue;
7178       t1 = ada_check_typedef (t1);
7179       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7180         {
7181           arg = value_ind (arg);
7182           t = t1;
7183         }
7184       else
7185         break;
7186     }
7187 
7188   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7189     goto BadValue;
7190 
7191   if (t1 == t)
7192     v = ada_search_struct_field (name, arg, 0, t);
7193   else
7194     {
7195       int bit_offset, bit_size, byte_offset;
7196       struct type *field_type;
7197       CORE_ADDR address;
7198 
7199       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7200 	address = value_address (ada_value_ind (arg));
7201       else
7202 	address = value_address (ada_coerce_ref (arg));
7203 
7204       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7205       if (find_struct_field (name, t1, 0,
7206                              &field_type, &byte_offset, &bit_offset,
7207                              &bit_size, NULL))
7208         {
7209           if (bit_size != 0)
7210             {
7211               if (TYPE_CODE (t) == TYPE_CODE_REF)
7212                 arg = ada_coerce_ref (arg);
7213               else
7214                 arg = ada_value_ind (arg);
7215               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7216                                                   bit_offset, bit_size,
7217                                                   field_type);
7218             }
7219           else
7220             v = value_at_lazy (field_type, address + byte_offset);
7221         }
7222     }
7223 
7224   if (v != NULL || no_err)
7225     return v;
7226   else
7227     error (_("There is no member named %s."), name);
7228 
7229  BadValue:
7230   if (no_err)
7231     return NULL;
7232   else
7233     error (_("Attempt to extract a component of "
7234 	     "a value that is not a record."));
7235 }
7236 
7237 /* Given a type TYPE, look up the type of the component of type named NAME.
7238    If DISPP is non-null, add its byte displacement from the beginning of a
7239    structure (pointed to by a value) of type TYPE to *DISPP (does not
7240    work for packed fields).
7241 
7242    Matches any field whose name has NAME as a prefix, possibly
7243    followed by "___".
7244 
7245    TYPE can be either a struct or union.  If REFOK, TYPE may also
7246    be a (pointer or reference)+ to a struct or union, and the
7247    ultimate target type will be searched.
7248 
7249    Looks recursively into variant clauses and parent types.
7250 
7251    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7252    TYPE is not a type of the right kind.  */
7253 
7254 static struct type *
7255 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7256                             int noerr, int *dispp)
7257 {
7258   int i;
7259 
7260   if (name == NULL)
7261     goto BadName;
7262 
7263   if (refok && type != NULL)
7264     while (1)
7265       {
7266         type = ada_check_typedef (type);
7267         if (TYPE_CODE (type) != TYPE_CODE_PTR
7268             && TYPE_CODE (type) != TYPE_CODE_REF)
7269           break;
7270         type = TYPE_TARGET_TYPE (type);
7271       }
7272 
7273   if (type == NULL
7274       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7275           && TYPE_CODE (type) != TYPE_CODE_UNION))
7276     {
7277       if (noerr)
7278         return NULL;
7279       else
7280         {
7281           target_terminal_ours ();
7282           gdb_flush (gdb_stdout);
7283 	  if (type == NULL)
7284 	    error (_("Type (null) is not a structure or union type"));
7285 	  else
7286 	    {
7287 	      /* XXX: type_sprint */
7288 	      fprintf_unfiltered (gdb_stderr, _("Type "));
7289 	      type_print (type, "", gdb_stderr, -1);
7290 	      error (_(" is not a structure or union type"));
7291 	    }
7292         }
7293     }
7294 
7295   type = to_static_fixed_type (type);
7296 
7297   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7298     {
7299       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7300       struct type *t;
7301       int disp;
7302 
7303       if (t_field_name == NULL)
7304         continue;
7305 
7306       else if (field_name_match (t_field_name, name))
7307         {
7308           if (dispp != NULL)
7309             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7310           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7311         }
7312 
7313       else if (ada_is_wrapper_field (type, i))
7314         {
7315           disp = 0;
7316           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7317                                           0, 1, &disp);
7318           if (t != NULL)
7319             {
7320               if (dispp != NULL)
7321                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7322               return t;
7323             }
7324         }
7325 
7326       else if (ada_is_variant_part (type, i))
7327         {
7328           int j;
7329           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7330 									i));
7331 
7332           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7333             {
7334 	      /* FIXME pnh 2008/01/26: We check for a field that is
7335 	         NOT wrapped in a struct, since the compiler sometimes
7336 		 generates these for unchecked variant types.  Revisit
7337 	         if the compiler changes this practice.  */
7338 	      const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7339               disp = 0;
7340 	      if (v_field_name != NULL
7341 		  && field_name_match (v_field_name, name))
7342 		t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7343 	      else
7344 		t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7345 								 j),
7346 						name, 0, 1, &disp);
7347 
7348               if (t != NULL)
7349                 {
7350                   if (dispp != NULL)
7351                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7352                   return t;
7353                 }
7354             }
7355         }
7356 
7357     }
7358 
7359 BadName:
7360   if (!noerr)
7361     {
7362       target_terminal_ours ();
7363       gdb_flush (gdb_stdout);
7364       if (name == NULL)
7365         {
7366 	  /* XXX: type_sprint */
7367 	  fprintf_unfiltered (gdb_stderr, _("Type "));
7368 	  type_print (type, "", gdb_stderr, -1);
7369 	  error (_(" has no component named <null>"));
7370 	}
7371       else
7372 	{
7373 	  /* XXX: type_sprint */
7374 	  fprintf_unfiltered (gdb_stderr, _("Type "));
7375 	  type_print (type, "", gdb_stderr, -1);
7376 	  error (_(" has no component named %s"), name);
7377 	}
7378     }
7379 
7380   return NULL;
7381 }
7382 
7383 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7384    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7385    represents an unchecked union (that is, the variant part of a
7386    record that is named in an Unchecked_Union pragma).  */
7387 
7388 static int
7389 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7390 {
7391   char *discrim_name = ada_variant_discrim_name (var_type);
7392 
7393   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
7394 	  == NULL);
7395 }
7396 
7397 
7398 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7399    within a value of type OUTER_TYPE that is stored in GDB at
7400    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7401    numbering from 0) is applicable.  Returns -1 if none are.  */
7402 
7403 int
7404 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7405                            const gdb_byte *outer_valaddr)
7406 {
7407   int others_clause;
7408   int i;
7409   char *discrim_name = ada_variant_discrim_name (var_type);
7410   struct value *outer;
7411   struct value *discrim;
7412   LONGEST discrim_val;
7413 
7414   /* Using plain value_from_contents_and_address here causes problems
7415      because we will end up trying to resolve a type that is currently
7416      being constructed.  */
7417   outer = value_from_contents_and_address_unresolved (outer_type,
7418 						      outer_valaddr, 0);
7419   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7420   if (discrim == NULL)
7421     return -1;
7422   discrim_val = value_as_long (discrim);
7423 
7424   others_clause = -1;
7425   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7426     {
7427       if (ada_is_others_clause (var_type, i))
7428         others_clause = i;
7429       else if (ada_in_variant (discrim_val, var_type, i))
7430         return i;
7431     }
7432 
7433   return others_clause;
7434 }
7435 
7436 
7437 
7438                                 /* Dynamic-Sized Records */
7439 
7440 /* Strategy: The type ostensibly attached to a value with dynamic size
7441    (i.e., a size that is not statically recorded in the debugging
7442    data) does not accurately reflect the size or layout of the value.
7443    Our strategy is to convert these values to values with accurate,
7444    conventional types that are constructed on the fly.  */
7445 
7446 /* There is a subtle and tricky problem here.  In general, we cannot
7447    determine the size of dynamic records without its data.  However,
7448    the 'struct value' data structure, which GDB uses to represent
7449    quantities in the inferior process (the target), requires the size
7450    of the type at the time of its allocation in order to reserve space
7451    for GDB's internal copy of the data.  That's why the
7452    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7453    rather than struct value*s.
7454 
7455    However, GDB's internal history variables ($1, $2, etc.) are
7456    struct value*s containing internal copies of the data that are not, in
7457    general, the same as the data at their corresponding addresses in
7458    the target.  Fortunately, the types we give to these values are all
7459    conventional, fixed-size types (as per the strategy described
7460    above), so that we don't usually have to perform the
7461    'to_fixed_xxx_type' conversions to look at their values.
7462    Unfortunately, there is one exception: if one of the internal
7463    history variables is an array whose elements are unconstrained
7464    records, then we will need to create distinct fixed types for each
7465    element selected.  */
7466 
7467 /* The upshot of all of this is that many routines take a (type, host
7468    address, target address) triple as arguments to represent a value.
7469    The host address, if non-null, is supposed to contain an internal
7470    copy of the relevant data; otherwise, the program is to consult the
7471    target at the target address.  */
7472 
7473 /* Assuming that VAL0 represents a pointer value, the result of
7474    dereferencing it.  Differs from value_ind in its treatment of
7475    dynamic-sized types.  */
7476 
7477 struct value *
7478 ada_value_ind (struct value *val0)
7479 {
7480   struct value *val = value_ind (val0);
7481 
7482   if (ada_is_tagged_type (value_type (val), 0))
7483     val = ada_tag_value_at_base_address (val);
7484 
7485   return ada_to_fixed_value (val);
7486 }
7487 
7488 /* The value resulting from dereferencing any "reference to"
7489    qualifiers on VAL0.  */
7490 
7491 static struct value *
7492 ada_coerce_ref (struct value *val0)
7493 {
7494   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7495     {
7496       struct value *val = val0;
7497 
7498       val = coerce_ref (val);
7499 
7500       if (ada_is_tagged_type (value_type (val), 0))
7501 	val = ada_tag_value_at_base_address (val);
7502 
7503       return ada_to_fixed_value (val);
7504     }
7505   else
7506     return val0;
7507 }
7508 
7509 /* Return OFF rounded upward if necessary to a multiple of
7510    ALIGNMENT (a power of 2).  */
7511 
7512 static unsigned int
7513 align_value (unsigned int off, unsigned int alignment)
7514 {
7515   return (off + alignment - 1) & ~(alignment - 1);
7516 }
7517 
7518 /* Return the bit alignment required for field #F of template type TYPE.  */
7519 
7520 static unsigned int
7521 field_alignment (struct type *type, int f)
7522 {
7523   const char *name = TYPE_FIELD_NAME (type, f);
7524   int len;
7525   int align_offset;
7526 
7527   /* The field name should never be null, unless the debugging information
7528      is somehow malformed.  In this case, we assume the field does not
7529      require any alignment.  */
7530   if (name == NULL)
7531     return 1;
7532 
7533   len = strlen (name);
7534 
7535   if (!isdigit (name[len - 1]))
7536     return 1;
7537 
7538   if (isdigit (name[len - 2]))
7539     align_offset = len - 2;
7540   else
7541     align_offset = len - 1;
7542 
7543   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7544     return TARGET_CHAR_BIT;
7545 
7546   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7547 }
7548 
7549 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7550 
7551 static struct symbol *
7552 ada_find_any_type_symbol (const char *name)
7553 {
7554   struct symbol *sym;
7555 
7556   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7557   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7558     return sym;
7559 
7560   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7561   return sym;
7562 }
7563 
7564 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7565    solely for types defined by debug info, it will not search the GDB
7566    primitive types.  */
7567 
7568 static struct type *
7569 ada_find_any_type (const char *name)
7570 {
7571   struct symbol *sym = ada_find_any_type_symbol (name);
7572 
7573   if (sym != NULL)
7574     return SYMBOL_TYPE (sym);
7575 
7576   return NULL;
7577 }
7578 
7579 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7580    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7581    symbol, in which case it is returned.  Otherwise, this looks for
7582    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7583    Return symbol if found, and NULL otherwise.  */
7584 
7585 struct symbol *
7586 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7587 {
7588   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7589   struct symbol *sym;
7590 
7591   if (strstr (name, "___XR") != NULL)
7592      return name_sym;
7593 
7594   sym = find_old_style_renaming_symbol (name, block);
7595 
7596   if (sym != NULL)
7597     return sym;
7598 
7599   /* Not right yet.  FIXME pnh 7/20/2007.  */
7600   sym = ada_find_any_type_symbol (name);
7601   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7602     return sym;
7603   else
7604     return NULL;
7605 }
7606 
7607 static struct symbol *
7608 find_old_style_renaming_symbol (const char *name, const struct block *block)
7609 {
7610   const struct symbol *function_sym = block_linkage_function (block);
7611   char *rename;
7612 
7613   if (function_sym != NULL)
7614     {
7615       /* If the symbol is defined inside a function, NAME is not fully
7616          qualified.  This means we need to prepend the function name
7617          as well as adding the ``___XR'' suffix to build the name of
7618          the associated renaming symbol.  */
7619       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7620       /* Function names sometimes contain suffixes used
7621          for instance to qualify nested subprograms.  When building
7622          the XR type name, we need to make sure that this suffix is
7623          not included.  So do not include any suffix in the function
7624          name length below.  */
7625       int function_name_len = ada_name_prefix_len (function_name);
7626       const int rename_len = function_name_len + 2      /*  "__" */
7627         + strlen (name) + 6 /* "___XR\0" */ ;
7628 
7629       /* Strip the suffix if necessary.  */
7630       ada_remove_trailing_digits (function_name, &function_name_len);
7631       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7632       ada_remove_Xbn_suffix (function_name, &function_name_len);
7633 
7634       /* Library-level functions are a special case, as GNAT adds
7635          a ``_ada_'' prefix to the function name to avoid namespace
7636          pollution.  However, the renaming symbols themselves do not
7637          have this prefix, so we need to skip this prefix if present.  */
7638       if (function_name_len > 5 /* "_ada_" */
7639           && strstr (function_name, "_ada_") == function_name)
7640         {
7641 	  function_name += 5;
7642 	  function_name_len -= 5;
7643         }
7644 
7645       rename = (char *) alloca (rename_len * sizeof (char));
7646       strncpy (rename, function_name, function_name_len);
7647       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7648 		 "__%s___XR", name);
7649     }
7650   else
7651     {
7652       const int rename_len = strlen (name) + 6;
7653 
7654       rename = (char *) alloca (rename_len * sizeof (char));
7655       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7656     }
7657 
7658   return ada_find_any_type_symbol (rename);
7659 }
7660 
7661 /* Because of GNAT encoding conventions, several GDB symbols may match a
7662    given type name.  If the type denoted by TYPE0 is to be preferred to
7663    that of TYPE1 for purposes of type printing, return non-zero;
7664    otherwise return 0.  */
7665 
7666 int
7667 ada_prefer_type (struct type *type0, struct type *type1)
7668 {
7669   if (type1 == NULL)
7670     return 1;
7671   else if (type0 == NULL)
7672     return 0;
7673   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7674     return 1;
7675   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7676     return 0;
7677   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7678     return 1;
7679   else if (ada_is_constrained_packed_array_type (type0))
7680     return 1;
7681   else if (ada_is_array_descriptor_type (type0)
7682            && !ada_is_array_descriptor_type (type1))
7683     return 1;
7684   else
7685     {
7686       const char *type0_name = type_name_no_tag (type0);
7687       const char *type1_name = type_name_no_tag (type1);
7688 
7689       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7690 	  && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7691 	return 1;
7692     }
7693   return 0;
7694 }
7695 
7696 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7697    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
7698 
7699 const char *
7700 ada_type_name (struct type *type)
7701 {
7702   if (type == NULL)
7703     return NULL;
7704   else if (TYPE_NAME (type) != NULL)
7705     return TYPE_NAME (type);
7706   else
7707     return TYPE_TAG_NAME (type);
7708 }
7709 
7710 /* Search the list of "descriptive" types associated to TYPE for a type
7711    whose name is NAME.  */
7712 
7713 static struct type *
7714 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7715 {
7716   struct type *result;
7717 
7718   if (ada_ignore_descriptive_types_p)
7719     return NULL;
7720 
7721   /* If there no descriptive-type info, then there is no parallel type
7722      to be found.  */
7723   if (!HAVE_GNAT_AUX_INFO (type))
7724     return NULL;
7725 
7726   result = TYPE_DESCRIPTIVE_TYPE (type);
7727   while (result != NULL)
7728     {
7729       const char *result_name = ada_type_name (result);
7730 
7731       if (result_name == NULL)
7732         {
7733           warning (_("unexpected null name on descriptive type"));
7734           return NULL;
7735         }
7736 
7737       /* If the names match, stop.  */
7738       if (strcmp (result_name, name) == 0)
7739 	break;
7740 
7741       /* Otherwise, look at the next item on the list, if any.  */
7742       if (HAVE_GNAT_AUX_INFO (result))
7743 	result = TYPE_DESCRIPTIVE_TYPE (result);
7744       else
7745 	result = NULL;
7746     }
7747 
7748   /* If we didn't find a match, see whether this is a packed array.  With
7749      older compilers, the descriptive type information is either absent or
7750      irrelevant when it comes to packed arrays so the above lookup fails.
7751      Fall back to using a parallel lookup by name in this case.  */
7752   if (result == NULL && ada_is_constrained_packed_array_type (type))
7753     return ada_find_any_type (name);
7754 
7755   return result;
7756 }
7757 
7758 /* Find a parallel type to TYPE with the specified NAME, using the
7759    descriptive type taken from the debugging information, if available,
7760    and otherwise using the (slower) name-based method.  */
7761 
7762 static struct type *
7763 ada_find_parallel_type_with_name (struct type *type, const char *name)
7764 {
7765   struct type *result = NULL;
7766 
7767   if (HAVE_GNAT_AUX_INFO (type))
7768     result = find_parallel_type_by_descriptive_type (type, name);
7769   else
7770     result = ada_find_any_type (name);
7771 
7772   return result;
7773 }
7774 
7775 /* Same as above, but specify the name of the parallel type by appending
7776    SUFFIX to the name of TYPE.  */
7777 
7778 struct type *
7779 ada_find_parallel_type (struct type *type, const char *suffix)
7780 {
7781   char *name;
7782   const char *typename = ada_type_name (type);
7783   int len;
7784 
7785   if (typename == NULL)
7786     return NULL;
7787 
7788   len = strlen (typename);
7789 
7790   name = (char *) alloca (len + strlen (suffix) + 1);
7791 
7792   strcpy (name, typename);
7793   strcpy (name + len, suffix);
7794 
7795   return ada_find_parallel_type_with_name (type, name);
7796 }
7797 
7798 /* If TYPE is a variable-size record type, return the corresponding template
7799    type describing its fields.  Otherwise, return NULL.  */
7800 
7801 static struct type *
7802 dynamic_template_type (struct type *type)
7803 {
7804   type = ada_check_typedef (type);
7805 
7806   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7807       || ada_type_name (type) == NULL)
7808     return NULL;
7809   else
7810     {
7811       int len = strlen (ada_type_name (type));
7812 
7813       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7814         return type;
7815       else
7816         return ada_find_parallel_type (type, "___XVE");
7817     }
7818 }
7819 
7820 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7821    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7822 
7823 static int
7824 is_dynamic_field (struct type *templ_type, int field_num)
7825 {
7826   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7827 
7828   return name != NULL
7829     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7830     && strstr (name, "___XVL") != NULL;
7831 }
7832 
7833 /* The index of the variant field of TYPE, or -1 if TYPE does not
7834    represent a variant record type.  */
7835 
7836 static int
7837 variant_field_index (struct type *type)
7838 {
7839   int f;
7840 
7841   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7842     return -1;
7843 
7844   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7845     {
7846       if (ada_is_variant_part (type, f))
7847         return f;
7848     }
7849   return -1;
7850 }
7851 
7852 /* A record type with no fields.  */
7853 
7854 static struct type *
7855 empty_record (struct type *template)
7856 {
7857   struct type *type = alloc_type_copy (template);
7858 
7859   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7860   TYPE_NFIELDS (type) = 0;
7861   TYPE_FIELDS (type) = NULL;
7862   INIT_CPLUS_SPECIFIC (type);
7863   TYPE_NAME (type) = "<empty>";
7864   TYPE_TAG_NAME (type) = NULL;
7865   TYPE_LENGTH (type) = 0;
7866   return type;
7867 }
7868 
7869 /* An ordinary record type (with fixed-length fields) that describes
7870    the value of type TYPE at VALADDR or ADDRESS (see comments at
7871    the beginning of this section) VAL according to GNAT conventions.
7872    DVAL0 should describe the (portion of a) record that contains any
7873    necessary discriminants.  It should be NULL if value_type (VAL) is
7874    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7875    variant field (unless unchecked) is replaced by a particular branch
7876    of the variant.
7877 
7878    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7879    length are not statically known are discarded.  As a consequence,
7880    VALADDR, ADDRESS and DVAL0 are ignored.
7881 
7882    NOTE: Limitations: For now, we assume that dynamic fields and
7883    variants occupy whole numbers of bytes.  However, they need not be
7884    byte-aligned.  */
7885 
7886 struct type *
7887 ada_template_to_fixed_record_type_1 (struct type *type,
7888 				     const gdb_byte *valaddr,
7889                                      CORE_ADDR address, struct value *dval0,
7890                                      int keep_dynamic_fields)
7891 {
7892   struct value *mark = value_mark ();
7893   struct value *dval;
7894   struct type *rtype;
7895   int nfields, bit_len;
7896   int variant_field;
7897   long off;
7898   int fld_bit_len;
7899   int f;
7900 
7901   /* Compute the number of fields in this record type that are going
7902      to be processed: unless keep_dynamic_fields, this includes only
7903      fields whose position and length are static will be processed.  */
7904   if (keep_dynamic_fields)
7905     nfields = TYPE_NFIELDS (type);
7906   else
7907     {
7908       nfields = 0;
7909       while (nfields < TYPE_NFIELDS (type)
7910              && !ada_is_variant_part (type, nfields)
7911              && !is_dynamic_field (type, nfields))
7912         nfields++;
7913     }
7914 
7915   rtype = alloc_type_copy (type);
7916   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7917   INIT_CPLUS_SPECIFIC (rtype);
7918   TYPE_NFIELDS (rtype) = nfields;
7919   TYPE_FIELDS (rtype) = (struct field *)
7920     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7921   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7922   TYPE_NAME (rtype) = ada_type_name (type);
7923   TYPE_TAG_NAME (rtype) = NULL;
7924   TYPE_FIXED_INSTANCE (rtype) = 1;
7925 
7926   off = 0;
7927   bit_len = 0;
7928   variant_field = -1;
7929 
7930   for (f = 0; f < nfields; f += 1)
7931     {
7932       off = align_value (off, field_alignment (type, f))
7933 	+ TYPE_FIELD_BITPOS (type, f);
7934       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7935       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7936 
7937       if (ada_is_variant_part (type, f))
7938         {
7939           variant_field = f;
7940           fld_bit_len = 0;
7941         }
7942       else if (is_dynamic_field (type, f))
7943         {
7944 	  const gdb_byte *field_valaddr = valaddr;
7945 	  CORE_ADDR field_address = address;
7946 	  struct type *field_type =
7947 	    TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7948 
7949           if (dval0 == NULL)
7950 	    {
7951 	      /* rtype's length is computed based on the run-time
7952 		 value of discriminants.  If the discriminants are not
7953 		 initialized, the type size may be completely bogus and
7954 		 GDB may fail to allocate a value for it.  So check the
7955 		 size first before creating the value.  */
7956 	      ada_ensure_varsize_limit (rtype);
7957 	      /* Using plain value_from_contents_and_address here
7958 		 causes problems because we will end up trying to
7959 		 resolve a type that is currently being
7960 		 constructed.  */
7961 	      dval = value_from_contents_and_address_unresolved (rtype,
7962 								 valaddr,
7963 								 address);
7964 	      rtype = value_type (dval);
7965 	    }
7966           else
7967             dval = dval0;
7968 
7969 	  /* If the type referenced by this field is an aligner type, we need
7970 	     to unwrap that aligner type, because its size might not be set.
7971 	     Keeping the aligner type would cause us to compute the wrong
7972 	     size for this field, impacting the offset of the all the fields
7973 	     that follow this one.  */
7974 	  if (ada_is_aligner_type (field_type))
7975 	    {
7976 	      long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7977 
7978 	      field_valaddr = cond_offset_host (field_valaddr, field_offset);
7979 	      field_address = cond_offset_target (field_address, field_offset);
7980 	      field_type = ada_aligned_type (field_type);
7981 	    }
7982 
7983 	  field_valaddr = cond_offset_host (field_valaddr,
7984 					    off / TARGET_CHAR_BIT);
7985 	  field_address = cond_offset_target (field_address,
7986 					      off / TARGET_CHAR_BIT);
7987 
7988 	  /* Get the fixed type of the field.  Note that, in this case,
7989 	     we do not want to get the real type out of the tag: if
7990 	     the current field is the parent part of a tagged record,
7991 	     we will get the tag of the object.  Clearly wrong: the real
7992 	     type of the parent is not the real type of the child.  We
7993 	     would end up in an infinite loop.	*/
7994 	  field_type = ada_get_base_type (field_type);
7995 	  field_type = ada_to_fixed_type (field_type, field_valaddr,
7996 					  field_address, dval, 0);
7997 	  /* If the field size is already larger than the maximum
7998 	     object size, then the record itself will necessarily
7999 	     be larger than the maximum object size.  We need to make
8000 	     this check now, because the size might be so ridiculously
8001 	     large (due to an uninitialized variable in the inferior)
8002 	     that it would cause an overflow when adding it to the
8003 	     record size.  */
8004 	  ada_ensure_varsize_limit (field_type);
8005 
8006 	  TYPE_FIELD_TYPE (rtype, f) = field_type;
8007           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8008 	  /* The multiplication can potentially overflow.  But because
8009 	     the field length has been size-checked just above, and
8010 	     assuming that the maximum size is a reasonable value,
8011 	     an overflow should not happen in practice.  So rather than
8012 	     adding overflow recovery code to this already complex code,
8013 	     we just assume that it's not going to happen.  */
8014           fld_bit_len =
8015             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8016         }
8017       else
8018         {
8019 	  /* Note: If this field's type is a typedef, it is important
8020 	     to preserve the typedef layer.
8021 
8022 	     Otherwise, we might be transforming a typedef to a fat
8023 	     pointer (encoding a pointer to an unconstrained array),
8024 	     into a basic fat pointer (encoding an unconstrained
8025 	     array).  As both types are implemented using the same
8026 	     structure, the typedef is the only clue which allows us
8027 	     to distinguish between the two options.  Stripping it
8028 	     would prevent us from printing this field appropriately.  */
8029           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
8030           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8031           if (TYPE_FIELD_BITSIZE (type, f) > 0)
8032             fld_bit_len =
8033               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8034           else
8035 	    {
8036 	      struct type *field_type = TYPE_FIELD_TYPE (type, f);
8037 
8038 	      /* We need to be careful of typedefs when computing
8039 		 the length of our field.  If this is a typedef,
8040 		 get the length of the target type, not the length
8041 		 of the typedef.  */
8042 	      if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8043 		field_type = ada_typedef_target_type (field_type);
8044 
8045               fld_bit_len =
8046                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8047 	    }
8048         }
8049       if (off + fld_bit_len > bit_len)
8050         bit_len = off + fld_bit_len;
8051       off += fld_bit_len;
8052       TYPE_LENGTH (rtype) =
8053         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8054     }
8055 
8056   /* We handle the variant part, if any, at the end because of certain
8057      odd cases in which it is re-ordered so as NOT to be the last field of
8058      the record.  This can happen in the presence of representation
8059      clauses.  */
8060   if (variant_field >= 0)
8061     {
8062       struct type *branch_type;
8063 
8064       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8065 
8066       if (dval0 == NULL)
8067 	{
8068 	  /* Using plain value_from_contents_and_address here causes
8069 	     problems because we will end up trying to resolve a type
8070 	     that is currently being constructed.  */
8071 	  dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8072 							     address);
8073 	  rtype = value_type (dval);
8074 	}
8075       else
8076         dval = dval0;
8077 
8078       branch_type =
8079         to_fixed_variant_branch_type
8080         (TYPE_FIELD_TYPE (type, variant_field),
8081          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8082          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8083       if (branch_type == NULL)
8084         {
8085           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8086             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8087           TYPE_NFIELDS (rtype) -= 1;
8088         }
8089       else
8090         {
8091           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8092           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8093           fld_bit_len =
8094             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8095             TARGET_CHAR_BIT;
8096           if (off + fld_bit_len > bit_len)
8097             bit_len = off + fld_bit_len;
8098           TYPE_LENGTH (rtype) =
8099             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8100         }
8101     }
8102 
8103   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8104      should contain the alignment of that record, which should be a strictly
8105      positive value.  If null or negative, then something is wrong, most
8106      probably in the debug info.  In that case, we don't round up the size
8107      of the resulting type.  If this record is not part of another structure,
8108      the current RTYPE length might be good enough for our purposes.  */
8109   if (TYPE_LENGTH (type) <= 0)
8110     {
8111       if (TYPE_NAME (rtype))
8112 	warning (_("Invalid type size for `%s' detected: %d."),
8113 		 TYPE_NAME (rtype), TYPE_LENGTH (type));
8114       else
8115 	warning (_("Invalid type size for <unnamed> detected: %d."),
8116 		 TYPE_LENGTH (type));
8117     }
8118   else
8119     {
8120       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8121                                          TYPE_LENGTH (type));
8122     }
8123 
8124   value_free_to_mark (mark);
8125   if (TYPE_LENGTH (rtype) > varsize_limit)
8126     error (_("record type with dynamic size is larger than varsize-limit"));
8127   return rtype;
8128 }
8129 
8130 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8131    of 1.  */
8132 
8133 static struct type *
8134 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8135                                CORE_ADDR address, struct value *dval0)
8136 {
8137   return ada_template_to_fixed_record_type_1 (type, valaddr,
8138                                               address, dval0, 1);
8139 }
8140 
8141 /* An ordinary record type in which ___XVL-convention fields and
8142    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8143    static approximations, containing all possible fields.  Uses
8144    no runtime values.  Useless for use in values, but that's OK,
8145    since the results are used only for type determinations.   Works on both
8146    structs and unions.  Representation note: to save space, we memorize
8147    the result of this function in the TYPE_TARGET_TYPE of the
8148    template type.  */
8149 
8150 static struct type *
8151 template_to_static_fixed_type (struct type *type0)
8152 {
8153   struct type *type;
8154   int nfields;
8155   int f;
8156 
8157   if (TYPE_TARGET_TYPE (type0) != NULL)
8158     return TYPE_TARGET_TYPE (type0);
8159 
8160   nfields = TYPE_NFIELDS (type0);
8161   type = type0;
8162 
8163   for (f = 0; f < nfields; f += 1)
8164     {
8165       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
8166       struct type *new_type;
8167 
8168       if (is_dynamic_field (type0, f))
8169         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8170       else
8171         new_type = static_unwrap_type (field_type);
8172       if (type == type0 && new_type != field_type)
8173         {
8174           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8175           TYPE_CODE (type) = TYPE_CODE (type0);
8176           INIT_CPLUS_SPECIFIC (type);
8177           TYPE_NFIELDS (type) = nfields;
8178           TYPE_FIELDS (type) = (struct field *)
8179             TYPE_ALLOC (type, nfields * sizeof (struct field));
8180           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8181                   sizeof (struct field) * nfields);
8182           TYPE_NAME (type) = ada_type_name (type0);
8183           TYPE_TAG_NAME (type) = NULL;
8184 	  TYPE_FIXED_INSTANCE (type) = 1;
8185           TYPE_LENGTH (type) = 0;
8186         }
8187       TYPE_FIELD_TYPE (type, f) = new_type;
8188       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8189     }
8190   return type;
8191 }
8192 
8193 /* Given an object of type TYPE whose contents are at VALADDR and
8194    whose address in memory is ADDRESS, returns a revision of TYPE,
8195    which should be a non-dynamic-sized record, in which the variant
8196    part, if any, is replaced with the appropriate branch.  Looks
8197    for discriminant values in DVAL0, which can be NULL if the record
8198    contains the necessary discriminant values.  */
8199 
8200 static struct type *
8201 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8202                                    CORE_ADDR address, struct value *dval0)
8203 {
8204   struct value *mark = value_mark ();
8205   struct value *dval;
8206   struct type *rtype;
8207   struct type *branch_type;
8208   int nfields = TYPE_NFIELDS (type);
8209   int variant_field = variant_field_index (type);
8210 
8211   if (variant_field == -1)
8212     return type;
8213 
8214   if (dval0 == NULL)
8215     {
8216       dval = value_from_contents_and_address (type, valaddr, address);
8217       type = value_type (dval);
8218     }
8219   else
8220     dval = dval0;
8221 
8222   rtype = alloc_type_copy (type);
8223   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8224   INIT_CPLUS_SPECIFIC (rtype);
8225   TYPE_NFIELDS (rtype) = nfields;
8226   TYPE_FIELDS (rtype) =
8227     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8228   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8229           sizeof (struct field) * nfields);
8230   TYPE_NAME (rtype) = ada_type_name (type);
8231   TYPE_TAG_NAME (rtype) = NULL;
8232   TYPE_FIXED_INSTANCE (rtype) = 1;
8233   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8234 
8235   branch_type = to_fixed_variant_branch_type
8236     (TYPE_FIELD_TYPE (type, variant_field),
8237      cond_offset_host (valaddr,
8238                        TYPE_FIELD_BITPOS (type, variant_field)
8239                        / TARGET_CHAR_BIT),
8240      cond_offset_target (address,
8241                          TYPE_FIELD_BITPOS (type, variant_field)
8242                          / TARGET_CHAR_BIT), dval);
8243   if (branch_type == NULL)
8244     {
8245       int f;
8246 
8247       for (f = variant_field + 1; f < nfields; f += 1)
8248         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8249       TYPE_NFIELDS (rtype) -= 1;
8250     }
8251   else
8252     {
8253       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8254       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8255       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8256       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8257     }
8258   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8259 
8260   value_free_to_mark (mark);
8261   return rtype;
8262 }
8263 
8264 /* An ordinary record type (with fixed-length fields) that describes
8265    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8266    beginning of this section].   Any necessary discriminants' values
8267    should be in DVAL, a record value; it may be NULL if the object
8268    at ADDR itself contains any necessary discriminant values.
8269    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8270    values from the record are needed.  Except in the case that DVAL,
8271    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8272    unchecked) is replaced by a particular branch of the variant.
8273 
8274    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8275    is questionable and may be removed.  It can arise during the
8276    processing of an unconstrained-array-of-record type where all the
8277    variant branches have exactly the same size.  This is because in
8278    such cases, the compiler does not bother to use the XVS convention
8279    when encoding the record.  I am currently dubious of this
8280    shortcut and suspect the compiler should be altered.  FIXME.  */
8281 
8282 static struct type *
8283 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8284                       CORE_ADDR address, struct value *dval)
8285 {
8286   struct type *templ_type;
8287 
8288   if (TYPE_FIXED_INSTANCE (type0))
8289     return type0;
8290 
8291   templ_type = dynamic_template_type (type0);
8292 
8293   if (templ_type != NULL)
8294     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8295   else if (variant_field_index (type0) >= 0)
8296     {
8297       if (dval == NULL && valaddr == NULL && address == 0)
8298         return type0;
8299       return to_record_with_fixed_variant_part (type0, valaddr, address,
8300                                                 dval);
8301     }
8302   else
8303     {
8304       TYPE_FIXED_INSTANCE (type0) = 1;
8305       return type0;
8306     }
8307 
8308 }
8309 
8310 /* An ordinary record type (with fixed-length fields) that describes
8311    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8312    union type.  Any necessary discriminants' values should be in DVAL,
8313    a record value.  That is, this routine selects the appropriate
8314    branch of the union at ADDR according to the discriminant value
8315    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8316    it represents a variant subject to a pragma Unchecked_Union.  */
8317 
8318 static struct type *
8319 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8320                               CORE_ADDR address, struct value *dval)
8321 {
8322   int which;
8323   struct type *templ_type;
8324   struct type *var_type;
8325 
8326   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8327     var_type = TYPE_TARGET_TYPE (var_type0);
8328   else
8329     var_type = var_type0;
8330 
8331   templ_type = ada_find_parallel_type (var_type, "___XVU");
8332 
8333   if (templ_type != NULL)
8334     var_type = templ_type;
8335 
8336   if (is_unchecked_variant (var_type, value_type (dval)))
8337       return var_type0;
8338   which =
8339     ada_which_variant_applies (var_type,
8340                                value_type (dval), value_contents (dval));
8341 
8342   if (which < 0)
8343     return empty_record (var_type);
8344   else if (is_dynamic_field (var_type, which))
8345     return to_fixed_record_type
8346       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8347        valaddr, address, dval);
8348   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8349     return
8350       to_fixed_record_type
8351       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8352   else
8353     return TYPE_FIELD_TYPE (var_type, which);
8354 }
8355 
8356 /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8357    ENCODING_TYPE, a type following the GNAT conventions for discrete
8358    type encodings, only carries redundant information.  */
8359 
8360 static int
8361 ada_is_redundant_range_encoding (struct type *range_type,
8362 				 struct type *encoding_type)
8363 {
8364   struct type *fixed_range_type;
8365   char *bounds_str;
8366   int n;
8367   LONGEST lo, hi;
8368 
8369   gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8370 
8371   if (TYPE_CODE (get_base_type (range_type))
8372       != TYPE_CODE (get_base_type (encoding_type)))
8373     {
8374       /* The compiler probably used a simple base type to describe
8375 	 the range type instead of the range's actual base type,
8376 	 expecting us to get the real base type from the encoding
8377 	 anyway.  In this situation, the encoding cannot be ignored
8378 	 as redundant.  */
8379       return 0;
8380     }
8381 
8382   if (is_dynamic_type (range_type))
8383     return 0;
8384 
8385   if (TYPE_NAME (encoding_type) == NULL)
8386     return 0;
8387 
8388   bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8389   if (bounds_str == NULL)
8390     return 0;
8391 
8392   n = 8; /* Skip "___XDLU_".  */
8393   if (!ada_scan_number (bounds_str, n, &lo, &n))
8394     return 0;
8395   if (TYPE_LOW_BOUND (range_type) != lo)
8396     return 0;
8397 
8398   n += 2; /* Skip the "__" separator between the two bounds.  */
8399   if (!ada_scan_number (bounds_str, n, &hi, &n))
8400     return 0;
8401   if (TYPE_HIGH_BOUND (range_type) != hi)
8402     return 0;
8403 
8404   return 1;
8405 }
8406 
8407 /* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8408    a type following the GNAT encoding for describing array type
8409    indices, only carries redundant information.  */
8410 
8411 static int
8412 ada_is_redundant_index_type_desc (struct type *array_type,
8413 				  struct type *desc_type)
8414 {
8415   struct type *this_layer = check_typedef (array_type);
8416   int i;
8417 
8418   for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8419     {
8420       if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8421 					    TYPE_FIELD_TYPE (desc_type, i)))
8422 	return 0;
8423       this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8424     }
8425 
8426   return 1;
8427 }
8428 
8429 /* Assuming that TYPE0 is an array type describing the type of a value
8430    at ADDR, and that DVAL describes a record containing any
8431    discriminants used in TYPE0, returns a type for the value that
8432    contains no dynamic components (that is, no components whose sizes
8433    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8434    true, gives an error message if the resulting type's size is over
8435    varsize_limit.  */
8436 
8437 static struct type *
8438 to_fixed_array_type (struct type *type0, struct value *dval,
8439                      int ignore_too_big)
8440 {
8441   struct type *index_type_desc;
8442   struct type *result;
8443   int constrained_packed_array_p;
8444 
8445   type0 = ada_check_typedef (type0);
8446   if (TYPE_FIXED_INSTANCE (type0))
8447     return type0;
8448 
8449   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8450   if (constrained_packed_array_p)
8451     type0 = decode_constrained_packed_array_type (type0);
8452 
8453   index_type_desc = ada_find_parallel_type (type0, "___XA");
8454   ada_fixup_array_indexes_type (index_type_desc);
8455   if (index_type_desc != NULL
8456       && ada_is_redundant_index_type_desc (type0, index_type_desc))
8457     {
8458       /* Ignore this ___XA parallel type, as it does not bring any
8459 	 useful information.  This allows us to avoid creating fixed
8460 	 versions of the array's index types, which would be identical
8461 	 to the original ones.  This, in turn, can also help avoid
8462 	 the creation of fixed versions of the array itself.  */
8463       index_type_desc = NULL;
8464     }
8465 
8466   if (index_type_desc == NULL)
8467     {
8468       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8469 
8470       /* NOTE: elt_type---the fixed version of elt_type0---should never
8471          depend on the contents of the array in properly constructed
8472          debugging data.  */
8473       /* Create a fixed version of the array element type.
8474          We're not providing the address of an element here,
8475          and thus the actual object value cannot be inspected to do
8476          the conversion.  This should not be a problem, since arrays of
8477          unconstrained objects are not allowed.  In particular, all
8478          the elements of an array of a tagged type should all be of
8479          the same type specified in the debugging info.  No need to
8480          consult the object tag.  */
8481       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8482 
8483       /* Make sure we always create a new array type when dealing with
8484 	 packed array types, since we're going to fix-up the array
8485 	 type length and element bitsize a little further down.  */
8486       if (elt_type0 == elt_type && !constrained_packed_array_p)
8487         result = type0;
8488       else
8489         result = create_array_type (alloc_type_copy (type0),
8490                                     elt_type, TYPE_INDEX_TYPE (type0));
8491     }
8492   else
8493     {
8494       int i;
8495       struct type *elt_type0;
8496 
8497       elt_type0 = type0;
8498       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8499         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8500 
8501       /* NOTE: result---the fixed version of elt_type0---should never
8502          depend on the contents of the array in properly constructed
8503          debugging data.  */
8504       /* Create a fixed version of the array element type.
8505          We're not providing the address of an element here,
8506          and thus the actual object value cannot be inspected to do
8507          the conversion.  This should not be a problem, since arrays of
8508          unconstrained objects are not allowed.  In particular, all
8509          the elements of an array of a tagged type should all be of
8510          the same type specified in the debugging info.  No need to
8511          consult the object tag.  */
8512       result =
8513         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8514 
8515       elt_type0 = type0;
8516       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8517         {
8518           struct type *range_type =
8519             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8520 
8521           result = create_array_type (alloc_type_copy (elt_type0),
8522                                       result, range_type);
8523 	  elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8524         }
8525       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8526         error (_("array type with dynamic size is larger than varsize-limit"));
8527     }
8528 
8529   /* We want to preserve the type name.  This can be useful when
8530      trying to get the type name of a value that has already been
8531      printed (for instance, if the user did "print VAR; whatis $".  */
8532   TYPE_NAME (result) = TYPE_NAME (type0);
8533 
8534   if (constrained_packed_array_p)
8535     {
8536       /* So far, the resulting type has been created as if the original
8537 	 type was a regular (non-packed) array type.  As a result, the
8538 	 bitsize of the array elements needs to be set again, and the array
8539 	 length needs to be recomputed based on that bitsize.  */
8540       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8541       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8542 
8543       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8544       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8545       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8546         TYPE_LENGTH (result)++;
8547     }
8548 
8549   TYPE_FIXED_INSTANCE (result) = 1;
8550   return result;
8551 }
8552 
8553 
8554 /* A standard type (containing no dynamically sized components)
8555    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8556    DVAL describes a record containing any discriminants used in TYPE0,
8557    and may be NULL if there are none, or if the object of type TYPE at
8558    ADDRESS or in VALADDR contains these discriminants.
8559 
8560    If CHECK_TAG is not null, in the case of tagged types, this function
8561    attempts to locate the object's tag and use it to compute the actual
8562    type.  However, when ADDRESS is null, we cannot use it to determine the
8563    location of the tag, and therefore compute the tagged type's actual type.
8564    So we return the tagged type without consulting the tag.  */
8565 
8566 static struct type *
8567 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8568                    CORE_ADDR address, struct value *dval, int check_tag)
8569 {
8570   type = ada_check_typedef (type);
8571   switch (TYPE_CODE (type))
8572     {
8573     default:
8574       return type;
8575     case TYPE_CODE_STRUCT:
8576       {
8577         struct type *static_type = to_static_fixed_type (type);
8578         struct type *fixed_record_type =
8579           to_fixed_record_type (type, valaddr, address, NULL);
8580 
8581         /* If STATIC_TYPE is a tagged type and we know the object's address,
8582            then we can determine its tag, and compute the object's actual
8583            type from there.  Note that we have to use the fixed record
8584            type (the parent part of the record may have dynamic fields
8585            and the way the location of _tag is expressed may depend on
8586            them).  */
8587 
8588         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8589           {
8590 	    struct value *tag =
8591 	      value_tag_from_contents_and_address
8592 	      (fixed_record_type,
8593 	       valaddr,
8594 	       address);
8595 	    struct type *real_type = type_from_tag (tag);
8596 	    struct value *obj =
8597 	      value_from_contents_and_address (fixed_record_type,
8598 					       valaddr,
8599 					       address);
8600             fixed_record_type = value_type (obj);
8601             if (real_type != NULL)
8602               return to_fixed_record_type
8603 		(real_type, NULL,
8604 		 value_address (ada_tag_value_at_base_address (obj)), NULL);
8605           }
8606 
8607         /* Check to see if there is a parallel ___XVZ variable.
8608            If there is, then it provides the actual size of our type.  */
8609         else if (ada_type_name (fixed_record_type) != NULL)
8610           {
8611             const char *name = ada_type_name (fixed_record_type);
8612             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8613             int xvz_found = 0;
8614             LONGEST size;
8615 
8616             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8617             size = get_int_var_value (xvz_name, &xvz_found);
8618             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8619               {
8620                 fixed_record_type = copy_type (fixed_record_type);
8621                 TYPE_LENGTH (fixed_record_type) = size;
8622 
8623                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8624                    observed this when the debugging info is STABS, and
8625                    apparently it is something that is hard to fix.
8626 
8627                    In practice, we don't need the actual type definition
8628                    at all, because the presence of the XVZ variable allows us
8629                    to assume that there must be a XVS type as well, which we
8630                    should be able to use later, when we need the actual type
8631                    definition.
8632 
8633                    In the meantime, pretend that the "fixed" type we are
8634                    returning is NOT a stub, because this can cause trouble
8635                    when using this type to create new types targeting it.
8636                    Indeed, the associated creation routines often check
8637                    whether the target type is a stub and will try to replace
8638                    it, thus using a type with the wrong size.  This, in turn,
8639                    might cause the new type to have the wrong size too.
8640                    Consider the case of an array, for instance, where the size
8641                    of the array is computed from the number of elements in
8642                    our array multiplied by the size of its element.  */
8643                 TYPE_STUB (fixed_record_type) = 0;
8644               }
8645           }
8646         return fixed_record_type;
8647       }
8648     case TYPE_CODE_ARRAY:
8649       return to_fixed_array_type (type, dval, 1);
8650     case TYPE_CODE_UNION:
8651       if (dval == NULL)
8652         return type;
8653       else
8654         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8655     }
8656 }
8657 
8658 /* The same as ada_to_fixed_type_1, except that it preserves the type
8659    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8660 
8661    The typedef layer needs be preserved in order to differentiate between
8662    arrays and array pointers when both types are implemented using the same
8663    fat pointer.  In the array pointer case, the pointer is encoded as
8664    a typedef of the pointer type.  For instance, considering:
8665 
8666 	  type String_Access is access String;
8667 	  S1 : String_Access := null;
8668 
8669    To the debugger, S1 is defined as a typedef of type String.  But
8670    to the user, it is a pointer.  So if the user tries to print S1,
8671    we should not dereference the array, but print the array address
8672    instead.
8673 
8674    If we didn't preserve the typedef layer, we would lose the fact that
8675    the type is to be presented as a pointer (needs de-reference before
8676    being printed).  And we would also use the source-level type name.  */
8677 
8678 struct type *
8679 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8680                    CORE_ADDR address, struct value *dval, int check_tag)
8681 
8682 {
8683   struct type *fixed_type =
8684     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8685 
8686   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8687       then preserve the typedef layer.
8688 
8689       Implementation note: We can only check the main-type portion of
8690       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8691       from TYPE now returns a type that has the same instance flags
8692       as TYPE.  For instance, if TYPE is a "typedef const", and its
8693       target type is a "struct", then the typedef elimination will return
8694       a "const" version of the target type.  See check_typedef for more
8695       details about how the typedef layer elimination is done.
8696 
8697       brobecker/2010-11-19: It seems to me that the only case where it is
8698       useful to preserve the typedef layer is when dealing with fat pointers.
8699       Perhaps, we could add a check for that and preserve the typedef layer
8700       only in that situation.  But this seems unecessary so far, probably
8701       because we call check_typedef/ada_check_typedef pretty much everywhere.
8702       */
8703   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8704       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8705 	  == TYPE_MAIN_TYPE (fixed_type)))
8706     return type;
8707 
8708   return fixed_type;
8709 }
8710 
8711 /* A standard (static-sized) type corresponding as well as possible to
8712    TYPE0, but based on no runtime data.  */
8713 
8714 static struct type *
8715 to_static_fixed_type (struct type *type0)
8716 {
8717   struct type *type;
8718 
8719   if (type0 == NULL)
8720     return NULL;
8721 
8722   if (TYPE_FIXED_INSTANCE (type0))
8723     return type0;
8724 
8725   type0 = ada_check_typedef (type0);
8726 
8727   switch (TYPE_CODE (type0))
8728     {
8729     default:
8730       return type0;
8731     case TYPE_CODE_STRUCT:
8732       type = dynamic_template_type (type0);
8733       if (type != NULL)
8734         return template_to_static_fixed_type (type);
8735       else
8736         return template_to_static_fixed_type (type0);
8737     case TYPE_CODE_UNION:
8738       type = ada_find_parallel_type (type0, "___XVU");
8739       if (type != NULL)
8740         return template_to_static_fixed_type (type);
8741       else
8742         return template_to_static_fixed_type (type0);
8743     }
8744 }
8745 
8746 /* A static approximation of TYPE with all type wrappers removed.  */
8747 
8748 static struct type *
8749 static_unwrap_type (struct type *type)
8750 {
8751   if (ada_is_aligner_type (type))
8752     {
8753       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8754       if (ada_type_name (type1) == NULL)
8755         TYPE_NAME (type1) = ada_type_name (type);
8756 
8757       return static_unwrap_type (type1);
8758     }
8759   else
8760     {
8761       struct type *raw_real_type = ada_get_base_type (type);
8762 
8763       if (raw_real_type == type)
8764         return type;
8765       else
8766         return to_static_fixed_type (raw_real_type);
8767     }
8768 }
8769 
8770 /* In some cases, incomplete and private types require
8771    cross-references that are not resolved as records (for example,
8772       type Foo;
8773       type FooP is access Foo;
8774       V: FooP;
8775       type Foo is array ...;
8776    ).  In these cases, since there is no mechanism for producing
8777    cross-references to such types, we instead substitute for FooP a
8778    stub enumeration type that is nowhere resolved, and whose tag is
8779    the name of the actual type.  Call these types "non-record stubs".  */
8780 
8781 /* A type equivalent to TYPE that is not a non-record stub, if one
8782    exists, otherwise TYPE.  */
8783 
8784 struct type *
8785 ada_check_typedef (struct type *type)
8786 {
8787   if (type == NULL)
8788     return NULL;
8789 
8790   /* If our type is a typedef type of a fat pointer, then we're done.
8791      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8792      what allows us to distinguish between fat pointers that represent
8793      array types, and fat pointers that represent array access types
8794      (in both cases, the compiler implements them as fat pointers).  */
8795   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8796       && is_thick_pntr (ada_typedef_target_type (type)))
8797     return type;
8798 
8799   CHECK_TYPEDEF (type);
8800   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8801       || !TYPE_STUB (type)
8802       || TYPE_TAG_NAME (type) == NULL)
8803     return type;
8804   else
8805     {
8806       const char *name = TYPE_TAG_NAME (type);
8807       struct type *type1 = ada_find_any_type (name);
8808 
8809       if (type1 == NULL)
8810         return type;
8811 
8812       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8813 	 stubs pointing to arrays, as we don't create symbols for array
8814 	 types, only for the typedef-to-array types).  If that's the case,
8815 	 strip the typedef layer.  */
8816       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8817 	type1 = ada_check_typedef (type1);
8818 
8819       return type1;
8820     }
8821 }
8822 
8823 /* A value representing the data at VALADDR/ADDRESS as described by
8824    type TYPE0, but with a standard (static-sized) type that correctly
8825    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8826    type, then return VAL0 [this feature is simply to avoid redundant
8827    creation of struct values].  */
8828 
8829 static struct value *
8830 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8831                            struct value *val0)
8832 {
8833   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8834 
8835   if (type == type0 && val0 != NULL)
8836     return val0;
8837   else
8838     return value_from_contents_and_address (type, 0, address);
8839 }
8840 
8841 /* A value representing VAL, but with a standard (static-sized) type
8842    that correctly describes it.  Does not necessarily create a new
8843    value.  */
8844 
8845 struct value *
8846 ada_to_fixed_value (struct value *val)
8847 {
8848   val = unwrap_value (val);
8849   val = ada_to_fixed_value_create (value_type (val),
8850 				      value_address (val),
8851 				      val);
8852   return val;
8853 }
8854 
8855 
8856 /* Attributes */
8857 
8858 /* Table mapping attribute numbers to names.
8859    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8860 
8861 static const char *attribute_names[] = {
8862   "<?>",
8863 
8864   "first",
8865   "last",
8866   "length",
8867   "image",
8868   "max",
8869   "min",
8870   "modulus",
8871   "pos",
8872   "size",
8873   "tag",
8874   "val",
8875   0
8876 };
8877 
8878 const char *
8879 ada_attribute_name (enum exp_opcode n)
8880 {
8881   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8882     return attribute_names[n - OP_ATR_FIRST + 1];
8883   else
8884     return attribute_names[0];
8885 }
8886 
8887 /* Evaluate the 'POS attribute applied to ARG.  */
8888 
8889 static LONGEST
8890 pos_atr (struct value *arg)
8891 {
8892   struct value *val = coerce_ref (arg);
8893   struct type *type = value_type (val);
8894 
8895   if (!discrete_type_p (type))
8896     error (_("'POS only defined on discrete types"));
8897 
8898   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8899     {
8900       int i;
8901       LONGEST v = value_as_long (val);
8902 
8903       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8904         {
8905           if (v == TYPE_FIELD_ENUMVAL (type, i))
8906             return i;
8907         }
8908       error (_("enumeration value is invalid: can't find 'POS"));
8909     }
8910   else
8911     return value_as_long (val);
8912 }
8913 
8914 static struct value *
8915 value_pos_atr (struct type *type, struct value *arg)
8916 {
8917   return value_from_longest (type, pos_atr (arg));
8918 }
8919 
8920 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8921 
8922 static struct value *
8923 value_val_atr (struct type *type, struct value *arg)
8924 {
8925   if (!discrete_type_p (type))
8926     error (_("'VAL only defined on discrete types"));
8927   if (!integer_type_p (value_type (arg)))
8928     error (_("'VAL requires integral argument"));
8929 
8930   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8931     {
8932       long pos = value_as_long (arg);
8933 
8934       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8935         error (_("argument to 'VAL out of range"));
8936       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8937     }
8938   else
8939     return value_from_longest (type, value_as_long (arg));
8940 }
8941 
8942 
8943                                 /* Evaluation */
8944 
8945 /* True if TYPE appears to be an Ada character type.
8946    [At the moment, this is true only for Character and Wide_Character;
8947    It is a heuristic test that could stand improvement].  */
8948 
8949 int
8950 ada_is_character_type (struct type *type)
8951 {
8952   const char *name;
8953 
8954   /* If the type code says it's a character, then assume it really is,
8955      and don't check any further.  */
8956   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8957     return 1;
8958 
8959   /* Otherwise, assume it's a character type iff it is a discrete type
8960      with a known character type name.  */
8961   name = ada_type_name (type);
8962   return (name != NULL
8963           && (TYPE_CODE (type) == TYPE_CODE_INT
8964               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8965           && (strcmp (name, "character") == 0
8966               || strcmp (name, "wide_character") == 0
8967               || strcmp (name, "wide_wide_character") == 0
8968               || strcmp (name, "unsigned char") == 0));
8969 }
8970 
8971 /* True if TYPE appears to be an Ada string type.  */
8972 
8973 int
8974 ada_is_string_type (struct type *type)
8975 {
8976   type = ada_check_typedef (type);
8977   if (type != NULL
8978       && TYPE_CODE (type) != TYPE_CODE_PTR
8979       && (ada_is_simple_array_type (type)
8980           || ada_is_array_descriptor_type (type))
8981       && ada_array_arity (type) == 1)
8982     {
8983       struct type *elttype = ada_array_element_type (type, 1);
8984 
8985       return ada_is_character_type (elttype);
8986     }
8987   else
8988     return 0;
8989 }
8990 
8991 /* The compiler sometimes provides a parallel XVS type for a given
8992    PAD type.  Normally, it is safe to follow the PAD type directly,
8993    but older versions of the compiler have a bug that causes the offset
8994    of its "F" field to be wrong.  Following that field in that case
8995    would lead to incorrect results, but this can be worked around
8996    by ignoring the PAD type and using the associated XVS type instead.
8997 
8998    Set to True if the debugger should trust the contents of PAD types.
8999    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
9000 static int trust_pad_over_xvs = 1;
9001 
9002 /* True if TYPE is a struct type introduced by the compiler to force the
9003    alignment of a value.  Such types have a single field with a
9004    distinctive name.  */
9005 
9006 int
9007 ada_is_aligner_type (struct type *type)
9008 {
9009   type = ada_check_typedef (type);
9010 
9011   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
9012     return 0;
9013 
9014   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
9015           && TYPE_NFIELDS (type) == 1
9016           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
9017 }
9018 
9019 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
9020    the parallel type.  */
9021 
9022 struct type *
9023 ada_get_base_type (struct type *raw_type)
9024 {
9025   struct type *real_type_namer;
9026   struct type *raw_real_type;
9027 
9028   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9029     return raw_type;
9030 
9031   if (ada_is_aligner_type (raw_type))
9032     /* The encoding specifies that we should always use the aligner type.
9033        So, even if this aligner type has an associated XVS type, we should
9034        simply ignore it.
9035 
9036        According to the compiler gurus, an XVS type parallel to an aligner
9037        type may exist because of a stabs limitation.  In stabs, aligner
9038        types are empty because the field has a variable-sized type, and
9039        thus cannot actually be used as an aligner type.  As a result,
9040        we need the associated parallel XVS type to decode the type.
9041        Since the policy in the compiler is to not change the internal
9042        representation based on the debugging info format, we sometimes
9043        end up having a redundant XVS type parallel to the aligner type.  */
9044     return raw_type;
9045 
9046   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
9047   if (real_type_namer == NULL
9048       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9049       || TYPE_NFIELDS (real_type_namer) != 1)
9050     return raw_type;
9051 
9052   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9053     {
9054       /* This is an older encoding form where the base type needs to be
9055 	 looked up by name.  We prefer the newer enconding because it is
9056 	 more efficient.  */
9057       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9058       if (raw_real_type == NULL)
9059 	return raw_type;
9060       else
9061 	return raw_real_type;
9062     }
9063 
9064   /* The field in our XVS type is a reference to the base type.  */
9065   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
9066 }
9067 
9068 /* The type of value designated by TYPE, with all aligners removed.  */
9069 
9070 struct type *
9071 ada_aligned_type (struct type *type)
9072 {
9073   if (ada_is_aligner_type (type))
9074     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9075   else
9076     return ada_get_base_type (type);
9077 }
9078 
9079 
9080 /* The address of the aligned value in an object at address VALADDR
9081    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
9082 
9083 const gdb_byte *
9084 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
9085 {
9086   if (ada_is_aligner_type (type))
9087     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
9088                                    valaddr +
9089                                    TYPE_FIELD_BITPOS (type,
9090                                                       0) / TARGET_CHAR_BIT);
9091   else
9092     return valaddr;
9093 }
9094 
9095 
9096 
9097 /* The printed representation of an enumeration literal with encoded
9098    name NAME.  The value is good to the next call of ada_enum_name.  */
9099 const char *
9100 ada_enum_name (const char *name)
9101 {
9102   static char *result;
9103   static size_t result_len = 0;
9104   char *tmp;
9105 
9106   /* First, unqualify the enumeration name:
9107      1. Search for the last '.' character.  If we find one, then skip
9108      all the preceding characters, the unqualified name starts
9109      right after that dot.
9110      2. Otherwise, we may be debugging on a target where the compiler
9111      translates dots into "__".  Search forward for double underscores,
9112      but stop searching when we hit an overloading suffix, which is
9113      of the form "__" followed by digits.  */
9114 
9115   tmp = strrchr (name, '.');
9116   if (tmp != NULL)
9117     name = tmp + 1;
9118   else
9119     {
9120       while ((tmp = strstr (name, "__")) != NULL)
9121         {
9122           if (isdigit (tmp[2]))
9123             break;
9124           else
9125             name = tmp + 2;
9126         }
9127     }
9128 
9129   if (name[0] == 'Q')
9130     {
9131       int v;
9132 
9133       if (name[1] == 'U' || name[1] == 'W')
9134         {
9135           if (sscanf (name + 2, "%x", &v) != 1)
9136             return name;
9137         }
9138       else
9139         return name;
9140 
9141       GROW_VECT (result, result_len, 16);
9142       if (isascii (v) && isprint (v))
9143         xsnprintf (result, result_len, "'%c'", v);
9144       else if (name[1] == 'U')
9145         xsnprintf (result, result_len, "[\"%02x\"]", v);
9146       else
9147         xsnprintf (result, result_len, "[\"%04x\"]", v);
9148 
9149       return result;
9150     }
9151   else
9152     {
9153       tmp = strstr (name, "__");
9154       if (tmp == NULL)
9155 	tmp = strstr (name, "$");
9156       if (tmp != NULL)
9157         {
9158           GROW_VECT (result, result_len, tmp - name + 1);
9159           strncpy (result, name, tmp - name);
9160           result[tmp - name] = '\0';
9161           return result;
9162         }
9163 
9164       return name;
9165     }
9166 }
9167 
9168 /* Evaluate the subexpression of EXP starting at *POS as for
9169    evaluate_type, updating *POS to point just past the evaluated
9170    expression.  */
9171 
9172 static struct value *
9173 evaluate_subexp_type (struct expression *exp, int *pos)
9174 {
9175   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9176 }
9177 
9178 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9179    value it wraps.  */
9180 
9181 static struct value *
9182 unwrap_value (struct value *val)
9183 {
9184   struct type *type = ada_check_typedef (value_type (val));
9185 
9186   if (ada_is_aligner_type (type))
9187     {
9188       struct value *v = ada_value_struct_elt (val, "F", 0);
9189       struct type *val_type = ada_check_typedef (value_type (v));
9190 
9191       if (ada_type_name (val_type) == NULL)
9192         TYPE_NAME (val_type) = ada_type_name (type);
9193 
9194       return unwrap_value (v);
9195     }
9196   else
9197     {
9198       struct type *raw_real_type =
9199         ada_check_typedef (ada_get_base_type (type));
9200 
9201       /* If there is no parallel XVS or XVE type, then the value is
9202 	 already unwrapped.  Return it without further modification.  */
9203       if ((type == raw_real_type)
9204 	  && ada_find_parallel_type (type, "___XVE") == NULL)
9205 	return val;
9206 
9207       return
9208         coerce_unspec_val_to_type
9209         (val, ada_to_fixed_type (raw_real_type, 0,
9210                                  value_address (val),
9211                                  NULL, 1));
9212     }
9213 }
9214 
9215 static struct value *
9216 cast_to_fixed (struct type *type, struct value *arg)
9217 {
9218   LONGEST val;
9219 
9220   if (type == value_type (arg))
9221     return arg;
9222   else if (ada_is_fixed_point_type (value_type (arg)))
9223     val = ada_float_to_fixed (type,
9224                               ada_fixed_to_float (value_type (arg),
9225                                                   value_as_long (arg)));
9226   else
9227     {
9228       DOUBLEST argd = value_as_double (arg);
9229 
9230       val = ada_float_to_fixed (type, argd);
9231     }
9232 
9233   return value_from_longest (type, val);
9234 }
9235 
9236 static struct value *
9237 cast_from_fixed (struct type *type, struct value *arg)
9238 {
9239   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9240                                      value_as_long (arg));
9241 
9242   return value_from_double (type, val);
9243 }
9244 
9245 /* Given two array types T1 and T2, return nonzero iff both arrays
9246    contain the same number of elements.  */
9247 
9248 static int
9249 ada_same_array_size_p (struct type *t1, struct type *t2)
9250 {
9251   LONGEST lo1, hi1, lo2, hi2;
9252 
9253   /* Get the array bounds in order to verify that the size of
9254      the two arrays match.  */
9255   if (!get_array_bounds (t1, &lo1, &hi1)
9256       || !get_array_bounds (t2, &lo2, &hi2))
9257     error (_("unable to determine array bounds"));
9258 
9259   /* To make things easier for size comparison, normalize a bit
9260      the case of empty arrays by making sure that the difference
9261      between upper bound and lower bound is always -1.  */
9262   if (lo1 > hi1)
9263     hi1 = lo1 - 1;
9264   if (lo2 > hi2)
9265     hi2 = lo2 - 1;
9266 
9267   return (hi1 - lo1 == hi2 - lo2);
9268 }
9269 
9270 /* Assuming that VAL is an array of integrals, and TYPE represents
9271    an array with the same number of elements, but with wider integral
9272    elements, return an array "casted" to TYPE.  In practice, this
9273    means that the returned array is built by casting each element
9274    of the original array into TYPE's (wider) element type.  */
9275 
9276 static struct value *
9277 ada_promote_array_of_integrals (struct type *type, struct value *val)
9278 {
9279   struct type *elt_type = TYPE_TARGET_TYPE (type);
9280   LONGEST lo, hi;
9281   struct value *res;
9282   LONGEST i;
9283 
9284   /* Verify that both val and type are arrays of scalars, and
9285      that the size of val's elements is smaller than the size
9286      of type's element.  */
9287   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9288   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9289   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9290   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9291   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9292 	      > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9293 
9294   if (!get_array_bounds (type, &lo, &hi))
9295     error (_("unable to determine array bounds"));
9296 
9297   res = allocate_value (type);
9298 
9299   /* Promote each array element.  */
9300   for (i = 0; i < hi - lo + 1; i++)
9301     {
9302       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9303 
9304       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9305 	      value_contents_all (elt), TYPE_LENGTH (elt_type));
9306     }
9307 
9308   return res;
9309 }
9310 
9311 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9312    return the converted value.  */
9313 
9314 static struct value *
9315 coerce_for_assign (struct type *type, struct value *val)
9316 {
9317   struct type *type2 = value_type (val);
9318 
9319   if (type == type2)
9320     return val;
9321 
9322   type2 = ada_check_typedef (type2);
9323   type = ada_check_typedef (type);
9324 
9325   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9326       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9327     {
9328       val = ada_value_ind (val);
9329       type2 = value_type (val);
9330     }
9331 
9332   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9333       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9334     {
9335       if (!ada_same_array_size_p (type, type2))
9336 	error (_("cannot assign arrays of different length"));
9337 
9338       if (is_integral_type (TYPE_TARGET_TYPE (type))
9339 	  && is_integral_type (TYPE_TARGET_TYPE (type2))
9340 	  && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9341 	       < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9342 	{
9343 	  /* Allow implicit promotion of the array elements to
9344 	     a wider type.  */
9345 	  return ada_promote_array_of_integrals (type, val);
9346 	}
9347 
9348       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9349           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9350         error (_("Incompatible types in assignment"));
9351       deprecated_set_value_type (val, type);
9352     }
9353   return val;
9354 }
9355 
9356 static struct value *
9357 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9358 {
9359   struct value *val;
9360   struct type *type1, *type2;
9361   LONGEST v, v1, v2;
9362 
9363   arg1 = coerce_ref (arg1);
9364   arg2 = coerce_ref (arg2);
9365   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9366   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9367 
9368   if (TYPE_CODE (type1) != TYPE_CODE_INT
9369       || TYPE_CODE (type2) != TYPE_CODE_INT)
9370     return value_binop (arg1, arg2, op);
9371 
9372   switch (op)
9373     {
9374     case BINOP_MOD:
9375     case BINOP_DIV:
9376     case BINOP_REM:
9377       break;
9378     default:
9379       return value_binop (arg1, arg2, op);
9380     }
9381 
9382   v2 = value_as_long (arg2);
9383   if (v2 == 0)
9384     error (_("second operand of %s must not be zero."), op_string (op));
9385 
9386   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9387     return value_binop (arg1, arg2, op);
9388 
9389   v1 = value_as_long (arg1);
9390   switch (op)
9391     {
9392     case BINOP_DIV:
9393       v = v1 / v2;
9394       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9395         v += v > 0 ? -1 : 1;
9396       break;
9397     case BINOP_REM:
9398       v = v1 % v2;
9399       if (v * v1 < 0)
9400         v -= v2;
9401       break;
9402     default:
9403       /* Should not reach this point.  */
9404       v = 0;
9405     }
9406 
9407   val = allocate_value (type1);
9408   store_unsigned_integer (value_contents_raw (val),
9409                           TYPE_LENGTH (value_type (val)),
9410 			  gdbarch_byte_order (get_type_arch (type1)), v);
9411   return val;
9412 }
9413 
9414 static int
9415 ada_value_equal (struct value *arg1, struct value *arg2)
9416 {
9417   if (ada_is_direct_array_type (value_type (arg1))
9418       || ada_is_direct_array_type (value_type (arg2)))
9419     {
9420       /* Automatically dereference any array reference before
9421          we attempt to perform the comparison.  */
9422       arg1 = ada_coerce_ref (arg1);
9423       arg2 = ada_coerce_ref (arg2);
9424 
9425       arg1 = ada_coerce_to_simple_array (arg1);
9426       arg2 = ada_coerce_to_simple_array (arg2);
9427       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9428           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9429         error (_("Attempt to compare array with non-array"));
9430       /* FIXME: The following works only for types whose
9431          representations use all bits (no padding or undefined bits)
9432          and do not have user-defined equality.  */
9433       return
9434         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9435         && memcmp (value_contents (arg1), value_contents (arg2),
9436                    TYPE_LENGTH (value_type (arg1))) == 0;
9437     }
9438   return value_equal (arg1, arg2);
9439 }
9440 
9441 /* Total number of component associations in the aggregate starting at
9442    index PC in EXP.  Assumes that index PC is the start of an
9443    OP_AGGREGATE.  */
9444 
9445 static int
9446 num_component_specs (struct expression *exp, int pc)
9447 {
9448   int n, m, i;
9449 
9450   m = exp->elts[pc + 1].longconst;
9451   pc += 3;
9452   n = 0;
9453   for (i = 0; i < m; i += 1)
9454     {
9455       switch (exp->elts[pc].opcode)
9456 	{
9457 	default:
9458 	  n += 1;
9459 	  break;
9460 	case OP_CHOICES:
9461 	  n += exp->elts[pc + 1].longconst;
9462 	  break;
9463 	}
9464       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9465     }
9466   return n;
9467 }
9468 
9469 /* Assign the result of evaluating EXP starting at *POS to the INDEXth
9470    component of LHS (a simple array or a record), updating *POS past
9471    the expression, assuming that LHS is contained in CONTAINER.  Does
9472    not modify the inferior's memory, nor does it modify LHS (unless
9473    LHS == CONTAINER).  */
9474 
9475 static void
9476 assign_component (struct value *container, struct value *lhs, LONGEST index,
9477 		  struct expression *exp, int *pos)
9478 {
9479   struct value *mark = value_mark ();
9480   struct value *elt;
9481 
9482   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9483     {
9484       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9485       struct value *index_val = value_from_longest (index_type, index);
9486 
9487       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9488     }
9489   else
9490     {
9491       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9492       elt = ada_to_fixed_value (elt);
9493     }
9494 
9495   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9496     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9497   else
9498     value_assign_to_component (container, elt,
9499 			       ada_evaluate_subexp (NULL, exp, pos,
9500 						    EVAL_NORMAL));
9501 
9502   value_free_to_mark (mark);
9503 }
9504 
9505 /* Assuming that LHS represents an lvalue having a record or array
9506    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9507    of that aggregate's value to LHS, advancing *POS past the
9508    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9509    lvalue containing LHS (possibly LHS itself).  Does not modify
9510    the inferior's memory, nor does it modify the contents of
9511    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9512 
9513 static struct value *
9514 assign_aggregate (struct value *container,
9515 		  struct value *lhs, struct expression *exp,
9516 		  int *pos, enum noside noside)
9517 {
9518   struct type *lhs_type;
9519   int n = exp->elts[*pos+1].longconst;
9520   LONGEST low_index, high_index;
9521   int num_specs;
9522   LONGEST *indices;
9523   int max_indices, num_indices;
9524   int i;
9525 
9526   *pos += 3;
9527   if (noside != EVAL_NORMAL)
9528     {
9529       for (i = 0; i < n; i += 1)
9530 	ada_evaluate_subexp (NULL, exp, pos, noside);
9531       return container;
9532     }
9533 
9534   container = ada_coerce_ref (container);
9535   if (ada_is_direct_array_type (value_type (container)))
9536     container = ada_coerce_to_simple_array (container);
9537   lhs = ada_coerce_ref (lhs);
9538   if (!deprecated_value_modifiable (lhs))
9539     error (_("Left operand of assignment is not a modifiable lvalue."));
9540 
9541   lhs_type = value_type (lhs);
9542   if (ada_is_direct_array_type (lhs_type))
9543     {
9544       lhs = ada_coerce_to_simple_array (lhs);
9545       lhs_type = value_type (lhs);
9546       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9547       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9548     }
9549   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9550     {
9551       low_index = 0;
9552       high_index = num_visible_fields (lhs_type) - 1;
9553     }
9554   else
9555     error (_("Left-hand side must be array or record."));
9556 
9557   num_specs = num_component_specs (exp, *pos - 3);
9558   max_indices = 4 * num_specs + 4;
9559   indices = alloca (max_indices * sizeof (indices[0]));
9560   indices[0] = indices[1] = low_index - 1;
9561   indices[2] = indices[3] = high_index + 1;
9562   num_indices = 4;
9563 
9564   for (i = 0; i < n; i += 1)
9565     {
9566       switch (exp->elts[*pos].opcode)
9567 	{
9568 	  case OP_CHOICES:
9569 	    aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9570 					   &num_indices, max_indices,
9571 					   low_index, high_index);
9572 	    break;
9573 	  case OP_POSITIONAL:
9574 	    aggregate_assign_positional (container, lhs, exp, pos, indices,
9575 					 &num_indices, max_indices,
9576 					 low_index, high_index);
9577 	    break;
9578 	  case OP_OTHERS:
9579 	    if (i != n-1)
9580 	      error (_("Misplaced 'others' clause"));
9581 	    aggregate_assign_others (container, lhs, exp, pos, indices,
9582 				     num_indices, low_index, high_index);
9583 	    break;
9584 	  default:
9585 	    error (_("Internal error: bad aggregate clause"));
9586 	}
9587     }
9588 
9589   return container;
9590 }
9591 
9592 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9593    construct at *POS, updating *POS past the construct, given that
9594    the positions are relative to lower bound LOW, where HIGH is the
9595    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9596    updating *NUM_INDICES as needed.  CONTAINER is as for
9597    assign_aggregate.  */
9598 static void
9599 aggregate_assign_positional (struct value *container,
9600 			     struct value *lhs, struct expression *exp,
9601 			     int *pos, LONGEST *indices, int *num_indices,
9602 			     int max_indices, LONGEST low, LONGEST high)
9603 {
9604   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9605 
9606   if (ind - 1 == high)
9607     warning (_("Extra components in aggregate ignored."));
9608   if (ind <= high)
9609     {
9610       add_component_interval (ind, ind, indices, num_indices, max_indices);
9611       *pos += 3;
9612       assign_component (container, lhs, ind, exp, pos);
9613     }
9614   else
9615     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9616 }
9617 
9618 /* Assign into the components of LHS indexed by the OP_CHOICES
9619    construct at *POS, updating *POS past the construct, given that
9620    the allowable indices are LOW..HIGH.  Record the indices assigned
9621    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9622    needed.  CONTAINER is as for assign_aggregate.  */
9623 static void
9624 aggregate_assign_from_choices (struct value *container,
9625 			       struct value *lhs, struct expression *exp,
9626 			       int *pos, LONGEST *indices, int *num_indices,
9627 			       int max_indices, LONGEST low, LONGEST high)
9628 {
9629   int j;
9630   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9631   int choice_pos, expr_pc;
9632   int is_array = ada_is_direct_array_type (value_type (lhs));
9633 
9634   choice_pos = *pos += 3;
9635 
9636   for (j = 0; j < n_choices; j += 1)
9637     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9638   expr_pc = *pos;
9639   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9640 
9641   for (j = 0; j < n_choices; j += 1)
9642     {
9643       LONGEST lower, upper;
9644       enum exp_opcode op = exp->elts[choice_pos].opcode;
9645 
9646       if (op == OP_DISCRETE_RANGE)
9647 	{
9648 	  choice_pos += 1;
9649 	  lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9650 						      EVAL_NORMAL));
9651 	  upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9652 						      EVAL_NORMAL));
9653 	}
9654       else if (is_array)
9655 	{
9656 	  lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9657 						      EVAL_NORMAL));
9658 	  upper = lower;
9659 	}
9660       else
9661 	{
9662 	  int ind;
9663 	  const char *name;
9664 
9665 	  switch (op)
9666 	    {
9667 	    case OP_NAME:
9668 	      name = &exp->elts[choice_pos + 2].string;
9669 	      break;
9670 	    case OP_VAR_VALUE:
9671 	      name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9672 	      break;
9673 	    default:
9674 	      error (_("Invalid record component association."));
9675 	    }
9676 	  ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9677 	  ind = 0;
9678 	  if (! find_struct_field (name, value_type (lhs), 0,
9679 				   NULL, NULL, NULL, NULL, &ind))
9680 	    error (_("Unknown component name: %s."), name);
9681 	  lower = upper = ind;
9682 	}
9683 
9684       if (lower <= upper && (lower < low || upper > high))
9685 	error (_("Index in component association out of bounds."));
9686 
9687       add_component_interval (lower, upper, indices, num_indices,
9688 			      max_indices);
9689       while (lower <= upper)
9690 	{
9691 	  int pos1;
9692 
9693 	  pos1 = expr_pc;
9694 	  assign_component (container, lhs, lower, exp, &pos1);
9695 	  lower += 1;
9696 	}
9697     }
9698 }
9699 
9700 /* Assign the value of the expression in the OP_OTHERS construct in
9701    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9702    have not been previously assigned.  The index intervals already assigned
9703    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the
9704    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9705 static void
9706 aggregate_assign_others (struct value *container,
9707 			 struct value *lhs, struct expression *exp,
9708 			 int *pos, LONGEST *indices, int num_indices,
9709 			 LONGEST low, LONGEST high)
9710 {
9711   int i;
9712   int expr_pc = *pos + 1;
9713 
9714   for (i = 0; i < num_indices - 2; i += 2)
9715     {
9716       LONGEST ind;
9717 
9718       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9719 	{
9720 	  int localpos;
9721 
9722 	  localpos = expr_pc;
9723 	  assign_component (container, lhs, ind, exp, &localpos);
9724 	}
9725     }
9726   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9727 }
9728 
9729 /* Add the interval [LOW .. HIGH] to the sorted set of intervals
9730    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9731    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9732    MAX_SIZE.  The resulting intervals do not overlap.  */
9733 static void
9734 add_component_interval (LONGEST low, LONGEST high,
9735 			LONGEST* indices, int *size, int max_size)
9736 {
9737   int i, j;
9738 
9739   for (i = 0; i < *size; i += 2) {
9740     if (high >= indices[i] && low <= indices[i + 1])
9741       {
9742 	int kh;
9743 
9744 	for (kh = i + 2; kh < *size; kh += 2)
9745 	  if (high < indices[kh])
9746 	    break;
9747 	if (low < indices[i])
9748 	  indices[i] = low;
9749 	indices[i + 1] = indices[kh - 1];
9750 	if (high > indices[i + 1])
9751 	  indices[i + 1] = high;
9752 	memcpy (indices + i + 2, indices + kh, *size - kh);
9753 	*size -= kh - i - 2;
9754 	return;
9755       }
9756     else if (high < indices[i])
9757       break;
9758   }
9759 
9760   if (*size == max_size)
9761     error (_("Internal error: miscounted aggregate components."));
9762   *size += 2;
9763   for (j = *size-1; j >= i+2; j -= 1)
9764     indices[j] = indices[j - 2];
9765   indices[i] = low;
9766   indices[i + 1] = high;
9767 }
9768 
9769 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9770    is different.  */
9771 
9772 static struct value *
9773 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9774 {
9775   if (type == ada_check_typedef (value_type (arg2)))
9776     return arg2;
9777 
9778   if (ada_is_fixed_point_type (type))
9779     return (cast_to_fixed (type, arg2));
9780 
9781   if (ada_is_fixed_point_type (value_type (arg2)))
9782     return cast_from_fixed (type, arg2);
9783 
9784   return value_cast (type, arg2);
9785 }
9786 
9787 /*  Evaluating Ada expressions, and printing their result.
9788     ------------------------------------------------------
9789 
9790     1. Introduction:
9791     ----------------
9792 
9793     We usually evaluate an Ada expression in order to print its value.
9794     We also evaluate an expression in order to print its type, which
9795     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9796     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9797     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9798     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9799     similar.
9800 
9801     Evaluating expressions is a little more complicated for Ada entities
9802     than it is for entities in languages such as C.  The main reason for
9803     this is that Ada provides types whose definition might be dynamic.
9804     One example of such types is variant records.  Or another example
9805     would be an array whose bounds can only be known at run time.
9806 
9807     The following description is a general guide as to what should be
9808     done (and what should NOT be done) in order to evaluate an expression
9809     involving such types, and when.  This does not cover how the semantic
9810     information is encoded by GNAT as this is covered separatly.  For the
9811     document used as the reference for the GNAT encoding, see exp_dbug.ads
9812     in the GNAT sources.
9813 
9814     Ideally, we should embed each part of this description next to its
9815     associated code.  Unfortunately, the amount of code is so vast right
9816     now that it's hard to see whether the code handling a particular
9817     situation might be duplicated or not.  One day, when the code is
9818     cleaned up, this guide might become redundant with the comments
9819     inserted in the code, and we might want to remove it.
9820 
9821     2. ``Fixing'' an Entity, the Simple Case:
9822     -----------------------------------------
9823 
9824     When evaluating Ada expressions, the tricky issue is that they may
9825     reference entities whose type contents and size are not statically
9826     known.  Consider for instance a variant record:
9827 
9828        type Rec (Empty : Boolean := True) is record
9829           case Empty is
9830              when True => null;
9831              when False => Value : Integer;
9832           end case;
9833        end record;
9834        Yes : Rec := (Empty => False, Value => 1);
9835        No  : Rec := (empty => True);
9836 
9837     The size and contents of that record depends on the value of the
9838     descriminant (Rec.Empty).  At this point, neither the debugging
9839     information nor the associated type structure in GDB are able to
9840     express such dynamic types.  So what the debugger does is to create
9841     "fixed" versions of the type that applies to the specific object.
9842     We also informally refer to this opperation as "fixing" an object,
9843     which means creating its associated fixed type.
9844 
9845     Example: when printing the value of variable "Yes" above, its fixed
9846     type would look like this:
9847 
9848        type Rec is record
9849           Empty : Boolean;
9850           Value : Integer;
9851        end record;
9852 
9853     On the other hand, if we printed the value of "No", its fixed type
9854     would become:
9855 
9856        type Rec is record
9857           Empty : Boolean;
9858        end record;
9859 
9860     Things become a little more complicated when trying to fix an entity
9861     with a dynamic type that directly contains another dynamic type,
9862     such as an array of variant records, for instance.  There are
9863     two possible cases: Arrays, and records.
9864 
9865     3. ``Fixing'' Arrays:
9866     ---------------------
9867 
9868     The type structure in GDB describes an array in terms of its bounds,
9869     and the type of its elements.  By design, all elements in the array
9870     have the same type and we cannot represent an array of variant elements
9871     using the current type structure in GDB.  When fixing an array,
9872     we cannot fix the array element, as we would potentially need one
9873     fixed type per element of the array.  As a result, the best we can do
9874     when fixing an array is to produce an array whose bounds and size
9875     are correct (allowing us to read it from memory), but without having
9876     touched its element type.  Fixing each element will be done later,
9877     when (if) necessary.
9878 
9879     Arrays are a little simpler to handle than records, because the same
9880     amount of memory is allocated for each element of the array, even if
9881     the amount of space actually used by each element differs from element
9882     to element.  Consider for instance the following array of type Rec:
9883 
9884        type Rec_Array is array (1 .. 2) of Rec;
9885 
9886     The actual amount of memory occupied by each element might be different
9887     from element to element, depending on the value of their discriminant.
9888     But the amount of space reserved for each element in the array remains
9889     fixed regardless.  So we simply need to compute that size using
9890     the debugging information available, from which we can then determine
9891     the array size (we multiply the number of elements of the array by
9892     the size of each element).
9893 
9894     The simplest case is when we have an array of a constrained element
9895     type. For instance, consider the following type declarations:
9896 
9897         type Bounded_String (Max_Size : Integer) is
9898            Length : Integer;
9899            Buffer : String (1 .. Max_Size);
9900         end record;
9901         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9902 
9903     In this case, the compiler describes the array as an array of
9904     variable-size elements (identified by its XVS suffix) for which
9905     the size can be read in the parallel XVZ variable.
9906 
9907     In the case of an array of an unconstrained element type, the compiler
9908     wraps the array element inside a private PAD type.  This type should not
9909     be shown to the user, and must be "unwrap"'ed before printing.  Note
9910     that we also use the adjective "aligner" in our code to designate
9911     these wrapper types.
9912 
9913     In some cases, the size allocated for each element is statically
9914     known.  In that case, the PAD type already has the correct size,
9915     and the array element should remain unfixed.
9916 
9917     But there are cases when this size is not statically known.
9918     For instance, assuming that "Five" is an integer variable:
9919 
9920         type Dynamic is array (1 .. Five) of Integer;
9921         type Wrapper (Has_Length : Boolean := False) is record
9922            Data : Dynamic;
9923            case Has_Length is
9924               when True => Length : Integer;
9925               when False => null;
9926            end case;
9927         end record;
9928         type Wrapper_Array is array (1 .. 2) of Wrapper;
9929 
9930         Hello : Wrapper_Array := (others => (Has_Length => True,
9931                                              Data => (others => 17),
9932                                              Length => 1));
9933 
9934 
9935     The debugging info would describe variable Hello as being an
9936     array of a PAD type.  The size of that PAD type is not statically
9937     known, but can be determined using a parallel XVZ variable.
9938     In that case, a copy of the PAD type with the correct size should
9939     be used for the fixed array.
9940 
9941     3. ``Fixing'' record type objects:
9942     ----------------------------------
9943 
9944     Things are slightly different from arrays in the case of dynamic
9945     record types.  In this case, in order to compute the associated
9946     fixed type, we need to determine the size and offset of each of
9947     its components.  This, in turn, requires us to compute the fixed
9948     type of each of these components.
9949 
9950     Consider for instance the example:
9951 
9952         type Bounded_String (Max_Size : Natural) is record
9953            Str : String (1 .. Max_Size);
9954            Length : Natural;
9955         end record;
9956         My_String : Bounded_String (Max_Size => 10);
9957 
9958     In that case, the position of field "Length" depends on the size
9959     of field Str, which itself depends on the value of the Max_Size
9960     discriminant.  In order to fix the type of variable My_String,
9961     we need to fix the type of field Str.  Therefore, fixing a variant
9962     record requires us to fix each of its components.
9963 
9964     However, if a component does not have a dynamic size, the component
9965     should not be fixed.  In particular, fields that use a PAD type
9966     should not fixed.  Here is an example where this might happen
9967     (assuming type Rec above):
9968 
9969        type Container (Big : Boolean) is record
9970           First : Rec;
9971           After : Integer;
9972           case Big is
9973              when True => Another : Integer;
9974              when False => null;
9975           end case;
9976        end record;
9977        My_Container : Container := (Big => False,
9978                                     First => (Empty => True),
9979                                     After => 42);
9980 
9981     In that example, the compiler creates a PAD type for component First,
9982     whose size is constant, and then positions the component After just
9983     right after it.  The offset of component After is therefore constant
9984     in this case.
9985 
9986     The debugger computes the position of each field based on an algorithm
9987     that uses, among other things, the actual position and size of the field
9988     preceding it.  Let's now imagine that the user is trying to print
9989     the value of My_Container.  If the type fixing was recursive, we would
9990     end up computing the offset of field After based on the size of the
9991     fixed version of field First.  And since in our example First has
9992     only one actual field, the size of the fixed type is actually smaller
9993     than the amount of space allocated to that field, and thus we would
9994     compute the wrong offset of field After.
9995 
9996     To make things more complicated, we need to watch out for dynamic
9997     components of variant records (identified by the ___XVL suffix in
9998     the component name).  Even if the target type is a PAD type, the size
9999     of that type might not be statically known.  So the PAD type needs
10000     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
10001     we might end up with the wrong size for our component.  This can be
10002     observed with the following type declarations:
10003 
10004         type Octal is new Integer range 0 .. 7;
10005         type Octal_Array is array (Positive range <>) of Octal;
10006         pragma Pack (Octal_Array);
10007 
10008         type Octal_Buffer (Size : Positive) is record
10009            Buffer : Octal_Array (1 .. Size);
10010            Length : Integer;
10011         end record;
10012 
10013     In that case, Buffer is a PAD type whose size is unset and needs
10014     to be computed by fixing the unwrapped type.
10015 
10016     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10017     ----------------------------------------------------------
10018 
10019     Lastly, when should the sub-elements of an entity that remained unfixed
10020     thus far, be actually fixed?
10021 
10022     The answer is: Only when referencing that element.  For instance
10023     when selecting one component of a record, this specific component
10024     should be fixed at that point in time.  Or when printing the value
10025     of a record, each component should be fixed before its value gets
10026     printed.  Similarly for arrays, the element of the array should be
10027     fixed when printing each element of the array, or when extracting
10028     one element out of that array.  On the other hand, fixing should
10029     not be performed on the elements when taking a slice of an array!
10030 
10031     Note that one of the side-effects of miscomputing the offset and
10032     size of each field is that we end up also miscomputing the size
10033     of the containing type.  This can have adverse results when computing
10034     the value of an entity.  GDB fetches the value of an entity based
10035     on the size of its type, and thus a wrong size causes GDB to fetch
10036     the wrong amount of memory.  In the case where the computed size is
10037     too small, GDB fetches too little data to print the value of our
10038     entiry.  Results in this case as unpredicatble, as we usually read
10039     past the buffer containing the data =:-o.  */
10040 
10041 /* Implement the evaluate_exp routine in the exp_descriptor structure
10042    for the Ada language.  */
10043 
10044 static struct value *
10045 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
10046                      int *pos, enum noside noside)
10047 {
10048   enum exp_opcode op;
10049   int tem;
10050   int pc;
10051   int preeval_pos;
10052   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10053   struct type *type;
10054   int nargs, oplen;
10055   struct value **argvec;
10056 
10057   pc = *pos;
10058   *pos += 1;
10059   op = exp->elts[pc].opcode;
10060 
10061   switch (op)
10062     {
10063     default:
10064       *pos -= 1;
10065       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10066 
10067       if (noside == EVAL_NORMAL)
10068 	arg1 = unwrap_value (arg1);
10069 
10070       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10071          then we need to perform the conversion manually, because
10072          evaluate_subexp_standard doesn't do it.  This conversion is
10073          necessary in Ada because the different kinds of float/fixed
10074          types in Ada have different representations.
10075 
10076          Similarly, we need to perform the conversion from OP_LONG
10077          ourselves.  */
10078       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10079         arg1 = ada_value_cast (expect_type, arg1, noside);
10080 
10081       return arg1;
10082 
10083     case OP_STRING:
10084       {
10085         struct value *result;
10086 
10087         *pos -= 1;
10088         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10089         /* The result type will have code OP_STRING, bashed there from
10090            OP_ARRAY.  Bash it back.  */
10091         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10092           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
10093         return result;
10094       }
10095 
10096     case UNOP_CAST:
10097       (*pos) += 2;
10098       type = exp->elts[pc + 1].type;
10099       arg1 = evaluate_subexp (type, exp, pos, noside);
10100       if (noside == EVAL_SKIP)
10101         goto nosideret;
10102       arg1 = ada_value_cast (type, arg1, noside);
10103       return arg1;
10104 
10105     case UNOP_QUAL:
10106       (*pos) += 2;
10107       type = exp->elts[pc + 1].type;
10108       return ada_evaluate_subexp (type, exp, pos, noside);
10109 
10110     case BINOP_ASSIGN:
10111       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10112       if (exp->elts[*pos].opcode == OP_AGGREGATE)
10113 	{
10114 	  arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10115 	  if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10116 	    return arg1;
10117 	  return ada_value_assign (arg1, arg1);
10118 	}
10119       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10120          except if the lhs of our assignment is a convenience variable.
10121          In the case of assigning to a convenience variable, the lhs
10122          should be exactly the result of the evaluation of the rhs.  */
10123       type = value_type (arg1);
10124       if (VALUE_LVAL (arg1) == lval_internalvar)
10125          type = NULL;
10126       arg2 = evaluate_subexp (type, exp, pos, noside);
10127       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10128         return arg1;
10129       if (ada_is_fixed_point_type (value_type (arg1)))
10130         arg2 = cast_to_fixed (value_type (arg1), arg2);
10131       else if (ada_is_fixed_point_type (value_type (arg2)))
10132         error
10133           (_("Fixed-point values must be assigned to fixed-point variables"));
10134       else
10135         arg2 = coerce_for_assign (value_type (arg1), arg2);
10136       return ada_value_assign (arg1, arg2);
10137 
10138     case BINOP_ADD:
10139       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10140       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10141       if (noside == EVAL_SKIP)
10142         goto nosideret;
10143       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10144         return (value_from_longest
10145                  (value_type (arg1),
10146                   value_as_long (arg1) + value_as_long (arg2)));
10147       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10148         return (value_from_longest
10149                  (value_type (arg2),
10150                   value_as_long (arg1) + value_as_long (arg2)));
10151       if ((ada_is_fixed_point_type (value_type (arg1))
10152            || ada_is_fixed_point_type (value_type (arg2)))
10153           && value_type (arg1) != value_type (arg2))
10154         error (_("Operands of fixed-point addition must have the same type"));
10155       /* Do the addition, and cast the result to the type of the first
10156          argument.  We cannot cast the result to a reference type, so if
10157          ARG1 is a reference type, find its underlying type.  */
10158       type = value_type (arg1);
10159       while (TYPE_CODE (type) == TYPE_CODE_REF)
10160         type = TYPE_TARGET_TYPE (type);
10161       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10162       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10163 
10164     case BINOP_SUB:
10165       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10166       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10167       if (noside == EVAL_SKIP)
10168         goto nosideret;
10169       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10170         return (value_from_longest
10171                  (value_type (arg1),
10172                   value_as_long (arg1) - value_as_long (arg2)));
10173       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10174         return (value_from_longest
10175                  (value_type (arg2),
10176                   value_as_long (arg1) - value_as_long (arg2)));
10177       if ((ada_is_fixed_point_type (value_type (arg1))
10178            || ada_is_fixed_point_type (value_type (arg2)))
10179           && value_type (arg1) != value_type (arg2))
10180         error (_("Operands of fixed-point subtraction "
10181 		 "must have the same type"));
10182       /* Do the substraction, and cast the result to the type of the first
10183          argument.  We cannot cast the result to a reference type, so if
10184          ARG1 is a reference type, find its underlying type.  */
10185       type = value_type (arg1);
10186       while (TYPE_CODE (type) == TYPE_CODE_REF)
10187         type = TYPE_TARGET_TYPE (type);
10188       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10189       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10190 
10191     case BINOP_MUL:
10192     case BINOP_DIV:
10193     case BINOP_REM:
10194     case BINOP_MOD:
10195       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10196       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10197       if (noside == EVAL_SKIP)
10198         goto nosideret;
10199       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10200         {
10201           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10202           return value_zero (value_type (arg1), not_lval);
10203         }
10204       else
10205         {
10206           type = builtin_type (exp->gdbarch)->builtin_double;
10207           if (ada_is_fixed_point_type (value_type (arg1)))
10208             arg1 = cast_from_fixed (type, arg1);
10209           if (ada_is_fixed_point_type (value_type (arg2)))
10210             arg2 = cast_from_fixed (type, arg2);
10211           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10212           return ada_value_binop (arg1, arg2, op);
10213         }
10214 
10215     case BINOP_EQUAL:
10216     case BINOP_NOTEQUAL:
10217       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10218       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10219       if (noside == EVAL_SKIP)
10220         goto nosideret;
10221       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10222         tem = 0;
10223       else
10224 	{
10225 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10226 	  tem = ada_value_equal (arg1, arg2);
10227 	}
10228       if (op == BINOP_NOTEQUAL)
10229         tem = !tem;
10230       type = language_bool_type (exp->language_defn, exp->gdbarch);
10231       return value_from_longest (type, (LONGEST) tem);
10232 
10233     case UNOP_NEG:
10234       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10235       if (noside == EVAL_SKIP)
10236         goto nosideret;
10237       else if (ada_is_fixed_point_type (value_type (arg1)))
10238         return value_cast (value_type (arg1), value_neg (arg1));
10239       else
10240 	{
10241 	  unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10242 	  return value_neg (arg1);
10243 	}
10244 
10245     case BINOP_LOGICAL_AND:
10246     case BINOP_LOGICAL_OR:
10247     case UNOP_LOGICAL_NOT:
10248       {
10249         struct value *val;
10250 
10251         *pos -= 1;
10252         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10253 	type = language_bool_type (exp->language_defn, exp->gdbarch);
10254         return value_cast (type, val);
10255       }
10256 
10257     case BINOP_BITWISE_AND:
10258     case BINOP_BITWISE_IOR:
10259     case BINOP_BITWISE_XOR:
10260       {
10261         struct value *val;
10262 
10263         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10264         *pos = pc;
10265         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10266 
10267         return value_cast (value_type (arg1), val);
10268       }
10269 
10270     case OP_VAR_VALUE:
10271       *pos -= 1;
10272 
10273       if (noside == EVAL_SKIP)
10274         {
10275           *pos += 4;
10276           goto nosideret;
10277         }
10278 
10279       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10280         /* Only encountered when an unresolved symbol occurs in a
10281            context other than a function call, in which case, it is
10282            invalid.  */
10283         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10284                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10285 
10286       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10287         {
10288           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10289           /* Check to see if this is a tagged type.  We also need to handle
10290              the case where the type is a reference to a tagged type, but
10291              we have to be careful to exclude pointers to tagged types.
10292              The latter should be shown as usual (as a pointer), whereas
10293              a reference should mostly be transparent to the user.  */
10294           if (ada_is_tagged_type (type, 0)
10295               || (TYPE_CODE (type) == TYPE_CODE_REF
10296                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10297 	    {
10298 	      /* Tagged types are a little special in the fact that the real
10299 		 type is dynamic and can only be determined by inspecting the
10300 		 object's tag.  This means that we need to get the object's
10301 		 value first (EVAL_NORMAL) and then extract the actual object
10302 		 type from its tag.
10303 
10304 		 Note that we cannot skip the final step where we extract
10305 		 the object type from its tag, because the EVAL_NORMAL phase
10306 		 results in dynamic components being resolved into fixed ones.
10307 		 This can cause problems when trying to print the type
10308 		 description of tagged types whose parent has a dynamic size:
10309 		 We use the type name of the "_parent" component in order
10310 		 to print the name of the ancestor type in the type description.
10311 		 If that component had a dynamic size, the resolution into
10312 		 a fixed type would result in the loss of that type name,
10313 		 thus preventing us from printing the name of the ancestor
10314 		 type in the type description.  */
10315 	      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10316 
10317 	      if (TYPE_CODE (type) != TYPE_CODE_REF)
10318 		{
10319 		  struct type *actual_type;
10320 
10321 		  actual_type = type_from_tag (ada_value_tag (arg1));
10322 		  if (actual_type == NULL)
10323 		    /* If, for some reason, we were unable to determine
10324 		       the actual type from the tag, then use the static
10325 		       approximation that we just computed as a fallback.
10326 		       This can happen if the debugging information is
10327 		       incomplete, for instance.  */
10328 		    actual_type = type;
10329 		  return value_zero (actual_type, not_lval);
10330 		}
10331 	      else
10332 		{
10333 		  /* In the case of a ref, ada_coerce_ref takes care
10334 		     of determining the actual type.  But the evaluation
10335 		     should return a ref as it should be valid to ask
10336 		     for its address; so rebuild a ref after coerce.  */
10337 		  arg1 = ada_coerce_ref (arg1);
10338 		  return value_ref (arg1);
10339 		}
10340 	    }
10341 
10342 	  /* Records and unions for which GNAT encodings have been
10343 	     generated need to be statically fixed as well.
10344 	     Otherwise, non-static fixing produces a type where
10345 	     all dynamic properties are removed, which prevents "ptype"
10346 	     from being able to completely describe the type.
10347 	     For instance, a case statement in a variant record would be
10348 	     replaced by the relevant components based on the actual
10349 	     value of the discriminants.  */
10350 	  if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10351 	       && dynamic_template_type (type) != NULL)
10352 	      || (TYPE_CODE (type) == TYPE_CODE_UNION
10353 		  && ada_find_parallel_type (type, "___XVU") != NULL))
10354 	    {
10355 	      *pos += 4;
10356 	      return value_zero (to_static_fixed_type (type), not_lval);
10357 	    }
10358         }
10359 
10360       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10361       return ada_to_fixed_value (arg1);
10362 
10363     case OP_FUNCALL:
10364       (*pos) += 2;
10365 
10366       /* Allocate arg vector, including space for the function to be
10367          called in argvec[0] and a terminating NULL.  */
10368       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10369       argvec =
10370         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10371 
10372       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10373           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10374         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10375                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10376       else
10377         {
10378           for (tem = 0; tem <= nargs; tem += 1)
10379             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10380           argvec[tem] = 0;
10381 
10382           if (noside == EVAL_SKIP)
10383             goto nosideret;
10384         }
10385 
10386       if (ada_is_constrained_packed_array_type
10387 	  (desc_base_type (value_type (argvec[0]))))
10388         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10389       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10390                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10391         /* This is a packed array that has already been fixed, and
10392 	   therefore already coerced to a simple array.  Nothing further
10393 	   to do.  */
10394         ;
10395       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10396                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10397                    && VALUE_LVAL (argvec[0]) == lval_memory))
10398         argvec[0] = value_addr (argvec[0]);
10399 
10400       type = ada_check_typedef (value_type (argvec[0]));
10401 
10402       /* Ada allows us to implicitly dereference arrays when subscripting
10403 	 them.  So, if this is an array typedef (encoding use for array
10404 	 access types encoded as fat pointers), strip it now.  */
10405       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10406 	type = ada_typedef_target_type (type);
10407 
10408       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10409         {
10410           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10411             {
10412             case TYPE_CODE_FUNC:
10413               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10414               break;
10415             case TYPE_CODE_ARRAY:
10416               break;
10417             case TYPE_CODE_STRUCT:
10418               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10419                 argvec[0] = ada_value_ind (argvec[0]);
10420               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10421               break;
10422             default:
10423               error (_("cannot subscript or call something of type `%s'"),
10424                      ada_type_name (value_type (argvec[0])));
10425               break;
10426             }
10427         }
10428 
10429       switch (TYPE_CODE (type))
10430         {
10431         case TYPE_CODE_FUNC:
10432           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10433 	    {
10434 	      struct type *rtype = TYPE_TARGET_TYPE (type);
10435 
10436 	      if (TYPE_GNU_IFUNC (type))
10437 		return allocate_value (TYPE_TARGET_TYPE (rtype));
10438 	      return allocate_value (rtype);
10439 	    }
10440           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10441 	case TYPE_CODE_INTERNAL_FUNCTION:
10442 	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
10443 	    /* We don't know anything about what the internal
10444 	       function might return, but we have to return
10445 	       something.  */
10446 	    return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10447 			       not_lval);
10448 	  else
10449 	    return call_internal_function (exp->gdbarch, exp->language_defn,
10450 					   argvec[0], nargs, argvec + 1);
10451 
10452         case TYPE_CODE_STRUCT:
10453           {
10454             int arity;
10455 
10456             arity = ada_array_arity (type);
10457             type = ada_array_element_type (type, nargs);
10458             if (type == NULL)
10459               error (_("cannot subscript or call a record"));
10460             if (arity != nargs)
10461               error (_("wrong number of subscripts; expecting %d"), arity);
10462             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10463               return value_zero (ada_aligned_type (type), lval_memory);
10464             return
10465               unwrap_value (ada_value_subscript
10466                             (argvec[0], nargs, argvec + 1));
10467           }
10468         case TYPE_CODE_ARRAY:
10469           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10470             {
10471               type = ada_array_element_type (type, nargs);
10472               if (type == NULL)
10473                 error (_("element type of array unknown"));
10474               else
10475                 return value_zero (ada_aligned_type (type), lval_memory);
10476             }
10477           return
10478             unwrap_value (ada_value_subscript
10479                           (ada_coerce_to_simple_array (argvec[0]),
10480                            nargs, argvec + 1));
10481         case TYPE_CODE_PTR:     /* Pointer to array */
10482           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10483             {
10484 	      type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10485               type = ada_array_element_type (type, nargs);
10486               if (type == NULL)
10487                 error (_("element type of array unknown"));
10488               else
10489                 return value_zero (ada_aligned_type (type), lval_memory);
10490             }
10491           return
10492             unwrap_value (ada_value_ptr_subscript (argvec[0],
10493 						   nargs, argvec + 1));
10494 
10495         default:
10496           error (_("Attempt to index or call something other than an "
10497 		   "array or function"));
10498         }
10499 
10500     case TERNOP_SLICE:
10501       {
10502         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10503         struct value *low_bound_val =
10504           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10505         struct value *high_bound_val =
10506           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10507         LONGEST low_bound;
10508         LONGEST high_bound;
10509 
10510         low_bound_val = coerce_ref (low_bound_val);
10511         high_bound_val = coerce_ref (high_bound_val);
10512         low_bound = pos_atr (low_bound_val);
10513         high_bound = pos_atr (high_bound_val);
10514 
10515         if (noside == EVAL_SKIP)
10516           goto nosideret;
10517 
10518         /* If this is a reference to an aligner type, then remove all
10519            the aligners.  */
10520         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10521             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10522           TYPE_TARGET_TYPE (value_type (array)) =
10523             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10524 
10525         if (ada_is_constrained_packed_array_type (value_type (array)))
10526           error (_("cannot slice a packed array"));
10527 
10528         /* If this is a reference to an array or an array lvalue,
10529            convert to a pointer.  */
10530         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10531             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10532                 && VALUE_LVAL (array) == lval_memory))
10533           array = value_addr (array);
10534 
10535         if (noside == EVAL_AVOID_SIDE_EFFECTS
10536             && ada_is_array_descriptor_type (ada_check_typedef
10537                                              (value_type (array))))
10538           return empty_array (ada_type_of_array (array, 0), low_bound);
10539 
10540         array = ada_coerce_to_simple_array_ptr (array);
10541 
10542         /* If we have more than one level of pointer indirection,
10543            dereference the value until we get only one level.  */
10544         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10545                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10546                      == TYPE_CODE_PTR))
10547           array = value_ind (array);
10548 
10549         /* Make sure we really do have an array type before going further,
10550            to avoid a SEGV when trying to get the index type or the target
10551            type later down the road if the debug info generated by
10552            the compiler is incorrect or incomplete.  */
10553         if (!ada_is_simple_array_type (value_type (array)))
10554           error (_("cannot take slice of non-array"));
10555 
10556         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10557             == TYPE_CODE_PTR)
10558           {
10559             struct type *type0 = ada_check_typedef (value_type (array));
10560 
10561             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10562               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10563             else
10564               {
10565                 struct type *arr_type0 =
10566                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10567 
10568                 return ada_value_slice_from_ptr (array, arr_type0,
10569                                                  longest_to_int (low_bound),
10570                                                  longest_to_int (high_bound));
10571               }
10572           }
10573         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10574           return array;
10575         else if (high_bound < low_bound)
10576           return empty_array (value_type (array), low_bound);
10577         else
10578           return ada_value_slice (array, longest_to_int (low_bound),
10579 				  longest_to_int (high_bound));
10580       }
10581 
10582     case UNOP_IN_RANGE:
10583       (*pos) += 2;
10584       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10585       type = check_typedef (exp->elts[pc + 1].type);
10586 
10587       if (noside == EVAL_SKIP)
10588         goto nosideret;
10589 
10590       switch (TYPE_CODE (type))
10591         {
10592         default:
10593           lim_warning (_("Membership test incompletely implemented; "
10594 			 "always returns true"));
10595 	  type = language_bool_type (exp->language_defn, exp->gdbarch);
10596 	  return value_from_longest (type, (LONGEST) 1);
10597 
10598         case TYPE_CODE_RANGE:
10599 	  arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10600 	  arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10601 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10602 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10603 	  type = language_bool_type (exp->language_defn, exp->gdbarch);
10604 	  return
10605 	    value_from_longest (type,
10606                                 (value_less (arg1, arg3)
10607                                  || value_equal (arg1, arg3))
10608                                 && (value_less (arg2, arg1)
10609                                     || value_equal (arg2, arg1)));
10610         }
10611 
10612     case BINOP_IN_BOUNDS:
10613       (*pos) += 2;
10614       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10615       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10616 
10617       if (noside == EVAL_SKIP)
10618         goto nosideret;
10619 
10620       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10621 	{
10622 	  type = language_bool_type (exp->language_defn, exp->gdbarch);
10623 	  return value_zero (type, not_lval);
10624 	}
10625 
10626       tem = longest_to_int (exp->elts[pc + 1].longconst);
10627 
10628       type = ada_index_type (value_type (arg2), tem, "range");
10629       if (!type)
10630 	type = value_type (arg1);
10631 
10632       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10633       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10634 
10635       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10636       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10637       type = language_bool_type (exp->language_defn, exp->gdbarch);
10638       return
10639         value_from_longest (type,
10640                             (value_less (arg1, arg3)
10641                              || value_equal (arg1, arg3))
10642                             && (value_less (arg2, arg1)
10643                                 || value_equal (arg2, arg1)));
10644 
10645     case TERNOP_IN_RANGE:
10646       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10647       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10648       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10649 
10650       if (noside == EVAL_SKIP)
10651         goto nosideret;
10652 
10653       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10654       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10655       type = language_bool_type (exp->language_defn, exp->gdbarch);
10656       return
10657         value_from_longest (type,
10658                             (value_less (arg1, arg3)
10659                              || value_equal (arg1, arg3))
10660                             && (value_less (arg2, arg1)
10661                                 || value_equal (arg2, arg1)));
10662 
10663     case OP_ATR_FIRST:
10664     case OP_ATR_LAST:
10665     case OP_ATR_LENGTH:
10666       {
10667         struct type *type_arg;
10668 
10669         if (exp->elts[*pos].opcode == OP_TYPE)
10670           {
10671             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10672             arg1 = NULL;
10673             type_arg = check_typedef (exp->elts[pc + 2].type);
10674           }
10675         else
10676           {
10677             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10678             type_arg = NULL;
10679           }
10680 
10681         if (exp->elts[*pos].opcode != OP_LONG)
10682           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10683         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10684         *pos += 4;
10685 
10686         if (noside == EVAL_SKIP)
10687           goto nosideret;
10688 
10689         if (type_arg == NULL)
10690           {
10691             arg1 = ada_coerce_ref (arg1);
10692 
10693             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10694               arg1 = ada_coerce_to_simple_array (arg1);
10695 
10696             if (op == OP_ATR_LENGTH)
10697 	      type = builtin_type (exp->gdbarch)->builtin_int;
10698 	    else
10699 	      {
10700 		type = ada_index_type (value_type (arg1), tem,
10701 				       ada_attribute_name (op));
10702 		if (type == NULL)
10703 		  type = builtin_type (exp->gdbarch)->builtin_int;
10704 	      }
10705 
10706             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10707               return allocate_value (type);
10708 
10709             switch (op)
10710               {
10711               default:          /* Should never happen.  */
10712                 error (_("unexpected attribute encountered"));
10713               case OP_ATR_FIRST:
10714                 return value_from_longest
10715 			(type, ada_array_bound (arg1, tem, 0));
10716               case OP_ATR_LAST:
10717                 return value_from_longest
10718 			(type, ada_array_bound (arg1, tem, 1));
10719               case OP_ATR_LENGTH:
10720                 return value_from_longest
10721 			(type, ada_array_length (arg1, tem));
10722               }
10723           }
10724         else if (discrete_type_p (type_arg))
10725           {
10726             struct type *range_type;
10727             const char *name = ada_type_name (type_arg);
10728 
10729             range_type = NULL;
10730             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10731               range_type = to_fixed_range_type (type_arg, NULL);
10732             if (range_type == NULL)
10733               range_type = type_arg;
10734             switch (op)
10735               {
10736               default:
10737                 error (_("unexpected attribute encountered"));
10738               case OP_ATR_FIRST:
10739 		return value_from_longest
10740 		  (range_type, ada_discrete_type_low_bound (range_type));
10741               case OP_ATR_LAST:
10742                 return value_from_longest
10743 		  (range_type, ada_discrete_type_high_bound (range_type));
10744               case OP_ATR_LENGTH:
10745                 error (_("the 'length attribute applies only to array types"));
10746               }
10747           }
10748         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10749           error (_("unimplemented type attribute"));
10750         else
10751           {
10752             LONGEST low, high;
10753 
10754             if (ada_is_constrained_packed_array_type (type_arg))
10755               type_arg = decode_constrained_packed_array_type (type_arg);
10756 
10757 	    if (op == OP_ATR_LENGTH)
10758 	      type = builtin_type (exp->gdbarch)->builtin_int;
10759 	    else
10760 	      {
10761 		type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10762 		if (type == NULL)
10763 		  type = builtin_type (exp->gdbarch)->builtin_int;
10764 	      }
10765 
10766             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10767               return allocate_value (type);
10768 
10769             switch (op)
10770               {
10771               default:
10772                 error (_("unexpected attribute encountered"));
10773               case OP_ATR_FIRST:
10774                 low = ada_array_bound_from_type (type_arg, tem, 0);
10775                 return value_from_longest (type, low);
10776               case OP_ATR_LAST:
10777                 high = ada_array_bound_from_type (type_arg, tem, 1);
10778                 return value_from_longest (type, high);
10779               case OP_ATR_LENGTH:
10780                 low = ada_array_bound_from_type (type_arg, tem, 0);
10781                 high = ada_array_bound_from_type (type_arg, tem, 1);
10782                 return value_from_longest (type, high - low + 1);
10783               }
10784           }
10785       }
10786 
10787     case OP_ATR_TAG:
10788       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10789       if (noside == EVAL_SKIP)
10790         goto nosideret;
10791 
10792       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10793         return value_zero (ada_tag_type (arg1), not_lval);
10794 
10795       return ada_value_tag (arg1);
10796 
10797     case OP_ATR_MIN:
10798     case OP_ATR_MAX:
10799       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10800       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10801       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10802       if (noside == EVAL_SKIP)
10803         goto nosideret;
10804       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10805         return value_zero (value_type (arg1), not_lval);
10806       else
10807 	{
10808 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10809 	  return value_binop (arg1, arg2,
10810 			      op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10811 	}
10812 
10813     case OP_ATR_MODULUS:
10814       {
10815         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10816 
10817         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10818         if (noside == EVAL_SKIP)
10819           goto nosideret;
10820 
10821         if (!ada_is_modular_type (type_arg))
10822           error (_("'modulus must be applied to modular type"));
10823 
10824         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10825                                    ada_modulus (type_arg));
10826       }
10827 
10828 
10829     case OP_ATR_POS:
10830       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10831       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10832       if (noside == EVAL_SKIP)
10833         goto nosideret;
10834       type = builtin_type (exp->gdbarch)->builtin_int;
10835       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10836 	return value_zero (type, not_lval);
10837       else
10838 	return value_pos_atr (type, arg1);
10839 
10840     case OP_ATR_SIZE:
10841       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10842       type = value_type (arg1);
10843 
10844       /* If the argument is a reference, then dereference its type, since
10845          the user is really asking for the size of the actual object,
10846          not the size of the pointer.  */
10847       if (TYPE_CODE (type) == TYPE_CODE_REF)
10848         type = TYPE_TARGET_TYPE (type);
10849 
10850       if (noside == EVAL_SKIP)
10851         goto nosideret;
10852       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10853         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10854       else
10855         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10856                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10857 
10858     case OP_ATR_VAL:
10859       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10860       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10861       type = exp->elts[pc + 2].type;
10862       if (noside == EVAL_SKIP)
10863         goto nosideret;
10864       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10865         return value_zero (type, not_lval);
10866       else
10867         return value_val_atr (type, arg1);
10868 
10869     case BINOP_EXP:
10870       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10871       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10872       if (noside == EVAL_SKIP)
10873         goto nosideret;
10874       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10875         return value_zero (value_type (arg1), not_lval);
10876       else
10877 	{
10878 	  /* For integer exponentiation operations,
10879 	     only promote the first argument.  */
10880 	  if (is_integral_type (value_type (arg2)))
10881 	    unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10882 	  else
10883 	    binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10884 
10885 	  return value_binop (arg1, arg2, op);
10886 	}
10887 
10888     case UNOP_PLUS:
10889       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10890       if (noside == EVAL_SKIP)
10891         goto nosideret;
10892       else
10893         return arg1;
10894 
10895     case UNOP_ABS:
10896       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10897       if (noside == EVAL_SKIP)
10898         goto nosideret;
10899       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10900       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10901         return value_neg (arg1);
10902       else
10903         return arg1;
10904 
10905     case UNOP_IND:
10906       preeval_pos = *pos;
10907       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10908       if (noside == EVAL_SKIP)
10909         goto nosideret;
10910       type = ada_check_typedef (value_type (arg1));
10911       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10912         {
10913           if (ada_is_array_descriptor_type (type))
10914             /* GDB allows dereferencing GNAT array descriptors.  */
10915             {
10916               struct type *arrType = ada_type_of_array (arg1, 0);
10917 
10918               if (arrType == NULL)
10919                 error (_("Attempt to dereference null array pointer."));
10920               return value_at_lazy (arrType, 0);
10921             }
10922           else if (TYPE_CODE (type) == TYPE_CODE_PTR
10923                    || TYPE_CODE (type) == TYPE_CODE_REF
10924                    /* In C you can dereference an array to get the 1st elt.  */
10925                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10926             {
10927             /* As mentioned in the OP_VAR_VALUE case, tagged types can
10928                only be determined by inspecting the object's tag.
10929                This means that we need to evaluate completely the
10930                expression in order to get its type.  */
10931 
10932 	      if ((TYPE_CODE (type) == TYPE_CODE_REF
10933 		   || TYPE_CODE (type) == TYPE_CODE_PTR)
10934 		  && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10935 		{
10936 		  arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10937 					  EVAL_NORMAL);
10938 		  type = value_type (ada_value_ind (arg1));
10939 		}
10940 	      else
10941 		{
10942 		  type = to_static_fixed_type
10943 		    (ada_aligned_type
10944 		     (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10945 		}
10946 	      ada_ensure_varsize_limit (type);
10947               return value_zero (type, lval_memory);
10948             }
10949           else if (TYPE_CODE (type) == TYPE_CODE_INT)
10950 	    {
10951 	      /* GDB allows dereferencing an int.  */
10952 	      if (expect_type == NULL)
10953 		return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10954 				   lval_memory);
10955 	      else
10956 		{
10957 		  expect_type =
10958 		    to_static_fixed_type (ada_aligned_type (expect_type));
10959 		  return value_zero (expect_type, lval_memory);
10960 		}
10961 	    }
10962           else
10963             error (_("Attempt to take contents of a non-pointer value."));
10964         }
10965       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
10966       type = ada_check_typedef (value_type (arg1));
10967 
10968       if (TYPE_CODE (type) == TYPE_CODE_INT)
10969           /* GDB allows dereferencing an int.  If we were given
10970              the expect_type, then use that as the target type.
10971              Otherwise, assume that the target type is an int.  */
10972         {
10973           if (expect_type != NULL)
10974 	    return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10975 					      arg1));
10976 	  else
10977 	    return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10978 				  (CORE_ADDR) value_as_address (arg1));
10979         }
10980 
10981       if (ada_is_array_descriptor_type (type))
10982         /* GDB allows dereferencing GNAT array descriptors.  */
10983         return ada_coerce_to_simple_array (arg1);
10984       else
10985         return ada_value_ind (arg1);
10986 
10987     case STRUCTOP_STRUCT:
10988       tem = longest_to_int (exp->elts[pc + 1].longconst);
10989       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10990       preeval_pos = *pos;
10991       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10992       if (noside == EVAL_SKIP)
10993         goto nosideret;
10994       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10995         {
10996           struct type *type1 = value_type (arg1);
10997 
10998           if (ada_is_tagged_type (type1, 1))
10999             {
11000               type = ada_lookup_struct_elt_type (type1,
11001                                                  &exp->elts[pc + 2].string,
11002                                                  1, 1, NULL);
11003 
11004 	      /* If the field is not found, check if it exists in the
11005 		 extension of this object's type. This means that we
11006 		 need to evaluate completely the expression.  */
11007 
11008               if (type == NULL)
11009 		{
11010 		  arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11011 					  EVAL_NORMAL);
11012 		  arg1 = ada_value_struct_elt (arg1,
11013 					       &exp->elts[pc + 2].string,
11014 					       0);
11015 		  arg1 = unwrap_value (arg1);
11016 		  type = value_type (ada_to_fixed_value (arg1));
11017 		}
11018             }
11019           else
11020             type =
11021               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11022                                           0, NULL);
11023 
11024           return value_zero (ada_aligned_type (type), lval_memory);
11025         }
11026       else
11027         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11028         arg1 = unwrap_value (arg1);
11029         return ada_to_fixed_value (arg1);
11030 
11031     case OP_TYPE:
11032       /* The value is not supposed to be used.  This is here to make it
11033          easier to accommodate expressions that contain types.  */
11034       (*pos) += 2;
11035       if (noside == EVAL_SKIP)
11036         goto nosideret;
11037       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11038         return allocate_value (exp->elts[pc + 1].type);
11039       else
11040         error (_("Attempt to use a type name as an expression"));
11041 
11042     case OP_AGGREGATE:
11043     case OP_CHOICES:
11044     case OP_OTHERS:
11045     case OP_DISCRETE_RANGE:
11046     case OP_POSITIONAL:
11047     case OP_NAME:
11048       if (noside == EVAL_NORMAL)
11049 	switch (op)
11050 	  {
11051 	  case OP_NAME:
11052 	    error (_("Undefined name, ambiguous name, or renaming used in "
11053 		     "component association: %s."), &exp->elts[pc+2].string);
11054 	  case OP_AGGREGATE:
11055 	    error (_("Aggregates only allowed on the right of an assignment"));
11056 	  default:
11057 	    internal_error (__FILE__, __LINE__,
11058 			    _("aggregate apparently mangled"));
11059 	  }
11060 
11061       ada_forward_operator_length (exp, pc, &oplen, &nargs);
11062       *pos += oplen - 1;
11063       for (tem = 0; tem < nargs; tem += 1)
11064 	ada_evaluate_subexp (NULL, exp, pos, noside);
11065       goto nosideret;
11066     }
11067 
11068 nosideret:
11069   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
11070 }
11071 
11072 
11073                                 /* Fixed point */
11074 
11075 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
11076    type name that encodes the 'small and 'delta information.
11077    Otherwise, return NULL.  */
11078 
11079 static const char *
11080 fixed_type_info (struct type *type)
11081 {
11082   const char *name = ada_type_name (type);
11083   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11084 
11085   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11086     {
11087       const char *tail = strstr (name, "___XF_");
11088 
11089       if (tail == NULL)
11090         return NULL;
11091       else
11092         return tail + 5;
11093     }
11094   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11095     return fixed_type_info (TYPE_TARGET_TYPE (type));
11096   else
11097     return NULL;
11098 }
11099 
11100 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
11101 
11102 int
11103 ada_is_fixed_point_type (struct type *type)
11104 {
11105   return fixed_type_info (type) != NULL;
11106 }
11107 
11108 /* Return non-zero iff TYPE represents a System.Address type.  */
11109 
11110 int
11111 ada_is_system_address_type (struct type *type)
11112 {
11113   return (TYPE_NAME (type)
11114           && strcmp (TYPE_NAME (type), "system__address") == 0);
11115 }
11116 
11117 /* Assuming that TYPE is the representation of an Ada fixed-point
11118    type, return its delta, or -1 if the type is malformed and the
11119    delta cannot be determined.  */
11120 
11121 DOUBLEST
11122 ada_delta (struct type *type)
11123 {
11124   const char *encoding = fixed_type_info (type);
11125   DOUBLEST num, den;
11126 
11127   /* Strictly speaking, num and den are encoded as integer.  However,
11128      they may not fit into a long, and they will have to be converted
11129      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11130   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11131 	      &num, &den) < 2)
11132     return -1.0;
11133   else
11134     return num / den;
11135 }
11136 
11137 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
11138    factor ('SMALL value) associated with the type.  */
11139 
11140 static DOUBLEST
11141 scaling_factor (struct type *type)
11142 {
11143   const char *encoding = fixed_type_info (type);
11144   DOUBLEST num0, den0, num1, den1;
11145   int n;
11146 
11147   /* Strictly speaking, num's and den's are encoded as integer.  However,
11148      they may not fit into a long, and they will have to be converted
11149      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11150   n = sscanf (encoding,
11151 	      "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11152 	      "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11153 	      &num0, &den0, &num1, &den1);
11154 
11155   if (n < 2)
11156     return 1.0;
11157   else if (n == 4)
11158     return num1 / den1;
11159   else
11160     return num0 / den0;
11161 }
11162 
11163 
11164 /* Assuming that X is the representation of a value of fixed-point
11165    type TYPE, return its floating-point equivalent.  */
11166 
11167 DOUBLEST
11168 ada_fixed_to_float (struct type *type, LONGEST x)
11169 {
11170   return (DOUBLEST) x *scaling_factor (type);
11171 }
11172 
11173 /* The representation of a fixed-point value of type TYPE
11174    corresponding to the value X.  */
11175 
11176 LONGEST
11177 ada_float_to_fixed (struct type *type, DOUBLEST x)
11178 {
11179   return (LONGEST) (x / scaling_factor (type) + 0.5);
11180 }
11181 
11182 
11183 
11184                                 /* Range types */
11185 
11186 /* Scan STR beginning at position K for a discriminant name, and
11187    return the value of that discriminant field of DVAL in *PX.  If
11188    PNEW_K is not null, put the position of the character beyond the
11189    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11190    not alter *PX and *PNEW_K if unsuccessful.  */
11191 
11192 static int
11193 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
11194                     int *pnew_k)
11195 {
11196   static char *bound_buffer = NULL;
11197   static size_t bound_buffer_len = 0;
11198   char *bound;
11199   char *pend;
11200   struct value *bound_val;
11201 
11202   if (dval == NULL || str == NULL || str[k] == '\0')
11203     return 0;
11204 
11205   pend = strstr (str + k, "__");
11206   if (pend == NULL)
11207     {
11208       bound = str + k;
11209       k += strlen (bound);
11210     }
11211   else
11212     {
11213       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
11214       bound = bound_buffer;
11215       strncpy (bound_buffer, str + k, pend - (str + k));
11216       bound[pend - (str + k)] = '\0';
11217       k = pend - str;
11218     }
11219 
11220   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11221   if (bound_val == NULL)
11222     return 0;
11223 
11224   *px = value_as_long (bound_val);
11225   if (pnew_k != NULL)
11226     *pnew_k = k;
11227   return 1;
11228 }
11229 
11230 /* Value of variable named NAME in the current environment.  If
11231    no such variable found, then if ERR_MSG is null, returns 0, and
11232    otherwise causes an error with message ERR_MSG.  */
11233 
11234 static struct value *
11235 get_var_value (char *name, char *err_msg)
11236 {
11237   struct ada_symbol_info *syms;
11238   int nsyms;
11239 
11240   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11241                                   &syms);
11242 
11243   if (nsyms != 1)
11244     {
11245       if (err_msg == NULL)
11246         return 0;
11247       else
11248         error (("%s"), err_msg);
11249     }
11250 
11251   return value_of_variable (syms[0].sym, syms[0].block);
11252 }
11253 
11254 /* Value of integer variable named NAME in the current environment.  If
11255    no such variable found, returns 0, and sets *FLAG to 0.  If
11256    successful, sets *FLAG to 1.  */
11257 
11258 LONGEST
11259 get_int_var_value (char *name, int *flag)
11260 {
11261   struct value *var_val = get_var_value (name, 0);
11262 
11263   if (var_val == 0)
11264     {
11265       if (flag != NULL)
11266         *flag = 0;
11267       return 0;
11268     }
11269   else
11270     {
11271       if (flag != NULL)
11272         *flag = 1;
11273       return value_as_long (var_val);
11274     }
11275 }
11276 
11277 
11278 /* Return a range type whose base type is that of the range type named
11279    NAME in the current environment, and whose bounds are calculated
11280    from NAME according to the GNAT range encoding conventions.
11281    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11282    corresponding range type from debug information; fall back to using it
11283    if symbol lookup fails.  If a new type must be created, allocate it
11284    like ORIG_TYPE was.  The bounds information, in general, is encoded
11285    in NAME, the base type given in the named range type.  */
11286 
11287 static struct type *
11288 to_fixed_range_type (struct type *raw_type, struct value *dval)
11289 {
11290   const char *name;
11291   struct type *base_type;
11292   char *subtype_info;
11293 
11294   gdb_assert (raw_type != NULL);
11295   gdb_assert (TYPE_NAME (raw_type) != NULL);
11296 
11297   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11298     base_type = TYPE_TARGET_TYPE (raw_type);
11299   else
11300     base_type = raw_type;
11301 
11302   name = TYPE_NAME (raw_type);
11303   subtype_info = strstr (name, "___XD");
11304   if (subtype_info == NULL)
11305     {
11306       LONGEST L = ada_discrete_type_low_bound (raw_type);
11307       LONGEST U = ada_discrete_type_high_bound (raw_type);
11308 
11309       if (L < INT_MIN || U > INT_MAX)
11310 	return raw_type;
11311       else
11312 	return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11313 					 L, U);
11314     }
11315   else
11316     {
11317       static char *name_buf = NULL;
11318       static size_t name_len = 0;
11319       int prefix_len = subtype_info - name;
11320       LONGEST L, U;
11321       struct type *type;
11322       char *bounds_str;
11323       int n;
11324 
11325       GROW_VECT (name_buf, name_len, prefix_len + 5);
11326       strncpy (name_buf, name, prefix_len);
11327       name_buf[prefix_len] = '\0';
11328 
11329       subtype_info += 5;
11330       bounds_str = strchr (subtype_info, '_');
11331       n = 1;
11332 
11333       if (*subtype_info == 'L')
11334         {
11335           if (!ada_scan_number (bounds_str, n, &L, &n)
11336               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11337             return raw_type;
11338           if (bounds_str[n] == '_')
11339             n += 2;
11340           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11341             n += 1;
11342           subtype_info += 1;
11343         }
11344       else
11345         {
11346           int ok;
11347 
11348           strcpy (name_buf + prefix_len, "___L");
11349           L = get_int_var_value (name_buf, &ok);
11350           if (!ok)
11351             {
11352               lim_warning (_("Unknown lower bound, using 1."));
11353               L = 1;
11354             }
11355         }
11356 
11357       if (*subtype_info == 'U')
11358         {
11359           if (!ada_scan_number (bounds_str, n, &U, &n)
11360               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11361             return raw_type;
11362         }
11363       else
11364         {
11365           int ok;
11366 
11367           strcpy (name_buf + prefix_len, "___U");
11368           U = get_int_var_value (name_buf, &ok);
11369           if (!ok)
11370             {
11371               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11372               U = L;
11373             }
11374         }
11375 
11376       type = create_static_range_type (alloc_type_copy (raw_type),
11377 				       base_type, L, U);
11378       TYPE_NAME (type) = name;
11379       return type;
11380     }
11381 }
11382 
11383 /* True iff NAME is the name of a range type.  */
11384 
11385 int
11386 ada_is_range_type_name (const char *name)
11387 {
11388   return (name != NULL && strstr (name, "___XD"));
11389 }
11390 
11391 
11392                                 /* Modular types */
11393 
11394 /* True iff TYPE is an Ada modular type.  */
11395 
11396 int
11397 ada_is_modular_type (struct type *type)
11398 {
11399   struct type *subranged_type = get_base_type (type);
11400 
11401   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11402           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11403           && TYPE_UNSIGNED (subranged_type));
11404 }
11405 
11406 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11407 
11408 ULONGEST
11409 ada_modulus (struct type *type)
11410 {
11411   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11412 }
11413 
11414 
11415 /* Ada exception catchpoint support:
11416    ---------------------------------
11417 
11418    We support 3 kinds of exception catchpoints:
11419      . catchpoints on Ada exceptions
11420      . catchpoints on unhandled Ada exceptions
11421      . catchpoints on failed assertions
11422 
11423    Exceptions raised during failed assertions, or unhandled exceptions
11424    could perfectly be caught with the general catchpoint on Ada exceptions.
11425    However, we can easily differentiate these two special cases, and having
11426    the option to distinguish these two cases from the rest can be useful
11427    to zero-in on certain situations.
11428 
11429    Exception catchpoints are a specialized form of breakpoint,
11430    since they rely on inserting breakpoints inside known routines
11431    of the GNAT runtime.  The implementation therefore uses a standard
11432    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11433    of breakpoint_ops.
11434 
11435    Support in the runtime for exception catchpoints have been changed
11436    a few times already, and these changes affect the implementation
11437    of these catchpoints.  In order to be able to support several
11438    variants of the runtime, we use a sniffer that will determine
11439    the runtime variant used by the program being debugged.  */
11440 
11441 /* Ada's standard exceptions.
11442 
11443    The Ada 83 standard also defined Numeric_Error.  But there so many
11444    situations where it was unclear from the Ada 83 Reference Manual
11445    (RM) whether Constraint_Error or Numeric_Error should be raised,
11446    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11447    Interpretation saying that anytime the RM says that Numeric_Error
11448    should be raised, the implementation may raise Constraint_Error.
11449    Ada 95 went one step further and pretty much removed Numeric_Error
11450    from the list of standard exceptions (it made it a renaming of
11451    Constraint_Error, to help preserve compatibility when compiling
11452    an Ada83 compiler). As such, we do not include Numeric_Error from
11453    this list of standard exceptions.  */
11454 
11455 static char *standard_exc[] = {
11456   "constraint_error",
11457   "program_error",
11458   "storage_error",
11459   "tasking_error"
11460 };
11461 
11462 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11463 
11464 /* A structure that describes how to support exception catchpoints
11465    for a given executable.  */
11466 
11467 struct exception_support_info
11468 {
11469    /* The name of the symbol to break on in order to insert
11470       a catchpoint on exceptions.  */
11471    const char *catch_exception_sym;
11472 
11473    /* The name of the symbol to break on in order to insert
11474       a catchpoint on unhandled exceptions.  */
11475    const char *catch_exception_unhandled_sym;
11476 
11477    /* The name of the symbol to break on in order to insert
11478       a catchpoint on failed assertions.  */
11479    const char *catch_assert_sym;
11480 
11481    /* Assuming that the inferior just triggered an unhandled exception
11482       catchpoint, this function is responsible for returning the address
11483       in inferior memory where the name of that exception is stored.
11484       Return zero if the address could not be computed.  */
11485    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11486 };
11487 
11488 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11489 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11490 
11491 /* The following exception support info structure describes how to
11492    implement exception catchpoints with the latest version of the
11493    Ada runtime (as of 2007-03-06).  */
11494 
11495 static const struct exception_support_info default_exception_support_info =
11496 {
11497   "__gnat_debug_raise_exception", /* catch_exception_sym */
11498   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11499   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11500   ada_unhandled_exception_name_addr
11501 };
11502 
11503 /* The following exception support info structure describes how to
11504    implement exception catchpoints with a slightly older version
11505    of the Ada runtime.  */
11506 
11507 static const struct exception_support_info exception_support_info_fallback =
11508 {
11509   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11510   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11511   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11512   ada_unhandled_exception_name_addr_from_raise
11513 };
11514 
11515 /* Return nonzero if we can detect the exception support routines
11516    described in EINFO.
11517 
11518    This function errors out if an abnormal situation is detected
11519    (for instance, if we find the exception support routines, but
11520    that support is found to be incomplete).  */
11521 
11522 static int
11523 ada_has_this_exception_support (const struct exception_support_info *einfo)
11524 {
11525   struct symbol *sym;
11526 
11527   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11528      that should be compiled with debugging information.  As a result, we
11529      expect to find that symbol in the symtabs.  */
11530 
11531   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11532   if (sym == NULL)
11533     {
11534       /* Perhaps we did not find our symbol because the Ada runtime was
11535 	 compiled without debugging info, or simply stripped of it.
11536 	 It happens on some GNU/Linux distributions for instance, where
11537 	 users have to install a separate debug package in order to get
11538 	 the runtime's debugging info.  In that situation, let the user
11539 	 know why we cannot insert an Ada exception catchpoint.
11540 
11541 	 Note: Just for the purpose of inserting our Ada exception
11542 	 catchpoint, we could rely purely on the associated minimal symbol.
11543 	 But we would be operating in degraded mode anyway, since we are
11544 	 still lacking the debugging info needed later on to extract
11545 	 the name of the exception being raised (this name is printed in
11546 	 the catchpoint message, and is also used when trying to catch
11547 	 a specific exception).  We do not handle this case for now.  */
11548       struct bound_minimal_symbol msym
11549 	= lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11550 
11551       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11552 	error (_("Your Ada runtime appears to be missing some debugging "
11553 		 "information.\nCannot insert Ada exception catchpoint "
11554 		 "in this configuration."));
11555 
11556       return 0;
11557     }
11558 
11559   /* Make sure that the symbol we found corresponds to a function.  */
11560 
11561   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11562     error (_("Symbol \"%s\" is not a function (class = %d)"),
11563            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11564 
11565   return 1;
11566 }
11567 
11568 /* Inspect the Ada runtime and determine which exception info structure
11569    should be used to provide support for exception catchpoints.
11570 
11571    This function will always set the per-inferior exception_info,
11572    or raise an error.  */
11573 
11574 static void
11575 ada_exception_support_info_sniffer (void)
11576 {
11577   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11578 
11579   /* If the exception info is already known, then no need to recompute it.  */
11580   if (data->exception_info != NULL)
11581     return;
11582 
11583   /* Check the latest (default) exception support info.  */
11584   if (ada_has_this_exception_support (&default_exception_support_info))
11585     {
11586       data->exception_info = &default_exception_support_info;
11587       return;
11588     }
11589 
11590   /* Try our fallback exception suport info.  */
11591   if (ada_has_this_exception_support (&exception_support_info_fallback))
11592     {
11593       data->exception_info = &exception_support_info_fallback;
11594       return;
11595     }
11596 
11597   /* Sometimes, it is normal for us to not be able to find the routine
11598      we are looking for.  This happens when the program is linked with
11599      the shared version of the GNAT runtime, and the program has not been
11600      started yet.  Inform the user of these two possible causes if
11601      applicable.  */
11602 
11603   if (ada_update_initial_language (language_unknown) != language_ada)
11604     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11605 
11606   /* If the symbol does not exist, then check that the program is
11607      already started, to make sure that shared libraries have been
11608      loaded.  If it is not started, this may mean that the symbol is
11609      in a shared library.  */
11610 
11611   if (ptid_get_pid (inferior_ptid) == 0)
11612     error (_("Unable to insert catchpoint. Try to start the program first."));
11613 
11614   /* At this point, we know that we are debugging an Ada program and
11615      that the inferior has been started, but we still are not able to
11616      find the run-time symbols.  That can mean that we are in
11617      configurable run time mode, or that a-except as been optimized
11618      out by the linker...  In any case, at this point it is not worth
11619      supporting this feature.  */
11620 
11621   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11622 }
11623 
11624 /* True iff FRAME is very likely to be that of a function that is
11625    part of the runtime system.  This is all very heuristic, but is
11626    intended to be used as advice as to what frames are uninteresting
11627    to most users.  */
11628 
11629 static int
11630 is_known_support_routine (struct frame_info *frame)
11631 {
11632   struct symtab_and_line sal;
11633   char *func_name;
11634   enum language func_lang;
11635   int i;
11636   const char *fullname;
11637 
11638   /* If this code does not have any debugging information (no symtab),
11639      This cannot be any user code.  */
11640 
11641   find_frame_sal (frame, &sal);
11642   if (sal.symtab == NULL)
11643     return 1;
11644 
11645   /* If there is a symtab, but the associated source file cannot be
11646      located, then assume this is not user code:  Selecting a frame
11647      for which we cannot display the code would not be very helpful
11648      for the user.  This should also take care of case such as VxWorks
11649      where the kernel has some debugging info provided for a few units.  */
11650 
11651   fullname = symtab_to_fullname (sal.symtab);
11652   if (access (fullname, R_OK) != 0)
11653     return 1;
11654 
11655   /* Check the unit filename againt the Ada runtime file naming.
11656      We also check the name of the objfile against the name of some
11657      known system libraries that sometimes come with debugging info
11658      too.  */
11659 
11660   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11661     {
11662       re_comp (known_runtime_file_name_patterns[i]);
11663       if (re_exec (lbasename (sal.symtab->filename)))
11664         return 1;
11665       if (SYMTAB_OBJFILE (sal.symtab) != NULL
11666           && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11667         return 1;
11668     }
11669 
11670   /* Check whether the function is a GNAT-generated entity.  */
11671 
11672   find_frame_funname (frame, &func_name, &func_lang, NULL);
11673   if (func_name == NULL)
11674     return 1;
11675 
11676   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11677     {
11678       re_comp (known_auxiliary_function_name_patterns[i]);
11679       if (re_exec (func_name))
11680 	{
11681 	  xfree (func_name);
11682 	  return 1;
11683 	}
11684     }
11685 
11686   xfree (func_name);
11687   return 0;
11688 }
11689 
11690 /* Find the first frame that contains debugging information and that is not
11691    part of the Ada run-time, starting from FI and moving upward.  */
11692 
11693 void
11694 ada_find_printable_frame (struct frame_info *fi)
11695 {
11696   for (; fi != NULL; fi = get_prev_frame (fi))
11697     {
11698       if (!is_known_support_routine (fi))
11699         {
11700           select_frame (fi);
11701           break;
11702         }
11703     }
11704 
11705 }
11706 
11707 /* Assuming that the inferior just triggered an unhandled exception
11708    catchpoint, return the address in inferior memory where the name
11709    of the exception is stored.
11710 
11711    Return zero if the address could not be computed.  */
11712 
11713 static CORE_ADDR
11714 ada_unhandled_exception_name_addr (void)
11715 {
11716   return parse_and_eval_address ("e.full_name");
11717 }
11718 
11719 /* Same as ada_unhandled_exception_name_addr, except that this function
11720    should be used when the inferior uses an older version of the runtime,
11721    where the exception name needs to be extracted from a specific frame
11722    several frames up in the callstack.  */
11723 
11724 static CORE_ADDR
11725 ada_unhandled_exception_name_addr_from_raise (void)
11726 {
11727   int frame_level;
11728   struct frame_info *fi;
11729   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11730   struct cleanup *old_chain;
11731 
11732   /* To determine the name of this exception, we need to select
11733      the frame corresponding to RAISE_SYM_NAME.  This frame is
11734      at least 3 levels up, so we simply skip the first 3 frames
11735      without checking the name of their associated function.  */
11736   fi = get_current_frame ();
11737   for (frame_level = 0; frame_level < 3; frame_level += 1)
11738     if (fi != NULL)
11739       fi = get_prev_frame (fi);
11740 
11741   old_chain = make_cleanup (null_cleanup, NULL);
11742   while (fi != NULL)
11743     {
11744       char *func_name;
11745       enum language func_lang;
11746 
11747       find_frame_funname (fi, &func_name, &func_lang, NULL);
11748       if (func_name != NULL)
11749 	{
11750 	  make_cleanup (xfree, func_name);
11751 
11752           if (strcmp (func_name,
11753 		      data->exception_info->catch_exception_sym) == 0)
11754 	    break; /* We found the frame we were looking for...  */
11755 	  fi = get_prev_frame (fi);
11756 	}
11757     }
11758   do_cleanups (old_chain);
11759 
11760   if (fi == NULL)
11761     return 0;
11762 
11763   select_frame (fi);
11764   return parse_and_eval_address ("id.full_name");
11765 }
11766 
11767 /* Assuming the inferior just triggered an Ada exception catchpoint
11768    (of any type), return the address in inferior memory where the name
11769    of the exception is stored, if applicable.
11770 
11771    Return zero if the address could not be computed, or if not relevant.  */
11772 
11773 static CORE_ADDR
11774 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11775                            struct breakpoint *b)
11776 {
11777   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11778 
11779   switch (ex)
11780     {
11781       case ada_catch_exception:
11782         return (parse_and_eval_address ("e.full_name"));
11783         break;
11784 
11785       case ada_catch_exception_unhandled:
11786         return data->exception_info->unhandled_exception_name_addr ();
11787         break;
11788 
11789       case ada_catch_assert:
11790         return 0;  /* Exception name is not relevant in this case.  */
11791         break;
11792 
11793       default:
11794         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11795         break;
11796     }
11797 
11798   return 0; /* Should never be reached.  */
11799 }
11800 
11801 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11802    any error that ada_exception_name_addr_1 might cause to be thrown.
11803    When an error is intercepted, a warning with the error message is printed,
11804    and zero is returned.  */
11805 
11806 static CORE_ADDR
11807 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11808                          struct breakpoint *b)
11809 {
11810   volatile struct gdb_exception e;
11811   CORE_ADDR result = 0;
11812 
11813   TRY_CATCH (e, RETURN_MASK_ERROR)
11814     {
11815       result = ada_exception_name_addr_1 (ex, b);
11816     }
11817 
11818   if (e.reason < 0)
11819     {
11820       warning (_("failed to get exception name: %s"), e.message);
11821       return 0;
11822     }
11823 
11824   return result;
11825 }
11826 
11827 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11828 
11829 /* Ada catchpoints.
11830 
11831    In the case of catchpoints on Ada exceptions, the catchpoint will
11832    stop the target on every exception the program throws.  When a user
11833    specifies the name of a specific exception, we translate this
11834    request into a condition expression (in text form), and then parse
11835    it into an expression stored in each of the catchpoint's locations.
11836    We then use this condition to check whether the exception that was
11837    raised is the one the user is interested in.  If not, then the
11838    target is resumed again.  We store the name of the requested
11839    exception, in order to be able to re-set the condition expression
11840    when symbols change.  */
11841 
11842 /* An instance of this type is used to represent an Ada catchpoint
11843    breakpoint location.  It includes a "struct bp_location" as a kind
11844    of base class; users downcast to "struct bp_location *" when
11845    needed.  */
11846 
11847 struct ada_catchpoint_location
11848 {
11849   /* The base class.  */
11850   struct bp_location base;
11851 
11852   /* The condition that checks whether the exception that was raised
11853      is the specific exception the user specified on catchpoint
11854      creation.  */
11855   struct expression *excep_cond_expr;
11856 };
11857 
11858 /* Implement the DTOR method in the bp_location_ops structure for all
11859    Ada exception catchpoint kinds.  */
11860 
11861 static void
11862 ada_catchpoint_location_dtor (struct bp_location *bl)
11863 {
11864   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11865 
11866   xfree (al->excep_cond_expr);
11867 }
11868 
11869 /* The vtable to be used in Ada catchpoint locations.  */
11870 
11871 static const struct bp_location_ops ada_catchpoint_location_ops =
11872 {
11873   ada_catchpoint_location_dtor
11874 };
11875 
11876 /* An instance of this type is used to represent an Ada catchpoint.
11877    It includes a "struct breakpoint" as a kind of base class; users
11878    downcast to "struct breakpoint *" when needed.  */
11879 
11880 struct ada_catchpoint
11881 {
11882   /* The base class.  */
11883   struct breakpoint base;
11884 
11885   /* The name of the specific exception the user specified.  */
11886   char *excep_string;
11887 };
11888 
11889 /* Parse the exception condition string in the context of each of the
11890    catchpoint's locations, and store them for later evaluation.  */
11891 
11892 static void
11893 create_excep_cond_exprs (struct ada_catchpoint *c)
11894 {
11895   struct cleanup *old_chain;
11896   struct bp_location *bl;
11897   char *cond_string;
11898 
11899   /* Nothing to do if there's no specific exception to catch.  */
11900   if (c->excep_string == NULL)
11901     return;
11902 
11903   /* Same if there are no locations... */
11904   if (c->base.loc == NULL)
11905     return;
11906 
11907   /* Compute the condition expression in text form, from the specific
11908      expection we want to catch.  */
11909   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11910   old_chain = make_cleanup (xfree, cond_string);
11911 
11912   /* Iterate over all the catchpoint's locations, and parse an
11913      expression for each.  */
11914   for (bl = c->base.loc; bl != NULL; bl = bl->next)
11915     {
11916       struct ada_catchpoint_location *ada_loc
11917 	= (struct ada_catchpoint_location *) bl;
11918       struct expression *exp = NULL;
11919 
11920       if (!bl->shlib_disabled)
11921 	{
11922 	  volatile struct gdb_exception e;
11923 	  const char *s;
11924 
11925 	  s = cond_string;
11926 	  TRY_CATCH (e, RETURN_MASK_ERROR)
11927 	    {
11928 	      exp = parse_exp_1 (&s, bl->address,
11929 				 block_for_pc (bl->address), 0);
11930 	    }
11931 	  if (e.reason < 0)
11932 	    {
11933 	      warning (_("failed to reevaluate internal exception condition "
11934 			 "for catchpoint %d: %s"),
11935 		       c->base.number, e.message);
11936 	      /* There is a bug in GCC on sparc-solaris when building with
11937 		 optimization which causes EXP to change unexpectedly
11938 		 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11939 		 The problem should be fixed starting with GCC 4.9.
11940 		 In the meantime, work around it by forcing EXP back
11941 		 to NULL.  */
11942 	      exp = NULL;
11943 	    }
11944 	}
11945 
11946       ada_loc->excep_cond_expr = exp;
11947     }
11948 
11949   do_cleanups (old_chain);
11950 }
11951 
11952 /* Implement the DTOR method in the breakpoint_ops structure for all
11953    exception catchpoint kinds.  */
11954 
11955 static void
11956 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11957 {
11958   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11959 
11960   xfree (c->excep_string);
11961 
11962   bkpt_breakpoint_ops.dtor (b);
11963 }
11964 
11965 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11966    structure for all exception catchpoint kinds.  */
11967 
11968 static struct bp_location *
11969 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
11970 			     struct breakpoint *self)
11971 {
11972   struct ada_catchpoint_location *loc;
11973 
11974   loc = XNEW (struct ada_catchpoint_location);
11975   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11976   loc->excep_cond_expr = NULL;
11977   return &loc->base;
11978 }
11979 
11980 /* Implement the RE_SET method in the breakpoint_ops structure for all
11981    exception catchpoint kinds.  */
11982 
11983 static void
11984 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11985 {
11986   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11987 
11988   /* Call the base class's method.  This updates the catchpoint's
11989      locations.  */
11990   bkpt_breakpoint_ops.re_set (b);
11991 
11992   /* Reparse the exception conditional expressions.  One for each
11993      location.  */
11994   create_excep_cond_exprs (c);
11995 }
11996 
11997 /* Returns true if we should stop for this breakpoint hit.  If the
11998    user specified a specific exception, we only want to cause a stop
11999    if the program thrown that exception.  */
12000 
12001 static int
12002 should_stop_exception (const struct bp_location *bl)
12003 {
12004   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12005   const struct ada_catchpoint_location *ada_loc
12006     = (const struct ada_catchpoint_location *) bl;
12007   volatile struct gdb_exception ex;
12008   int stop;
12009 
12010   /* With no specific exception, should always stop.  */
12011   if (c->excep_string == NULL)
12012     return 1;
12013 
12014   if (ada_loc->excep_cond_expr == NULL)
12015     {
12016       /* We will have a NULL expression if back when we were creating
12017 	 the expressions, this location's had failed to parse.  */
12018       return 1;
12019     }
12020 
12021   stop = 1;
12022   TRY_CATCH (ex, RETURN_MASK_ALL)
12023     {
12024       struct value *mark;
12025 
12026       mark = value_mark ();
12027       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
12028       value_free_to_mark (mark);
12029     }
12030   if (ex.reason < 0)
12031     exception_fprintf (gdb_stderr, ex,
12032 		       _("Error in testing exception condition:\n"));
12033   return stop;
12034 }
12035 
12036 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
12037    for all exception catchpoint kinds.  */
12038 
12039 static void
12040 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12041 {
12042   bs->stop = should_stop_exception (bs->bp_location_at);
12043 }
12044 
12045 /* Implement the PRINT_IT method in the breakpoint_ops structure
12046    for all exception catchpoint kinds.  */
12047 
12048 static enum print_stop_action
12049 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12050 {
12051   struct ui_out *uiout = current_uiout;
12052   struct breakpoint *b = bs->breakpoint_at;
12053 
12054   annotate_catchpoint (b->number);
12055 
12056   if (ui_out_is_mi_like_p (uiout))
12057     {
12058       ui_out_field_string (uiout, "reason",
12059 			   async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12060       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
12061     }
12062 
12063   ui_out_text (uiout,
12064                b->disposition == disp_del ? "\nTemporary catchpoint "
12065 	                                  : "\nCatchpoint ");
12066   ui_out_field_int (uiout, "bkptno", b->number);
12067   ui_out_text (uiout, ", ");
12068 
12069   switch (ex)
12070     {
12071       case ada_catch_exception:
12072       case ada_catch_exception_unhandled:
12073 	{
12074 	  const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12075 	  char exception_name[256];
12076 
12077 	  if (addr != 0)
12078 	    {
12079 	      read_memory (addr, (gdb_byte *) exception_name,
12080 			   sizeof (exception_name) - 1);
12081 	      exception_name [sizeof (exception_name) - 1] = '\0';
12082 	    }
12083 	  else
12084 	    {
12085 	      /* For some reason, we were unable to read the exception
12086 		 name.  This could happen if the Runtime was compiled
12087 		 without debugging info, for instance.  In that case,
12088 		 just replace the exception name by the generic string
12089 		 "exception" - it will read as "an exception" in the
12090 		 notification we are about to print.  */
12091 	      memcpy (exception_name, "exception", sizeof ("exception"));
12092 	    }
12093 	  /* In the case of unhandled exception breakpoints, we print
12094 	     the exception name as "unhandled EXCEPTION_NAME", to make
12095 	     it clearer to the user which kind of catchpoint just got
12096 	     hit.  We used ui_out_text to make sure that this extra
12097 	     info does not pollute the exception name in the MI case.  */
12098 	  if (ex == ada_catch_exception_unhandled)
12099 	    ui_out_text (uiout, "unhandled ");
12100 	  ui_out_field_string (uiout, "exception-name", exception_name);
12101 	}
12102 	break;
12103       case ada_catch_assert:
12104 	/* In this case, the name of the exception is not really
12105 	   important.  Just print "failed assertion" to make it clearer
12106 	   that his program just hit an assertion-failure catchpoint.
12107 	   We used ui_out_text because this info does not belong in
12108 	   the MI output.  */
12109 	ui_out_text (uiout, "failed assertion");
12110 	break;
12111     }
12112   ui_out_text (uiout, " at ");
12113   ada_find_printable_frame (get_current_frame ());
12114 
12115   return PRINT_SRC_AND_LOC;
12116 }
12117 
12118 /* Implement the PRINT_ONE method in the breakpoint_ops structure
12119    for all exception catchpoint kinds.  */
12120 
12121 static void
12122 print_one_exception (enum ada_exception_catchpoint_kind ex,
12123                      struct breakpoint *b, struct bp_location **last_loc)
12124 {
12125   struct ui_out *uiout = current_uiout;
12126   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12127   struct value_print_options opts;
12128 
12129   get_user_print_options (&opts);
12130   if (opts.addressprint)
12131     {
12132       annotate_field (4);
12133       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
12134     }
12135 
12136   annotate_field (5);
12137   *last_loc = b->loc;
12138   switch (ex)
12139     {
12140       case ada_catch_exception:
12141         if (c->excep_string != NULL)
12142           {
12143             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12144 
12145             ui_out_field_string (uiout, "what", msg);
12146             xfree (msg);
12147           }
12148         else
12149           ui_out_field_string (uiout, "what", "all Ada exceptions");
12150 
12151         break;
12152 
12153       case ada_catch_exception_unhandled:
12154         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12155         break;
12156 
12157       case ada_catch_assert:
12158         ui_out_field_string (uiout, "what", "failed Ada assertions");
12159         break;
12160 
12161       default:
12162         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12163         break;
12164     }
12165 }
12166 
12167 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12168    for all exception catchpoint kinds.  */
12169 
12170 static void
12171 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12172                          struct breakpoint *b)
12173 {
12174   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12175   struct ui_out *uiout = current_uiout;
12176 
12177   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12178                                                  : _("Catchpoint "));
12179   ui_out_field_int (uiout, "bkptno", b->number);
12180   ui_out_text (uiout, ": ");
12181 
12182   switch (ex)
12183     {
12184       case ada_catch_exception:
12185         if (c->excep_string != NULL)
12186 	  {
12187 	    char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12188 	    struct cleanup *old_chain = make_cleanup (xfree, info);
12189 
12190 	    ui_out_text (uiout, info);
12191 	    do_cleanups (old_chain);
12192 	  }
12193         else
12194           ui_out_text (uiout, _("all Ada exceptions"));
12195         break;
12196 
12197       case ada_catch_exception_unhandled:
12198         ui_out_text (uiout, _("unhandled Ada exceptions"));
12199         break;
12200 
12201       case ada_catch_assert:
12202         ui_out_text (uiout, _("failed Ada assertions"));
12203         break;
12204 
12205       default:
12206         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12207         break;
12208     }
12209 }
12210 
12211 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12212    for all exception catchpoint kinds.  */
12213 
12214 static void
12215 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12216 			  struct breakpoint *b, struct ui_file *fp)
12217 {
12218   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12219 
12220   switch (ex)
12221     {
12222       case ada_catch_exception:
12223 	fprintf_filtered (fp, "catch exception");
12224 	if (c->excep_string != NULL)
12225 	  fprintf_filtered (fp, " %s", c->excep_string);
12226 	break;
12227 
12228       case ada_catch_exception_unhandled:
12229 	fprintf_filtered (fp, "catch exception unhandled");
12230 	break;
12231 
12232       case ada_catch_assert:
12233 	fprintf_filtered (fp, "catch assert");
12234 	break;
12235 
12236       default:
12237 	internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12238     }
12239   print_recreate_thread (b, fp);
12240 }
12241 
12242 /* Virtual table for "catch exception" breakpoints.  */
12243 
12244 static void
12245 dtor_catch_exception (struct breakpoint *b)
12246 {
12247   dtor_exception (ada_catch_exception, b);
12248 }
12249 
12250 static struct bp_location *
12251 allocate_location_catch_exception (struct breakpoint *self)
12252 {
12253   return allocate_location_exception (ada_catch_exception, self);
12254 }
12255 
12256 static void
12257 re_set_catch_exception (struct breakpoint *b)
12258 {
12259   re_set_exception (ada_catch_exception, b);
12260 }
12261 
12262 static void
12263 check_status_catch_exception (bpstat bs)
12264 {
12265   check_status_exception (ada_catch_exception, bs);
12266 }
12267 
12268 static enum print_stop_action
12269 print_it_catch_exception (bpstat bs)
12270 {
12271   return print_it_exception (ada_catch_exception, bs);
12272 }
12273 
12274 static void
12275 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12276 {
12277   print_one_exception (ada_catch_exception, b, last_loc);
12278 }
12279 
12280 static void
12281 print_mention_catch_exception (struct breakpoint *b)
12282 {
12283   print_mention_exception (ada_catch_exception, b);
12284 }
12285 
12286 static void
12287 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12288 {
12289   print_recreate_exception (ada_catch_exception, b, fp);
12290 }
12291 
12292 static struct breakpoint_ops catch_exception_breakpoint_ops;
12293 
12294 /* Virtual table for "catch exception unhandled" breakpoints.  */
12295 
12296 static void
12297 dtor_catch_exception_unhandled (struct breakpoint *b)
12298 {
12299   dtor_exception (ada_catch_exception_unhandled, b);
12300 }
12301 
12302 static struct bp_location *
12303 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12304 {
12305   return allocate_location_exception (ada_catch_exception_unhandled, self);
12306 }
12307 
12308 static void
12309 re_set_catch_exception_unhandled (struct breakpoint *b)
12310 {
12311   re_set_exception (ada_catch_exception_unhandled, b);
12312 }
12313 
12314 static void
12315 check_status_catch_exception_unhandled (bpstat bs)
12316 {
12317   check_status_exception (ada_catch_exception_unhandled, bs);
12318 }
12319 
12320 static enum print_stop_action
12321 print_it_catch_exception_unhandled (bpstat bs)
12322 {
12323   return print_it_exception (ada_catch_exception_unhandled, bs);
12324 }
12325 
12326 static void
12327 print_one_catch_exception_unhandled (struct breakpoint *b,
12328 				     struct bp_location **last_loc)
12329 {
12330   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12331 }
12332 
12333 static void
12334 print_mention_catch_exception_unhandled (struct breakpoint *b)
12335 {
12336   print_mention_exception (ada_catch_exception_unhandled, b);
12337 }
12338 
12339 static void
12340 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12341 					  struct ui_file *fp)
12342 {
12343   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12344 }
12345 
12346 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12347 
12348 /* Virtual table for "catch assert" breakpoints.  */
12349 
12350 static void
12351 dtor_catch_assert (struct breakpoint *b)
12352 {
12353   dtor_exception (ada_catch_assert, b);
12354 }
12355 
12356 static struct bp_location *
12357 allocate_location_catch_assert (struct breakpoint *self)
12358 {
12359   return allocate_location_exception (ada_catch_assert, self);
12360 }
12361 
12362 static void
12363 re_set_catch_assert (struct breakpoint *b)
12364 {
12365   re_set_exception (ada_catch_assert, b);
12366 }
12367 
12368 static void
12369 check_status_catch_assert (bpstat bs)
12370 {
12371   check_status_exception (ada_catch_assert, bs);
12372 }
12373 
12374 static enum print_stop_action
12375 print_it_catch_assert (bpstat bs)
12376 {
12377   return print_it_exception (ada_catch_assert, bs);
12378 }
12379 
12380 static void
12381 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12382 {
12383   print_one_exception (ada_catch_assert, b, last_loc);
12384 }
12385 
12386 static void
12387 print_mention_catch_assert (struct breakpoint *b)
12388 {
12389   print_mention_exception (ada_catch_assert, b);
12390 }
12391 
12392 static void
12393 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12394 {
12395   print_recreate_exception (ada_catch_assert, b, fp);
12396 }
12397 
12398 static struct breakpoint_ops catch_assert_breakpoint_ops;
12399 
12400 /* Return a newly allocated copy of the first space-separated token
12401    in ARGSP, and then adjust ARGSP to point immediately after that
12402    token.
12403 
12404    Return NULL if ARGPS does not contain any more tokens.  */
12405 
12406 static char *
12407 ada_get_next_arg (char **argsp)
12408 {
12409   char *args = *argsp;
12410   char *end;
12411   char *result;
12412 
12413   args = skip_spaces (args);
12414   if (args[0] == '\0')
12415     return NULL; /* No more arguments.  */
12416 
12417   /* Find the end of the current argument.  */
12418 
12419   end = skip_to_space (args);
12420 
12421   /* Adjust ARGSP to point to the start of the next argument.  */
12422 
12423   *argsp = end;
12424 
12425   /* Make a copy of the current argument and return it.  */
12426 
12427   result = xmalloc (end - args + 1);
12428   strncpy (result, args, end - args);
12429   result[end - args] = '\0';
12430 
12431   return result;
12432 }
12433 
12434 /* Split the arguments specified in a "catch exception" command.
12435    Set EX to the appropriate catchpoint type.
12436    Set EXCEP_STRING to the name of the specific exception if
12437    specified by the user.
12438    If a condition is found at the end of the arguments, the condition
12439    expression is stored in COND_STRING (memory must be deallocated
12440    after use).  Otherwise COND_STRING is set to NULL.  */
12441 
12442 static void
12443 catch_ada_exception_command_split (char *args,
12444                                    enum ada_exception_catchpoint_kind *ex,
12445 				   char **excep_string,
12446 				   char **cond_string)
12447 {
12448   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12449   char *exception_name;
12450   char *cond = NULL;
12451 
12452   exception_name = ada_get_next_arg (&args);
12453   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12454     {
12455       /* This is not an exception name; this is the start of a condition
12456 	 expression for a catchpoint on all exceptions.  So, "un-get"
12457 	 this token, and set exception_name to NULL.  */
12458       xfree (exception_name);
12459       exception_name = NULL;
12460       args -= 2;
12461     }
12462   make_cleanup (xfree, exception_name);
12463 
12464   /* Check to see if we have a condition.  */
12465 
12466   args = skip_spaces (args);
12467   if (strncmp (args, "if", 2) == 0
12468       && (isspace (args[2]) || args[2] == '\0'))
12469     {
12470       args += 2;
12471       args = skip_spaces (args);
12472 
12473       if (args[0] == '\0')
12474         error (_("Condition missing after `if' keyword"));
12475       cond = xstrdup (args);
12476       make_cleanup (xfree, cond);
12477 
12478       args += strlen (args);
12479     }
12480 
12481   /* Check that we do not have any more arguments.  Anything else
12482      is unexpected.  */
12483 
12484   if (args[0] != '\0')
12485     error (_("Junk at end of expression"));
12486 
12487   discard_cleanups (old_chain);
12488 
12489   if (exception_name == NULL)
12490     {
12491       /* Catch all exceptions.  */
12492       *ex = ada_catch_exception;
12493       *excep_string = NULL;
12494     }
12495   else if (strcmp (exception_name, "unhandled") == 0)
12496     {
12497       /* Catch unhandled exceptions.  */
12498       *ex = ada_catch_exception_unhandled;
12499       *excep_string = NULL;
12500     }
12501   else
12502     {
12503       /* Catch a specific exception.  */
12504       *ex = ada_catch_exception;
12505       *excep_string = exception_name;
12506     }
12507   *cond_string = cond;
12508 }
12509 
12510 /* Return the name of the symbol on which we should break in order to
12511    implement a catchpoint of the EX kind.  */
12512 
12513 static const char *
12514 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12515 {
12516   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12517 
12518   gdb_assert (data->exception_info != NULL);
12519 
12520   switch (ex)
12521     {
12522       case ada_catch_exception:
12523         return (data->exception_info->catch_exception_sym);
12524         break;
12525       case ada_catch_exception_unhandled:
12526         return (data->exception_info->catch_exception_unhandled_sym);
12527         break;
12528       case ada_catch_assert:
12529         return (data->exception_info->catch_assert_sym);
12530         break;
12531       default:
12532         internal_error (__FILE__, __LINE__,
12533                         _("unexpected catchpoint kind (%d)"), ex);
12534     }
12535 }
12536 
12537 /* Return the breakpoint ops "virtual table" used for catchpoints
12538    of the EX kind.  */
12539 
12540 static const struct breakpoint_ops *
12541 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12542 {
12543   switch (ex)
12544     {
12545       case ada_catch_exception:
12546         return (&catch_exception_breakpoint_ops);
12547         break;
12548       case ada_catch_exception_unhandled:
12549         return (&catch_exception_unhandled_breakpoint_ops);
12550         break;
12551       case ada_catch_assert:
12552         return (&catch_assert_breakpoint_ops);
12553         break;
12554       default:
12555         internal_error (__FILE__, __LINE__,
12556                         _("unexpected catchpoint kind (%d)"), ex);
12557     }
12558 }
12559 
12560 /* Return the condition that will be used to match the current exception
12561    being raised with the exception that the user wants to catch.  This
12562    assumes that this condition is used when the inferior just triggered
12563    an exception catchpoint.
12564 
12565    The string returned is a newly allocated string that needs to be
12566    deallocated later.  */
12567 
12568 static char *
12569 ada_exception_catchpoint_cond_string (const char *excep_string)
12570 {
12571   int i;
12572 
12573   /* The standard exceptions are a special case.  They are defined in
12574      runtime units that have been compiled without debugging info; if
12575      EXCEP_STRING is the not-fully-qualified name of a standard
12576      exception (e.g. "constraint_error") then, during the evaluation
12577      of the condition expression, the symbol lookup on this name would
12578      *not* return this standard exception.  The catchpoint condition
12579      may then be set only on user-defined exceptions which have the
12580      same not-fully-qualified name (e.g. my_package.constraint_error).
12581 
12582      To avoid this unexcepted behavior, these standard exceptions are
12583      systematically prefixed by "standard".  This means that "catch
12584      exception constraint_error" is rewritten into "catch exception
12585      standard.constraint_error".
12586 
12587      If an exception named contraint_error is defined in another package of
12588      the inferior program, then the only way to specify this exception as a
12589      breakpoint condition is to use its fully-qualified named:
12590      e.g. my_package.constraint_error.  */
12591 
12592   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12593     {
12594       if (strcmp (standard_exc [i], excep_string) == 0)
12595 	{
12596           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12597                              excep_string);
12598 	}
12599     }
12600   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12601 }
12602 
12603 /* Return the symtab_and_line that should be used to insert an exception
12604    catchpoint of the TYPE kind.
12605 
12606    EXCEP_STRING should contain the name of a specific exception that
12607    the catchpoint should catch, or NULL otherwise.
12608 
12609    ADDR_STRING returns the name of the function where the real
12610    breakpoint that implements the catchpoints is set, depending on the
12611    type of catchpoint we need to create.  */
12612 
12613 static struct symtab_and_line
12614 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12615 		   char **addr_string, const struct breakpoint_ops **ops)
12616 {
12617   const char *sym_name;
12618   struct symbol *sym;
12619 
12620   /* First, find out which exception support info to use.  */
12621   ada_exception_support_info_sniffer ();
12622 
12623   /* Then lookup the function on which we will break in order to catch
12624      the Ada exceptions requested by the user.  */
12625   sym_name = ada_exception_sym_name (ex);
12626   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12627 
12628   /* We can assume that SYM is not NULL at this stage.  If the symbol
12629      did not exist, ada_exception_support_info_sniffer would have
12630      raised an exception.
12631 
12632      Also, ada_exception_support_info_sniffer should have already
12633      verified that SYM is a function symbol.  */
12634   gdb_assert (sym != NULL);
12635   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12636 
12637   /* Set ADDR_STRING.  */
12638   *addr_string = xstrdup (sym_name);
12639 
12640   /* Set OPS.  */
12641   *ops = ada_exception_breakpoint_ops (ex);
12642 
12643   return find_function_start_sal (sym, 1);
12644 }
12645 
12646 /* Create an Ada exception catchpoint.
12647 
12648    EX_KIND is the kind of exception catchpoint to be created.
12649 
12650    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12651    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12652    of the exception to which this catchpoint applies.  When not NULL,
12653    the string must be allocated on the heap, and its deallocation
12654    is no longer the responsibility of the caller.
12655 
12656    COND_STRING, if not NULL, is the catchpoint condition.  This string
12657    must be allocated on the heap, and its deallocation is no longer
12658    the responsibility of the caller.
12659 
12660    TEMPFLAG, if nonzero, means that the underlying breakpoint
12661    should be temporary.
12662 
12663    FROM_TTY is the usual argument passed to all commands implementations.  */
12664 
12665 void
12666 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12667 				 enum ada_exception_catchpoint_kind ex_kind,
12668 				 char *excep_string,
12669 				 char *cond_string,
12670 				 int tempflag,
12671 				 int disabled,
12672 				 int from_tty)
12673 {
12674   struct ada_catchpoint *c;
12675   char *addr_string = NULL;
12676   const struct breakpoint_ops *ops = NULL;
12677   struct symtab_and_line sal
12678     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12679 
12680   c = XNEW (struct ada_catchpoint);
12681   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12682 				 ops, tempflag, disabled, from_tty);
12683   c->excep_string = excep_string;
12684   create_excep_cond_exprs (c);
12685   if (cond_string != NULL)
12686     set_breakpoint_condition (&c->base, cond_string, from_tty);
12687   install_breakpoint (0, &c->base, 1);
12688 }
12689 
12690 /* Implement the "catch exception" command.  */
12691 
12692 static void
12693 catch_ada_exception_command (char *arg, int from_tty,
12694 			     struct cmd_list_element *command)
12695 {
12696   struct gdbarch *gdbarch = get_current_arch ();
12697   int tempflag;
12698   enum ada_exception_catchpoint_kind ex_kind;
12699   char *excep_string = NULL;
12700   char *cond_string = NULL;
12701 
12702   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12703 
12704   if (!arg)
12705     arg = "";
12706   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12707 				     &cond_string);
12708   create_ada_exception_catchpoint (gdbarch, ex_kind,
12709 				   excep_string, cond_string,
12710 				   tempflag, 1 /* enabled */,
12711 				   from_tty);
12712 }
12713 
12714 /* Split the arguments specified in a "catch assert" command.
12715 
12716    ARGS contains the command's arguments (or the empty string if
12717    no arguments were passed).
12718 
12719    If ARGS contains a condition, set COND_STRING to that condition
12720    (the memory needs to be deallocated after use).  */
12721 
12722 static void
12723 catch_ada_assert_command_split (char *args, char **cond_string)
12724 {
12725   args = skip_spaces (args);
12726 
12727   /* Check whether a condition was provided.  */
12728   if (strncmp (args, "if", 2) == 0
12729       && (isspace (args[2]) || args[2] == '\0'))
12730     {
12731       args += 2;
12732       args = skip_spaces (args);
12733       if (args[0] == '\0')
12734         error (_("condition missing after `if' keyword"));
12735       *cond_string = xstrdup (args);
12736     }
12737 
12738   /* Otherwise, there should be no other argument at the end of
12739      the command.  */
12740   else if (args[0] != '\0')
12741     error (_("Junk at end of arguments."));
12742 }
12743 
12744 /* Implement the "catch assert" command.  */
12745 
12746 static void
12747 catch_assert_command (char *arg, int from_tty,
12748 		      struct cmd_list_element *command)
12749 {
12750   struct gdbarch *gdbarch = get_current_arch ();
12751   int tempflag;
12752   char *cond_string = NULL;
12753 
12754   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12755 
12756   if (!arg)
12757     arg = "";
12758   catch_ada_assert_command_split (arg, &cond_string);
12759   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12760 				   NULL, cond_string,
12761 				   tempflag, 1 /* enabled */,
12762 				   from_tty);
12763 }
12764 
12765 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12766 
12767 static int
12768 ada_is_exception_sym (struct symbol *sym)
12769 {
12770   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12771 
12772   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12773           && SYMBOL_CLASS (sym) != LOC_BLOCK
12774           && SYMBOL_CLASS (sym) != LOC_CONST
12775           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12776           && type_name != NULL && strcmp (type_name, "exception") == 0);
12777 }
12778 
12779 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12780    Ada exception object.  This matches all exceptions except the ones
12781    defined by the Ada language.  */
12782 
12783 static int
12784 ada_is_non_standard_exception_sym (struct symbol *sym)
12785 {
12786   int i;
12787 
12788   if (!ada_is_exception_sym (sym))
12789     return 0;
12790 
12791   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12792     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12793       return 0;  /* A standard exception.  */
12794 
12795   /* Numeric_Error is also a standard exception, so exclude it.
12796      See the STANDARD_EXC description for more details as to why
12797      this exception is not listed in that array.  */
12798   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12799     return 0;
12800 
12801   return 1;
12802 }
12803 
12804 /* A helper function for qsort, comparing two struct ada_exc_info
12805    objects.
12806 
12807    The comparison is determined first by exception name, and then
12808    by exception address.  */
12809 
12810 static int
12811 compare_ada_exception_info (const void *a, const void *b)
12812 {
12813   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12814   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12815   int result;
12816 
12817   result = strcmp (exc_a->name, exc_b->name);
12818   if (result != 0)
12819     return result;
12820 
12821   if (exc_a->addr < exc_b->addr)
12822     return -1;
12823   if (exc_a->addr > exc_b->addr)
12824     return 1;
12825 
12826   return 0;
12827 }
12828 
12829 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12830    routine, but keeping the first SKIP elements untouched.
12831 
12832    All duplicates are also removed.  */
12833 
12834 static void
12835 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12836 				      int skip)
12837 {
12838   struct ada_exc_info *to_sort
12839     = VEC_address (ada_exc_info, *exceptions) + skip;
12840   int to_sort_len
12841     = VEC_length (ada_exc_info, *exceptions) - skip;
12842   int i, j;
12843 
12844   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12845 	 compare_ada_exception_info);
12846 
12847   for (i = 1, j = 1; i < to_sort_len; i++)
12848     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12849       to_sort[j++] = to_sort[i];
12850   to_sort_len = j;
12851   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12852 }
12853 
12854 /* A function intended as the "name_matcher" callback in the struct
12855    quick_symbol_functions' expand_symtabs_matching method.
12856 
12857    SEARCH_NAME is the symbol's search name.
12858 
12859    If USER_DATA is not NULL, it is a pointer to a regext_t object
12860    used to match the symbol (by natural name).  Otherwise, when USER_DATA
12861    is null, no filtering is performed, and all symbols are a positive
12862    match.  */
12863 
12864 static int
12865 ada_exc_search_name_matches (const char *search_name, void *user_data)
12866 {
12867   regex_t *preg = user_data;
12868 
12869   if (preg == NULL)
12870     return 1;
12871 
12872   /* In Ada, the symbol "search name" is a linkage name, whereas
12873      the regular expression used to do the matching refers to
12874      the natural name.  So match against the decoded name.  */
12875   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12876 }
12877 
12878 /* Add all exceptions defined by the Ada standard whose name match
12879    a regular expression.
12880 
12881    If PREG is not NULL, then this regexp_t object is used to
12882    perform the symbol name matching.  Otherwise, no name-based
12883    filtering is performed.
12884 
12885    EXCEPTIONS is a vector of exceptions to which matching exceptions
12886    gets pushed.  */
12887 
12888 static void
12889 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12890 {
12891   int i;
12892 
12893   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12894     {
12895       if (preg == NULL
12896 	  || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12897 	{
12898 	  struct bound_minimal_symbol msymbol
12899 	    = ada_lookup_simple_minsym (standard_exc[i]);
12900 
12901 	  if (msymbol.minsym != NULL)
12902 	    {
12903 	      struct ada_exc_info info
12904 		= {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12905 
12906 	      VEC_safe_push (ada_exc_info, *exceptions, &info);
12907 	    }
12908 	}
12909     }
12910 }
12911 
12912 /* Add all Ada exceptions defined locally and accessible from the given
12913    FRAME.
12914 
12915    If PREG is not NULL, then this regexp_t object is used to
12916    perform the symbol name matching.  Otherwise, no name-based
12917    filtering is performed.
12918 
12919    EXCEPTIONS is a vector of exceptions to which matching exceptions
12920    gets pushed.  */
12921 
12922 static void
12923 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12924 			       VEC(ada_exc_info) **exceptions)
12925 {
12926   const struct block *block = get_frame_block (frame, 0);
12927 
12928   while (block != 0)
12929     {
12930       struct block_iterator iter;
12931       struct symbol *sym;
12932 
12933       ALL_BLOCK_SYMBOLS (block, iter, sym)
12934 	{
12935 	  switch (SYMBOL_CLASS (sym))
12936 	    {
12937 	    case LOC_TYPEDEF:
12938 	    case LOC_BLOCK:
12939 	    case LOC_CONST:
12940 	      break;
12941 	    default:
12942 	      if (ada_is_exception_sym (sym))
12943 		{
12944 		  struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12945 					      SYMBOL_VALUE_ADDRESS (sym)};
12946 
12947 		  VEC_safe_push (ada_exc_info, *exceptions, &info);
12948 		}
12949 	    }
12950 	}
12951       if (BLOCK_FUNCTION (block) != NULL)
12952 	break;
12953       block = BLOCK_SUPERBLOCK (block);
12954     }
12955 }
12956 
12957 /* Add all exceptions defined globally whose name name match
12958    a regular expression, excluding standard exceptions.
12959 
12960    The reason we exclude standard exceptions is that they need
12961    to be handled separately: Standard exceptions are defined inside
12962    a runtime unit which is normally not compiled with debugging info,
12963    and thus usually do not show up in our symbol search.  However,
12964    if the unit was in fact built with debugging info, we need to
12965    exclude them because they would duplicate the entry we found
12966    during the special loop that specifically searches for those
12967    standard exceptions.
12968 
12969    If PREG is not NULL, then this regexp_t object is used to
12970    perform the symbol name matching.  Otherwise, no name-based
12971    filtering is performed.
12972 
12973    EXCEPTIONS is a vector of exceptions to which matching exceptions
12974    gets pushed.  */
12975 
12976 static void
12977 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12978 {
12979   struct objfile *objfile;
12980   struct compunit_symtab *s;
12981 
12982   expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12983 			   VARIABLES_DOMAIN, preg);
12984 
12985   ALL_COMPUNITS (objfile, s)
12986     {
12987       const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
12988       int i;
12989 
12990       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12991 	{
12992 	  struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12993 	  struct block_iterator iter;
12994 	  struct symbol *sym;
12995 
12996 	  ALL_BLOCK_SYMBOLS (b, iter, sym)
12997 	    if (ada_is_non_standard_exception_sym (sym)
12998 		&& (preg == NULL
12999 		    || regexec (preg, SYMBOL_NATURAL_NAME (sym),
13000 				0, NULL, 0) == 0))
13001 	      {
13002 		struct ada_exc_info info
13003 		  = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13004 
13005 		VEC_safe_push (ada_exc_info, *exceptions, &info);
13006 	      }
13007 	}
13008     }
13009 }
13010 
13011 /* Implements ada_exceptions_list with the regular expression passed
13012    as a regex_t, rather than a string.
13013 
13014    If not NULL, PREG is used to filter out exceptions whose names
13015    do not match.  Otherwise, all exceptions are listed.  */
13016 
13017 static VEC(ada_exc_info) *
13018 ada_exceptions_list_1 (regex_t *preg)
13019 {
13020   VEC(ada_exc_info) *result = NULL;
13021   struct cleanup *old_chain
13022     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13023   int prev_len;
13024 
13025   /* First, list the known standard exceptions.  These exceptions
13026      need to be handled separately, as they are usually defined in
13027      runtime units that have been compiled without debugging info.  */
13028 
13029   ada_add_standard_exceptions (preg, &result);
13030 
13031   /* Next, find all exceptions whose scope is local and accessible
13032      from the currently selected frame.  */
13033 
13034   if (has_stack_frames ())
13035     {
13036       prev_len = VEC_length (ada_exc_info, result);
13037       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13038 				     &result);
13039       if (VEC_length (ada_exc_info, result) > prev_len)
13040 	sort_remove_dups_ada_exceptions_list (&result, prev_len);
13041     }
13042 
13043   /* Add all exceptions whose scope is global.  */
13044 
13045   prev_len = VEC_length (ada_exc_info, result);
13046   ada_add_global_exceptions (preg, &result);
13047   if (VEC_length (ada_exc_info, result) > prev_len)
13048     sort_remove_dups_ada_exceptions_list (&result, prev_len);
13049 
13050   discard_cleanups (old_chain);
13051   return result;
13052 }
13053 
13054 /* Return a vector of ada_exc_info.
13055 
13056    If REGEXP is NULL, all exceptions are included in the result.
13057    Otherwise, it should contain a valid regular expression,
13058    and only the exceptions whose names match that regular expression
13059    are included in the result.
13060 
13061    The exceptions are sorted in the following order:
13062      - Standard exceptions (defined by the Ada language), in
13063        alphabetical order;
13064      - Exceptions only visible from the current frame, in
13065        alphabetical order;
13066      - Exceptions whose scope is global, in alphabetical order.  */
13067 
13068 VEC(ada_exc_info) *
13069 ada_exceptions_list (const char *regexp)
13070 {
13071   VEC(ada_exc_info) *result = NULL;
13072   struct cleanup *old_chain = NULL;
13073   regex_t reg;
13074 
13075   if (regexp != NULL)
13076     old_chain = compile_rx_or_error (&reg, regexp,
13077 				     _("invalid regular expression"));
13078 
13079   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
13080 
13081   if (old_chain != NULL)
13082     do_cleanups (old_chain);
13083   return result;
13084 }
13085 
13086 /* Implement the "info exceptions" command.  */
13087 
13088 static void
13089 info_exceptions_command (char *regexp, int from_tty)
13090 {
13091   VEC(ada_exc_info) *exceptions;
13092   struct cleanup *cleanup;
13093   struct gdbarch *gdbarch = get_current_arch ();
13094   int ix;
13095   struct ada_exc_info *info;
13096 
13097   exceptions = ada_exceptions_list (regexp);
13098   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13099 
13100   if (regexp != NULL)
13101     printf_filtered
13102       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13103   else
13104     printf_filtered (_("All defined Ada exceptions:\n"));
13105 
13106   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13107     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13108 
13109   do_cleanups (cleanup);
13110 }
13111 
13112                                 /* Operators */
13113 /* Information about operators given special treatment in functions
13114    below.  */
13115 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
13116 
13117 #define ADA_OPERATORS \
13118     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13119     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13120     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13121     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13122     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13123     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13124     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13125     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13126     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13127     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13128     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13129     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13130     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13131     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13132     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
13133     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13134     OP_DEFN (OP_OTHERS, 1, 1, 0) \
13135     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13136     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
13137 
13138 static void
13139 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13140 		     int *argsp)
13141 {
13142   switch (exp->elts[pc - 1].opcode)
13143     {
13144     default:
13145       operator_length_standard (exp, pc, oplenp, argsp);
13146       break;
13147 
13148 #define OP_DEFN(op, len, args, binop) \
13149     case op: *oplenp = len; *argsp = args; break;
13150       ADA_OPERATORS;
13151 #undef OP_DEFN
13152 
13153     case OP_AGGREGATE:
13154       *oplenp = 3;
13155       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13156       break;
13157 
13158     case OP_CHOICES:
13159       *oplenp = 3;
13160       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13161       break;
13162     }
13163 }
13164 
13165 /* Implementation of the exp_descriptor method operator_check.  */
13166 
13167 static int
13168 ada_operator_check (struct expression *exp, int pos,
13169 		    int (*objfile_func) (struct objfile *objfile, void *data),
13170 		    void *data)
13171 {
13172   const union exp_element *const elts = exp->elts;
13173   struct type *type = NULL;
13174 
13175   switch (elts[pos].opcode)
13176     {
13177       case UNOP_IN_RANGE:
13178       case UNOP_QUAL:
13179 	type = elts[pos + 1].type;
13180 	break;
13181 
13182       default:
13183 	return operator_check_standard (exp, pos, objfile_func, data);
13184     }
13185 
13186   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13187 
13188   if (type && TYPE_OBJFILE (type)
13189       && (*objfile_func) (TYPE_OBJFILE (type), data))
13190     return 1;
13191 
13192   return 0;
13193 }
13194 
13195 static char *
13196 ada_op_name (enum exp_opcode opcode)
13197 {
13198   switch (opcode)
13199     {
13200     default:
13201       return op_name_standard (opcode);
13202 
13203 #define OP_DEFN(op, len, args, binop) case op: return #op;
13204       ADA_OPERATORS;
13205 #undef OP_DEFN
13206 
13207     case OP_AGGREGATE:
13208       return "OP_AGGREGATE";
13209     case OP_CHOICES:
13210       return "OP_CHOICES";
13211     case OP_NAME:
13212       return "OP_NAME";
13213     }
13214 }
13215 
13216 /* As for operator_length, but assumes PC is pointing at the first
13217    element of the operator, and gives meaningful results only for the
13218    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13219 
13220 static void
13221 ada_forward_operator_length (struct expression *exp, int pc,
13222                              int *oplenp, int *argsp)
13223 {
13224   switch (exp->elts[pc].opcode)
13225     {
13226     default:
13227       *oplenp = *argsp = 0;
13228       break;
13229 
13230 #define OP_DEFN(op, len, args, binop) \
13231     case op: *oplenp = len; *argsp = args; break;
13232       ADA_OPERATORS;
13233 #undef OP_DEFN
13234 
13235     case OP_AGGREGATE:
13236       *oplenp = 3;
13237       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13238       break;
13239 
13240     case OP_CHOICES:
13241       *oplenp = 3;
13242       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13243       break;
13244 
13245     case OP_STRING:
13246     case OP_NAME:
13247       {
13248 	int len = longest_to_int (exp->elts[pc + 1].longconst);
13249 
13250 	*oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13251 	*argsp = 0;
13252 	break;
13253       }
13254     }
13255 }
13256 
13257 static int
13258 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13259 {
13260   enum exp_opcode op = exp->elts[elt].opcode;
13261   int oplen, nargs;
13262   int pc = elt;
13263   int i;
13264 
13265   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13266 
13267   switch (op)
13268     {
13269       /* Ada attributes ('Foo).  */
13270     case OP_ATR_FIRST:
13271     case OP_ATR_LAST:
13272     case OP_ATR_LENGTH:
13273     case OP_ATR_IMAGE:
13274     case OP_ATR_MAX:
13275     case OP_ATR_MIN:
13276     case OP_ATR_MODULUS:
13277     case OP_ATR_POS:
13278     case OP_ATR_SIZE:
13279     case OP_ATR_TAG:
13280     case OP_ATR_VAL:
13281       break;
13282 
13283     case UNOP_IN_RANGE:
13284     case UNOP_QUAL:
13285       /* XXX: gdb_sprint_host_address, type_sprint */
13286       fprintf_filtered (stream, _("Type @"));
13287       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13288       fprintf_filtered (stream, " (");
13289       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13290       fprintf_filtered (stream, ")");
13291       break;
13292     case BINOP_IN_BOUNDS:
13293       fprintf_filtered (stream, " (%d)",
13294 			longest_to_int (exp->elts[pc + 2].longconst));
13295       break;
13296     case TERNOP_IN_RANGE:
13297       break;
13298 
13299     case OP_AGGREGATE:
13300     case OP_OTHERS:
13301     case OP_DISCRETE_RANGE:
13302     case OP_POSITIONAL:
13303     case OP_CHOICES:
13304       break;
13305 
13306     case OP_NAME:
13307     case OP_STRING:
13308       {
13309 	char *name = &exp->elts[elt + 2].string;
13310 	int len = longest_to_int (exp->elts[elt + 1].longconst);
13311 
13312 	fprintf_filtered (stream, "Text: `%.*s'", len, name);
13313 	break;
13314       }
13315 
13316     default:
13317       return dump_subexp_body_standard (exp, stream, elt);
13318     }
13319 
13320   elt += oplen;
13321   for (i = 0; i < nargs; i += 1)
13322     elt = dump_subexp (exp, stream, elt);
13323 
13324   return elt;
13325 }
13326 
13327 /* The Ada extension of print_subexp (q.v.).  */
13328 
13329 static void
13330 ada_print_subexp (struct expression *exp, int *pos,
13331                   struct ui_file *stream, enum precedence prec)
13332 {
13333   int oplen, nargs, i;
13334   int pc = *pos;
13335   enum exp_opcode op = exp->elts[pc].opcode;
13336 
13337   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13338 
13339   *pos += oplen;
13340   switch (op)
13341     {
13342     default:
13343       *pos -= oplen;
13344       print_subexp_standard (exp, pos, stream, prec);
13345       return;
13346 
13347     case OP_VAR_VALUE:
13348       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13349       return;
13350 
13351     case BINOP_IN_BOUNDS:
13352       /* XXX: sprint_subexp */
13353       print_subexp (exp, pos, stream, PREC_SUFFIX);
13354       fputs_filtered (" in ", stream);
13355       print_subexp (exp, pos, stream, PREC_SUFFIX);
13356       fputs_filtered ("'range", stream);
13357       if (exp->elts[pc + 1].longconst > 1)
13358         fprintf_filtered (stream, "(%ld)",
13359                           (long) exp->elts[pc + 1].longconst);
13360       return;
13361 
13362     case TERNOP_IN_RANGE:
13363       if (prec >= PREC_EQUAL)
13364         fputs_filtered ("(", stream);
13365       /* XXX: sprint_subexp */
13366       print_subexp (exp, pos, stream, PREC_SUFFIX);
13367       fputs_filtered (" in ", stream);
13368       print_subexp (exp, pos, stream, PREC_EQUAL);
13369       fputs_filtered (" .. ", stream);
13370       print_subexp (exp, pos, stream, PREC_EQUAL);
13371       if (prec >= PREC_EQUAL)
13372         fputs_filtered (")", stream);
13373       return;
13374 
13375     case OP_ATR_FIRST:
13376     case OP_ATR_LAST:
13377     case OP_ATR_LENGTH:
13378     case OP_ATR_IMAGE:
13379     case OP_ATR_MAX:
13380     case OP_ATR_MIN:
13381     case OP_ATR_MODULUS:
13382     case OP_ATR_POS:
13383     case OP_ATR_SIZE:
13384     case OP_ATR_TAG:
13385     case OP_ATR_VAL:
13386       if (exp->elts[*pos].opcode == OP_TYPE)
13387         {
13388           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13389             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13390 			   &type_print_raw_options);
13391           *pos += 3;
13392         }
13393       else
13394         print_subexp (exp, pos, stream, PREC_SUFFIX);
13395       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13396       if (nargs > 1)
13397         {
13398           int tem;
13399 
13400           for (tem = 1; tem < nargs; tem += 1)
13401             {
13402               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13403               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13404             }
13405           fputs_filtered (")", stream);
13406         }
13407       return;
13408 
13409     case UNOP_QUAL:
13410       type_print (exp->elts[pc + 1].type, "", stream, 0);
13411       fputs_filtered ("'(", stream);
13412       print_subexp (exp, pos, stream, PREC_PREFIX);
13413       fputs_filtered (")", stream);
13414       return;
13415 
13416     case UNOP_IN_RANGE:
13417       /* XXX: sprint_subexp */
13418       print_subexp (exp, pos, stream, PREC_SUFFIX);
13419       fputs_filtered (" in ", stream);
13420       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13421 		     &type_print_raw_options);
13422       return;
13423 
13424     case OP_DISCRETE_RANGE:
13425       print_subexp (exp, pos, stream, PREC_SUFFIX);
13426       fputs_filtered ("..", stream);
13427       print_subexp (exp, pos, stream, PREC_SUFFIX);
13428       return;
13429 
13430     case OP_OTHERS:
13431       fputs_filtered ("others => ", stream);
13432       print_subexp (exp, pos, stream, PREC_SUFFIX);
13433       return;
13434 
13435     case OP_CHOICES:
13436       for (i = 0; i < nargs-1; i += 1)
13437 	{
13438 	  if (i > 0)
13439 	    fputs_filtered ("|", stream);
13440 	  print_subexp (exp, pos, stream, PREC_SUFFIX);
13441 	}
13442       fputs_filtered (" => ", stream);
13443       print_subexp (exp, pos, stream, PREC_SUFFIX);
13444       return;
13445 
13446     case OP_POSITIONAL:
13447       print_subexp (exp, pos, stream, PREC_SUFFIX);
13448       return;
13449 
13450     case OP_AGGREGATE:
13451       fputs_filtered ("(", stream);
13452       for (i = 0; i < nargs; i += 1)
13453 	{
13454 	  if (i > 0)
13455 	    fputs_filtered (", ", stream);
13456 	  print_subexp (exp, pos, stream, PREC_SUFFIX);
13457 	}
13458       fputs_filtered (")", stream);
13459       return;
13460     }
13461 }
13462 
13463 /* Table mapping opcodes into strings for printing operators
13464    and precedences of the operators.  */
13465 
13466 static const struct op_print ada_op_print_tab[] = {
13467   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13468   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13469   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13470   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13471   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13472   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13473   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13474   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13475   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13476   {">=", BINOP_GEQ, PREC_ORDER, 0},
13477   {">", BINOP_GTR, PREC_ORDER, 0},
13478   {"<", BINOP_LESS, PREC_ORDER, 0},
13479   {">>", BINOP_RSH, PREC_SHIFT, 0},
13480   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13481   {"+", BINOP_ADD, PREC_ADD, 0},
13482   {"-", BINOP_SUB, PREC_ADD, 0},
13483   {"&", BINOP_CONCAT, PREC_ADD, 0},
13484   {"*", BINOP_MUL, PREC_MUL, 0},
13485   {"/", BINOP_DIV, PREC_MUL, 0},
13486   {"rem", BINOP_REM, PREC_MUL, 0},
13487   {"mod", BINOP_MOD, PREC_MUL, 0},
13488   {"**", BINOP_EXP, PREC_REPEAT, 0},
13489   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13490   {"-", UNOP_NEG, PREC_PREFIX, 0},
13491   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13492   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13493   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13494   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13495   {".all", UNOP_IND, PREC_SUFFIX, 1},
13496   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13497   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13498   {NULL, 0, 0, 0}
13499 };
13500 
13501 enum ada_primitive_types {
13502   ada_primitive_type_int,
13503   ada_primitive_type_long,
13504   ada_primitive_type_short,
13505   ada_primitive_type_char,
13506   ada_primitive_type_float,
13507   ada_primitive_type_double,
13508   ada_primitive_type_void,
13509   ada_primitive_type_long_long,
13510   ada_primitive_type_long_double,
13511   ada_primitive_type_natural,
13512   ada_primitive_type_positive,
13513   ada_primitive_type_system_address,
13514   nr_ada_primitive_types
13515 };
13516 
13517 static void
13518 ada_language_arch_info (struct gdbarch *gdbarch,
13519 			struct language_arch_info *lai)
13520 {
13521   const struct builtin_type *builtin = builtin_type (gdbarch);
13522 
13523   lai->primitive_type_vector
13524     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13525 			      struct type *);
13526 
13527   lai->primitive_type_vector [ada_primitive_type_int]
13528     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13529 			 0, "integer");
13530   lai->primitive_type_vector [ada_primitive_type_long]
13531     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13532 			 0, "long_integer");
13533   lai->primitive_type_vector [ada_primitive_type_short]
13534     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13535 			 0, "short_integer");
13536   lai->string_char_type
13537     = lai->primitive_type_vector [ada_primitive_type_char]
13538     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13539   lai->primitive_type_vector [ada_primitive_type_float]
13540     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13541 		       "float", NULL);
13542   lai->primitive_type_vector [ada_primitive_type_double]
13543     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13544 		       "long_float", NULL);
13545   lai->primitive_type_vector [ada_primitive_type_long_long]
13546     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13547 			 0, "long_long_integer");
13548   lai->primitive_type_vector [ada_primitive_type_long_double]
13549     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13550 		       "long_long_float", NULL);
13551   lai->primitive_type_vector [ada_primitive_type_natural]
13552     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13553 			 0, "natural");
13554   lai->primitive_type_vector [ada_primitive_type_positive]
13555     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13556 			 0, "positive");
13557   lai->primitive_type_vector [ada_primitive_type_void]
13558     = builtin->builtin_void;
13559 
13560   lai->primitive_type_vector [ada_primitive_type_system_address]
13561     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13562   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13563     = "system__address";
13564 
13565   lai->bool_type_symbol = NULL;
13566   lai->bool_type_default = builtin->builtin_bool;
13567 }
13568 
13569 				/* Language vector */
13570 
13571 /* Not really used, but needed in the ada_language_defn.  */
13572 
13573 static void
13574 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13575 {
13576   ada_emit_char (c, type, stream, quoter, 1);
13577 }
13578 
13579 static int
13580 parse (struct parser_state *ps)
13581 {
13582   warnings_issued = 0;
13583   return ada_parse (ps);
13584 }
13585 
13586 static const struct exp_descriptor ada_exp_descriptor = {
13587   ada_print_subexp,
13588   ada_operator_length,
13589   ada_operator_check,
13590   ada_op_name,
13591   ada_dump_subexp_body,
13592   ada_evaluate_subexp
13593 };
13594 
13595 /* Implement the "la_get_symbol_name_cmp" language_defn method
13596    for Ada.  */
13597 
13598 static symbol_name_cmp_ftype
13599 ada_get_symbol_name_cmp (const char *lookup_name)
13600 {
13601   if (should_use_wild_match (lookup_name))
13602     return wild_match;
13603   else
13604     return compare_names;
13605 }
13606 
13607 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13608 
13609 static struct value *
13610 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13611 {
13612   const struct block *frame_block = NULL;
13613   struct symbol *renaming_sym = NULL;
13614 
13615   /* The only case where default_read_var_value is not sufficient
13616      is when VAR is a renaming...  */
13617   if (frame)
13618     frame_block = get_frame_block (frame, NULL);
13619   if (frame_block)
13620     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13621   if (renaming_sym != NULL)
13622     return ada_read_renaming_var_value (renaming_sym, frame_block);
13623 
13624   /* This is a typical case where we expect the default_read_var_value
13625      function to work.  */
13626   return default_read_var_value (var, frame);
13627 }
13628 
13629 const struct language_defn ada_language_defn = {
13630   "ada",                        /* Language name */
13631   "Ada",
13632   language_ada,
13633   range_check_off,
13634   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13635                                    that's not quite what this means.  */
13636   array_row_major,
13637   macro_expansion_no,
13638   &ada_exp_descriptor,
13639   parse,
13640   ada_error,
13641   resolve,
13642   ada_printchar,                /* Print a character constant */
13643   ada_printstr,                 /* Function to print string constant */
13644   emit_char,                    /* Function to print single char (not used) */
13645   ada_print_type,               /* Print a type using appropriate syntax */
13646   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13647   ada_val_print,                /* Print a value using appropriate syntax */
13648   ada_value_print,              /* Print a top-level value */
13649   ada_read_var_value,		/* la_read_var_value */
13650   NULL,                         /* Language specific skip_trampoline */
13651   NULL,                         /* name_of_this */
13652   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13653   basic_lookup_transparent_type,        /* lookup_transparent_type */
13654   ada_la_decode,                /* Language specific symbol demangler */
13655   NULL,                         /* Language specific
13656 				   class_name_from_physname */
13657   ada_op_print_tab,             /* expression operators for printing */
13658   0,                            /* c-style arrays */
13659   1,                            /* String lower bound */
13660   ada_get_gdb_completer_word_break_characters,
13661   ada_make_symbol_completion_list,
13662   ada_language_arch_info,
13663   ada_print_array_index,
13664   default_pass_by_reference,
13665   c_get_string,
13666   ada_get_symbol_name_cmp,	/* la_get_symbol_name_cmp */
13667   ada_iterate_over_symbols,
13668   &ada_varobj_ops,
13669   NULL,
13670   NULL,
13671   LANG_MAGIC
13672 };
13673 
13674 /* Provide a prototype to silence -Wmissing-prototypes.  */
13675 extern initialize_file_ftype _initialize_ada_language;
13676 
13677 /* Command-list for the "set/show ada" prefix command.  */
13678 static struct cmd_list_element *set_ada_list;
13679 static struct cmd_list_element *show_ada_list;
13680 
13681 /* Implement the "set ada" prefix command.  */
13682 
13683 static void
13684 set_ada_command (char *arg, int from_tty)
13685 {
13686   printf_unfiltered (_(\
13687 "\"set ada\" must be followed by the name of a setting.\n"));
13688   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
13689 }
13690 
13691 /* Implement the "show ada" prefix command.  */
13692 
13693 static void
13694 show_ada_command (char *args, int from_tty)
13695 {
13696   cmd_show_list (show_ada_list, from_tty, "");
13697 }
13698 
13699 static void
13700 initialize_ada_catchpoint_ops (void)
13701 {
13702   struct breakpoint_ops *ops;
13703 
13704   initialize_breakpoint_ops ();
13705 
13706   ops = &catch_exception_breakpoint_ops;
13707   *ops = bkpt_breakpoint_ops;
13708   ops->dtor = dtor_catch_exception;
13709   ops->allocate_location = allocate_location_catch_exception;
13710   ops->re_set = re_set_catch_exception;
13711   ops->check_status = check_status_catch_exception;
13712   ops->print_it = print_it_catch_exception;
13713   ops->print_one = print_one_catch_exception;
13714   ops->print_mention = print_mention_catch_exception;
13715   ops->print_recreate = print_recreate_catch_exception;
13716 
13717   ops = &catch_exception_unhandled_breakpoint_ops;
13718   *ops = bkpt_breakpoint_ops;
13719   ops->dtor = dtor_catch_exception_unhandled;
13720   ops->allocate_location = allocate_location_catch_exception_unhandled;
13721   ops->re_set = re_set_catch_exception_unhandled;
13722   ops->check_status = check_status_catch_exception_unhandled;
13723   ops->print_it = print_it_catch_exception_unhandled;
13724   ops->print_one = print_one_catch_exception_unhandled;
13725   ops->print_mention = print_mention_catch_exception_unhandled;
13726   ops->print_recreate = print_recreate_catch_exception_unhandled;
13727 
13728   ops = &catch_assert_breakpoint_ops;
13729   *ops = bkpt_breakpoint_ops;
13730   ops->dtor = dtor_catch_assert;
13731   ops->allocate_location = allocate_location_catch_assert;
13732   ops->re_set = re_set_catch_assert;
13733   ops->check_status = check_status_catch_assert;
13734   ops->print_it = print_it_catch_assert;
13735   ops->print_one = print_one_catch_assert;
13736   ops->print_mention = print_mention_catch_assert;
13737   ops->print_recreate = print_recreate_catch_assert;
13738 }
13739 
13740 /* This module's 'new_objfile' observer.  */
13741 
13742 static void
13743 ada_new_objfile_observer (struct objfile *objfile)
13744 {
13745   ada_clear_symbol_cache ();
13746 }
13747 
13748 /* This module's 'free_objfile' observer.  */
13749 
13750 static void
13751 ada_free_objfile_observer (struct objfile *objfile)
13752 {
13753   ada_clear_symbol_cache ();
13754 }
13755 
13756 void
13757 _initialize_ada_language (void)
13758 {
13759   add_language (&ada_language_defn);
13760 
13761   initialize_ada_catchpoint_ops ();
13762 
13763   add_prefix_cmd ("ada", no_class, set_ada_command,
13764                   _("Prefix command for changing Ada-specfic settings"),
13765                   &set_ada_list, "set ada ", 0, &setlist);
13766 
13767   add_prefix_cmd ("ada", no_class, show_ada_command,
13768                   _("Generic command for showing Ada-specific settings."),
13769                   &show_ada_list, "show ada ", 0, &showlist);
13770 
13771   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13772                            &trust_pad_over_xvs, _("\
13773 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13774 Show whether an optimization trusting PAD types over XVS types is activated"),
13775                            _("\
13776 This is related to the encoding used by the GNAT compiler.  The debugger\n\
13777 should normally trust the contents of PAD types, but certain older versions\n\
13778 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13779 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
13780 work around this bug.  It is always safe to turn this option \"off\", but\n\
13781 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13782 this option to \"off\" unless necessary."),
13783                             NULL, NULL, &set_ada_list, &show_ada_list);
13784 
13785   add_catch_command ("exception", _("\
13786 Catch Ada exceptions, when raised.\n\
13787 With an argument, catch only exceptions with the given name."),
13788 		     catch_ada_exception_command,
13789                      NULL,
13790 		     CATCH_PERMANENT,
13791 		     CATCH_TEMPORARY);
13792   add_catch_command ("assert", _("\
13793 Catch failed Ada assertions, when raised.\n\
13794 With an argument, catch only exceptions with the given name."),
13795 		     catch_assert_command,
13796                      NULL,
13797 		     CATCH_PERMANENT,
13798 		     CATCH_TEMPORARY);
13799 
13800   varsize_limit = 65536;
13801 
13802   add_info ("exceptions", info_exceptions_command,
13803 	    _("\
13804 List all Ada exception names.\n\
13805 If a regular expression is passed as an argument, only those matching\n\
13806 the regular expression are listed."));
13807 
13808   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13809 		  _("Set Ada maintenance-related variables."),
13810                   &maint_set_ada_cmdlist, "maintenance set ada ",
13811                   0/*allow-unknown*/, &maintenance_set_cmdlist);
13812 
13813   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13814 		  _("Show Ada maintenance-related variables"),
13815                   &maint_show_ada_cmdlist, "maintenance show ada ",
13816                   0/*allow-unknown*/, &maintenance_show_cmdlist);
13817 
13818   add_setshow_boolean_cmd
13819     ("ignore-descriptive-types", class_maintenance,
13820      &ada_ignore_descriptive_types_p,
13821      _("Set whether descriptive types generated by GNAT should be ignored."),
13822      _("Show whether descriptive types generated by GNAT should be ignored."),
13823      _("\
13824 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13825 DWARF attribute."),
13826      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13827 
13828   obstack_init (&symbol_list_obstack);
13829 
13830   decoded_names_store = htab_create_alloc
13831     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13832      NULL, xcalloc, xfree);
13833 
13834   /* The ada-lang observers.  */
13835   observer_attach_new_objfile (ada_new_objfile_observer);
13836   observer_attach_free_objfile (ada_free_objfile_observer);
13837   observer_attach_inferior_exit (ada_inferior_exit);
13838 
13839   /* Setup various context-specific data.  */
13840   ada_inferior_data
13841     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13842   ada_pspace_data_handle
13843     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
13844 }
13845