testsuite/gdb.trace: Fix expected message on continue.
[external/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3    Copyright (C) 1992-2016 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 #include "namespace.h"
57
58 #include "psymtab.h"
59 #include "value.h"
60 #include "mi/mi-common.h"
61 #include "arch-utils.h"
62 #include "cli/cli-utils.h"
63
64 /* Define whether or not the C operator '/' truncates towards zero for
65    differently signed operands (truncation direction is undefined in C).
66    Copied from valarith.c.  */
67
68 #ifndef TRUNCATION_TOWARDS_ZERO
69 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
70 #endif
71
72 static struct type *desc_base_type (struct type *);
73
74 static struct type *desc_bounds_type (struct type *);
75
76 static struct value *desc_bounds (struct value *);
77
78 static int fat_pntr_bounds_bitpos (struct type *);
79
80 static int fat_pntr_bounds_bitsize (struct type *);
81
82 static struct type *desc_data_target_type (struct type *);
83
84 static struct value *desc_data (struct value *);
85
86 static int fat_pntr_data_bitpos (struct type *);
87
88 static int fat_pntr_data_bitsize (struct type *);
89
90 static struct value *desc_one_bound (struct value *, int, int);
91
92 static int desc_bound_bitpos (struct type *, int, int);
93
94 static int desc_bound_bitsize (struct type *, int, int);
95
96 static struct type *desc_index_type (struct type *, int);
97
98 static int desc_arity (struct type *);
99
100 static int ada_type_match (struct type *, struct type *, int);
101
102 static int ada_args_match (struct symbol *, struct value **, int);
103
104 static int full_match (const char *, const char *);
105
106 static struct value *make_array_descriptor (struct type *, struct value *);
107
108 static void ada_add_block_symbols (struct obstack *,
109                                    const struct block *, const char *,
110                                    domain_enum, struct objfile *, int);
111
112 static void ada_add_all_symbols (struct obstack *, const struct block *,
113                                  const char *, domain_enum, int, int *);
114
115 static int is_nonfunction (struct block_symbol *, int);
116
117 static void add_defn_to_vec (struct obstack *, struct symbol *,
118                              const struct block *);
119
120 static int num_defns_collected (struct obstack *);
121
122 static struct block_symbol *defns_collected (struct obstack *, int);
123
124 static struct value *resolve_subexp (struct expression **, int *, int,
125                                      struct type *);
126
127 static void replace_operator_with_call (struct expression **, int, int, int,
128                                         struct symbol *, const struct block *);
129
130 static int possible_user_operator_p (enum exp_opcode, struct value **);
131
132 static char *ada_op_name (enum exp_opcode);
133
134 static const char *ada_decoded_op_name (enum exp_opcode);
135
136 static int numeric_type_p (struct type *);
137
138 static int integer_type_p (struct type *);
139
140 static int scalar_type_p (struct type *);
141
142 static int discrete_type_p (struct type *);
143
144 static enum ada_renaming_category parse_old_style_renaming (struct type *,
145                                                             const char **,
146                                                             int *,
147                                                             const char **);
148
149 static struct symbol *find_old_style_renaming_symbol (const char *,
150                                                       const struct block *);
151
152 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
153                                                 int, int, int *);
154
155 static struct value *evaluate_subexp_type (struct expression *, int *);
156
157 static struct type *ada_find_parallel_type_with_name (struct type *,
158                                                       const char *);
159
160 static int is_dynamic_field (struct type *, int);
161
162 static struct type *to_fixed_variant_branch_type (struct type *,
163                                                   const gdb_byte *,
164                                                   CORE_ADDR, struct value *);
165
166 static struct type *to_fixed_array_type (struct type *, struct value *, int);
167
168 static struct type *to_fixed_range_type (struct type *, struct value *);
169
170 static struct type *to_static_fixed_type (struct type *);
171 static struct type *static_unwrap_type (struct type *type);
172
173 static struct value *unwrap_value (struct value *);
174
175 static struct type *constrained_packed_array_type (struct type *, long *);
176
177 static struct type *decode_constrained_packed_array_type (struct type *);
178
179 static long decode_packed_array_bitsize (struct type *);
180
181 static struct value *decode_constrained_packed_array (struct value *);
182
183 static int ada_is_packed_array_type  (struct type *);
184
185 static int ada_is_unconstrained_packed_array_type (struct type *);
186
187 static struct value *value_subscript_packed (struct value *, int,
188                                              struct value **);
189
190 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
191
192 static struct value *coerce_unspec_val_to_type (struct value *,
193                                                 struct type *);
194
195 static struct value *get_var_value (char *, char *);
196
197 static int lesseq_defined_than (struct symbol *, struct symbol *);
198
199 static int equiv_types (struct type *, struct type *);
200
201 static int is_name_suffix (const char *);
202
203 static int advance_wild_match (const char **, const char *, int);
204
205 static int wild_match (const char *, const char *);
206
207 static struct value *ada_coerce_ref (struct value *);
208
209 static LONGEST pos_atr (struct value *);
210
211 static struct value *value_pos_atr (struct type *, struct value *);
212
213 static struct value *value_val_atr (struct type *, struct value *);
214
215 static struct symbol *standard_lookup (const char *, const struct block *,
216                                        domain_enum);
217
218 static struct value *ada_search_struct_field (const char *, struct value *, int,
219                                               struct type *);
220
221 static struct value *ada_value_primitive_field (struct value *, int, int,
222                                                 struct type *);
223
224 static int find_struct_field (const char *, struct type *, int,
225                               struct type **, int *, int *, int *, int *);
226
227 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
228                                                 struct value *);
229
230 static int ada_resolve_function (struct block_symbol *, int,
231                                  struct value **, int, const char *,
232                                  struct type *);
233
234 static int ada_is_direct_array_type (struct type *);
235
236 static void ada_language_arch_info (struct gdbarch *,
237                                     struct language_arch_info *);
238
239 static struct value *ada_index_struct_field (int, struct value *, int,
240                                              struct type *);
241
242 static struct value *assign_aggregate (struct value *, struct value *, 
243                                        struct expression *,
244                                        int *, enum noside);
245
246 static void aggregate_assign_from_choices (struct value *, struct value *, 
247                                            struct expression *,
248                                            int *, LONGEST *, int *,
249                                            int, LONGEST, LONGEST);
250
251 static void aggregate_assign_positional (struct value *, struct value *,
252                                          struct expression *,
253                                          int *, LONGEST *, int *, int,
254                                          LONGEST, LONGEST);
255
256
257 static void aggregate_assign_others (struct value *, struct value *,
258                                      struct expression *,
259                                      int *, LONGEST *, int, LONGEST, LONGEST);
260
261
262 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
263
264
265 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
266                                           int *, enum noside);
267
268 static void ada_forward_operator_length (struct expression *, int, int *,
269                                          int *);
270
271 static struct type *ada_find_any_type (const char *name);
272 \f
273
274 /* The result of a symbol lookup to be stored in our symbol cache.  */
275
276 struct cache_entry
277 {
278   /* The name used to perform the lookup.  */
279   const char *name;
280   /* The namespace used during the lookup.  */
281   domain_enum domain;
282   /* The symbol returned by the lookup, or NULL if no matching symbol
283      was found.  */
284   struct symbol *sym;
285   /* The block where the symbol was found, or NULL if no matching
286      symbol was found.  */
287   const struct block *block;
288   /* A pointer to the next entry with the same hash.  */
289   struct cache_entry *next;
290 };
291
292 /* The Ada symbol cache, used to store the result of Ada-mode symbol
293    lookups in the course of executing the user's commands.
294
295    The cache is implemented using a simple, fixed-sized hash.
296    The size is fixed on the grounds that there are not likely to be
297    all that many symbols looked up during any given session, regardless
298    of the size of the symbol table.  If we decide to go to a resizable
299    table, let's just use the stuff from libiberty instead.  */
300
301 #define HASH_SIZE 1009
302
303 struct ada_symbol_cache
304 {
305   /* An obstack used to store the entries in our cache.  */
306   struct obstack cache_space;
307
308   /* The root of the hash table used to implement our symbol cache.  */
309   struct cache_entry *root[HASH_SIZE];
310 };
311
312 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
313
314 /* Maximum-sized dynamic type.  */
315 static unsigned int varsize_limit;
316
317 /* FIXME: brobecker/2003-09-17: No longer a const because it is
318    returned by a function that does not return a const char *.  */
319 static char *ada_completer_word_break_characters =
320 #ifdef VMS
321   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
322 #else
323   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
324 #endif
325
326 /* The name of the symbol to use to get the name of the main subprogram.  */
327 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
328   = "__gnat_ada_main_program_name";
329
330 /* Limit on the number of warnings to raise per expression evaluation.  */
331 static int warning_limit = 2;
332
333 /* Number of warning messages issued; reset to 0 by cleanups after
334    expression evaluation.  */
335 static int warnings_issued = 0;
336
337 static const char *known_runtime_file_name_patterns[] = {
338   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
339 };
340
341 static const char *known_auxiliary_function_name_patterns[] = {
342   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
343 };
344
345 /* Space for allocating results of ada_lookup_symbol_list.  */
346 static struct obstack symbol_list_obstack;
347
348 /* Maintenance-related settings for this module.  */
349
350 static struct cmd_list_element *maint_set_ada_cmdlist;
351 static struct cmd_list_element *maint_show_ada_cmdlist;
352
353 /* Implement the "maintenance set ada" (prefix) command.  */
354
355 static void
356 maint_set_ada_cmd (char *args, int from_tty)
357 {
358   help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
359              gdb_stdout);
360 }
361
362 /* Implement the "maintenance show ada" (prefix) command.  */
363
364 static void
365 maint_show_ada_cmd (char *args, int from_tty)
366 {
367   cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
368 }
369
370 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
371
372 static int ada_ignore_descriptive_types_p = 0;
373
374                         /* Inferior-specific data.  */
375
376 /* Per-inferior data for this module.  */
377
378 struct ada_inferior_data
379 {
380   /* The ada__tags__type_specific_data type, which is used when decoding
381      tagged types.  With older versions of GNAT, this type was directly
382      accessible through a component ("tsd") in the object tag.  But this
383      is no longer the case, so we cache it for each inferior.  */
384   struct type *tsd_type;
385
386   /* The exception_support_info data.  This data is used to determine
387      how to implement support for Ada exception catchpoints in a given
388      inferior.  */
389   const struct exception_support_info *exception_info;
390 };
391
392 /* Our key to this module's inferior data.  */
393 static const struct inferior_data *ada_inferior_data;
394
395 /* A cleanup routine for our inferior data.  */
396 static void
397 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
398 {
399   struct ada_inferior_data *data;
400
401   data = (struct ada_inferior_data *) inferior_data (inf, ada_inferior_data);
402   if (data != NULL)
403     xfree (data);
404 }
405
406 /* Return our inferior data for the given inferior (INF).
407
408    This function always returns a valid pointer to an allocated
409    ada_inferior_data structure.  If INF's inferior data has not
410    been previously set, this functions creates a new one with all
411    fields set to zero, sets INF's inferior to it, and then returns
412    a pointer to that newly allocated ada_inferior_data.  */
413
414 static struct ada_inferior_data *
415 get_ada_inferior_data (struct inferior *inf)
416 {
417   struct ada_inferior_data *data;
418
419   data = (struct ada_inferior_data *) inferior_data (inf, ada_inferior_data);
420   if (data == NULL)
421     {
422       data = XCNEW (struct ada_inferior_data);
423       set_inferior_data (inf, ada_inferior_data, data);
424     }
425
426   return data;
427 }
428
429 /* Perform all necessary cleanups regarding our module's inferior data
430    that is required after the inferior INF just exited.  */
431
432 static void
433 ada_inferior_exit (struct inferior *inf)
434 {
435   ada_inferior_data_cleanup (inf, NULL);
436   set_inferior_data (inf, ada_inferior_data, NULL);
437 }
438
439
440                         /* program-space-specific data.  */
441
442 /* This module's per-program-space data.  */
443 struct ada_pspace_data
444 {
445   /* The Ada symbol cache.  */
446   struct ada_symbol_cache *sym_cache;
447 };
448
449 /* Key to our per-program-space data.  */
450 static const struct program_space_data *ada_pspace_data_handle;
451
452 /* Return this module's data for the given program space (PSPACE).
453    If not is found, add a zero'ed one now.
454
455    This function always returns a valid object.  */
456
457 static struct ada_pspace_data *
458 get_ada_pspace_data (struct program_space *pspace)
459 {
460   struct ada_pspace_data *data;
461
462   data = ((struct ada_pspace_data *)
463           program_space_data (pspace, ada_pspace_data_handle));
464   if (data == NULL)
465     {
466       data = XCNEW (struct ada_pspace_data);
467       set_program_space_data (pspace, ada_pspace_data_handle, data);
468     }
469
470   return data;
471 }
472
473 /* The cleanup callback for this module's per-program-space data.  */
474
475 static void
476 ada_pspace_data_cleanup (struct program_space *pspace, void *data)
477 {
478   struct ada_pspace_data *pspace_data = (struct ada_pspace_data *) data;
479
480   if (pspace_data->sym_cache != NULL)
481     ada_free_symbol_cache (pspace_data->sym_cache);
482   xfree (pspace_data);
483 }
484
485                         /* Utilities */
486
487 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
488    all typedef layers have been peeled.  Otherwise, return TYPE.
489
490    Normally, we really expect a typedef type to only have 1 typedef layer.
491    In other words, we really expect the target type of a typedef type to be
492    a non-typedef type.  This is particularly true for Ada units, because
493    the language does not have a typedef vs not-typedef distinction.
494    In that respect, the Ada compiler has been trying to eliminate as many
495    typedef definitions in the debugging information, since they generally
496    do not bring any extra information (we still use typedef under certain
497    circumstances related mostly to the GNAT encoding).
498
499    Unfortunately, we have seen situations where the debugging information
500    generated by the compiler leads to such multiple typedef layers.  For
501    instance, consider the following example with stabs:
502
503      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
504      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
505
506    This is an error in the debugging information which causes type
507    pck__float_array___XUP to be defined twice, and the second time,
508    it is defined as a typedef of a typedef.
509
510    This is on the fringe of legality as far as debugging information is
511    concerned, and certainly unexpected.  But it is easy to handle these
512    situations correctly, so we can afford to be lenient in this case.  */
513
514 static struct type *
515 ada_typedef_target_type (struct type *type)
516 {
517   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
518     type = TYPE_TARGET_TYPE (type);
519   return type;
520 }
521
522 /* Given DECODED_NAME a string holding a symbol name in its
523    decoded form (ie using the Ada dotted notation), returns
524    its unqualified name.  */
525
526 static const char *
527 ada_unqualified_name (const char *decoded_name)
528 {
529   const char *result;
530   
531   /* If the decoded name starts with '<', it means that the encoded
532      name does not follow standard naming conventions, and thus that
533      it is not your typical Ada symbol name.  Trying to unqualify it
534      is therefore pointless and possibly erroneous.  */
535   if (decoded_name[0] == '<')
536     return decoded_name;
537
538   result = strrchr (decoded_name, '.');
539   if (result != NULL)
540     result++;                   /* Skip the dot...  */
541   else
542     result = decoded_name;
543
544   return result;
545 }
546
547 /* Return a string starting with '<', followed by STR, and '>'.
548    The result is good until the next call.  */
549
550 static char *
551 add_angle_brackets (const char *str)
552 {
553   static char *result = NULL;
554
555   xfree (result);
556   result = xstrprintf ("<%s>", str);
557   return result;
558 }
559
560 static char *
561 ada_get_gdb_completer_word_break_characters (void)
562 {
563   return ada_completer_word_break_characters;
564 }
565
566 /* Print an array element index using the Ada syntax.  */
567
568 static void
569 ada_print_array_index (struct value *index_value, struct ui_file *stream,
570                        const struct value_print_options *options)
571 {
572   LA_VALUE_PRINT (index_value, stream, options);
573   fprintf_filtered (stream, " => ");
574 }
575
576 /* Assuming VECT points to an array of *SIZE objects of size
577    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
578    updating *SIZE as necessary and returning the (new) array.  */
579
580 void *
581 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
582 {
583   if (*size < min_size)
584     {
585       *size *= 2;
586       if (*size < min_size)
587         *size = min_size;
588       vect = xrealloc (vect, *size * element_size);
589     }
590   return vect;
591 }
592
593 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
594    suffix of FIELD_NAME beginning "___".  */
595
596 static int
597 field_name_match (const char *field_name, const char *target)
598 {
599   int len = strlen (target);
600
601   return
602     (strncmp (field_name, target, len) == 0
603      && (field_name[len] == '\0'
604          || (startswith (field_name + len, "___")
605              && strcmp (field_name + strlen (field_name) - 6,
606                         "___XVN") != 0)));
607 }
608
609
610 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
611    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
612    and return its index.  This function also handles fields whose name
613    have ___ suffixes because the compiler sometimes alters their name
614    by adding such a suffix to represent fields with certain constraints.
615    If the field could not be found, return a negative number if
616    MAYBE_MISSING is set.  Otherwise raise an error.  */
617
618 int
619 ada_get_field_index (const struct type *type, const char *field_name,
620                      int maybe_missing)
621 {
622   int fieldno;
623   struct type *struct_type = check_typedef ((struct type *) type);
624
625   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
626     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
627       return fieldno;
628
629   if (!maybe_missing)
630     error (_("Unable to find field %s in struct %s.  Aborting"),
631            field_name, TYPE_NAME (struct_type));
632
633   return -1;
634 }
635
636 /* The length of the prefix of NAME prior to any "___" suffix.  */
637
638 int
639 ada_name_prefix_len (const char *name)
640 {
641   if (name == NULL)
642     return 0;
643   else
644     {
645       const char *p = strstr (name, "___");
646
647       if (p == NULL)
648         return strlen (name);
649       else
650         return p - name;
651     }
652 }
653
654 /* Return non-zero if SUFFIX is a suffix of STR.
655    Return zero if STR is null.  */
656
657 static int
658 is_suffix (const char *str, const char *suffix)
659 {
660   int len1, len2;
661
662   if (str == NULL)
663     return 0;
664   len1 = strlen (str);
665   len2 = strlen (suffix);
666   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
667 }
668
669 /* The contents of value VAL, treated as a value of type TYPE.  The
670    result is an lval in memory if VAL is.  */
671
672 static struct value *
673 coerce_unspec_val_to_type (struct value *val, struct type *type)
674 {
675   type = ada_check_typedef (type);
676   if (value_type (val) == type)
677     return val;
678   else
679     {
680       struct value *result;
681
682       /* Make sure that the object size is not unreasonable before
683          trying to allocate some memory for it.  */
684       ada_ensure_varsize_limit (type);
685
686       if (value_lazy (val)
687           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
688         result = allocate_value_lazy (type);
689       else
690         {
691           result = allocate_value (type);
692           value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
693         }
694       set_value_component_location (result, val);
695       set_value_bitsize (result, value_bitsize (val));
696       set_value_bitpos (result, value_bitpos (val));
697       set_value_address (result, value_address (val));
698       return result;
699     }
700 }
701
702 static const gdb_byte *
703 cond_offset_host (const gdb_byte *valaddr, long offset)
704 {
705   if (valaddr == NULL)
706     return NULL;
707   else
708     return valaddr + offset;
709 }
710
711 static CORE_ADDR
712 cond_offset_target (CORE_ADDR address, long offset)
713 {
714   if (address == 0)
715     return 0;
716   else
717     return address + offset;
718 }
719
720 /* Issue a warning (as for the definition of warning in utils.c, but
721    with exactly one argument rather than ...), unless the limit on the
722    number of warnings has passed during the evaluation of the current
723    expression.  */
724
725 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
726    provided by "complaint".  */
727 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
728
729 static void
730 lim_warning (const char *format, ...)
731 {
732   va_list args;
733
734   va_start (args, format);
735   warnings_issued += 1;
736   if (warnings_issued <= warning_limit)
737     vwarning (format, args);
738
739   va_end (args);
740 }
741
742 /* Issue an error if the size of an object of type T is unreasonable,
743    i.e. if it would be a bad idea to allocate a value of this type in
744    GDB.  */
745
746 void
747 ada_ensure_varsize_limit (const struct type *type)
748 {
749   if (TYPE_LENGTH (type) > varsize_limit)
750     error (_("object size is larger than varsize-limit"));
751 }
752
753 /* Maximum value of a SIZE-byte signed integer type.  */
754 static LONGEST
755 max_of_size (int size)
756 {
757   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
758
759   return top_bit | (top_bit - 1);
760 }
761
762 /* Minimum value of a SIZE-byte signed integer type.  */
763 static LONGEST
764 min_of_size (int size)
765 {
766   return -max_of_size (size) - 1;
767 }
768
769 /* Maximum value of a SIZE-byte unsigned integer type.  */
770 static ULONGEST
771 umax_of_size (int size)
772 {
773   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
774
775   return top_bit | (top_bit - 1);
776 }
777
778 /* Maximum value of integral type T, as a signed quantity.  */
779 static LONGEST
780 max_of_type (struct type *t)
781 {
782   if (TYPE_UNSIGNED (t))
783     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
784   else
785     return max_of_size (TYPE_LENGTH (t));
786 }
787
788 /* Minimum value of integral type T, as a signed quantity.  */
789 static LONGEST
790 min_of_type (struct type *t)
791 {
792   if (TYPE_UNSIGNED (t)) 
793     return 0;
794   else
795     return min_of_size (TYPE_LENGTH (t));
796 }
797
798 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
799 LONGEST
800 ada_discrete_type_high_bound (struct type *type)
801 {
802   type = resolve_dynamic_type (type, NULL, 0);
803   switch (TYPE_CODE (type))
804     {
805     case TYPE_CODE_RANGE:
806       return TYPE_HIGH_BOUND (type);
807     case TYPE_CODE_ENUM:
808       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
809     case TYPE_CODE_BOOL:
810       return 1;
811     case TYPE_CODE_CHAR:
812     case TYPE_CODE_INT:
813       return max_of_type (type);
814     default:
815       error (_("Unexpected type in ada_discrete_type_high_bound."));
816     }
817 }
818
819 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
820 LONGEST
821 ada_discrete_type_low_bound (struct type *type)
822 {
823   type = resolve_dynamic_type (type, NULL, 0);
824   switch (TYPE_CODE (type))
825     {
826     case TYPE_CODE_RANGE:
827       return TYPE_LOW_BOUND (type);
828     case TYPE_CODE_ENUM:
829       return TYPE_FIELD_ENUMVAL (type, 0);
830     case TYPE_CODE_BOOL:
831       return 0;
832     case TYPE_CODE_CHAR:
833     case TYPE_CODE_INT:
834       return min_of_type (type);
835     default:
836       error (_("Unexpected type in ada_discrete_type_low_bound."));
837     }
838 }
839
840 /* The identity on non-range types.  For range types, the underlying
841    non-range scalar type.  */
842
843 static struct type *
844 get_base_type (struct type *type)
845 {
846   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
847     {
848       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
849         return type;
850       type = TYPE_TARGET_TYPE (type);
851     }
852   return type;
853 }
854
855 /* Return a decoded version of the given VALUE.  This means returning
856    a value whose type is obtained by applying all the GNAT-specific
857    encondings, making the resulting type a static but standard description
858    of the initial type.  */
859
860 struct value *
861 ada_get_decoded_value (struct value *value)
862 {
863   struct type *type = ada_check_typedef (value_type (value));
864
865   if (ada_is_array_descriptor_type (type)
866       || (ada_is_constrained_packed_array_type (type)
867           && TYPE_CODE (type) != TYPE_CODE_PTR))
868     {
869       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
870         value = ada_coerce_to_simple_array_ptr (value);
871       else
872         value = ada_coerce_to_simple_array (value);
873     }
874   else
875     value = ada_to_fixed_value (value);
876
877   return value;
878 }
879
880 /* Same as ada_get_decoded_value, but with the given TYPE.
881    Because there is no associated actual value for this type,
882    the resulting type might be a best-effort approximation in
883    the case of dynamic types.  */
884
885 struct type *
886 ada_get_decoded_type (struct type *type)
887 {
888   type = to_static_fixed_type (type);
889   if (ada_is_constrained_packed_array_type (type))
890     type = ada_coerce_to_simple_array_type (type);
891   return type;
892 }
893
894 \f
895
896                                 /* Language Selection */
897
898 /* If the main program is in Ada, return language_ada, otherwise return LANG
899    (the main program is in Ada iif the adainit symbol is found).  */
900
901 enum language
902 ada_update_initial_language (enum language lang)
903 {
904   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
905                              (struct objfile *) NULL).minsym != NULL)
906     return language_ada;
907
908   return lang;
909 }
910
911 /* If the main procedure is written in Ada, then return its name.
912    The result is good until the next call.  Return NULL if the main
913    procedure doesn't appear to be in Ada.  */
914
915 char *
916 ada_main_name (void)
917 {
918   struct bound_minimal_symbol msym;
919   static char *main_program_name = NULL;
920
921   /* For Ada, the name of the main procedure is stored in a specific
922      string constant, generated by the binder.  Look for that symbol,
923      extract its address, and then read that string.  If we didn't find
924      that string, then most probably the main procedure is not written
925      in Ada.  */
926   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
927
928   if (msym.minsym != NULL)
929     {
930       CORE_ADDR main_program_name_addr;
931       int err_code;
932
933       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
934       if (main_program_name_addr == 0)
935         error (_("Invalid address for Ada main program name."));
936
937       xfree (main_program_name);
938       target_read_string (main_program_name_addr, &main_program_name,
939                           1024, &err_code);
940
941       if (err_code != 0)
942         return NULL;
943       return main_program_name;
944     }
945
946   /* The main procedure doesn't seem to be in Ada.  */
947   return NULL;
948 }
949 \f
950                                 /* Symbols */
951
952 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
953    of NULLs.  */
954
955 const struct ada_opname_map ada_opname_table[] = {
956   {"Oadd", "\"+\"", BINOP_ADD},
957   {"Osubtract", "\"-\"", BINOP_SUB},
958   {"Omultiply", "\"*\"", BINOP_MUL},
959   {"Odivide", "\"/\"", BINOP_DIV},
960   {"Omod", "\"mod\"", BINOP_MOD},
961   {"Orem", "\"rem\"", BINOP_REM},
962   {"Oexpon", "\"**\"", BINOP_EXP},
963   {"Olt", "\"<\"", BINOP_LESS},
964   {"Ole", "\"<=\"", BINOP_LEQ},
965   {"Ogt", "\">\"", BINOP_GTR},
966   {"Oge", "\">=\"", BINOP_GEQ},
967   {"Oeq", "\"=\"", BINOP_EQUAL},
968   {"One", "\"/=\"", BINOP_NOTEQUAL},
969   {"Oand", "\"and\"", BINOP_BITWISE_AND},
970   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
971   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
972   {"Oconcat", "\"&\"", BINOP_CONCAT},
973   {"Oabs", "\"abs\"", UNOP_ABS},
974   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
975   {"Oadd", "\"+\"", UNOP_PLUS},
976   {"Osubtract", "\"-\"", UNOP_NEG},
977   {NULL, NULL}
978 };
979
980 /* The "encoded" form of DECODED, according to GNAT conventions.
981    The result is valid until the next call to ada_encode.  */
982
983 char *
984 ada_encode (const char *decoded)
985 {
986   static char *encoding_buffer = NULL;
987   static size_t encoding_buffer_size = 0;
988   const char *p;
989   int k;
990
991   if (decoded == NULL)
992     return NULL;
993
994   GROW_VECT (encoding_buffer, encoding_buffer_size,
995              2 * strlen (decoded) + 10);
996
997   k = 0;
998   for (p = decoded; *p != '\0'; p += 1)
999     {
1000       if (*p == '.')
1001         {
1002           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
1003           k += 2;
1004         }
1005       else if (*p == '"')
1006         {
1007           const struct ada_opname_map *mapping;
1008
1009           for (mapping = ada_opname_table;
1010                mapping->encoded != NULL
1011                && !startswith (p, mapping->decoded); mapping += 1)
1012             ;
1013           if (mapping->encoded == NULL)
1014             error (_("invalid Ada operator name: %s"), p);
1015           strcpy (encoding_buffer + k, mapping->encoded);
1016           k += strlen (mapping->encoded);
1017           break;
1018         }
1019       else
1020         {
1021           encoding_buffer[k] = *p;
1022           k += 1;
1023         }
1024     }
1025
1026   encoding_buffer[k] = '\0';
1027   return encoding_buffer;
1028 }
1029
1030 /* Return NAME folded to lower case, or, if surrounded by single
1031    quotes, unfolded, but with the quotes stripped away.  Result good
1032    to next call.  */
1033
1034 char *
1035 ada_fold_name (const char *name)
1036 {
1037   static char *fold_buffer = NULL;
1038   static size_t fold_buffer_size = 0;
1039
1040   int len = strlen (name);
1041   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1042
1043   if (name[0] == '\'')
1044     {
1045       strncpy (fold_buffer, name + 1, len - 2);
1046       fold_buffer[len - 2] = '\000';
1047     }
1048   else
1049     {
1050       int i;
1051
1052       for (i = 0; i <= len; i += 1)
1053         fold_buffer[i] = tolower (name[i]);
1054     }
1055
1056   return fold_buffer;
1057 }
1058
1059 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1060
1061 static int
1062 is_lower_alphanum (const char c)
1063 {
1064   return (isdigit (c) || (isalpha (c) && islower (c)));
1065 }
1066
1067 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1068    This function saves in LEN the length of that same symbol name but
1069    without either of these suffixes:
1070      . .{DIGIT}+
1071      . ${DIGIT}+
1072      . ___{DIGIT}+
1073      . __{DIGIT}+.
1074
1075    These are suffixes introduced by the compiler for entities such as
1076    nested subprogram for instance, in order to avoid name clashes.
1077    They do not serve any purpose for the debugger.  */
1078
1079 static void
1080 ada_remove_trailing_digits (const char *encoded, int *len)
1081 {
1082   if (*len > 1 && isdigit (encoded[*len - 1]))
1083     {
1084       int i = *len - 2;
1085
1086       while (i > 0 && isdigit (encoded[i]))
1087         i--;
1088       if (i >= 0 && encoded[i] == '.')
1089         *len = i;
1090       else if (i >= 0 && encoded[i] == '$')
1091         *len = i;
1092       else if (i >= 2 && startswith (encoded + i - 2, "___"))
1093         *len = i - 2;
1094       else if (i >= 1 && startswith (encoded + i - 1, "__"))
1095         *len = i - 1;
1096     }
1097 }
1098
1099 /* Remove the suffix introduced by the compiler for protected object
1100    subprograms.  */
1101
1102 static void
1103 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1104 {
1105   /* Remove trailing N.  */
1106
1107   /* Protected entry subprograms are broken into two
1108      separate subprograms: The first one is unprotected, and has
1109      a 'N' suffix; the second is the protected version, and has
1110      the 'P' suffix.  The second calls the first one after handling
1111      the protection.  Since the P subprograms are internally generated,
1112      we leave these names undecoded, giving the user a clue that this
1113      entity is internal.  */
1114
1115   if (*len > 1
1116       && encoded[*len - 1] == 'N'
1117       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1118     *len = *len - 1;
1119 }
1120
1121 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1122
1123 static void
1124 ada_remove_Xbn_suffix (const char *encoded, int *len)
1125 {
1126   int i = *len - 1;
1127
1128   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1129     i--;
1130
1131   if (encoded[i] != 'X')
1132     return;
1133
1134   if (i == 0)
1135     return;
1136
1137   if (isalnum (encoded[i-1]))
1138     *len = i;
1139 }
1140
1141 /* If ENCODED follows the GNAT entity encoding conventions, then return
1142    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1143    replaced by ENCODED.
1144
1145    The resulting string is valid until the next call of ada_decode.
1146    If the string is unchanged by decoding, the original string pointer
1147    is returned.  */
1148
1149 const char *
1150 ada_decode (const char *encoded)
1151 {
1152   int i, j;
1153   int len0;
1154   const char *p;
1155   char *decoded;
1156   int at_start_name;
1157   static char *decoding_buffer = NULL;
1158   static size_t decoding_buffer_size = 0;
1159
1160   /* The name of the Ada main procedure starts with "_ada_".
1161      This prefix is not part of the decoded name, so skip this part
1162      if we see this prefix.  */
1163   if (startswith (encoded, "_ada_"))
1164     encoded += 5;
1165
1166   /* If the name starts with '_', then it is not a properly encoded
1167      name, so do not attempt to decode it.  Similarly, if the name
1168      starts with '<', the name should not be decoded.  */
1169   if (encoded[0] == '_' || encoded[0] == '<')
1170     goto Suppress;
1171
1172   len0 = strlen (encoded);
1173
1174   ada_remove_trailing_digits (encoded, &len0);
1175   ada_remove_po_subprogram_suffix (encoded, &len0);
1176
1177   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1178      the suffix is located before the current "end" of ENCODED.  We want
1179      to avoid re-matching parts of ENCODED that have previously been
1180      marked as discarded (by decrementing LEN0).  */
1181   p = strstr (encoded, "___");
1182   if (p != NULL && p - encoded < len0 - 3)
1183     {
1184       if (p[3] == 'X')
1185         len0 = p - encoded;
1186       else
1187         goto Suppress;
1188     }
1189
1190   /* Remove any trailing TKB suffix.  It tells us that this symbol
1191      is for the body of a task, but that information does not actually
1192      appear in the decoded name.  */
1193
1194   if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
1195     len0 -= 3;
1196
1197   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1198      from the TKB suffix because it is used for non-anonymous task
1199      bodies.  */
1200
1201   if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
1202     len0 -= 2;
1203
1204   /* Remove trailing "B" suffixes.  */
1205   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1206
1207   if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
1208     len0 -= 1;
1209
1210   /* Make decoded big enough for possible expansion by operator name.  */
1211
1212   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1213   decoded = decoding_buffer;
1214
1215   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1216
1217   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1218     {
1219       i = len0 - 2;
1220       while ((i >= 0 && isdigit (encoded[i]))
1221              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1222         i -= 1;
1223       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1224         len0 = i - 1;
1225       else if (encoded[i] == '$')
1226         len0 = i;
1227     }
1228
1229   /* The first few characters that are not alphabetic are not part
1230      of any encoding we use, so we can copy them over verbatim.  */
1231
1232   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1233     decoded[j] = encoded[i];
1234
1235   at_start_name = 1;
1236   while (i < len0)
1237     {
1238       /* Is this a symbol function?  */
1239       if (at_start_name && encoded[i] == 'O')
1240         {
1241           int k;
1242
1243           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1244             {
1245               int op_len = strlen (ada_opname_table[k].encoded);
1246               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1247                             op_len - 1) == 0)
1248                   && !isalnum (encoded[i + op_len]))
1249                 {
1250                   strcpy (decoded + j, ada_opname_table[k].decoded);
1251                   at_start_name = 0;
1252                   i += op_len;
1253                   j += strlen (ada_opname_table[k].decoded);
1254                   break;
1255                 }
1256             }
1257           if (ada_opname_table[k].encoded != NULL)
1258             continue;
1259         }
1260       at_start_name = 0;
1261
1262       /* Replace "TK__" with "__", which will eventually be translated
1263          into "." (just below).  */
1264
1265       if (i < len0 - 4 && startswith (encoded + i, "TK__"))
1266         i += 2;
1267
1268       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1269          be translated into "." (just below).  These are internal names
1270          generated for anonymous blocks inside which our symbol is nested.  */
1271
1272       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1273           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1274           && isdigit (encoded [i+4]))
1275         {
1276           int k = i + 5;
1277           
1278           while (k < len0 && isdigit (encoded[k]))
1279             k++;  /* Skip any extra digit.  */
1280
1281           /* Double-check that the "__B_{DIGITS}+" sequence we found
1282              is indeed followed by "__".  */
1283           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1284             i = k;
1285         }
1286
1287       /* Remove _E{DIGITS}+[sb] */
1288
1289       /* Just as for protected object subprograms, there are 2 categories
1290          of subprograms created by the compiler for each entry.  The first
1291          one implements the actual entry code, and has a suffix following
1292          the convention above; the second one implements the barrier and
1293          uses the same convention as above, except that the 'E' is replaced
1294          by a 'B'.
1295
1296          Just as above, we do not decode the name of barrier functions
1297          to give the user a clue that the code he is debugging has been
1298          internally generated.  */
1299
1300       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1301           && isdigit (encoded[i+2]))
1302         {
1303           int k = i + 3;
1304
1305           while (k < len0 && isdigit (encoded[k]))
1306             k++;
1307
1308           if (k < len0
1309               && (encoded[k] == 'b' || encoded[k] == 's'))
1310             {
1311               k++;
1312               /* Just as an extra precaution, make sure that if this
1313                  suffix is followed by anything else, it is a '_'.
1314                  Otherwise, we matched this sequence by accident.  */
1315               if (k == len0
1316                   || (k < len0 && encoded[k] == '_'))
1317                 i = k;
1318             }
1319         }
1320
1321       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1322          the GNAT front-end in protected object subprograms.  */
1323
1324       if (i < len0 + 3
1325           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1326         {
1327           /* Backtrack a bit up until we reach either the begining of
1328              the encoded name, or "__".  Make sure that we only find
1329              digits or lowercase characters.  */
1330           const char *ptr = encoded + i - 1;
1331
1332           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1333             ptr--;
1334           if (ptr < encoded
1335               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1336             i++;
1337         }
1338
1339       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1340         {
1341           /* This is a X[bn]* sequence not separated from the previous
1342              part of the name with a non-alpha-numeric character (in other
1343              words, immediately following an alpha-numeric character), then
1344              verify that it is placed at the end of the encoded name.  If
1345              not, then the encoding is not valid and we should abort the
1346              decoding.  Otherwise, just skip it, it is used in body-nested
1347              package names.  */
1348           do
1349             i += 1;
1350           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1351           if (i < len0)
1352             goto Suppress;
1353         }
1354       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1355         {
1356          /* Replace '__' by '.'.  */
1357           decoded[j] = '.';
1358           at_start_name = 1;
1359           i += 2;
1360           j += 1;
1361         }
1362       else
1363         {
1364           /* It's a character part of the decoded name, so just copy it
1365              over.  */
1366           decoded[j] = encoded[i];
1367           i += 1;
1368           j += 1;
1369         }
1370     }
1371   decoded[j] = '\000';
1372
1373   /* Decoded names should never contain any uppercase character.
1374      Double-check this, and abort the decoding if we find one.  */
1375
1376   for (i = 0; decoded[i] != '\0'; i += 1)
1377     if (isupper (decoded[i]) || decoded[i] == ' ')
1378       goto Suppress;
1379
1380   if (strcmp (decoded, encoded) == 0)
1381     return encoded;
1382   else
1383     return decoded;
1384
1385 Suppress:
1386   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1387   decoded = decoding_buffer;
1388   if (encoded[0] == '<')
1389     strcpy (decoded, encoded);
1390   else
1391     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1392   return decoded;
1393
1394 }
1395
1396 /* Table for keeping permanent unique copies of decoded names.  Once
1397    allocated, names in this table are never released.  While this is a
1398    storage leak, it should not be significant unless there are massive
1399    changes in the set of decoded names in successive versions of a 
1400    symbol table loaded during a single session.  */
1401 static struct htab *decoded_names_store;
1402
1403 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1404    in the language-specific part of GSYMBOL, if it has not been
1405    previously computed.  Tries to save the decoded name in the same
1406    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1407    in any case, the decoded symbol has a lifetime at least that of
1408    GSYMBOL).
1409    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1410    const, but nevertheless modified to a semantically equivalent form
1411    when a decoded name is cached in it.  */
1412
1413 const char *
1414 ada_decode_symbol (const struct general_symbol_info *arg)
1415 {
1416   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1417   const char **resultp =
1418     &gsymbol->language_specific.demangled_name;
1419
1420   if (!gsymbol->ada_mangled)
1421     {
1422       const char *decoded = ada_decode (gsymbol->name);
1423       struct obstack *obstack = gsymbol->language_specific.obstack;
1424
1425       gsymbol->ada_mangled = 1;
1426
1427       if (obstack != NULL)
1428         *resultp
1429           = (const char *) obstack_copy0 (obstack, decoded, strlen (decoded));
1430       else
1431         {
1432           /* Sometimes, we can't find a corresponding objfile, in
1433              which case, we put the result on the heap.  Since we only
1434              decode when needed, we hope this usually does not cause a
1435              significant memory leak (FIXME).  */
1436
1437           char **slot = (char **) htab_find_slot (decoded_names_store,
1438                                                   decoded, INSERT);
1439
1440           if (*slot == NULL)
1441             *slot = xstrdup (decoded);
1442           *resultp = *slot;
1443         }
1444     }
1445
1446   return *resultp;
1447 }
1448
1449 static char *
1450 ada_la_decode (const char *encoded, int options)
1451 {
1452   return xstrdup (ada_decode (encoded));
1453 }
1454
1455 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1456    suffixes that encode debugging information or leading _ada_ on
1457    SYM_NAME (see is_name_suffix commentary for the debugging
1458    information that is ignored).  If WILD, then NAME need only match a
1459    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1460    either argument is NULL.  */
1461
1462 static int
1463 match_name (const char *sym_name, const char *name, int wild)
1464 {
1465   if (sym_name == NULL || name == NULL)
1466     return 0;
1467   else if (wild)
1468     return wild_match (sym_name, name) == 0;
1469   else
1470     {
1471       int len_name = strlen (name);
1472
1473       return (strncmp (sym_name, name, len_name) == 0
1474               && is_name_suffix (sym_name + len_name))
1475         || (startswith (sym_name, "_ada_")
1476             && strncmp (sym_name + 5, name, len_name) == 0
1477             && is_name_suffix (sym_name + len_name + 5));
1478     }
1479 }
1480 \f
1481
1482                                 /* Arrays */
1483
1484 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1485    generated by the GNAT compiler to describe the index type used
1486    for each dimension of an array, check whether it follows the latest
1487    known encoding.  If not, fix it up to conform to the latest encoding.
1488    Otherwise, do nothing.  This function also does nothing if
1489    INDEX_DESC_TYPE is NULL.
1490
1491    The GNAT encoding used to describle the array index type evolved a bit.
1492    Initially, the information would be provided through the name of each
1493    field of the structure type only, while the type of these fields was
1494    described as unspecified and irrelevant.  The debugger was then expected
1495    to perform a global type lookup using the name of that field in order
1496    to get access to the full index type description.  Because these global
1497    lookups can be very expensive, the encoding was later enhanced to make
1498    the global lookup unnecessary by defining the field type as being
1499    the full index type description.
1500
1501    The purpose of this routine is to allow us to support older versions
1502    of the compiler by detecting the use of the older encoding, and by
1503    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1504    we essentially replace each field's meaningless type by the associated
1505    index subtype).  */
1506
1507 void
1508 ada_fixup_array_indexes_type (struct type *index_desc_type)
1509 {
1510   int i;
1511
1512   if (index_desc_type == NULL)
1513     return;
1514   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1515
1516   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1517      to check one field only, no need to check them all).  If not, return
1518      now.
1519
1520      If our INDEX_DESC_TYPE was generated using the older encoding,
1521      the field type should be a meaningless integer type whose name
1522      is not equal to the field name.  */
1523   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1524       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1525                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1526     return;
1527
1528   /* Fixup each field of INDEX_DESC_TYPE.  */
1529   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1530    {
1531      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1532      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1533
1534      if (raw_type)
1535        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1536    }
1537 }
1538
1539 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1540
1541 static char *bound_name[] = {
1542   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1543   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1544 };
1545
1546 /* Maximum number of array dimensions we are prepared to handle.  */
1547
1548 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1549
1550
1551 /* The desc_* routines return primitive portions of array descriptors
1552    (fat pointers).  */
1553
1554 /* The descriptor or array type, if any, indicated by TYPE; removes
1555    level of indirection, if needed.  */
1556
1557 static struct type *
1558 desc_base_type (struct type *type)
1559 {
1560   if (type == NULL)
1561     return NULL;
1562   type = ada_check_typedef (type);
1563   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1564     type = ada_typedef_target_type (type);
1565
1566   if (type != NULL
1567       && (TYPE_CODE (type) == TYPE_CODE_PTR
1568           || TYPE_CODE (type) == TYPE_CODE_REF))
1569     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1570   else
1571     return type;
1572 }
1573
1574 /* True iff TYPE indicates a "thin" array pointer type.  */
1575
1576 static int
1577 is_thin_pntr (struct type *type)
1578 {
1579   return
1580     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1581     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1582 }
1583
1584 /* The descriptor type for thin pointer type TYPE.  */
1585
1586 static struct type *
1587 thin_descriptor_type (struct type *type)
1588 {
1589   struct type *base_type = desc_base_type (type);
1590
1591   if (base_type == NULL)
1592     return NULL;
1593   if (is_suffix (ada_type_name (base_type), "___XVE"))
1594     return base_type;
1595   else
1596     {
1597       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1598
1599       if (alt_type == NULL)
1600         return base_type;
1601       else
1602         return alt_type;
1603     }
1604 }
1605
1606 /* A pointer to the array data for thin-pointer value VAL.  */
1607
1608 static struct value *
1609 thin_data_pntr (struct value *val)
1610 {
1611   struct type *type = ada_check_typedef (value_type (val));
1612   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1613
1614   data_type = lookup_pointer_type (data_type);
1615
1616   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1617     return value_cast (data_type, value_copy (val));
1618   else
1619     return value_from_longest (data_type, value_address (val));
1620 }
1621
1622 /* True iff TYPE indicates a "thick" array pointer type.  */
1623
1624 static int
1625 is_thick_pntr (struct type *type)
1626 {
1627   type = desc_base_type (type);
1628   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1629           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1630 }
1631
1632 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1633    pointer to one, the type of its bounds data; otherwise, NULL.  */
1634
1635 static struct type *
1636 desc_bounds_type (struct type *type)
1637 {
1638   struct type *r;
1639
1640   type = desc_base_type (type);
1641
1642   if (type == NULL)
1643     return NULL;
1644   else if (is_thin_pntr (type))
1645     {
1646       type = thin_descriptor_type (type);
1647       if (type == NULL)
1648         return NULL;
1649       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1650       if (r != NULL)
1651         return ada_check_typedef (r);
1652     }
1653   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1654     {
1655       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1656       if (r != NULL)
1657         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1658     }
1659   return NULL;
1660 }
1661
1662 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1663    one, a pointer to its bounds data.   Otherwise NULL.  */
1664
1665 static struct value *
1666 desc_bounds (struct value *arr)
1667 {
1668   struct type *type = ada_check_typedef (value_type (arr));
1669
1670   if (is_thin_pntr (type))
1671     {
1672       struct type *bounds_type =
1673         desc_bounds_type (thin_descriptor_type (type));
1674       LONGEST addr;
1675
1676       if (bounds_type == NULL)
1677         error (_("Bad GNAT array descriptor"));
1678
1679       /* NOTE: The following calculation is not really kosher, but
1680          since desc_type is an XVE-encoded type (and shouldn't be),
1681          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1682       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1683         addr = value_as_long (arr);
1684       else
1685         addr = value_address (arr);
1686
1687       return
1688         value_from_longest (lookup_pointer_type (bounds_type),
1689                             addr - TYPE_LENGTH (bounds_type));
1690     }
1691
1692   else if (is_thick_pntr (type))
1693     {
1694       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1695                                                _("Bad GNAT array descriptor"));
1696       struct type *p_bounds_type = value_type (p_bounds);
1697
1698       if (p_bounds_type
1699           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1700         {
1701           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1702
1703           if (TYPE_STUB (target_type))
1704             p_bounds = value_cast (lookup_pointer_type
1705                                    (ada_check_typedef (target_type)),
1706                                    p_bounds);
1707         }
1708       else
1709         error (_("Bad GNAT array descriptor"));
1710
1711       return p_bounds;
1712     }
1713   else
1714     return NULL;
1715 }
1716
1717 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1718    position of the field containing the address of the bounds data.  */
1719
1720 static int
1721 fat_pntr_bounds_bitpos (struct type *type)
1722 {
1723   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1724 }
1725
1726 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1727    size of the field containing the address of the bounds data.  */
1728
1729 static int
1730 fat_pntr_bounds_bitsize (struct type *type)
1731 {
1732   type = desc_base_type (type);
1733
1734   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1735     return TYPE_FIELD_BITSIZE (type, 1);
1736   else
1737     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1738 }
1739
1740 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1741    pointer to one, the type of its array data (a array-with-no-bounds type);
1742    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1743    data.  */
1744
1745 static struct type *
1746 desc_data_target_type (struct type *type)
1747 {
1748   type = desc_base_type (type);
1749
1750   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1751   if (is_thin_pntr (type))
1752     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1753   else if (is_thick_pntr (type))
1754     {
1755       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1756
1757       if (data_type
1758           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1759         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1760     }
1761
1762   return NULL;
1763 }
1764
1765 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1766    its array data.  */
1767
1768 static struct value *
1769 desc_data (struct value *arr)
1770 {
1771   struct type *type = value_type (arr);
1772
1773   if (is_thin_pntr (type))
1774     return thin_data_pntr (arr);
1775   else if (is_thick_pntr (type))
1776     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1777                              _("Bad GNAT array descriptor"));
1778   else
1779     return NULL;
1780 }
1781
1782
1783 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1784    position of the field containing the address of the data.  */
1785
1786 static int
1787 fat_pntr_data_bitpos (struct type *type)
1788 {
1789   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1790 }
1791
1792 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1793    size of the field containing the address of the data.  */
1794
1795 static int
1796 fat_pntr_data_bitsize (struct type *type)
1797 {
1798   type = desc_base_type (type);
1799
1800   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1801     return TYPE_FIELD_BITSIZE (type, 0);
1802   else
1803     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1804 }
1805
1806 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1807    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1808    bound, if WHICH is 1.  The first bound is I=1.  */
1809
1810 static struct value *
1811 desc_one_bound (struct value *bounds, int i, int which)
1812 {
1813   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1814                            _("Bad GNAT array descriptor bounds"));
1815 }
1816
1817 /* If BOUNDS is an array-bounds structure type, return the bit position
1818    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1819    bound, if WHICH is 1.  The first bound is I=1.  */
1820
1821 static int
1822 desc_bound_bitpos (struct type *type, int i, int which)
1823 {
1824   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1825 }
1826
1827 /* If BOUNDS is an array-bounds structure type, return the bit field size
1828    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1829    bound, if WHICH is 1.  The first bound is I=1.  */
1830
1831 static int
1832 desc_bound_bitsize (struct type *type, int i, int which)
1833 {
1834   type = desc_base_type (type);
1835
1836   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1837     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1838   else
1839     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1840 }
1841
1842 /* If TYPE is the type of an array-bounds structure, the type of its
1843    Ith bound (numbering from 1).  Otherwise, NULL.  */
1844
1845 static struct type *
1846 desc_index_type (struct type *type, int i)
1847 {
1848   type = desc_base_type (type);
1849
1850   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1851     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1852   else
1853     return NULL;
1854 }
1855
1856 /* The number of index positions in the array-bounds type TYPE.
1857    Return 0 if TYPE is NULL.  */
1858
1859 static int
1860 desc_arity (struct type *type)
1861 {
1862   type = desc_base_type (type);
1863
1864   if (type != NULL)
1865     return TYPE_NFIELDS (type) / 2;
1866   return 0;
1867 }
1868
1869 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1870    an array descriptor type (representing an unconstrained array
1871    type).  */
1872
1873 static int
1874 ada_is_direct_array_type (struct type *type)
1875 {
1876   if (type == NULL)
1877     return 0;
1878   type = ada_check_typedef (type);
1879   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1880           || ada_is_array_descriptor_type (type));
1881 }
1882
1883 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1884  * to one.  */
1885
1886 static int
1887 ada_is_array_type (struct type *type)
1888 {
1889   while (type != NULL 
1890          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1891              || TYPE_CODE (type) == TYPE_CODE_REF))
1892     type = TYPE_TARGET_TYPE (type);
1893   return ada_is_direct_array_type (type);
1894 }
1895
1896 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1897
1898 int
1899 ada_is_simple_array_type (struct type *type)
1900 {
1901   if (type == NULL)
1902     return 0;
1903   type = ada_check_typedef (type);
1904   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1905           || (TYPE_CODE (type) == TYPE_CODE_PTR
1906               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1907                  == TYPE_CODE_ARRAY));
1908 }
1909
1910 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1911
1912 int
1913 ada_is_array_descriptor_type (struct type *type)
1914 {
1915   struct type *data_type = desc_data_target_type (type);
1916
1917   if (type == NULL)
1918     return 0;
1919   type = ada_check_typedef (type);
1920   return (data_type != NULL
1921           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1922           && desc_arity (desc_bounds_type (type)) > 0);
1923 }
1924
1925 /* Non-zero iff type is a partially mal-formed GNAT array
1926    descriptor.  FIXME: This is to compensate for some problems with
1927    debugging output from GNAT.  Re-examine periodically to see if it
1928    is still needed.  */
1929
1930 int
1931 ada_is_bogus_array_descriptor (struct type *type)
1932 {
1933   return
1934     type != NULL
1935     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1936     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1937         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1938     && !ada_is_array_descriptor_type (type);
1939 }
1940
1941
1942 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1943    (fat pointer) returns the type of the array data described---specifically,
1944    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1945    in from the descriptor; otherwise, they are left unspecified.  If
1946    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1947    returns NULL.  The result is simply the type of ARR if ARR is not
1948    a descriptor.  */
1949 struct type *
1950 ada_type_of_array (struct value *arr, int bounds)
1951 {
1952   if (ada_is_constrained_packed_array_type (value_type (arr)))
1953     return decode_constrained_packed_array_type (value_type (arr));
1954
1955   if (!ada_is_array_descriptor_type (value_type (arr)))
1956     return value_type (arr);
1957
1958   if (!bounds)
1959     {
1960       struct type *array_type =
1961         ada_check_typedef (desc_data_target_type (value_type (arr)));
1962
1963       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1964         TYPE_FIELD_BITSIZE (array_type, 0) =
1965           decode_packed_array_bitsize (value_type (arr));
1966       
1967       return array_type;
1968     }
1969   else
1970     {
1971       struct type *elt_type;
1972       int arity;
1973       struct value *descriptor;
1974
1975       elt_type = ada_array_element_type (value_type (arr), -1);
1976       arity = ada_array_arity (value_type (arr));
1977
1978       if (elt_type == NULL || arity == 0)
1979         return ada_check_typedef (value_type (arr));
1980
1981       descriptor = desc_bounds (arr);
1982       if (value_as_long (descriptor) == 0)
1983         return NULL;
1984       while (arity > 0)
1985         {
1986           struct type *range_type = alloc_type_copy (value_type (arr));
1987           struct type *array_type = alloc_type_copy (value_type (arr));
1988           struct value *low = desc_one_bound (descriptor, arity, 0);
1989           struct value *high = desc_one_bound (descriptor, arity, 1);
1990
1991           arity -= 1;
1992           create_static_range_type (range_type, value_type (low),
1993                                     longest_to_int (value_as_long (low)),
1994                                     longest_to_int (value_as_long (high)));
1995           elt_type = create_array_type (array_type, elt_type, range_type);
1996
1997           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1998             {
1999               /* We need to store the element packed bitsize, as well as
2000                  recompute the array size, because it was previously
2001                  computed based on the unpacked element size.  */
2002               LONGEST lo = value_as_long (low);
2003               LONGEST hi = value_as_long (high);
2004
2005               TYPE_FIELD_BITSIZE (elt_type, 0) =
2006                 decode_packed_array_bitsize (value_type (arr));
2007               /* If the array has no element, then the size is already
2008                  zero, and does not need to be recomputed.  */
2009               if (lo < hi)
2010                 {
2011                   int array_bitsize =
2012                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2013
2014                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2015                 }
2016             }
2017         }
2018
2019       return lookup_pointer_type (elt_type);
2020     }
2021 }
2022
2023 /* If ARR does not represent an array, returns ARR unchanged.
2024    Otherwise, returns either a standard GDB array with bounds set
2025    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2026    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2027
2028 struct value *
2029 ada_coerce_to_simple_array_ptr (struct value *arr)
2030 {
2031   if (ada_is_array_descriptor_type (value_type (arr)))
2032     {
2033       struct type *arrType = ada_type_of_array (arr, 1);
2034
2035       if (arrType == NULL)
2036         return NULL;
2037       return value_cast (arrType, value_copy (desc_data (arr)));
2038     }
2039   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2040     return decode_constrained_packed_array (arr);
2041   else
2042     return arr;
2043 }
2044
2045 /* If ARR does not represent an array, returns ARR unchanged.
2046    Otherwise, returns a standard GDB array describing ARR (which may
2047    be ARR itself if it already is in the proper form).  */
2048
2049 struct value *
2050 ada_coerce_to_simple_array (struct value *arr)
2051 {
2052   if (ada_is_array_descriptor_type (value_type (arr)))
2053     {
2054       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2055
2056       if (arrVal == NULL)
2057         error (_("Bounds unavailable for null array pointer."));
2058       ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
2059       return value_ind (arrVal);
2060     }
2061   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2062     return decode_constrained_packed_array (arr);
2063   else
2064     return arr;
2065 }
2066
2067 /* If TYPE represents a GNAT array type, return it translated to an
2068    ordinary GDB array type (possibly with BITSIZE fields indicating
2069    packing).  For other types, is the identity.  */
2070
2071 struct type *
2072 ada_coerce_to_simple_array_type (struct type *type)
2073 {
2074   if (ada_is_constrained_packed_array_type (type))
2075     return decode_constrained_packed_array_type (type);
2076
2077   if (ada_is_array_descriptor_type (type))
2078     return ada_check_typedef (desc_data_target_type (type));
2079
2080   return type;
2081 }
2082
2083 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2084
2085 static int
2086 ada_is_packed_array_type  (struct type *type)
2087 {
2088   if (type == NULL)
2089     return 0;
2090   type = desc_base_type (type);
2091   type = ada_check_typedef (type);
2092   return
2093     ada_type_name (type) != NULL
2094     && strstr (ada_type_name (type), "___XP") != NULL;
2095 }
2096
2097 /* Non-zero iff TYPE represents a standard GNAT constrained
2098    packed-array type.  */
2099
2100 int
2101 ada_is_constrained_packed_array_type (struct type *type)
2102 {
2103   return ada_is_packed_array_type (type)
2104     && !ada_is_array_descriptor_type (type);
2105 }
2106
2107 /* Non-zero iff TYPE represents an array descriptor for a
2108    unconstrained packed-array type.  */
2109
2110 static int
2111 ada_is_unconstrained_packed_array_type (struct type *type)
2112 {
2113   return ada_is_packed_array_type (type)
2114     && ada_is_array_descriptor_type (type);
2115 }
2116
2117 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2118    return the size of its elements in bits.  */
2119
2120 static long
2121 decode_packed_array_bitsize (struct type *type)
2122 {
2123   const char *raw_name;
2124   const char *tail;
2125   long bits;
2126
2127   /* Access to arrays implemented as fat pointers are encoded as a typedef
2128      of the fat pointer type.  We need the name of the fat pointer type
2129      to do the decoding, so strip the typedef layer.  */
2130   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2131     type = ada_typedef_target_type (type);
2132
2133   raw_name = ada_type_name (ada_check_typedef (type));
2134   if (!raw_name)
2135     raw_name = ada_type_name (desc_base_type (type));
2136
2137   if (!raw_name)
2138     return 0;
2139
2140   tail = strstr (raw_name, "___XP");
2141   gdb_assert (tail != NULL);
2142
2143   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2144     {
2145       lim_warning
2146         (_("could not understand bit size information on packed array"));
2147       return 0;
2148     }
2149
2150   return bits;
2151 }
2152
2153 /* Given that TYPE is a standard GDB array type with all bounds filled
2154    in, and that the element size of its ultimate scalar constituents
2155    (that is, either its elements, or, if it is an array of arrays, its
2156    elements' elements, etc.) is *ELT_BITS, return an identical type,
2157    but with the bit sizes of its elements (and those of any
2158    constituent arrays) recorded in the BITSIZE components of its
2159    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2160    in bits.
2161
2162    Note that, for arrays whose index type has an XA encoding where
2163    a bound references a record discriminant, getting that discriminant,
2164    and therefore the actual value of that bound, is not possible
2165    because none of the given parameters gives us access to the record.
2166    This function assumes that it is OK in the context where it is being
2167    used to return an array whose bounds are still dynamic and where
2168    the length is arbitrary.  */
2169
2170 static struct type *
2171 constrained_packed_array_type (struct type *type, long *elt_bits)
2172 {
2173   struct type *new_elt_type;
2174   struct type *new_type;
2175   struct type *index_type_desc;
2176   struct type *index_type;
2177   LONGEST low_bound, high_bound;
2178
2179   type = ada_check_typedef (type);
2180   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2181     return type;
2182
2183   index_type_desc = ada_find_parallel_type (type, "___XA");
2184   if (index_type_desc)
2185     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2186                                       NULL);
2187   else
2188     index_type = TYPE_INDEX_TYPE (type);
2189
2190   new_type = alloc_type_copy (type);
2191   new_elt_type =
2192     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2193                                    elt_bits);
2194   create_array_type (new_type, new_elt_type, index_type);
2195   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2196   TYPE_NAME (new_type) = ada_type_name (type);
2197
2198   if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2199        && is_dynamic_type (check_typedef (index_type)))
2200       || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2201     low_bound = high_bound = 0;
2202   if (high_bound < low_bound)
2203     *elt_bits = TYPE_LENGTH (new_type) = 0;
2204   else
2205     {
2206       *elt_bits *= (high_bound - low_bound + 1);
2207       TYPE_LENGTH (new_type) =
2208         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2209     }
2210
2211   TYPE_FIXED_INSTANCE (new_type) = 1;
2212   return new_type;
2213 }
2214
2215 /* The array type encoded by TYPE, where
2216    ada_is_constrained_packed_array_type (TYPE).  */
2217
2218 static struct type *
2219 decode_constrained_packed_array_type (struct type *type)
2220 {
2221   const char *raw_name = ada_type_name (ada_check_typedef (type));
2222   char *name;
2223   const char *tail;
2224   struct type *shadow_type;
2225   long bits;
2226
2227   if (!raw_name)
2228     raw_name = ada_type_name (desc_base_type (type));
2229
2230   if (!raw_name)
2231     return NULL;
2232
2233   name = (char *) alloca (strlen (raw_name) + 1);
2234   tail = strstr (raw_name, "___XP");
2235   type = desc_base_type (type);
2236
2237   memcpy (name, raw_name, tail - raw_name);
2238   name[tail - raw_name] = '\000';
2239
2240   shadow_type = ada_find_parallel_type_with_name (type, name);
2241
2242   if (shadow_type == NULL)
2243     {
2244       lim_warning (_("could not find bounds information on packed array"));
2245       return NULL;
2246     }
2247   shadow_type = check_typedef (shadow_type);
2248
2249   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2250     {
2251       lim_warning (_("could not understand bounds "
2252                      "information on packed array"));
2253       return NULL;
2254     }
2255
2256   bits = decode_packed_array_bitsize (type);
2257   return constrained_packed_array_type (shadow_type, &bits);
2258 }
2259
2260 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2261    array, returns a simple array that denotes that array.  Its type is a
2262    standard GDB array type except that the BITSIZEs of the array
2263    target types are set to the number of bits in each element, and the
2264    type length is set appropriately.  */
2265
2266 static struct value *
2267 decode_constrained_packed_array (struct value *arr)
2268 {
2269   struct type *type;
2270
2271   /* If our value is a pointer, then dereference it. Likewise if
2272      the value is a reference.  Make sure that this operation does not
2273      cause the target type to be fixed, as this would indirectly cause
2274      this array to be decoded.  The rest of the routine assumes that
2275      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2276      and "value_ind" routines to perform the dereferencing, as opposed
2277      to using "ada_coerce_ref" or "ada_value_ind".  */
2278   arr = coerce_ref (arr);
2279   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2280     arr = value_ind (arr);
2281
2282   type = decode_constrained_packed_array_type (value_type (arr));
2283   if (type == NULL)
2284     {
2285       error (_("can't unpack array"));
2286       return NULL;
2287     }
2288
2289   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2290       && ada_is_modular_type (value_type (arr)))
2291     {
2292        /* This is a (right-justified) modular type representing a packed
2293          array with no wrapper.  In order to interpret the value through
2294          the (left-justified) packed array type we just built, we must
2295          first left-justify it.  */
2296       int bit_size, bit_pos;
2297       ULONGEST mod;
2298
2299       mod = ada_modulus (value_type (arr)) - 1;
2300       bit_size = 0;
2301       while (mod > 0)
2302         {
2303           bit_size += 1;
2304           mod >>= 1;
2305         }
2306       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2307       arr = ada_value_primitive_packed_val (arr, NULL,
2308                                             bit_pos / HOST_CHAR_BIT,
2309                                             bit_pos % HOST_CHAR_BIT,
2310                                             bit_size,
2311                                             type);
2312     }
2313
2314   return coerce_unspec_val_to_type (arr, type);
2315 }
2316
2317
2318 /* The value of the element of packed array ARR at the ARITY indices
2319    given in IND.   ARR must be a simple array.  */
2320
2321 static struct value *
2322 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2323 {
2324   int i;
2325   int bits, elt_off, bit_off;
2326   long elt_total_bit_offset;
2327   struct type *elt_type;
2328   struct value *v;
2329
2330   bits = 0;
2331   elt_total_bit_offset = 0;
2332   elt_type = ada_check_typedef (value_type (arr));
2333   for (i = 0; i < arity; i += 1)
2334     {
2335       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2336           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2337         error
2338           (_("attempt to do packed indexing of "
2339              "something other than a packed array"));
2340       else
2341         {
2342           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2343           LONGEST lowerbound, upperbound;
2344           LONGEST idx;
2345
2346           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2347             {
2348               lim_warning (_("don't know bounds of array"));
2349               lowerbound = upperbound = 0;
2350             }
2351
2352           idx = pos_atr (ind[i]);
2353           if (idx < lowerbound || idx > upperbound)
2354             lim_warning (_("packed array index %ld out of bounds"),
2355                          (long) idx);
2356           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2357           elt_total_bit_offset += (idx - lowerbound) * bits;
2358           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2359         }
2360     }
2361   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2362   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2363
2364   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2365                                       bits, elt_type);
2366   return v;
2367 }
2368
2369 /* Non-zero iff TYPE includes negative integer values.  */
2370
2371 static int
2372 has_negatives (struct type *type)
2373 {
2374   switch (TYPE_CODE (type))
2375     {
2376     default:
2377       return 0;
2378     case TYPE_CODE_INT:
2379       return !TYPE_UNSIGNED (type);
2380     case TYPE_CODE_RANGE:
2381       return TYPE_LOW_BOUND (type) < 0;
2382     }
2383 }
2384
2385 /* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
2386    unpack that data into UNPACKED.  UNPACKED_LEN is the size in bytes of
2387    the unpacked buffer.
2388
2389    The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2390    enough to contain at least BIT_OFFSET bits.  If not, an error is raised.
2391
2392    IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2393    zero otherwise.
2394
2395    IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
2396
2397    IS_SCALAR is nonzero if the data corresponds to a signed type.  */
2398
2399 static void
2400 ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2401                           gdb_byte *unpacked, int unpacked_len,
2402                           int is_big_endian, int is_signed_type,
2403                           int is_scalar)
2404 {
2405   int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2406   int src_idx;                  /* Index into the source area */
2407   int src_bytes_left;           /* Number of source bytes left to process.  */
2408   int srcBitsLeft;              /* Number of source bits left to move */
2409   int unusedLS;                 /* Number of bits in next significant
2410                                    byte of source that are unused */
2411
2412   int unpacked_idx;             /* Index into the unpacked buffer */
2413   int unpacked_bytes_left;      /* Number of bytes left to set in unpacked.  */
2414
2415   unsigned long accum;          /* Staging area for bits being transferred */
2416   int accumSize;                /* Number of meaningful bits in accum */
2417   unsigned char sign;
2418
2419   /* Transmit bytes from least to most significant; delta is the direction
2420      the indices move.  */
2421   int delta = is_big_endian ? -1 : 1;
2422
2423   /* Make sure that unpacked is large enough to receive the BIT_SIZE
2424      bits from SRC.  .*/
2425   if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2426     error (_("Cannot unpack %d bits into buffer of %d bytes"),
2427            bit_size, unpacked_len);
2428
2429   srcBitsLeft = bit_size;
2430   src_bytes_left = src_len;
2431   unpacked_bytes_left = unpacked_len;
2432   sign = 0;
2433
2434   if (is_big_endian)
2435     {
2436       src_idx = src_len - 1;
2437       if (is_signed_type
2438           && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2439         sign = ~0;
2440
2441       unusedLS =
2442         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2443         % HOST_CHAR_BIT;
2444
2445       if (is_scalar)
2446         {
2447           accumSize = 0;
2448           unpacked_idx = unpacked_len - 1;
2449         }
2450       else
2451         {
2452           /* Non-scalar values must be aligned at a byte boundary...  */
2453           accumSize =
2454             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2455           /* ... And are placed at the beginning (most-significant) bytes
2456              of the target.  */
2457           unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2458           unpacked_bytes_left = unpacked_idx + 1;
2459         }
2460     }
2461   else
2462     {
2463       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2464
2465       src_idx = unpacked_idx = 0;
2466       unusedLS = bit_offset;
2467       accumSize = 0;
2468
2469       if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
2470         sign = ~0;
2471     }
2472
2473   accum = 0;
2474   while (src_bytes_left > 0)
2475     {
2476       /* Mask for removing bits of the next source byte that are not
2477          part of the value.  */
2478       unsigned int unusedMSMask =
2479         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2480         1;
2481       /* Sign-extend bits for this byte.  */
2482       unsigned int signMask = sign & ~unusedMSMask;
2483
2484       accum |=
2485         (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2486       accumSize += HOST_CHAR_BIT - unusedLS;
2487       if (accumSize >= HOST_CHAR_BIT)
2488         {
2489           unpacked[unpacked_idx] = accum & ~(~0L << HOST_CHAR_BIT);
2490           accumSize -= HOST_CHAR_BIT;
2491           accum >>= HOST_CHAR_BIT;
2492           unpacked_bytes_left -= 1;
2493           unpacked_idx += delta;
2494         }
2495       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2496       unusedLS = 0;
2497       src_bytes_left -= 1;
2498       src_idx += delta;
2499     }
2500   while (unpacked_bytes_left > 0)
2501     {
2502       accum |= sign << accumSize;
2503       unpacked[unpacked_idx] = accum & ~(~0L << HOST_CHAR_BIT);
2504       accumSize -= HOST_CHAR_BIT;
2505       if (accumSize < 0)
2506         accumSize = 0;
2507       accum >>= HOST_CHAR_BIT;
2508       unpacked_bytes_left -= 1;
2509       unpacked_idx += delta;
2510     }
2511 }
2512
2513 /* Create a new value of type TYPE from the contents of OBJ starting
2514    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2515    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2516    assigning through the result will set the field fetched from.
2517    VALADDR is ignored unless OBJ is NULL, in which case,
2518    VALADDR+OFFSET must address the start of storage containing the 
2519    packed value.  The value returned  in this case is never an lval.
2520    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2521
2522 struct value *
2523 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2524                                 long offset, int bit_offset, int bit_size,
2525                                 struct type *type)
2526 {
2527   struct value *v;
2528   const gdb_byte *src;                /* First byte containing data to unpack */
2529   gdb_byte *unpacked;
2530   const int is_scalar = is_scalar_type (type);
2531   const int is_big_endian = gdbarch_bits_big_endian (get_type_arch (type));
2532   gdb_byte *staging = NULL;
2533   int staging_len = 0;
2534   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
2535
2536   type = ada_check_typedef (type);
2537
2538   if (obj == NULL)
2539     src = valaddr + offset;
2540   else
2541     src = value_contents (obj) + offset;
2542
2543   if (is_dynamic_type (type))
2544     {
2545       /* The length of TYPE might by dynamic, so we need to resolve
2546          TYPE in order to know its actual size, which we then use
2547          to create the contents buffer of the value we return.
2548          The difficulty is that the data containing our object is
2549          packed, and therefore maybe not at a byte boundary.  So, what
2550          we do, is unpack the data into a byte-aligned buffer, and then
2551          use that buffer as our object's value for resolving the type.  */
2552       staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2553       staging = (gdb_byte *) malloc (staging_len);
2554       make_cleanup (xfree, staging);
2555
2556       ada_unpack_from_contents (src, bit_offset, bit_size,
2557                                 staging, staging_len,
2558                                 is_big_endian, has_negatives (type),
2559                                 is_scalar);
2560       type = resolve_dynamic_type (type, staging, 0);
2561       if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2562         {
2563           /* This happens when the length of the object is dynamic,
2564              and is actually smaller than the space reserved for it.
2565              For instance, in an array of variant records, the bit_size
2566              we're given is the array stride, which is constant and
2567              normally equal to the maximum size of its element.
2568              But, in reality, each element only actually spans a portion
2569              of that stride.  */
2570           bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2571         }
2572     }
2573
2574   if (obj == NULL)
2575     {
2576       v = allocate_value (type);
2577       src = valaddr + offset;
2578     }
2579   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2580     {
2581       int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2582       gdb_byte *buf;
2583
2584       v = value_at (type, value_address (obj) + offset);
2585       buf = (gdb_byte *) alloca (src_len);
2586       read_memory (value_address (v), buf, src_len);
2587       src = buf;
2588     }
2589   else
2590     {
2591       v = allocate_value (type);
2592       src = value_contents (obj) + offset;
2593     }
2594
2595   if (obj != NULL)
2596     {
2597       long new_offset = offset;
2598
2599       set_value_component_location (v, obj);
2600       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2601       set_value_bitsize (v, bit_size);
2602       if (value_bitpos (v) >= HOST_CHAR_BIT)
2603         {
2604           ++new_offset;
2605           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2606         }
2607       set_value_offset (v, new_offset);
2608
2609       /* Also set the parent value.  This is needed when trying to
2610          assign a new value (in inferior memory).  */
2611       set_value_parent (v, obj);
2612     }
2613   else
2614     set_value_bitsize (v, bit_size);
2615   unpacked = value_contents_writeable (v);
2616
2617   if (bit_size == 0)
2618     {
2619       memset (unpacked, 0, TYPE_LENGTH (type));
2620       do_cleanups (old_chain);
2621       return v;
2622     }
2623
2624   if (staging != NULL && staging_len == TYPE_LENGTH (type))
2625     {
2626       /* Small short-cut: If we've unpacked the data into a buffer
2627          of the same size as TYPE's length, then we can reuse that,
2628          instead of doing the unpacking again.  */
2629       memcpy (unpacked, staging, staging_len);
2630     }
2631   else
2632     ada_unpack_from_contents (src, bit_offset, bit_size,
2633                               unpacked, TYPE_LENGTH (type),
2634                               is_big_endian, has_negatives (type), is_scalar);
2635
2636   do_cleanups (old_chain);
2637   return v;
2638 }
2639
2640 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2641    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2642    not overlap.  */
2643 static void
2644 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2645            int src_offset, int n, int bits_big_endian_p)
2646 {
2647   unsigned int accum, mask;
2648   int accum_bits, chunk_size;
2649
2650   target += targ_offset / HOST_CHAR_BIT;
2651   targ_offset %= HOST_CHAR_BIT;
2652   source += src_offset / HOST_CHAR_BIT;
2653   src_offset %= HOST_CHAR_BIT;
2654   if (bits_big_endian_p)
2655     {
2656       accum = (unsigned char) *source;
2657       source += 1;
2658       accum_bits = HOST_CHAR_BIT - src_offset;
2659
2660       while (n > 0)
2661         {
2662           int unused_right;
2663
2664           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2665           accum_bits += HOST_CHAR_BIT;
2666           source += 1;
2667           chunk_size = HOST_CHAR_BIT - targ_offset;
2668           if (chunk_size > n)
2669             chunk_size = n;
2670           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2671           mask = ((1 << chunk_size) - 1) << unused_right;
2672           *target =
2673             (*target & ~mask)
2674             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2675           n -= chunk_size;
2676           accum_bits -= chunk_size;
2677           target += 1;
2678           targ_offset = 0;
2679         }
2680     }
2681   else
2682     {
2683       accum = (unsigned char) *source >> src_offset;
2684       source += 1;
2685       accum_bits = HOST_CHAR_BIT - src_offset;
2686
2687       while (n > 0)
2688         {
2689           accum = accum + ((unsigned char) *source << accum_bits);
2690           accum_bits += HOST_CHAR_BIT;
2691           source += 1;
2692           chunk_size = HOST_CHAR_BIT - targ_offset;
2693           if (chunk_size > n)
2694             chunk_size = n;
2695           mask = ((1 << chunk_size) - 1) << targ_offset;
2696           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2697           n -= chunk_size;
2698           accum_bits -= chunk_size;
2699           accum >>= chunk_size;
2700           target += 1;
2701           targ_offset = 0;
2702         }
2703     }
2704 }
2705
2706 /* Store the contents of FROMVAL into the location of TOVAL.
2707    Return a new value with the location of TOVAL and contents of
2708    FROMVAL.   Handles assignment into packed fields that have
2709    floating-point or non-scalar types.  */
2710
2711 static struct value *
2712 ada_value_assign (struct value *toval, struct value *fromval)
2713 {
2714   struct type *type = value_type (toval);
2715   int bits = value_bitsize (toval);
2716
2717   toval = ada_coerce_ref (toval);
2718   fromval = ada_coerce_ref (fromval);
2719
2720   if (ada_is_direct_array_type (value_type (toval)))
2721     toval = ada_coerce_to_simple_array (toval);
2722   if (ada_is_direct_array_type (value_type (fromval)))
2723     fromval = ada_coerce_to_simple_array (fromval);
2724
2725   if (!deprecated_value_modifiable (toval))
2726     error (_("Left operand of assignment is not a modifiable lvalue."));
2727
2728   if (VALUE_LVAL (toval) == lval_memory
2729       && bits > 0
2730       && (TYPE_CODE (type) == TYPE_CODE_FLT
2731           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2732     {
2733       int len = (value_bitpos (toval)
2734                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2735       int from_size;
2736       gdb_byte *buffer = (gdb_byte *) alloca (len);
2737       struct value *val;
2738       CORE_ADDR to_addr = value_address (toval);
2739
2740       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2741         fromval = value_cast (type, fromval);
2742
2743       read_memory (to_addr, buffer, len);
2744       from_size = value_bitsize (fromval);
2745       if (from_size == 0)
2746         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2747       if (gdbarch_bits_big_endian (get_type_arch (type)))
2748         move_bits (buffer, value_bitpos (toval),
2749                    value_contents (fromval), from_size - bits, bits, 1);
2750       else
2751         move_bits (buffer, value_bitpos (toval),
2752                    value_contents (fromval), 0, bits, 0);
2753       write_memory_with_notification (to_addr, buffer, len);
2754
2755       val = value_copy (toval);
2756       memcpy (value_contents_raw (val), value_contents (fromval),
2757               TYPE_LENGTH (type));
2758       deprecated_set_value_type (val, type);
2759
2760       return val;
2761     }
2762
2763   return value_assign (toval, fromval);
2764 }
2765
2766
2767 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2768    CONTAINER, assign the contents of VAL to COMPONENTS's place in
2769    CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not
2770    COMPONENT, and not the inferior's memory.  The current contents
2771    of COMPONENT are ignored.
2772
2773    Although not part of the initial design, this function also works
2774    when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2775    had a null address, and COMPONENT had an address which is equal to
2776    its offset inside CONTAINER.  */
2777
2778 static void
2779 value_assign_to_component (struct value *container, struct value *component,
2780                            struct value *val)
2781 {
2782   LONGEST offset_in_container =
2783     (LONGEST)  (value_address (component) - value_address (container));
2784   int bit_offset_in_container =
2785     value_bitpos (component) - value_bitpos (container);
2786   int bits;
2787
2788   val = value_cast (value_type (component), val);
2789
2790   if (value_bitsize (component) == 0)
2791     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2792   else
2793     bits = value_bitsize (component);
2794
2795   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2796     move_bits (value_contents_writeable (container) + offset_in_container,
2797                value_bitpos (container) + bit_offset_in_container,
2798                value_contents (val),
2799                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2800                bits, 1);
2801   else
2802     move_bits (value_contents_writeable (container) + offset_in_container,
2803                value_bitpos (container) + bit_offset_in_container,
2804                value_contents (val), 0, bits, 0);
2805 }
2806
2807 /* The value of the element of array ARR at the ARITY indices given in IND.
2808    ARR may be either a simple array, GNAT array descriptor, or pointer
2809    thereto.  */
2810
2811 struct value *
2812 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2813 {
2814   int k;
2815   struct value *elt;
2816   struct type *elt_type;
2817
2818   elt = ada_coerce_to_simple_array (arr);
2819
2820   elt_type = ada_check_typedef (value_type (elt));
2821   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2822       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2823     return value_subscript_packed (elt, arity, ind);
2824
2825   for (k = 0; k < arity; k += 1)
2826     {
2827       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2828         error (_("too many subscripts (%d expected)"), k);
2829       elt = value_subscript (elt, pos_atr (ind[k]));
2830     }
2831   return elt;
2832 }
2833
2834 /* Assuming ARR is a pointer to a GDB array, the value of the element
2835    of *ARR at the ARITY indices given in IND.
2836    Does not read the entire array into memory.
2837
2838    Note: Unlike what one would expect, this function is used instead of
2839    ada_value_subscript for basically all non-packed array types.  The reason
2840    for this is that a side effect of doing our own pointer arithmetics instead
2841    of relying on value_subscript is that there is no implicit typedef peeling.
2842    This is important for arrays of array accesses, where it allows us to
2843    preserve the fact that the array's element is an array access, where the
2844    access part os encoded in a typedef layer.  */
2845
2846 static struct value *
2847 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2848 {
2849   int k;
2850   struct value *array_ind = ada_value_ind (arr);
2851   struct type *type
2852     = check_typedef (value_enclosing_type (array_ind));
2853
2854   if (TYPE_CODE (type) == TYPE_CODE_ARRAY
2855       && TYPE_FIELD_BITSIZE (type, 0) > 0)
2856     return value_subscript_packed (array_ind, arity, ind);
2857
2858   for (k = 0; k < arity; k += 1)
2859     {
2860       LONGEST lwb, upb;
2861       struct value *lwb_value;
2862
2863       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2864         error (_("too many subscripts (%d expected)"), k);
2865       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2866                         value_copy (arr));
2867       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2868       lwb_value = value_from_longest (value_type(ind[k]), lwb);
2869       arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value));
2870       type = TYPE_TARGET_TYPE (type);
2871     }
2872
2873   return value_ind (arr);
2874 }
2875
2876 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2877    actual type of ARRAY_PTR is ignored), returns the Ada slice of
2878    HIGH'Pos-LOW'Pos+1 elements starting at index LOW.  The lower bound of
2879    this array is LOW, as per Ada rules.  */
2880 static struct value *
2881 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2882                           int low, int high)
2883 {
2884   struct type *type0 = ada_check_typedef (type);
2885   struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
2886   struct type *index_type
2887     = create_static_range_type (NULL, base_index_type, low, high);
2888   struct type *slice_type =
2889     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2890   int base_low =  ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
2891   LONGEST base_low_pos, low_pos;
2892   CORE_ADDR base;
2893
2894   if (!discrete_position (base_index_type, low, &low_pos)
2895       || !discrete_position (base_index_type, base_low, &base_low_pos))
2896     {
2897       warning (_("unable to get positions in slice, use bounds instead"));
2898       low_pos = low;
2899       base_low_pos = base_low;
2900     }
2901
2902   base = value_as_address (array_ptr)
2903     + ((low_pos - base_low_pos)
2904        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2905   return value_at_lazy (slice_type, base);
2906 }
2907
2908
2909 static struct value *
2910 ada_value_slice (struct value *array, int low, int high)
2911 {
2912   struct type *type = ada_check_typedef (value_type (array));
2913   struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2914   struct type *index_type
2915     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2916   struct type *slice_type =
2917     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2918   LONGEST low_pos, high_pos;
2919
2920   if (!discrete_position (base_index_type, low, &low_pos)
2921       || !discrete_position (base_index_type, high, &high_pos))
2922     {
2923       warning (_("unable to get positions in slice, use bounds instead"));
2924       low_pos = low;
2925       high_pos = high;
2926     }
2927
2928   return value_cast (slice_type,
2929                      value_slice (array, low, high_pos - low_pos + 1));
2930 }
2931
2932 /* If type is a record type in the form of a standard GNAT array
2933    descriptor, returns the number of dimensions for type.  If arr is a
2934    simple array, returns the number of "array of"s that prefix its
2935    type designation.  Otherwise, returns 0.  */
2936
2937 int
2938 ada_array_arity (struct type *type)
2939 {
2940   int arity;
2941
2942   if (type == NULL)
2943     return 0;
2944
2945   type = desc_base_type (type);
2946
2947   arity = 0;
2948   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2949     return desc_arity (desc_bounds_type (type));
2950   else
2951     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2952       {
2953         arity += 1;
2954         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2955       }
2956
2957   return arity;
2958 }
2959
2960 /* If TYPE is a record type in the form of a standard GNAT array
2961    descriptor or a simple array type, returns the element type for
2962    TYPE after indexing by NINDICES indices, or by all indices if
2963    NINDICES is -1.  Otherwise, returns NULL.  */
2964
2965 struct type *
2966 ada_array_element_type (struct type *type, int nindices)
2967 {
2968   type = desc_base_type (type);
2969
2970   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2971     {
2972       int k;
2973       struct type *p_array_type;
2974
2975       p_array_type = desc_data_target_type (type);
2976
2977       k = ada_array_arity (type);
2978       if (k == 0)
2979         return NULL;
2980
2981       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2982       if (nindices >= 0 && k > nindices)
2983         k = nindices;
2984       while (k > 0 && p_array_type != NULL)
2985         {
2986           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2987           k -= 1;
2988         }
2989       return p_array_type;
2990     }
2991   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2992     {
2993       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2994         {
2995           type = TYPE_TARGET_TYPE (type);
2996           nindices -= 1;
2997         }
2998       return type;
2999     }
3000
3001   return NULL;
3002 }
3003
3004 /* The type of nth index in arrays of given type (n numbering from 1).
3005    Does not examine memory.  Throws an error if N is invalid or TYPE
3006    is not an array type.  NAME is the name of the Ada attribute being
3007    evaluated ('range, 'first, 'last, or 'length); it is used in building
3008    the error message.  */
3009
3010 static struct type *
3011 ada_index_type (struct type *type, int n, const char *name)
3012 {
3013   struct type *result_type;
3014
3015   type = desc_base_type (type);
3016
3017   if (n < 0 || n > ada_array_arity (type))
3018     error (_("invalid dimension number to '%s"), name);
3019
3020   if (ada_is_simple_array_type (type))
3021     {
3022       int i;
3023
3024       for (i = 1; i < n; i += 1)
3025         type = TYPE_TARGET_TYPE (type);
3026       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
3027       /* FIXME: The stabs type r(0,0);bound;bound in an array type
3028          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
3029          perhaps stabsread.c would make more sense.  */
3030       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
3031         result_type = NULL;
3032     }
3033   else
3034     {
3035       result_type = desc_index_type (desc_bounds_type (type), n);
3036       if (result_type == NULL)
3037         error (_("attempt to take bound of something that is not an array"));
3038     }
3039
3040   return result_type;
3041 }
3042
3043 /* Given that arr is an array type, returns the lower bound of the
3044    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
3045    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
3046    array-descriptor type.  It works for other arrays with bounds supplied
3047    by run-time quantities other than discriminants.  */
3048
3049 static LONGEST
3050 ada_array_bound_from_type (struct type *arr_type, int n, int which)
3051 {
3052   struct type *type, *index_type_desc, *index_type;
3053   int i;
3054
3055   gdb_assert (which == 0 || which == 1);
3056
3057   if (ada_is_constrained_packed_array_type (arr_type))
3058     arr_type = decode_constrained_packed_array_type (arr_type);
3059
3060   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
3061     return (LONGEST) - which;
3062
3063   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
3064     type = TYPE_TARGET_TYPE (arr_type);
3065   else
3066     type = arr_type;
3067
3068   if (TYPE_FIXED_INSTANCE (type))
3069     {
3070       /* The array has already been fixed, so we do not need to
3071          check the parallel ___XA type again.  That encoding has
3072          already been applied, so ignore it now.  */
3073       index_type_desc = NULL;
3074     }
3075   else
3076     {
3077       index_type_desc = ada_find_parallel_type (type, "___XA");
3078       ada_fixup_array_indexes_type (index_type_desc);
3079     }
3080
3081   if (index_type_desc != NULL)
3082     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
3083                                       NULL);
3084   else
3085     {
3086       struct type *elt_type = check_typedef (type);
3087
3088       for (i = 1; i < n; i++)
3089         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
3090
3091       index_type = TYPE_INDEX_TYPE (elt_type);
3092     }
3093
3094   return
3095     (LONGEST) (which == 0
3096                ? ada_discrete_type_low_bound (index_type)
3097                : ada_discrete_type_high_bound (index_type));
3098 }
3099
3100 /* Given that arr is an array value, returns the lower bound of the
3101    nth index (numbering from 1) if WHICH is 0, and the upper bound if
3102    WHICH is 1.  This routine will also work for arrays with bounds
3103    supplied by run-time quantities other than discriminants.  */
3104
3105 static LONGEST
3106 ada_array_bound (struct value *arr, int n, int which)
3107 {
3108   struct type *arr_type;
3109
3110   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3111     arr = value_ind (arr);
3112   arr_type = value_enclosing_type (arr);
3113
3114   if (ada_is_constrained_packed_array_type (arr_type))
3115     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
3116   else if (ada_is_simple_array_type (arr_type))
3117     return ada_array_bound_from_type (arr_type, n, which);
3118   else
3119     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
3120 }
3121
3122 /* Given that arr is an array value, returns the length of the
3123    nth index.  This routine will also work for arrays with bounds
3124    supplied by run-time quantities other than discriminants.
3125    Does not work for arrays indexed by enumeration types with representation
3126    clauses at the moment.  */
3127
3128 static LONGEST
3129 ada_array_length (struct value *arr, int n)
3130 {
3131   struct type *arr_type, *index_type;
3132   int low, high;
3133
3134   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3135     arr = value_ind (arr);
3136   arr_type = value_enclosing_type (arr);
3137
3138   if (ada_is_constrained_packed_array_type (arr_type))
3139     return ada_array_length (decode_constrained_packed_array (arr), n);
3140
3141   if (ada_is_simple_array_type (arr_type))
3142     {
3143       low = ada_array_bound_from_type (arr_type, n, 0);
3144       high = ada_array_bound_from_type (arr_type, n, 1);
3145     }
3146   else
3147     {
3148       low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3149       high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3150     }
3151
3152   arr_type = check_typedef (arr_type);
3153   index_type = TYPE_INDEX_TYPE (arr_type);
3154   if (index_type != NULL)
3155     {
3156       struct type *base_type;
3157       if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
3158         base_type = TYPE_TARGET_TYPE (index_type);
3159       else
3160         base_type = index_type;
3161
3162       low = pos_atr (value_from_longest (base_type, low));
3163       high = pos_atr (value_from_longest (base_type, high));
3164     }
3165   return high - low + 1;
3166 }
3167
3168 /* An empty array whose type is that of ARR_TYPE (an array type),
3169    with bounds LOW to LOW-1.  */
3170
3171 static struct value *
3172 empty_array (struct type *arr_type, int low)
3173 {
3174   struct type *arr_type0 = ada_check_typedef (arr_type);
3175   struct type *index_type
3176     = create_static_range_type
3177         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
3178   struct type *elt_type = ada_array_element_type (arr_type0, 1);
3179
3180   return allocate_value (create_array_type (NULL, elt_type, index_type));
3181 }
3182 \f
3183
3184                                 /* Name resolution */
3185
3186 /* The "decoded" name for the user-definable Ada operator corresponding
3187    to OP.  */
3188
3189 static const char *
3190 ada_decoded_op_name (enum exp_opcode op)
3191 {
3192   int i;
3193
3194   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3195     {
3196       if (ada_opname_table[i].op == op)
3197         return ada_opname_table[i].decoded;
3198     }
3199   error (_("Could not find operator name for opcode"));
3200 }
3201
3202
3203 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3204    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3205    undefined namespace) and converts operators that are
3206    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3207    non-null, it provides a preferred result type [at the moment, only
3208    type void has any effect---causing procedures to be preferred over
3209    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3210    return type is preferred.  May change (expand) *EXP.  */
3211
3212 static void
3213 resolve (struct expression **expp, int void_context_p)
3214 {
3215   struct type *context_type = NULL;
3216   int pc = 0;
3217
3218   if (void_context_p)
3219     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3220
3221   resolve_subexp (expp, &pc, 1, context_type);
3222 }
3223
3224 /* Resolve the operator of the subexpression beginning at
3225    position *POS of *EXPP.  "Resolving" consists of replacing
3226    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3227    with their resolutions, replacing built-in operators with
3228    function calls to user-defined operators, where appropriate, and,
3229    when DEPROCEDURE_P is non-zero, converting function-valued variables
3230    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3231    are as in ada_resolve, above.  */
3232
3233 static struct value *
3234 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3235                 struct type *context_type)
3236 {
3237   int pc = *pos;
3238   int i;
3239   struct expression *exp;       /* Convenience: == *expp.  */
3240   enum exp_opcode op = (*expp)->elts[pc].opcode;
3241   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3242   int nargs;                    /* Number of operands.  */
3243   int oplen;
3244
3245   argvec = NULL;
3246   nargs = 0;
3247   exp = *expp;
3248
3249   /* Pass one: resolve operands, saving their types and updating *pos,
3250      if needed.  */
3251   switch (op)
3252     {
3253     case OP_FUNCALL:
3254       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3255           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3256         *pos += 7;
3257       else
3258         {
3259           *pos += 3;
3260           resolve_subexp (expp, pos, 0, NULL);
3261         }
3262       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3263       break;
3264
3265     case UNOP_ADDR:
3266       *pos += 1;
3267       resolve_subexp (expp, pos, 0, NULL);
3268       break;
3269
3270     case UNOP_QUAL:
3271       *pos += 3;
3272       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3273       break;
3274
3275     case OP_ATR_MODULUS:
3276     case OP_ATR_SIZE:
3277     case OP_ATR_TAG:
3278     case OP_ATR_FIRST:
3279     case OP_ATR_LAST:
3280     case OP_ATR_LENGTH:
3281     case OP_ATR_POS:
3282     case OP_ATR_VAL:
3283     case OP_ATR_MIN:
3284     case OP_ATR_MAX:
3285     case TERNOP_IN_RANGE:
3286     case BINOP_IN_BOUNDS:
3287     case UNOP_IN_RANGE:
3288     case OP_AGGREGATE:
3289     case OP_OTHERS:
3290     case OP_CHOICES:
3291     case OP_POSITIONAL:
3292     case OP_DISCRETE_RANGE:
3293     case OP_NAME:
3294       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3295       *pos += oplen;
3296       break;
3297
3298     case BINOP_ASSIGN:
3299       {
3300         struct value *arg1;
3301
3302         *pos += 1;
3303         arg1 = resolve_subexp (expp, pos, 0, NULL);
3304         if (arg1 == NULL)
3305           resolve_subexp (expp, pos, 1, NULL);
3306         else
3307           resolve_subexp (expp, pos, 1, value_type (arg1));
3308         break;
3309       }
3310
3311     case UNOP_CAST:
3312       *pos += 3;
3313       nargs = 1;
3314       break;
3315
3316     case BINOP_ADD:
3317     case BINOP_SUB:
3318     case BINOP_MUL:
3319     case BINOP_DIV:
3320     case BINOP_REM:
3321     case BINOP_MOD:
3322     case BINOP_EXP:
3323     case BINOP_CONCAT:
3324     case BINOP_LOGICAL_AND:
3325     case BINOP_LOGICAL_OR:
3326     case BINOP_BITWISE_AND:
3327     case BINOP_BITWISE_IOR:
3328     case BINOP_BITWISE_XOR:
3329
3330     case BINOP_EQUAL:
3331     case BINOP_NOTEQUAL:
3332     case BINOP_LESS:
3333     case BINOP_GTR:
3334     case BINOP_LEQ:
3335     case BINOP_GEQ:
3336
3337     case BINOP_REPEAT:
3338     case BINOP_SUBSCRIPT:
3339     case BINOP_COMMA:
3340       *pos += 1;
3341       nargs = 2;
3342       break;
3343
3344     case UNOP_NEG:
3345     case UNOP_PLUS:
3346     case UNOP_LOGICAL_NOT:
3347     case UNOP_ABS:
3348     case UNOP_IND:
3349       *pos += 1;
3350       nargs = 1;
3351       break;
3352
3353     case OP_LONG:
3354     case OP_DOUBLE:
3355     case OP_VAR_VALUE:
3356       *pos += 4;
3357       break;
3358
3359     case OP_TYPE:
3360     case OP_BOOL:
3361     case OP_LAST:
3362     case OP_INTERNALVAR:
3363       *pos += 3;
3364       break;
3365
3366     case UNOP_MEMVAL:
3367       *pos += 3;
3368       nargs = 1;
3369       break;
3370
3371     case OP_REGISTER:
3372       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3373       break;
3374
3375     case STRUCTOP_STRUCT:
3376       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3377       nargs = 1;
3378       break;
3379
3380     case TERNOP_SLICE:
3381       *pos += 1;
3382       nargs = 3;
3383       break;
3384
3385     case OP_STRING:
3386       break;
3387
3388     default:
3389       error (_("Unexpected operator during name resolution"));
3390     }
3391
3392   argvec = XALLOCAVEC (struct value *, nargs + 1);
3393   for (i = 0; i < nargs; i += 1)
3394     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3395   argvec[i] = NULL;
3396   exp = *expp;
3397
3398   /* Pass two: perform any resolution on principal operator.  */
3399   switch (op)
3400     {
3401     default:
3402       break;
3403
3404     case OP_VAR_VALUE:
3405       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3406         {
3407           struct block_symbol *candidates;
3408           int n_candidates;
3409
3410           n_candidates =
3411             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3412                                     (exp->elts[pc + 2].symbol),
3413                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3414                                     &candidates);
3415
3416           if (n_candidates > 1)
3417             {
3418               /* Types tend to get re-introduced locally, so if there
3419                  are any local symbols that are not types, first filter
3420                  out all types.  */
3421               int j;
3422               for (j = 0; j < n_candidates; j += 1)
3423                 switch (SYMBOL_CLASS (candidates[j].symbol))
3424                   {
3425                   case LOC_REGISTER:
3426                   case LOC_ARG:
3427                   case LOC_REF_ARG:
3428                   case LOC_REGPARM_ADDR:
3429                   case LOC_LOCAL:
3430                   case LOC_COMPUTED:
3431                     goto FoundNonType;
3432                   default:
3433                     break;
3434                   }
3435             FoundNonType:
3436               if (j < n_candidates)
3437                 {
3438                   j = 0;
3439                   while (j < n_candidates)
3440                     {
3441                       if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
3442                         {
3443                           candidates[j] = candidates[n_candidates - 1];
3444                           n_candidates -= 1;
3445                         }
3446                       else
3447                         j += 1;
3448                     }
3449                 }
3450             }
3451
3452           if (n_candidates == 0)
3453             error (_("No definition found for %s"),
3454                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3455           else if (n_candidates == 1)
3456             i = 0;
3457           else if (deprocedure_p
3458                    && !is_nonfunction (candidates, n_candidates))
3459             {
3460               i = ada_resolve_function
3461                 (candidates, n_candidates, NULL, 0,
3462                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3463                  context_type);
3464               if (i < 0)
3465                 error (_("Could not find a match for %s"),
3466                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3467             }
3468           else
3469             {
3470               printf_filtered (_("Multiple matches for %s\n"),
3471                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3472               user_select_syms (candidates, n_candidates, 1);
3473               i = 0;
3474             }
3475
3476           exp->elts[pc + 1].block = candidates[i].block;
3477           exp->elts[pc + 2].symbol = candidates[i].symbol;
3478           if (innermost_block == NULL
3479               || contained_in (candidates[i].block, innermost_block))
3480             innermost_block = candidates[i].block;
3481         }
3482
3483       if (deprocedure_p
3484           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3485               == TYPE_CODE_FUNC))
3486         {
3487           replace_operator_with_call (expp, pc, 0, 0,
3488                                       exp->elts[pc + 2].symbol,
3489                                       exp->elts[pc + 1].block);
3490           exp = *expp;
3491         }
3492       break;
3493
3494     case OP_FUNCALL:
3495       {
3496         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3497             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3498           {
3499             struct block_symbol *candidates;
3500             int n_candidates;
3501
3502             n_candidates =
3503               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3504                                       (exp->elts[pc + 5].symbol),
3505                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3506                                       &candidates);
3507             if (n_candidates == 1)
3508               i = 0;
3509             else
3510               {
3511                 i = ada_resolve_function
3512                   (candidates, n_candidates,
3513                    argvec, nargs,
3514                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3515                    context_type);
3516                 if (i < 0)
3517                   error (_("Could not find a match for %s"),
3518                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3519               }
3520
3521             exp->elts[pc + 4].block = candidates[i].block;
3522             exp->elts[pc + 5].symbol = candidates[i].symbol;
3523             if (innermost_block == NULL
3524                 || contained_in (candidates[i].block, innermost_block))
3525               innermost_block = candidates[i].block;
3526           }
3527       }
3528       break;
3529     case BINOP_ADD:
3530     case BINOP_SUB:
3531     case BINOP_MUL:
3532     case BINOP_DIV:
3533     case BINOP_REM:
3534     case BINOP_MOD:
3535     case BINOP_CONCAT:
3536     case BINOP_BITWISE_AND:
3537     case BINOP_BITWISE_IOR:
3538     case BINOP_BITWISE_XOR:
3539     case BINOP_EQUAL:
3540     case BINOP_NOTEQUAL:
3541     case BINOP_LESS:
3542     case BINOP_GTR:
3543     case BINOP_LEQ:
3544     case BINOP_GEQ:
3545     case BINOP_EXP:
3546     case UNOP_NEG:
3547     case UNOP_PLUS:
3548     case UNOP_LOGICAL_NOT:
3549     case UNOP_ABS:
3550       if (possible_user_operator_p (op, argvec))
3551         {
3552           struct block_symbol *candidates;
3553           int n_candidates;
3554
3555           n_candidates =
3556             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3557                                     (struct block *) NULL, VAR_DOMAIN,
3558                                     &candidates);
3559           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3560                                     ada_decoded_op_name (op), NULL);
3561           if (i < 0)
3562             break;
3563
3564           replace_operator_with_call (expp, pc, nargs, 1,
3565                                       candidates[i].symbol,
3566                                       candidates[i].block);
3567           exp = *expp;
3568         }
3569       break;
3570
3571     case OP_TYPE:
3572     case OP_REGISTER:
3573       return NULL;
3574     }
3575
3576   *pos = pc;
3577   return evaluate_subexp_type (exp, pos);
3578 }
3579
3580 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3581    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3582    a non-pointer.  */
3583 /* The term "match" here is rather loose.  The match is heuristic and
3584    liberal.  */
3585
3586 static int
3587 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3588 {
3589   ftype = ada_check_typedef (ftype);
3590   atype = ada_check_typedef (atype);
3591
3592   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3593     ftype = TYPE_TARGET_TYPE (ftype);
3594   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3595     atype = TYPE_TARGET_TYPE (atype);
3596
3597   switch (TYPE_CODE (ftype))
3598     {
3599     default:
3600       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3601     case TYPE_CODE_PTR:
3602       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3603         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3604                                TYPE_TARGET_TYPE (atype), 0);
3605       else
3606         return (may_deref
3607                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3608     case TYPE_CODE_INT:
3609     case TYPE_CODE_ENUM:
3610     case TYPE_CODE_RANGE:
3611       switch (TYPE_CODE (atype))
3612         {
3613         case TYPE_CODE_INT:
3614         case TYPE_CODE_ENUM:
3615         case TYPE_CODE_RANGE:
3616           return 1;
3617         default:
3618           return 0;
3619         }
3620
3621     case TYPE_CODE_ARRAY:
3622       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3623               || ada_is_array_descriptor_type (atype));
3624
3625     case TYPE_CODE_STRUCT:
3626       if (ada_is_array_descriptor_type (ftype))
3627         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3628                 || ada_is_array_descriptor_type (atype));
3629       else
3630         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3631                 && !ada_is_array_descriptor_type (atype));
3632
3633     case TYPE_CODE_UNION:
3634     case TYPE_CODE_FLT:
3635       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3636     }
3637 }
3638
3639 /* Return non-zero if the formals of FUNC "sufficiently match" the
3640    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3641    may also be an enumeral, in which case it is treated as a 0-
3642    argument function.  */
3643
3644 static int
3645 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3646 {
3647   int i;
3648   struct type *func_type = SYMBOL_TYPE (func);
3649
3650   if (SYMBOL_CLASS (func) == LOC_CONST
3651       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3652     return (n_actuals == 0);
3653   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3654     return 0;
3655
3656   if (TYPE_NFIELDS (func_type) != n_actuals)
3657     return 0;
3658
3659   for (i = 0; i < n_actuals; i += 1)
3660     {
3661       if (actuals[i] == NULL)
3662         return 0;
3663       else
3664         {
3665           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3666                                                                    i));
3667           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3668
3669           if (!ada_type_match (ftype, atype, 1))
3670             return 0;
3671         }
3672     }
3673   return 1;
3674 }
3675
3676 /* False iff function type FUNC_TYPE definitely does not produce a value
3677    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3678    FUNC_TYPE is not a valid function type with a non-null return type
3679    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3680
3681 static int
3682 return_match (struct type *func_type, struct type *context_type)
3683 {
3684   struct type *return_type;
3685
3686   if (func_type == NULL)
3687     return 1;
3688
3689   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3690     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3691   else
3692     return_type = get_base_type (func_type);
3693   if (return_type == NULL)
3694     return 1;
3695
3696   context_type = get_base_type (context_type);
3697
3698   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3699     return context_type == NULL || return_type == context_type;
3700   else if (context_type == NULL)
3701     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3702   else
3703     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3704 }
3705
3706
3707 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3708    function (if any) that matches the types of the NARGS arguments in
3709    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3710    that returns that type, then eliminate matches that don't.  If
3711    CONTEXT_TYPE is void and there is at least one match that does not
3712    return void, eliminate all matches that do.
3713
3714    Asks the user if there is more than one match remaining.  Returns -1
3715    if there is no such symbol or none is selected.  NAME is used
3716    solely for messages.  May re-arrange and modify SYMS in
3717    the process; the index returned is for the modified vector.  */
3718
3719 static int
3720 ada_resolve_function (struct block_symbol syms[],
3721                       int nsyms, struct value **args, int nargs,
3722                       const char *name, struct type *context_type)
3723 {
3724   int fallback;
3725   int k;
3726   int m;                        /* Number of hits */
3727
3728   m = 0;
3729   /* In the first pass of the loop, we only accept functions matching
3730      context_type.  If none are found, we add a second pass of the loop
3731      where every function is accepted.  */
3732   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3733     {
3734       for (k = 0; k < nsyms; k += 1)
3735         {
3736           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
3737
3738           if (ada_args_match (syms[k].symbol, args, nargs)
3739               && (fallback || return_match (type, context_type)))
3740             {
3741               syms[m] = syms[k];
3742               m += 1;
3743             }
3744         }
3745     }
3746
3747   /* If we got multiple matches, ask the user which one to use.  Don't do this
3748      interactive thing during completion, though, as the purpose of the
3749      completion is providing a list of all possible matches.  Prompting the
3750      user to filter it down would be completely unexpected in this case.  */
3751   if (m == 0)
3752     return -1;
3753   else if (m > 1 && !parse_completion)
3754     {
3755       printf_filtered (_("Multiple matches for %s\n"), name);
3756       user_select_syms (syms, m, 1);
3757       return 0;
3758     }
3759   return 0;
3760 }
3761
3762 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3763    in a listing of choices during disambiguation (see sort_choices, below).
3764    The idea is that overloadings of a subprogram name from the
3765    same package should sort in their source order.  We settle for ordering
3766    such symbols by their trailing number (__N  or $N).  */
3767
3768 static int
3769 encoded_ordered_before (const char *N0, const char *N1)
3770 {
3771   if (N1 == NULL)
3772     return 0;
3773   else if (N0 == NULL)
3774     return 1;
3775   else
3776     {
3777       int k0, k1;
3778
3779       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3780         ;
3781       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3782         ;
3783       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3784           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3785         {
3786           int n0, n1;
3787
3788           n0 = k0;
3789           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3790             n0 -= 1;
3791           n1 = k1;
3792           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3793             n1 -= 1;
3794           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3795             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3796         }
3797       return (strcmp (N0, N1) < 0);
3798     }
3799 }
3800
3801 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3802    encoded names.  */
3803
3804 static void
3805 sort_choices (struct block_symbol syms[], int nsyms)
3806 {
3807   int i;
3808
3809   for (i = 1; i < nsyms; i += 1)
3810     {
3811       struct block_symbol sym = syms[i];
3812       int j;
3813
3814       for (j = i - 1; j >= 0; j -= 1)
3815         {
3816           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].symbol),
3817                                       SYMBOL_LINKAGE_NAME (sym.symbol)))
3818             break;
3819           syms[j + 1] = syms[j];
3820         }
3821       syms[j + 1] = sym;
3822     }
3823 }
3824
3825 /* Whether GDB should display formals and return types for functions in the
3826    overloads selection menu.  */
3827 static int print_signatures = 1;
3828
3829 /* Print the signature for SYM on STREAM according to the FLAGS options.  For
3830    all but functions, the signature is just the name of the symbol.  For
3831    functions, this is the name of the function, the list of types for formals
3832    and the return type (if any).  */
3833
3834 static void
3835 ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3836                             const struct type_print_options *flags)
3837 {
3838   struct type *type = SYMBOL_TYPE (sym);
3839
3840   fprintf_filtered (stream, "%s", SYMBOL_PRINT_NAME (sym));
3841   if (!print_signatures
3842       || type == NULL
3843       || TYPE_CODE (type) != TYPE_CODE_FUNC)
3844     return;
3845
3846   if (TYPE_NFIELDS (type) > 0)
3847     {
3848       int i;
3849
3850       fprintf_filtered (stream, " (");
3851       for (i = 0; i < TYPE_NFIELDS (type); ++i)
3852         {
3853           if (i > 0)
3854             fprintf_filtered (stream, "; ");
3855           ada_print_type (TYPE_FIELD_TYPE (type, i), NULL, stream, -1, 0,
3856                           flags);
3857         }
3858       fprintf_filtered (stream, ")");
3859     }
3860   if (TYPE_TARGET_TYPE (type) != NULL
3861       && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
3862     {
3863       fprintf_filtered (stream, " return ");
3864       ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3865     }
3866 }
3867
3868 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3869    by asking the user (if necessary), returning the number selected, 
3870    and setting the first elements of SYMS items.  Error if no symbols
3871    selected.  */
3872
3873 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3874    to be re-integrated one of these days.  */
3875
3876 int
3877 user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
3878 {
3879   int i;
3880   int *chosen = XALLOCAVEC (int , nsyms);
3881   int n_chosen;
3882   int first_choice = (max_results == 1) ? 1 : 2;
3883   const char *select_mode = multiple_symbols_select_mode ();
3884
3885   if (max_results < 1)
3886     error (_("Request to select 0 symbols!"));
3887   if (nsyms <= 1)
3888     return nsyms;
3889
3890   if (select_mode == multiple_symbols_cancel)
3891     error (_("\
3892 canceled because the command is ambiguous\n\
3893 See set/show multiple-symbol."));
3894   
3895   /* If select_mode is "all", then return all possible symbols.
3896      Only do that if more than one symbol can be selected, of course.
3897      Otherwise, display the menu as usual.  */
3898   if (select_mode == multiple_symbols_all && max_results > 1)
3899     return nsyms;
3900
3901   printf_unfiltered (_("[0] cancel\n"));
3902   if (max_results > 1)
3903     printf_unfiltered (_("[1] all\n"));
3904
3905   sort_choices (syms, nsyms);
3906
3907   for (i = 0; i < nsyms; i += 1)
3908     {
3909       if (syms[i].symbol == NULL)
3910         continue;
3911
3912       if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
3913         {
3914           struct symtab_and_line sal =
3915             find_function_start_sal (syms[i].symbol, 1);
3916
3917           printf_unfiltered ("[%d] ", i + first_choice);
3918           ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3919                                       &type_print_raw_options);
3920           if (sal.symtab == NULL)
3921             printf_unfiltered (_(" at <no source file available>:%d\n"),
3922                                sal.line);
3923           else
3924             printf_unfiltered (_(" at %s:%d\n"),
3925                                symtab_to_filename_for_display (sal.symtab),
3926                                sal.line);
3927           continue;
3928         }
3929       else
3930         {
3931           int is_enumeral =
3932             (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3933              && SYMBOL_TYPE (syms[i].symbol) != NULL
3934              && TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) == TYPE_CODE_ENUM);
3935           struct symtab *symtab = NULL;
3936
3937           if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3938             symtab = symbol_symtab (syms[i].symbol);
3939
3940           if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
3941             {
3942               printf_unfiltered ("[%d] ", i + first_choice);
3943               ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3944                                           &type_print_raw_options);
3945               printf_unfiltered (_(" at %s:%d\n"),
3946                                  symtab_to_filename_for_display (symtab),
3947                                  SYMBOL_LINE (syms[i].symbol));
3948             }
3949           else if (is_enumeral
3950                    && TYPE_NAME (SYMBOL_TYPE (syms[i].symbol)) != NULL)
3951             {
3952               printf_unfiltered (("[%d] "), i + first_choice);
3953               ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3954                               gdb_stdout, -1, 0, &type_print_raw_options);
3955               printf_unfiltered (_("'(%s) (enumeral)\n"),
3956                                  SYMBOL_PRINT_NAME (syms[i].symbol));
3957             }
3958           else
3959             {
3960               printf_unfiltered ("[%d] ", i + first_choice);
3961               ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3962                                           &type_print_raw_options);
3963
3964               if (symtab != NULL)
3965                 printf_unfiltered (is_enumeral
3966                                    ? _(" in %s (enumeral)\n")
3967                                    : _(" at %s:?\n"),
3968                                    symtab_to_filename_for_display (symtab));
3969               else
3970                 printf_unfiltered (is_enumeral
3971                                    ? _(" (enumeral)\n")
3972                                    : _(" at ?\n"));
3973             }
3974         }
3975     }
3976
3977   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3978                              "overload-choice");
3979
3980   for (i = 0; i < n_chosen; i += 1)
3981     syms[i] = syms[chosen[i]];
3982
3983   return n_chosen;
3984 }
3985
3986 /* Read and validate a set of numeric choices from the user in the
3987    range 0 .. N_CHOICES-1.  Place the results in increasing
3988    order in CHOICES[0 .. N-1], and return N.
3989
3990    The user types choices as a sequence of numbers on one line
3991    separated by blanks, encoding them as follows:
3992
3993      + A choice of 0 means to cancel the selection, throwing an error.
3994      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3995      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3996
3997    The user is not allowed to choose more than MAX_RESULTS values.
3998
3999    ANNOTATION_SUFFIX, if present, is used to annotate the input
4000    prompts (for use with the -f switch).  */
4001
4002 int
4003 get_selections (int *choices, int n_choices, int max_results,
4004                 int is_all_choice, char *annotation_suffix)
4005 {
4006   char *args;
4007   char *prompt;
4008   int n_chosen;
4009   int first_choice = is_all_choice ? 2 : 1;
4010
4011   prompt = getenv ("PS2");
4012   if (prompt == NULL)
4013     prompt = "> ";
4014
4015   args = command_line_input (prompt, 0, annotation_suffix);
4016
4017   if (args == NULL)
4018     error_no_arg (_("one or more choice numbers"));
4019
4020   n_chosen = 0;
4021
4022   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
4023      order, as given in args.  Choices are validated.  */
4024   while (1)
4025     {
4026       char *args2;
4027       int choice, j;
4028
4029       args = skip_spaces (args);
4030       if (*args == '\0' && n_chosen == 0)
4031         error_no_arg (_("one or more choice numbers"));
4032       else if (*args == '\0')
4033         break;
4034
4035       choice = strtol (args, &args2, 10);
4036       if (args == args2 || choice < 0
4037           || choice > n_choices + first_choice - 1)
4038         error (_("Argument must be choice number"));
4039       args = args2;
4040
4041       if (choice == 0)
4042         error (_("cancelled"));
4043
4044       if (choice < first_choice)
4045         {
4046           n_chosen = n_choices;
4047           for (j = 0; j < n_choices; j += 1)
4048             choices[j] = j;
4049           break;
4050         }
4051       choice -= first_choice;
4052
4053       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4054         {
4055         }
4056
4057       if (j < 0 || choice != choices[j])
4058         {
4059           int k;
4060
4061           for (k = n_chosen - 1; k > j; k -= 1)
4062             choices[k + 1] = choices[k];
4063           choices[j + 1] = choice;
4064           n_chosen += 1;
4065         }
4066     }
4067
4068   if (n_chosen > max_results)
4069     error (_("Select no more than %d of the above"), max_results);
4070
4071   return n_chosen;
4072 }
4073
4074 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
4075    on the function identified by SYM and BLOCK, and taking NARGS
4076    arguments.  Update *EXPP as needed to hold more space.  */
4077
4078 static void
4079 replace_operator_with_call (struct expression **expp, int pc, int nargs,
4080                             int oplen, struct symbol *sym,
4081                             const struct block *block)
4082 {
4083   /* A new expression, with 6 more elements (3 for funcall, 4 for function
4084      symbol, -oplen for operator being replaced).  */
4085   struct expression *newexp = (struct expression *)
4086     xzalloc (sizeof (struct expression)
4087              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
4088   struct expression *exp = *expp;
4089
4090   newexp->nelts = exp->nelts + 7 - oplen;
4091   newexp->language_defn = exp->language_defn;
4092   newexp->gdbarch = exp->gdbarch;
4093   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
4094   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4095           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
4096
4097   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
4098   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
4099
4100   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
4101   newexp->elts[pc + 4].block = block;
4102   newexp->elts[pc + 5].symbol = sym;
4103
4104   *expp = newexp;
4105   xfree (exp);
4106 }
4107
4108 /* Type-class predicates */
4109
4110 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
4111    or FLOAT).  */
4112
4113 static int
4114 numeric_type_p (struct type *type)
4115 {
4116   if (type == NULL)
4117     return 0;
4118   else
4119     {
4120       switch (TYPE_CODE (type))
4121         {
4122         case TYPE_CODE_INT:
4123         case TYPE_CODE_FLT:
4124           return 1;
4125         case TYPE_CODE_RANGE:
4126           return (type == TYPE_TARGET_TYPE (type)
4127                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
4128         default:
4129           return 0;
4130         }
4131     }
4132 }
4133
4134 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
4135
4136 static int
4137 integer_type_p (struct type *type)
4138 {
4139   if (type == NULL)
4140     return 0;
4141   else
4142     {
4143       switch (TYPE_CODE (type))
4144         {
4145         case TYPE_CODE_INT:
4146           return 1;
4147         case TYPE_CODE_RANGE:
4148           return (type == TYPE_TARGET_TYPE (type)
4149                   || integer_type_p (TYPE_TARGET_TYPE (type)));
4150         default:
4151           return 0;
4152         }
4153     }
4154 }
4155
4156 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
4157
4158 static int
4159 scalar_type_p (struct type *type)
4160 {
4161   if (type == NULL)
4162     return 0;
4163   else
4164     {
4165       switch (TYPE_CODE (type))
4166         {
4167         case TYPE_CODE_INT:
4168         case TYPE_CODE_RANGE:
4169         case TYPE_CODE_ENUM:
4170         case TYPE_CODE_FLT:
4171           return 1;
4172         default:
4173           return 0;
4174         }
4175     }
4176 }
4177
4178 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
4179
4180 static int
4181 discrete_type_p (struct type *type)
4182 {
4183   if (type == NULL)
4184     return 0;
4185   else
4186     {
4187       switch (TYPE_CODE (type))
4188         {
4189         case TYPE_CODE_INT:
4190         case TYPE_CODE_RANGE:
4191         case TYPE_CODE_ENUM:
4192         case TYPE_CODE_BOOL:
4193           return 1;
4194         default:
4195           return 0;
4196         }
4197     }
4198 }
4199
4200 /* Returns non-zero if OP with operands in the vector ARGS could be
4201    a user-defined function.  Errs on the side of pre-defined operators
4202    (i.e., result 0).  */
4203
4204 static int
4205 possible_user_operator_p (enum exp_opcode op, struct value *args[])
4206 {
4207   struct type *type0 =
4208     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
4209   struct type *type1 =
4210     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
4211
4212   if (type0 == NULL)
4213     return 0;
4214
4215   switch (op)
4216     {
4217     default:
4218       return 0;
4219
4220     case BINOP_ADD:
4221     case BINOP_SUB:
4222     case BINOP_MUL:
4223     case BINOP_DIV:
4224       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
4225
4226     case BINOP_REM:
4227     case BINOP_MOD:
4228     case BINOP_BITWISE_AND:
4229     case BINOP_BITWISE_IOR:
4230     case BINOP_BITWISE_XOR:
4231       return (!(integer_type_p (type0) && integer_type_p (type1)));
4232
4233     case BINOP_EQUAL:
4234     case BINOP_NOTEQUAL:
4235     case BINOP_LESS:
4236     case BINOP_GTR:
4237     case BINOP_LEQ:
4238     case BINOP_GEQ:
4239       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4240
4241     case BINOP_CONCAT:
4242       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4243
4244     case BINOP_EXP:
4245       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4246
4247     case UNOP_NEG:
4248     case UNOP_PLUS:
4249     case UNOP_LOGICAL_NOT:
4250     case UNOP_ABS:
4251       return (!numeric_type_p (type0));
4252
4253     }
4254 }
4255 \f
4256                                 /* Renaming */
4257
4258 /* NOTES: 
4259
4260    1. In the following, we assume that a renaming type's name may
4261       have an ___XD suffix.  It would be nice if this went away at some
4262       point.
4263    2. We handle both the (old) purely type-based representation of 
4264       renamings and the (new) variable-based encoding.  At some point,
4265       it is devoutly to be hoped that the former goes away 
4266       (FIXME: hilfinger-2007-07-09).
4267    3. Subprogram renamings are not implemented, although the XRS
4268       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4269
4270 /* If SYM encodes a renaming, 
4271
4272        <renaming> renames <renamed entity>,
4273
4274    sets *LEN to the length of the renamed entity's name,
4275    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4276    the string describing the subcomponent selected from the renamed
4277    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4278    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4279    are undefined).  Otherwise, returns a value indicating the category
4280    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4281    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4282    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4283    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4284    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4285    may be NULL, in which case they are not assigned.
4286
4287    [Currently, however, GCC does not generate subprogram renamings.]  */
4288
4289 enum ada_renaming_category
4290 ada_parse_renaming (struct symbol *sym,
4291                     const char **renamed_entity, int *len, 
4292                     const char **renaming_expr)
4293 {
4294   enum ada_renaming_category kind;
4295   const char *info;
4296   const char *suffix;
4297
4298   if (sym == NULL)
4299     return ADA_NOT_RENAMING;
4300   switch (SYMBOL_CLASS (sym)) 
4301     {
4302     default:
4303       return ADA_NOT_RENAMING;
4304     case LOC_TYPEDEF:
4305       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4306                                        renamed_entity, len, renaming_expr);
4307     case LOC_LOCAL:
4308     case LOC_STATIC:
4309     case LOC_COMPUTED:
4310     case LOC_OPTIMIZED_OUT:
4311       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4312       if (info == NULL)
4313         return ADA_NOT_RENAMING;
4314       switch (info[5])
4315         {
4316         case '_':
4317           kind = ADA_OBJECT_RENAMING;
4318           info += 6;
4319           break;
4320         case 'E':
4321           kind = ADA_EXCEPTION_RENAMING;
4322           info += 7;
4323           break;
4324         case 'P':
4325           kind = ADA_PACKAGE_RENAMING;
4326           info += 7;
4327           break;
4328         case 'S':
4329           kind = ADA_SUBPROGRAM_RENAMING;
4330           info += 7;
4331           break;
4332         default:
4333           return ADA_NOT_RENAMING;
4334         }
4335     }
4336
4337   if (renamed_entity != NULL)
4338     *renamed_entity = info;
4339   suffix = strstr (info, "___XE");
4340   if (suffix == NULL || suffix == info)
4341     return ADA_NOT_RENAMING;
4342   if (len != NULL)
4343     *len = strlen (info) - strlen (suffix);
4344   suffix += 5;
4345   if (renaming_expr != NULL)
4346     *renaming_expr = suffix;
4347   return kind;
4348 }
4349
4350 /* Assuming TYPE encodes a renaming according to the old encoding in
4351    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4352    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4353    ADA_NOT_RENAMING otherwise.  */
4354 static enum ada_renaming_category
4355 parse_old_style_renaming (struct type *type,
4356                           const char **renamed_entity, int *len, 
4357                           const char **renaming_expr)
4358 {
4359   enum ada_renaming_category kind;
4360   const char *name;
4361   const char *info;
4362   const char *suffix;
4363
4364   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4365       || TYPE_NFIELDS (type) != 1)
4366     return ADA_NOT_RENAMING;
4367
4368   name = type_name_no_tag (type);
4369   if (name == NULL)
4370     return ADA_NOT_RENAMING;
4371   
4372   name = strstr (name, "___XR");
4373   if (name == NULL)
4374     return ADA_NOT_RENAMING;
4375   switch (name[5])
4376     {
4377     case '\0':
4378     case '_':
4379       kind = ADA_OBJECT_RENAMING;
4380       break;
4381     case 'E':
4382       kind = ADA_EXCEPTION_RENAMING;
4383       break;
4384     case 'P':
4385       kind = ADA_PACKAGE_RENAMING;
4386       break;
4387     case 'S':
4388       kind = ADA_SUBPROGRAM_RENAMING;
4389       break;
4390     default:
4391       return ADA_NOT_RENAMING;
4392     }
4393
4394   info = TYPE_FIELD_NAME (type, 0);
4395   if (info == NULL)
4396     return ADA_NOT_RENAMING;
4397   if (renamed_entity != NULL)
4398     *renamed_entity = info;
4399   suffix = strstr (info, "___XE");
4400   if (renaming_expr != NULL)
4401     *renaming_expr = suffix + 5;
4402   if (suffix == NULL || suffix == info)
4403     return ADA_NOT_RENAMING;
4404   if (len != NULL)
4405     *len = suffix - info;
4406   return kind;
4407 }
4408
4409 /* Compute the value of the given RENAMING_SYM, which is expected to
4410    be a symbol encoding a renaming expression.  BLOCK is the block
4411    used to evaluate the renaming.  */
4412
4413 static struct value *
4414 ada_read_renaming_var_value (struct symbol *renaming_sym,
4415                              const struct block *block)
4416 {
4417   const char *sym_name;
4418   struct expression *expr;
4419   struct value *value;
4420   struct cleanup *old_chain = NULL;
4421
4422   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4423   expr = parse_exp_1 (&sym_name, 0, block, 0);
4424   old_chain = make_cleanup (free_current_contents, &expr);
4425   value = evaluate_expression (expr);
4426
4427   do_cleanups (old_chain);
4428   return value;
4429 }
4430 \f
4431
4432                                 /* Evaluation: Function Calls */
4433
4434 /* Return an lvalue containing the value VAL.  This is the identity on
4435    lvalues, and otherwise has the side-effect of allocating memory
4436    in the inferior where a copy of the value contents is copied.  */
4437
4438 static struct value *
4439 ensure_lval (struct value *val)
4440 {
4441   if (VALUE_LVAL (val) == not_lval
4442       || VALUE_LVAL (val) == lval_internalvar)
4443     {
4444       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4445       const CORE_ADDR addr =
4446         value_as_long (value_allocate_space_in_inferior (len));
4447
4448       set_value_address (val, addr);
4449       VALUE_LVAL (val) = lval_memory;
4450       write_memory (addr, value_contents (val), len);
4451     }
4452
4453   return val;
4454 }
4455
4456 /* Return the value ACTUAL, converted to be an appropriate value for a
4457    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4458    allocating any necessary descriptors (fat pointers), or copies of
4459    values not residing in memory, updating it as needed.  */
4460
4461 struct value *
4462 ada_convert_actual (struct value *actual, struct type *formal_type0)
4463 {
4464   struct type *actual_type = ada_check_typedef (value_type (actual));
4465   struct type *formal_type = ada_check_typedef (formal_type0);
4466   struct type *formal_target =
4467     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4468     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4469   struct type *actual_target =
4470     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4471     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4472
4473   if (ada_is_array_descriptor_type (formal_target)
4474       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4475     return make_array_descriptor (formal_type, actual);
4476   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4477            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4478     {
4479       struct value *result;
4480
4481       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4482           && ada_is_array_descriptor_type (actual_target))
4483         result = desc_data (actual);
4484       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4485         {
4486           if (VALUE_LVAL (actual) != lval_memory)
4487             {
4488               struct value *val;
4489
4490               actual_type = ada_check_typedef (value_type (actual));
4491               val = allocate_value (actual_type);
4492               memcpy ((char *) value_contents_raw (val),
4493                       (char *) value_contents (actual),
4494                       TYPE_LENGTH (actual_type));
4495               actual = ensure_lval (val);
4496             }
4497           result = value_addr (actual);
4498         }
4499       else
4500         return actual;
4501       return value_cast_pointers (formal_type, result, 0);
4502     }
4503   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4504     return ada_value_ind (actual);
4505   else if (ada_is_aligner_type (formal_type))
4506     {
4507       /* We need to turn this parameter into an aligner type
4508          as well.  */
4509       struct value *aligner = allocate_value (formal_type);
4510       struct value *component = ada_value_struct_elt (aligner, "F", 0);
4511
4512       value_assign_to_component (aligner, component, actual);
4513       return aligner;
4514     }
4515
4516   return actual;
4517 }
4518
4519 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4520    type TYPE.  This is usually an inefficient no-op except on some targets
4521    (such as AVR) where the representation of a pointer and an address
4522    differs.  */
4523
4524 static CORE_ADDR
4525 value_pointer (struct value *value, struct type *type)
4526 {
4527   struct gdbarch *gdbarch = get_type_arch (type);
4528   unsigned len = TYPE_LENGTH (type);
4529   gdb_byte *buf = (gdb_byte *) alloca (len);
4530   CORE_ADDR addr;
4531
4532   addr = value_address (value);
4533   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4534   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4535   return addr;
4536 }
4537
4538
4539 /* Push a descriptor of type TYPE for array value ARR on the stack at
4540    *SP, updating *SP to reflect the new descriptor.  Return either
4541    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4542    to-descriptor type rather than a descriptor type), a struct value *
4543    representing a pointer to this descriptor.  */
4544
4545 static struct value *
4546 make_array_descriptor (struct type *type, struct value *arr)
4547 {
4548   struct type *bounds_type = desc_bounds_type (type);
4549   struct type *desc_type = desc_base_type (type);
4550   struct value *descriptor = allocate_value (desc_type);
4551   struct value *bounds = allocate_value (bounds_type);
4552   int i;
4553
4554   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4555        i > 0; i -= 1)
4556     {
4557       modify_field (value_type (bounds), value_contents_writeable (bounds),
4558                     ada_array_bound (arr, i, 0),
4559                     desc_bound_bitpos (bounds_type, i, 0),
4560                     desc_bound_bitsize (bounds_type, i, 0));
4561       modify_field (value_type (bounds), value_contents_writeable (bounds),
4562                     ada_array_bound (arr, i, 1),
4563                     desc_bound_bitpos (bounds_type, i, 1),
4564                     desc_bound_bitsize (bounds_type, i, 1));
4565     }
4566
4567   bounds = ensure_lval (bounds);
4568
4569   modify_field (value_type (descriptor),
4570                 value_contents_writeable (descriptor),
4571                 value_pointer (ensure_lval (arr),
4572                                TYPE_FIELD_TYPE (desc_type, 0)),
4573                 fat_pntr_data_bitpos (desc_type),
4574                 fat_pntr_data_bitsize (desc_type));
4575
4576   modify_field (value_type (descriptor),
4577                 value_contents_writeable (descriptor),
4578                 value_pointer (bounds,
4579                                TYPE_FIELD_TYPE (desc_type, 1)),
4580                 fat_pntr_bounds_bitpos (desc_type),
4581                 fat_pntr_bounds_bitsize (desc_type));
4582
4583   descriptor = ensure_lval (descriptor);
4584
4585   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4586     return value_addr (descriptor);
4587   else
4588     return descriptor;
4589 }
4590 \f
4591                                 /* Symbol Cache Module */
4592
4593 /* Performance measurements made as of 2010-01-15 indicate that
4594    this cache does bring some noticeable improvements.  Depending
4595    on the type of entity being printed, the cache can make it as much
4596    as an order of magnitude faster than without it.
4597
4598    The descriptive type DWARF extension has significantly reduced
4599    the need for this cache, at least when DWARF is being used.  However,
4600    even in this case, some expensive name-based symbol searches are still
4601    sometimes necessary - to find an XVZ variable, mostly.  */
4602
4603 /* Initialize the contents of SYM_CACHE.  */
4604
4605 static void
4606 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4607 {
4608   obstack_init (&sym_cache->cache_space);
4609   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4610 }
4611
4612 /* Free the memory used by SYM_CACHE.  */
4613
4614 static void
4615 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4616 {
4617   obstack_free (&sym_cache->cache_space, NULL);
4618   xfree (sym_cache);
4619 }
4620
4621 /* Return the symbol cache associated to the given program space PSPACE.
4622    If not allocated for this PSPACE yet, allocate and initialize one.  */
4623
4624 static struct ada_symbol_cache *
4625 ada_get_symbol_cache (struct program_space *pspace)
4626 {
4627   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4628
4629   if (pspace_data->sym_cache == NULL)
4630     {
4631       pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4632       ada_init_symbol_cache (pspace_data->sym_cache);
4633     }
4634
4635   return pspace_data->sym_cache;
4636 }
4637
4638 /* Clear all entries from the symbol cache.  */
4639
4640 static void
4641 ada_clear_symbol_cache (void)
4642 {
4643   struct ada_symbol_cache *sym_cache
4644     = ada_get_symbol_cache (current_program_space);
4645
4646   obstack_free (&sym_cache->cache_space, NULL);
4647   ada_init_symbol_cache (sym_cache);
4648 }
4649
4650 /* Search our cache for an entry matching NAME and DOMAIN.
4651    Return it if found, or NULL otherwise.  */
4652
4653 static struct cache_entry **
4654 find_entry (const char *name, domain_enum domain)
4655 {
4656   struct ada_symbol_cache *sym_cache
4657     = ada_get_symbol_cache (current_program_space);
4658   int h = msymbol_hash (name) % HASH_SIZE;
4659   struct cache_entry **e;
4660
4661   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4662     {
4663       if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
4664         return e;
4665     }
4666   return NULL;
4667 }
4668
4669 /* Search the symbol cache for an entry matching NAME and DOMAIN.
4670    Return 1 if found, 0 otherwise.
4671
4672    If an entry was found and SYM is not NULL, set *SYM to the entry's
4673    SYM.  Same principle for BLOCK if not NULL.  */
4674
4675 static int
4676 lookup_cached_symbol (const char *name, domain_enum domain,
4677                       struct symbol **sym, const struct block **block)
4678 {
4679   struct cache_entry **e = find_entry (name, domain);
4680
4681   if (e == NULL)
4682     return 0;
4683   if (sym != NULL)
4684     *sym = (*e)->sym;
4685   if (block != NULL)
4686     *block = (*e)->block;
4687   return 1;
4688 }
4689
4690 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4691    in domain DOMAIN, save this result in our symbol cache.  */
4692
4693 static void
4694 cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
4695               const struct block *block)
4696 {
4697   struct ada_symbol_cache *sym_cache
4698     = ada_get_symbol_cache (current_program_space);
4699   int h;
4700   char *copy;
4701   struct cache_entry *e;
4702
4703   /* Symbols for builtin types don't have a block.
4704      For now don't cache such symbols.  */
4705   if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4706     return;
4707
4708   /* If the symbol is a local symbol, then do not cache it, as a search
4709      for that symbol depends on the context.  To determine whether
4710      the symbol is local or not, we check the block where we found it
4711      against the global and static blocks of its associated symtab.  */
4712   if (sym
4713       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4714                             GLOBAL_BLOCK) != block
4715       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4716                             STATIC_BLOCK) != block)
4717     return;
4718
4719   h = msymbol_hash (name) % HASH_SIZE;
4720   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4721                                             sizeof (*e));
4722   e->next = sym_cache->root[h];
4723   sym_cache->root[h] = e;
4724   e->name = copy
4725     = (char *) obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4726   strcpy (copy, name);
4727   e->sym = sym;
4728   e->domain = domain;
4729   e->block = block;
4730 }
4731 \f
4732                                 /* Symbol Lookup */
4733
4734 /* Return nonzero if wild matching should be used when searching for
4735    all symbols matching LOOKUP_NAME.
4736
4737    LOOKUP_NAME is expected to be a symbol name after transformation
4738    for Ada lookups (see ada_name_for_lookup).  */
4739
4740 static int
4741 should_use_wild_match (const char *lookup_name)
4742 {
4743   return (strstr (lookup_name, "__") == NULL);
4744 }
4745
4746 /* Return the result of a standard (literal, C-like) lookup of NAME in
4747    given DOMAIN, visible from lexical block BLOCK.  */
4748
4749 static struct symbol *
4750 standard_lookup (const char *name, const struct block *block,
4751                  domain_enum domain)
4752 {
4753   /* Initialize it just to avoid a GCC false warning.  */
4754   struct block_symbol sym = {NULL, NULL};
4755
4756   if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4757     return sym.symbol;
4758   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4759   cache_symbol (name, domain, sym.symbol, sym.block);
4760   return sym.symbol;
4761 }
4762
4763
4764 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4765    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4766    since they contend in overloading in the same way.  */
4767 static int
4768 is_nonfunction (struct block_symbol syms[], int n)
4769 {
4770   int i;
4771
4772   for (i = 0; i < n; i += 1)
4773     if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_FUNC
4774         && (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM
4775             || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
4776       return 1;
4777
4778   return 0;
4779 }
4780
4781 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4782    struct types.  Otherwise, they may not.  */
4783
4784 static int
4785 equiv_types (struct type *type0, struct type *type1)
4786 {
4787   if (type0 == type1)
4788     return 1;
4789   if (type0 == NULL || type1 == NULL
4790       || TYPE_CODE (type0) != TYPE_CODE (type1))
4791     return 0;
4792   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4793        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4794       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4795       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4796     return 1;
4797
4798   return 0;
4799 }
4800
4801 /* True iff SYM0 represents the same entity as SYM1, or one that is
4802    no more defined than that of SYM1.  */
4803
4804 static int
4805 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4806 {
4807   if (sym0 == sym1)
4808     return 1;
4809   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4810       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4811     return 0;
4812
4813   switch (SYMBOL_CLASS (sym0))
4814     {
4815     case LOC_UNDEF:
4816       return 1;
4817     case LOC_TYPEDEF:
4818       {
4819         struct type *type0 = SYMBOL_TYPE (sym0);
4820         struct type *type1 = SYMBOL_TYPE (sym1);
4821         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4822         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4823         int len0 = strlen (name0);
4824
4825         return
4826           TYPE_CODE (type0) == TYPE_CODE (type1)
4827           && (equiv_types (type0, type1)
4828               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4829                   && startswith (name1 + len0, "___XV")));
4830       }
4831     case LOC_CONST:
4832       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4833         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4834     default:
4835       return 0;
4836     }
4837 }
4838
4839 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
4840    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4841
4842 static void
4843 add_defn_to_vec (struct obstack *obstackp,
4844                  struct symbol *sym,
4845                  const struct block *block)
4846 {
4847   int i;
4848   struct block_symbol *prevDefns = defns_collected (obstackp, 0);
4849
4850   /* Do not try to complete stub types, as the debugger is probably
4851      already scanning all symbols matching a certain name at the
4852      time when this function is called.  Trying to replace the stub
4853      type by its associated full type will cause us to restart a scan
4854      which may lead to an infinite recursion.  Instead, the client
4855      collecting the matching symbols will end up collecting several
4856      matches, with at least one of them complete.  It can then filter
4857      out the stub ones if needed.  */
4858
4859   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4860     {
4861       if (lesseq_defined_than (sym, prevDefns[i].symbol))
4862         return;
4863       else if (lesseq_defined_than (prevDefns[i].symbol, sym))
4864         {
4865           prevDefns[i].symbol = sym;
4866           prevDefns[i].block = block;
4867           return;
4868         }
4869     }
4870
4871   {
4872     struct block_symbol info;
4873
4874     info.symbol = sym;
4875     info.block = block;
4876     obstack_grow (obstackp, &info, sizeof (struct block_symbol));
4877   }
4878 }
4879
4880 /* Number of block_symbol structures currently collected in current vector in
4881    OBSTACKP.  */
4882
4883 static int
4884 num_defns_collected (struct obstack *obstackp)
4885 {
4886   return obstack_object_size (obstackp) / sizeof (struct block_symbol);
4887 }
4888
4889 /* Vector of block_symbol structures currently collected in current vector in
4890    OBSTACKP.  If FINISH, close off the vector and return its final address.  */
4891
4892 static struct block_symbol *
4893 defns_collected (struct obstack *obstackp, int finish)
4894 {
4895   if (finish)
4896     return (struct block_symbol *) obstack_finish (obstackp);
4897   else
4898     return (struct block_symbol *) obstack_base (obstackp);
4899 }
4900
4901 /* Return a bound minimal symbol matching NAME according to Ada
4902    decoding rules.  Returns an invalid symbol if there is no such
4903    minimal symbol.  Names prefixed with "standard__" are handled
4904    specially: "standard__" is first stripped off, and only static and
4905    global symbols are searched.  */
4906
4907 struct bound_minimal_symbol
4908 ada_lookup_simple_minsym (const char *name)
4909 {
4910   struct bound_minimal_symbol result;
4911   struct objfile *objfile;
4912   struct minimal_symbol *msymbol;
4913   const int wild_match_p = should_use_wild_match (name);
4914
4915   memset (&result, 0, sizeof (result));
4916
4917   /* Special case: If the user specifies a symbol name inside package
4918      Standard, do a non-wild matching of the symbol name without
4919      the "standard__" prefix.  This was primarily introduced in order
4920      to allow the user to specifically access the standard exceptions
4921      using, for instance, Standard.Constraint_Error when Constraint_Error
4922      is ambiguous (due to the user defining its own Constraint_Error
4923      entity inside its program).  */
4924   if (startswith (name, "standard__"))
4925     name += sizeof ("standard__") - 1;
4926
4927   ALL_MSYMBOLS (objfile, msymbol)
4928   {
4929     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4930         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4931       {
4932         result.minsym = msymbol;
4933         result.objfile = objfile;
4934         break;
4935       }
4936   }
4937
4938   return result;
4939 }
4940
4941 /* For all subprograms that statically enclose the subprogram of the
4942    selected frame, add symbols matching identifier NAME in DOMAIN
4943    and their blocks to the list of data in OBSTACKP, as for
4944    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4945    with a wildcard prefix.  */
4946
4947 static void
4948 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4949                                   const char *name, domain_enum domain,
4950                                   int wild_match_p)
4951 {
4952 }
4953
4954 /* True if TYPE is definitely an artificial type supplied to a symbol
4955    for which no debugging information was given in the symbol file.  */
4956
4957 static int
4958 is_nondebugging_type (struct type *type)
4959 {
4960   const char *name = ada_type_name (type);
4961
4962   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4963 }
4964
4965 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4966    that are deemed "identical" for practical purposes.
4967
4968    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4969    types and that their number of enumerals is identical (in other
4970    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4971
4972 static int
4973 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4974 {
4975   int i;
4976
4977   /* The heuristic we use here is fairly conservative.  We consider
4978      that 2 enumerate types are identical if they have the same
4979      number of enumerals and that all enumerals have the same
4980      underlying value and name.  */
4981
4982   /* All enums in the type should have an identical underlying value.  */
4983   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4984     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4985       return 0;
4986
4987   /* All enumerals should also have the same name (modulo any numerical
4988      suffix).  */
4989   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4990     {
4991       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4992       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4993       int len_1 = strlen (name_1);
4994       int len_2 = strlen (name_2);
4995
4996       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4997       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4998       if (len_1 != len_2
4999           || strncmp (TYPE_FIELD_NAME (type1, i),
5000                       TYPE_FIELD_NAME (type2, i),
5001                       len_1) != 0)
5002         return 0;
5003     }
5004
5005   return 1;
5006 }
5007
5008 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
5009    that are deemed "identical" for practical purposes.  Sometimes,
5010    enumerals are not strictly identical, but their types are so similar
5011    that they can be considered identical.
5012
5013    For instance, consider the following code:
5014
5015       type Color is (Black, Red, Green, Blue, White);
5016       type RGB_Color is new Color range Red .. Blue;
5017
5018    Type RGB_Color is a subrange of an implicit type which is a copy
5019    of type Color. If we call that implicit type RGB_ColorB ("B" is
5020    for "Base Type"), then type RGB_ColorB is a copy of type Color.
5021    As a result, when an expression references any of the enumeral
5022    by name (Eg. "print green"), the expression is technically
5023    ambiguous and the user should be asked to disambiguate. But
5024    doing so would only hinder the user, since it wouldn't matter
5025    what choice he makes, the outcome would always be the same.
5026    So, for practical purposes, we consider them as the same.  */
5027
5028 static int
5029 symbols_are_identical_enums (struct block_symbol *syms, int nsyms)
5030 {
5031   int i;
5032
5033   /* Before performing a thorough comparison check of each type,
5034      we perform a series of inexpensive checks.  We expect that these
5035      checks will quickly fail in the vast majority of cases, and thus
5036      help prevent the unnecessary use of a more expensive comparison.
5037      Said comparison also expects us to make some of these checks
5038      (see ada_identical_enum_types_p).  */
5039
5040   /* Quick check: All symbols should have an enum type.  */
5041   for (i = 0; i < nsyms; i++)
5042     if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM)
5043       return 0;
5044
5045   /* Quick check: They should all have the same value.  */
5046   for (i = 1; i < nsyms; i++)
5047     if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
5048       return 0;
5049
5050   /* Quick check: They should all have the same number of enumerals.  */
5051   for (i = 1; i < nsyms; i++)
5052     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].symbol))
5053         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].symbol)))
5054       return 0;
5055
5056   /* All the sanity checks passed, so we might have a set of
5057      identical enumeration types.  Perform a more complete
5058      comparison of the type of each symbol.  */
5059   for (i = 1; i < nsyms; i++)
5060     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
5061                                      SYMBOL_TYPE (syms[0].symbol)))
5062       return 0;
5063
5064   return 1;
5065 }
5066
5067 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
5068    duplicate other symbols in the list (The only case I know of where
5069    this happens is when object files containing stabs-in-ecoff are
5070    linked with files containing ordinary ecoff debugging symbols (or no
5071    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
5072    Returns the number of items in the modified list.  */
5073
5074 static int
5075 remove_extra_symbols (struct block_symbol *syms, int nsyms)
5076 {
5077   int i, j;
5078
5079   /* We should never be called with less than 2 symbols, as there
5080      cannot be any extra symbol in that case.  But it's easy to
5081      handle, since we have nothing to do in that case.  */
5082   if (nsyms < 2)
5083     return nsyms;
5084
5085   i = 0;
5086   while (i < nsyms)
5087     {
5088       int remove_p = 0;
5089
5090       /* If two symbols have the same name and one of them is a stub type,
5091          the get rid of the stub.  */
5092
5093       if (TYPE_STUB (SYMBOL_TYPE (syms[i].symbol))
5094           && SYMBOL_LINKAGE_NAME (syms[i].symbol) != NULL)
5095         {
5096           for (j = 0; j < nsyms; j++)
5097             {
5098               if (j != i
5099                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].symbol))
5100                   && SYMBOL_LINKAGE_NAME (syms[j].symbol) != NULL
5101                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].symbol),
5102                              SYMBOL_LINKAGE_NAME (syms[j].symbol)) == 0)
5103                 remove_p = 1;
5104             }
5105         }
5106
5107       /* Two symbols with the same name, same class and same address
5108          should be identical.  */
5109
5110       else if (SYMBOL_LINKAGE_NAME (syms[i].symbol) != NULL
5111           && SYMBOL_CLASS (syms[i].symbol) == LOC_STATIC
5112           && is_nondebugging_type (SYMBOL_TYPE (syms[i].symbol)))
5113         {
5114           for (j = 0; j < nsyms; j += 1)
5115             {
5116               if (i != j
5117                   && SYMBOL_LINKAGE_NAME (syms[j].symbol) != NULL
5118                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].symbol),
5119                              SYMBOL_LINKAGE_NAME (syms[j].symbol)) == 0
5120                   && SYMBOL_CLASS (syms[i].symbol)
5121                        == SYMBOL_CLASS (syms[j].symbol)
5122                   && SYMBOL_VALUE_ADDRESS (syms[i].symbol)
5123                   == SYMBOL_VALUE_ADDRESS (syms[j].symbol))
5124                 remove_p = 1;
5125             }
5126         }
5127       
5128       if (remove_p)
5129         {
5130           for (j = i + 1; j < nsyms; j += 1)
5131             syms[j - 1] = syms[j];
5132           nsyms -= 1;
5133         }
5134
5135       i += 1;
5136     }
5137
5138   /* If all the remaining symbols are identical enumerals, then
5139      just keep the first one and discard the rest.
5140
5141      Unlike what we did previously, we do not discard any entry
5142      unless they are ALL identical.  This is because the symbol
5143      comparison is not a strict comparison, but rather a practical
5144      comparison.  If all symbols are considered identical, then
5145      we can just go ahead and use the first one and discard the rest.
5146      But if we cannot reduce the list to a single element, we have
5147      to ask the user to disambiguate anyways.  And if we have to
5148      present a multiple-choice menu, it's less confusing if the list
5149      isn't missing some choices that were identical and yet distinct.  */
5150   if (symbols_are_identical_enums (syms, nsyms))
5151     nsyms = 1;
5152
5153   return nsyms;
5154 }
5155
5156 /* Given a type that corresponds to a renaming entity, use the type name
5157    to extract the scope (package name or function name, fully qualified,
5158    and following the GNAT encoding convention) where this renaming has been
5159    defined.  The string returned needs to be deallocated after use.  */
5160
5161 static char *
5162 xget_renaming_scope (struct type *renaming_type)
5163 {
5164   /* The renaming types adhere to the following convention:
5165      <scope>__<rename>___<XR extension>.
5166      So, to extract the scope, we search for the "___XR" extension,
5167      and then backtrack until we find the first "__".  */
5168
5169   const char *name = type_name_no_tag (renaming_type);
5170   const char *suffix = strstr (name, "___XR");
5171   const char *last;
5172   int scope_len;
5173   char *scope;
5174
5175   /* Now, backtrack a bit until we find the first "__".  Start looking
5176      at suffix - 3, as the <rename> part is at least one character long.  */
5177
5178   for (last = suffix - 3; last > name; last--)
5179     if (last[0] == '_' && last[1] == '_')
5180       break;
5181
5182   /* Make a copy of scope and return it.  */
5183
5184   scope_len = last - name;
5185   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
5186
5187   strncpy (scope, name, scope_len);
5188   scope[scope_len] = '\0';
5189
5190   return scope;
5191 }
5192
5193 /* Return nonzero if NAME corresponds to a package name.  */
5194
5195 static int
5196 is_package_name (const char *name)
5197 {
5198   /* Here, We take advantage of the fact that no symbols are generated
5199      for packages, while symbols are generated for each function.
5200      So the condition for NAME represent a package becomes equivalent
5201      to NAME not existing in our list of symbols.  There is only one
5202      small complication with library-level functions (see below).  */
5203
5204   char *fun_name;
5205
5206   /* If it is a function that has not been defined at library level,
5207      then we should be able to look it up in the symbols.  */
5208   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5209     return 0;
5210
5211   /* Library-level function names start with "_ada_".  See if function
5212      "_ada_" followed by NAME can be found.  */
5213
5214   /* Do a quick check that NAME does not contain "__", since library-level
5215      functions names cannot contain "__" in them.  */
5216   if (strstr (name, "__") != NULL)
5217     return 0;
5218
5219   fun_name = xstrprintf ("_ada_%s", name);
5220
5221   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
5222 }
5223
5224 /* Return nonzero if SYM corresponds to a renaming entity that is
5225    not visible from FUNCTION_NAME.  */
5226
5227 static int
5228 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
5229 {
5230   char *scope;
5231   struct cleanup *old_chain;
5232
5233   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5234     return 0;
5235
5236   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
5237   old_chain = make_cleanup (xfree, scope);
5238
5239   /* If the rename has been defined in a package, then it is visible.  */
5240   if (is_package_name (scope))
5241     {
5242       do_cleanups (old_chain);
5243       return 0;
5244     }
5245
5246   /* Check that the rename is in the current function scope by checking
5247      that its name starts with SCOPE.  */
5248
5249   /* If the function name starts with "_ada_", it means that it is
5250      a library-level function.  Strip this prefix before doing the
5251      comparison, as the encoding for the renaming does not contain
5252      this prefix.  */
5253   if (startswith (function_name, "_ada_"))
5254     function_name += 5;
5255
5256   {
5257     int is_invisible = !startswith (function_name, scope);
5258
5259     do_cleanups (old_chain);
5260     return is_invisible;
5261   }
5262 }
5263
5264 /* Remove entries from SYMS that corresponds to a renaming entity that
5265    is not visible from the function associated with CURRENT_BLOCK or
5266    that is superfluous due to the presence of more specific renaming
5267    information.  Places surviving symbols in the initial entries of
5268    SYMS and returns the number of surviving symbols.
5269    
5270    Rationale:
5271    First, in cases where an object renaming is implemented as a
5272    reference variable, GNAT may produce both the actual reference
5273    variable and the renaming encoding.  In this case, we discard the
5274    latter.
5275
5276    Second, GNAT emits a type following a specified encoding for each renaming
5277    entity.  Unfortunately, STABS currently does not support the definition
5278    of types that are local to a given lexical block, so all renamings types
5279    are emitted at library level.  As a consequence, if an application
5280    contains two renaming entities using the same name, and a user tries to
5281    print the value of one of these entities, the result of the ada symbol
5282    lookup will also contain the wrong renaming type.
5283
5284    This function partially covers for this limitation by attempting to
5285    remove from the SYMS list renaming symbols that should be visible
5286    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5287    method with the current information available.  The implementation
5288    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5289    
5290       - When the user tries to print a rename in a function while there
5291         is another rename entity defined in a package:  Normally, the
5292         rename in the function has precedence over the rename in the
5293         package, so the latter should be removed from the list.  This is
5294         currently not the case.
5295         
5296       - This function will incorrectly remove valid renames if
5297         the CURRENT_BLOCK corresponds to a function which symbol name
5298         has been changed by an "Export" pragma.  As a consequence,
5299         the user will be unable to print such rename entities.  */
5300
5301 static int
5302 remove_irrelevant_renamings (struct block_symbol *syms,
5303                              int nsyms, const struct block *current_block)
5304 {
5305   struct symbol *current_function;
5306   const char *current_function_name;
5307   int i;
5308   int is_new_style_renaming;
5309
5310   /* If there is both a renaming foo___XR... encoded as a variable and
5311      a simple variable foo in the same block, discard the latter.
5312      First, zero out such symbols, then compress.  */
5313   is_new_style_renaming = 0;
5314   for (i = 0; i < nsyms; i += 1)
5315     {
5316       struct symbol *sym = syms[i].symbol;
5317       const struct block *block = syms[i].block;
5318       const char *name;
5319       const char *suffix;
5320
5321       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5322         continue;
5323       name = SYMBOL_LINKAGE_NAME (sym);
5324       suffix = strstr (name, "___XR");
5325
5326       if (suffix != NULL)
5327         {
5328           int name_len = suffix - name;
5329           int j;
5330
5331           is_new_style_renaming = 1;
5332           for (j = 0; j < nsyms; j += 1)
5333             if (i != j && syms[j].symbol != NULL
5334                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].symbol),
5335                             name_len) == 0
5336                 && block == syms[j].block)
5337               syms[j].symbol = NULL;
5338         }
5339     }
5340   if (is_new_style_renaming)
5341     {
5342       int j, k;
5343
5344       for (j = k = 0; j < nsyms; j += 1)
5345         if (syms[j].symbol != NULL)
5346             {
5347               syms[k] = syms[j];
5348               k += 1;
5349             }
5350       return k;
5351     }
5352
5353   /* Extract the function name associated to CURRENT_BLOCK.
5354      Abort if unable to do so.  */
5355
5356   if (current_block == NULL)
5357     return nsyms;
5358
5359   current_function = block_linkage_function (current_block);
5360   if (current_function == NULL)
5361     return nsyms;
5362
5363   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5364   if (current_function_name == NULL)
5365     return nsyms;
5366
5367   /* Check each of the symbols, and remove it from the list if it is
5368      a type corresponding to a renaming that is out of the scope of
5369      the current block.  */
5370
5371   i = 0;
5372   while (i < nsyms)
5373     {
5374       if (ada_parse_renaming (syms[i].symbol, NULL, NULL, NULL)
5375           == ADA_OBJECT_RENAMING
5376           && old_renaming_is_invisible (syms[i].symbol, current_function_name))
5377         {
5378           int j;
5379
5380           for (j = i + 1; j < nsyms; j += 1)
5381             syms[j - 1] = syms[j];
5382           nsyms -= 1;
5383         }
5384       else
5385         i += 1;
5386     }
5387
5388   return nsyms;
5389 }
5390
5391 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5392    whose name and domain match NAME and DOMAIN respectively.
5393    If no match was found, then extend the search to "enclosing"
5394    routines (in other words, if we're inside a nested function,
5395    search the symbols defined inside the enclosing functions).
5396    If WILD_MATCH_P is nonzero, perform the naming matching in
5397    "wild" mode (see function "wild_match" for more info).
5398
5399    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5400
5401 static void
5402 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5403                        const struct block *block, domain_enum domain,
5404                        int wild_match_p)
5405 {
5406   int block_depth = 0;
5407
5408   while (block != NULL)
5409     {
5410       block_depth += 1;
5411       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5412                              wild_match_p);
5413
5414       /* If we found a non-function match, assume that's the one.  */
5415       if (is_nonfunction (defns_collected (obstackp, 0),
5416                           num_defns_collected (obstackp)))
5417         return;
5418
5419       block = BLOCK_SUPERBLOCK (block);
5420     }
5421
5422   /* If no luck so far, try to find NAME as a local symbol in some lexically
5423      enclosing subprogram.  */
5424   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5425     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5426 }
5427
5428 /* An object of this type is used as the user_data argument when
5429    calling the map_matching_symbols method.  */
5430
5431 struct match_data
5432 {
5433   struct objfile *objfile;
5434   struct obstack *obstackp;
5435   struct symbol *arg_sym;
5436   int found_sym;
5437 };
5438
5439 /* A callback for add_nonlocal_symbols that adds SYM, found in BLOCK,
5440    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5441    containing the obstack that collects the symbol list, the file that SYM
5442    must come from, a flag indicating whether a non-argument symbol has
5443    been found in the current block, and the last argument symbol
5444    passed in SYM within the current block (if any).  When SYM is null,
5445    marking the end of a block, the argument symbol is added if no
5446    other has been found.  */
5447
5448 static int
5449 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5450 {
5451   struct match_data *data = (struct match_data *) data0;
5452   
5453   if (sym == NULL)
5454     {
5455       if (!data->found_sym && data->arg_sym != NULL) 
5456         add_defn_to_vec (data->obstackp,
5457                          fixup_symbol_section (data->arg_sym, data->objfile),
5458                          block);
5459       data->found_sym = 0;
5460       data->arg_sym = NULL;
5461     }
5462   else 
5463     {
5464       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5465         return 0;
5466       else if (SYMBOL_IS_ARGUMENT (sym))
5467         data->arg_sym = sym;
5468       else
5469         {
5470           data->found_sym = 1;
5471           add_defn_to_vec (data->obstackp,
5472                            fixup_symbol_section (sym, data->objfile),
5473                            block);
5474         }
5475     }
5476   return 0;
5477 }
5478
5479 /* Helper for add_nonlocal_symbols.  Find symbols in DOMAIN which are targetted
5480    by renamings matching NAME in BLOCK.  Add these symbols to OBSTACKP.  If
5481    WILD_MATCH_P is nonzero, perform the naming matching in "wild" mode (see
5482    function "wild_match" for more information).  Return whether we found such
5483    symbols.  */
5484
5485 static int
5486 ada_add_block_renamings (struct obstack *obstackp,
5487                          const struct block *block,
5488                          const char *name,
5489                          domain_enum domain,
5490                          int wild_match_p)
5491 {
5492   struct using_direct *renaming;
5493   int defns_mark = num_defns_collected (obstackp);
5494
5495   for (renaming = block_using (block);
5496        renaming != NULL;
5497        renaming = renaming->next)
5498     {
5499       const char *r_name;
5500       int name_match;
5501
5502       /* Avoid infinite recursions: skip this renaming if we are actually
5503          already traversing it.
5504
5505          Currently, symbol lookup in Ada don't use the namespace machinery from
5506          C++/Fortran support: skip namespace imports that use them.  */
5507       if (renaming->searched
5508           || (renaming->import_src != NULL
5509               && renaming->import_src[0] != '\0')
5510           || (renaming->import_dest != NULL
5511               && renaming->import_dest[0] != '\0'))
5512         continue;
5513       renaming->searched = 1;
5514
5515       /* TODO: here, we perform another name-based symbol lookup, which can
5516          pull its own multiple overloads.  In theory, we should be able to do
5517          better in this case since, in DWARF, DW_AT_import is a DIE reference,
5518          not a simple name.  But in order to do this, we would need to enhance
5519          the DWARF reader to associate a symbol to this renaming, instead of a
5520          name.  So, for now, we do something simpler: re-use the C++/Fortran
5521          namespace machinery.  */
5522       r_name = (renaming->alias != NULL
5523                 ? renaming->alias
5524                 : renaming->declaration);
5525       name_match
5526         = wild_match_p ? wild_match (r_name, name) : strcmp (r_name, name);
5527       if (name_match == 0)
5528         ada_add_all_symbols (obstackp, block, renaming->declaration, domain,
5529                              1, NULL);
5530       renaming->searched = 0;
5531     }
5532   return num_defns_collected (obstackp) != defns_mark;
5533 }
5534
5535 /* Implements compare_names, but only applying the comparision using
5536    the given CASING.  */
5537
5538 static int
5539 compare_names_with_case (const char *string1, const char *string2,
5540                          enum case_sensitivity casing)
5541 {
5542   while (*string1 != '\0' && *string2 != '\0')
5543     {
5544       char c1, c2;
5545
5546       if (isspace (*string1) || isspace (*string2))
5547         return strcmp_iw_ordered (string1, string2);
5548
5549       if (casing == case_sensitive_off)
5550         {
5551           c1 = tolower (*string1);
5552           c2 = tolower (*string2);
5553         }
5554       else
5555         {
5556           c1 = *string1;
5557           c2 = *string2;
5558         }
5559       if (c1 != c2)
5560         break;
5561
5562       string1 += 1;
5563       string2 += 1;
5564     }
5565
5566   switch (*string1)
5567     {
5568     case '(':
5569       return strcmp_iw_ordered (string1, string2);
5570     case '_':
5571       if (*string2 == '\0')
5572         {
5573           if (is_name_suffix (string1))
5574             return 0;
5575           else
5576             return 1;
5577         }
5578       /* FALLTHROUGH */
5579     default:
5580       if (*string2 == '(')
5581         return strcmp_iw_ordered (string1, string2);
5582       else
5583         {
5584           if (casing == case_sensitive_off)
5585             return tolower (*string1) - tolower (*string2);
5586           else
5587             return *string1 - *string2;
5588         }
5589     }
5590 }
5591
5592 /* Compare STRING1 to STRING2, with results as for strcmp.
5593    Compatible with strcmp_iw_ordered in that...
5594
5595        strcmp_iw_ordered (STRING1, STRING2) <= 0
5596
5597    ... implies...
5598
5599        compare_names (STRING1, STRING2) <= 0
5600
5601    (they may differ as to what symbols compare equal).  */
5602
5603 static int
5604 compare_names (const char *string1, const char *string2)
5605 {
5606   int result;
5607
5608   /* Similar to what strcmp_iw_ordered does, we need to perform
5609      a case-insensitive comparison first, and only resort to
5610      a second, case-sensitive, comparison if the first one was
5611      not sufficient to differentiate the two strings.  */
5612
5613   result = compare_names_with_case (string1, string2, case_sensitive_off);
5614   if (result == 0)
5615     result = compare_names_with_case (string1, string2, case_sensitive_on);
5616
5617   return result;
5618 }
5619
5620 /* Add to OBSTACKP all non-local symbols whose name and domain match
5621    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5622    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5623
5624 static void
5625 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5626                       domain_enum domain, int global,
5627                       int is_wild_match)
5628 {
5629   struct objfile *objfile;
5630   struct compunit_symtab *cu;
5631   struct match_data data;
5632
5633   memset (&data, 0, sizeof data);
5634   data.obstackp = obstackp;
5635
5636   ALL_OBJFILES (objfile)
5637     {
5638       data.objfile = objfile;
5639
5640       if (is_wild_match)
5641         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5642                                                aux_add_nonlocal_symbols, &data,
5643                                                wild_match, NULL);
5644       else
5645         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5646                                                aux_add_nonlocal_symbols, &data,
5647                                                full_match, compare_names);
5648
5649       ALL_OBJFILE_COMPUNITS (objfile, cu)
5650         {
5651           const struct block *global_block
5652             = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5653
5654           if (ada_add_block_renamings (obstackp, global_block , name, domain,
5655                                        is_wild_match))
5656             data.found_sym = 1;
5657         }
5658     }
5659
5660   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5661     {
5662       ALL_OBJFILES (objfile)
5663         {
5664           char *name1 = (char *) alloca (strlen (name) + sizeof ("_ada_"));
5665           strcpy (name1, "_ada_");
5666           strcpy (name1 + sizeof ("_ada_") - 1, name);
5667           data.objfile = objfile;
5668           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5669                                                  global,
5670                                                  aux_add_nonlocal_symbols,
5671                                                  &data,
5672                                                  full_match, compare_names);
5673         }
5674     }           
5675 }
5676
5677 /* Find symbols in DOMAIN matching NAME, in BLOCK and, if FULL_SEARCH is
5678    non-zero, enclosing scope and in global scopes, returning the number of
5679    matches.  Add these to OBSTACKP.
5680
5681    When FULL_SEARCH is non-zero, any non-function/non-enumeral
5682    symbol match within the nest of blocks whose innermost member is BLOCK,
5683    is the one match returned (no other matches in that or
5684    enclosing blocks is returned).  If there are any matches in or
5685    surrounding BLOCK, then these alone are returned.
5686
5687    Names prefixed with "standard__" are handled specially: "standard__"
5688    is first stripped off, and only static and global symbols are searched.
5689
5690    If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5691    to lookup global symbols.  */
5692
5693 static void
5694 ada_add_all_symbols (struct obstack *obstackp,
5695                      const struct block *block,
5696                      const char *name,
5697                      domain_enum domain,
5698                      int full_search,
5699                      int *made_global_lookup_p)
5700 {
5701   struct symbol *sym;
5702   const int wild_match_p = should_use_wild_match (name);
5703
5704   if (made_global_lookup_p)
5705     *made_global_lookup_p = 0;
5706
5707   /* Special case: If the user specifies a symbol name inside package
5708      Standard, do a non-wild matching of the symbol name without
5709      the "standard__" prefix.  This was primarily introduced in order
5710      to allow the user to specifically access the standard exceptions
5711      using, for instance, Standard.Constraint_Error when Constraint_Error
5712      is ambiguous (due to the user defining its own Constraint_Error
5713      entity inside its program).  */
5714   if (startswith (name, "standard__"))
5715     {
5716       block = NULL;
5717       name = name + sizeof ("standard__") - 1;
5718     }
5719
5720   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5721
5722   if (block != NULL)
5723     {
5724       if (full_search)
5725         ada_add_local_symbols (obstackp, name, block, domain, wild_match_p);
5726       else
5727         {
5728           /* In the !full_search case we're are being called by
5729              ada_iterate_over_symbols, and we don't want to search
5730              superblocks.  */
5731           ada_add_block_symbols (obstackp, block, name, domain, NULL,
5732                                  wild_match_p);
5733         }
5734       if (num_defns_collected (obstackp) > 0 || !full_search)
5735         return;
5736     }
5737
5738   /* No non-global symbols found.  Check our cache to see if we have
5739      already performed this search before.  If we have, then return
5740      the same result.  */
5741
5742   if (lookup_cached_symbol (name, domain, &sym, &block))
5743     {
5744       if (sym != NULL)
5745         add_defn_to_vec (obstackp, sym, block);
5746       return;
5747     }
5748
5749   if (made_global_lookup_p)
5750     *made_global_lookup_p = 1;
5751
5752   /* Search symbols from all global blocks.  */
5753  
5754   add_nonlocal_symbols (obstackp, name, domain, 1, wild_match_p);
5755
5756   /* Now add symbols from all per-file blocks if we've gotten no hits
5757      (not strictly correct, but perhaps better than an error).  */
5758
5759   if (num_defns_collected (obstackp) == 0)
5760     add_nonlocal_symbols (obstackp, name, domain, 0, wild_match_p);
5761 }
5762
5763 /* Find symbols in DOMAIN matching NAME, in BLOCK and, if full_search is
5764    non-zero, enclosing scope and in global scopes, returning the number of
5765    matches.
5766    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5767    indicating the symbols found and the blocks and symbol tables (if
5768    any) in which they were found.  This vector is transient---good only to
5769    the next call of ada_lookup_symbol_list.
5770
5771    When full_search is non-zero, any non-function/non-enumeral
5772    symbol match within the nest of blocks whose innermost member is BLOCK,
5773    is the one match returned (no other matches in that or
5774    enclosing blocks is returned).  If there are any matches in or
5775    surrounding BLOCK, then these alone are returned.
5776
5777    Names prefixed with "standard__" are handled specially: "standard__"
5778    is first stripped off, and only static and global symbols are searched.  */
5779
5780 static int
5781 ada_lookup_symbol_list_worker (const char *name, const struct block *block,
5782                                domain_enum domain,
5783                                struct block_symbol **results,
5784                                int full_search)
5785 {
5786   const int wild_match_p = should_use_wild_match (name);
5787   int syms_from_global_search;
5788   int ndefns;
5789
5790   obstack_free (&symbol_list_obstack, NULL);
5791   obstack_init (&symbol_list_obstack);
5792   ada_add_all_symbols (&symbol_list_obstack, block, name, domain,
5793                        full_search, &syms_from_global_search);
5794
5795   ndefns = num_defns_collected (&symbol_list_obstack);
5796   *results = defns_collected (&symbol_list_obstack, 1);
5797
5798   ndefns = remove_extra_symbols (*results, ndefns);
5799
5800   if (ndefns == 0 && full_search && syms_from_global_search)
5801     cache_symbol (name, domain, NULL, NULL);
5802
5803   if (ndefns == 1 && full_search && syms_from_global_search)
5804     cache_symbol (name, domain, (*results)[0].symbol, (*results)[0].block);
5805
5806   ndefns = remove_irrelevant_renamings (*results, ndefns, block);
5807   return ndefns;
5808 }
5809
5810 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5811    in global scopes, returning the number of matches, and setting *RESULTS
5812    to a vector of (SYM,BLOCK) tuples.
5813    See ada_lookup_symbol_list_worker for further details.  */
5814
5815 int
5816 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5817                         domain_enum domain, struct block_symbol **results)
5818 {
5819   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5820 }
5821
5822 /* Implementation of the la_iterate_over_symbols method.  */
5823
5824 static void
5825 ada_iterate_over_symbols (const struct block *block,
5826                           const char *name, domain_enum domain,
5827                           symbol_found_callback_ftype *callback,
5828                           void *data)
5829 {
5830   int ndefs, i;
5831   struct block_symbol *results;
5832
5833   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5834   for (i = 0; i < ndefs; ++i)
5835     {
5836       if (! (*callback) (results[i].symbol, data))
5837         break;
5838     }
5839 }
5840
5841 /* If NAME is the name of an entity, return a string that should
5842    be used to look that entity up in Ada units.  This string should
5843    be deallocated after use using xfree.
5844
5845    NAME can have any form that the "break" or "print" commands might
5846    recognize.  In other words, it does not have to be the "natural"
5847    name, or the "encoded" name.  */
5848
5849 char *
5850 ada_name_for_lookup (const char *name)
5851 {
5852   char *canon;
5853   int nlen = strlen (name);
5854
5855   if (name[0] == '<' && name[nlen - 1] == '>')
5856     {
5857       canon = (char *) xmalloc (nlen - 1);
5858       memcpy (canon, name + 1, nlen - 2);
5859       canon[nlen - 2] = '\0';
5860     }
5861   else
5862     canon = xstrdup (ada_encode (ada_fold_name (name)));
5863   return canon;
5864 }
5865
5866 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5867    to 1, but choosing the first symbol found if there are multiple
5868    choices.
5869
5870    The result is stored in *INFO, which must be non-NULL.
5871    If no match is found, INFO->SYM is set to NULL.  */
5872
5873 void
5874 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5875                            domain_enum domain,
5876                            struct block_symbol *info)
5877 {
5878   struct block_symbol *candidates;
5879   int n_candidates;
5880
5881   gdb_assert (info != NULL);
5882   memset (info, 0, sizeof (struct block_symbol));
5883
5884   n_candidates = ada_lookup_symbol_list (name, block, domain, &candidates);
5885   if (n_candidates == 0)
5886     return;
5887
5888   *info = candidates[0];
5889   info->symbol = fixup_symbol_section (info->symbol, NULL);
5890 }
5891
5892 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5893    scope and in global scopes, or NULL if none.  NAME is folded and
5894    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5895    choosing the first symbol if there are multiple choices.
5896    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5897
5898 struct block_symbol
5899 ada_lookup_symbol (const char *name, const struct block *block0,
5900                    domain_enum domain, int *is_a_field_of_this)
5901 {
5902   struct block_symbol info;
5903
5904   if (is_a_field_of_this != NULL)
5905     *is_a_field_of_this = 0;
5906
5907   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5908                              block0, domain, &info);
5909   return info;
5910 }
5911
5912 static struct block_symbol
5913 ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5914                             const char *name,
5915                             const struct block *block,
5916                             const domain_enum domain)
5917 {
5918   struct block_symbol sym;
5919
5920   sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5921   if (sym.symbol != NULL)
5922     return sym;
5923
5924   /* If we haven't found a match at this point, try the primitive
5925      types.  In other languages, this search is performed before
5926      searching for global symbols in order to short-circuit that
5927      global-symbol search if it happens that the name corresponds
5928      to a primitive type.  But we cannot do the same in Ada, because
5929      it is perfectly legitimate for a program to declare a type which
5930      has the same name as a standard type.  If looking up a type in
5931      that situation, we have traditionally ignored the primitive type
5932      in favor of user-defined types.  This is why, unlike most other
5933      languages, we search the primitive types this late and only after
5934      having searched the global symbols without success.  */
5935
5936   if (domain == VAR_DOMAIN)
5937     {
5938       struct gdbarch *gdbarch;
5939
5940       if (block == NULL)
5941         gdbarch = target_gdbarch ();
5942       else
5943         gdbarch = block_gdbarch (block);
5944       sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5945       if (sym.symbol != NULL)
5946         return sym;
5947     }
5948
5949   return (struct block_symbol) {NULL, NULL};
5950 }
5951
5952
5953 /* True iff STR is a possible encoded suffix of a normal Ada name
5954    that is to be ignored for matching purposes.  Suffixes of parallel
5955    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5956    are given by any of the regular expressions:
5957
5958    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5959    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5960    TKB              [subprogram suffix for task bodies]
5961    _E[0-9]+[bs]$    [protected object entry suffixes]
5962    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5963
5964    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5965    match is performed.  This sequence is used to differentiate homonyms,
5966    is an optional part of a valid name suffix.  */
5967
5968 static int
5969 is_name_suffix (const char *str)
5970 {
5971   int k;
5972   const char *matching;
5973   const int len = strlen (str);
5974
5975   /* Skip optional leading __[0-9]+.  */
5976
5977   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5978     {
5979       str += 3;
5980       while (isdigit (str[0]))
5981         str += 1;
5982     }
5983   
5984   /* [.$][0-9]+ */
5985
5986   if (str[0] == '.' || str[0] == '$')
5987     {
5988       matching = str + 1;
5989       while (isdigit (matching[0]))
5990         matching += 1;
5991       if (matching[0] == '\0')
5992         return 1;
5993     }
5994
5995   /* ___[0-9]+ */
5996
5997   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5998     {
5999       matching = str + 3;
6000       while (isdigit (matching[0]))
6001         matching += 1;
6002       if (matching[0] == '\0')
6003         return 1;
6004     }
6005
6006   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
6007
6008   if (strcmp (str, "TKB") == 0)
6009     return 1;
6010
6011 #if 0
6012   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
6013      with a N at the end.  Unfortunately, the compiler uses the same
6014      convention for other internal types it creates.  So treating
6015      all entity names that end with an "N" as a name suffix causes
6016      some regressions.  For instance, consider the case of an enumerated
6017      type.  To support the 'Image attribute, it creates an array whose
6018      name ends with N.
6019      Having a single character like this as a suffix carrying some
6020      information is a bit risky.  Perhaps we should change the encoding
6021      to be something like "_N" instead.  In the meantime, do not do
6022      the following check.  */
6023   /* Protected Object Subprograms */
6024   if (len == 1 && str [0] == 'N')
6025     return 1;
6026 #endif
6027
6028   /* _E[0-9]+[bs]$ */
6029   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
6030     {
6031       matching = str + 3;
6032       while (isdigit (matching[0]))
6033         matching += 1;
6034       if ((matching[0] == 'b' || matching[0] == 's')
6035           && matching [1] == '\0')
6036         return 1;
6037     }
6038
6039   /* ??? We should not modify STR directly, as we are doing below.  This
6040      is fine in this case, but may become problematic later if we find
6041      that this alternative did not work, and want to try matching
6042      another one from the begining of STR.  Since we modified it, we
6043      won't be able to find the begining of the string anymore!  */
6044   if (str[0] == 'X')
6045     {
6046       str += 1;
6047       while (str[0] != '_' && str[0] != '\0')
6048         {
6049           if (str[0] != 'n' && str[0] != 'b')
6050             return 0;
6051           str += 1;
6052         }
6053     }
6054
6055   if (str[0] == '\000')
6056     return 1;
6057
6058   if (str[0] == '_')
6059     {
6060       if (str[1] != '_' || str[2] == '\000')
6061         return 0;
6062       if (str[2] == '_')
6063         {
6064           if (strcmp (str + 3, "JM") == 0)
6065             return 1;
6066           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
6067              the LJM suffix in favor of the JM one.  But we will
6068              still accept LJM as a valid suffix for a reasonable
6069              amount of time, just to allow ourselves to debug programs
6070              compiled using an older version of GNAT.  */
6071           if (strcmp (str + 3, "LJM") == 0)
6072             return 1;
6073           if (str[3] != 'X')
6074             return 0;
6075           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
6076               || str[4] == 'U' || str[4] == 'P')
6077             return 1;
6078           if (str[4] == 'R' && str[5] != 'T')
6079             return 1;
6080           return 0;
6081         }
6082       if (!isdigit (str[2]))
6083         return 0;
6084       for (k = 3; str[k] != '\0'; k += 1)
6085         if (!isdigit (str[k]) && str[k] != '_')
6086           return 0;
6087       return 1;
6088     }
6089   if (str[0] == '$' && isdigit (str[1]))
6090     {
6091       for (k = 2; str[k] != '\0'; k += 1)
6092         if (!isdigit (str[k]) && str[k] != '_')
6093           return 0;
6094       return 1;
6095     }
6096   return 0;
6097 }
6098
6099 /* Return non-zero if the string starting at NAME and ending before
6100    NAME_END contains no capital letters.  */
6101
6102 static int
6103 is_valid_name_for_wild_match (const char *name0)
6104 {
6105   const char *decoded_name = ada_decode (name0);
6106   int i;
6107
6108   /* If the decoded name starts with an angle bracket, it means that
6109      NAME0 does not follow the GNAT encoding format.  It should then
6110      not be allowed as a possible wild match.  */
6111   if (decoded_name[0] == '<')
6112     return 0;
6113
6114   for (i=0; decoded_name[i] != '\0'; i++)
6115     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
6116       return 0;
6117
6118   return 1;
6119 }
6120
6121 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
6122    that could start a simple name.  Assumes that *NAMEP points into
6123    the string beginning at NAME0.  */
6124
6125 static int
6126 advance_wild_match (const char **namep, const char *name0, int target0)
6127 {
6128   const char *name = *namep;
6129
6130   while (1)
6131     {
6132       int t0, t1;
6133
6134       t0 = *name;
6135       if (t0 == '_')
6136         {
6137           t1 = name[1];
6138           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
6139             {
6140               name += 1;
6141               if (name == name0 + 5 && startswith (name0, "_ada"))
6142                 break;
6143               else
6144                 name += 1;
6145             }
6146           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
6147                                  || name[2] == target0))
6148             {
6149               name += 2;
6150               break;
6151             }
6152           else
6153             return 0;
6154         }
6155       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
6156         name += 1;
6157       else
6158         return 0;
6159     }
6160
6161   *namep = name;
6162   return 1;
6163 }
6164
6165 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
6166    informational suffixes of NAME (i.e., for which is_name_suffix is
6167    true).  Assumes that PATN is a lower-cased Ada simple name.  */
6168
6169 static int
6170 wild_match (const char *name, const char *patn)
6171 {
6172   const char *p;
6173   const char *name0 = name;
6174
6175   while (1)
6176     {
6177       const char *match = name;
6178
6179       if (*name == *patn)
6180         {
6181           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6182             if (*p != *name)
6183               break;
6184           if (*p == '\0' && is_name_suffix (name))
6185             return match != name0 && !is_valid_name_for_wild_match (name0);
6186
6187           if (name[-1] == '_')
6188             name -= 1;
6189         }
6190       if (!advance_wild_match (&name, name0, *patn))
6191         return 1;
6192     }
6193 }
6194
6195 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
6196    informational suffix.  */
6197
6198 static int
6199 full_match (const char *sym_name, const char *search_name)
6200 {
6201   return !match_name (sym_name, search_name, 0);
6202 }
6203
6204
6205 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
6206    vector *defn_symbols, updating the list of symbols in OBSTACKP 
6207    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
6208    OBJFILE is the section containing BLOCK.  */
6209
6210 static void
6211 ada_add_block_symbols (struct obstack *obstackp,
6212                        const struct block *block, const char *name,
6213                        domain_enum domain, struct objfile *objfile,
6214                        int wild)
6215 {
6216   struct block_iterator iter;
6217   int name_len = strlen (name);
6218   /* A matching argument symbol, if any.  */
6219   struct symbol *arg_sym;
6220   /* Set true when we find a matching non-argument symbol.  */
6221   int found_sym;
6222   struct symbol *sym;
6223
6224   arg_sym = NULL;
6225   found_sym = 0;
6226   if (wild)
6227     {
6228       for (sym = block_iter_match_first (block, name, wild_match, &iter);
6229            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
6230       {
6231         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6232                                    SYMBOL_DOMAIN (sym), domain)
6233             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
6234           {
6235             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
6236               continue;
6237             else if (SYMBOL_IS_ARGUMENT (sym))
6238               arg_sym = sym;
6239             else
6240               {
6241                 found_sym = 1;
6242                 add_defn_to_vec (obstackp,
6243                                  fixup_symbol_section (sym, objfile),
6244                                  block);
6245               }
6246           }
6247       }
6248     }
6249   else
6250     {
6251      for (sym = block_iter_match_first (block, name, full_match, &iter);
6252           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
6253       {
6254         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6255                                    SYMBOL_DOMAIN (sym), domain))
6256           {
6257             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6258               {
6259                 if (SYMBOL_IS_ARGUMENT (sym))
6260                   arg_sym = sym;
6261                 else
6262                   {
6263                     found_sym = 1;
6264                     add_defn_to_vec (obstackp,
6265                                      fixup_symbol_section (sym, objfile),
6266                                      block);
6267                   }
6268               }
6269           }
6270       }
6271     }
6272
6273   /* Handle renamings.  */
6274
6275   if (ada_add_block_renamings (obstackp, block, name, domain, wild))
6276     found_sym = 1;
6277
6278   if (!found_sym && arg_sym != NULL)
6279     {
6280       add_defn_to_vec (obstackp,
6281                        fixup_symbol_section (arg_sym, objfile),
6282                        block);
6283     }
6284
6285   if (!wild)
6286     {
6287       arg_sym = NULL;
6288       found_sym = 0;
6289
6290       ALL_BLOCK_SYMBOLS (block, iter, sym)
6291       {
6292         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6293                                    SYMBOL_DOMAIN (sym), domain))
6294           {
6295             int cmp;
6296
6297             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
6298             if (cmp == 0)
6299               {
6300                 cmp = !startswith (SYMBOL_LINKAGE_NAME (sym), "_ada_");
6301                 if (cmp == 0)
6302                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
6303                                  name_len);
6304               }
6305
6306             if (cmp == 0
6307                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
6308               {
6309                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6310                   {
6311                     if (SYMBOL_IS_ARGUMENT (sym))
6312                       arg_sym = sym;
6313                     else
6314                       {
6315                         found_sym = 1;
6316                         add_defn_to_vec (obstackp,
6317                                          fixup_symbol_section (sym, objfile),
6318                                          block);
6319                       }
6320                   }
6321               }
6322           }
6323       }
6324
6325       /* NOTE: This really shouldn't be needed for _ada_ symbols.
6326          They aren't parameters, right?  */
6327       if (!found_sym && arg_sym != NULL)
6328         {
6329           add_defn_to_vec (obstackp,
6330                            fixup_symbol_section (arg_sym, objfile),
6331                            block);
6332         }
6333     }
6334 }
6335 \f
6336
6337                                 /* Symbol Completion */
6338
6339 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
6340    name in a form that's appropriate for the completion.  The result
6341    does not need to be deallocated, but is only good until the next call.
6342
6343    TEXT_LEN is equal to the length of TEXT.
6344    Perform a wild match if WILD_MATCH_P is set.
6345    ENCODED_P should be set if TEXT represents the start of a symbol name
6346    in its encoded form.  */
6347
6348 static const char *
6349 symbol_completion_match (const char *sym_name,
6350                          const char *text, int text_len,
6351                          int wild_match_p, int encoded_p)
6352 {
6353   const int verbatim_match = (text[0] == '<');
6354   int match = 0;
6355
6356   if (verbatim_match)
6357     {
6358       /* Strip the leading angle bracket.  */
6359       text = text + 1;
6360       text_len--;
6361     }
6362
6363   /* First, test against the fully qualified name of the symbol.  */
6364
6365   if (strncmp (sym_name, text, text_len) == 0)
6366     match = 1;
6367
6368   if (match && !encoded_p)
6369     {
6370       /* One needed check before declaring a positive match is to verify
6371          that iff we are doing a verbatim match, the decoded version
6372          of the symbol name starts with '<'.  Otherwise, this symbol name
6373          is not a suitable completion.  */
6374       const char *sym_name_copy = sym_name;
6375       int has_angle_bracket;
6376
6377       sym_name = ada_decode (sym_name);
6378       has_angle_bracket = (sym_name[0] == '<');
6379       match = (has_angle_bracket == verbatim_match);
6380       sym_name = sym_name_copy;
6381     }
6382
6383   if (match && !verbatim_match)
6384     {
6385       /* When doing non-verbatim match, another check that needs to
6386          be done is to verify that the potentially matching symbol name
6387          does not include capital letters, because the ada-mode would
6388          not be able to understand these symbol names without the
6389          angle bracket notation.  */
6390       const char *tmp;
6391
6392       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6393       if (*tmp != '\0')
6394         match = 0;
6395     }
6396
6397   /* Second: Try wild matching...  */
6398
6399   if (!match && wild_match_p)
6400     {
6401       /* Since we are doing wild matching, this means that TEXT
6402          may represent an unqualified symbol name.  We therefore must
6403          also compare TEXT against the unqualified name of the symbol.  */
6404       sym_name = ada_unqualified_name (ada_decode (sym_name));
6405
6406       if (strncmp (sym_name, text, text_len) == 0)
6407         match = 1;
6408     }
6409
6410   /* Finally: If we found a mach, prepare the result to return.  */
6411
6412   if (!match)
6413     return NULL;
6414
6415   if (verbatim_match)
6416     sym_name = add_angle_brackets (sym_name);
6417
6418   if (!encoded_p)
6419     sym_name = ada_decode (sym_name);
6420
6421   return sym_name;
6422 }
6423
6424 /* A companion function to ada_make_symbol_completion_list().
6425    Check if SYM_NAME represents a symbol which name would be suitable
6426    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6427    it is appended at the end of the given string vector SV.
6428
6429    ORIG_TEXT is the string original string from the user command
6430    that needs to be completed.  WORD is the entire command on which
6431    completion should be performed.  These two parameters are used to
6432    determine which part of the symbol name should be added to the
6433    completion vector.
6434    if WILD_MATCH_P is set, then wild matching is performed.
6435    ENCODED_P should be set if TEXT represents a symbol name in its
6436    encoded formed (in which case the completion should also be
6437    encoded).  */
6438
6439 static void
6440 symbol_completion_add (VEC(char_ptr) **sv,
6441                        const char *sym_name,
6442                        const char *text, int text_len,
6443                        const char *orig_text, const char *word,
6444                        int wild_match_p, int encoded_p)
6445 {
6446   const char *match = symbol_completion_match (sym_name, text, text_len,
6447                                                wild_match_p, encoded_p);
6448   char *completion;
6449
6450   if (match == NULL)
6451     return;
6452
6453   /* We found a match, so add the appropriate completion to the given
6454      string vector.  */
6455
6456   if (word == orig_text)
6457     {
6458       completion = (char *) xmalloc (strlen (match) + 5);
6459       strcpy (completion, match);
6460     }
6461   else if (word > orig_text)
6462     {
6463       /* Return some portion of sym_name.  */
6464       completion = (char *) xmalloc (strlen (match) + 5);
6465       strcpy (completion, match + (word - orig_text));
6466     }
6467   else
6468     {
6469       /* Return some of ORIG_TEXT plus sym_name.  */
6470       completion = (char *) xmalloc (strlen (match) + (orig_text - word) + 5);
6471       strncpy (completion, word, orig_text - word);
6472       completion[orig_text - word] = '\0';
6473       strcat (completion, match);
6474     }
6475
6476   VEC_safe_push (char_ptr, *sv, completion);
6477 }
6478
6479 /* An object of this type is passed as the user_data argument to the
6480    expand_symtabs_matching method.  */
6481 struct add_partial_datum
6482 {
6483   VEC(char_ptr) **completions;
6484   const char *text;
6485   int text_len;
6486   const char *text0;
6487   const char *word;
6488   int wild_match;
6489   int encoded;
6490 };
6491
6492 /* A callback for expand_symtabs_matching.  */
6493
6494 static int
6495 ada_complete_symbol_matcher (const char *name, void *user_data)
6496 {
6497   struct add_partial_datum *data = (struct add_partial_datum *) user_data;
6498   
6499   return symbol_completion_match (name, data->text, data->text_len,
6500                                   data->wild_match, data->encoded) != NULL;
6501 }
6502
6503 /* Return a list of possible symbol names completing TEXT0.  WORD is
6504    the entire command on which completion is made.  */
6505
6506 static VEC (char_ptr) *
6507 ada_make_symbol_completion_list (const char *text0, const char *word,
6508                                  enum type_code code)
6509 {
6510   char *text;
6511   int text_len;
6512   int wild_match_p;
6513   int encoded_p;
6514   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6515   struct symbol *sym;
6516   struct compunit_symtab *s;
6517   struct minimal_symbol *msymbol;
6518   struct objfile *objfile;
6519   const struct block *b, *surrounding_static_block = 0;
6520   int i;
6521   struct block_iterator iter;
6522   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6523
6524   gdb_assert (code == TYPE_CODE_UNDEF);
6525
6526   if (text0[0] == '<')
6527     {
6528       text = xstrdup (text0);
6529       make_cleanup (xfree, text);
6530       text_len = strlen (text);
6531       wild_match_p = 0;
6532       encoded_p = 1;
6533     }
6534   else
6535     {
6536       text = xstrdup (ada_encode (text0));
6537       make_cleanup (xfree, text);
6538       text_len = strlen (text);
6539       for (i = 0; i < text_len; i++)
6540         text[i] = tolower (text[i]);
6541
6542       encoded_p = (strstr (text0, "__") != NULL);
6543       /* If the name contains a ".", then the user is entering a fully
6544          qualified entity name, and the match must not be done in wild
6545          mode.  Similarly, if the user wants to complete what looks like
6546          an encoded name, the match must not be done in wild mode.  */
6547       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6548     }
6549
6550   /* First, look at the partial symtab symbols.  */
6551   {
6552     struct add_partial_datum data;
6553
6554     data.completions = &completions;
6555     data.text = text;
6556     data.text_len = text_len;
6557     data.text0 = text0;
6558     data.word = word;
6559     data.wild_match = wild_match_p;
6560     data.encoded = encoded_p;
6561     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, NULL,
6562                              ALL_DOMAIN, &data);
6563   }
6564
6565   /* At this point scan through the misc symbol vectors and add each
6566      symbol you find to the list.  Eventually we want to ignore
6567      anything that isn't a text symbol (everything else will be
6568      handled by the psymtab code above).  */
6569
6570   ALL_MSYMBOLS (objfile, msymbol)
6571   {
6572     QUIT;
6573     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6574                            text, text_len, text0, word, wild_match_p,
6575                            encoded_p);
6576   }
6577
6578   /* Search upwards from currently selected frame (so that we can
6579      complete on local vars.  */
6580
6581   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6582     {
6583       if (!BLOCK_SUPERBLOCK (b))
6584         surrounding_static_block = b;   /* For elmin of dups */
6585
6586       ALL_BLOCK_SYMBOLS (b, iter, sym)
6587       {
6588         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6589                                text, text_len, text0, word,
6590                                wild_match_p, encoded_p);
6591       }
6592     }
6593
6594   /* Go through the symtabs and check the externs and statics for
6595      symbols which match.  */
6596
6597   ALL_COMPUNITS (objfile, s)
6598   {
6599     QUIT;
6600     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
6601     ALL_BLOCK_SYMBOLS (b, iter, sym)
6602     {
6603       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6604                              text, text_len, text0, word,
6605                              wild_match_p, encoded_p);
6606     }
6607   }
6608
6609   ALL_COMPUNITS (objfile, s)
6610   {
6611     QUIT;
6612     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
6613     /* Don't do this block twice.  */
6614     if (b == surrounding_static_block)
6615       continue;
6616     ALL_BLOCK_SYMBOLS (b, iter, sym)
6617     {
6618       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6619                              text, text_len, text0, word,
6620                              wild_match_p, encoded_p);
6621     }
6622   }
6623
6624   do_cleanups (old_chain);
6625   return completions;
6626 }
6627
6628                                 /* Field Access */
6629
6630 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6631    for tagged types.  */
6632
6633 static int
6634 ada_is_dispatch_table_ptr_type (struct type *type)
6635 {
6636   const char *name;
6637
6638   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6639     return 0;
6640
6641   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6642   if (name == NULL)
6643     return 0;
6644
6645   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6646 }
6647
6648 /* Return non-zero if TYPE is an interface tag.  */
6649
6650 static int
6651 ada_is_interface_tag (struct type *type)
6652 {
6653   const char *name = TYPE_NAME (type);
6654
6655   if (name == NULL)
6656     return 0;
6657
6658   return (strcmp (name, "ada__tags__interface_tag") == 0);
6659 }
6660
6661 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6662    to be invisible to users.  */
6663
6664 int
6665 ada_is_ignored_field (struct type *type, int field_num)
6666 {
6667   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6668     return 1;
6669
6670   /* Check the name of that field.  */
6671   {
6672     const char *name = TYPE_FIELD_NAME (type, field_num);
6673
6674     /* Anonymous field names should not be printed.
6675        brobecker/2007-02-20: I don't think this can actually happen
6676        but we don't want to print the value of annonymous fields anyway.  */
6677     if (name == NULL)
6678       return 1;
6679
6680     /* Normally, fields whose name start with an underscore ("_")
6681        are fields that have been internally generated by the compiler,
6682        and thus should not be printed.  The "_parent" field is special,
6683        however: This is a field internally generated by the compiler
6684        for tagged types, and it contains the components inherited from
6685        the parent type.  This field should not be printed as is, but
6686        should not be ignored either.  */
6687     if (name[0] == '_' && !startswith (name, "_parent"))
6688       return 1;
6689   }
6690
6691   /* If this is the dispatch table of a tagged type or an interface tag,
6692      then ignore.  */
6693   if (ada_is_tagged_type (type, 1)
6694       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6695           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6696     return 1;
6697
6698   /* Not a special field, so it should not be ignored.  */
6699   return 0;
6700 }
6701
6702 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6703    pointer or reference type whose ultimate target has a tag field.  */
6704
6705 int
6706 ada_is_tagged_type (struct type *type, int refok)
6707 {
6708   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6709 }
6710
6711 /* True iff TYPE represents the type of X'Tag */
6712
6713 int
6714 ada_is_tag_type (struct type *type)
6715 {
6716   type = ada_check_typedef (type);
6717
6718   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6719     return 0;
6720   else
6721     {
6722       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6723
6724       return (name != NULL
6725               && strcmp (name, "ada__tags__dispatch_table") == 0);
6726     }
6727 }
6728
6729 /* The type of the tag on VAL.  */
6730
6731 struct type *
6732 ada_tag_type (struct value *val)
6733 {
6734   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6735 }
6736
6737 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6738    retired at Ada 05).  */
6739
6740 static int
6741 is_ada95_tag (struct value *tag)
6742 {
6743   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6744 }
6745
6746 /* The value of the tag on VAL.  */
6747
6748 struct value *
6749 ada_value_tag (struct value *val)
6750 {
6751   return ada_value_struct_elt (val, "_tag", 0);
6752 }
6753
6754 /* The value of the tag on the object of type TYPE whose contents are
6755    saved at VALADDR, if it is non-null, or is at memory address
6756    ADDRESS.  */
6757
6758 static struct value *
6759 value_tag_from_contents_and_address (struct type *type,
6760                                      const gdb_byte *valaddr,
6761                                      CORE_ADDR address)
6762 {
6763   int tag_byte_offset;
6764   struct type *tag_type;
6765
6766   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6767                          NULL, NULL, NULL))
6768     {
6769       const gdb_byte *valaddr1 = ((valaddr == NULL)
6770                                   ? NULL
6771                                   : valaddr + tag_byte_offset);
6772       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6773
6774       return value_from_contents_and_address (tag_type, valaddr1, address1);
6775     }
6776   return NULL;
6777 }
6778
6779 static struct type *
6780 type_from_tag (struct value *tag)
6781 {
6782   const char *type_name = ada_tag_name (tag);
6783
6784   if (type_name != NULL)
6785     return ada_find_any_type (ada_encode (type_name));
6786   return NULL;
6787 }
6788
6789 /* Given a value OBJ of a tagged type, return a value of this
6790    type at the base address of the object.  The base address, as
6791    defined in Ada.Tags, it is the address of the primary tag of
6792    the object, and therefore where the field values of its full
6793    view can be fetched.  */
6794
6795 struct value *
6796 ada_tag_value_at_base_address (struct value *obj)
6797 {
6798   struct value *val;
6799   LONGEST offset_to_top = 0;
6800   struct type *ptr_type, *obj_type;
6801   struct value *tag;
6802   CORE_ADDR base_address;
6803
6804   obj_type = value_type (obj);
6805
6806   /* It is the responsability of the caller to deref pointers.  */
6807
6808   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6809       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6810     return obj;
6811
6812   tag = ada_value_tag (obj);
6813   if (!tag)
6814     return obj;
6815
6816   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6817
6818   if (is_ada95_tag (tag))
6819     return obj;
6820
6821   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6822   ptr_type = lookup_pointer_type (ptr_type);
6823   val = value_cast (ptr_type, tag);
6824   if (!val)
6825     return obj;
6826
6827   /* It is perfectly possible that an exception be raised while
6828      trying to determine the base address, just like for the tag;
6829      see ada_tag_name for more details.  We do not print the error
6830      message for the same reason.  */
6831
6832   TRY
6833     {
6834       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6835     }
6836
6837   CATCH (e, RETURN_MASK_ERROR)
6838     {
6839       return obj;
6840     }
6841   END_CATCH
6842
6843   /* If offset is null, nothing to do.  */
6844
6845   if (offset_to_top == 0)
6846     return obj;
6847
6848   /* -1 is a special case in Ada.Tags; however, what should be done
6849      is not quite clear from the documentation.  So do nothing for
6850      now.  */
6851
6852   if (offset_to_top == -1)
6853     return obj;
6854
6855   base_address = value_address (obj) - offset_to_top;
6856   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6857
6858   /* Make sure that we have a proper tag at the new address.
6859      Otherwise, offset_to_top is bogus (which can happen when
6860      the object is not initialized yet).  */
6861
6862   if (!tag)
6863     return obj;
6864
6865   obj_type = type_from_tag (tag);
6866
6867   if (!obj_type)
6868     return obj;
6869
6870   return value_from_contents_and_address (obj_type, NULL, base_address);
6871 }
6872
6873 /* Return the "ada__tags__type_specific_data" type.  */
6874
6875 static struct type *
6876 ada_get_tsd_type (struct inferior *inf)
6877 {
6878   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6879
6880   if (data->tsd_type == 0)
6881     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6882   return data->tsd_type;
6883 }
6884
6885 /* Return the TSD (type-specific data) associated to the given TAG.
6886    TAG is assumed to be the tag of a tagged-type entity.
6887
6888    May return NULL if we are unable to get the TSD.  */
6889
6890 static struct value *
6891 ada_get_tsd_from_tag (struct value *tag)
6892 {
6893   struct value *val;
6894   struct type *type;
6895
6896   /* First option: The TSD is simply stored as a field of our TAG.
6897      Only older versions of GNAT would use this format, but we have
6898      to test it first, because there are no visible markers for
6899      the current approach except the absence of that field.  */
6900
6901   val = ada_value_struct_elt (tag, "tsd", 1);
6902   if (val)
6903     return val;
6904
6905   /* Try the second representation for the dispatch table (in which
6906      there is no explicit 'tsd' field in the referent of the tag pointer,
6907      and instead the tsd pointer is stored just before the dispatch
6908      table.  */
6909
6910   type = ada_get_tsd_type (current_inferior());
6911   if (type == NULL)
6912     return NULL;
6913   type = lookup_pointer_type (lookup_pointer_type (type));
6914   val = value_cast (type, tag);
6915   if (val == NULL)
6916     return NULL;
6917   return value_ind (value_ptradd (val, -1));
6918 }
6919
6920 /* Given the TSD of a tag (type-specific data), return a string
6921    containing the name of the associated type.
6922
6923    The returned value is good until the next call.  May return NULL
6924    if we are unable to determine the tag name.  */
6925
6926 static char *
6927 ada_tag_name_from_tsd (struct value *tsd)
6928 {
6929   static char name[1024];
6930   char *p;
6931   struct value *val;
6932
6933   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6934   if (val == NULL)
6935     return NULL;
6936   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6937   for (p = name; *p != '\0'; p += 1)
6938     if (isalpha (*p))
6939       *p = tolower (*p);
6940   return name;
6941 }
6942
6943 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6944    a C string.
6945
6946    Return NULL if the TAG is not an Ada tag, or if we were unable to
6947    determine the name of that tag.  The result is good until the next
6948    call.  */
6949
6950 const char *
6951 ada_tag_name (struct value *tag)
6952 {
6953   char *name = NULL;
6954
6955   if (!ada_is_tag_type (value_type (tag)))
6956     return NULL;
6957
6958   /* It is perfectly possible that an exception be raised while trying
6959      to determine the TAG's name, even under normal circumstances:
6960      The associated variable may be uninitialized or corrupted, for
6961      instance. We do not let any exception propagate past this point.
6962      instead we return NULL.
6963
6964      We also do not print the error message either (which often is very
6965      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6966      the caller print a more meaningful message if necessary.  */
6967   TRY
6968     {
6969       struct value *tsd = ada_get_tsd_from_tag (tag);
6970
6971       if (tsd != NULL)
6972         name = ada_tag_name_from_tsd (tsd);
6973     }
6974   CATCH (e, RETURN_MASK_ERROR)
6975     {
6976     }
6977   END_CATCH
6978
6979   return name;
6980 }
6981
6982 /* The parent type of TYPE, or NULL if none.  */
6983
6984 struct type *
6985 ada_parent_type (struct type *type)
6986 {
6987   int i;
6988
6989   type = ada_check_typedef (type);
6990
6991   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6992     return NULL;
6993
6994   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6995     if (ada_is_parent_field (type, i))
6996       {
6997         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6998
6999         /* If the _parent field is a pointer, then dereference it.  */
7000         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
7001           parent_type = TYPE_TARGET_TYPE (parent_type);
7002         /* If there is a parallel XVS type, get the actual base type.  */
7003         parent_type = ada_get_base_type (parent_type);
7004
7005         return ada_check_typedef (parent_type);
7006       }
7007
7008   return NULL;
7009 }
7010
7011 /* True iff field number FIELD_NUM of structure type TYPE contains the
7012    parent-type (inherited) fields of a derived type.  Assumes TYPE is
7013    a structure type with at least FIELD_NUM+1 fields.  */
7014
7015 int
7016 ada_is_parent_field (struct type *type, int field_num)
7017 {
7018   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
7019
7020   return (name != NULL
7021           && (startswith (name, "PARENT")
7022               || startswith (name, "_parent")));
7023 }
7024
7025 /* True iff field number FIELD_NUM of structure type TYPE is a
7026    transparent wrapper field (which should be silently traversed when doing
7027    field selection and flattened when printing).  Assumes TYPE is a
7028    structure type with at least FIELD_NUM+1 fields.  Such fields are always
7029    structures.  */
7030
7031 int
7032 ada_is_wrapper_field (struct type *type, int field_num)
7033 {
7034   const char *name = TYPE_FIELD_NAME (type, field_num);
7035
7036   if (name != NULL && strcmp (name, "RETVAL") == 0)
7037     {
7038       /* This happens in functions with "out" or "in out" parameters
7039          which are passed by copy.  For such functions, GNAT describes
7040          the function's return type as being a struct where the return
7041          value is in a field called RETVAL, and where the other "out"
7042          or "in out" parameters are fields of that struct.  This is not
7043          a wrapper.  */
7044       return 0;
7045     }
7046
7047   return (name != NULL
7048           && (startswith (name, "PARENT")
7049               || strcmp (name, "REP") == 0
7050               || startswith (name, "_parent")
7051               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
7052 }
7053
7054 /* True iff field number FIELD_NUM of structure or union type TYPE
7055    is a variant wrapper.  Assumes TYPE is a structure type with at least
7056    FIELD_NUM+1 fields.  */
7057
7058 int
7059 ada_is_variant_part (struct type *type, int field_num)
7060 {
7061   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
7062
7063   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
7064           || (is_dynamic_field (type, field_num)
7065               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
7066                   == TYPE_CODE_UNION)));
7067 }
7068
7069 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
7070    whose discriminants are contained in the record type OUTER_TYPE,
7071    returns the type of the controlling discriminant for the variant.
7072    May return NULL if the type could not be found.  */
7073
7074 struct type *
7075 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
7076 {
7077   char *name = ada_variant_discrim_name (var_type);
7078
7079   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
7080 }
7081
7082 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
7083    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
7084    represents a 'when others' clause; otherwise 0.  */
7085
7086 int
7087 ada_is_others_clause (struct type *type, int field_num)
7088 {
7089   const char *name = TYPE_FIELD_NAME (type, field_num);
7090
7091   return (name != NULL && name[0] == 'O');
7092 }
7093
7094 /* Assuming that TYPE0 is the type of the variant part of a record,
7095    returns the name of the discriminant controlling the variant.
7096    The value is valid until the next call to ada_variant_discrim_name.  */
7097
7098 char *
7099 ada_variant_discrim_name (struct type *type0)
7100 {
7101   static char *result = NULL;
7102   static size_t result_len = 0;
7103   struct type *type;
7104   const char *name;
7105   const char *discrim_end;
7106   const char *discrim_start;
7107
7108   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
7109     type = TYPE_TARGET_TYPE (type0);
7110   else
7111     type = type0;
7112
7113   name = ada_type_name (type);
7114
7115   if (name == NULL || name[0] == '\000')
7116     return "";
7117
7118   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
7119        discrim_end -= 1)
7120     {
7121       if (startswith (discrim_end, "___XVN"))
7122         break;
7123     }
7124   if (discrim_end == name)
7125     return "";
7126
7127   for (discrim_start = discrim_end; discrim_start != name + 3;
7128        discrim_start -= 1)
7129     {
7130       if (discrim_start == name + 1)
7131         return "";
7132       if ((discrim_start > name + 3
7133            && startswith (discrim_start - 3, "___"))
7134           || discrim_start[-1] == '.')
7135         break;
7136     }
7137
7138   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
7139   strncpy (result, discrim_start, discrim_end - discrim_start);
7140   result[discrim_end - discrim_start] = '\0';
7141   return result;
7142 }
7143
7144 /* Scan STR for a subtype-encoded number, beginning at position K.
7145    Put the position of the character just past the number scanned in
7146    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
7147    Return 1 if there was a valid number at the given position, and 0
7148    otherwise.  A "subtype-encoded" number consists of the absolute value
7149    in decimal, followed by the letter 'm' to indicate a negative number.
7150    Assumes 0m does not occur.  */
7151
7152 int
7153 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
7154 {
7155   ULONGEST RU;
7156
7157   if (!isdigit (str[k]))
7158     return 0;
7159
7160   /* Do it the hard way so as not to make any assumption about
7161      the relationship of unsigned long (%lu scan format code) and
7162      LONGEST.  */
7163   RU = 0;
7164   while (isdigit (str[k]))
7165     {
7166       RU = RU * 10 + (str[k] - '0');
7167       k += 1;
7168     }
7169
7170   if (str[k] == 'm')
7171     {
7172       if (R != NULL)
7173         *R = (-(LONGEST) (RU - 1)) - 1;
7174       k += 1;
7175     }
7176   else if (R != NULL)
7177     *R = (LONGEST) RU;
7178
7179   /* NOTE on the above: Technically, C does not say what the results of
7180      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
7181      number representable as a LONGEST (although either would probably work
7182      in most implementations).  When RU>0, the locution in the then branch
7183      above is always equivalent to the negative of RU.  */
7184
7185   if (new_k != NULL)
7186     *new_k = k;
7187   return 1;
7188 }
7189
7190 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
7191    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
7192    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
7193
7194 int
7195 ada_in_variant (LONGEST val, struct type *type, int field_num)
7196 {
7197   const char *name = TYPE_FIELD_NAME (type, field_num);
7198   int p;
7199
7200   p = 0;
7201   while (1)
7202     {
7203       switch (name[p])
7204         {
7205         case '\0':
7206           return 0;
7207         case 'S':
7208           {
7209             LONGEST W;
7210
7211             if (!ada_scan_number (name, p + 1, &W, &p))
7212               return 0;
7213             if (val == W)
7214               return 1;
7215             break;
7216           }
7217         case 'R':
7218           {
7219             LONGEST L, U;
7220
7221             if (!ada_scan_number (name, p + 1, &L, &p)
7222                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
7223               return 0;
7224             if (val >= L && val <= U)
7225               return 1;
7226             break;
7227           }
7228         case 'O':
7229           return 1;
7230         default:
7231           return 0;
7232         }
7233     }
7234 }
7235
7236 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
7237
7238 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
7239    ARG_TYPE, extract and return the value of one of its (non-static)
7240    fields.  FIELDNO says which field.   Differs from value_primitive_field
7241    only in that it can handle packed values of arbitrary type.  */
7242
7243 static struct value *
7244 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
7245                            struct type *arg_type)
7246 {
7247   struct type *type;
7248
7249   arg_type = ada_check_typedef (arg_type);
7250   type = TYPE_FIELD_TYPE (arg_type, fieldno);
7251
7252   /* Handle packed fields.  */
7253
7254   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
7255     {
7256       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
7257       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
7258
7259       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
7260                                              offset + bit_pos / 8,
7261                                              bit_pos % 8, bit_size, type);
7262     }
7263   else
7264     return value_primitive_field (arg1, offset, fieldno, arg_type);
7265 }
7266
7267 /* Find field with name NAME in object of type TYPE.  If found, 
7268    set the following for each argument that is non-null:
7269     - *FIELD_TYPE_P to the field's type; 
7270     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
7271       an object of that type;
7272     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
7273     - *BIT_SIZE_P to its size in bits if the field is packed, and 
7274       0 otherwise;
7275    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
7276    fields up to but not including the desired field, or by the total
7277    number of fields if not found.   A NULL value of NAME never
7278    matches; the function just counts visible fields in this case.
7279    
7280    Returns 1 if found, 0 otherwise.  */
7281
7282 static int
7283 find_struct_field (const char *name, struct type *type, int offset,
7284                    struct type **field_type_p,
7285                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
7286                    int *index_p)
7287 {
7288   int i;
7289
7290   type = ada_check_typedef (type);
7291
7292   if (field_type_p != NULL)
7293     *field_type_p = NULL;
7294   if (byte_offset_p != NULL)
7295     *byte_offset_p = 0;
7296   if (bit_offset_p != NULL)
7297     *bit_offset_p = 0;
7298   if (bit_size_p != NULL)
7299     *bit_size_p = 0;
7300
7301   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7302     {
7303       int bit_pos = TYPE_FIELD_BITPOS (type, i);
7304       int fld_offset = offset + bit_pos / 8;
7305       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7306
7307       if (t_field_name == NULL)
7308         continue;
7309
7310       else if (name != NULL && field_name_match (t_field_name, name))
7311         {
7312           int bit_size = TYPE_FIELD_BITSIZE (type, i);
7313
7314           if (field_type_p != NULL)
7315             *field_type_p = TYPE_FIELD_TYPE (type, i);
7316           if (byte_offset_p != NULL)
7317             *byte_offset_p = fld_offset;
7318           if (bit_offset_p != NULL)
7319             *bit_offset_p = bit_pos % 8;
7320           if (bit_size_p != NULL)
7321             *bit_size_p = bit_size;
7322           return 1;
7323         }
7324       else if (ada_is_wrapper_field (type, i))
7325         {
7326           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7327                                  field_type_p, byte_offset_p, bit_offset_p,
7328                                  bit_size_p, index_p))
7329             return 1;
7330         }
7331       else if (ada_is_variant_part (type, i))
7332         {
7333           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
7334              fixed type?? */
7335           int j;
7336           struct type *field_type
7337             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7338
7339           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7340             {
7341               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7342                                      fld_offset
7343                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
7344                                      field_type_p, byte_offset_p,
7345                                      bit_offset_p, bit_size_p, index_p))
7346                 return 1;
7347             }
7348         }
7349       else if (index_p != NULL)
7350         *index_p += 1;
7351     }
7352   return 0;
7353 }
7354
7355 /* Number of user-visible fields in record type TYPE.  */
7356
7357 static int
7358 num_visible_fields (struct type *type)
7359 {
7360   int n;
7361
7362   n = 0;
7363   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7364   return n;
7365 }
7366
7367 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
7368    and search in it assuming it has (class) type TYPE.
7369    If found, return value, else return NULL.
7370
7371    Searches recursively through wrapper fields (e.g., '_parent').  */
7372
7373 static struct value *
7374 ada_search_struct_field (const char *name, struct value *arg, int offset,
7375                          struct type *type)
7376 {
7377   int i;
7378
7379   type = ada_check_typedef (type);
7380   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7381     {
7382       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7383
7384       if (t_field_name == NULL)
7385         continue;
7386
7387       else if (field_name_match (t_field_name, name))
7388         return ada_value_primitive_field (arg, offset, i, type);
7389
7390       else if (ada_is_wrapper_field (type, i))
7391         {
7392           struct value *v =     /* Do not let indent join lines here.  */
7393             ada_search_struct_field (name, arg,
7394                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7395                                      TYPE_FIELD_TYPE (type, i));
7396
7397           if (v != NULL)
7398             return v;
7399         }
7400
7401       else if (ada_is_variant_part (type, i))
7402         {
7403           /* PNH: Do we ever get here?  See find_struct_field.  */
7404           int j;
7405           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7406                                                                         i));
7407           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7408
7409           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7410             {
7411               struct value *v = ada_search_struct_field /* Force line
7412                                                            break.  */
7413                 (name, arg,
7414                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7415                  TYPE_FIELD_TYPE (field_type, j));
7416
7417               if (v != NULL)
7418                 return v;
7419             }
7420         }
7421     }
7422   return NULL;
7423 }
7424
7425 static struct value *ada_index_struct_field_1 (int *, struct value *,
7426                                                int, struct type *);
7427
7428
7429 /* Return field #INDEX in ARG, where the index is that returned by
7430  * find_struct_field through its INDEX_P argument.  Adjust the address
7431  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7432  * If found, return value, else return NULL.  */
7433
7434 static struct value *
7435 ada_index_struct_field (int index, struct value *arg, int offset,
7436                         struct type *type)
7437 {
7438   return ada_index_struct_field_1 (&index, arg, offset, type);
7439 }
7440
7441
7442 /* Auxiliary function for ada_index_struct_field.  Like
7443  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7444  * *INDEX_P.  */
7445
7446 static struct value *
7447 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7448                           struct type *type)
7449 {
7450   int i;
7451   type = ada_check_typedef (type);
7452
7453   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7454     {
7455       if (TYPE_FIELD_NAME (type, i) == NULL)
7456         continue;
7457       else if (ada_is_wrapper_field (type, i))
7458         {
7459           struct value *v =     /* Do not let indent join lines here.  */
7460             ada_index_struct_field_1 (index_p, arg,
7461                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7462                                       TYPE_FIELD_TYPE (type, i));
7463
7464           if (v != NULL)
7465             return v;
7466         }
7467
7468       else if (ada_is_variant_part (type, i))
7469         {
7470           /* PNH: Do we ever get here?  See ada_search_struct_field,
7471              find_struct_field.  */
7472           error (_("Cannot assign this kind of variant record"));
7473         }
7474       else if (*index_p == 0)
7475         return ada_value_primitive_field (arg, offset, i, type);
7476       else
7477         *index_p -= 1;
7478     }
7479   return NULL;
7480 }
7481
7482 /* Given ARG, a value of type (pointer or reference to a)*
7483    structure/union, extract the component named NAME from the ultimate
7484    target structure/union and return it as a value with its
7485    appropriate type.
7486
7487    The routine searches for NAME among all members of the structure itself
7488    and (recursively) among all members of any wrapper members
7489    (e.g., '_parent').
7490
7491    If NO_ERR, then simply return NULL in case of error, rather than 
7492    calling error.  */
7493
7494 struct value *
7495 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7496 {
7497   struct type *t, *t1;
7498   struct value *v;
7499
7500   v = NULL;
7501   t1 = t = ada_check_typedef (value_type (arg));
7502   if (TYPE_CODE (t) == TYPE_CODE_REF)
7503     {
7504       t1 = TYPE_TARGET_TYPE (t);
7505       if (t1 == NULL)
7506         goto BadValue;
7507       t1 = ada_check_typedef (t1);
7508       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7509         {
7510           arg = coerce_ref (arg);
7511           t = t1;
7512         }
7513     }
7514
7515   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7516     {
7517       t1 = TYPE_TARGET_TYPE (t);
7518       if (t1 == NULL)
7519         goto BadValue;
7520       t1 = ada_check_typedef (t1);
7521       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7522         {
7523           arg = value_ind (arg);
7524           t = t1;
7525         }
7526       else
7527         break;
7528     }
7529
7530   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7531     goto BadValue;
7532
7533   if (t1 == t)
7534     v = ada_search_struct_field (name, arg, 0, t);
7535   else
7536     {
7537       int bit_offset, bit_size, byte_offset;
7538       struct type *field_type;
7539       CORE_ADDR address;
7540
7541       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7542         address = value_address (ada_value_ind (arg));
7543       else
7544         address = value_address (ada_coerce_ref (arg));
7545
7546       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7547       if (find_struct_field (name, t1, 0,
7548                              &field_type, &byte_offset, &bit_offset,
7549                              &bit_size, NULL))
7550         {
7551           if (bit_size != 0)
7552             {
7553               if (TYPE_CODE (t) == TYPE_CODE_REF)
7554                 arg = ada_coerce_ref (arg);
7555               else
7556                 arg = ada_value_ind (arg);
7557               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7558                                                   bit_offset, bit_size,
7559                                                   field_type);
7560             }
7561           else
7562             v = value_at_lazy (field_type, address + byte_offset);
7563         }
7564     }
7565
7566   if (v != NULL || no_err)
7567     return v;
7568   else
7569     error (_("There is no member named %s."), name);
7570
7571  BadValue:
7572   if (no_err)
7573     return NULL;
7574   else
7575     error (_("Attempt to extract a component of "
7576              "a value that is not a record."));
7577 }
7578
7579 /* Given a type TYPE, look up the type of the component of type named NAME.
7580    If DISPP is non-null, add its byte displacement from the beginning of a
7581    structure (pointed to by a value) of type TYPE to *DISPP (does not
7582    work for packed fields).
7583
7584    Matches any field whose name has NAME as a prefix, possibly
7585    followed by "___".
7586
7587    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7588    be a (pointer or reference)+ to a struct or union, and the
7589    ultimate target type will be searched.
7590
7591    Looks recursively into variant clauses and parent types.
7592
7593    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7594    TYPE is not a type of the right kind.  */
7595
7596 static struct type *
7597 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7598                             int noerr, int *dispp)
7599 {
7600   int i;
7601
7602   if (name == NULL)
7603     goto BadName;
7604
7605   if (refok && type != NULL)
7606     while (1)
7607       {
7608         type = ada_check_typedef (type);
7609         if (TYPE_CODE (type) != TYPE_CODE_PTR
7610             && TYPE_CODE (type) != TYPE_CODE_REF)
7611           break;
7612         type = TYPE_TARGET_TYPE (type);
7613       }
7614
7615   if (type == NULL
7616       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7617           && TYPE_CODE (type) != TYPE_CODE_UNION))
7618     {
7619       if (noerr)
7620         return NULL;
7621       else
7622         {
7623           target_terminal_ours ();
7624           gdb_flush (gdb_stdout);
7625           if (type == NULL)
7626             error (_("Type (null) is not a structure or union type"));
7627           else
7628             {
7629               /* XXX: type_sprint */
7630               fprintf_unfiltered (gdb_stderr, _("Type "));
7631               type_print (type, "", gdb_stderr, -1);
7632               error (_(" is not a structure or union type"));
7633             }
7634         }
7635     }
7636
7637   type = to_static_fixed_type (type);
7638
7639   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7640     {
7641       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7642       struct type *t;
7643       int disp;
7644
7645       if (t_field_name == NULL)
7646         continue;
7647
7648       else if (field_name_match (t_field_name, name))
7649         {
7650           if (dispp != NULL)
7651             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7652           return TYPE_FIELD_TYPE (type, i);
7653         }
7654
7655       else if (ada_is_wrapper_field (type, i))
7656         {
7657           disp = 0;
7658           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7659                                           0, 1, &disp);
7660           if (t != NULL)
7661             {
7662               if (dispp != NULL)
7663                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7664               return t;
7665             }
7666         }
7667
7668       else if (ada_is_variant_part (type, i))
7669         {
7670           int j;
7671           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7672                                                                         i));
7673
7674           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7675             {
7676               /* FIXME pnh 2008/01/26: We check for a field that is
7677                  NOT wrapped in a struct, since the compiler sometimes
7678                  generates these for unchecked variant types.  Revisit
7679                  if the compiler changes this practice.  */
7680               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7681               disp = 0;
7682               if (v_field_name != NULL 
7683                   && field_name_match (v_field_name, name))
7684                 t = TYPE_FIELD_TYPE (field_type, j);
7685               else
7686                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7687                                                                  j),
7688                                                 name, 0, 1, &disp);
7689
7690               if (t != NULL)
7691                 {
7692                   if (dispp != NULL)
7693                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7694                   return t;
7695                 }
7696             }
7697         }
7698
7699     }
7700
7701 BadName:
7702   if (!noerr)
7703     {
7704       target_terminal_ours ();
7705       gdb_flush (gdb_stdout);
7706       if (name == NULL)
7707         {
7708           /* XXX: type_sprint */
7709           fprintf_unfiltered (gdb_stderr, _("Type "));
7710           type_print (type, "", gdb_stderr, -1);
7711           error (_(" has no component named <null>"));
7712         }
7713       else
7714         {
7715           /* XXX: type_sprint */
7716           fprintf_unfiltered (gdb_stderr, _("Type "));
7717           type_print (type, "", gdb_stderr, -1);
7718           error (_(" has no component named %s"), name);
7719         }
7720     }
7721
7722   return NULL;
7723 }
7724
7725 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7726    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7727    represents an unchecked union (that is, the variant part of a
7728    record that is named in an Unchecked_Union pragma).  */
7729
7730 static int
7731 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7732 {
7733   char *discrim_name = ada_variant_discrim_name (var_type);
7734
7735   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7736           == NULL);
7737 }
7738
7739
7740 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7741    within a value of type OUTER_TYPE that is stored in GDB at
7742    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7743    numbering from 0) is applicable.  Returns -1 if none are.  */
7744
7745 int
7746 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7747                            const gdb_byte *outer_valaddr)
7748 {
7749   int others_clause;
7750   int i;
7751   char *discrim_name = ada_variant_discrim_name (var_type);
7752   struct value *outer;
7753   struct value *discrim;
7754   LONGEST discrim_val;
7755
7756   /* Using plain value_from_contents_and_address here causes problems
7757      because we will end up trying to resolve a type that is currently
7758      being constructed.  */
7759   outer = value_from_contents_and_address_unresolved (outer_type,
7760                                                       outer_valaddr, 0);
7761   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7762   if (discrim == NULL)
7763     return -1;
7764   discrim_val = value_as_long (discrim);
7765
7766   others_clause = -1;
7767   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7768     {
7769       if (ada_is_others_clause (var_type, i))
7770         others_clause = i;
7771       else if (ada_in_variant (discrim_val, var_type, i))
7772         return i;
7773     }
7774
7775   return others_clause;
7776 }
7777 \f
7778
7779
7780                                 /* Dynamic-Sized Records */
7781
7782 /* Strategy: The type ostensibly attached to a value with dynamic size
7783    (i.e., a size that is not statically recorded in the debugging
7784    data) does not accurately reflect the size or layout of the value.
7785    Our strategy is to convert these values to values with accurate,
7786    conventional types that are constructed on the fly.  */
7787
7788 /* There is a subtle and tricky problem here.  In general, we cannot
7789    determine the size of dynamic records without its data.  However,
7790    the 'struct value' data structure, which GDB uses to represent
7791    quantities in the inferior process (the target), requires the size
7792    of the type at the time of its allocation in order to reserve space
7793    for GDB's internal copy of the data.  That's why the
7794    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7795    rather than struct value*s.
7796
7797    However, GDB's internal history variables ($1, $2, etc.) are
7798    struct value*s containing internal copies of the data that are not, in
7799    general, the same as the data at their corresponding addresses in
7800    the target.  Fortunately, the types we give to these values are all
7801    conventional, fixed-size types (as per the strategy described
7802    above), so that we don't usually have to perform the
7803    'to_fixed_xxx_type' conversions to look at their values.
7804    Unfortunately, there is one exception: if one of the internal
7805    history variables is an array whose elements are unconstrained
7806    records, then we will need to create distinct fixed types for each
7807    element selected.  */
7808
7809 /* The upshot of all of this is that many routines take a (type, host
7810    address, target address) triple as arguments to represent a value.
7811    The host address, if non-null, is supposed to contain an internal
7812    copy of the relevant data; otherwise, the program is to consult the
7813    target at the target address.  */
7814
7815 /* Assuming that VAL0 represents a pointer value, the result of
7816    dereferencing it.  Differs from value_ind in its treatment of
7817    dynamic-sized types.  */
7818
7819 struct value *
7820 ada_value_ind (struct value *val0)
7821 {
7822   struct value *val = value_ind (val0);
7823
7824   if (ada_is_tagged_type (value_type (val), 0))
7825     val = ada_tag_value_at_base_address (val);
7826
7827   return ada_to_fixed_value (val);
7828 }
7829
7830 /* The value resulting from dereferencing any "reference to"
7831    qualifiers on VAL0.  */
7832
7833 static struct value *
7834 ada_coerce_ref (struct value *val0)
7835 {
7836   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7837     {
7838       struct value *val = val0;
7839
7840       val = coerce_ref (val);
7841
7842       if (ada_is_tagged_type (value_type (val), 0))
7843         val = ada_tag_value_at_base_address (val);
7844
7845       return ada_to_fixed_value (val);
7846     }
7847   else
7848     return val0;
7849 }
7850
7851 /* Return OFF rounded upward if necessary to a multiple of
7852    ALIGNMENT (a power of 2).  */
7853
7854 static unsigned int
7855 align_value (unsigned int off, unsigned int alignment)
7856 {
7857   return (off + alignment - 1) & ~(alignment - 1);
7858 }
7859
7860 /* Return the bit alignment required for field #F of template type TYPE.  */
7861
7862 static unsigned int
7863 field_alignment (struct type *type, int f)
7864 {
7865   const char *name = TYPE_FIELD_NAME (type, f);
7866   int len;
7867   int align_offset;
7868
7869   /* The field name should never be null, unless the debugging information
7870      is somehow malformed.  In this case, we assume the field does not
7871      require any alignment.  */
7872   if (name == NULL)
7873     return 1;
7874
7875   len = strlen (name);
7876
7877   if (!isdigit (name[len - 1]))
7878     return 1;
7879
7880   if (isdigit (name[len - 2]))
7881     align_offset = len - 2;
7882   else
7883     align_offset = len - 1;
7884
7885   if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
7886     return TARGET_CHAR_BIT;
7887
7888   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7889 }
7890
7891 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7892
7893 static struct symbol *
7894 ada_find_any_type_symbol (const char *name)
7895 {
7896   struct symbol *sym;
7897
7898   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7899   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7900     return sym;
7901
7902   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7903   return sym;
7904 }
7905
7906 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7907    solely for types defined by debug info, it will not search the GDB
7908    primitive types.  */
7909
7910 static struct type *
7911 ada_find_any_type (const char *name)
7912 {
7913   struct symbol *sym = ada_find_any_type_symbol (name);
7914
7915   if (sym != NULL)
7916     return SYMBOL_TYPE (sym);
7917
7918   return NULL;
7919 }
7920
7921 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7922    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7923    symbol, in which case it is returned.  Otherwise, this looks for
7924    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7925    Return symbol if found, and NULL otherwise.  */
7926
7927 struct symbol *
7928 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7929 {
7930   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7931   struct symbol *sym;
7932
7933   if (strstr (name, "___XR") != NULL)
7934      return name_sym;
7935
7936   sym = find_old_style_renaming_symbol (name, block);
7937
7938   if (sym != NULL)
7939     return sym;
7940
7941   /* Not right yet.  FIXME pnh 7/20/2007.  */
7942   sym = ada_find_any_type_symbol (name);
7943   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7944     return sym;
7945   else
7946     return NULL;
7947 }
7948
7949 static struct symbol *
7950 find_old_style_renaming_symbol (const char *name, const struct block *block)
7951 {
7952   const struct symbol *function_sym = block_linkage_function (block);
7953   char *rename;
7954
7955   if (function_sym != NULL)
7956     {
7957       /* If the symbol is defined inside a function, NAME is not fully
7958          qualified.  This means we need to prepend the function name
7959          as well as adding the ``___XR'' suffix to build the name of
7960          the associated renaming symbol.  */
7961       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7962       /* Function names sometimes contain suffixes used
7963          for instance to qualify nested subprograms.  When building
7964          the XR type name, we need to make sure that this suffix is
7965          not included.  So do not include any suffix in the function
7966          name length below.  */
7967       int function_name_len = ada_name_prefix_len (function_name);
7968       const int rename_len = function_name_len + 2      /*  "__" */
7969         + strlen (name) + 6 /* "___XR\0" */ ;
7970
7971       /* Strip the suffix if necessary.  */
7972       ada_remove_trailing_digits (function_name, &function_name_len);
7973       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7974       ada_remove_Xbn_suffix (function_name, &function_name_len);
7975
7976       /* Library-level functions are a special case, as GNAT adds
7977          a ``_ada_'' prefix to the function name to avoid namespace
7978          pollution.  However, the renaming symbols themselves do not
7979          have this prefix, so we need to skip this prefix if present.  */
7980       if (function_name_len > 5 /* "_ada_" */
7981           && strstr (function_name, "_ada_") == function_name)
7982         {
7983           function_name += 5;
7984           function_name_len -= 5;
7985         }
7986
7987       rename = (char *) alloca (rename_len * sizeof (char));
7988       strncpy (rename, function_name, function_name_len);
7989       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7990                  "__%s___XR", name);
7991     }
7992   else
7993     {
7994       const int rename_len = strlen (name) + 6;
7995
7996       rename = (char *) alloca (rename_len * sizeof (char));
7997       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7998     }
7999
8000   return ada_find_any_type_symbol (rename);
8001 }
8002
8003 /* Because of GNAT encoding conventions, several GDB symbols may match a
8004    given type name.  If the type denoted by TYPE0 is to be preferred to
8005    that of TYPE1 for purposes of type printing, return non-zero;
8006    otherwise return 0.  */
8007
8008 int
8009 ada_prefer_type (struct type *type0, struct type *type1)
8010 {
8011   if (type1 == NULL)
8012     return 1;
8013   else if (type0 == NULL)
8014     return 0;
8015   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
8016     return 1;
8017   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
8018     return 0;
8019   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
8020     return 1;
8021   else if (ada_is_constrained_packed_array_type (type0))
8022     return 1;
8023   else if (ada_is_array_descriptor_type (type0)
8024            && !ada_is_array_descriptor_type (type1))
8025     return 1;
8026   else
8027     {
8028       const char *type0_name = type_name_no_tag (type0);
8029       const char *type1_name = type_name_no_tag (type1);
8030
8031       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
8032           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
8033         return 1;
8034     }
8035   return 0;
8036 }
8037
8038 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
8039    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
8040
8041 const char *
8042 ada_type_name (struct type *type)
8043 {
8044   if (type == NULL)
8045     return NULL;
8046   else if (TYPE_NAME (type) != NULL)
8047     return TYPE_NAME (type);
8048   else
8049     return TYPE_TAG_NAME (type);
8050 }
8051
8052 /* Search the list of "descriptive" types associated to TYPE for a type
8053    whose name is NAME.  */
8054
8055 static struct type *
8056 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
8057 {
8058   struct type *result, *tmp;
8059
8060   if (ada_ignore_descriptive_types_p)
8061     return NULL;
8062
8063   /* If there no descriptive-type info, then there is no parallel type
8064      to be found.  */
8065   if (!HAVE_GNAT_AUX_INFO (type))
8066     return NULL;
8067
8068   result = TYPE_DESCRIPTIVE_TYPE (type);
8069   while (result != NULL)
8070     {
8071       const char *result_name = ada_type_name (result);
8072
8073       if (result_name == NULL)
8074         {
8075           warning (_("unexpected null name on descriptive type"));
8076           return NULL;
8077         }
8078
8079       /* If the names match, stop.  */
8080       if (strcmp (result_name, name) == 0)
8081         break;
8082
8083       /* Otherwise, look at the next item on the list, if any.  */
8084       if (HAVE_GNAT_AUX_INFO (result))
8085         tmp = TYPE_DESCRIPTIVE_TYPE (result);
8086       else
8087         tmp = NULL;
8088
8089       /* If not found either, try after having resolved the typedef.  */
8090       if (tmp != NULL)
8091         result = tmp;
8092       else
8093         {
8094           result = check_typedef (result);
8095           if (HAVE_GNAT_AUX_INFO (result))
8096             result = TYPE_DESCRIPTIVE_TYPE (result);
8097           else
8098             result = NULL;
8099         }
8100     }
8101
8102   /* If we didn't find a match, see whether this is a packed array.  With
8103      older compilers, the descriptive type information is either absent or
8104      irrelevant when it comes to packed arrays so the above lookup fails.
8105      Fall back to using a parallel lookup by name in this case.  */
8106   if (result == NULL && ada_is_constrained_packed_array_type (type))
8107     return ada_find_any_type (name);
8108
8109   return result;
8110 }
8111
8112 /* Find a parallel type to TYPE with the specified NAME, using the
8113    descriptive type taken from the debugging information, if available,
8114    and otherwise using the (slower) name-based method.  */
8115
8116 static struct type *
8117 ada_find_parallel_type_with_name (struct type *type, const char *name)
8118 {
8119   struct type *result = NULL;
8120
8121   if (HAVE_GNAT_AUX_INFO (type))
8122     result = find_parallel_type_by_descriptive_type (type, name);
8123   else
8124     result = ada_find_any_type (name);
8125
8126   return result;
8127 }
8128
8129 /* Same as above, but specify the name of the parallel type by appending
8130    SUFFIX to the name of TYPE.  */
8131
8132 struct type *
8133 ada_find_parallel_type (struct type *type, const char *suffix)
8134 {
8135   char *name;
8136   const char *type_name = ada_type_name (type);
8137   int len;
8138
8139   if (type_name == NULL)
8140     return NULL;
8141
8142   len = strlen (type_name);
8143
8144   name = (char *) alloca (len + strlen (suffix) + 1);
8145
8146   strcpy (name, type_name);
8147   strcpy (name + len, suffix);
8148
8149   return ada_find_parallel_type_with_name (type, name);
8150 }
8151
8152 /* If TYPE is a variable-size record type, return the corresponding template
8153    type describing its fields.  Otherwise, return NULL.  */
8154
8155 static struct type *
8156 dynamic_template_type (struct type *type)
8157 {
8158   type = ada_check_typedef (type);
8159
8160   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
8161       || ada_type_name (type) == NULL)
8162     return NULL;
8163   else
8164     {
8165       int len = strlen (ada_type_name (type));
8166
8167       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
8168         return type;
8169       else
8170         return ada_find_parallel_type (type, "___XVE");
8171     }
8172 }
8173
8174 /* Assuming that TEMPL_TYPE is a union or struct type, returns
8175    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
8176
8177 static int
8178 is_dynamic_field (struct type *templ_type, int field_num)
8179 {
8180   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
8181
8182   return name != NULL
8183     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
8184     && strstr (name, "___XVL") != NULL;
8185 }
8186
8187 /* The index of the variant field of TYPE, or -1 if TYPE does not
8188    represent a variant record type.  */
8189
8190 static int
8191 variant_field_index (struct type *type)
8192 {
8193   int f;
8194
8195   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
8196     return -1;
8197
8198   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
8199     {
8200       if (ada_is_variant_part (type, f))
8201         return f;
8202     }
8203   return -1;
8204 }
8205
8206 /* A record type with no fields.  */
8207
8208 static struct type *
8209 empty_record (struct type *templ)
8210 {
8211   struct type *type = alloc_type_copy (templ);
8212
8213   TYPE_CODE (type) = TYPE_CODE_STRUCT;
8214   TYPE_NFIELDS (type) = 0;
8215   TYPE_FIELDS (type) = NULL;
8216   INIT_CPLUS_SPECIFIC (type);
8217   TYPE_NAME (type) = "<empty>";
8218   TYPE_TAG_NAME (type) = NULL;
8219   TYPE_LENGTH (type) = 0;
8220   return type;
8221 }
8222
8223 /* An ordinary record type (with fixed-length fields) that describes
8224    the value of type TYPE at VALADDR or ADDRESS (see comments at
8225    the beginning of this section) VAL according to GNAT conventions.
8226    DVAL0 should describe the (portion of a) record that contains any
8227    necessary discriminants.  It should be NULL if value_type (VAL) is
8228    an outer-level type (i.e., as opposed to a branch of a variant.)  A
8229    variant field (unless unchecked) is replaced by a particular branch
8230    of the variant.
8231
8232    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
8233    length are not statically known are discarded.  As a consequence,
8234    VALADDR, ADDRESS and DVAL0 are ignored.
8235
8236    NOTE: Limitations: For now, we assume that dynamic fields and
8237    variants occupy whole numbers of bytes.  However, they need not be
8238    byte-aligned.  */
8239
8240 struct type *
8241 ada_template_to_fixed_record_type_1 (struct type *type,
8242                                      const gdb_byte *valaddr,
8243                                      CORE_ADDR address, struct value *dval0,
8244                                      int keep_dynamic_fields)
8245 {
8246   struct value *mark = value_mark ();
8247   struct value *dval;
8248   struct type *rtype;
8249   int nfields, bit_len;
8250   int variant_field;
8251   long off;
8252   int fld_bit_len;
8253   int f;
8254
8255   /* Compute the number of fields in this record type that are going
8256      to be processed: unless keep_dynamic_fields, this includes only
8257      fields whose position and length are static will be processed.  */
8258   if (keep_dynamic_fields)
8259     nfields = TYPE_NFIELDS (type);
8260   else
8261     {
8262       nfields = 0;
8263       while (nfields < TYPE_NFIELDS (type)
8264              && !ada_is_variant_part (type, nfields)
8265              && !is_dynamic_field (type, nfields))
8266         nfields++;
8267     }
8268
8269   rtype = alloc_type_copy (type);
8270   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8271   INIT_CPLUS_SPECIFIC (rtype);
8272   TYPE_NFIELDS (rtype) = nfields;
8273   TYPE_FIELDS (rtype) = (struct field *)
8274     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8275   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
8276   TYPE_NAME (rtype) = ada_type_name (type);
8277   TYPE_TAG_NAME (rtype) = NULL;
8278   TYPE_FIXED_INSTANCE (rtype) = 1;
8279
8280   off = 0;
8281   bit_len = 0;
8282   variant_field = -1;
8283
8284   for (f = 0; f < nfields; f += 1)
8285     {
8286       off = align_value (off, field_alignment (type, f))
8287         + TYPE_FIELD_BITPOS (type, f);
8288       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
8289       TYPE_FIELD_BITSIZE (rtype, f) = 0;
8290
8291       if (ada_is_variant_part (type, f))
8292         {
8293           variant_field = f;
8294           fld_bit_len = 0;
8295         }
8296       else if (is_dynamic_field (type, f))
8297         {
8298           const gdb_byte *field_valaddr = valaddr;
8299           CORE_ADDR field_address = address;
8300           struct type *field_type =
8301             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
8302
8303           if (dval0 == NULL)
8304             {
8305               /* rtype's length is computed based on the run-time
8306                  value of discriminants.  If the discriminants are not
8307                  initialized, the type size may be completely bogus and
8308                  GDB may fail to allocate a value for it.  So check the
8309                  size first before creating the value.  */
8310               ada_ensure_varsize_limit (rtype);
8311               /* Using plain value_from_contents_and_address here
8312                  causes problems because we will end up trying to
8313                  resolve a type that is currently being
8314                  constructed.  */
8315               dval = value_from_contents_and_address_unresolved (rtype,
8316                                                                  valaddr,
8317                                                                  address);
8318               rtype = value_type (dval);
8319             }
8320           else
8321             dval = dval0;
8322
8323           /* If the type referenced by this field is an aligner type, we need
8324              to unwrap that aligner type, because its size might not be set.
8325              Keeping the aligner type would cause us to compute the wrong
8326              size for this field, impacting the offset of the all the fields
8327              that follow this one.  */
8328           if (ada_is_aligner_type (field_type))
8329             {
8330               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8331
8332               field_valaddr = cond_offset_host (field_valaddr, field_offset);
8333               field_address = cond_offset_target (field_address, field_offset);
8334               field_type = ada_aligned_type (field_type);
8335             }
8336
8337           field_valaddr = cond_offset_host (field_valaddr,
8338                                             off / TARGET_CHAR_BIT);
8339           field_address = cond_offset_target (field_address,
8340                                               off / TARGET_CHAR_BIT);
8341
8342           /* Get the fixed type of the field.  Note that, in this case,
8343              we do not want to get the real type out of the tag: if
8344              the current field is the parent part of a tagged record,
8345              we will get the tag of the object.  Clearly wrong: the real
8346              type of the parent is not the real type of the child.  We
8347              would end up in an infinite loop.  */
8348           field_type = ada_get_base_type (field_type);
8349           field_type = ada_to_fixed_type (field_type, field_valaddr,
8350                                           field_address, dval, 0);
8351           /* If the field size is already larger than the maximum
8352              object size, then the record itself will necessarily
8353              be larger than the maximum object size.  We need to make
8354              this check now, because the size might be so ridiculously
8355              large (due to an uninitialized variable in the inferior)
8356              that it would cause an overflow when adding it to the
8357              record size.  */
8358           ada_ensure_varsize_limit (field_type);
8359
8360           TYPE_FIELD_TYPE (rtype, f) = field_type;
8361           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8362           /* The multiplication can potentially overflow.  But because
8363              the field length has been size-checked just above, and
8364              assuming that the maximum size is a reasonable value,
8365              an overflow should not happen in practice.  So rather than
8366              adding overflow recovery code to this already complex code,
8367              we just assume that it's not going to happen.  */
8368           fld_bit_len =
8369             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8370         }
8371       else
8372         {
8373           /* Note: If this field's type is a typedef, it is important
8374              to preserve the typedef layer.
8375
8376              Otherwise, we might be transforming a typedef to a fat
8377              pointer (encoding a pointer to an unconstrained array),
8378              into a basic fat pointer (encoding an unconstrained
8379              array).  As both types are implemented using the same
8380              structure, the typedef is the only clue which allows us
8381              to distinguish between the two options.  Stripping it
8382              would prevent us from printing this field appropriately.  */
8383           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
8384           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8385           if (TYPE_FIELD_BITSIZE (type, f) > 0)
8386             fld_bit_len =
8387               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8388           else
8389             {
8390               struct type *field_type = TYPE_FIELD_TYPE (type, f);
8391
8392               /* We need to be careful of typedefs when computing
8393                  the length of our field.  If this is a typedef,
8394                  get the length of the target type, not the length
8395                  of the typedef.  */
8396               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8397                 field_type = ada_typedef_target_type (field_type);
8398
8399               fld_bit_len =
8400                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8401             }
8402         }
8403       if (off + fld_bit_len > bit_len)
8404         bit_len = off + fld_bit_len;
8405       off += fld_bit_len;
8406       TYPE_LENGTH (rtype) =
8407         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8408     }
8409
8410   /* We handle the variant part, if any, at the end because of certain
8411      odd cases in which it is re-ordered so as NOT to be the last field of
8412      the record.  This can happen in the presence of representation
8413      clauses.  */
8414   if (variant_field >= 0)
8415     {
8416       struct type *branch_type;
8417
8418       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8419
8420       if (dval0 == NULL)
8421         {
8422           /* Using plain value_from_contents_and_address here causes
8423              problems because we will end up trying to resolve a type
8424              that is currently being constructed.  */
8425           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8426                                                              address);
8427           rtype = value_type (dval);
8428         }
8429       else
8430         dval = dval0;
8431
8432       branch_type =
8433         to_fixed_variant_branch_type
8434         (TYPE_FIELD_TYPE (type, variant_field),
8435          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8436          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8437       if (branch_type == NULL)
8438         {
8439           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8440             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8441           TYPE_NFIELDS (rtype) -= 1;
8442         }
8443       else
8444         {
8445           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8446           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8447           fld_bit_len =
8448             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8449             TARGET_CHAR_BIT;
8450           if (off + fld_bit_len > bit_len)
8451             bit_len = off + fld_bit_len;
8452           TYPE_LENGTH (rtype) =
8453             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8454         }
8455     }
8456
8457   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8458      should contain the alignment of that record, which should be a strictly
8459      positive value.  If null or negative, then something is wrong, most
8460      probably in the debug info.  In that case, we don't round up the size
8461      of the resulting type.  If this record is not part of another structure,
8462      the current RTYPE length might be good enough for our purposes.  */
8463   if (TYPE_LENGTH (type) <= 0)
8464     {
8465       if (TYPE_NAME (rtype))
8466         warning (_("Invalid type size for `%s' detected: %d."),
8467                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8468       else
8469         warning (_("Invalid type size for <unnamed> detected: %d."),
8470                  TYPE_LENGTH (type));
8471     }
8472   else
8473     {
8474       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8475                                          TYPE_LENGTH (type));
8476     }
8477
8478   value_free_to_mark (mark);
8479   if (TYPE_LENGTH (rtype) > varsize_limit)
8480     error (_("record type with dynamic size is larger than varsize-limit"));
8481   return rtype;
8482 }
8483
8484 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8485    of 1.  */
8486
8487 static struct type *
8488 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8489                                CORE_ADDR address, struct value *dval0)
8490 {
8491   return ada_template_to_fixed_record_type_1 (type, valaddr,
8492                                               address, dval0, 1);
8493 }
8494
8495 /* An ordinary record type in which ___XVL-convention fields and
8496    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8497    static approximations, containing all possible fields.  Uses
8498    no runtime values.  Useless for use in values, but that's OK,
8499    since the results are used only for type determinations.   Works on both
8500    structs and unions.  Representation note: to save space, we memorize
8501    the result of this function in the TYPE_TARGET_TYPE of the
8502    template type.  */
8503
8504 static struct type *
8505 template_to_static_fixed_type (struct type *type0)
8506 {
8507   struct type *type;
8508   int nfields;
8509   int f;
8510
8511   /* No need no do anything if the input type is already fixed.  */
8512   if (TYPE_FIXED_INSTANCE (type0))
8513     return type0;
8514
8515   /* Likewise if we already have computed the static approximation.  */
8516   if (TYPE_TARGET_TYPE (type0) != NULL)
8517     return TYPE_TARGET_TYPE (type0);
8518
8519   /* Don't clone TYPE0 until we are sure we are going to need a copy.  */
8520   type = type0;
8521   nfields = TYPE_NFIELDS (type0);
8522
8523   /* Whether or not we cloned TYPE0, cache the result so that we don't do
8524      recompute all over next time.  */
8525   TYPE_TARGET_TYPE (type0) = type;
8526
8527   for (f = 0; f < nfields; f += 1)
8528     {
8529       struct type *field_type = TYPE_FIELD_TYPE (type0, f);
8530       struct type *new_type;
8531
8532       if (is_dynamic_field (type0, f))
8533         {
8534           field_type = ada_check_typedef (field_type);
8535           new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8536         }
8537       else
8538         new_type = static_unwrap_type (field_type);
8539
8540       if (new_type != field_type)
8541         {
8542           /* Clone TYPE0 only the first time we get a new field type.  */
8543           if (type == type0)
8544             {
8545               TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8546               TYPE_CODE (type) = TYPE_CODE (type0);
8547               INIT_CPLUS_SPECIFIC (type);
8548               TYPE_NFIELDS (type) = nfields;
8549               TYPE_FIELDS (type) = (struct field *)
8550                 TYPE_ALLOC (type, nfields * sizeof (struct field));
8551               memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8552                       sizeof (struct field) * nfields);
8553               TYPE_NAME (type) = ada_type_name (type0);
8554               TYPE_TAG_NAME (type) = NULL;
8555               TYPE_FIXED_INSTANCE (type) = 1;
8556               TYPE_LENGTH (type) = 0;
8557             }
8558           TYPE_FIELD_TYPE (type, f) = new_type;
8559           TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8560         }
8561     }
8562
8563   return type;
8564 }
8565
8566 /* Given an object of type TYPE whose contents are at VALADDR and
8567    whose address in memory is ADDRESS, returns a revision of TYPE,
8568    which should be a non-dynamic-sized record, in which the variant
8569    part, if any, is replaced with the appropriate branch.  Looks
8570    for discriminant values in DVAL0, which can be NULL if the record
8571    contains the necessary discriminant values.  */
8572
8573 static struct type *
8574 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8575                                    CORE_ADDR address, struct value *dval0)
8576 {
8577   struct value *mark = value_mark ();
8578   struct value *dval;
8579   struct type *rtype;
8580   struct type *branch_type;
8581   int nfields = TYPE_NFIELDS (type);
8582   int variant_field = variant_field_index (type);
8583
8584   if (variant_field == -1)
8585     return type;
8586
8587   if (dval0 == NULL)
8588     {
8589       dval = value_from_contents_and_address (type, valaddr, address);
8590       type = value_type (dval);
8591     }
8592   else
8593     dval = dval0;
8594
8595   rtype = alloc_type_copy (type);
8596   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8597   INIT_CPLUS_SPECIFIC (rtype);
8598   TYPE_NFIELDS (rtype) = nfields;
8599   TYPE_FIELDS (rtype) =
8600     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8601   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8602           sizeof (struct field) * nfields);
8603   TYPE_NAME (rtype) = ada_type_name (type);
8604   TYPE_TAG_NAME (rtype) = NULL;
8605   TYPE_FIXED_INSTANCE (rtype) = 1;
8606   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8607
8608   branch_type = to_fixed_variant_branch_type
8609     (TYPE_FIELD_TYPE (type, variant_field),
8610      cond_offset_host (valaddr,
8611                        TYPE_FIELD_BITPOS (type, variant_field)
8612                        / TARGET_CHAR_BIT),
8613      cond_offset_target (address,
8614                          TYPE_FIELD_BITPOS (type, variant_field)
8615                          / TARGET_CHAR_BIT), dval);
8616   if (branch_type == NULL)
8617     {
8618       int f;
8619
8620       for (f = variant_field + 1; f < nfields; f += 1)
8621         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8622       TYPE_NFIELDS (rtype) -= 1;
8623     }
8624   else
8625     {
8626       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8627       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8628       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8629       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8630     }
8631   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8632
8633   value_free_to_mark (mark);
8634   return rtype;
8635 }
8636
8637 /* An ordinary record type (with fixed-length fields) that describes
8638    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8639    beginning of this section].   Any necessary discriminants' values
8640    should be in DVAL, a record value; it may be NULL if the object
8641    at ADDR itself contains any necessary discriminant values.
8642    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8643    values from the record are needed.  Except in the case that DVAL,
8644    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8645    unchecked) is replaced by a particular branch of the variant.
8646
8647    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8648    is questionable and may be removed.  It can arise during the
8649    processing of an unconstrained-array-of-record type where all the
8650    variant branches have exactly the same size.  This is because in
8651    such cases, the compiler does not bother to use the XVS convention
8652    when encoding the record.  I am currently dubious of this
8653    shortcut and suspect the compiler should be altered.  FIXME.  */
8654
8655 static struct type *
8656 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8657                       CORE_ADDR address, struct value *dval)
8658 {
8659   struct type *templ_type;
8660
8661   if (TYPE_FIXED_INSTANCE (type0))
8662     return type0;
8663
8664   templ_type = dynamic_template_type (type0);
8665
8666   if (templ_type != NULL)
8667     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8668   else if (variant_field_index (type0) >= 0)
8669     {
8670       if (dval == NULL && valaddr == NULL && address == 0)
8671         return type0;
8672       return to_record_with_fixed_variant_part (type0, valaddr, address,
8673                                                 dval);
8674     }
8675   else
8676     {
8677       TYPE_FIXED_INSTANCE (type0) = 1;
8678       return type0;
8679     }
8680
8681 }
8682
8683 /* An ordinary record type (with fixed-length fields) that describes
8684    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8685    union type.  Any necessary discriminants' values should be in DVAL,
8686    a record value.  That is, this routine selects the appropriate
8687    branch of the union at ADDR according to the discriminant value
8688    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8689    it represents a variant subject to a pragma Unchecked_Union.  */
8690
8691 static struct type *
8692 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8693                               CORE_ADDR address, struct value *dval)
8694 {
8695   int which;
8696   struct type *templ_type;
8697   struct type *var_type;
8698
8699   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8700     var_type = TYPE_TARGET_TYPE (var_type0);
8701   else
8702     var_type = var_type0;
8703
8704   templ_type = ada_find_parallel_type (var_type, "___XVU");
8705
8706   if (templ_type != NULL)
8707     var_type = templ_type;
8708
8709   if (is_unchecked_variant (var_type, value_type (dval)))
8710       return var_type0;
8711   which =
8712     ada_which_variant_applies (var_type,
8713                                value_type (dval), value_contents (dval));
8714
8715   if (which < 0)
8716     return empty_record (var_type);
8717   else if (is_dynamic_field (var_type, which))
8718     return to_fixed_record_type
8719       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8720        valaddr, address, dval);
8721   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8722     return
8723       to_fixed_record_type
8724       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8725   else
8726     return TYPE_FIELD_TYPE (var_type, which);
8727 }
8728
8729 /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8730    ENCODING_TYPE, a type following the GNAT conventions for discrete
8731    type encodings, only carries redundant information.  */
8732
8733 static int
8734 ada_is_redundant_range_encoding (struct type *range_type,
8735                                  struct type *encoding_type)
8736 {
8737   struct type *fixed_range_type;
8738   const char *bounds_str;
8739   int n;
8740   LONGEST lo, hi;
8741
8742   gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8743
8744   if (TYPE_CODE (get_base_type (range_type))
8745       != TYPE_CODE (get_base_type (encoding_type)))
8746     {
8747       /* The compiler probably used a simple base type to describe
8748          the range type instead of the range's actual base type,
8749          expecting us to get the real base type from the encoding
8750          anyway.  In this situation, the encoding cannot be ignored
8751          as redundant.  */
8752       return 0;
8753     }
8754
8755   if (is_dynamic_type (range_type))
8756     return 0;
8757
8758   if (TYPE_NAME (encoding_type) == NULL)
8759     return 0;
8760
8761   bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8762   if (bounds_str == NULL)
8763     return 0;
8764
8765   n = 8; /* Skip "___XDLU_".  */
8766   if (!ada_scan_number (bounds_str, n, &lo, &n))
8767     return 0;
8768   if (TYPE_LOW_BOUND (range_type) != lo)
8769     return 0;
8770
8771   n += 2; /* Skip the "__" separator between the two bounds.  */
8772   if (!ada_scan_number (bounds_str, n, &hi, &n))
8773     return 0;
8774   if (TYPE_HIGH_BOUND (range_type) != hi)
8775     return 0;
8776
8777   return 1;
8778 }
8779
8780 /* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8781    a type following the GNAT encoding for describing array type
8782    indices, only carries redundant information.  */
8783
8784 static int
8785 ada_is_redundant_index_type_desc (struct type *array_type,
8786                                   struct type *desc_type)
8787 {
8788   struct type *this_layer = check_typedef (array_type);
8789   int i;
8790
8791   for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8792     {
8793       if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8794                                             TYPE_FIELD_TYPE (desc_type, i)))
8795         return 0;
8796       this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8797     }
8798
8799   return 1;
8800 }
8801
8802 /* Assuming that TYPE0 is an array type describing the type of a value
8803    at ADDR, and that DVAL describes a record containing any
8804    discriminants used in TYPE0, returns a type for the value that
8805    contains no dynamic components (that is, no components whose sizes
8806    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8807    true, gives an error message if the resulting type's size is over
8808    varsize_limit.  */
8809
8810 static struct type *
8811 to_fixed_array_type (struct type *type0, struct value *dval,
8812                      int ignore_too_big)
8813 {
8814   struct type *index_type_desc;
8815   struct type *result;
8816   int constrained_packed_array_p;
8817   static const char *xa_suffix = "___XA";
8818
8819   type0 = ada_check_typedef (type0);
8820   if (TYPE_FIXED_INSTANCE (type0))
8821     return type0;
8822
8823   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8824   if (constrained_packed_array_p)
8825     type0 = decode_constrained_packed_array_type (type0);
8826
8827   index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8828
8829   /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8830      encoding suffixed with 'P' may still be generated.  If so,
8831      it should be used to find the XA type.  */
8832
8833   if (index_type_desc == NULL)
8834     {
8835       const char *type_name = ada_type_name (type0);
8836
8837       if (type_name != NULL)
8838         {
8839           const int len = strlen (type_name);
8840           char *name = (char *) alloca (len + strlen (xa_suffix));
8841
8842           if (type_name[len - 1] == 'P')
8843             {
8844               strcpy (name, type_name);
8845               strcpy (name + len - 1, xa_suffix);
8846               index_type_desc = ada_find_parallel_type_with_name (type0, name);
8847             }
8848         }
8849     }
8850
8851   ada_fixup_array_indexes_type (index_type_desc);
8852   if (index_type_desc != NULL
8853       && ada_is_redundant_index_type_desc (type0, index_type_desc))
8854     {
8855       /* Ignore this ___XA parallel type, as it does not bring any
8856          useful information.  This allows us to avoid creating fixed
8857          versions of the array's index types, which would be identical
8858          to the original ones.  This, in turn, can also help avoid
8859          the creation of fixed versions of the array itself.  */
8860       index_type_desc = NULL;
8861     }
8862
8863   if (index_type_desc == NULL)
8864     {
8865       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8866
8867       /* NOTE: elt_type---the fixed version of elt_type0---should never
8868          depend on the contents of the array in properly constructed
8869          debugging data.  */
8870       /* Create a fixed version of the array element type.
8871          We're not providing the address of an element here,
8872          and thus the actual object value cannot be inspected to do
8873          the conversion.  This should not be a problem, since arrays of
8874          unconstrained objects are not allowed.  In particular, all
8875          the elements of an array of a tagged type should all be of
8876          the same type specified in the debugging info.  No need to
8877          consult the object tag.  */
8878       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8879
8880       /* Make sure we always create a new array type when dealing with
8881          packed array types, since we're going to fix-up the array
8882          type length and element bitsize a little further down.  */
8883       if (elt_type0 == elt_type && !constrained_packed_array_p)
8884         result = type0;
8885       else
8886         result = create_array_type (alloc_type_copy (type0),
8887                                     elt_type, TYPE_INDEX_TYPE (type0));
8888     }
8889   else
8890     {
8891       int i;
8892       struct type *elt_type0;
8893
8894       elt_type0 = type0;
8895       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8896         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8897
8898       /* NOTE: result---the fixed version of elt_type0---should never
8899          depend on the contents of the array in properly constructed
8900          debugging data.  */
8901       /* Create a fixed version of the array element type.
8902          We're not providing the address of an element here,
8903          and thus the actual object value cannot be inspected to do
8904          the conversion.  This should not be a problem, since arrays of
8905          unconstrained objects are not allowed.  In particular, all
8906          the elements of an array of a tagged type should all be of
8907          the same type specified in the debugging info.  No need to
8908          consult the object tag.  */
8909       result =
8910         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8911
8912       elt_type0 = type0;
8913       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8914         {
8915           struct type *range_type =
8916             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8917
8918           result = create_array_type (alloc_type_copy (elt_type0),
8919                                       result, range_type);
8920           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8921         }
8922       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8923         error (_("array type with dynamic size is larger than varsize-limit"));
8924     }
8925
8926   /* We want to preserve the type name.  This can be useful when
8927      trying to get the type name of a value that has already been
8928      printed (for instance, if the user did "print VAR; whatis $".  */
8929   TYPE_NAME (result) = TYPE_NAME (type0);
8930
8931   if (constrained_packed_array_p)
8932     {
8933       /* So far, the resulting type has been created as if the original
8934          type was a regular (non-packed) array type.  As a result, the
8935          bitsize of the array elements needs to be set again, and the array
8936          length needs to be recomputed based on that bitsize.  */
8937       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8938       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8939
8940       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8941       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8942       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8943         TYPE_LENGTH (result)++;
8944     }
8945
8946   TYPE_FIXED_INSTANCE (result) = 1;
8947   return result;
8948 }
8949
8950
8951 /* A standard type (containing no dynamically sized components)
8952    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8953    DVAL describes a record containing any discriminants used in TYPE0,
8954    and may be NULL if there are none, or if the object of type TYPE at
8955    ADDRESS or in VALADDR contains these discriminants.
8956    
8957    If CHECK_TAG is not null, in the case of tagged types, this function
8958    attempts to locate the object's tag and use it to compute the actual
8959    type.  However, when ADDRESS is null, we cannot use it to determine the
8960    location of the tag, and therefore compute the tagged type's actual type.
8961    So we return the tagged type without consulting the tag.  */
8962    
8963 static struct type *
8964 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8965                    CORE_ADDR address, struct value *dval, int check_tag)
8966 {
8967   type = ada_check_typedef (type);
8968   switch (TYPE_CODE (type))
8969     {
8970     default:
8971       return type;
8972     case TYPE_CODE_STRUCT:
8973       {
8974         struct type *static_type = to_static_fixed_type (type);
8975         struct type *fixed_record_type =
8976           to_fixed_record_type (type, valaddr, address, NULL);
8977
8978         /* If STATIC_TYPE is a tagged type and we know the object's address,
8979            then we can determine its tag, and compute the object's actual
8980            type from there.  Note that we have to use the fixed record
8981            type (the parent part of the record may have dynamic fields
8982            and the way the location of _tag is expressed may depend on
8983            them).  */
8984
8985         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8986           {
8987             struct value *tag =
8988               value_tag_from_contents_and_address
8989               (fixed_record_type,
8990                valaddr,
8991                address);
8992             struct type *real_type = type_from_tag (tag);
8993             struct value *obj =
8994               value_from_contents_and_address (fixed_record_type,
8995                                                valaddr,
8996                                                address);
8997             fixed_record_type = value_type (obj);
8998             if (real_type != NULL)
8999               return to_fixed_record_type
9000                 (real_type, NULL,
9001                  value_address (ada_tag_value_at_base_address (obj)), NULL);
9002           }
9003
9004         /* Check to see if there is a parallel ___XVZ variable.
9005            If there is, then it provides the actual size of our type.  */
9006         else if (ada_type_name (fixed_record_type) != NULL)
9007           {
9008             const char *name = ada_type_name (fixed_record_type);
9009             char *xvz_name
9010               = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
9011             int xvz_found = 0;
9012             LONGEST size;
9013
9014             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
9015             size = get_int_var_value (xvz_name, &xvz_found);
9016             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
9017               {
9018                 fixed_record_type = copy_type (fixed_record_type);
9019                 TYPE_LENGTH (fixed_record_type) = size;
9020
9021                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
9022                    observed this when the debugging info is STABS, and
9023                    apparently it is something that is hard to fix.
9024
9025                    In practice, we don't need the actual type definition
9026                    at all, because the presence of the XVZ variable allows us
9027                    to assume that there must be a XVS type as well, which we
9028                    should be able to use later, when we need the actual type
9029                    definition.
9030
9031                    In the meantime, pretend that the "fixed" type we are
9032                    returning is NOT a stub, because this can cause trouble
9033                    when using this type to create new types targeting it.
9034                    Indeed, the associated creation routines often check
9035                    whether the target type is a stub and will try to replace
9036                    it, thus using a type with the wrong size.  This, in turn,
9037                    might cause the new type to have the wrong size too.
9038                    Consider the case of an array, for instance, where the size
9039                    of the array is computed from the number of elements in
9040                    our array multiplied by the size of its element.  */
9041                 TYPE_STUB (fixed_record_type) = 0;
9042               }
9043           }
9044         return fixed_record_type;
9045       }
9046     case TYPE_CODE_ARRAY:
9047       return to_fixed_array_type (type, dval, 1);
9048     case TYPE_CODE_UNION:
9049       if (dval == NULL)
9050         return type;
9051       else
9052         return to_fixed_variant_branch_type (type, valaddr, address, dval);
9053     }
9054 }
9055
9056 /* The same as ada_to_fixed_type_1, except that it preserves the type
9057    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
9058
9059    The typedef layer needs be preserved in order to differentiate between
9060    arrays and array pointers when both types are implemented using the same
9061    fat pointer.  In the array pointer case, the pointer is encoded as
9062    a typedef of the pointer type.  For instance, considering:
9063
9064           type String_Access is access String;
9065           S1 : String_Access := null;
9066
9067    To the debugger, S1 is defined as a typedef of type String.  But
9068    to the user, it is a pointer.  So if the user tries to print S1,
9069    we should not dereference the array, but print the array address
9070    instead.
9071
9072    If we didn't preserve the typedef layer, we would lose the fact that
9073    the type is to be presented as a pointer (needs de-reference before
9074    being printed).  And we would also use the source-level type name.  */
9075
9076 struct type *
9077 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
9078                    CORE_ADDR address, struct value *dval, int check_tag)
9079
9080 {
9081   struct type *fixed_type =
9082     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
9083
9084   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
9085       then preserve the typedef layer.
9086
9087       Implementation note: We can only check the main-type portion of
9088       the TYPE and FIXED_TYPE, because eliminating the typedef layer
9089       from TYPE now returns a type that has the same instance flags
9090       as TYPE.  For instance, if TYPE is a "typedef const", and its
9091       target type is a "struct", then the typedef elimination will return
9092       a "const" version of the target type.  See check_typedef for more
9093       details about how the typedef layer elimination is done.
9094
9095       brobecker/2010-11-19: It seems to me that the only case where it is
9096       useful to preserve the typedef layer is when dealing with fat pointers.
9097       Perhaps, we could add a check for that and preserve the typedef layer
9098       only in that situation.  But this seems unecessary so far, probably
9099       because we call check_typedef/ada_check_typedef pretty much everywhere.
9100       */
9101   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
9102       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
9103           == TYPE_MAIN_TYPE (fixed_type)))
9104     return type;
9105
9106   return fixed_type;
9107 }
9108
9109 /* A standard (static-sized) type corresponding as well as possible to
9110    TYPE0, but based on no runtime data.  */
9111
9112 static struct type *
9113 to_static_fixed_type (struct type *type0)
9114 {
9115   struct type *type;
9116
9117   if (type0 == NULL)
9118     return NULL;
9119
9120   if (TYPE_FIXED_INSTANCE (type0))
9121     return type0;
9122
9123   type0 = ada_check_typedef (type0);
9124
9125   switch (TYPE_CODE (type0))
9126     {
9127     default:
9128       return type0;
9129     case TYPE_CODE_STRUCT:
9130       type = dynamic_template_type (type0);
9131       if (type != NULL)
9132         return template_to_static_fixed_type (type);
9133       else
9134         return template_to_static_fixed_type (type0);
9135     case TYPE_CODE_UNION:
9136       type = ada_find_parallel_type (type0, "___XVU");
9137       if (type != NULL)
9138         return template_to_static_fixed_type (type);
9139       else
9140         return template_to_static_fixed_type (type0);
9141     }
9142 }
9143
9144 /* A static approximation of TYPE with all type wrappers removed.  */
9145
9146 static struct type *
9147 static_unwrap_type (struct type *type)
9148 {
9149   if (ada_is_aligner_type (type))
9150     {
9151       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
9152       if (ada_type_name (type1) == NULL)
9153         TYPE_NAME (type1) = ada_type_name (type);
9154
9155       return static_unwrap_type (type1);
9156     }
9157   else
9158     {
9159       struct type *raw_real_type = ada_get_base_type (type);
9160
9161       if (raw_real_type == type)
9162         return type;
9163       else
9164         return to_static_fixed_type (raw_real_type);
9165     }
9166 }
9167
9168 /* In some cases, incomplete and private types require
9169    cross-references that are not resolved as records (for example,
9170       type Foo;
9171       type FooP is access Foo;
9172       V: FooP;
9173       type Foo is array ...;
9174    ).  In these cases, since there is no mechanism for producing
9175    cross-references to such types, we instead substitute for FooP a
9176    stub enumeration type that is nowhere resolved, and whose tag is
9177    the name of the actual type.  Call these types "non-record stubs".  */
9178
9179 /* A type equivalent to TYPE that is not a non-record stub, if one
9180    exists, otherwise TYPE.  */
9181
9182 struct type *
9183 ada_check_typedef (struct type *type)
9184 {
9185   if (type == NULL)
9186     return NULL;
9187
9188   /* If our type is a typedef type of a fat pointer, then we're done.
9189      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
9190      what allows us to distinguish between fat pointers that represent
9191      array types, and fat pointers that represent array access types
9192      (in both cases, the compiler implements them as fat pointers).  */
9193   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
9194       && is_thick_pntr (ada_typedef_target_type (type)))
9195     return type;
9196
9197   type = check_typedef (type);
9198   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
9199       || !TYPE_STUB (type)
9200       || TYPE_TAG_NAME (type) == NULL)
9201     return type;
9202   else
9203     {
9204       const char *name = TYPE_TAG_NAME (type);
9205       struct type *type1 = ada_find_any_type (name);
9206
9207       if (type1 == NULL)
9208         return type;
9209
9210       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
9211          stubs pointing to arrays, as we don't create symbols for array
9212          types, only for the typedef-to-array types).  If that's the case,
9213          strip the typedef layer.  */
9214       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
9215         type1 = ada_check_typedef (type1);
9216
9217       return type1;
9218     }
9219 }
9220
9221 /* A value representing the data at VALADDR/ADDRESS as described by
9222    type TYPE0, but with a standard (static-sized) type that correctly
9223    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
9224    type, then return VAL0 [this feature is simply to avoid redundant
9225    creation of struct values].  */
9226
9227 static struct value *
9228 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
9229                            struct value *val0)
9230 {
9231   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
9232
9233   if (type == type0 && val0 != NULL)
9234     return val0;
9235   else
9236     return value_from_contents_and_address (type, 0, address);
9237 }
9238
9239 /* A value representing VAL, but with a standard (static-sized) type
9240    that correctly describes it.  Does not necessarily create a new
9241    value.  */
9242
9243 struct value *
9244 ada_to_fixed_value (struct value *val)
9245 {
9246   val = unwrap_value (val);
9247   val = ada_to_fixed_value_create (value_type (val),
9248                                       value_address (val),
9249                                       val);
9250   return val;
9251 }
9252 \f
9253
9254 /* Attributes */
9255
9256 /* Table mapping attribute numbers to names.
9257    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
9258
9259 static const char *attribute_names[] = {
9260   "<?>",
9261
9262   "first",
9263   "last",
9264   "length",
9265   "image",
9266   "max",
9267   "min",
9268   "modulus",
9269   "pos",
9270   "size",
9271   "tag",
9272   "val",
9273   0
9274 };
9275
9276 const char *
9277 ada_attribute_name (enum exp_opcode n)
9278 {
9279   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
9280     return attribute_names[n - OP_ATR_FIRST + 1];
9281   else
9282     return attribute_names[0];
9283 }
9284
9285 /* Evaluate the 'POS attribute applied to ARG.  */
9286
9287 static LONGEST
9288 pos_atr (struct value *arg)
9289 {
9290   struct value *val = coerce_ref (arg);
9291   struct type *type = value_type (val);
9292   LONGEST result;
9293
9294   if (!discrete_type_p (type))
9295     error (_("'POS only defined on discrete types"));
9296
9297   if (!discrete_position (type, value_as_long (val), &result))
9298     error (_("enumeration value is invalid: can't find 'POS"));
9299
9300   return result;
9301 }
9302
9303 static struct value *
9304 value_pos_atr (struct type *type, struct value *arg)
9305 {
9306   return value_from_longest (type, pos_atr (arg));
9307 }
9308
9309 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
9310
9311 static struct value *
9312 value_val_atr (struct type *type, struct value *arg)
9313 {
9314   if (!discrete_type_p (type))
9315     error (_("'VAL only defined on discrete types"));
9316   if (!integer_type_p (value_type (arg)))
9317     error (_("'VAL requires integral argument"));
9318
9319   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
9320     {
9321       long pos = value_as_long (arg);
9322
9323       if (pos < 0 || pos >= TYPE_NFIELDS (type))
9324         error (_("argument to 'VAL out of range"));
9325       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
9326     }
9327   else
9328     return value_from_longest (type, value_as_long (arg));
9329 }
9330 \f
9331
9332                                 /* Evaluation */
9333
9334 /* True if TYPE appears to be an Ada character type.
9335    [At the moment, this is true only for Character and Wide_Character;
9336    It is a heuristic test that could stand improvement].  */
9337
9338 int
9339 ada_is_character_type (struct type *type)
9340 {
9341   const char *name;
9342
9343   /* If the type code says it's a character, then assume it really is,
9344      and don't check any further.  */
9345   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
9346     return 1;
9347   
9348   /* Otherwise, assume it's a character type iff it is a discrete type
9349      with a known character type name.  */
9350   name = ada_type_name (type);
9351   return (name != NULL
9352           && (TYPE_CODE (type) == TYPE_CODE_INT
9353               || TYPE_CODE (type) == TYPE_CODE_RANGE)
9354           && (strcmp (name, "character") == 0
9355               || strcmp (name, "wide_character") == 0
9356               || strcmp (name, "wide_wide_character") == 0
9357               || strcmp (name, "unsigned char") == 0));
9358 }
9359
9360 /* True if TYPE appears to be an Ada string type.  */
9361
9362 int
9363 ada_is_string_type (struct type *type)
9364 {
9365   type = ada_check_typedef (type);
9366   if (type != NULL
9367       && TYPE_CODE (type) != TYPE_CODE_PTR
9368       && (ada_is_simple_array_type (type)
9369           || ada_is_array_descriptor_type (type))
9370       && ada_array_arity (type) == 1)
9371     {
9372       struct type *elttype = ada_array_element_type (type, 1);
9373
9374       return ada_is_character_type (elttype);
9375     }
9376   else
9377     return 0;
9378 }
9379
9380 /* The compiler sometimes provides a parallel XVS type for a given
9381    PAD type.  Normally, it is safe to follow the PAD type directly,
9382    but older versions of the compiler have a bug that causes the offset
9383    of its "F" field to be wrong.  Following that field in that case
9384    would lead to incorrect results, but this can be worked around
9385    by ignoring the PAD type and using the associated XVS type instead.
9386
9387    Set to True if the debugger should trust the contents of PAD types.
9388    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
9389 static int trust_pad_over_xvs = 1;
9390
9391 /* True if TYPE is a struct type introduced by the compiler to force the
9392    alignment of a value.  Such types have a single field with a
9393    distinctive name.  */
9394
9395 int
9396 ada_is_aligner_type (struct type *type)
9397 {
9398   type = ada_check_typedef (type);
9399
9400   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
9401     return 0;
9402
9403   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
9404           && TYPE_NFIELDS (type) == 1
9405           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
9406 }
9407
9408 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
9409    the parallel type.  */
9410
9411 struct type *
9412 ada_get_base_type (struct type *raw_type)
9413 {
9414   struct type *real_type_namer;
9415   struct type *raw_real_type;
9416
9417   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9418     return raw_type;
9419
9420   if (ada_is_aligner_type (raw_type))
9421     /* The encoding specifies that we should always use the aligner type.
9422        So, even if this aligner type has an associated XVS type, we should
9423        simply ignore it.
9424
9425        According to the compiler gurus, an XVS type parallel to an aligner
9426        type may exist because of a stabs limitation.  In stabs, aligner
9427        types are empty because the field has a variable-sized type, and
9428        thus cannot actually be used as an aligner type.  As a result,
9429        we need the associated parallel XVS type to decode the type.
9430        Since the policy in the compiler is to not change the internal
9431        representation based on the debugging info format, we sometimes
9432        end up having a redundant XVS type parallel to the aligner type.  */
9433     return raw_type;
9434
9435   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
9436   if (real_type_namer == NULL
9437       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9438       || TYPE_NFIELDS (real_type_namer) != 1)
9439     return raw_type;
9440
9441   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9442     {
9443       /* This is an older encoding form where the base type needs to be
9444          looked up by name.  We prefer the newer enconding because it is
9445          more efficient.  */
9446       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9447       if (raw_real_type == NULL)
9448         return raw_type;
9449       else
9450         return raw_real_type;
9451     }
9452
9453   /* The field in our XVS type is a reference to the base type.  */
9454   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
9455 }
9456
9457 /* The type of value designated by TYPE, with all aligners removed.  */
9458
9459 struct type *
9460 ada_aligned_type (struct type *type)
9461 {
9462   if (ada_is_aligner_type (type))
9463     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9464   else
9465     return ada_get_base_type (type);
9466 }
9467
9468
9469 /* The address of the aligned value in an object at address VALADDR
9470    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
9471
9472 const gdb_byte *
9473 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
9474 {
9475   if (ada_is_aligner_type (type))
9476     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
9477                                    valaddr +
9478                                    TYPE_FIELD_BITPOS (type,
9479                                                       0) / TARGET_CHAR_BIT);
9480   else
9481     return valaddr;
9482 }
9483
9484
9485
9486 /* The printed representation of an enumeration literal with encoded
9487    name NAME.  The value is good to the next call of ada_enum_name.  */
9488 const char *
9489 ada_enum_name (const char *name)
9490 {
9491   static char *result;
9492   static size_t result_len = 0;
9493   const char *tmp;
9494
9495   /* First, unqualify the enumeration name:
9496      1. Search for the last '.' character.  If we find one, then skip
9497      all the preceding characters, the unqualified name starts
9498      right after that dot.
9499      2. Otherwise, we may be debugging on a target where the compiler
9500      translates dots into "__".  Search forward for double underscores,
9501      but stop searching when we hit an overloading suffix, which is
9502      of the form "__" followed by digits.  */
9503
9504   tmp = strrchr (name, '.');
9505   if (tmp != NULL)
9506     name = tmp + 1;
9507   else
9508     {
9509       while ((tmp = strstr (name, "__")) != NULL)
9510         {
9511           if (isdigit (tmp[2]))
9512             break;
9513           else
9514             name = tmp + 2;
9515         }
9516     }
9517
9518   if (name[0] == 'Q')
9519     {
9520       int v;
9521
9522       if (name[1] == 'U' || name[1] == 'W')
9523         {
9524           if (sscanf (name + 2, "%x", &v) != 1)
9525             return name;
9526         }
9527       else
9528         return name;
9529
9530       GROW_VECT (result, result_len, 16);
9531       if (isascii (v) && isprint (v))
9532         xsnprintf (result, result_len, "'%c'", v);
9533       else if (name[1] == 'U')
9534         xsnprintf (result, result_len, "[\"%02x\"]", v);
9535       else
9536         xsnprintf (result, result_len, "[\"%04x\"]", v);
9537
9538       return result;
9539     }
9540   else
9541     {
9542       tmp = strstr (name, "__");
9543       if (tmp == NULL)
9544         tmp = strstr (name, "$");
9545       if (tmp != NULL)
9546         {
9547           GROW_VECT (result, result_len, tmp - name + 1);
9548           strncpy (result, name, tmp - name);
9549           result[tmp - name] = '\0';
9550           return result;
9551         }
9552
9553       return name;
9554     }
9555 }
9556
9557 /* Evaluate the subexpression of EXP starting at *POS as for
9558    evaluate_type, updating *POS to point just past the evaluated
9559    expression.  */
9560
9561 static struct value *
9562 evaluate_subexp_type (struct expression *exp, int *pos)
9563 {
9564   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9565 }
9566
9567 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9568    value it wraps.  */
9569
9570 static struct value *
9571 unwrap_value (struct value *val)
9572 {
9573   struct type *type = ada_check_typedef (value_type (val));
9574
9575   if (ada_is_aligner_type (type))
9576     {
9577       struct value *v = ada_value_struct_elt (val, "F", 0);
9578       struct type *val_type = ada_check_typedef (value_type (v));
9579
9580       if (ada_type_name (val_type) == NULL)
9581         TYPE_NAME (val_type) = ada_type_name (type);
9582
9583       return unwrap_value (v);
9584     }
9585   else
9586     {
9587       struct type *raw_real_type =
9588         ada_check_typedef (ada_get_base_type (type));
9589
9590       /* If there is no parallel XVS or XVE type, then the value is
9591          already unwrapped.  Return it without further modification.  */
9592       if ((type == raw_real_type)
9593           && ada_find_parallel_type (type, "___XVE") == NULL)
9594         return val;
9595
9596       return
9597         coerce_unspec_val_to_type
9598         (val, ada_to_fixed_type (raw_real_type, 0,
9599                                  value_address (val),
9600                                  NULL, 1));
9601     }
9602 }
9603
9604 static struct value *
9605 cast_to_fixed (struct type *type, struct value *arg)
9606 {
9607   LONGEST val;
9608
9609   if (type == value_type (arg))
9610     return arg;
9611   else if (ada_is_fixed_point_type (value_type (arg)))
9612     val = ada_float_to_fixed (type,
9613                               ada_fixed_to_float (value_type (arg),
9614                                                   value_as_long (arg)));
9615   else
9616     {
9617       DOUBLEST argd = value_as_double (arg);
9618
9619       val = ada_float_to_fixed (type, argd);
9620     }
9621
9622   return value_from_longest (type, val);
9623 }
9624
9625 static struct value *
9626 cast_from_fixed (struct type *type, struct value *arg)
9627 {
9628   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9629                                      value_as_long (arg));
9630
9631   return value_from_double (type, val);
9632 }
9633
9634 /* Given two array types T1 and T2, return nonzero iff both arrays
9635    contain the same number of elements.  */
9636
9637 static int
9638 ada_same_array_size_p (struct type *t1, struct type *t2)
9639 {
9640   LONGEST lo1, hi1, lo2, hi2;
9641
9642   /* Get the array bounds in order to verify that the size of
9643      the two arrays match.  */
9644   if (!get_array_bounds (t1, &lo1, &hi1)
9645       || !get_array_bounds (t2, &lo2, &hi2))
9646     error (_("unable to determine array bounds"));
9647
9648   /* To make things easier for size comparison, normalize a bit
9649      the case of empty arrays by making sure that the difference
9650      between upper bound and lower bound is always -1.  */
9651   if (lo1 > hi1)
9652     hi1 = lo1 - 1;
9653   if (lo2 > hi2)
9654     hi2 = lo2 - 1;
9655
9656   return (hi1 - lo1 == hi2 - lo2);
9657 }
9658
9659 /* Assuming that VAL is an array of integrals, and TYPE represents
9660    an array with the same number of elements, but with wider integral
9661    elements, return an array "casted" to TYPE.  In practice, this
9662    means that the returned array is built by casting each element
9663    of the original array into TYPE's (wider) element type.  */
9664
9665 static struct value *
9666 ada_promote_array_of_integrals (struct type *type, struct value *val)
9667 {
9668   struct type *elt_type = TYPE_TARGET_TYPE (type);
9669   LONGEST lo, hi;
9670   struct value *res;
9671   LONGEST i;
9672
9673   /* Verify that both val and type are arrays of scalars, and
9674      that the size of val's elements is smaller than the size
9675      of type's element.  */
9676   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9677   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9678   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9679   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9680   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9681               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9682
9683   if (!get_array_bounds (type, &lo, &hi))
9684     error (_("unable to determine array bounds"));
9685
9686   res = allocate_value (type);
9687
9688   /* Promote each array element.  */
9689   for (i = 0; i < hi - lo + 1; i++)
9690     {
9691       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9692
9693       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9694               value_contents_all (elt), TYPE_LENGTH (elt_type));
9695     }
9696
9697   return res;
9698 }
9699
9700 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9701    return the converted value.  */
9702
9703 static struct value *
9704 coerce_for_assign (struct type *type, struct value *val)
9705 {
9706   struct type *type2 = value_type (val);
9707
9708   if (type == type2)
9709     return val;
9710
9711   type2 = ada_check_typedef (type2);
9712   type = ada_check_typedef (type);
9713
9714   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9715       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9716     {
9717       val = ada_value_ind (val);
9718       type2 = value_type (val);
9719     }
9720
9721   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9722       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9723     {
9724       if (!ada_same_array_size_p (type, type2))
9725         error (_("cannot assign arrays of different length"));
9726
9727       if (is_integral_type (TYPE_TARGET_TYPE (type))
9728           && is_integral_type (TYPE_TARGET_TYPE (type2))
9729           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9730                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9731         {
9732           /* Allow implicit promotion of the array elements to
9733              a wider type.  */
9734           return ada_promote_array_of_integrals (type, val);
9735         }
9736
9737       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9738           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9739         error (_("Incompatible types in assignment"));
9740       deprecated_set_value_type (val, type);
9741     }
9742   return val;
9743 }
9744
9745 static struct value *
9746 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9747 {
9748   struct value *val;
9749   struct type *type1, *type2;
9750   LONGEST v, v1, v2;
9751
9752   arg1 = coerce_ref (arg1);
9753   arg2 = coerce_ref (arg2);
9754   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9755   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9756
9757   if (TYPE_CODE (type1) != TYPE_CODE_INT
9758       || TYPE_CODE (type2) != TYPE_CODE_INT)
9759     return value_binop (arg1, arg2, op);
9760
9761   switch (op)
9762     {
9763     case BINOP_MOD:
9764     case BINOP_DIV:
9765     case BINOP_REM:
9766       break;
9767     default:
9768       return value_binop (arg1, arg2, op);
9769     }
9770
9771   v2 = value_as_long (arg2);
9772   if (v2 == 0)
9773     error (_("second operand of %s must not be zero."), op_string (op));
9774
9775   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9776     return value_binop (arg1, arg2, op);
9777
9778   v1 = value_as_long (arg1);
9779   switch (op)
9780     {
9781     case BINOP_DIV:
9782       v = v1 / v2;
9783       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9784         v += v > 0 ? -1 : 1;
9785       break;
9786     case BINOP_REM:
9787       v = v1 % v2;
9788       if (v * v1 < 0)
9789         v -= v2;
9790       break;
9791     default:
9792       /* Should not reach this point.  */
9793       v = 0;
9794     }
9795
9796   val = allocate_value (type1);
9797   store_unsigned_integer (value_contents_raw (val),
9798                           TYPE_LENGTH (value_type (val)),
9799                           gdbarch_byte_order (get_type_arch (type1)), v);
9800   return val;
9801 }
9802
9803 static int
9804 ada_value_equal (struct value *arg1, struct value *arg2)
9805 {
9806   if (ada_is_direct_array_type (value_type (arg1))
9807       || ada_is_direct_array_type (value_type (arg2)))
9808     {
9809       /* Automatically dereference any array reference before
9810          we attempt to perform the comparison.  */
9811       arg1 = ada_coerce_ref (arg1);
9812       arg2 = ada_coerce_ref (arg2);
9813       
9814       arg1 = ada_coerce_to_simple_array (arg1);
9815       arg2 = ada_coerce_to_simple_array (arg2);
9816       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9817           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9818         error (_("Attempt to compare array with non-array"));
9819       /* FIXME: The following works only for types whose
9820          representations use all bits (no padding or undefined bits)
9821          and do not have user-defined equality.  */
9822       return
9823         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9824         && memcmp (value_contents (arg1), value_contents (arg2),
9825                    TYPE_LENGTH (value_type (arg1))) == 0;
9826     }
9827   return value_equal (arg1, arg2);
9828 }
9829
9830 /* Total number of component associations in the aggregate starting at
9831    index PC in EXP.  Assumes that index PC is the start of an
9832    OP_AGGREGATE.  */
9833
9834 static int
9835 num_component_specs (struct expression *exp, int pc)
9836 {
9837   int n, m, i;
9838
9839   m = exp->elts[pc + 1].longconst;
9840   pc += 3;
9841   n = 0;
9842   for (i = 0; i < m; i += 1)
9843     {
9844       switch (exp->elts[pc].opcode) 
9845         {
9846         default:
9847           n += 1;
9848           break;
9849         case OP_CHOICES:
9850           n += exp->elts[pc + 1].longconst;
9851           break;
9852         }
9853       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9854     }
9855   return n;
9856 }
9857
9858 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9859    component of LHS (a simple array or a record), updating *POS past
9860    the expression, assuming that LHS is contained in CONTAINER.  Does
9861    not modify the inferior's memory, nor does it modify LHS (unless
9862    LHS == CONTAINER).  */
9863
9864 static void
9865 assign_component (struct value *container, struct value *lhs, LONGEST index,
9866                   struct expression *exp, int *pos)
9867 {
9868   struct value *mark = value_mark ();
9869   struct value *elt;
9870
9871   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9872     {
9873       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9874       struct value *index_val = value_from_longest (index_type, index);
9875
9876       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9877     }
9878   else
9879     {
9880       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9881       elt = ada_to_fixed_value (elt);
9882     }
9883
9884   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9885     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9886   else
9887     value_assign_to_component (container, elt, 
9888                                ada_evaluate_subexp (NULL, exp, pos, 
9889                                                     EVAL_NORMAL));
9890
9891   value_free_to_mark (mark);
9892 }
9893
9894 /* Assuming that LHS represents an lvalue having a record or array
9895    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9896    of that aggregate's value to LHS, advancing *POS past the
9897    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9898    lvalue containing LHS (possibly LHS itself).  Does not modify
9899    the inferior's memory, nor does it modify the contents of 
9900    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9901
9902 static struct value *
9903 assign_aggregate (struct value *container, 
9904                   struct value *lhs, struct expression *exp, 
9905                   int *pos, enum noside noside)
9906 {
9907   struct type *lhs_type;
9908   int n = exp->elts[*pos+1].longconst;
9909   LONGEST low_index, high_index;
9910   int num_specs;
9911   LONGEST *indices;
9912   int max_indices, num_indices;
9913   int i;
9914
9915   *pos += 3;
9916   if (noside != EVAL_NORMAL)
9917     {
9918       for (i = 0; i < n; i += 1)
9919         ada_evaluate_subexp (NULL, exp, pos, noside);
9920       return container;
9921     }
9922
9923   container = ada_coerce_ref (container);
9924   if (ada_is_direct_array_type (value_type (container)))
9925     container = ada_coerce_to_simple_array (container);
9926   lhs = ada_coerce_ref (lhs);
9927   if (!deprecated_value_modifiable (lhs))
9928     error (_("Left operand of assignment is not a modifiable lvalue."));
9929
9930   lhs_type = value_type (lhs);
9931   if (ada_is_direct_array_type (lhs_type))
9932     {
9933       lhs = ada_coerce_to_simple_array (lhs);
9934       lhs_type = value_type (lhs);
9935       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9936       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9937     }
9938   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9939     {
9940       low_index = 0;
9941       high_index = num_visible_fields (lhs_type) - 1;
9942     }
9943   else
9944     error (_("Left-hand side must be array or record."));
9945
9946   num_specs = num_component_specs (exp, *pos - 3);
9947   max_indices = 4 * num_specs + 4;
9948   indices = XALLOCAVEC (LONGEST, max_indices);
9949   indices[0] = indices[1] = low_index - 1;
9950   indices[2] = indices[3] = high_index + 1;
9951   num_indices = 4;
9952
9953   for (i = 0; i < n; i += 1)
9954     {
9955       switch (exp->elts[*pos].opcode)
9956         {
9957           case OP_CHOICES:
9958             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9959                                            &num_indices, max_indices,
9960                                            low_index, high_index);
9961             break;
9962           case OP_POSITIONAL:
9963             aggregate_assign_positional (container, lhs, exp, pos, indices,
9964                                          &num_indices, max_indices,
9965                                          low_index, high_index);
9966             break;
9967           case OP_OTHERS:
9968             if (i != n-1)
9969               error (_("Misplaced 'others' clause"));
9970             aggregate_assign_others (container, lhs, exp, pos, indices, 
9971                                      num_indices, low_index, high_index);
9972             break;
9973           default:
9974             error (_("Internal error: bad aggregate clause"));
9975         }
9976     }
9977
9978   return container;
9979 }
9980               
9981 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9982    construct at *POS, updating *POS past the construct, given that
9983    the positions are relative to lower bound LOW, where HIGH is the 
9984    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9985    updating *NUM_INDICES as needed.  CONTAINER is as for
9986    assign_aggregate.  */
9987 static void
9988 aggregate_assign_positional (struct value *container,
9989                              struct value *lhs, struct expression *exp,
9990                              int *pos, LONGEST *indices, int *num_indices,
9991                              int max_indices, LONGEST low, LONGEST high) 
9992 {
9993   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9994   
9995   if (ind - 1 == high)
9996     warning (_("Extra components in aggregate ignored."));
9997   if (ind <= high)
9998     {
9999       add_component_interval (ind, ind, indices, num_indices, max_indices);
10000       *pos += 3;
10001       assign_component (container, lhs, ind, exp, pos);
10002     }
10003   else
10004     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10005 }
10006
10007 /* Assign into the components of LHS indexed by the OP_CHOICES
10008    construct at *POS, updating *POS past the construct, given that
10009    the allowable indices are LOW..HIGH.  Record the indices assigned
10010    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
10011    needed.  CONTAINER is as for assign_aggregate.  */
10012 static void
10013 aggregate_assign_from_choices (struct value *container,
10014                                struct value *lhs, struct expression *exp,
10015                                int *pos, LONGEST *indices, int *num_indices,
10016                                int max_indices, LONGEST low, LONGEST high) 
10017 {
10018   int j;
10019   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
10020   int choice_pos, expr_pc;
10021   int is_array = ada_is_direct_array_type (value_type (lhs));
10022
10023   choice_pos = *pos += 3;
10024
10025   for (j = 0; j < n_choices; j += 1)
10026     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10027   expr_pc = *pos;
10028   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10029   
10030   for (j = 0; j < n_choices; j += 1)
10031     {
10032       LONGEST lower, upper;
10033       enum exp_opcode op = exp->elts[choice_pos].opcode;
10034
10035       if (op == OP_DISCRETE_RANGE)
10036         {
10037           choice_pos += 1;
10038           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
10039                                                       EVAL_NORMAL));
10040           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
10041                                                       EVAL_NORMAL));
10042         }
10043       else if (is_array)
10044         {
10045           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
10046                                                       EVAL_NORMAL));
10047           upper = lower;
10048         }
10049       else
10050         {
10051           int ind;
10052           const char *name;
10053
10054           switch (op)
10055             {
10056             case OP_NAME:
10057               name = &exp->elts[choice_pos + 2].string;
10058               break;
10059             case OP_VAR_VALUE:
10060               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
10061               break;
10062             default:
10063               error (_("Invalid record component association."));
10064             }
10065           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
10066           ind = 0;
10067           if (! find_struct_field (name, value_type (lhs), 0, 
10068                                    NULL, NULL, NULL, NULL, &ind))
10069             error (_("Unknown component name: %s."), name);
10070           lower = upper = ind;
10071         }
10072
10073       if (lower <= upper && (lower < low || upper > high))
10074         error (_("Index in component association out of bounds."));
10075
10076       add_component_interval (lower, upper, indices, num_indices,
10077                               max_indices);
10078       while (lower <= upper)
10079         {
10080           int pos1;
10081
10082           pos1 = expr_pc;
10083           assign_component (container, lhs, lower, exp, &pos1);
10084           lower += 1;
10085         }
10086     }
10087 }
10088
10089 /* Assign the value of the expression in the OP_OTHERS construct in
10090    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
10091    have not been previously assigned.  The index intervals already assigned
10092    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
10093    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
10094 static void
10095 aggregate_assign_others (struct value *container,
10096                          struct value *lhs, struct expression *exp,
10097                          int *pos, LONGEST *indices, int num_indices,
10098                          LONGEST low, LONGEST high) 
10099 {
10100   int i;
10101   int expr_pc = *pos + 1;
10102   
10103   for (i = 0; i < num_indices - 2; i += 2)
10104     {
10105       LONGEST ind;
10106
10107       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
10108         {
10109           int localpos;
10110
10111           localpos = expr_pc;
10112           assign_component (container, lhs, ind, exp, &localpos);
10113         }
10114     }
10115   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10116 }
10117
10118 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
10119    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
10120    modifying *SIZE as needed.  It is an error if *SIZE exceeds
10121    MAX_SIZE.  The resulting intervals do not overlap.  */
10122 static void
10123 add_component_interval (LONGEST low, LONGEST high, 
10124                         LONGEST* indices, int *size, int max_size)
10125 {
10126   int i, j;
10127
10128   for (i = 0; i < *size; i += 2) {
10129     if (high >= indices[i] && low <= indices[i + 1])
10130       {
10131         int kh;
10132
10133         for (kh = i + 2; kh < *size; kh += 2)
10134           if (high < indices[kh])
10135             break;
10136         if (low < indices[i])
10137           indices[i] = low;
10138         indices[i + 1] = indices[kh - 1];
10139         if (high > indices[i + 1])
10140           indices[i + 1] = high;
10141         memcpy (indices + i + 2, indices + kh, *size - kh);
10142         *size -= kh - i - 2;
10143         return;
10144       }
10145     else if (high < indices[i])
10146       break;
10147   }
10148         
10149   if (*size == max_size)
10150     error (_("Internal error: miscounted aggregate components."));
10151   *size += 2;
10152   for (j = *size-1; j >= i+2; j -= 1)
10153     indices[j] = indices[j - 2];
10154   indices[i] = low;
10155   indices[i + 1] = high;
10156 }
10157
10158 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
10159    is different.  */
10160
10161 static struct value *
10162 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
10163 {
10164   if (type == ada_check_typedef (value_type (arg2)))
10165     return arg2;
10166
10167   if (ada_is_fixed_point_type (type))
10168     return (cast_to_fixed (type, arg2));
10169
10170   if (ada_is_fixed_point_type (value_type (arg2)))
10171     return cast_from_fixed (type, arg2);
10172
10173   return value_cast (type, arg2);
10174 }
10175
10176 /*  Evaluating Ada expressions, and printing their result.
10177     ------------------------------------------------------
10178
10179     1. Introduction:
10180     ----------------
10181
10182     We usually evaluate an Ada expression in order to print its value.
10183     We also evaluate an expression in order to print its type, which
10184     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
10185     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
10186     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
10187     the evaluation compared to the EVAL_NORMAL, but is otherwise very
10188     similar.
10189
10190     Evaluating expressions is a little more complicated for Ada entities
10191     than it is for entities in languages such as C.  The main reason for
10192     this is that Ada provides types whose definition might be dynamic.
10193     One example of such types is variant records.  Or another example
10194     would be an array whose bounds can only be known at run time.
10195
10196     The following description is a general guide as to what should be
10197     done (and what should NOT be done) in order to evaluate an expression
10198     involving such types, and when.  This does not cover how the semantic
10199     information is encoded by GNAT as this is covered separatly.  For the
10200     document used as the reference for the GNAT encoding, see exp_dbug.ads
10201     in the GNAT sources.
10202
10203     Ideally, we should embed each part of this description next to its
10204     associated code.  Unfortunately, the amount of code is so vast right
10205     now that it's hard to see whether the code handling a particular
10206     situation might be duplicated or not.  One day, when the code is
10207     cleaned up, this guide might become redundant with the comments
10208     inserted in the code, and we might want to remove it.
10209
10210     2. ``Fixing'' an Entity, the Simple Case:
10211     -----------------------------------------
10212
10213     When evaluating Ada expressions, the tricky issue is that they may
10214     reference entities whose type contents and size are not statically
10215     known.  Consider for instance a variant record:
10216
10217        type Rec (Empty : Boolean := True) is record
10218           case Empty is
10219              when True => null;
10220              when False => Value : Integer;
10221           end case;
10222        end record;
10223        Yes : Rec := (Empty => False, Value => 1);
10224        No  : Rec := (empty => True);
10225
10226     The size and contents of that record depends on the value of the
10227     descriminant (Rec.Empty).  At this point, neither the debugging
10228     information nor the associated type structure in GDB are able to
10229     express such dynamic types.  So what the debugger does is to create
10230     "fixed" versions of the type that applies to the specific object.
10231     We also informally refer to this opperation as "fixing" an object,
10232     which means creating its associated fixed type.
10233
10234     Example: when printing the value of variable "Yes" above, its fixed
10235     type would look like this:
10236
10237        type Rec is record
10238           Empty : Boolean;
10239           Value : Integer;
10240        end record;
10241
10242     On the other hand, if we printed the value of "No", its fixed type
10243     would become:
10244
10245        type Rec is record
10246           Empty : Boolean;
10247        end record;
10248
10249     Things become a little more complicated when trying to fix an entity
10250     with a dynamic type that directly contains another dynamic type,
10251     such as an array of variant records, for instance.  There are
10252     two possible cases: Arrays, and records.
10253
10254     3. ``Fixing'' Arrays:
10255     ---------------------
10256
10257     The type structure in GDB describes an array in terms of its bounds,
10258     and the type of its elements.  By design, all elements in the array
10259     have the same type and we cannot represent an array of variant elements
10260     using the current type structure in GDB.  When fixing an array,
10261     we cannot fix the array element, as we would potentially need one
10262     fixed type per element of the array.  As a result, the best we can do
10263     when fixing an array is to produce an array whose bounds and size
10264     are correct (allowing us to read it from memory), but without having
10265     touched its element type.  Fixing each element will be done later,
10266     when (if) necessary.
10267
10268     Arrays are a little simpler to handle than records, because the same
10269     amount of memory is allocated for each element of the array, even if
10270     the amount of space actually used by each element differs from element
10271     to element.  Consider for instance the following array of type Rec:
10272
10273        type Rec_Array is array (1 .. 2) of Rec;
10274
10275     The actual amount of memory occupied by each element might be different
10276     from element to element, depending on the value of their discriminant.
10277     But the amount of space reserved for each element in the array remains
10278     fixed regardless.  So we simply need to compute that size using
10279     the debugging information available, from which we can then determine
10280     the array size (we multiply the number of elements of the array by
10281     the size of each element).
10282
10283     The simplest case is when we have an array of a constrained element
10284     type. For instance, consider the following type declarations:
10285
10286         type Bounded_String (Max_Size : Integer) is
10287            Length : Integer;
10288            Buffer : String (1 .. Max_Size);
10289         end record;
10290         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
10291
10292     In this case, the compiler describes the array as an array of
10293     variable-size elements (identified by its XVS suffix) for which
10294     the size can be read in the parallel XVZ variable.
10295
10296     In the case of an array of an unconstrained element type, the compiler
10297     wraps the array element inside a private PAD type.  This type should not
10298     be shown to the user, and must be "unwrap"'ed before printing.  Note
10299     that we also use the adjective "aligner" in our code to designate
10300     these wrapper types.
10301
10302     In some cases, the size allocated for each element is statically
10303     known.  In that case, the PAD type already has the correct size,
10304     and the array element should remain unfixed.
10305
10306     But there are cases when this size is not statically known.
10307     For instance, assuming that "Five" is an integer variable:
10308
10309         type Dynamic is array (1 .. Five) of Integer;
10310         type Wrapper (Has_Length : Boolean := False) is record
10311            Data : Dynamic;
10312            case Has_Length is
10313               when True => Length : Integer;
10314               when False => null;
10315            end case;
10316         end record;
10317         type Wrapper_Array is array (1 .. 2) of Wrapper;
10318
10319         Hello : Wrapper_Array := (others => (Has_Length => True,
10320                                              Data => (others => 17),
10321                                              Length => 1));
10322
10323
10324     The debugging info would describe variable Hello as being an
10325     array of a PAD type.  The size of that PAD type is not statically
10326     known, but can be determined using a parallel XVZ variable.
10327     In that case, a copy of the PAD type with the correct size should
10328     be used for the fixed array.
10329
10330     3. ``Fixing'' record type objects:
10331     ----------------------------------
10332
10333     Things are slightly different from arrays in the case of dynamic
10334     record types.  In this case, in order to compute the associated
10335     fixed type, we need to determine the size and offset of each of
10336     its components.  This, in turn, requires us to compute the fixed
10337     type of each of these components.
10338
10339     Consider for instance the example:
10340
10341         type Bounded_String (Max_Size : Natural) is record
10342            Str : String (1 .. Max_Size);
10343            Length : Natural;
10344         end record;
10345         My_String : Bounded_String (Max_Size => 10);
10346
10347     In that case, the position of field "Length" depends on the size
10348     of field Str, which itself depends on the value of the Max_Size
10349     discriminant.  In order to fix the type of variable My_String,
10350     we need to fix the type of field Str.  Therefore, fixing a variant
10351     record requires us to fix each of its components.
10352
10353     However, if a component does not have a dynamic size, the component
10354     should not be fixed.  In particular, fields that use a PAD type
10355     should not fixed.  Here is an example where this might happen
10356     (assuming type Rec above):
10357
10358        type Container (Big : Boolean) is record
10359           First : Rec;
10360           After : Integer;
10361           case Big is
10362              when True => Another : Integer;
10363              when False => null;
10364           end case;
10365        end record;
10366        My_Container : Container := (Big => False,
10367                                     First => (Empty => True),
10368                                     After => 42);
10369
10370     In that example, the compiler creates a PAD type for component First,
10371     whose size is constant, and then positions the component After just
10372     right after it.  The offset of component After is therefore constant
10373     in this case.
10374
10375     The debugger computes the position of each field based on an algorithm
10376     that uses, among other things, the actual position and size of the field
10377     preceding it.  Let's now imagine that the user is trying to print
10378     the value of My_Container.  If the type fixing was recursive, we would
10379     end up computing the offset of field After based on the size of the
10380     fixed version of field First.  And since in our example First has
10381     only one actual field, the size of the fixed type is actually smaller
10382     than the amount of space allocated to that field, and thus we would
10383     compute the wrong offset of field After.
10384
10385     To make things more complicated, we need to watch out for dynamic
10386     components of variant records (identified by the ___XVL suffix in
10387     the component name).  Even if the target type is a PAD type, the size
10388     of that type might not be statically known.  So the PAD type needs
10389     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
10390     we might end up with the wrong size for our component.  This can be
10391     observed with the following type declarations:
10392
10393         type Octal is new Integer range 0 .. 7;
10394         type Octal_Array is array (Positive range <>) of Octal;
10395         pragma Pack (Octal_Array);
10396
10397         type Octal_Buffer (Size : Positive) is record
10398            Buffer : Octal_Array (1 .. Size);
10399            Length : Integer;
10400         end record;
10401
10402     In that case, Buffer is a PAD type whose size is unset and needs
10403     to be computed by fixing the unwrapped type.
10404
10405     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10406     ----------------------------------------------------------
10407
10408     Lastly, when should the sub-elements of an entity that remained unfixed
10409     thus far, be actually fixed?
10410
10411     The answer is: Only when referencing that element.  For instance
10412     when selecting one component of a record, this specific component
10413     should be fixed at that point in time.  Or when printing the value
10414     of a record, each component should be fixed before its value gets
10415     printed.  Similarly for arrays, the element of the array should be
10416     fixed when printing each element of the array, or when extracting
10417     one element out of that array.  On the other hand, fixing should
10418     not be performed on the elements when taking a slice of an array!
10419
10420     Note that one of the side-effects of miscomputing the offset and
10421     size of each field is that we end up also miscomputing the size
10422     of the containing type.  This can have adverse results when computing
10423     the value of an entity.  GDB fetches the value of an entity based
10424     on the size of its type, and thus a wrong size causes GDB to fetch
10425     the wrong amount of memory.  In the case where the computed size is
10426     too small, GDB fetches too little data to print the value of our
10427     entiry.  Results in this case as unpredicatble, as we usually read
10428     past the buffer containing the data =:-o.  */
10429
10430 /* Implement the evaluate_exp routine in the exp_descriptor structure
10431    for the Ada language.  */
10432
10433 static struct value *
10434 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
10435                      int *pos, enum noside noside)
10436 {
10437   enum exp_opcode op;
10438   int tem;
10439   int pc;
10440   int preeval_pos;
10441   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10442   struct type *type;
10443   int nargs, oplen;
10444   struct value **argvec;
10445
10446   pc = *pos;
10447   *pos += 1;
10448   op = exp->elts[pc].opcode;
10449
10450   switch (op)
10451     {
10452     default:
10453       *pos -= 1;
10454       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10455
10456       if (noside == EVAL_NORMAL)
10457         arg1 = unwrap_value (arg1);
10458
10459       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10460          then we need to perform the conversion manually, because
10461          evaluate_subexp_standard doesn't do it.  This conversion is
10462          necessary in Ada because the different kinds of float/fixed
10463          types in Ada have different representations.
10464
10465          Similarly, we need to perform the conversion from OP_LONG
10466          ourselves.  */
10467       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10468         arg1 = ada_value_cast (expect_type, arg1, noside);
10469
10470       return arg1;
10471
10472     case OP_STRING:
10473       {
10474         struct value *result;
10475
10476         *pos -= 1;
10477         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10478         /* The result type will have code OP_STRING, bashed there from 
10479            OP_ARRAY.  Bash it back.  */
10480         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10481           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
10482         return result;
10483       }
10484
10485     case UNOP_CAST:
10486       (*pos) += 2;
10487       type = exp->elts[pc + 1].type;
10488       arg1 = evaluate_subexp (type, exp, pos, noside);
10489       if (noside == EVAL_SKIP)
10490         goto nosideret;
10491       arg1 = ada_value_cast (type, arg1, noside);
10492       return arg1;
10493
10494     case UNOP_QUAL:
10495       (*pos) += 2;
10496       type = exp->elts[pc + 1].type;
10497       return ada_evaluate_subexp (type, exp, pos, noside);
10498
10499     case BINOP_ASSIGN:
10500       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10501       if (exp->elts[*pos].opcode == OP_AGGREGATE)
10502         {
10503           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10504           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10505             return arg1;
10506           return ada_value_assign (arg1, arg1);
10507         }
10508       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10509          except if the lhs of our assignment is a convenience variable.
10510          In the case of assigning to a convenience variable, the lhs
10511          should be exactly the result of the evaluation of the rhs.  */
10512       type = value_type (arg1);
10513       if (VALUE_LVAL (arg1) == lval_internalvar)
10514          type = NULL;
10515       arg2 = evaluate_subexp (type, exp, pos, noside);
10516       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10517         return arg1;
10518       if (ada_is_fixed_point_type (value_type (arg1)))
10519         arg2 = cast_to_fixed (value_type (arg1), arg2);
10520       else if (ada_is_fixed_point_type (value_type (arg2)))
10521         error
10522           (_("Fixed-point values must be assigned to fixed-point variables"));
10523       else
10524         arg2 = coerce_for_assign (value_type (arg1), arg2);
10525       return ada_value_assign (arg1, arg2);
10526
10527     case BINOP_ADD:
10528       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10529       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10530       if (noside == EVAL_SKIP)
10531         goto nosideret;
10532       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10533         return (value_from_longest
10534                  (value_type (arg1),
10535                   value_as_long (arg1) + value_as_long (arg2)));
10536       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10537         return (value_from_longest
10538                  (value_type (arg2),
10539                   value_as_long (arg1) + value_as_long (arg2)));
10540       if ((ada_is_fixed_point_type (value_type (arg1))
10541            || ada_is_fixed_point_type (value_type (arg2)))
10542           && value_type (arg1) != value_type (arg2))
10543         error (_("Operands of fixed-point addition must have the same type"));
10544       /* Do the addition, and cast the result to the type of the first
10545          argument.  We cannot cast the result to a reference type, so if
10546          ARG1 is a reference type, find its underlying type.  */
10547       type = value_type (arg1);
10548       while (TYPE_CODE (type) == TYPE_CODE_REF)
10549         type = TYPE_TARGET_TYPE (type);
10550       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10551       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10552
10553     case BINOP_SUB:
10554       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10555       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10556       if (noside == EVAL_SKIP)
10557         goto nosideret;
10558       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10559         return (value_from_longest
10560                  (value_type (arg1),
10561                   value_as_long (arg1) - value_as_long (arg2)));
10562       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10563         return (value_from_longest
10564                  (value_type (arg2),
10565                   value_as_long (arg1) - value_as_long (arg2)));
10566       if ((ada_is_fixed_point_type (value_type (arg1))
10567            || ada_is_fixed_point_type (value_type (arg2)))
10568           && value_type (arg1) != value_type (arg2))
10569         error (_("Operands of fixed-point subtraction "
10570                  "must have the same type"));
10571       /* Do the substraction, and cast the result to the type of the first
10572          argument.  We cannot cast the result to a reference type, so if
10573          ARG1 is a reference type, find its underlying type.  */
10574       type = value_type (arg1);
10575       while (TYPE_CODE (type) == TYPE_CODE_REF)
10576         type = TYPE_TARGET_TYPE (type);
10577       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10578       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10579
10580     case BINOP_MUL:
10581     case BINOP_DIV:
10582     case BINOP_REM:
10583     case BINOP_MOD:
10584       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10585       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10586       if (noside == EVAL_SKIP)
10587         goto nosideret;
10588       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10589         {
10590           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10591           return value_zero (value_type (arg1), not_lval);
10592         }
10593       else
10594         {
10595           type = builtin_type (exp->gdbarch)->builtin_double;
10596           if (ada_is_fixed_point_type (value_type (arg1)))
10597             arg1 = cast_from_fixed (type, arg1);
10598           if (ada_is_fixed_point_type (value_type (arg2)))
10599             arg2 = cast_from_fixed (type, arg2);
10600           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10601           return ada_value_binop (arg1, arg2, op);
10602         }
10603
10604     case BINOP_EQUAL:
10605     case BINOP_NOTEQUAL:
10606       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10607       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10608       if (noside == EVAL_SKIP)
10609         goto nosideret;
10610       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10611         tem = 0;
10612       else
10613         {
10614           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10615           tem = ada_value_equal (arg1, arg2);
10616         }
10617       if (op == BINOP_NOTEQUAL)
10618         tem = !tem;
10619       type = language_bool_type (exp->language_defn, exp->gdbarch);
10620       return value_from_longest (type, (LONGEST) tem);
10621
10622     case UNOP_NEG:
10623       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10624       if (noside == EVAL_SKIP)
10625         goto nosideret;
10626       else if (ada_is_fixed_point_type (value_type (arg1)))
10627         return value_cast (value_type (arg1), value_neg (arg1));
10628       else
10629         {
10630           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10631           return value_neg (arg1);
10632         }
10633
10634     case BINOP_LOGICAL_AND:
10635     case BINOP_LOGICAL_OR:
10636     case UNOP_LOGICAL_NOT:
10637       {
10638         struct value *val;
10639
10640         *pos -= 1;
10641         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10642         type = language_bool_type (exp->language_defn, exp->gdbarch);
10643         return value_cast (type, val);
10644       }
10645
10646     case BINOP_BITWISE_AND:
10647     case BINOP_BITWISE_IOR:
10648     case BINOP_BITWISE_XOR:
10649       {
10650         struct value *val;
10651
10652         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10653         *pos = pc;
10654         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10655
10656         return value_cast (value_type (arg1), val);
10657       }
10658
10659     case OP_VAR_VALUE:
10660       *pos -= 1;
10661
10662       if (noside == EVAL_SKIP)
10663         {
10664           *pos += 4;
10665           goto nosideret;
10666         }
10667
10668       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10669         /* Only encountered when an unresolved symbol occurs in a
10670            context other than a function call, in which case, it is
10671            invalid.  */
10672         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10673                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10674
10675       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10676         {
10677           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10678           /* Check to see if this is a tagged type.  We also need to handle
10679              the case where the type is a reference to a tagged type, but
10680              we have to be careful to exclude pointers to tagged types.
10681              The latter should be shown as usual (as a pointer), whereas
10682              a reference should mostly be transparent to the user.  */
10683           if (ada_is_tagged_type (type, 0)
10684               || (TYPE_CODE (type) == TYPE_CODE_REF
10685                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10686             {
10687               /* Tagged types are a little special in the fact that the real
10688                  type is dynamic and can only be determined by inspecting the
10689                  object's tag.  This means that we need to get the object's
10690                  value first (EVAL_NORMAL) and then extract the actual object
10691                  type from its tag.
10692
10693                  Note that we cannot skip the final step where we extract
10694                  the object type from its tag, because the EVAL_NORMAL phase
10695                  results in dynamic components being resolved into fixed ones.
10696                  This can cause problems when trying to print the type
10697                  description of tagged types whose parent has a dynamic size:
10698                  We use the type name of the "_parent" component in order
10699                  to print the name of the ancestor type in the type description.
10700                  If that component had a dynamic size, the resolution into
10701                  a fixed type would result in the loss of that type name,
10702                  thus preventing us from printing the name of the ancestor
10703                  type in the type description.  */
10704               arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10705
10706               if (TYPE_CODE (type) != TYPE_CODE_REF)
10707                 {
10708                   struct type *actual_type;
10709
10710                   actual_type = type_from_tag (ada_value_tag (arg1));
10711                   if (actual_type == NULL)
10712                     /* If, for some reason, we were unable to determine
10713                        the actual type from the tag, then use the static
10714                        approximation that we just computed as a fallback.
10715                        This can happen if the debugging information is
10716                        incomplete, for instance.  */
10717                     actual_type = type;
10718                   return value_zero (actual_type, not_lval);
10719                 }
10720               else
10721                 {
10722                   /* In the case of a ref, ada_coerce_ref takes care
10723                      of determining the actual type.  But the evaluation
10724                      should return a ref as it should be valid to ask
10725                      for its address; so rebuild a ref after coerce.  */
10726                   arg1 = ada_coerce_ref (arg1);
10727                   return value_ref (arg1);
10728                 }
10729             }
10730
10731           /* Records and unions for which GNAT encodings have been
10732              generated need to be statically fixed as well.
10733              Otherwise, non-static fixing produces a type where
10734              all dynamic properties are removed, which prevents "ptype"
10735              from being able to completely describe the type.
10736              For instance, a case statement in a variant record would be
10737              replaced by the relevant components based on the actual
10738              value of the discriminants.  */
10739           if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10740                && dynamic_template_type (type) != NULL)
10741               || (TYPE_CODE (type) == TYPE_CODE_UNION
10742                   && ada_find_parallel_type (type, "___XVU") != NULL))
10743             {
10744               *pos += 4;
10745               return value_zero (to_static_fixed_type (type), not_lval);
10746             }
10747         }
10748
10749       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10750       return ada_to_fixed_value (arg1);
10751
10752     case OP_FUNCALL:
10753       (*pos) += 2;
10754
10755       /* Allocate arg vector, including space for the function to be
10756          called in argvec[0] and a terminating NULL.  */
10757       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10758       argvec = XALLOCAVEC (struct value *, nargs + 2);
10759
10760       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10761           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10762         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10763                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10764       else
10765         {
10766           for (tem = 0; tem <= nargs; tem += 1)
10767             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10768           argvec[tem] = 0;
10769
10770           if (noside == EVAL_SKIP)
10771             goto nosideret;
10772         }
10773
10774       if (ada_is_constrained_packed_array_type
10775           (desc_base_type (value_type (argvec[0]))))
10776         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10777       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10778                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10779         /* This is a packed array that has already been fixed, and
10780            therefore already coerced to a simple array.  Nothing further
10781            to do.  */
10782         ;
10783       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF)
10784         {
10785           /* Make sure we dereference references so that all the code below
10786              feels like it's really handling the referenced value.  Wrapping
10787              types (for alignment) may be there, so make sure we strip them as
10788              well.  */
10789           argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10790         }
10791       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10792                && VALUE_LVAL (argvec[0]) == lval_memory)
10793         argvec[0] = value_addr (argvec[0]);
10794
10795       type = ada_check_typedef (value_type (argvec[0]));
10796
10797       /* Ada allows us to implicitly dereference arrays when subscripting
10798          them.  So, if this is an array typedef (encoding use for array
10799          access types encoded as fat pointers), strip it now.  */
10800       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10801         type = ada_typedef_target_type (type);
10802
10803       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10804         {
10805           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10806             {
10807             case TYPE_CODE_FUNC:
10808               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10809               break;
10810             case TYPE_CODE_ARRAY:
10811               break;
10812             case TYPE_CODE_STRUCT:
10813               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10814                 argvec[0] = ada_value_ind (argvec[0]);
10815               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10816               break;
10817             default:
10818               error (_("cannot subscript or call something of type `%s'"),
10819                      ada_type_name (value_type (argvec[0])));
10820               break;
10821             }
10822         }
10823
10824       switch (TYPE_CODE (type))
10825         {
10826         case TYPE_CODE_FUNC:
10827           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10828             {
10829               struct type *rtype = TYPE_TARGET_TYPE (type);
10830
10831               if (TYPE_GNU_IFUNC (type))
10832                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10833               return allocate_value (rtype);
10834             }
10835           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10836         case TYPE_CODE_INTERNAL_FUNCTION:
10837           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10838             /* We don't know anything about what the internal
10839                function might return, but we have to return
10840                something.  */
10841             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10842                                not_lval);
10843           else
10844             return call_internal_function (exp->gdbarch, exp->language_defn,
10845                                            argvec[0], nargs, argvec + 1);
10846
10847         case TYPE_CODE_STRUCT:
10848           {
10849             int arity;
10850
10851             arity = ada_array_arity (type);
10852             type = ada_array_element_type (type, nargs);
10853             if (type == NULL)
10854               error (_("cannot subscript or call a record"));
10855             if (arity != nargs)
10856               error (_("wrong number of subscripts; expecting %d"), arity);
10857             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10858               return value_zero (ada_aligned_type (type), lval_memory);
10859             return
10860               unwrap_value (ada_value_subscript
10861                             (argvec[0], nargs, argvec + 1));
10862           }
10863         case TYPE_CODE_ARRAY:
10864           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10865             {
10866               type = ada_array_element_type (type, nargs);
10867               if (type == NULL)
10868                 error (_("element type of array unknown"));
10869               else
10870                 return value_zero (ada_aligned_type (type), lval_memory);
10871             }
10872           return
10873             unwrap_value (ada_value_subscript
10874                           (ada_coerce_to_simple_array (argvec[0]),
10875                            nargs, argvec + 1));
10876         case TYPE_CODE_PTR:     /* Pointer to array */
10877           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10878             {
10879               type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10880               type = ada_array_element_type (type, nargs);
10881               if (type == NULL)
10882                 error (_("element type of array unknown"));
10883               else
10884                 return value_zero (ada_aligned_type (type), lval_memory);
10885             }
10886           return
10887             unwrap_value (ada_value_ptr_subscript (argvec[0],
10888                                                    nargs, argvec + 1));
10889
10890         default:
10891           error (_("Attempt to index or call something other than an "
10892                    "array or function"));
10893         }
10894
10895     case TERNOP_SLICE:
10896       {
10897         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10898         struct value *low_bound_val =
10899           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10900         struct value *high_bound_val =
10901           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10902         LONGEST low_bound;
10903         LONGEST high_bound;
10904
10905         low_bound_val = coerce_ref (low_bound_val);
10906         high_bound_val = coerce_ref (high_bound_val);
10907         low_bound = value_as_long (low_bound_val);
10908         high_bound = value_as_long (high_bound_val);
10909
10910         if (noside == EVAL_SKIP)
10911           goto nosideret;
10912
10913         /* If this is a reference to an aligner type, then remove all
10914            the aligners.  */
10915         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10916             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10917           TYPE_TARGET_TYPE (value_type (array)) =
10918             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10919
10920         if (ada_is_constrained_packed_array_type (value_type (array)))
10921           error (_("cannot slice a packed array"));
10922
10923         /* If this is a reference to an array or an array lvalue,
10924            convert to a pointer.  */
10925         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10926             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10927                 && VALUE_LVAL (array) == lval_memory))
10928           array = value_addr (array);
10929
10930         if (noside == EVAL_AVOID_SIDE_EFFECTS
10931             && ada_is_array_descriptor_type (ada_check_typedef
10932                                              (value_type (array))))
10933           return empty_array (ada_type_of_array (array, 0), low_bound);
10934
10935         array = ada_coerce_to_simple_array_ptr (array);
10936
10937         /* If we have more than one level of pointer indirection,
10938            dereference the value until we get only one level.  */
10939         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10940                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10941                      == TYPE_CODE_PTR))
10942           array = value_ind (array);
10943
10944         /* Make sure we really do have an array type before going further,
10945            to avoid a SEGV when trying to get the index type or the target
10946            type later down the road if the debug info generated by
10947            the compiler is incorrect or incomplete.  */
10948         if (!ada_is_simple_array_type (value_type (array)))
10949           error (_("cannot take slice of non-array"));
10950
10951         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10952             == TYPE_CODE_PTR)
10953           {
10954             struct type *type0 = ada_check_typedef (value_type (array));
10955
10956             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10957               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10958             else
10959               {
10960                 struct type *arr_type0 =
10961                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10962
10963                 return ada_value_slice_from_ptr (array, arr_type0,
10964                                                  longest_to_int (low_bound),
10965                                                  longest_to_int (high_bound));
10966               }
10967           }
10968         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10969           return array;
10970         else if (high_bound < low_bound)
10971           return empty_array (value_type (array), low_bound);
10972         else
10973           return ada_value_slice (array, longest_to_int (low_bound),
10974                                   longest_to_int (high_bound));
10975       }
10976
10977     case UNOP_IN_RANGE:
10978       (*pos) += 2;
10979       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10980       type = check_typedef (exp->elts[pc + 1].type);
10981
10982       if (noside == EVAL_SKIP)
10983         goto nosideret;
10984
10985       switch (TYPE_CODE (type))
10986         {
10987         default:
10988           lim_warning (_("Membership test incompletely implemented; "
10989                          "always returns true"));
10990           type = language_bool_type (exp->language_defn, exp->gdbarch);
10991           return value_from_longest (type, (LONGEST) 1);
10992
10993         case TYPE_CODE_RANGE:
10994           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10995           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10996           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10997           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10998           type = language_bool_type (exp->language_defn, exp->gdbarch);
10999           return
11000             value_from_longest (type,
11001                                 (value_less (arg1, arg3)
11002                                  || value_equal (arg1, arg3))
11003                                 && (value_less (arg2, arg1)
11004                                     || value_equal (arg2, arg1)));
11005         }
11006
11007     case BINOP_IN_BOUNDS:
11008       (*pos) += 2;
11009       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11010       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11011
11012       if (noside == EVAL_SKIP)
11013         goto nosideret;
11014
11015       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11016         {
11017           type = language_bool_type (exp->language_defn, exp->gdbarch);
11018           return value_zero (type, not_lval);
11019         }
11020
11021       tem = longest_to_int (exp->elts[pc + 1].longconst);
11022
11023       type = ada_index_type (value_type (arg2), tem, "range");
11024       if (!type)
11025         type = value_type (arg1);
11026
11027       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
11028       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
11029
11030       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11031       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
11032       type = language_bool_type (exp->language_defn, exp->gdbarch);
11033       return
11034         value_from_longest (type,
11035                             (value_less (arg1, arg3)
11036                              || value_equal (arg1, arg3))
11037                             && (value_less (arg2, arg1)
11038                                 || value_equal (arg2, arg1)));
11039
11040     case TERNOP_IN_RANGE:
11041       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11042       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11043       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11044
11045       if (noside == EVAL_SKIP)
11046         goto nosideret;
11047
11048       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11049       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
11050       type = language_bool_type (exp->language_defn, exp->gdbarch);
11051       return
11052         value_from_longest (type,
11053                             (value_less (arg1, arg3)
11054                              || value_equal (arg1, arg3))
11055                             && (value_less (arg2, arg1)
11056                                 || value_equal (arg2, arg1)));
11057
11058     case OP_ATR_FIRST:
11059     case OP_ATR_LAST:
11060     case OP_ATR_LENGTH:
11061       {
11062         struct type *type_arg;
11063
11064         if (exp->elts[*pos].opcode == OP_TYPE)
11065           {
11066             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11067             arg1 = NULL;
11068             type_arg = check_typedef (exp->elts[pc + 2].type);
11069           }
11070         else
11071           {
11072             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11073             type_arg = NULL;
11074           }
11075
11076         if (exp->elts[*pos].opcode != OP_LONG)
11077           error (_("Invalid operand to '%s"), ada_attribute_name (op));
11078         tem = longest_to_int (exp->elts[*pos + 2].longconst);
11079         *pos += 4;
11080
11081         if (noside == EVAL_SKIP)
11082           goto nosideret;
11083
11084         if (type_arg == NULL)
11085           {
11086             arg1 = ada_coerce_ref (arg1);
11087
11088             if (ada_is_constrained_packed_array_type (value_type (arg1)))
11089               arg1 = ada_coerce_to_simple_array (arg1);
11090
11091             if (op == OP_ATR_LENGTH)
11092               type = builtin_type (exp->gdbarch)->builtin_int;
11093             else
11094               {
11095                 type = ada_index_type (value_type (arg1), tem,
11096                                        ada_attribute_name (op));
11097                 if (type == NULL)
11098                   type = builtin_type (exp->gdbarch)->builtin_int;
11099               }
11100
11101             if (noside == EVAL_AVOID_SIDE_EFFECTS)
11102               return allocate_value (type);
11103
11104             switch (op)
11105               {
11106               default:          /* Should never happen.  */
11107                 error (_("unexpected attribute encountered"));
11108               case OP_ATR_FIRST:
11109                 return value_from_longest
11110                         (type, ada_array_bound (arg1, tem, 0));
11111               case OP_ATR_LAST:
11112                 return value_from_longest
11113                         (type, ada_array_bound (arg1, tem, 1));
11114               case OP_ATR_LENGTH:
11115                 return value_from_longest
11116                         (type, ada_array_length (arg1, tem));
11117               }
11118           }
11119         else if (discrete_type_p (type_arg))
11120           {
11121             struct type *range_type;
11122             const char *name = ada_type_name (type_arg);
11123
11124             range_type = NULL;
11125             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
11126               range_type = to_fixed_range_type (type_arg, NULL);
11127             if (range_type == NULL)
11128               range_type = type_arg;
11129             switch (op)
11130               {
11131               default:
11132                 error (_("unexpected attribute encountered"));
11133               case OP_ATR_FIRST:
11134                 return value_from_longest 
11135                   (range_type, ada_discrete_type_low_bound (range_type));
11136               case OP_ATR_LAST:
11137                 return value_from_longest
11138                   (range_type, ada_discrete_type_high_bound (range_type));
11139               case OP_ATR_LENGTH:
11140                 error (_("the 'length attribute applies only to array types"));
11141               }
11142           }
11143         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
11144           error (_("unimplemented type attribute"));
11145         else
11146           {
11147             LONGEST low, high;
11148
11149             if (ada_is_constrained_packed_array_type (type_arg))
11150               type_arg = decode_constrained_packed_array_type (type_arg);
11151
11152             if (op == OP_ATR_LENGTH)
11153               type = builtin_type (exp->gdbarch)->builtin_int;
11154             else
11155               {
11156                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
11157                 if (type == NULL)
11158                   type = builtin_type (exp->gdbarch)->builtin_int;
11159               }
11160
11161             if (noside == EVAL_AVOID_SIDE_EFFECTS)
11162               return allocate_value (type);
11163
11164             switch (op)
11165               {
11166               default:
11167                 error (_("unexpected attribute encountered"));
11168               case OP_ATR_FIRST:
11169                 low = ada_array_bound_from_type (type_arg, tem, 0);
11170                 return value_from_longest (type, low);
11171               case OP_ATR_LAST:
11172                 high = ada_array_bound_from_type (type_arg, tem, 1);
11173                 return value_from_longest (type, high);
11174               case OP_ATR_LENGTH:
11175                 low = ada_array_bound_from_type (type_arg, tem, 0);
11176                 high = ada_array_bound_from_type (type_arg, tem, 1);
11177                 return value_from_longest (type, high - low + 1);
11178               }
11179           }
11180       }
11181
11182     case OP_ATR_TAG:
11183       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11184       if (noside == EVAL_SKIP)
11185         goto nosideret;
11186
11187       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11188         return value_zero (ada_tag_type (arg1), not_lval);
11189
11190       return ada_value_tag (arg1);
11191
11192     case OP_ATR_MIN:
11193     case OP_ATR_MAX:
11194       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11195       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11196       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11197       if (noside == EVAL_SKIP)
11198         goto nosideret;
11199       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11200         return value_zero (value_type (arg1), not_lval);
11201       else
11202         {
11203           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11204           return value_binop (arg1, arg2,
11205                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
11206         }
11207
11208     case OP_ATR_MODULUS:
11209       {
11210         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
11211
11212         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11213         if (noside == EVAL_SKIP)
11214           goto nosideret;
11215
11216         if (!ada_is_modular_type (type_arg))
11217           error (_("'modulus must be applied to modular type"));
11218
11219         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11220                                    ada_modulus (type_arg));
11221       }
11222
11223
11224     case OP_ATR_POS:
11225       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11226       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11227       if (noside == EVAL_SKIP)
11228         goto nosideret;
11229       type = builtin_type (exp->gdbarch)->builtin_int;
11230       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11231         return value_zero (type, not_lval);
11232       else
11233         return value_pos_atr (type, arg1);
11234
11235     case OP_ATR_SIZE:
11236       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11237       type = value_type (arg1);
11238
11239       /* If the argument is a reference, then dereference its type, since
11240          the user is really asking for the size of the actual object,
11241          not the size of the pointer.  */
11242       if (TYPE_CODE (type) == TYPE_CODE_REF)
11243         type = TYPE_TARGET_TYPE (type);
11244
11245       if (noside == EVAL_SKIP)
11246         goto nosideret;
11247       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11248         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
11249       else
11250         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
11251                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
11252
11253     case OP_ATR_VAL:
11254       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11255       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11256       type = exp->elts[pc + 2].type;
11257       if (noside == EVAL_SKIP)
11258         goto nosideret;
11259       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11260         return value_zero (type, not_lval);
11261       else
11262         return value_val_atr (type, arg1);
11263
11264     case BINOP_EXP:
11265       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11266       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11267       if (noside == EVAL_SKIP)
11268         goto nosideret;
11269       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11270         return value_zero (value_type (arg1), not_lval);
11271       else
11272         {
11273           /* For integer exponentiation operations,
11274              only promote the first argument.  */
11275           if (is_integral_type (value_type (arg2)))
11276             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11277           else
11278             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11279
11280           return value_binop (arg1, arg2, op);
11281         }
11282
11283     case UNOP_PLUS:
11284       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11285       if (noside == EVAL_SKIP)
11286         goto nosideret;
11287       else
11288         return arg1;
11289
11290     case UNOP_ABS:
11291       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11292       if (noside == EVAL_SKIP)
11293         goto nosideret;
11294       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11295       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
11296         return value_neg (arg1);
11297       else
11298         return arg1;
11299
11300     case UNOP_IND:
11301       preeval_pos = *pos;
11302       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11303       if (noside == EVAL_SKIP)
11304         goto nosideret;
11305       type = ada_check_typedef (value_type (arg1));
11306       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11307         {
11308           if (ada_is_array_descriptor_type (type))
11309             /* GDB allows dereferencing GNAT array descriptors.  */
11310             {
11311               struct type *arrType = ada_type_of_array (arg1, 0);
11312
11313               if (arrType == NULL)
11314                 error (_("Attempt to dereference null array pointer."));
11315               return value_at_lazy (arrType, 0);
11316             }
11317           else if (TYPE_CODE (type) == TYPE_CODE_PTR
11318                    || TYPE_CODE (type) == TYPE_CODE_REF
11319                    /* In C you can dereference an array to get the 1st elt.  */
11320                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
11321             {
11322             /* As mentioned in the OP_VAR_VALUE case, tagged types can
11323                only be determined by inspecting the object's tag.
11324                This means that we need to evaluate completely the
11325                expression in order to get its type.  */
11326
11327               if ((TYPE_CODE (type) == TYPE_CODE_REF
11328                    || TYPE_CODE (type) == TYPE_CODE_PTR)
11329                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11330                 {
11331                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11332                                           EVAL_NORMAL);
11333                   type = value_type (ada_value_ind (arg1));
11334                 }
11335               else
11336                 {
11337                   type = to_static_fixed_type
11338                     (ada_aligned_type
11339                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11340                 }
11341               ada_ensure_varsize_limit (type);
11342               return value_zero (type, lval_memory);
11343             }
11344           else if (TYPE_CODE (type) == TYPE_CODE_INT)
11345             {
11346               /* GDB allows dereferencing an int.  */
11347               if (expect_type == NULL)
11348                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11349                                    lval_memory);
11350               else
11351                 {
11352                   expect_type = 
11353                     to_static_fixed_type (ada_aligned_type (expect_type));
11354                   return value_zero (expect_type, lval_memory);
11355                 }
11356             }
11357           else
11358             error (_("Attempt to take contents of a non-pointer value."));
11359         }
11360       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
11361       type = ada_check_typedef (value_type (arg1));
11362
11363       if (TYPE_CODE (type) == TYPE_CODE_INT)
11364           /* GDB allows dereferencing an int.  If we were given
11365              the expect_type, then use that as the target type.
11366              Otherwise, assume that the target type is an int.  */
11367         {
11368           if (expect_type != NULL)
11369             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11370                                               arg1));
11371           else
11372             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11373                                   (CORE_ADDR) value_as_address (arg1));
11374         }
11375
11376       if (ada_is_array_descriptor_type (type))
11377         /* GDB allows dereferencing GNAT array descriptors.  */
11378         return ada_coerce_to_simple_array (arg1);
11379       else
11380         return ada_value_ind (arg1);
11381
11382     case STRUCTOP_STRUCT:
11383       tem = longest_to_int (exp->elts[pc + 1].longconst);
11384       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
11385       preeval_pos = *pos;
11386       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11387       if (noside == EVAL_SKIP)
11388         goto nosideret;
11389       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11390         {
11391           struct type *type1 = value_type (arg1);
11392
11393           if (ada_is_tagged_type (type1, 1))
11394             {
11395               type = ada_lookup_struct_elt_type (type1,
11396                                                  &exp->elts[pc + 2].string,
11397                                                  1, 1, NULL);
11398
11399               /* If the field is not found, check if it exists in the
11400                  extension of this object's type. This means that we
11401                  need to evaluate completely the expression.  */
11402
11403               if (type == NULL)
11404                 {
11405                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11406                                           EVAL_NORMAL);
11407                   arg1 = ada_value_struct_elt (arg1,
11408                                                &exp->elts[pc + 2].string,
11409                                                0);
11410                   arg1 = unwrap_value (arg1);
11411                   type = value_type (ada_to_fixed_value (arg1));
11412                 }
11413             }
11414           else
11415             type =
11416               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11417                                           0, NULL);
11418
11419           return value_zero (ada_aligned_type (type), lval_memory);
11420         }
11421       else
11422         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11423         arg1 = unwrap_value (arg1);
11424         return ada_to_fixed_value (arg1);
11425
11426     case OP_TYPE:
11427       /* The value is not supposed to be used.  This is here to make it
11428          easier to accommodate expressions that contain types.  */
11429       (*pos) += 2;
11430       if (noside == EVAL_SKIP)
11431         goto nosideret;
11432       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11433         return allocate_value (exp->elts[pc + 1].type);
11434       else
11435         error (_("Attempt to use a type name as an expression"));
11436
11437     case OP_AGGREGATE:
11438     case OP_CHOICES:
11439     case OP_OTHERS:
11440     case OP_DISCRETE_RANGE:
11441     case OP_POSITIONAL:
11442     case OP_NAME:
11443       if (noside == EVAL_NORMAL)
11444         switch (op) 
11445           {
11446           case OP_NAME:
11447             error (_("Undefined name, ambiguous name, or renaming used in "
11448                      "component association: %s."), &exp->elts[pc+2].string);
11449           case OP_AGGREGATE:
11450             error (_("Aggregates only allowed on the right of an assignment"));
11451           default:
11452             internal_error (__FILE__, __LINE__,
11453                             _("aggregate apparently mangled"));
11454           }
11455
11456       ada_forward_operator_length (exp, pc, &oplen, &nargs);
11457       *pos += oplen - 1;
11458       for (tem = 0; tem < nargs; tem += 1) 
11459         ada_evaluate_subexp (NULL, exp, pos, noside);
11460       goto nosideret;
11461     }
11462
11463 nosideret:
11464   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
11465 }
11466 \f
11467
11468                                 /* Fixed point */
11469
11470 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
11471    type name that encodes the 'small and 'delta information.
11472    Otherwise, return NULL.  */
11473
11474 static const char *
11475 fixed_type_info (struct type *type)
11476 {
11477   const char *name = ada_type_name (type);
11478   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11479
11480   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11481     {
11482       const char *tail = strstr (name, "___XF_");
11483
11484       if (tail == NULL)
11485         return NULL;
11486       else
11487         return tail + 5;
11488     }
11489   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11490     return fixed_type_info (TYPE_TARGET_TYPE (type));
11491   else
11492     return NULL;
11493 }
11494
11495 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
11496
11497 int
11498 ada_is_fixed_point_type (struct type *type)
11499 {
11500   return fixed_type_info (type) != NULL;
11501 }
11502
11503 /* Return non-zero iff TYPE represents a System.Address type.  */
11504
11505 int
11506 ada_is_system_address_type (struct type *type)
11507 {
11508   return (TYPE_NAME (type)
11509           && strcmp (TYPE_NAME (type), "system__address") == 0);
11510 }
11511
11512 /* Assuming that TYPE is the representation of an Ada fixed-point
11513    type, return its delta, or -1 if the type is malformed and the
11514    delta cannot be determined.  */
11515
11516 DOUBLEST
11517 ada_delta (struct type *type)
11518 {
11519   const char *encoding = fixed_type_info (type);
11520   DOUBLEST num, den;
11521
11522   /* Strictly speaking, num and den are encoded as integer.  However,
11523      they may not fit into a long, and they will have to be converted
11524      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11525   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11526               &num, &den) < 2)
11527     return -1.0;
11528   else
11529     return num / den;
11530 }
11531
11532 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
11533    factor ('SMALL value) associated with the type.  */
11534
11535 static DOUBLEST
11536 scaling_factor (struct type *type)
11537 {
11538   const char *encoding = fixed_type_info (type);
11539   DOUBLEST num0, den0, num1, den1;
11540   int n;
11541
11542   /* Strictly speaking, num's and den's are encoded as integer.  However,
11543      they may not fit into a long, and they will have to be converted
11544      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11545   n = sscanf (encoding,
11546               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11547               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11548               &num0, &den0, &num1, &den1);
11549
11550   if (n < 2)
11551     return 1.0;
11552   else if (n == 4)
11553     return num1 / den1;
11554   else
11555     return num0 / den0;
11556 }
11557
11558
11559 /* Assuming that X is the representation of a value of fixed-point
11560    type TYPE, return its floating-point equivalent.  */
11561
11562 DOUBLEST
11563 ada_fixed_to_float (struct type *type, LONGEST x)
11564 {
11565   return (DOUBLEST) x *scaling_factor (type);
11566 }
11567
11568 /* The representation of a fixed-point value of type TYPE
11569    corresponding to the value X.  */
11570
11571 LONGEST
11572 ada_float_to_fixed (struct type *type, DOUBLEST x)
11573 {
11574   return (LONGEST) (x / scaling_factor (type) + 0.5);
11575 }
11576
11577 \f
11578
11579                                 /* Range types */
11580
11581 /* Scan STR beginning at position K for a discriminant name, and
11582    return the value of that discriminant field of DVAL in *PX.  If
11583    PNEW_K is not null, put the position of the character beyond the
11584    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11585    not alter *PX and *PNEW_K if unsuccessful.  */
11586
11587 static int
11588 scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
11589                     int *pnew_k)
11590 {
11591   static char *bound_buffer = NULL;
11592   static size_t bound_buffer_len = 0;
11593   const char *pstart, *pend, *bound;
11594   struct value *bound_val;
11595
11596   if (dval == NULL || str == NULL || str[k] == '\0')
11597     return 0;
11598
11599   pstart = str + k;
11600   pend = strstr (pstart, "__");
11601   if (pend == NULL)
11602     {
11603       bound = pstart;
11604       k += strlen (bound);
11605     }
11606   else
11607     {
11608       int len = pend - pstart;
11609
11610       /* Strip __ and beyond.  */
11611       GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
11612       strncpy (bound_buffer, pstart, len);
11613       bound_buffer[len] = '\0';
11614
11615       bound = bound_buffer;
11616       k = pend - str;
11617     }
11618
11619   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11620   if (bound_val == NULL)
11621     return 0;
11622
11623   *px = value_as_long (bound_val);
11624   if (pnew_k != NULL)
11625     *pnew_k = k;
11626   return 1;
11627 }
11628
11629 /* Value of variable named NAME in the current environment.  If
11630    no such variable found, then if ERR_MSG is null, returns 0, and
11631    otherwise causes an error with message ERR_MSG.  */
11632
11633 static struct value *
11634 get_var_value (char *name, char *err_msg)
11635 {
11636   struct block_symbol *syms;
11637   int nsyms;
11638
11639   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11640                                   &syms);
11641
11642   if (nsyms != 1)
11643     {
11644       if (err_msg == NULL)
11645         return 0;
11646       else
11647         error (("%s"), err_msg);
11648     }
11649
11650   return value_of_variable (syms[0].symbol, syms[0].block);
11651 }
11652
11653 /* Value of integer variable named NAME in the current environment.  If
11654    no such variable found, returns 0, and sets *FLAG to 0.  If
11655    successful, sets *FLAG to 1.  */
11656
11657 LONGEST
11658 get_int_var_value (char *name, int *flag)
11659 {
11660   struct value *var_val = get_var_value (name, 0);
11661
11662   if (var_val == 0)
11663     {
11664       if (flag != NULL)
11665         *flag = 0;
11666       return 0;
11667     }
11668   else
11669     {
11670       if (flag != NULL)
11671         *flag = 1;
11672       return value_as_long (var_val);
11673     }
11674 }
11675
11676
11677 /* Return a range type whose base type is that of the range type named
11678    NAME in the current environment, and whose bounds are calculated
11679    from NAME according to the GNAT range encoding conventions.
11680    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11681    corresponding range type from debug information; fall back to using it
11682    if symbol lookup fails.  If a new type must be created, allocate it
11683    like ORIG_TYPE was.  The bounds information, in general, is encoded
11684    in NAME, the base type given in the named range type.  */
11685
11686 static struct type *
11687 to_fixed_range_type (struct type *raw_type, struct value *dval)
11688 {
11689   const char *name;
11690   struct type *base_type;
11691   const char *subtype_info;
11692
11693   gdb_assert (raw_type != NULL);
11694   gdb_assert (TYPE_NAME (raw_type) != NULL);
11695
11696   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11697     base_type = TYPE_TARGET_TYPE (raw_type);
11698   else
11699     base_type = raw_type;
11700
11701   name = TYPE_NAME (raw_type);
11702   subtype_info = strstr (name, "___XD");
11703   if (subtype_info == NULL)
11704     {
11705       LONGEST L = ada_discrete_type_low_bound (raw_type);
11706       LONGEST U = ada_discrete_type_high_bound (raw_type);
11707
11708       if (L < INT_MIN || U > INT_MAX)
11709         return raw_type;
11710       else
11711         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11712                                          L, U);
11713     }
11714   else
11715     {
11716       static char *name_buf = NULL;
11717       static size_t name_len = 0;
11718       int prefix_len = subtype_info - name;
11719       LONGEST L, U;
11720       struct type *type;
11721       const char *bounds_str;
11722       int n;
11723
11724       GROW_VECT (name_buf, name_len, prefix_len + 5);
11725       strncpy (name_buf, name, prefix_len);
11726       name_buf[prefix_len] = '\0';
11727
11728       subtype_info += 5;
11729       bounds_str = strchr (subtype_info, '_');
11730       n = 1;
11731
11732       if (*subtype_info == 'L')
11733         {
11734           if (!ada_scan_number (bounds_str, n, &L, &n)
11735               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11736             return raw_type;
11737           if (bounds_str[n] == '_')
11738             n += 2;
11739           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11740             n += 1;
11741           subtype_info += 1;
11742         }
11743       else
11744         {
11745           int ok;
11746
11747           strcpy (name_buf + prefix_len, "___L");
11748           L = get_int_var_value (name_buf, &ok);
11749           if (!ok)
11750             {
11751               lim_warning (_("Unknown lower bound, using 1."));
11752               L = 1;
11753             }
11754         }
11755
11756       if (*subtype_info == 'U')
11757         {
11758           if (!ada_scan_number (bounds_str, n, &U, &n)
11759               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11760             return raw_type;
11761         }
11762       else
11763         {
11764           int ok;
11765
11766           strcpy (name_buf + prefix_len, "___U");
11767           U = get_int_var_value (name_buf, &ok);
11768           if (!ok)
11769             {
11770               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11771               U = L;
11772             }
11773         }
11774
11775       type = create_static_range_type (alloc_type_copy (raw_type),
11776                                        base_type, L, U);
11777       TYPE_NAME (type) = name;
11778       return type;
11779     }
11780 }
11781
11782 /* True iff NAME is the name of a range type.  */
11783
11784 int
11785 ada_is_range_type_name (const char *name)
11786 {
11787   return (name != NULL && strstr (name, "___XD"));
11788 }
11789 \f
11790
11791                                 /* Modular types */
11792
11793 /* True iff TYPE is an Ada modular type.  */
11794
11795 int
11796 ada_is_modular_type (struct type *type)
11797 {
11798   struct type *subranged_type = get_base_type (type);
11799
11800   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11801           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11802           && TYPE_UNSIGNED (subranged_type));
11803 }
11804
11805 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11806
11807 ULONGEST
11808 ada_modulus (struct type *type)
11809 {
11810   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11811 }
11812 \f
11813
11814 /* Ada exception catchpoint support:
11815    ---------------------------------
11816
11817    We support 3 kinds of exception catchpoints:
11818      . catchpoints on Ada exceptions
11819      . catchpoints on unhandled Ada exceptions
11820      . catchpoints on failed assertions
11821
11822    Exceptions raised during failed assertions, or unhandled exceptions
11823    could perfectly be caught with the general catchpoint on Ada exceptions.
11824    However, we can easily differentiate these two special cases, and having
11825    the option to distinguish these two cases from the rest can be useful
11826    to zero-in on certain situations.
11827
11828    Exception catchpoints are a specialized form of breakpoint,
11829    since they rely on inserting breakpoints inside known routines
11830    of the GNAT runtime.  The implementation therefore uses a standard
11831    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11832    of breakpoint_ops.
11833
11834    Support in the runtime for exception catchpoints have been changed
11835    a few times already, and these changes affect the implementation
11836    of these catchpoints.  In order to be able to support several
11837    variants of the runtime, we use a sniffer that will determine
11838    the runtime variant used by the program being debugged.  */
11839
11840 /* Ada's standard exceptions.
11841
11842    The Ada 83 standard also defined Numeric_Error.  But there so many
11843    situations where it was unclear from the Ada 83 Reference Manual
11844    (RM) whether Constraint_Error or Numeric_Error should be raised,
11845    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11846    Interpretation saying that anytime the RM says that Numeric_Error
11847    should be raised, the implementation may raise Constraint_Error.
11848    Ada 95 went one step further and pretty much removed Numeric_Error
11849    from the list of standard exceptions (it made it a renaming of
11850    Constraint_Error, to help preserve compatibility when compiling
11851    an Ada83 compiler). As such, we do not include Numeric_Error from
11852    this list of standard exceptions.  */
11853
11854 static char *standard_exc[] = {
11855   "constraint_error",
11856   "program_error",
11857   "storage_error",
11858   "tasking_error"
11859 };
11860
11861 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11862
11863 /* A structure that describes how to support exception catchpoints
11864    for a given executable.  */
11865
11866 struct exception_support_info
11867 {
11868    /* The name of the symbol to break on in order to insert
11869       a catchpoint on exceptions.  */
11870    const char *catch_exception_sym;
11871
11872    /* The name of the symbol to break on in order to insert
11873       a catchpoint on unhandled exceptions.  */
11874    const char *catch_exception_unhandled_sym;
11875
11876    /* The name of the symbol to break on in order to insert
11877       a catchpoint on failed assertions.  */
11878    const char *catch_assert_sym;
11879
11880    /* Assuming that the inferior just triggered an unhandled exception
11881       catchpoint, this function is responsible for returning the address
11882       in inferior memory where the name of that exception is stored.
11883       Return zero if the address could not be computed.  */
11884    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11885 };
11886
11887 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11888 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11889
11890 /* The following exception support info structure describes how to
11891    implement exception catchpoints with the latest version of the
11892    Ada runtime (as of 2007-03-06).  */
11893
11894 static const struct exception_support_info default_exception_support_info =
11895 {
11896   "__gnat_debug_raise_exception", /* catch_exception_sym */
11897   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11898   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11899   ada_unhandled_exception_name_addr
11900 };
11901
11902 /* The following exception support info structure describes how to
11903    implement exception catchpoints with a slightly older version
11904    of the Ada runtime.  */
11905
11906 static const struct exception_support_info exception_support_info_fallback =
11907 {
11908   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11909   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11910   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11911   ada_unhandled_exception_name_addr_from_raise
11912 };
11913
11914 /* Return nonzero if we can detect the exception support routines
11915    described in EINFO.
11916
11917    This function errors out if an abnormal situation is detected
11918    (for instance, if we find the exception support routines, but
11919    that support is found to be incomplete).  */
11920
11921 static int
11922 ada_has_this_exception_support (const struct exception_support_info *einfo)
11923 {
11924   struct symbol *sym;
11925
11926   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11927      that should be compiled with debugging information.  As a result, we
11928      expect to find that symbol in the symtabs.  */
11929
11930   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11931   if (sym == NULL)
11932     {
11933       /* Perhaps we did not find our symbol because the Ada runtime was
11934          compiled without debugging info, or simply stripped of it.
11935          It happens on some GNU/Linux distributions for instance, where
11936          users have to install a separate debug package in order to get
11937          the runtime's debugging info.  In that situation, let the user
11938          know why we cannot insert an Ada exception catchpoint.
11939
11940          Note: Just for the purpose of inserting our Ada exception
11941          catchpoint, we could rely purely on the associated minimal symbol.
11942          But we would be operating in degraded mode anyway, since we are
11943          still lacking the debugging info needed later on to extract
11944          the name of the exception being raised (this name is printed in
11945          the catchpoint message, and is also used when trying to catch
11946          a specific exception).  We do not handle this case for now.  */
11947       struct bound_minimal_symbol msym
11948         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11949
11950       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11951         error (_("Your Ada runtime appears to be missing some debugging "
11952                  "information.\nCannot insert Ada exception catchpoint "
11953                  "in this configuration."));
11954
11955       return 0;
11956     }
11957
11958   /* Make sure that the symbol we found corresponds to a function.  */
11959
11960   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11961     error (_("Symbol \"%s\" is not a function (class = %d)"),
11962            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11963
11964   return 1;
11965 }
11966
11967 /* Inspect the Ada runtime and determine which exception info structure
11968    should be used to provide support for exception catchpoints.
11969
11970    This function will always set the per-inferior exception_info,
11971    or raise an error.  */
11972
11973 static void
11974 ada_exception_support_info_sniffer (void)
11975 {
11976   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11977
11978   /* If the exception info is already known, then no need to recompute it.  */
11979   if (data->exception_info != NULL)
11980     return;
11981
11982   /* Check the latest (default) exception support info.  */
11983   if (ada_has_this_exception_support (&default_exception_support_info))
11984     {
11985       data->exception_info = &default_exception_support_info;
11986       return;
11987     }
11988
11989   /* Try our fallback exception suport info.  */
11990   if (ada_has_this_exception_support (&exception_support_info_fallback))
11991     {
11992       data->exception_info = &exception_support_info_fallback;
11993       return;
11994     }
11995
11996   /* Sometimes, it is normal for us to not be able to find the routine
11997      we are looking for.  This happens when the program is linked with
11998      the shared version of the GNAT runtime, and the program has not been
11999      started yet.  Inform the user of these two possible causes if
12000      applicable.  */
12001
12002   if (ada_update_initial_language (language_unknown) != language_ada)
12003     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
12004
12005   /* If the symbol does not exist, then check that the program is
12006      already started, to make sure that shared libraries have been
12007      loaded.  If it is not started, this may mean that the symbol is
12008      in a shared library.  */
12009
12010   if (ptid_get_pid (inferior_ptid) == 0)
12011     error (_("Unable to insert catchpoint. Try to start the program first."));
12012
12013   /* At this point, we know that we are debugging an Ada program and
12014      that the inferior has been started, but we still are not able to
12015      find the run-time symbols.  That can mean that we are in
12016      configurable run time mode, or that a-except as been optimized
12017      out by the linker...  In any case, at this point it is not worth
12018      supporting this feature.  */
12019
12020   error (_("Cannot insert Ada exception catchpoints in this configuration."));
12021 }
12022
12023 /* True iff FRAME is very likely to be that of a function that is
12024    part of the runtime system.  This is all very heuristic, but is
12025    intended to be used as advice as to what frames are uninteresting
12026    to most users.  */
12027
12028 static int
12029 is_known_support_routine (struct frame_info *frame)
12030 {
12031   struct symtab_and_line sal;
12032   char *func_name;
12033   enum language func_lang;
12034   int i;
12035   const char *fullname;
12036
12037   /* If this code does not have any debugging information (no symtab),
12038      This cannot be any user code.  */
12039
12040   find_frame_sal (frame, &sal);
12041   if (sal.symtab == NULL)
12042     return 1;
12043
12044   /* If there is a symtab, but the associated source file cannot be
12045      located, then assume this is not user code:  Selecting a frame
12046      for which we cannot display the code would not be very helpful
12047      for the user.  This should also take care of case such as VxWorks
12048      where the kernel has some debugging info provided for a few units.  */
12049
12050   fullname = symtab_to_fullname (sal.symtab);
12051   if (access (fullname, R_OK) != 0)
12052     return 1;
12053
12054   /* Check the unit filename againt the Ada runtime file naming.
12055      We also check the name of the objfile against the name of some
12056      known system libraries that sometimes come with debugging info
12057      too.  */
12058
12059   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
12060     {
12061       re_comp (known_runtime_file_name_patterns[i]);
12062       if (re_exec (lbasename (sal.symtab->filename)))
12063         return 1;
12064       if (SYMTAB_OBJFILE (sal.symtab) != NULL
12065           && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
12066         return 1;
12067     }
12068
12069   /* Check whether the function is a GNAT-generated entity.  */
12070
12071   find_frame_funname (frame, &func_name, &func_lang, NULL);
12072   if (func_name == NULL)
12073     return 1;
12074
12075   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
12076     {
12077       re_comp (known_auxiliary_function_name_patterns[i]);
12078       if (re_exec (func_name))
12079         {
12080           xfree (func_name);
12081           return 1;
12082         }
12083     }
12084
12085   xfree (func_name);
12086   return 0;
12087 }
12088
12089 /* Find the first frame that contains debugging information and that is not
12090    part of the Ada run-time, starting from FI and moving upward.  */
12091
12092 void
12093 ada_find_printable_frame (struct frame_info *fi)
12094 {
12095   for (; fi != NULL; fi = get_prev_frame (fi))
12096     {
12097       if (!is_known_support_routine (fi))
12098         {
12099           select_frame (fi);
12100           break;
12101         }
12102     }
12103
12104 }
12105
12106 /* Assuming that the inferior just triggered an unhandled exception
12107    catchpoint, return the address in inferior memory where the name
12108    of the exception is stored.
12109    
12110    Return zero if the address could not be computed.  */
12111
12112 static CORE_ADDR
12113 ada_unhandled_exception_name_addr (void)
12114 {
12115   return parse_and_eval_address ("e.full_name");
12116 }
12117
12118 /* Same as ada_unhandled_exception_name_addr, except that this function
12119    should be used when the inferior uses an older version of the runtime,
12120    where the exception name needs to be extracted from a specific frame
12121    several frames up in the callstack.  */
12122
12123 static CORE_ADDR
12124 ada_unhandled_exception_name_addr_from_raise (void)
12125 {
12126   int frame_level;
12127   struct frame_info *fi;
12128   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12129   struct cleanup *old_chain;
12130
12131   /* To determine the name of this exception, we need to select
12132      the frame corresponding to RAISE_SYM_NAME.  This frame is
12133      at least 3 levels up, so we simply skip the first 3 frames
12134      without checking the name of their associated function.  */
12135   fi = get_current_frame ();
12136   for (frame_level = 0; frame_level < 3; frame_level += 1)
12137     if (fi != NULL)
12138       fi = get_prev_frame (fi); 
12139
12140   old_chain = make_cleanup (null_cleanup, NULL);
12141   while (fi != NULL)
12142     {
12143       char *func_name;
12144       enum language func_lang;
12145
12146       find_frame_funname (fi, &func_name, &func_lang, NULL);
12147       if (func_name != NULL)
12148         {
12149           make_cleanup (xfree, func_name);
12150
12151           if (strcmp (func_name,
12152                       data->exception_info->catch_exception_sym) == 0)
12153             break; /* We found the frame we were looking for...  */
12154           fi = get_prev_frame (fi);
12155         }
12156     }
12157   do_cleanups (old_chain);
12158
12159   if (fi == NULL)
12160     return 0;
12161
12162   select_frame (fi);
12163   return parse_and_eval_address ("id.full_name");
12164 }
12165
12166 /* Assuming the inferior just triggered an Ada exception catchpoint
12167    (of any type), return the address in inferior memory where the name
12168    of the exception is stored, if applicable.
12169
12170    Return zero if the address could not be computed, or if not relevant.  */
12171
12172 static CORE_ADDR
12173 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
12174                            struct breakpoint *b)
12175 {
12176   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12177
12178   switch (ex)
12179     {
12180       case ada_catch_exception:
12181         return (parse_and_eval_address ("e.full_name"));
12182         break;
12183
12184       case ada_catch_exception_unhandled:
12185         return data->exception_info->unhandled_exception_name_addr ();
12186         break;
12187       
12188       case ada_catch_assert:
12189         return 0;  /* Exception name is not relevant in this case.  */
12190         break;
12191
12192       default:
12193         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12194         break;
12195     }
12196
12197   return 0; /* Should never be reached.  */
12198 }
12199
12200 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
12201    any error that ada_exception_name_addr_1 might cause to be thrown.
12202    When an error is intercepted, a warning with the error message is printed,
12203    and zero is returned.  */
12204
12205 static CORE_ADDR
12206 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
12207                          struct breakpoint *b)
12208 {
12209   CORE_ADDR result = 0;
12210
12211   TRY
12212     {
12213       result = ada_exception_name_addr_1 (ex, b);
12214     }
12215
12216   CATCH (e, RETURN_MASK_ERROR)
12217     {
12218       warning (_("failed to get exception name: %s"), e.message);
12219       return 0;
12220     }
12221   END_CATCH
12222
12223   return result;
12224 }
12225
12226 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
12227
12228 /* Ada catchpoints.
12229
12230    In the case of catchpoints on Ada exceptions, the catchpoint will
12231    stop the target on every exception the program throws.  When a user
12232    specifies the name of a specific exception, we translate this
12233    request into a condition expression (in text form), and then parse
12234    it into an expression stored in each of the catchpoint's locations.
12235    We then use this condition to check whether the exception that was
12236    raised is the one the user is interested in.  If not, then the
12237    target is resumed again.  We store the name of the requested
12238    exception, in order to be able to re-set the condition expression
12239    when symbols change.  */
12240
12241 /* An instance of this type is used to represent an Ada catchpoint
12242    breakpoint location.  It includes a "struct bp_location" as a kind
12243    of base class; users downcast to "struct bp_location *" when
12244    needed.  */
12245
12246 struct ada_catchpoint_location
12247 {
12248   /* The base class.  */
12249   struct bp_location base;
12250
12251   /* The condition that checks whether the exception that was raised
12252      is the specific exception the user specified on catchpoint
12253      creation.  */
12254   struct expression *excep_cond_expr;
12255 };
12256
12257 /* Implement the DTOR method in the bp_location_ops structure for all
12258    Ada exception catchpoint kinds.  */
12259
12260 static void
12261 ada_catchpoint_location_dtor (struct bp_location *bl)
12262 {
12263   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
12264
12265   xfree (al->excep_cond_expr);
12266 }
12267
12268 /* The vtable to be used in Ada catchpoint locations.  */
12269
12270 static const struct bp_location_ops ada_catchpoint_location_ops =
12271 {
12272   ada_catchpoint_location_dtor
12273 };
12274
12275 /* An instance of this type is used to represent an Ada catchpoint.
12276    It includes a "struct breakpoint" as a kind of base class; users
12277    downcast to "struct breakpoint *" when needed.  */
12278
12279 struct ada_catchpoint
12280 {
12281   /* The base class.  */
12282   struct breakpoint base;
12283
12284   /* The name of the specific exception the user specified.  */
12285   char *excep_string;
12286 };
12287
12288 /* Parse the exception condition string in the context of each of the
12289    catchpoint's locations, and store them for later evaluation.  */
12290
12291 static void
12292 create_excep_cond_exprs (struct ada_catchpoint *c)
12293 {
12294   struct cleanup *old_chain;
12295   struct bp_location *bl;
12296   char *cond_string;
12297
12298   /* Nothing to do if there's no specific exception to catch.  */
12299   if (c->excep_string == NULL)
12300     return;
12301
12302   /* Same if there are no locations... */
12303   if (c->base.loc == NULL)
12304     return;
12305
12306   /* Compute the condition expression in text form, from the specific
12307      expection we want to catch.  */
12308   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
12309   old_chain = make_cleanup (xfree, cond_string);
12310
12311   /* Iterate over all the catchpoint's locations, and parse an
12312      expression for each.  */
12313   for (bl = c->base.loc; bl != NULL; bl = bl->next)
12314     {
12315       struct ada_catchpoint_location *ada_loc
12316         = (struct ada_catchpoint_location *) bl;
12317       struct expression *exp = NULL;
12318
12319       if (!bl->shlib_disabled)
12320         {
12321           const char *s;
12322
12323           s = cond_string;
12324           TRY
12325             {
12326               exp = parse_exp_1 (&s, bl->address,
12327                                  block_for_pc (bl->address), 0);
12328             }
12329           CATCH (e, RETURN_MASK_ERROR)
12330             {
12331               warning (_("failed to reevaluate internal exception condition "
12332                          "for catchpoint %d: %s"),
12333                        c->base.number, e.message);
12334               /* There is a bug in GCC on sparc-solaris when building with
12335                  optimization which causes EXP to change unexpectedly
12336                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
12337                  The problem should be fixed starting with GCC 4.9.
12338                  In the meantime, work around it by forcing EXP back
12339                  to NULL.  */
12340               exp = NULL;
12341             }
12342           END_CATCH
12343         }
12344
12345       ada_loc->excep_cond_expr = exp;
12346     }
12347
12348   do_cleanups (old_chain);
12349 }
12350
12351 /* Implement the DTOR method in the breakpoint_ops structure for all
12352    exception catchpoint kinds.  */
12353
12354 static void
12355 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
12356 {
12357   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12358
12359   xfree (c->excep_string);
12360
12361   bkpt_breakpoint_ops.dtor (b);
12362 }
12363
12364 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12365    structure for all exception catchpoint kinds.  */
12366
12367 static struct bp_location *
12368 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
12369                              struct breakpoint *self)
12370 {
12371   struct ada_catchpoint_location *loc;
12372
12373   loc = XNEW (struct ada_catchpoint_location);
12374   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
12375   loc->excep_cond_expr = NULL;
12376   return &loc->base;
12377 }
12378
12379 /* Implement the RE_SET method in the breakpoint_ops structure for all
12380    exception catchpoint kinds.  */
12381
12382 static void
12383 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
12384 {
12385   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12386
12387   /* Call the base class's method.  This updates the catchpoint's
12388      locations.  */
12389   bkpt_breakpoint_ops.re_set (b);
12390
12391   /* Reparse the exception conditional expressions.  One for each
12392      location.  */
12393   create_excep_cond_exprs (c);
12394 }
12395
12396 /* Returns true if we should stop for this breakpoint hit.  If the
12397    user specified a specific exception, we only want to cause a stop
12398    if the program thrown that exception.  */
12399
12400 static int
12401 should_stop_exception (const struct bp_location *bl)
12402 {
12403   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12404   const struct ada_catchpoint_location *ada_loc
12405     = (const struct ada_catchpoint_location *) bl;
12406   int stop;
12407
12408   /* With no specific exception, should always stop.  */
12409   if (c->excep_string == NULL)
12410     return 1;
12411
12412   if (ada_loc->excep_cond_expr == NULL)
12413     {
12414       /* We will have a NULL expression if back when we were creating
12415          the expressions, this location's had failed to parse.  */
12416       return 1;
12417     }
12418
12419   stop = 1;
12420   TRY
12421     {
12422       struct value *mark;
12423
12424       mark = value_mark ();
12425       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
12426       value_free_to_mark (mark);
12427     }
12428   CATCH (ex, RETURN_MASK_ALL)
12429     {
12430       exception_fprintf (gdb_stderr, ex,
12431                          _("Error in testing exception condition:\n"));
12432     }
12433   END_CATCH
12434
12435   return stop;
12436 }
12437
12438 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
12439    for all exception catchpoint kinds.  */
12440
12441 static void
12442 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12443 {
12444   bs->stop = should_stop_exception (bs->bp_location_at);
12445 }
12446
12447 /* Implement the PRINT_IT method in the breakpoint_ops structure
12448    for all exception catchpoint kinds.  */
12449
12450 static enum print_stop_action
12451 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12452 {
12453   struct ui_out *uiout = current_uiout;
12454   struct breakpoint *b = bs->breakpoint_at;
12455
12456   annotate_catchpoint (b->number);
12457
12458   if (ui_out_is_mi_like_p (uiout))
12459     {
12460       ui_out_field_string (uiout, "reason",
12461                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12462       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
12463     }
12464
12465   ui_out_text (uiout,
12466                b->disposition == disp_del ? "\nTemporary catchpoint "
12467                                           : "\nCatchpoint ");
12468   ui_out_field_int (uiout, "bkptno", b->number);
12469   ui_out_text (uiout, ", ");
12470
12471   switch (ex)
12472     {
12473       case ada_catch_exception:
12474       case ada_catch_exception_unhandled:
12475         {
12476           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12477           char exception_name[256];
12478
12479           if (addr != 0)
12480             {
12481               read_memory (addr, (gdb_byte *) exception_name,
12482                            sizeof (exception_name) - 1);
12483               exception_name [sizeof (exception_name) - 1] = '\0';
12484             }
12485           else
12486             {
12487               /* For some reason, we were unable to read the exception
12488                  name.  This could happen if the Runtime was compiled
12489                  without debugging info, for instance.  In that case,
12490                  just replace the exception name by the generic string
12491                  "exception" - it will read as "an exception" in the
12492                  notification we are about to print.  */
12493               memcpy (exception_name, "exception", sizeof ("exception"));
12494             }
12495           /* In the case of unhandled exception breakpoints, we print
12496              the exception name as "unhandled EXCEPTION_NAME", to make
12497              it clearer to the user which kind of catchpoint just got
12498              hit.  We used ui_out_text to make sure that this extra
12499              info does not pollute the exception name in the MI case.  */
12500           if (ex == ada_catch_exception_unhandled)
12501             ui_out_text (uiout, "unhandled ");
12502           ui_out_field_string (uiout, "exception-name", exception_name);
12503         }
12504         break;
12505       case ada_catch_assert:
12506         /* In this case, the name of the exception is not really
12507            important.  Just print "failed assertion" to make it clearer
12508            that his program just hit an assertion-failure catchpoint.
12509            We used ui_out_text because this info does not belong in
12510            the MI output.  */
12511         ui_out_text (uiout, "failed assertion");
12512         break;
12513     }
12514   ui_out_text (uiout, " at ");
12515   ada_find_printable_frame (get_current_frame ());
12516
12517   return PRINT_SRC_AND_LOC;
12518 }
12519
12520 /* Implement the PRINT_ONE method in the breakpoint_ops structure
12521    for all exception catchpoint kinds.  */
12522
12523 static void
12524 print_one_exception (enum ada_exception_catchpoint_kind ex,
12525                      struct breakpoint *b, struct bp_location **last_loc)
12526
12527   struct ui_out *uiout = current_uiout;
12528   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12529   struct value_print_options opts;
12530
12531   get_user_print_options (&opts);
12532   if (opts.addressprint)
12533     {
12534       annotate_field (4);
12535       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
12536     }
12537
12538   annotate_field (5);
12539   *last_loc = b->loc;
12540   switch (ex)
12541     {
12542       case ada_catch_exception:
12543         if (c->excep_string != NULL)
12544           {
12545             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12546
12547             ui_out_field_string (uiout, "what", msg);
12548             xfree (msg);
12549           }
12550         else
12551           ui_out_field_string (uiout, "what", "all Ada exceptions");
12552         
12553         break;
12554
12555       case ada_catch_exception_unhandled:
12556         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12557         break;
12558       
12559       case ada_catch_assert:
12560         ui_out_field_string (uiout, "what", "failed Ada assertions");
12561         break;
12562
12563       default:
12564         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12565         break;
12566     }
12567 }
12568
12569 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12570    for all exception catchpoint kinds.  */
12571
12572 static void
12573 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12574                          struct breakpoint *b)
12575 {
12576   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12577   struct ui_out *uiout = current_uiout;
12578
12579   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12580                                                  : _("Catchpoint "));
12581   ui_out_field_int (uiout, "bkptno", b->number);
12582   ui_out_text (uiout, ": ");
12583
12584   switch (ex)
12585     {
12586       case ada_catch_exception:
12587         if (c->excep_string != NULL)
12588           {
12589             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12590             struct cleanup *old_chain = make_cleanup (xfree, info);
12591
12592             ui_out_text (uiout, info);
12593             do_cleanups (old_chain);
12594           }
12595         else
12596           ui_out_text (uiout, _("all Ada exceptions"));
12597         break;
12598
12599       case ada_catch_exception_unhandled:
12600         ui_out_text (uiout, _("unhandled Ada exceptions"));
12601         break;
12602       
12603       case ada_catch_assert:
12604         ui_out_text (uiout, _("failed Ada assertions"));
12605         break;
12606
12607       default:
12608         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12609         break;
12610     }
12611 }
12612
12613 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12614    for all exception catchpoint kinds.  */
12615
12616 static void
12617 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12618                           struct breakpoint *b, struct ui_file *fp)
12619 {
12620   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12621
12622   switch (ex)
12623     {
12624       case ada_catch_exception:
12625         fprintf_filtered (fp, "catch exception");
12626         if (c->excep_string != NULL)
12627           fprintf_filtered (fp, " %s", c->excep_string);
12628         break;
12629
12630       case ada_catch_exception_unhandled:
12631         fprintf_filtered (fp, "catch exception unhandled");
12632         break;
12633
12634       case ada_catch_assert:
12635         fprintf_filtered (fp, "catch assert");
12636         break;
12637
12638       default:
12639         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12640     }
12641   print_recreate_thread (b, fp);
12642 }
12643
12644 /* Virtual table for "catch exception" breakpoints.  */
12645
12646 static void
12647 dtor_catch_exception (struct breakpoint *b)
12648 {
12649   dtor_exception (ada_catch_exception, b);
12650 }
12651
12652 static struct bp_location *
12653 allocate_location_catch_exception (struct breakpoint *self)
12654 {
12655   return allocate_location_exception (ada_catch_exception, self);
12656 }
12657
12658 static void
12659 re_set_catch_exception (struct breakpoint *b)
12660 {
12661   re_set_exception (ada_catch_exception, b);
12662 }
12663
12664 static void
12665 check_status_catch_exception (bpstat bs)
12666 {
12667   check_status_exception (ada_catch_exception, bs);
12668 }
12669
12670 static enum print_stop_action
12671 print_it_catch_exception (bpstat bs)
12672 {
12673   return print_it_exception (ada_catch_exception, bs);
12674 }
12675
12676 static void
12677 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12678 {
12679   print_one_exception (ada_catch_exception, b, last_loc);
12680 }
12681
12682 static void
12683 print_mention_catch_exception (struct breakpoint *b)
12684 {
12685   print_mention_exception (ada_catch_exception, b);
12686 }
12687
12688 static void
12689 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12690 {
12691   print_recreate_exception (ada_catch_exception, b, fp);
12692 }
12693
12694 static struct breakpoint_ops catch_exception_breakpoint_ops;
12695
12696 /* Virtual table for "catch exception unhandled" breakpoints.  */
12697
12698 static void
12699 dtor_catch_exception_unhandled (struct breakpoint *b)
12700 {
12701   dtor_exception (ada_catch_exception_unhandled, b);
12702 }
12703
12704 static struct bp_location *
12705 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12706 {
12707   return allocate_location_exception (ada_catch_exception_unhandled, self);
12708 }
12709
12710 static void
12711 re_set_catch_exception_unhandled (struct breakpoint *b)
12712 {
12713   re_set_exception (ada_catch_exception_unhandled, b);
12714 }
12715
12716 static void
12717 check_status_catch_exception_unhandled (bpstat bs)
12718 {
12719   check_status_exception (ada_catch_exception_unhandled, bs);
12720 }
12721
12722 static enum print_stop_action
12723 print_it_catch_exception_unhandled (bpstat bs)
12724 {
12725   return print_it_exception (ada_catch_exception_unhandled, bs);
12726 }
12727
12728 static void
12729 print_one_catch_exception_unhandled (struct breakpoint *b,
12730                                      struct bp_location **last_loc)
12731 {
12732   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12733 }
12734
12735 static void
12736 print_mention_catch_exception_unhandled (struct breakpoint *b)
12737 {
12738   print_mention_exception (ada_catch_exception_unhandled, b);
12739 }
12740
12741 static void
12742 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12743                                           struct ui_file *fp)
12744 {
12745   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12746 }
12747
12748 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12749
12750 /* Virtual table for "catch assert" breakpoints.  */
12751
12752 static void
12753 dtor_catch_assert (struct breakpoint *b)
12754 {
12755   dtor_exception (ada_catch_assert, b);
12756 }
12757
12758 static struct bp_location *
12759 allocate_location_catch_assert (struct breakpoint *self)
12760 {
12761   return allocate_location_exception (ada_catch_assert, self);
12762 }
12763
12764 static void
12765 re_set_catch_assert (struct breakpoint *b)
12766 {
12767   re_set_exception (ada_catch_assert, b);
12768 }
12769
12770 static void
12771 check_status_catch_assert (bpstat bs)
12772 {
12773   check_status_exception (ada_catch_assert, bs);
12774 }
12775
12776 static enum print_stop_action
12777 print_it_catch_assert (bpstat bs)
12778 {
12779   return print_it_exception (ada_catch_assert, bs);
12780 }
12781
12782 static void
12783 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12784 {
12785   print_one_exception (ada_catch_assert, b, last_loc);
12786 }
12787
12788 static void
12789 print_mention_catch_assert (struct breakpoint *b)
12790 {
12791   print_mention_exception (ada_catch_assert, b);
12792 }
12793
12794 static void
12795 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12796 {
12797   print_recreate_exception (ada_catch_assert, b, fp);
12798 }
12799
12800 static struct breakpoint_ops catch_assert_breakpoint_ops;
12801
12802 /* Return a newly allocated copy of the first space-separated token
12803    in ARGSP, and then adjust ARGSP to point immediately after that
12804    token.
12805
12806    Return NULL if ARGPS does not contain any more tokens.  */
12807
12808 static char *
12809 ada_get_next_arg (char **argsp)
12810 {
12811   char *args = *argsp;
12812   char *end;
12813   char *result;
12814
12815   args = skip_spaces (args);
12816   if (args[0] == '\0')
12817     return NULL; /* No more arguments.  */
12818   
12819   /* Find the end of the current argument.  */
12820
12821   end = skip_to_space (args);
12822
12823   /* Adjust ARGSP to point to the start of the next argument.  */
12824
12825   *argsp = end;
12826
12827   /* Make a copy of the current argument and return it.  */
12828
12829   result = (char *) xmalloc (end - args + 1);
12830   strncpy (result, args, end - args);
12831   result[end - args] = '\0';
12832   
12833   return result;
12834 }
12835
12836 /* Split the arguments specified in a "catch exception" command.  
12837    Set EX to the appropriate catchpoint type.
12838    Set EXCEP_STRING to the name of the specific exception if
12839    specified by the user.
12840    If a condition is found at the end of the arguments, the condition
12841    expression is stored in COND_STRING (memory must be deallocated
12842    after use).  Otherwise COND_STRING is set to NULL.  */
12843
12844 static void
12845 catch_ada_exception_command_split (char *args,
12846                                    enum ada_exception_catchpoint_kind *ex,
12847                                    char **excep_string,
12848                                    char **cond_string)
12849 {
12850   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12851   char *exception_name;
12852   char *cond = NULL;
12853
12854   exception_name = ada_get_next_arg (&args);
12855   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12856     {
12857       /* This is not an exception name; this is the start of a condition
12858          expression for a catchpoint on all exceptions.  So, "un-get"
12859          this token, and set exception_name to NULL.  */
12860       xfree (exception_name);
12861       exception_name = NULL;
12862       args -= 2;
12863     }
12864   make_cleanup (xfree, exception_name);
12865
12866   /* Check to see if we have a condition.  */
12867
12868   args = skip_spaces (args);
12869   if (startswith (args, "if")
12870       && (isspace (args[2]) || args[2] == '\0'))
12871     {
12872       args += 2;
12873       args = skip_spaces (args);
12874
12875       if (args[0] == '\0')
12876         error (_("Condition missing after `if' keyword"));
12877       cond = xstrdup (args);
12878       make_cleanup (xfree, cond);
12879
12880       args += strlen (args);
12881     }
12882
12883   /* Check that we do not have any more arguments.  Anything else
12884      is unexpected.  */
12885
12886   if (args[0] != '\0')
12887     error (_("Junk at end of expression"));
12888
12889   discard_cleanups (old_chain);
12890
12891   if (exception_name == NULL)
12892     {
12893       /* Catch all exceptions.  */
12894       *ex = ada_catch_exception;
12895       *excep_string = NULL;
12896     }
12897   else if (strcmp (exception_name, "unhandled") == 0)
12898     {
12899       /* Catch unhandled exceptions.  */
12900       *ex = ada_catch_exception_unhandled;
12901       *excep_string = NULL;
12902     }
12903   else
12904     {
12905       /* Catch a specific exception.  */
12906       *ex = ada_catch_exception;
12907       *excep_string = exception_name;
12908     }
12909   *cond_string = cond;
12910 }
12911
12912 /* Return the name of the symbol on which we should break in order to
12913    implement a catchpoint of the EX kind.  */
12914
12915 static const char *
12916 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12917 {
12918   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12919
12920   gdb_assert (data->exception_info != NULL);
12921
12922   switch (ex)
12923     {
12924       case ada_catch_exception:
12925         return (data->exception_info->catch_exception_sym);
12926         break;
12927       case ada_catch_exception_unhandled:
12928         return (data->exception_info->catch_exception_unhandled_sym);
12929         break;
12930       case ada_catch_assert:
12931         return (data->exception_info->catch_assert_sym);
12932         break;
12933       default:
12934         internal_error (__FILE__, __LINE__,
12935                         _("unexpected catchpoint kind (%d)"), ex);
12936     }
12937 }
12938
12939 /* Return the breakpoint ops "virtual table" used for catchpoints
12940    of the EX kind.  */
12941
12942 static const struct breakpoint_ops *
12943 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12944 {
12945   switch (ex)
12946     {
12947       case ada_catch_exception:
12948         return (&catch_exception_breakpoint_ops);
12949         break;
12950       case ada_catch_exception_unhandled:
12951         return (&catch_exception_unhandled_breakpoint_ops);
12952         break;
12953       case ada_catch_assert:
12954         return (&catch_assert_breakpoint_ops);
12955         break;
12956       default:
12957         internal_error (__FILE__, __LINE__,
12958                         _("unexpected catchpoint kind (%d)"), ex);
12959     }
12960 }
12961
12962 /* Return the condition that will be used to match the current exception
12963    being raised with the exception that the user wants to catch.  This
12964    assumes that this condition is used when the inferior just triggered
12965    an exception catchpoint.
12966    
12967    The string returned is a newly allocated string that needs to be
12968    deallocated later.  */
12969
12970 static char *
12971 ada_exception_catchpoint_cond_string (const char *excep_string)
12972 {
12973   int i;
12974
12975   /* The standard exceptions are a special case.  They are defined in
12976      runtime units that have been compiled without debugging info; if
12977      EXCEP_STRING is the not-fully-qualified name of a standard
12978      exception (e.g. "constraint_error") then, during the evaluation
12979      of the condition expression, the symbol lookup on this name would
12980      *not* return this standard exception.  The catchpoint condition
12981      may then be set only on user-defined exceptions which have the
12982      same not-fully-qualified name (e.g. my_package.constraint_error).
12983
12984      To avoid this unexcepted behavior, these standard exceptions are
12985      systematically prefixed by "standard".  This means that "catch
12986      exception constraint_error" is rewritten into "catch exception
12987      standard.constraint_error".
12988
12989      If an exception named contraint_error is defined in another package of
12990      the inferior program, then the only way to specify this exception as a
12991      breakpoint condition is to use its fully-qualified named:
12992      e.g. my_package.constraint_error.  */
12993
12994   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12995     {
12996       if (strcmp (standard_exc [i], excep_string) == 0)
12997         {
12998           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12999                              excep_string);
13000         }
13001     }
13002   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
13003 }
13004
13005 /* Return the symtab_and_line that should be used to insert an exception
13006    catchpoint of the TYPE kind.
13007
13008    EXCEP_STRING should contain the name of a specific exception that
13009    the catchpoint should catch, or NULL otherwise.
13010
13011    ADDR_STRING returns the name of the function where the real
13012    breakpoint that implements the catchpoints is set, depending on the
13013    type of catchpoint we need to create.  */
13014
13015 static struct symtab_and_line
13016 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
13017                    char **addr_string, const struct breakpoint_ops **ops)
13018 {
13019   const char *sym_name;
13020   struct symbol *sym;
13021
13022   /* First, find out which exception support info to use.  */
13023   ada_exception_support_info_sniffer ();
13024
13025   /* Then lookup the function on which we will break in order to catch
13026      the Ada exceptions requested by the user.  */
13027   sym_name = ada_exception_sym_name (ex);
13028   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
13029
13030   /* We can assume that SYM is not NULL at this stage.  If the symbol
13031      did not exist, ada_exception_support_info_sniffer would have
13032      raised an exception.
13033
13034      Also, ada_exception_support_info_sniffer should have already
13035      verified that SYM is a function symbol.  */
13036   gdb_assert (sym != NULL);
13037   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
13038
13039   /* Set ADDR_STRING.  */
13040   *addr_string = xstrdup (sym_name);
13041
13042   /* Set OPS.  */
13043   *ops = ada_exception_breakpoint_ops (ex);
13044
13045   return find_function_start_sal (sym, 1);
13046 }
13047
13048 /* Create an Ada exception catchpoint.
13049
13050    EX_KIND is the kind of exception catchpoint to be created.
13051
13052    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
13053    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
13054    of the exception to which this catchpoint applies.  When not NULL,
13055    the string must be allocated on the heap, and its deallocation
13056    is no longer the responsibility of the caller.
13057
13058    COND_STRING, if not NULL, is the catchpoint condition.  This string
13059    must be allocated on the heap, and its deallocation is no longer
13060    the responsibility of the caller.
13061
13062    TEMPFLAG, if nonzero, means that the underlying breakpoint
13063    should be temporary.
13064
13065    FROM_TTY is the usual argument passed to all commands implementations.  */
13066
13067 void
13068 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
13069                                  enum ada_exception_catchpoint_kind ex_kind,
13070                                  char *excep_string,
13071                                  char *cond_string,
13072                                  int tempflag,
13073                                  int disabled,
13074                                  int from_tty)
13075 {
13076   struct ada_catchpoint *c;
13077   char *addr_string = NULL;
13078   const struct breakpoint_ops *ops = NULL;
13079   struct symtab_and_line sal
13080     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
13081
13082   c = XNEW (struct ada_catchpoint);
13083   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
13084                                  ops, tempflag, disabled, from_tty);
13085   c->excep_string = excep_string;
13086   create_excep_cond_exprs (c);
13087   if (cond_string != NULL)
13088     set_breakpoint_condition (&c->base, cond_string, from_tty);
13089   install_breakpoint (0, &c->base, 1);
13090 }
13091
13092 /* Implement the "catch exception" command.  */
13093
13094 static void
13095 catch_ada_exception_command (char *arg, int from_tty,
13096                              struct cmd_list_element *command)
13097 {
13098   struct gdbarch *gdbarch = get_current_arch ();
13099   int tempflag;
13100   enum ada_exception_catchpoint_kind ex_kind;
13101   char *excep_string = NULL;
13102   char *cond_string = NULL;
13103
13104   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13105
13106   if (!arg)
13107     arg = "";
13108   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
13109                                      &cond_string);
13110   create_ada_exception_catchpoint (gdbarch, ex_kind,
13111                                    excep_string, cond_string,
13112                                    tempflag, 1 /* enabled */,
13113                                    from_tty);
13114 }
13115
13116 /* Split the arguments specified in a "catch assert" command.
13117
13118    ARGS contains the command's arguments (or the empty string if
13119    no arguments were passed).
13120
13121    If ARGS contains a condition, set COND_STRING to that condition
13122    (the memory needs to be deallocated after use).  */
13123
13124 static void
13125 catch_ada_assert_command_split (char *args, char **cond_string)
13126 {
13127   args = skip_spaces (args);
13128
13129   /* Check whether a condition was provided.  */
13130   if (startswith (args, "if")
13131       && (isspace (args[2]) || args[2] == '\0'))
13132     {
13133       args += 2;
13134       args = skip_spaces (args);
13135       if (args[0] == '\0')
13136         error (_("condition missing after `if' keyword"));
13137       *cond_string = xstrdup (args);
13138     }
13139
13140   /* Otherwise, there should be no other argument at the end of
13141      the command.  */
13142   else if (args[0] != '\0')
13143     error (_("Junk at end of arguments."));
13144 }
13145
13146 /* Implement the "catch assert" command.  */
13147
13148 static void
13149 catch_assert_command (char *arg, int from_tty,
13150                       struct cmd_list_element *command)
13151 {
13152   struct gdbarch *gdbarch = get_current_arch ();
13153   int tempflag;
13154   char *cond_string = NULL;
13155
13156   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13157
13158   if (!arg)
13159     arg = "";
13160   catch_ada_assert_command_split (arg, &cond_string);
13161   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
13162                                    NULL, cond_string,
13163                                    tempflag, 1 /* enabled */,
13164                                    from_tty);
13165 }
13166
13167 /* Return non-zero if the symbol SYM is an Ada exception object.  */
13168
13169 static int
13170 ada_is_exception_sym (struct symbol *sym)
13171 {
13172   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
13173
13174   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
13175           && SYMBOL_CLASS (sym) != LOC_BLOCK
13176           && SYMBOL_CLASS (sym) != LOC_CONST
13177           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
13178           && type_name != NULL && strcmp (type_name, "exception") == 0);
13179 }
13180
13181 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
13182    Ada exception object.  This matches all exceptions except the ones
13183    defined by the Ada language.  */
13184
13185 static int
13186 ada_is_non_standard_exception_sym (struct symbol *sym)
13187 {
13188   int i;
13189
13190   if (!ada_is_exception_sym (sym))
13191     return 0;
13192
13193   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13194     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
13195       return 0;  /* A standard exception.  */
13196
13197   /* Numeric_Error is also a standard exception, so exclude it.
13198      See the STANDARD_EXC description for more details as to why
13199      this exception is not listed in that array.  */
13200   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
13201     return 0;
13202
13203   return 1;
13204 }
13205
13206 /* A helper function for qsort, comparing two struct ada_exc_info
13207    objects.
13208
13209    The comparison is determined first by exception name, and then
13210    by exception address.  */
13211
13212 static int
13213 compare_ada_exception_info (const void *a, const void *b)
13214 {
13215   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
13216   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
13217   int result;
13218
13219   result = strcmp (exc_a->name, exc_b->name);
13220   if (result != 0)
13221     return result;
13222
13223   if (exc_a->addr < exc_b->addr)
13224     return -1;
13225   if (exc_a->addr > exc_b->addr)
13226     return 1;
13227
13228   return 0;
13229 }
13230
13231 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
13232    routine, but keeping the first SKIP elements untouched.
13233
13234    All duplicates are also removed.  */
13235
13236 static void
13237 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
13238                                       int skip)
13239 {
13240   struct ada_exc_info *to_sort
13241     = VEC_address (ada_exc_info, *exceptions) + skip;
13242   int to_sort_len
13243     = VEC_length (ada_exc_info, *exceptions) - skip;
13244   int i, j;
13245
13246   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
13247          compare_ada_exception_info);
13248
13249   for (i = 1, j = 1; i < to_sort_len; i++)
13250     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
13251       to_sort[j++] = to_sort[i];
13252   to_sort_len = j;
13253   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
13254 }
13255
13256 /* A function intended as the "name_matcher" callback in the struct
13257    quick_symbol_functions' expand_symtabs_matching method.
13258
13259    SEARCH_NAME is the symbol's search name.
13260
13261    If USER_DATA is not NULL, it is a pointer to a regext_t object
13262    used to match the symbol (by natural name).  Otherwise, when USER_DATA
13263    is null, no filtering is performed, and all symbols are a positive
13264    match.  */
13265
13266 static int
13267 ada_exc_search_name_matches (const char *search_name, void *user_data)
13268 {
13269   regex_t *preg = (regex_t *) user_data;
13270
13271   if (preg == NULL)
13272     return 1;
13273
13274   /* In Ada, the symbol "search name" is a linkage name, whereas
13275      the regular expression used to do the matching refers to
13276      the natural name.  So match against the decoded name.  */
13277   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
13278 }
13279
13280 /* Add all exceptions defined by the Ada standard whose name match
13281    a regular expression.
13282
13283    If PREG is not NULL, then this regexp_t object is used to
13284    perform the symbol name matching.  Otherwise, no name-based
13285    filtering is performed.
13286
13287    EXCEPTIONS is a vector of exceptions to which matching exceptions
13288    gets pushed.  */
13289
13290 static void
13291 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13292 {
13293   int i;
13294
13295   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13296     {
13297       if (preg == NULL
13298           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
13299         {
13300           struct bound_minimal_symbol msymbol
13301             = ada_lookup_simple_minsym (standard_exc[i]);
13302
13303           if (msymbol.minsym != NULL)
13304             {
13305               struct ada_exc_info info
13306                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
13307
13308               VEC_safe_push (ada_exc_info, *exceptions, &info);
13309             }
13310         }
13311     }
13312 }
13313
13314 /* Add all Ada exceptions defined locally and accessible from the given
13315    FRAME.
13316
13317    If PREG is not NULL, then this regexp_t object is used to
13318    perform the symbol name matching.  Otherwise, no name-based
13319    filtering is performed.
13320
13321    EXCEPTIONS is a vector of exceptions to which matching exceptions
13322    gets pushed.  */
13323
13324 static void
13325 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
13326                                VEC(ada_exc_info) **exceptions)
13327 {
13328   const struct block *block = get_frame_block (frame, 0);
13329
13330   while (block != 0)
13331     {
13332       struct block_iterator iter;
13333       struct symbol *sym;
13334
13335       ALL_BLOCK_SYMBOLS (block, iter, sym)
13336         {
13337           switch (SYMBOL_CLASS (sym))
13338             {
13339             case LOC_TYPEDEF:
13340             case LOC_BLOCK:
13341             case LOC_CONST:
13342               break;
13343             default:
13344               if (ada_is_exception_sym (sym))
13345                 {
13346                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
13347                                               SYMBOL_VALUE_ADDRESS (sym)};
13348
13349                   VEC_safe_push (ada_exc_info, *exceptions, &info);
13350                 }
13351             }
13352         }
13353       if (BLOCK_FUNCTION (block) != NULL)
13354         break;
13355       block = BLOCK_SUPERBLOCK (block);
13356     }
13357 }
13358
13359 /* Add all exceptions defined globally whose name name match
13360    a regular expression, excluding standard exceptions.
13361
13362    The reason we exclude standard exceptions is that they need
13363    to be handled separately: Standard exceptions are defined inside
13364    a runtime unit which is normally not compiled with debugging info,
13365    and thus usually do not show up in our symbol search.  However,
13366    if the unit was in fact built with debugging info, we need to
13367    exclude them because they would duplicate the entry we found
13368    during the special loop that specifically searches for those
13369    standard exceptions.
13370
13371    If PREG is not NULL, then this regexp_t object is used to
13372    perform the symbol name matching.  Otherwise, no name-based
13373    filtering is performed.
13374
13375    EXCEPTIONS is a vector of exceptions to which matching exceptions
13376    gets pushed.  */
13377
13378 static void
13379 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13380 {
13381   struct objfile *objfile;
13382   struct compunit_symtab *s;
13383
13384   expand_symtabs_matching (NULL, ada_exc_search_name_matches, NULL,
13385                            VARIABLES_DOMAIN, preg);
13386
13387   ALL_COMPUNITS (objfile, s)
13388     {
13389       const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13390       int i;
13391
13392       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13393         {
13394           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13395           struct block_iterator iter;
13396           struct symbol *sym;
13397
13398           ALL_BLOCK_SYMBOLS (b, iter, sym)
13399             if (ada_is_non_standard_exception_sym (sym)
13400                 && (preg == NULL
13401                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
13402                                 0, NULL, 0) == 0))
13403               {
13404                 struct ada_exc_info info
13405                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13406
13407                 VEC_safe_push (ada_exc_info, *exceptions, &info);
13408               }
13409         }
13410     }
13411 }
13412
13413 /* Implements ada_exceptions_list with the regular expression passed
13414    as a regex_t, rather than a string.
13415
13416    If not NULL, PREG is used to filter out exceptions whose names
13417    do not match.  Otherwise, all exceptions are listed.  */
13418
13419 static VEC(ada_exc_info) *
13420 ada_exceptions_list_1 (regex_t *preg)
13421 {
13422   VEC(ada_exc_info) *result = NULL;
13423   struct cleanup *old_chain
13424     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13425   int prev_len;
13426
13427   /* First, list the known standard exceptions.  These exceptions
13428      need to be handled separately, as they are usually defined in
13429      runtime units that have been compiled without debugging info.  */
13430
13431   ada_add_standard_exceptions (preg, &result);
13432
13433   /* Next, find all exceptions whose scope is local and accessible
13434      from the currently selected frame.  */
13435
13436   if (has_stack_frames ())
13437     {
13438       prev_len = VEC_length (ada_exc_info, result);
13439       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13440                                      &result);
13441       if (VEC_length (ada_exc_info, result) > prev_len)
13442         sort_remove_dups_ada_exceptions_list (&result, prev_len);
13443     }
13444
13445   /* Add all exceptions whose scope is global.  */
13446
13447   prev_len = VEC_length (ada_exc_info, result);
13448   ada_add_global_exceptions (preg, &result);
13449   if (VEC_length (ada_exc_info, result) > prev_len)
13450     sort_remove_dups_ada_exceptions_list (&result, prev_len);
13451
13452   discard_cleanups (old_chain);
13453   return result;
13454 }
13455
13456 /* Return a vector of ada_exc_info.
13457
13458    If REGEXP is NULL, all exceptions are included in the result.
13459    Otherwise, it should contain a valid regular expression,
13460    and only the exceptions whose names match that regular expression
13461    are included in the result.
13462
13463    The exceptions are sorted in the following order:
13464      - Standard exceptions (defined by the Ada language), in
13465        alphabetical order;
13466      - Exceptions only visible from the current frame, in
13467        alphabetical order;
13468      - Exceptions whose scope is global, in alphabetical order.  */
13469
13470 VEC(ada_exc_info) *
13471 ada_exceptions_list (const char *regexp)
13472 {
13473   VEC(ada_exc_info) *result = NULL;
13474   struct cleanup *old_chain = NULL;
13475   regex_t reg;
13476
13477   if (regexp != NULL)
13478     old_chain = compile_rx_or_error (&reg, regexp,
13479                                      _("invalid regular expression"));
13480
13481   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
13482
13483   if (old_chain != NULL)
13484     do_cleanups (old_chain);
13485   return result;
13486 }
13487
13488 /* Implement the "info exceptions" command.  */
13489
13490 static void
13491 info_exceptions_command (char *regexp, int from_tty)
13492 {
13493   VEC(ada_exc_info) *exceptions;
13494   struct cleanup *cleanup;
13495   struct gdbarch *gdbarch = get_current_arch ();
13496   int ix;
13497   struct ada_exc_info *info;
13498
13499   exceptions = ada_exceptions_list (regexp);
13500   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13501
13502   if (regexp != NULL)
13503     printf_filtered
13504       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13505   else
13506     printf_filtered (_("All defined Ada exceptions:\n"));
13507
13508   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13509     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13510
13511   do_cleanups (cleanup);
13512 }
13513
13514                                 /* Operators */
13515 /* Information about operators given special treatment in functions
13516    below.  */
13517 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
13518
13519 #define ADA_OPERATORS \
13520     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13521     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13522     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13523     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13524     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13525     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13526     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13527     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13528     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13529     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13530     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13531     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13532     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13533     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13534     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
13535     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13536     OP_DEFN (OP_OTHERS, 1, 1, 0) \
13537     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13538     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
13539
13540 static void
13541 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13542                      int *argsp)
13543 {
13544   switch (exp->elts[pc - 1].opcode)
13545     {
13546     default:
13547       operator_length_standard (exp, pc, oplenp, argsp);
13548       break;
13549
13550 #define OP_DEFN(op, len, args, binop) \
13551     case op: *oplenp = len; *argsp = args; break;
13552       ADA_OPERATORS;
13553 #undef OP_DEFN
13554
13555     case OP_AGGREGATE:
13556       *oplenp = 3;
13557       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13558       break;
13559
13560     case OP_CHOICES:
13561       *oplenp = 3;
13562       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13563       break;
13564     }
13565 }
13566
13567 /* Implementation of the exp_descriptor method operator_check.  */
13568
13569 static int
13570 ada_operator_check (struct expression *exp, int pos,
13571                     int (*objfile_func) (struct objfile *objfile, void *data),
13572                     void *data)
13573 {
13574   const union exp_element *const elts = exp->elts;
13575   struct type *type = NULL;
13576
13577   switch (elts[pos].opcode)
13578     {
13579       case UNOP_IN_RANGE:
13580       case UNOP_QUAL:
13581         type = elts[pos + 1].type;
13582         break;
13583
13584       default:
13585         return operator_check_standard (exp, pos, objfile_func, data);
13586     }
13587
13588   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13589
13590   if (type && TYPE_OBJFILE (type)
13591       && (*objfile_func) (TYPE_OBJFILE (type), data))
13592     return 1;
13593
13594   return 0;
13595 }
13596
13597 static char *
13598 ada_op_name (enum exp_opcode opcode)
13599 {
13600   switch (opcode)
13601     {
13602     default:
13603       return op_name_standard (opcode);
13604
13605 #define OP_DEFN(op, len, args, binop) case op: return #op;
13606       ADA_OPERATORS;
13607 #undef OP_DEFN
13608
13609     case OP_AGGREGATE:
13610       return "OP_AGGREGATE";
13611     case OP_CHOICES:
13612       return "OP_CHOICES";
13613     case OP_NAME:
13614       return "OP_NAME";
13615     }
13616 }
13617
13618 /* As for operator_length, but assumes PC is pointing at the first
13619    element of the operator, and gives meaningful results only for the 
13620    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13621
13622 static void
13623 ada_forward_operator_length (struct expression *exp, int pc,
13624                              int *oplenp, int *argsp)
13625 {
13626   switch (exp->elts[pc].opcode)
13627     {
13628     default:
13629       *oplenp = *argsp = 0;
13630       break;
13631
13632 #define OP_DEFN(op, len, args, binop) \
13633     case op: *oplenp = len; *argsp = args; break;
13634       ADA_OPERATORS;
13635 #undef OP_DEFN
13636
13637     case OP_AGGREGATE:
13638       *oplenp = 3;
13639       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13640       break;
13641
13642     case OP_CHOICES:
13643       *oplenp = 3;
13644       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13645       break;
13646
13647     case OP_STRING:
13648     case OP_NAME:
13649       {
13650         int len = longest_to_int (exp->elts[pc + 1].longconst);
13651
13652         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13653         *argsp = 0;
13654         break;
13655       }
13656     }
13657 }
13658
13659 static int
13660 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13661 {
13662   enum exp_opcode op = exp->elts[elt].opcode;
13663   int oplen, nargs;
13664   int pc = elt;
13665   int i;
13666
13667   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13668
13669   switch (op)
13670     {
13671       /* Ada attributes ('Foo).  */
13672     case OP_ATR_FIRST:
13673     case OP_ATR_LAST:
13674     case OP_ATR_LENGTH:
13675     case OP_ATR_IMAGE:
13676     case OP_ATR_MAX:
13677     case OP_ATR_MIN:
13678     case OP_ATR_MODULUS:
13679     case OP_ATR_POS:
13680     case OP_ATR_SIZE:
13681     case OP_ATR_TAG:
13682     case OP_ATR_VAL:
13683       break;
13684
13685     case UNOP_IN_RANGE:
13686     case UNOP_QUAL:
13687       /* XXX: gdb_sprint_host_address, type_sprint */
13688       fprintf_filtered (stream, _("Type @"));
13689       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13690       fprintf_filtered (stream, " (");
13691       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13692       fprintf_filtered (stream, ")");
13693       break;
13694     case BINOP_IN_BOUNDS:
13695       fprintf_filtered (stream, " (%d)",
13696                         longest_to_int (exp->elts[pc + 2].longconst));
13697       break;
13698     case TERNOP_IN_RANGE:
13699       break;
13700
13701     case OP_AGGREGATE:
13702     case OP_OTHERS:
13703     case OP_DISCRETE_RANGE:
13704     case OP_POSITIONAL:
13705     case OP_CHOICES:
13706       break;
13707
13708     case OP_NAME:
13709     case OP_STRING:
13710       {
13711         char *name = &exp->elts[elt + 2].string;
13712         int len = longest_to_int (exp->elts[elt + 1].longconst);
13713
13714         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13715         break;
13716       }
13717
13718     default:
13719       return dump_subexp_body_standard (exp, stream, elt);
13720     }
13721
13722   elt += oplen;
13723   for (i = 0; i < nargs; i += 1)
13724     elt = dump_subexp (exp, stream, elt);
13725
13726   return elt;
13727 }
13728
13729 /* The Ada extension of print_subexp (q.v.).  */
13730
13731 static void
13732 ada_print_subexp (struct expression *exp, int *pos,
13733                   struct ui_file *stream, enum precedence prec)
13734 {
13735   int oplen, nargs, i;
13736   int pc = *pos;
13737   enum exp_opcode op = exp->elts[pc].opcode;
13738
13739   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13740
13741   *pos += oplen;
13742   switch (op)
13743     {
13744     default:
13745       *pos -= oplen;
13746       print_subexp_standard (exp, pos, stream, prec);
13747       return;
13748
13749     case OP_VAR_VALUE:
13750       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13751       return;
13752
13753     case BINOP_IN_BOUNDS:
13754       /* XXX: sprint_subexp */
13755       print_subexp (exp, pos, stream, PREC_SUFFIX);
13756       fputs_filtered (" in ", stream);
13757       print_subexp (exp, pos, stream, PREC_SUFFIX);
13758       fputs_filtered ("'range", stream);
13759       if (exp->elts[pc + 1].longconst > 1)
13760         fprintf_filtered (stream, "(%ld)",
13761                           (long) exp->elts[pc + 1].longconst);
13762       return;
13763
13764     case TERNOP_IN_RANGE:
13765       if (prec >= PREC_EQUAL)
13766         fputs_filtered ("(", stream);
13767       /* XXX: sprint_subexp */
13768       print_subexp (exp, pos, stream, PREC_SUFFIX);
13769       fputs_filtered (" in ", stream);
13770       print_subexp (exp, pos, stream, PREC_EQUAL);
13771       fputs_filtered (" .. ", stream);
13772       print_subexp (exp, pos, stream, PREC_EQUAL);
13773       if (prec >= PREC_EQUAL)
13774         fputs_filtered (")", stream);
13775       return;
13776
13777     case OP_ATR_FIRST:
13778     case OP_ATR_LAST:
13779     case OP_ATR_LENGTH:
13780     case OP_ATR_IMAGE:
13781     case OP_ATR_MAX:
13782     case OP_ATR_MIN:
13783     case OP_ATR_MODULUS:
13784     case OP_ATR_POS:
13785     case OP_ATR_SIZE:
13786     case OP_ATR_TAG:
13787     case OP_ATR_VAL:
13788       if (exp->elts[*pos].opcode == OP_TYPE)
13789         {
13790           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13791             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13792                            &type_print_raw_options);
13793           *pos += 3;
13794         }
13795       else
13796         print_subexp (exp, pos, stream, PREC_SUFFIX);
13797       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13798       if (nargs > 1)
13799         {
13800           int tem;
13801
13802           for (tem = 1; tem < nargs; tem += 1)
13803             {
13804               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13805               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13806             }
13807           fputs_filtered (")", stream);
13808         }
13809       return;
13810
13811     case UNOP_QUAL:
13812       type_print (exp->elts[pc + 1].type, "", stream, 0);
13813       fputs_filtered ("'(", stream);
13814       print_subexp (exp, pos, stream, PREC_PREFIX);
13815       fputs_filtered (")", stream);
13816       return;
13817
13818     case UNOP_IN_RANGE:
13819       /* XXX: sprint_subexp */
13820       print_subexp (exp, pos, stream, PREC_SUFFIX);
13821       fputs_filtered (" in ", stream);
13822       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13823                      &type_print_raw_options);
13824       return;
13825
13826     case OP_DISCRETE_RANGE:
13827       print_subexp (exp, pos, stream, PREC_SUFFIX);
13828       fputs_filtered ("..", stream);
13829       print_subexp (exp, pos, stream, PREC_SUFFIX);
13830       return;
13831
13832     case OP_OTHERS:
13833       fputs_filtered ("others => ", stream);
13834       print_subexp (exp, pos, stream, PREC_SUFFIX);
13835       return;
13836
13837     case OP_CHOICES:
13838       for (i = 0; i < nargs-1; i += 1)
13839         {
13840           if (i > 0)
13841             fputs_filtered ("|", stream);
13842           print_subexp (exp, pos, stream, PREC_SUFFIX);
13843         }
13844       fputs_filtered (" => ", stream);
13845       print_subexp (exp, pos, stream, PREC_SUFFIX);
13846       return;
13847       
13848     case OP_POSITIONAL:
13849       print_subexp (exp, pos, stream, PREC_SUFFIX);
13850       return;
13851
13852     case OP_AGGREGATE:
13853       fputs_filtered ("(", stream);
13854       for (i = 0; i < nargs; i += 1)
13855         {
13856           if (i > 0)
13857             fputs_filtered (", ", stream);
13858           print_subexp (exp, pos, stream, PREC_SUFFIX);
13859         }
13860       fputs_filtered (")", stream);
13861       return;
13862     }
13863 }
13864
13865 /* Table mapping opcodes into strings for printing operators
13866    and precedences of the operators.  */
13867
13868 static const struct op_print ada_op_print_tab[] = {
13869   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13870   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13871   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13872   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13873   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13874   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13875   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13876   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13877   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13878   {">=", BINOP_GEQ, PREC_ORDER, 0},
13879   {">", BINOP_GTR, PREC_ORDER, 0},
13880   {"<", BINOP_LESS, PREC_ORDER, 0},
13881   {">>", BINOP_RSH, PREC_SHIFT, 0},
13882   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13883   {"+", BINOP_ADD, PREC_ADD, 0},
13884   {"-", BINOP_SUB, PREC_ADD, 0},
13885   {"&", BINOP_CONCAT, PREC_ADD, 0},
13886   {"*", BINOP_MUL, PREC_MUL, 0},
13887   {"/", BINOP_DIV, PREC_MUL, 0},
13888   {"rem", BINOP_REM, PREC_MUL, 0},
13889   {"mod", BINOP_MOD, PREC_MUL, 0},
13890   {"**", BINOP_EXP, PREC_REPEAT, 0},
13891   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13892   {"-", UNOP_NEG, PREC_PREFIX, 0},
13893   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13894   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13895   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13896   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13897   {".all", UNOP_IND, PREC_SUFFIX, 1},
13898   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13899   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13900   {NULL, OP_NULL, PREC_SUFFIX, 0}
13901 };
13902 \f
13903 enum ada_primitive_types {
13904   ada_primitive_type_int,
13905   ada_primitive_type_long,
13906   ada_primitive_type_short,
13907   ada_primitive_type_char,
13908   ada_primitive_type_float,
13909   ada_primitive_type_double,
13910   ada_primitive_type_void,
13911   ada_primitive_type_long_long,
13912   ada_primitive_type_long_double,
13913   ada_primitive_type_natural,
13914   ada_primitive_type_positive,
13915   ada_primitive_type_system_address,
13916   nr_ada_primitive_types
13917 };
13918
13919 static void
13920 ada_language_arch_info (struct gdbarch *gdbarch,
13921                         struct language_arch_info *lai)
13922 {
13923   const struct builtin_type *builtin = builtin_type (gdbarch);
13924
13925   lai->primitive_type_vector
13926     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13927                               struct type *);
13928
13929   lai->primitive_type_vector [ada_primitive_type_int]
13930     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13931                          0, "integer");
13932   lai->primitive_type_vector [ada_primitive_type_long]
13933     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13934                          0, "long_integer");
13935   lai->primitive_type_vector [ada_primitive_type_short]
13936     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13937                          0, "short_integer");
13938   lai->string_char_type
13939     = lai->primitive_type_vector [ada_primitive_type_char]
13940     = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13941   lai->primitive_type_vector [ada_primitive_type_float]
13942     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13943                        "float", NULL);
13944   lai->primitive_type_vector [ada_primitive_type_double]
13945     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13946                        "long_float", NULL);
13947   lai->primitive_type_vector [ada_primitive_type_long_long]
13948     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13949                          0, "long_long_integer");
13950   lai->primitive_type_vector [ada_primitive_type_long_double]
13951     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13952                        "long_long_float", NULL);
13953   lai->primitive_type_vector [ada_primitive_type_natural]
13954     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13955                          0, "natural");
13956   lai->primitive_type_vector [ada_primitive_type_positive]
13957     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13958                          0, "positive");
13959   lai->primitive_type_vector [ada_primitive_type_void]
13960     = builtin->builtin_void;
13961
13962   lai->primitive_type_vector [ada_primitive_type_system_address]
13963     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13964   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13965     = "system__address";
13966
13967   lai->bool_type_symbol = NULL;
13968   lai->bool_type_default = builtin->builtin_bool;
13969 }
13970 \f
13971                                 /* Language vector */
13972
13973 /* Not really used, but needed in the ada_language_defn.  */
13974
13975 static void
13976 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13977 {
13978   ada_emit_char (c, type, stream, quoter, 1);
13979 }
13980
13981 static int
13982 parse (struct parser_state *ps)
13983 {
13984   warnings_issued = 0;
13985   return ada_parse (ps);
13986 }
13987
13988 static const struct exp_descriptor ada_exp_descriptor = {
13989   ada_print_subexp,
13990   ada_operator_length,
13991   ada_operator_check,
13992   ada_op_name,
13993   ada_dump_subexp_body,
13994   ada_evaluate_subexp
13995 };
13996
13997 /* Implement the "la_get_symbol_name_cmp" language_defn method
13998    for Ada.  */
13999
14000 static symbol_name_cmp_ftype
14001 ada_get_symbol_name_cmp (const char *lookup_name)
14002 {
14003   if (should_use_wild_match (lookup_name))
14004     return wild_match;
14005   else
14006     return compare_names;
14007 }
14008
14009 /* Implement the "la_read_var_value" language_defn method for Ada.  */
14010
14011 static struct value *
14012 ada_read_var_value (struct symbol *var, const struct block *var_block,
14013                     struct frame_info *frame)
14014 {
14015   const struct block *frame_block = NULL;
14016   struct symbol *renaming_sym = NULL;
14017
14018   /* The only case where default_read_var_value is not sufficient
14019      is when VAR is a renaming...  */
14020   if (frame)
14021     frame_block = get_frame_block (frame, NULL);
14022   if (frame_block)
14023     renaming_sym = ada_find_renaming_symbol (var, frame_block);
14024   if (renaming_sym != NULL)
14025     return ada_read_renaming_var_value (renaming_sym, frame_block);
14026
14027   /* This is a typical case where we expect the default_read_var_value
14028      function to work.  */
14029   return default_read_var_value (var, var_block, frame);
14030 }
14031
14032 const struct language_defn ada_language_defn = {
14033   "ada",                        /* Language name */
14034   "Ada",
14035   language_ada,
14036   range_check_off,
14037   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
14038                                    that's not quite what this means.  */
14039   array_row_major,
14040   macro_expansion_no,
14041   &ada_exp_descriptor,
14042   parse,
14043   ada_error,
14044   resolve,
14045   ada_printchar,                /* Print a character constant */
14046   ada_printstr,                 /* Function to print string constant */
14047   emit_char,                    /* Function to print single char (not used) */
14048   ada_print_type,               /* Print a type using appropriate syntax */
14049   ada_print_typedef,            /* Print a typedef using appropriate syntax */
14050   ada_val_print,                /* Print a value using appropriate syntax */
14051   ada_value_print,              /* Print a top-level value */
14052   ada_read_var_value,           /* la_read_var_value */
14053   NULL,                         /* Language specific skip_trampoline */
14054   NULL,                         /* name_of_this */
14055   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
14056   basic_lookup_transparent_type,        /* lookup_transparent_type */
14057   ada_la_decode,                /* Language specific symbol demangler */
14058   NULL,                         /* Language specific
14059                                    class_name_from_physname */
14060   ada_op_print_tab,             /* expression operators for printing */
14061   0,                            /* c-style arrays */
14062   1,                            /* String lower bound */
14063   ada_get_gdb_completer_word_break_characters,
14064   ada_make_symbol_completion_list,
14065   ada_language_arch_info,
14066   ada_print_array_index,
14067   default_pass_by_reference,
14068   c_get_string,
14069   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
14070   ada_iterate_over_symbols,
14071   &ada_varobj_ops,
14072   NULL,
14073   NULL,
14074   LANG_MAGIC
14075 };
14076
14077 /* Provide a prototype to silence -Wmissing-prototypes.  */
14078 extern initialize_file_ftype _initialize_ada_language;
14079
14080 /* Command-list for the "set/show ada" prefix command.  */
14081 static struct cmd_list_element *set_ada_list;
14082 static struct cmd_list_element *show_ada_list;
14083
14084 /* Implement the "set ada" prefix command.  */
14085
14086 static void
14087 set_ada_command (char *arg, int from_tty)
14088 {
14089   printf_unfiltered (_(\
14090 "\"set ada\" must be followed by the name of a setting.\n"));
14091   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
14092 }
14093
14094 /* Implement the "show ada" prefix command.  */
14095
14096 static void
14097 show_ada_command (char *args, int from_tty)
14098 {
14099   cmd_show_list (show_ada_list, from_tty, "");
14100 }
14101
14102 static void
14103 initialize_ada_catchpoint_ops (void)
14104 {
14105   struct breakpoint_ops *ops;
14106
14107   initialize_breakpoint_ops ();
14108
14109   ops = &catch_exception_breakpoint_ops;
14110   *ops = bkpt_breakpoint_ops;
14111   ops->dtor = dtor_catch_exception;
14112   ops->allocate_location = allocate_location_catch_exception;
14113   ops->re_set = re_set_catch_exception;
14114   ops->check_status = check_status_catch_exception;
14115   ops->print_it = print_it_catch_exception;
14116   ops->print_one = print_one_catch_exception;
14117   ops->print_mention = print_mention_catch_exception;
14118   ops->print_recreate = print_recreate_catch_exception;
14119
14120   ops = &catch_exception_unhandled_breakpoint_ops;
14121   *ops = bkpt_breakpoint_ops;
14122   ops->dtor = dtor_catch_exception_unhandled;
14123   ops->allocate_location = allocate_location_catch_exception_unhandled;
14124   ops->re_set = re_set_catch_exception_unhandled;
14125   ops->check_status = check_status_catch_exception_unhandled;
14126   ops->print_it = print_it_catch_exception_unhandled;
14127   ops->print_one = print_one_catch_exception_unhandled;
14128   ops->print_mention = print_mention_catch_exception_unhandled;
14129   ops->print_recreate = print_recreate_catch_exception_unhandled;
14130
14131   ops = &catch_assert_breakpoint_ops;
14132   *ops = bkpt_breakpoint_ops;
14133   ops->dtor = dtor_catch_assert;
14134   ops->allocate_location = allocate_location_catch_assert;
14135   ops->re_set = re_set_catch_assert;
14136   ops->check_status = check_status_catch_assert;
14137   ops->print_it = print_it_catch_assert;
14138   ops->print_one = print_one_catch_assert;
14139   ops->print_mention = print_mention_catch_assert;
14140   ops->print_recreate = print_recreate_catch_assert;
14141 }
14142
14143 /* This module's 'new_objfile' observer.  */
14144
14145 static void
14146 ada_new_objfile_observer (struct objfile *objfile)
14147 {
14148   ada_clear_symbol_cache ();
14149 }
14150
14151 /* This module's 'free_objfile' observer.  */
14152
14153 static void
14154 ada_free_objfile_observer (struct objfile *objfile)
14155 {
14156   ada_clear_symbol_cache ();
14157 }
14158
14159 void
14160 _initialize_ada_language (void)
14161 {
14162   add_language (&ada_language_defn);
14163
14164   initialize_ada_catchpoint_ops ();
14165
14166   add_prefix_cmd ("ada", no_class, set_ada_command,
14167                   _("Prefix command for changing Ada-specfic settings"),
14168                   &set_ada_list, "set ada ", 0, &setlist);
14169
14170   add_prefix_cmd ("ada", no_class, show_ada_command,
14171                   _("Generic command for showing Ada-specific settings."),
14172                   &show_ada_list, "show ada ", 0, &showlist);
14173
14174   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14175                            &trust_pad_over_xvs, _("\
14176 Enable or disable an optimization trusting PAD types over XVS types"), _("\
14177 Show whether an optimization trusting PAD types over XVS types is activated"),
14178                            _("\
14179 This is related to the encoding used by the GNAT compiler.  The debugger\n\
14180 should normally trust the contents of PAD types, but certain older versions\n\
14181 of GNAT have a bug that sometimes causes the information in the PAD type\n\
14182 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
14183 work around this bug.  It is always safe to turn this option \"off\", but\n\
14184 this incurs a slight performance penalty, so it is recommended to NOT change\n\
14185 this option to \"off\" unless necessary."),
14186                             NULL, NULL, &set_ada_list, &show_ada_list);
14187
14188   add_setshow_boolean_cmd ("print-signatures", class_vars,
14189                            &print_signatures, _("\
14190 Enable or disable the output of formal and return types for functions in the \
14191 overloads selection menu"), _("\
14192 Show whether the output of formal and return types for functions in the \
14193 overloads selection menu is activated"),
14194                            NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14195
14196   add_catch_command ("exception", _("\
14197 Catch Ada exceptions, when raised.\n\
14198 With an argument, catch only exceptions with the given name."),
14199                      catch_ada_exception_command,
14200                      NULL,
14201                      CATCH_PERMANENT,
14202                      CATCH_TEMPORARY);
14203   add_catch_command ("assert", _("\
14204 Catch failed Ada assertions, when raised.\n\
14205 With an argument, catch only exceptions with the given name."),
14206                      catch_assert_command,
14207                      NULL,
14208                      CATCH_PERMANENT,
14209                      CATCH_TEMPORARY);
14210
14211   varsize_limit = 65536;
14212
14213   add_info ("exceptions", info_exceptions_command,
14214             _("\
14215 List all Ada exception names.\n\
14216 If a regular expression is passed as an argument, only those matching\n\
14217 the regular expression are listed."));
14218
14219   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
14220                   _("Set Ada maintenance-related variables."),
14221                   &maint_set_ada_cmdlist, "maintenance set ada ",
14222                   0/*allow-unknown*/, &maintenance_set_cmdlist);
14223
14224   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
14225                   _("Show Ada maintenance-related variables"),
14226                   &maint_show_ada_cmdlist, "maintenance show ada ",
14227                   0/*allow-unknown*/, &maintenance_show_cmdlist);
14228
14229   add_setshow_boolean_cmd
14230     ("ignore-descriptive-types", class_maintenance,
14231      &ada_ignore_descriptive_types_p,
14232      _("Set whether descriptive types generated by GNAT should be ignored."),
14233      _("Show whether descriptive types generated by GNAT should be ignored."),
14234      _("\
14235 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14236 DWARF attribute."),
14237      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14238
14239   obstack_init (&symbol_list_obstack);
14240
14241   decoded_names_store = htab_create_alloc
14242     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
14243      NULL, xcalloc, xfree);
14244
14245   /* The ada-lang observers.  */
14246   observer_attach_new_objfile (ada_new_objfile_observer);
14247   observer_attach_free_objfile (ada_free_objfile_observer);
14248   observer_attach_inferior_exit (ada_inferior_exit);
14249
14250   /* Setup various context-specific data.  */
14251   ada_inferior_data
14252     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
14253   ada_pspace_data_handle
14254     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14255 }