IA64: Migrate from 'regset_from_core_section' to 'iterate_over_regset_sections'
[platform/upstream/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3    Copyright (C) 1992-2014 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 "exceptions.h"
49 #include "annotate.h"
50 #include "valprint.h"
51 #include "source.h"
52 #include "observer.h"
53 #include "vec.h"
54 #include "stack.h"
55 #include "gdb_vecs.h"
56 #include "typeprint.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 int is_nonfunction (struct ada_symbol_info *, int);
113
114 static void add_defn_to_vec (struct obstack *, struct symbol *,
115                              const struct block *);
116
117 static int num_defns_collected (struct obstack *);
118
119 static struct ada_symbol_info *defns_collected (struct obstack *, int);
120
121 static struct value *resolve_subexp (struct expression **, int *, int,
122                                      struct type *);
123
124 static void replace_operator_with_call (struct expression **, int, int, int,
125                                         struct symbol *, const struct block *);
126
127 static int possible_user_operator_p (enum exp_opcode, struct value **);
128
129 static char *ada_op_name (enum exp_opcode);
130
131 static const char *ada_decoded_op_name (enum exp_opcode);
132
133 static int numeric_type_p (struct type *);
134
135 static int integer_type_p (struct type *);
136
137 static int scalar_type_p (struct type *);
138
139 static int discrete_type_p (struct type *);
140
141 static enum ada_renaming_category parse_old_style_renaming (struct type *,
142                                                             const char **,
143                                                             int *,
144                                                             const char **);
145
146 static struct symbol *find_old_style_renaming_symbol (const char *,
147                                                       const struct block *);
148
149 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
150                                                 int, int, int *);
151
152 static struct value *evaluate_subexp_type (struct expression *, int *);
153
154 static struct type *ada_find_parallel_type_with_name (struct type *,
155                                                       const char *);
156
157 static int is_dynamic_field (struct type *, int);
158
159 static struct type *to_fixed_variant_branch_type (struct type *,
160                                                   const gdb_byte *,
161                                                   CORE_ADDR, struct value *);
162
163 static struct type *to_fixed_array_type (struct type *, struct value *, int);
164
165 static struct type *to_fixed_range_type (struct type *, struct value *);
166
167 static struct type *to_static_fixed_type (struct type *);
168 static struct type *static_unwrap_type (struct type *type);
169
170 static struct value *unwrap_value (struct value *);
171
172 static struct type *constrained_packed_array_type (struct type *, long *);
173
174 static struct type *decode_constrained_packed_array_type (struct type *);
175
176 static long decode_packed_array_bitsize (struct type *);
177
178 static struct value *decode_constrained_packed_array (struct value *);
179
180 static int ada_is_packed_array_type  (struct type *);
181
182 static int ada_is_unconstrained_packed_array_type (struct type *);
183
184 static struct value *value_subscript_packed (struct value *, int,
185                                              struct value **);
186
187 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
188
189 static struct value *coerce_unspec_val_to_type (struct value *,
190                                                 struct type *);
191
192 static struct value *get_var_value (char *, char *);
193
194 static int lesseq_defined_than (struct symbol *, struct symbol *);
195
196 static int equiv_types (struct type *, struct type *);
197
198 static int is_name_suffix (const char *);
199
200 static int advance_wild_match (const char **, const char *, int);
201
202 static int wild_match (const char *, const char *);
203
204 static struct value *ada_coerce_ref (struct value *);
205
206 static LONGEST pos_atr (struct value *);
207
208 static struct value *value_pos_atr (struct type *, struct value *);
209
210 static struct value *value_val_atr (struct type *, struct value *);
211
212 static struct symbol *standard_lookup (const char *, const struct block *,
213                                        domain_enum);
214
215 static struct value *ada_search_struct_field (char *, struct value *, int,
216                                               struct type *);
217
218 static struct value *ada_value_primitive_field (struct value *, int, int,
219                                                 struct type *);
220
221 static int find_struct_field (const char *, struct type *, int,
222                               struct type **, int *, int *, int *, int *);
223
224 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
225                                                 struct value *);
226
227 static int ada_resolve_function (struct ada_symbol_info *, int,
228                                  struct value **, int, const char *,
229                                  struct type *);
230
231 static int ada_is_direct_array_type (struct type *);
232
233 static void ada_language_arch_info (struct gdbarch *,
234                                     struct language_arch_info *);
235
236 static void check_size (const struct type *);
237
238 static struct value *ada_index_struct_field (int, struct value *, int,
239                                              struct type *);
240
241 static struct value *assign_aggregate (struct value *, struct value *, 
242                                        struct expression *,
243                                        int *, enum noside);
244
245 static void aggregate_assign_from_choices (struct value *, struct value *, 
246                                            struct expression *,
247                                            int *, LONGEST *, int *,
248                                            int, LONGEST, LONGEST);
249
250 static void aggregate_assign_positional (struct value *, struct value *,
251                                          struct expression *,
252                                          int *, LONGEST *, int *, int,
253                                          LONGEST, LONGEST);
254
255
256 static void aggregate_assign_others (struct value *, struct value *,
257                                      struct expression *,
258                                      int *, LONGEST *, int, LONGEST, LONGEST);
259
260
261 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
262
263
264 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
265                                           int *, enum noside);
266
267 static void ada_forward_operator_length (struct expression *, int, int *,
268                                          int *);
269
270 static struct type *ada_find_any_type (const char *name);
271 \f
272
273 /* The result of a symbol lookup to be stored in our symbol cache.  */
274
275 struct cache_entry
276 {
277   /* The name used to perform the lookup.  */
278   const char *name;
279   /* The namespace used during the lookup.  */
280   domain_enum namespace;
281   /* The symbol returned by the lookup, or NULL if no matching symbol
282      was found.  */
283   struct symbol *sym;
284   /* The block where the symbol was found, or NULL if no matching
285      symbol was found.  */
286   const struct block *block;
287   /* A pointer to the next entry with the same hash.  */
288   struct cache_entry *next;
289 };
290
291 /* The Ada symbol cache, used to store the result of Ada-mode symbol
292    lookups in the course of executing the user's commands.
293
294    The cache is implemented using a simple, fixed-sized hash.
295    The size is fixed on the grounds that there are not likely to be
296    all that many symbols looked up during any given session, regardless
297    of the size of the symbol table.  If we decide to go to a resizable
298    table, let's just use the stuff from libiberty instead.  */
299
300 #define HASH_SIZE 1009
301
302 struct ada_symbol_cache
303 {
304   /* An obstack used to store the entries in our cache.  */
305   struct obstack cache_space;
306
307   /* The root of the hash table used to implement our symbol cache.  */
308   struct cache_entry *root[HASH_SIZE];
309 };
310
311 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
312
313 /* Maximum-sized dynamic type.  */
314 static unsigned int varsize_limit;
315
316 /* FIXME: brobecker/2003-09-17: No longer a const because it is
317    returned by a function that does not return a const char *.  */
318 static char *ada_completer_word_break_characters =
319 #ifdef VMS
320   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
321 #else
322   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
323 #endif
324
325 /* The name of the symbol to use to get the name of the main subprogram.  */
326 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
327   = "__gnat_ada_main_program_name";
328
329 /* Limit on the number of warnings to raise per expression evaluation.  */
330 static int warning_limit = 2;
331
332 /* Number of warning messages issued; reset to 0 by cleanups after
333    expression evaluation.  */
334 static int warnings_issued = 0;
335
336 static const char *known_runtime_file_name_patterns[] = {
337   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
338 };
339
340 static const char *known_auxiliary_function_name_patterns[] = {
341   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
342 };
343
344 /* Space for allocating results of ada_lookup_symbol_list.  */
345 static struct obstack symbol_list_obstack;
346
347 /* Maintenance-related settings for this module.  */
348
349 static struct cmd_list_element *maint_set_ada_cmdlist;
350 static struct cmd_list_element *maint_show_ada_cmdlist;
351
352 /* Implement the "maintenance set ada" (prefix) command.  */
353
354 static void
355 maint_set_ada_cmd (char *args, int from_tty)
356 {
357   help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
358              gdb_stdout);
359 }
360
361 /* Implement the "maintenance show ada" (prefix) command.  */
362
363 static void
364 maint_show_ada_cmd (char *args, int from_tty)
365 {
366   cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
367 }
368
369 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
370
371 static int ada_ignore_descriptive_types_p = 0;
372
373                         /* Inferior-specific data.  */
374
375 /* Per-inferior data for this module.  */
376
377 struct ada_inferior_data
378 {
379   /* The ada__tags__type_specific_data type, which is used when decoding
380      tagged types.  With older versions of GNAT, this type was directly
381      accessible through a component ("tsd") in the object tag.  But this
382      is no longer the case, so we cache it for each inferior.  */
383   struct type *tsd_type;
384
385   /* The exception_support_info data.  This data is used to determine
386      how to implement support for Ada exception catchpoints in a given
387      inferior.  */
388   const struct exception_support_info *exception_info;
389 };
390
391 /* Our key to this module's inferior data.  */
392 static const struct inferior_data *ada_inferior_data;
393
394 /* A cleanup routine for our inferior data.  */
395 static void
396 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
397 {
398   struct ada_inferior_data *data;
399
400   data = inferior_data (inf, ada_inferior_data);
401   if (data != NULL)
402     xfree (data);
403 }
404
405 /* Return our inferior data for the given inferior (INF).
406
407    This function always returns a valid pointer to an allocated
408    ada_inferior_data structure.  If INF's inferior data has not
409    been previously set, this functions creates a new one with all
410    fields set to zero, sets INF's inferior to it, and then returns
411    a pointer to that newly allocated ada_inferior_data.  */
412
413 static struct ada_inferior_data *
414 get_ada_inferior_data (struct inferior *inf)
415 {
416   struct ada_inferior_data *data;
417
418   data = inferior_data (inf, ada_inferior_data);
419   if (data == NULL)
420     {
421       data = XCNEW (struct ada_inferior_data);
422       set_inferior_data (inf, ada_inferior_data, data);
423     }
424
425   return data;
426 }
427
428 /* Perform all necessary cleanups regarding our module's inferior data
429    that is required after the inferior INF just exited.  */
430
431 static void
432 ada_inferior_exit (struct inferior *inf)
433 {
434   ada_inferior_data_cleanup (inf, NULL);
435   set_inferior_data (inf, ada_inferior_data, NULL);
436 }
437
438
439                         /* program-space-specific data.  */
440
441 /* This module's per-program-space data.  */
442 struct ada_pspace_data
443 {
444   /* The Ada symbol cache.  */
445   struct ada_symbol_cache *sym_cache;
446 };
447
448 /* Key to our per-program-space data.  */
449 static const struct program_space_data *ada_pspace_data_handle;
450
451 /* Return this module's data for the given program space (PSPACE).
452    If not is found, add a zero'ed one now.
453
454    This function always returns a valid object.  */
455
456 static struct ada_pspace_data *
457 get_ada_pspace_data (struct program_space *pspace)
458 {
459   struct ada_pspace_data *data;
460
461   data = program_space_data (pspace, ada_pspace_data_handle);
462   if (data == NULL)
463     {
464       data = XCNEW (struct ada_pspace_data);
465       set_program_space_data (pspace, ada_pspace_data_handle, data);
466     }
467
468   return data;
469 }
470
471 /* The cleanup callback for this module's per-program-space data.  */
472
473 static void
474 ada_pspace_data_cleanup (struct program_space *pspace, void *data)
475 {
476   struct ada_pspace_data *pspace_data = data;
477
478   if (pspace_data->sym_cache != NULL)
479     ada_free_symbol_cache (pspace_data->sym_cache);
480   xfree (pspace_data);
481 }
482
483                         /* Utilities */
484
485 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
486    all typedef layers have been peeled.  Otherwise, return TYPE.
487
488    Normally, we really expect a typedef type to only have 1 typedef layer.
489    In other words, we really expect the target type of a typedef type to be
490    a non-typedef type.  This is particularly true for Ada units, because
491    the language does not have a typedef vs not-typedef distinction.
492    In that respect, the Ada compiler has been trying to eliminate as many
493    typedef definitions in the debugging information, since they generally
494    do not bring any extra information (we still use typedef under certain
495    circumstances related mostly to the GNAT encoding).
496
497    Unfortunately, we have seen situations where the debugging information
498    generated by the compiler leads to such multiple typedef layers.  For
499    instance, consider the following example with stabs:
500
501      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
502      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
503
504    This is an error in the debugging information which causes type
505    pck__float_array___XUP to be defined twice, and the second time,
506    it is defined as a typedef of a typedef.
507
508    This is on the fringe of legality as far as debugging information is
509    concerned, and certainly unexpected.  But it is easy to handle these
510    situations correctly, so we can afford to be lenient in this case.  */
511
512 static struct type *
513 ada_typedef_target_type (struct type *type)
514 {
515   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
516     type = TYPE_TARGET_TYPE (type);
517   return type;
518 }
519
520 /* Given DECODED_NAME a string holding a symbol name in its
521    decoded form (ie using the Ada dotted notation), returns
522    its unqualified name.  */
523
524 static const char *
525 ada_unqualified_name (const char *decoded_name)
526 {
527   const char *result = strrchr (decoded_name, '.');
528
529   if (result != NULL)
530     result++;                   /* Skip the dot...  */
531   else
532     result = decoded_name;
533
534   return result;
535 }
536
537 /* Return a string starting with '<', followed by STR, and '>'.
538    The result is good until the next call.  */
539
540 static char *
541 add_angle_brackets (const char *str)
542 {
543   static char *result = NULL;
544
545   xfree (result);
546   result = xstrprintf ("<%s>", str);
547   return result;
548 }
549
550 static char *
551 ada_get_gdb_completer_word_break_characters (void)
552 {
553   return ada_completer_word_break_characters;
554 }
555
556 /* Print an array element index using the Ada syntax.  */
557
558 static void
559 ada_print_array_index (struct value *index_value, struct ui_file *stream,
560                        const struct value_print_options *options)
561 {
562   LA_VALUE_PRINT (index_value, stream, options);
563   fprintf_filtered (stream, " => ");
564 }
565
566 /* Assuming VECT points to an array of *SIZE objects of size
567    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
568    updating *SIZE as necessary and returning the (new) array.  */
569
570 void *
571 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
572 {
573   if (*size < min_size)
574     {
575       *size *= 2;
576       if (*size < min_size)
577         *size = min_size;
578       vect = xrealloc (vect, *size * element_size);
579     }
580   return vect;
581 }
582
583 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
584    suffix of FIELD_NAME beginning "___".  */
585
586 static int
587 field_name_match (const char *field_name, const char *target)
588 {
589   int len = strlen (target);
590
591   return
592     (strncmp (field_name, target, len) == 0
593      && (field_name[len] == '\0'
594          || (strncmp (field_name + len, "___", 3) == 0
595              && strcmp (field_name + strlen (field_name) - 6,
596                         "___XVN") != 0)));
597 }
598
599
600 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
601    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
602    and return its index.  This function also handles fields whose name
603    have ___ suffixes because the compiler sometimes alters their name
604    by adding such a suffix to represent fields with certain constraints.
605    If the field could not be found, return a negative number if
606    MAYBE_MISSING is set.  Otherwise raise an error.  */
607
608 int
609 ada_get_field_index (const struct type *type, const char *field_name,
610                      int maybe_missing)
611 {
612   int fieldno;
613   struct type *struct_type = check_typedef ((struct type *) type);
614
615   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
616     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
617       return fieldno;
618
619   if (!maybe_missing)
620     error (_("Unable to find field %s in struct %s.  Aborting"),
621            field_name, TYPE_NAME (struct_type));
622
623   return -1;
624 }
625
626 /* The length of the prefix of NAME prior to any "___" suffix.  */
627
628 int
629 ada_name_prefix_len (const char *name)
630 {
631   if (name == NULL)
632     return 0;
633   else
634     {
635       const char *p = strstr (name, "___");
636
637       if (p == NULL)
638         return strlen (name);
639       else
640         return p - name;
641     }
642 }
643
644 /* Return non-zero if SUFFIX is a suffix of STR.
645    Return zero if STR is null.  */
646
647 static int
648 is_suffix (const char *str, const char *suffix)
649 {
650   int len1, len2;
651
652   if (str == NULL)
653     return 0;
654   len1 = strlen (str);
655   len2 = strlen (suffix);
656   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
657 }
658
659 /* The contents of value VAL, treated as a value of type TYPE.  The
660    result is an lval in memory if VAL is.  */
661
662 static struct value *
663 coerce_unspec_val_to_type (struct value *val, struct type *type)
664 {
665   type = ada_check_typedef (type);
666   if (value_type (val) == type)
667     return val;
668   else
669     {
670       struct value *result;
671
672       /* Make sure that the object size is not unreasonable before
673          trying to allocate some memory for it.  */
674       check_size (type);
675
676       if (value_lazy (val)
677           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
678         result = allocate_value_lazy (type);
679       else
680         {
681           result = allocate_value (type);
682           value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
683         }
684       set_value_component_location (result, val);
685       set_value_bitsize (result, value_bitsize (val));
686       set_value_bitpos (result, value_bitpos (val));
687       set_value_address (result, value_address (val));
688       return result;
689     }
690 }
691
692 static const gdb_byte *
693 cond_offset_host (const gdb_byte *valaddr, long offset)
694 {
695   if (valaddr == NULL)
696     return NULL;
697   else
698     return valaddr + offset;
699 }
700
701 static CORE_ADDR
702 cond_offset_target (CORE_ADDR address, long offset)
703 {
704   if (address == 0)
705     return 0;
706   else
707     return address + offset;
708 }
709
710 /* Issue a warning (as for the definition of warning in utils.c, but
711    with exactly one argument rather than ...), unless the limit on the
712    number of warnings has passed during the evaluation of the current
713    expression.  */
714
715 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
716    provided by "complaint".  */
717 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
718
719 static void
720 lim_warning (const char *format, ...)
721 {
722   va_list args;
723
724   va_start (args, format);
725   warnings_issued += 1;
726   if (warnings_issued <= warning_limit)
727     vwarning (format, args);
728
729   va_end (args);
730 }
731
732 /* Issue an error if the size of an object of type T is unreasonable,
733    i.e. if it would be a bad idea to allocate a value of this type in
734    GDB.  */
735
736 static void
737 check_size (const struct type *type)
738 {
739   if (TYPE_LENGTH (type) > varsize_limit)
740     error (_("object size is larger than varsize-limit"));
741 }
742
743 /* Maximum value of a SIZE-byte signed integer type.  */
744 static LONGEST
745 max_of_size (int size)
746 {
747   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
748
749   return top_bit | (top_bit - 1);
750 }
751
752 /* Minimum value of a SIZE-byte signed integer type.  */
753 static LONGEST
754 min_of_size (int size)
755 {
756   return -max_of_size (size) - 1;
757 }
758
759 /* Maximum value of a SIZE-byte unsigned integer type.  */
760 static ULONGEST
761 umax_of_size (int size)
762 {
763   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
764
765   return top_bit | (top_bit - 1);
766 }
767
768 /* Maximum value of integral type T, as a signed quantity.  */
769 static LONGEST
770 max_of_type (struct type *t)
771 {
772   if (TYPE_UNSIGNED (t))
773     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
774   else
775     return max_of_size (TYPE_LENGTH (t));
776 }
777
778 /* Minimum value of integral type T, as a signed quantity.  */
779 static LONGEST
780 min_of_type (struct type *t)
781 {
782   if (TYPE_UNSIGNED (t)) 
783     return 0;
784   else
785     return min_of_size (TYPE_LENGTH (t));
786 }
787
788 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
789 LONGEST
790 ada_discrete_type_high_bound (struct type *type)
791 {
792   type = resolve_dynamic_type (type, 0);
793   switch (TYPE_CODE (type))
794     {
795     case TYPE_CODE_RANGE:
796       return TYPE_HIGH_BOUND (type);
797     case TYPE_CODE_ENUM:
798       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
799     case TYPE_CODE_BOOL:
800       return 1;
801     case TYPE_CODE_CHAR:
802     case TYPE_CODE_INT:
803       return max_of_type (type);
804     default:
805       error (_("Unexpected type in ada_discrete_type_high_bound."));
806     }
807 }
808
809 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
810 LONGEST
811 ada_discrete_type_low_bound (struct type *type)
812 {
813   type = resolve_dynamic_type (type, 0);
814   switch (TYPE_CODE (type))
815     {
816     case TYPE_CODE_RANGE:
817       return TYPE_LOW_BOUND (type);
818     case TYPE_CODE_ENUM:
819       return TYPE_FIELD_ENUMVAL (type, 0);
820     case TYPE_CODE_BOOL:
821       return 0;
822     case TYPE_CODE_CHAR:
823     case TYPE_CODE_INT:
824       return min_of_type (type);
825     default:
826       error (_("Unexpected type in ada_discrete_type_low_bound."));
827     }
828 }
829
830 /* The identity on non-range types.  For range types, the underlying
831    non-range scalar type.  */
832
833 static struct type *
834 get_base_type (struct type *type)
835 {
836   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
837     {
838       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
839         return type;
840       type = TYPE_TARGET_TYPE (type);
841     }
842   return type;
843 }
844
845 /* Return a decoded version of the given VALUE.  This means returning
846    a value whose type is obtained by applying all the GNAT-specific
847    encondings, making the resulting type a static but standard description
848    of the initial type.  */
849
850 struct value *
851 ada_get_decoded_value (struct value *value)
852 {
853   struct type *type = ada_check_typedef (value_type (value));
854
855   if (ada_is_array_descriptor_type (type)
856       || (ada_is_constrained_packed_array_type (type)
857           && TYPE_CODE (type) != TYPE_CODE_PTR))
858     {
859       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
860         value = ada_coerce_to_simple_array_ptr (value);
861       else
862         value = ada_coerce_to_simple_array (value);
863     }
864   else
865     value = ada_to_fixed_value (value);
866
867   return value;
868 }
869
870 /* Same as ada_get_decoded_value, but with the given TYPE.
871    Because there is no associated actual value for this type,
872    the resulting type might be a best-effort approximation in
873    the case of dynamic types.  */
874
875 struct type *
876 ada_get_decoded_type (struct type *type)
877 {
878   type = to_static_fixed_type (type);
879   if (ada_is_constrained_packed_array_type (type))
880     type = ada_coerce_to_simple_array_type (type);
881   return type;
882 }
883
884 \f
885
886                                 /* Language Selection */
887
888 /* If the main program is in Ada, return language_ada, otherwise return LANG
889    (the main program is in Ada iif the adainit symbol is found).  */
890
891 enum language
892 ada_update_initial_language (enum language lang)
893 {
894   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
895                              (struct objfile *) NULL).minsym != NULL)
896     return language_ada;
897
898   return lang;
899 }
900
901 /* If the main procedure is written in Ada, then return its name.
902    The result is good until the next call.  Return NULL if the main
903    procedure doesn't appear to be in Ada.  */
904
905 char *
906 ada_main_name (void)
907 {
908   struct bound_minimal_symbol msym;
909   static char *main_program_name = NULL;
910
911   /* For Ada, the name of the main procedure is stored in a specific
912      string constant, generated by the binder.  Look for that symbol,
913      extract its address, and then read that string.  If we didn't find
914      that string, then most probably the main procedure is not written
915      in Ada.  */
916   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
917
918   if (msym.minsym != NULL)
919     {
920       CORE_ADDR main_program_name_addr;
921       int err_code;
922
923       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
924       if (main_program_name_addr == 0)
925         error (_("Invalid address for Ada main program name."));
926
927       xfree (main_program_name);
928       target_read_string (main_program_name_addr, &main_program_name,
929                           1024, &err_code);
930
931       if (err_code != 0)
932         return NULL;
933       return main_program_name;
934     }
935
936   /* The main procedure doesn't seem to be in Ada.  */
937   return NULL;
938 }
939 \f
940                                 /* Symbols */
941
942 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
943    of NULLs.  */
944
945 const struct ada_opname_map ada_opname_table[] = {
946   {"Oadd", "\"+\"", BINOP_ADD},
947   {"Osubtract", "\"-\"", BINOP_SUB},
948   {"Omultiply", "\"*\"", BINOP_MUL},
949   {"Odivide", "\"/\"", BINOP_DIV},
950   {"Omod", "\"mod\"", BINOP_MOD},
951   {"Orem", "\"rem\"", BINOP_REM},
952   {"Oexpon", "\"**\"", BINOP_EXP},
953   {"Olt", "\"<\"", BINOP_LESS},
954   {"Ole", "\"<=\"", BINOP_LEQ},
955   {"Ogt", "\">\"", BINOP_GTR},
956   {"Oge", "\">=\"", BINOP_GEQ},
957   {"Oeq", "\"=\"", BINOP_EQUAL},
958   {"One", "\"/=\"", BINOP_NOTEQUAL},
959   {"Oand", "\"and\"", BINOP_BITWISE_AND},
960   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
961   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
962   {"Oconcat", "\"&\"", BINOP_CONCAT},
963   {"Oabs", "\"abs\"", UNOP_ABS},
964   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
965   {"Oadd", "\"+\"", UNOP_PLUS},
966   {"Osubtract", "\"-\"", UNOP_NEG},
967   {NULL, NULL}
968 };
969
970 /* The "encoded" form of DECODED, according to GNAT conventions.
971    The result is valid until the next call to ada_encode.  */
972
973 char *
974 ada_encode (const char *decoded)
975 {
976   static char *encoding_buffer = NULL;
977   static size_t encoding_buffer_size = 0;
978   const char *p;
979   int k;
980
981   if (decoded == NULL)
982     return NULL;
983
984   GROW_VECT (encoding_buffer, encoding_buffer_size,
985              2 * strlen (decoded) + 10);
986
987   k = 0;
988   for (p = decoded; *p != '\0'; p += 1)
989     {
990       if (*p == '.')
991         {
992           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
993           k += 2;
994         }
995       else if (*p == '"')
996         {
997           const struct ada_opname_map *mapping;
998
999           for (mapping = ada_opname_table;
1000                mapping->encoded != NULL
1001                && strncmp (mapping->decoded, p,
1002                            strlen (mapping->decoded)) != 0; mapping += 1)
1003             ;
1004           if (mapping->encoded == NULL)
1005             error (_("invalid Ada operator name: %s"), p);
1006           strcpy (encoding_buffer + k, mapping->encoded);
1007           k += strlen (mapping->encoded);
1008           break;
1009         }
1010       else
1011         {
1012           encoding_buffer[k] = *p;
1013           k += 1;
1014         }
1015     }
1016
1017   encoding_buffer[k] = '\0';
1018   return encoding_buffer;
1019 }
1020
1021 /* Return NAME folded to lower case, or, if surrounded by single
1022    quotes, unfolded, but with the quotes stripped away.  Result good
1023    to next call.  */
1024
1025 char *
1026 ada_fold_name (const char *name)
1027 {
1028   static char *fold_buffer = NULL;
1029   static size_t fold_buffer_size = 0;
1030
1031   int len = strlen (name);
1032   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1033
1034   if (name[0] == '\'')
1035     {
1036       strncpy (fold_buffer, name + 1, len - 2);
1037       fold_buffer[len - 2] = '\000';
1038     }
1039   else
1040     {
1041       int i;
1042
1043       for (i = 0; i <= len; i += 1)
1044         fold_buffer[i] = tolower (name[i]);
1045     }
1046
1047   return fold_buffer;
1048 }
1049
1050 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1051
1052 static int
1053 is_lower_alphanum (const char c)
1054 {
1055   return (isdigit (c) || (isalpha (c) && islower (c)));
1056 }
1057
1058 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1059    This function saves in LEN the length of that same symbol name but
1060    without either of these suffixes:
1061      . .{DIGIT}+
1062      . ${DIGIT}+
1063      . ___{DIGIT}+
1064      . __{DIGIT}+.
1065
1066    These are suffixes introduced by the compiler for entities such as
1067    nested subprogram for instance, in order to avoid name clashes.
1068    They do not serve any purpose for the debugger.  */
1069
1070 static void
1071 ada_remove_trailing_digits (const char *encoded, int *len)
1072 {
1073   if (*len > 1 && isdigit (encoded[*len - 1]))
1074     {
1075       int i = *len - 2;
1076
1077       while (i > 0 && isdigit (encoded[i]))
1078         i--;
1079       if (i >= 0 && encoded[i] == '.')
1080         *len = i;
1081       else if (i >= 0 && encoded[i] == '$')
1082         *len = i;
1083       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
1084         *len = i - 2;
1085       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
1086         *len = i - 1;
1087     }
1088 }
1089
1090 /* Remove the suffix introduced by the compiler for protected object
1091    subprograms.  */
1092
1093 static void
1094 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1095 {
1096   /* Remove trailing N.  */
1097
1098   /* Protected entry subprograms are broken into two
1099      separate subprograms: The first one is unprotected, and has
1100      a 'N' suffix; the second is the protected version, and has
1101      the 'P' suffix.  The second calls the first one after handling
1102      the protection.  Since the P subprograms are internally generated,
1103      we leave these names undecoded, giving the user a clue that this
1104      entity is internal.  */
1105
1106   if (*len > 1
1107       && encoded[*len - 1] == 'N'
1108       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1109     *len = *len - 1;
1110 }
1111
1112 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1113
1114 static void
1115 ada_remove_Xbn_suffix (const char *encoded, int *len)
1116 {
1117   int i = *len - 1;
1118
1119   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1120     i--;
1121
1122   if (encoded[i] != 'X')
1123     return;
1124
1125   if (i == 0)
1126     return;
1127
1128   if (isalnum (encoded[i-1]))
1129     *len = i;
1130 }
1131
1132 /* If ENCODED follows the GNAT entity encoding conventions, then return
1133    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1134    replaced by ENCODED.
1135
1136    The resulting string is valid until the next call of ada_decode.
1137    If the string is unchanged by decoding, the original string pointer
1138    is returned.  */
1139
1140 const char *
1141 ada_decode (const char *encoded)
1142 {
1143   int i, j;
1144   int len0;
1145   const char *p;
1146   char *decoded;
1147   int at_start_name;
1148   static char *decoding_buffer = NULL;
1149   static size_t decoding_buffer_size = 0;
1150
1151   /* The name of the Ada main procedure starts with "_ada_".
1152      This prefix is not part of the decoded name, so skip this part
1153      if we see this prefix.  */
1154   if (strncmp (encoded, "_ada_", 5) == 0)
1155     encoded += 5;
1156
1157   /* If the name starts with '_', then it is not a properly encoded
1158      name, so do not attempt to decode it.  Similarly, if the name
1159      starts with '<', the name should not be decoded.  */
1160   if (encoded[0] == '_' || encoded[0] == '<')
1161     goto Suppress;
1162
1163   len0 = strlen (encoded);
1164
1165   ada_remove_trailing_digits (encoded, &len0);
1166   ada_remove_po_subprogram_suffix (encoded, &len0);
1167
1168   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1169      the suffix is located before the current "end" of ENCODED.  We want
1170      to avoid re-matching parts of ENCODED that have previously been
1171      marked as discarded (by decrementing LEN0).  */
1172   p = strstr (encoded, "___");
1173   if (p != NULL && p - encoded < len0 - 3)
1174     {
1175       if (p[3] == 'X')
1176         len0 = p - encoded;
1177       else
1178         goto Suppress;
1179     }
1180
1181   /* Remove any trailing TKB suffix.  It tells us that this symbol
1182      is for the body of a task, but that information does not actually
1183      appear in the decoded name.  */
1184
1185   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
1186     len0 -= 3;
1187
1188   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1189      from the TKB suffix because it is used for non-anonymous task
1190      bodies.  */
1191
1192   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1193     len0 -= 2;
1194
1195   /* Remove trailing "B" suffixes.  */
1196   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1197
1198   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
1199     len0 -= 1;
1200
1201   /* Make decoded big enough for possible expansion by operator name.  */
1202
1203   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1204   decoded = decoding_buffer;
1205
1206   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1207
1208   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1209     {
1210       i = len0 - 2;
1211       while ((i >= 0 && isdigit (encoded[i]))
1212              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1213         i -= 1;
1214       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1215         len0 = i - 1;
1216       else if (encoded[i] == '$')
1217         len0 = i;
1218     }
1219
1220   /* The first few characters that are not alphabetic are not part
1221      of any encoding we use, so we can copy them over verbatim.  */
1222
1223   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1224     decoded[j] = encoded[i];
1225
1226   at_start_name = 1;
1227   while (i < len0)
1228     {
1229       /* Is this a symbol function?  */
1230       if (at_start_name && encoded[i] == 'O')
1231         {
1232           int k;
1233
1234           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1235             {
1236               int op_len = strlen (ada_opname_table[k].encoded);
1237               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1238                             op_len - 1) == 0)
1239                   && !isalnum (encoded[i + op_len]))
1240                 {
1241                   strcpy (decoded + j, ada_opname_table[k].decoded);
1242                   at_start_name = 0;
1243                   i += op_len;
1244                   j += strlen (ada_opname_table[k].decoded);
1245                   break;
1246                 }
1247             }
1248           if (ada_opname_table[k].encoded != NULL)
1249             continue;
1250         }
1251       at_start_name = 0;
1252
1253       /* Replace "TK__" with "__", which will eventually be translated
1254          into "." (just below).  */
1255
1256       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1257         i += 2;
1258
1259       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1260          be translated into "." (just below).  These are internal names
1261          generated for anonymous blocks inside which our symbol is nested.  */
1262
1263       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1264           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1265           && isdigit (encoded [i+4]))
1266         {
1267           int k = i + 5;
1268           
1269           while (k < len0 && isdigit (encoded[k]))
1270             k++;  /* Skip any extra digit.  */
1271
1272           /* Double-check that the "__B_{DIGITS}+" sequence we found
1273              is indeed followed by "__".  */
1274           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1275             i = k;
1276         }
1277
1278       /* Remove _E{DIGITS}+[sb] */
1279
1280       /* Just as for protected object subprograms, there are 2 categories
1281          of subprograms created by the compiler for each entry.  The first
1282          one implements the actual entry code, and has a suffix following
1283          the convention above; the second one implements the barrier and
1284          uses the same convention as above, except that the 'E' is replaced
1285          by a 'B'.
1286
1287          Just as above, we do not decode the name of barrier functions
1288          to give the user a clue that the code he is debugging has been
1289          internally generated.  */
1290
1291       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1292           && isdigit (encoded[i+2]))
1293         {
1294           int k = i + 3;
1295
1296           while (k < len0 && isdigit (encoded[k]))
1297             k++;
1298
1299           if (k < len0
1300               && (encoded[k] == 'b' || encoded[k] == 's'))
1301             {
1302               k++;
1303               /* Just as an extra precaution, make sure that if this
1304                  suffix is followed by anything else, it is a '_'.
1305                  Otherwise, we matched this sequence by accident.  */
1306               if (k == len0
1307                   || (k < len0 && encoded[k] == '_'))
1308                 i = k;
1309             }
1310         }
1311
1312       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1313          the GNAT front-end in protected object subprograms.  */
1314
1315       if (i < len0 + 3
1316           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1317         {
1318           /* Backtrack a bit up until we reach either the begining of
1319              the encoded name, or "__".  Make sure that we only find
1320              digits or lowercase characters.  */
1321           const char *ptr = encoded + i - 1;
1322
1323           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1324             ptr--;
1325           if (ptr < encoded
1326               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1327             i++;
1328         }
1329
1330       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1331         {
1332           /* This is a X[bn]* sequence not separated from the previous
1333              part of the name with a non-alpha-numeric character (in other
1334              words, immediately following an alpha-numeric character), then
1335              verify that it is placed at the end of the encoded name.  If
1336              not, then the encoding is not valid and we should abort the
1337              decoding.  Otherwise, just skip it, it is used in body-nested
1338              package names.  */
1339           do
1340             i += 1;
1341           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1342           if (i < len0)
1343             goto Suppress;
1344         }
1345       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1346         {
1347          /* Replace '__' by '.'.  */
1348           decoded[j] = '.';
1349           at_start_name = 1;
1350           i += 2;
1351           j += 1;
1352         }
1353       else
1354         {
1355           /* It's a character part of the decoded name, so just copy it
1356              over.  */
1357           decoded[j] = encoded[i];
1358           i += 1;
1359           j += 1;
1360         }
1361     }
1362   decoded[j] = '\000';
1363
1364   /* Decoded names should never contain any uppercase character.
1365      Double-check this, and abort the decoding if we find one.  */
1366
1367   for (i = 0; decoded[i] != '\0'; i += 1)
1368     if (isupper (decoded[i]) || decoded[i] == ' ')
1369       goto Suppress;
1370
1371   if (strcmp (decoded, encoded) == 0)
1372     return encoded;
1373   else
1374     return decoded;
1375
1376 Suppress:
1377   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1378   decoded = decoding_buffer;
1379   if (encoded[0] == '<')
1380     strcpy (decoded, encoded);
1381   else
1382     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1383   return decoded;
1384
1385 }
1386
1387 /* Table for keeping permanent unique copies of decoded names.  Once
1388    allocated, names in this table are never released.  While this is a
1389    storage leak, it should not be significant unless there are massive
1390    changes in the set of decoded names in successive versions of a 
1391    symbol table loaded during a single session.  */
1392 static struct htab *decoded_names_store;
1393
1394 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1395    in the language-specific part of GSYMBOL, if it has not been
1396    previously computed.  Tries to save the decoded name in the same
1397    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1398    in any case, the decoded symbol has a lifetime at least that of
1399    GSYMBOL).
1400    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1401    const, but nevertheless modified to a semantically equivalent form
1402    when a decoded name is cached in it.  */
1403
1404 const char *
1405 ada_decode_symbol (const struct general_symbol_info *arg)
1406 {
1407   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1408   const char **resultp =
1409     &gsymbol->language_specific.mangled_lang.demangled_name;
1410
1411   if (!gsymbol->ada_mangled)
1412     {
1413       const char *decoded = ada_decode (gsymbol->name);
1414       struct obstack *obstack = gsymbol->language_specific.obstack;
1415
1416       gsymbol->ada_mangled = 1;
1417
1418       if (obstack != NULL)
1419         *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1420       else
1421         {
1422           /* Sometimes, we can't find a corresponding objfile, in
1423              which case, we put the result on the heap.  Since we only
1424              decode when needed, we hope this usually does not cause a
1425              significant memory leak (FIXME).  */
1426
1427           char **slot = (char **) htab_find_slot (decoded_names_store,
1428                                                   decoded, INSERT);
1429
1430           if (*slot == NULL)
1431             *slot = xstrdup (decoded);
1432           *resultp = *slot;
1433         }
1434     }
1435
1436   return *resultp;
1437 }
1438
1439 static char *
1440 ada_la_decode (const char *encoded, int options)
1441 {
1442   return xstrdup (ada_decode (encoded));
1443 }
1444
1445 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1446    suffixes that encode debugging information or leading _ada_ on
1447    SYM_NAME (see is_name_suffix commentary for the debugging
1448    information that is ignored).  If WILD, then NAME need only match a
1449    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1450    either argument is NULL.  */
1451
1452 static int
1453 match_name (const char *sym_name, const char *name, int wild)
1454 {
1455   if (sym_name == NULL || name == NULL)
1456     return 0;
1457   else if (wild)
1458     return wild_match (sym_name, name) == 0;
1459   else
1460     {
1461       int len_name = strlen (name);
1462
1463       return (strncmp (sym_name, name, len_name) == 0
1464               && is_name_suffix (sym_name + len_name))
1465         || (strncmp (sym_name, "_ada_", 5) == 0
1466             && strncmp (sym_name + 5, name, len_name) == 0
1467             && is_name_suffix (sym_name + len_name + 5));
1468     }
1469 }
1470 \f
1471
1472                                 /* Arrays */
1473
1474 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1475    generated by the GNAT compiler to describe the index type used
1476    for each dimension of an array, check whether it follows the latest
1477    known encoding.  If not, fix it up to conform to the latest encoding.
1478    Otherwise, do nothing.  This function also does nothing if
1479    INDEX_DESC_TYPE is NULL.
1480
1481    The GNAT encoding used to describle the array index type evolved a bit.
1482    Initially, the information would be provided through the name of each
1483    field of the structure type only, while the type of these fields was
1484    described as unspecified and irrelevant.  The debugger was then expected
1485    to perform a global type lookup using the name of that field in order
1486    to get access to the full index type description.  Because these global
1487    lookups can be very expensive, the encoding was later enhanced to make
1488    the global lookup unnecessary by defining the field type as being
1489    the full index type description.
1490
1491    The purpose of this routine is to allow us to support older versions
1492    of the compiler by detecting the use of the older encoding, and by
1493    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1494    we essentially replace each field's meaningless type by the associated
1495    index subtype).  */
1496
1497 void
1498 ada_fixup_array_indexes_type (struct type *index_desc_type)
1499 {
1500   int i;
1501
1502   if (index_desc_type == NULL)
1503     return;
1504   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1505
1506   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1507      to check one field only, no need to check them all).  If not, return
1508      now.
1509
1510      If our INDEX_DESC_TYPE was generated using the older encoding,
1511      the field type should be a meaningless integer type whose name
1512      is not equal to the field name.  */
1513   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1514       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1515                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1516     return;
1517
1518   /* Fixup each field of INDEX_DESC_TYPE.  */
1519   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1520    {
1521      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1522      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1523
1524      if (raw_type)
1525        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1526    }
1527 }
1528
1529 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1530
1531 static char *bound_name[] = {
1532   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1533   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1534 };
1535
1536 /* Maximum number of array dimensions we are prepared to handle.  */
1537
1538 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1539
1540
1541 /* The desc_* routines return primitive portions of array descriptors
1542    (fat pointers).  */
1543
1544 /* The descriptor or array type, if any, indicated by TYPE; removes
1545    level of indirection, if needed.  */
1546
1547 static struct type *
1548 desc_base_type (struct type *type)
1549 {
1550   if (type == NULL)
1551     return NULL;
1552   type = ada_check_typedef (type);
1553   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1554     type = ada_typedef_target_type (type);
1555
1556   if (type != NULL
1557       && (TYPE_CODE (type) == TYPE_CODE_PTR
1558           || TYPE_CODE (type) == TYPE_CODE_REF))
1559     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1560   else
1561     return type;
1562 }
1563
1564 /* True iff TYPE indicates a "thin" array pointer type.  */
1565
1566 static int
1567 is_thin_pntr (struct type *type)
1568 {
1569   return
1570     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1571     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1572 }
1573
1574 /* The descriptor type for thin pointer type TYPE.  */
1575
1576 static struct type *
1577 thin_descriptor_type (struct type *type)
1578 {
1579   struct type *base_type = desc_base_type (type);
1580
1581   if (base_type == NULL)
1582     return NULL;
1583   if (is_suffix (ada_type_name (base_type), "___XVE"))
1584     return base_type;
1585   else
1586     {
1587       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1588
1589       if (alt_type == NULL)
1590         return base_type;
1591       else
1592         return alt_type;
1593     }
1594 }
1595
1596 /* A pointer to the array data for thin-pointer value VAL.  */
1597
1598 static struct value *
1599 thin_data_pntr (struct value *val)
1600 {
1601   struct type *type = ada_check_typedef (value_type (val));
1602   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1603
1604   data_type = lookup_pointer_type (data_type);
1605
1606   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1607     return value_cast (data_type, value_copy (val));
1608   else
1609     return value_from_longest (data_type, value_address (val));
1610 }
1611
1612 /* True iff TYPE indicates a "thick" array pointer type.  */
1613
1614 static int
1615 is_thick_pntr (struct type *type)
1616 {
1617   type = desc_base_type (type);
1618   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1619           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1620 }
1621
1622 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1623    pointer to one, the type of its bounds data; otherwise, NULL.  */
1624
1625 static struct type *
1626 desc_bounds_type (struct type *type)
1627 {
1628   struct type *r;
1629
1630   type = desc_base_type (type);
1631
1632   if (type == NULL)
1633     return NULL;
1634   else if (is_thin_pntr (type))
1635     {
1636       type = thin_descriptor_type (type);
1637       if (type == NULL)
1638         return NULL;
1639       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1640       if (r != NULL)
1641         return ada_check_typedef (r);
1642     }
1643   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1644     {
1645       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1646       if (r != NULL)
1647         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1648     }
1649   return NULL;
1650 }
1651
1652 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1653    one, a pointer to its bounds data.   Otherwise NULL.  */
1654
1655 static struct value *
1656 desc_bounds (struct value *arr)
1657 {
1658   struct type *type = ada_check_typedef (value_type (arr));
1659
1660   if (is_thin_pntr (type))
1661     {
1662       struct type *bounds_type =
1663         desc_bounds_type (thin_descriptor_type (type));
1664       LONGEST addr;
1665
1666       if (bounds_type == NULL)
1667         error (_("Bad GNAT array descriptor"));
1668
1669       /* NOTE: The following calculation is not really kosher, but
1670          since desc_type is an XVE-encoded type (and shouldn't be),
1671          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1672       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1673         addr = value_as_long (arr);
1674       else
1675         addr = value_address (arr);
1676
1677       return
1678         value_from_longest (lookup_pointer_type (bounds_type),
1679                             addr - TYPE_LENGTH (bounds_type));
1680     }
1681
1682   else if (is_thick_pntr (type))
1683     {
1684       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1685                                                _("Bad GNAT array descriptor"));
1686       struct type *p_bounds_type = value_type (p_bounds);
1687
1688       if (p_bounds_type
1689           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1690         {
1691           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1692
1693           if (TYPE_STUB (target_type))
1694             p_bounds = value_cast (lookup_pointer_type
1695                                    (ada_check_typedef (target_type)),
1696                                    p_bounds);
1697         }
1698       else
1699         error (_("Bad GNAT array descriptor"));
1700
1701       return p_bounds;
1702     }
1703   else
1704     return NULL;
1705 }
1706
1707 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1708    position of the field containing the address of the bounds data.  */
1709
1710 static int
1711 fat_pntr_bounds_bitpos (struct type *type)
1712 {
1713   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1714 }
1715
1716 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1717    size of the field containing the address of the bounds data.  */
1718
1719 static int
1720 fat_pntr_bounds_bitsize (struct type *type)
1721 {
1722   type = desc_base_type (type);
1723
1724   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1725     return TYPE_FIELD_BITSIZE (type, 1);
1726   else
1727     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1728 }
1729
1730 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1731    pointer to one, the type of its array data (a array-with-no-bounds type);
1732    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1733    data.  */
1734
1735 static struct type *
1736 desc_data_target_type (struct type *type)
1737 {
1738   type = desc_base_type (type);
1739
1740   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1741   if (is_thin_pntr (type))
1742     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1743   else if (is_thick_pntr (type))
1744     {
1745       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1746
1747       if (data_type
1748           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1749         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1750     }
1751
1752   return NULL;
1753 }
1754
1755 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1756    its array data.  */
1757
1758 static struct value *
1759 desc_data (struct value *arr)
1760 {
1761   struct type *type = value_type (arr);
1762
1763   if (is_thin_pntr (type))
1764     return thin_data_pntr (arr);
1765   else if (is_thick_pntr (type))
1766     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1767                              _("Bad GNAT array descriptor"));
1768   else
1769     return NULL;
1770 }
1771
1772
1773 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1774    position of the field containing the address of the data.  */
1775
1776 static int
1777 fat_pntr_data_bitpos (struct type *type)
1778 {
1779   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1780 }
1781
1782 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1783    size of the field containing the address of the data.  */
1784
1785 static int
1786 fat_pntr_data_bitsize (struct type *type)
1787 {
1788   type = desc_base_type (type);
1789
1790   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1791     return TYPE_FIELD_BITSIZE (type, 0);
1792   else
1793     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1794 }
1795
1796 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1797    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1798    bound, if WHICH is 1.  The first bound is I=1.  */
1799
1800 static struct value *
1801 desc_one_bound (struct value *bounds, int i, int which)
1802 {
1803   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1804                            _("Bad GNAT array descriptor bounds"));
1805 }
1806
1807 /* If BOUNDS is an array-bounds structure type, return the bit position
1808    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1809    bound, if WHICH is 1.  The first bound is I=1.  */
1810
1811 static int
1812 desc_bound_bitpos (struct type *type, int i, int which)
1813 {
1814   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1815 }
1816
1817 /* If BOUNDS is an array-bounds structure type, return the bit field size
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_bitsize (struct type *type, int i, int which)
1823 {
1824   type = desc_base_type (type);
1825
1826   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1827     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1828   else
1829     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1830 }
1831
1832 /* If TYPE is the type of an array-bounds structure, the type of its
1833    Ith bound (numbering from 1).  Otherwise, NULL.  */
1834
1835 static struct type *
1836 desc_index_type (struct type *type, int i)
1837 {
1838   type = desc_base_type (type);
1839
1840   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1841     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1842   else
1843     return NULL;
1844 }
1845
1846 /* The number of index positions in the array-bounds type TYPE.
1847    Return 0 if TYPE is NULL.  */
1848
1849 static int
1850 desc_arity (struct type *type)
1851 {
1852   type = desc_base_type (type);
1853
1854   if (type != NULL)
1855     return TYPE_NFIELDS (type) / 2;
1856   return 0;
1857 }
1858
1859 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1860    an array descriptor type (representing an unconstrained array
1861    type).  */
1862
1863 static int
1864 ada_is_direct_array_type (struct type *type)
1865 {
1866   if (type == NULL)
1867     return 0;
1868   type = ada_check_typedef (type);
1869   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1870           || ada_is_array_descriptor_type (type));
1871 }
1872
1873 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1874  * to one.  */
1875
1876 static int
1877 ada_is_array_type (struct type *type)
1878 {
1879   while (type != NULL 
1880          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1881              || TYPE_CODE (type) == TYPE_CODE_REF))
1882     type = TYPE_TARGET_TYPE (type);
1883   return ada_is_direct_array_type (type);
1884 }
1885
1886 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1887
1888 int
1889 ada_is_simple_array_type (struct type *type)
1890 {
1891   if (type == NULL)
1892     return 0;
1893   type = ada_check_typedef (type);
1894   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1895           || (TYPE_CODE (type) == TYPE_CODE_PTR
1896               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1897                  == TYPE_CODE_ARRAY));
1898 }
1899
1900 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1901
1902 int
1903 ada_is_array_descriptor_type (struct type *type)
1904 {
1905   struct type *data_type = desc_data_target_type (type);
1906
1907   if (type == NULL)
1908     return 0;
1909   type = ada_check_typedef (type);
1910   return (data_type != NULL
1911           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1912           && desc_arity (desc_bounds_type (type)) > 0);
1913 }
1914
1915 /* Non-zero iff type is a partially mal-formed GNAT array
1916    descriptor.  FIXME: This is to compensate for some problems with
1917    debugging output from GNAT.  Re-examine periodically to see if it
1918    is still needed.  */
1919
1920 int
1921 ada_is_bogus_array_descriptor (struct type *type)
1922 {
1923   return
1924     type != NULL
1925     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1926     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1927         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1928     && !ada_is_array_descriptor_type (type);
1929 }
1930
1931
1932 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1933    (fat pointer) returns the type of the array data described---specifically,
1934    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1935    in from the descriptor; otherwise, they are left unspecified.  If
1936    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1937    returns NULL.  The result is simply the type of ARR if ARR is not
1938    a descriptor.  */
1939 struct type *
1940 ada_type_of_array (struct value *arr, int bounds)
1941 {
1942   if (ada_is_constrained_packed_array_type (value_type (arr)))
1943     return decode_constrained_packed_array_type (value_type (arr));
1944
1945   if (!ada_is_array_descriptor_type (value_type (arr)))
1946     return value_type (arr);
1947
1948   if (!bounds)
1949     {
1950       struct type *array_type =
1951         ada_check_typedef (desc_data_target_type (value_type (arr)));
1952
1953       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1954         TYPE_FIELD_BITSIZE (array_type, 0) =
1955           decode_packed_array_bitsize (value_type (arr));
1956       
1957       return array_type;
1958     }
1959   else
1960     {
1961       struct type *elt_type;
1962       int arity;
1963       struct value *descriptor;
1964
1965       elt_type = ada_array_element_type (value_type (arr), -1);
1966       arity = ada_array_arity (value_type (arr));
1967
1968       if (elt_type == NULL || arity == 0)
1969         return ada_check_typedef (value_type (arr));
1970
1971       descriptor = desc_bounds (arr);
1972       if (value_as_long (descriptor) == 0)
1973         return NULL;
1974       while (arity > 0)
1975         {
1976           struct type *range_type = alloc_type_copy (value_type (arr));
1977           struct type *array_type = alloc_type_copy (value_type (arr));
1978           struct value *low = desc_one_bound (descriptor, arity, 0);
1979           struct value *high = desc_one_bound (descriptor, arity, 1);
1980
1981           arity -= 1;
1982           create_static_range_type (range_type, value_type (low),
1983                                     longest_to_int (value_as_long (low)),
1984                                     longest_to_int (value_as_long (high)));
1985           elt_type = create_array_type (array_type, elt_type, range_type);
1986
1987           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1988             {
1989               /* We need to store the element packed bitsize, as well as
1990                  recompute the array size, because it was previously
1991                  computed based on the unpacked element size.  */
1992               LONGEST lo = value_as_long (low);
1993               LONGEST hi = value_as_long (high);
1994
1995               TYPE_FIELD_BITSIZE (elt_type, 0) =
1996                 decode_packed_array_bitsize (value_type (arr));
1997               /* If the array has no element, then the size is already
1998                  zero, and does not need to be recomputed.  */
1999               if (lo < hi)
2000                 {
2001                   int array_bitsize =
2002                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2003
2004                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2005                 }
2006             }
2007         }
2008
2009       return lookup_pointer_type (elt_type);
2010     }
2011 }
2012
2013 /* If ARR does not represent an array, returns ARR unchanged.
2014    Otherwise, returns either a standard GDB array with bounds set
2015    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2016    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2017
2018 struct value *
2019 ada_coerce_to_simple_array_ptr (struct value *arr)
2020 {
2021   if (ada_is_array_descriptor_type (value_type (arr)))
2022     {
2023       struct type *arrType = ada_type_of_array (arr, 1);
2024
2025       if (arrType == NULL)
2026         return NULL;
2027       return value_cast (arrType, value_copy (desc_data (arr)));
2028     }
2029   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2030     return decode_constrained_packed_array (arr);
2031   else
2032     return arr;
2033 }
2034
2035 /* If ARR does not represent an array, returns ARR unchanged.
2036    Otherwise, returns a standard GDB array describing ARR (which may
2037    be ARR itself if it already is in the proper form).  */
2038
2039 struct value *
2040 ada_coerce_to_simple_array (struct value *arr)
2041 {
2042   if (ada_is_array_descriptor_type (value_type (arr)))
2043     {
2044       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2045
2046       if (arrVal == NULL)
2047         error (_("Bounds unavailable for null array pointer."));
2048       check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
2049       return value_ind (arrVal);
2050     }
2051   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2052     return decode_constrained_packed_array (arr);
2053   else
2054     return arr;
2055 }
2056
2057 /* If TYPE represents a GNAT array type, return it translated to an
2058    ordinary GDB array type (possibly with BITSIZE fields indicating
2059    packing).  For other types, is the identity.  */
2060
2061 struct type *
2062 ada_coerce_to_simple_array_type (struct type *type)
2063 {
2064   if (ada_is_constrained_packed_array_type (type))
2065     return decode_constrained_packed_array_type (type);
2066
2067   if (ada_is_array_descriptor_type (type))
2068     return ada_check_typedef (desc_data_target_type (type));
2069
2070   return type;
2071 }
2072
2073 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2074
2075 static int
2076 ada_is_packed_array_type  (struct type *type)
2077 {
2078   if (type == NULL)
2079     return 0;
2080   type = desc_base_type (type);
2081   type = ada_check_typedef (type);
2082   return
2083     ada_type_name (type) != NULL
2084     && strstr (ada_type_name (type), "___XP") != NULL;
2085 }
2086
2087 /* Non-zero iff TYPE represents a standard GNAT constrained
2088    packed-array type.  */
2089
2090 int
2091 ada_is_constrained_packed_array_type (struct type *type)
2092 {
2093   return ada_is_packed_array_type (type)
2094     && !ada_is_array_descriptor_type (type);
2095 }
2096
2097 /* Non-zero iff TYPE represents an array descriptor for a
2098    unconstrained packed-array type.  */
2099
2100 static int
2101 ada_is_unconstrained_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 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2108    return the size of its elements in bits.  */
2109
2110 static long
2111 decode_packed_array_bitsize (struct type *type)
2112 {
2113   const char *raw_name;
2114   const char *tail;
2115   long bits;
2116
2117   /* Access to arrays implemented as fat pointers are encoded as a typedef
2118      of the fat pointer type.  We need the name of the fat pointer type
2119      to do the decoding, so strip the typedef layer.  */
2120   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2121     type = ada_typedef_target_type (type);
2122
2123   raw_name = ada_type_name (ada_check_typedef (type));
2124   if (!raw_name)
2125     raw_name = ada_type_name (desc_base_type (type));
2126
2127   if (!raw_name)
2128     return 0;
2129
2130   tail = strstr (raw_name, "___XP");
2131   gdb_assert (tail != NULL);
2132
2133   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2134     {
2135       lim_warning
2136         (_("could not understand bit size information on packed array"));
2137       return 0;
2138     }
2139
2140   return bits;
2141 }
2142
2143 /* Given that TYPE is a standard GDB array type with all bounds filled
2144    in, and that the element size of its ultimate scalar constituents
2145    (that is, either its elements, or, if it is an array of arrays, its
2146    elements' elements, etc.) is *ELT_BITS, return an identical type,
2147    but with the bit sizes of its elements (and those of any
2148    constituent arrays) recorded in the BITSIZE components of its
2149    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2150    in bits.  */
2151
2152 static struct type *
2153 constrained_packed_array_type (struct type *type, long *elt_bits)
2154 {
2155   struct type *new_elt_type;
2156   struct type *new_type;
2157   struct type *index_type_desc;
2158   struct type *index_type;
2159   LONGEST low_bound, high_bound;
2160
2161   type = ada_check_typedef (type);
2162   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2163     return type;
2164
2165   index_type_desc = ada_find_parallel_type (type, "___XA");
2166   if (index_type_desc)
2167     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2168                                       NULL);
2169   else
2170     index_type = TYPE_INDEX_TYPE (type);
2171
2172   new_type = alloc_type_copy (type);
2173   new_elt_type =
2174     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2175                                    elt_bits);
2176   create_array_type (new_type, new_elt_type, index_type);
2177   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2178   TYPE_NAME (new_type) = ada_type_name (type);
2179
2180   if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2181     low_bound = high_bound = 0;
2182   if (high_bound < low_bound)
2183     *elt_bits = TYPE_LENGTH (new_type) = 0;
2184   else
2185     {
2186       *elt_bits *= (high_bound - low_bound + 1);
2187       TYPE_LENGTH (new_type) =
2188         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2189     }
2190
2191   TYPE_FIXED_INSTANCE (new_type) = 1;
2192   return new_type;
2193 }
2194
2195 /* The array type encoded by TYPE, where
2196    ada_is_constrained_packed_array_type (TYPE).  */
2197
2198 static struct type *
2199 decode_constrained_packed_array_type (struct type *type)
2200 {
2201   const char *raw_name = ada_type_name (ada_check_typedef (type));
2202   char *name;
2203   const char *tail;
2204   struct type *shadow_type;
2205   long bits;
2206
2207   if (!raw_name)
2208     raw_name = ada_type_name (desc_base_type (type));
2209
2210   if (!raw_name)
2211     return NULL;
2212
2213   name = (char *) alloca (strlen (raw_name) + 1);
2214   tail = strstr (raw_name, "___XP");
2215   type = desc_base_type (type);
2216
2217   memcpy (name, raw_name, tail - raw_name);
2218   name[tail - raw_name] = '\000';
2219
2220   shadow_type = ada_find_parallel_type_with_name (type, name);
2221
2222   if (shadow_type == NULL)
2223     {
2224       lim_warning (_("could not find bounds information on packed array"));
2225       return NULL;
2226     }
2227   CHECK_TYPEDEF (shadow_type);
2228
2229   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2230     {
2231       lim_warning (_("could not understand bounds "
2232                      "information on packed array"));
2233       return NULL;
2234     }
2235
2236   bits = decode_packed_array_bitsize (type);
2237   return constrained_packed_array_type (shadow_type, &bits);
2238 }
2239
2240 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2241    array, returns a simple array that denotes that array.  Its type is a
2242    standard GDB array type except that the BITSIZEs of the array
2243    target types are set to the number of bits in each element, and the
2244    type length is set appropriately.  */
2245
2246 static struct value *
2247 decode_constrained_packed_array (struct value *arr)
2248 {
2249   struct type *type;
2250
2251   /* If our value is a pointer, then dereference it. Likewise if
2252      the value is a reference.  Make sure that this operation does not
2253      cause the target type to be fixed, as this would indirectly cause
2254      this array to be decoded.  The rest of the routine assumes that
2255      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2256      and "value_ind" routines to perform the dereferencing, as opposed
2257      to using "ada_coerce_ref" or "ada_value_ind".  */
2258   arr = coerce_ref (arr);
2259   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2260     arr = value_ind (arr);
2261
2262   type = decode_constrained_packed_array_type (value_type (arr));
2263   if (type == NULL)
2264     {
2265       error (_("can't unpack array"));
2266       return NULL;
2267     }
2268
2269   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2270       && ada_is_modular_type (value_type (arr)))
2271     {
2272        /* This is a (right-justified) modular type representing a packed
2273          array with no wrapper.  In order to interpret the value through
2274          the (left-justified) packed array type we just built, we must
2275          first left-justify it.  */
2276       int bit_size, bit_pos;
2277       ULONGEST mod;
2278
2279       mod = ada_modulus (value_type (arr)) - 1;
2280       bit_size = 0;
2281       while (mod > 0)
2282         {
2283           bit_size += 1;
2284           mod >>= 1;
2285         }
2286       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2287       arr = ada_value_primitive_packed_val (arr, NULL,
2288                                             bit_pos / HOST_CHAR_BIT,
2289                                             bit_pos % HOST_CHAR_BIT,
2290                                             bit_size,
2291                                             type);
2292     }
2293
2294   return coerce_unspec_val_to_type (arr, type);
2295 }
2296
2297
2298 /* The value of the element of packed array ARR at the ARITY indices
2299    given in IND.   ARR must be a simple array.  */
2300
2301 static struct value *
2302 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2303 {
2304   int i;
2305   int bits, elt_off, bit_off;
2306   long elt_total_bit_offset;
2307   struct type *elt_type;
2308   struct value *v;
2309
2310   bits = 0;
2311   elt_total_bit_offset = 0;
2312   elt_type = ada_check_typedef (value_type (arr));
2313   for (i = 0; i < arity; i += 1)
2314     {
2315       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2316           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2317         error
2318           (_("attempt to do packed indexing of "
2319              "something other than a packed array"));
2320       else
2321         {
2322           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2323           LONGEST lowerbound, upperbound;
2324           LONGEST idx;
2325
2326           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2327             {
2328               lim_warning (_("don't know bounds of array"));
2329               lowerbound = upperbound = 0;
2330             }
2331
2332           idx = pos_atr (ind[i]);
2333           if (idx < lowerbound || idx > upperbound)
2334             lim_warning (_("packed array index %ld out of bounds"),
2335                          (long) idx);
2336           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2337           elt_total_bit_offset += (idx - lowerbound) * bits;
2338           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2339         }
2340     }
2341   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2342   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2343
2344   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2345                                       bits, elt_type);
2346   return v;
2347 }
2348
2349 /* Non-zero iff TYPE includes negative integer values.  */
2350
2351 static int
2352 has_negatives (struct type *type)
2353 {
2354   switch (TYPE_CODE (type))
2355     {
2356     default:
2357       return 0;
2358     case TYPE_CODE_INT:
2359       return !TYPE_UNSIGNED (type);
2360     case TYPE_CODE_RANGE:
2361       return TYPE_LOW_BOUND (type) < 0;
2362     }
2363 }
2364
2365
2366 /* Create a new value of type TYPE from the contents of OBJ starting
2367    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2368    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2369    assigning through the result will set the field fetched from.
2370    VALADDR is ignored unless OBJ is NULL, in which case,
2371    VALADDR+OFFSET must address the start of storage containing the 
2372    packed value.  The value returned  in this case is never an lval.
2373    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2374
2375 struct value *
2376 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2377                                 long offset, int bit_offset, int bit_size,
2378                                 struct type *type)
2379 {
2380   struct value *v;
2381   int src,                      /* Index into the source area */
2382     targ,                       /* Index into the target area */
2383     srcBitsLeft,                /* Number of source bits left to move */
2384     nsrc, ntarg,                /* Number of source and target bytes */
2385     unusedLS,                   /* Number of bits in next significant
2386                                    byte of source that are unused */
2387     accumSize;                  /* Number of meaningful bits in accum */
2388   unsigned char *bytes;         /* First byte containing data to unpack */
2389   unsigned char *unpacked;
2390   unsigned long accum;          /* Staging area for bits being transferred */
2391   unsigned char sign;
2392   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2393   /* Transmit bytes from least to most significant; delta is the direction
2394      the indices move.  */
2395   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2396
2397   type = ada_check_typedef (type);
2398
2399   if (obj == NULL)
2400     {
2401       v = allocate_value (type);
2402       bytes = (unsigned char *) (valaddr + offset);
2403     }
2404   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2405     {
2406       v = value_at (type, value_address (obj));
2407       type = value_type (v);
2408       bytes = (unsigned char *) alloca (len);
2409       read_memory (value_address (v) + offset, bytes, len);
2410     }
2411   else
2412     {
2413       v = allocate_value (type);
2414       bytes = (unsigned char *) value_contents (obj) + offset;
2415     }
2416
2417   if (obj != NULL)
2418     {
2419       long new_offset = offset;
2420
2421       set_value_component_location (v, obj);
2422       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2423       set_value_bitsize (v, bit_size);
2424       if (value_bitpos (v) >= HOST_CHAR_BIT)
2425         {
2426           ++new_offset;
2427           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2428         }
2429       set_value_offset (v, new_offset);
2430
2431       /* Also set the parent value.  This is needed when trying to
2432          assign a new value (in inferior memory).  */
2433       set_value_parent (v, obj);
2434     }
2435   else
2436     set_value_bitsize (v, bit_size);
2437   unpacked = (unsigned char *) value_contents (v);
2438
2439   srcBitsLeft = bit_size;
2440   nsrc = len;
2441   ntarg = TYPE_LENGTH (type);
2442   sign = 0;
2443   if (bit_size == 0)
2444     {
2445       memset (unpacked, 0, TYPE_LENGTH (type));
2446       return v;
2447     }
2448   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2449     {
2450       src = len - 1;
2451       if (has_negatives (type)
2452           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2453         sign = ~0;
2454
2455       unusedLS =
2456         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2457         % HOST_CHAR_BIT;
2458
2459       switch (TYPE_CODE (type))
2460         {
2461         case TYPE_CODE_ARRAY:
2462         case TYPE_CODE_UNION:
2463         case TYPE_CODE_STRUCT:
2464           /* Non-scalar values must be aligned at a byte boundary...  */
2465           accumSize =
2466             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2467           /* ... And are placed at the beginning (most-significant) bytes
2468              of the target.  */
2469           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2470           ntarg = targ + 1;
2471           break;
2472         default:
2473           accumSize = 0;
2474           targ = TYPE_LENGTH (type) - 1;
2475           break;
2476         }
2477     }
2478   else
2479     {
2480       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2481
2482       src = targ = 0;
2483       unusedLS = bit_offset;
2484       accumSize = 0;
2485
2486       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2487         sign = ~0;
2488     }
2489
2490   accum = 0;
2491   while (nsrc > 0)
2492     {
2493       /* Mask for removing bits of the next source byte that are not
2494          part of the value.  */
2495       unsigned int unusedMSMask =
2496         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2497         1;
2498       /* Sign-extend bits for this byte.  */
2499       unsigned int signMask = sign & ~unusedMSMask;
2500
2501       accum |=
2502         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2503       accumSize += HOST_CHAR_BIT - unusedLS;
2504       if (accumSize >= HOST_CHAR_BIT)
2505         {
2506           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2507           accumSize -= HOST_CHAR_BIT;
2508           accum >>= HOST_CHAR_BIT;
2509           ntarg -= 1;
2510           targ += delta;
2511         }
2512       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2513       unusedLS = 0;
2514       nsrc -= 1;
2515       src += delta;
2516     }
2517   while (ntarg > 0)
2518     {
2519       accum |= sign << accumSize;
2520       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2521       accumSize -= HOST_CHAR_BIT;
2522       accum >>= HOST_CHAR_BIT;
2523       ntarg -= 1;
2524       targ += delta;
2525     }
2526
2527   return v;
2528 }
2529
2530 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2531    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2532    not overlap.  */
2533 static void
2534 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2535            int src_offset, int n, int bits_big_endian_p)
2536 {
2537   unsigned int accum, mask;
2538   int accum_bits, chunk_size;
2539
2540   target += targ_offset / HOST_CHAR_BIT;
2541   targ_offset %= HOST_CHAR_BIT;
2542   source += src_offset / HOST_CHAR_BIT;
2543   src_offset %= HOST_CHAR_BIT;
2544   if (bits_big_endian_p)
2545     {
2546       accum = (unsigned char) *source;
2547       source += 1;
2548       accum_bits = HOST_CHAR_BIT - src_offset;
2549
2550       while (n > 0)
2551         {
2552           int unused_right;
2553
2554           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2555           accum_bits += HOST_CHAR_BIT;
2556           source += 1;
2557           chunk_size = HOST_CHAR_BIT - targ_offset;
2558           if (chunk_size > n)
2559             chunk_size = n;
2560           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2561           mask = ((1 << chunk_size) - 1) << unused_right;
2562           *target =
2563             (*target & ~mask)
2564             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2565           n -= chunk_size;
2566           accum_bits -= chunk_size;
2567           target += 1;
2568           targ_offset = 0;
2569         }
2570     }
2571   else
2572     {
2573       accum = (unsigned char) *source >> src_offset;
2574       source += 1;
2575       accum_bits = HOST_CHAR_BIT - src_offset;
2576
2577       while (n > 0)
2578         {
2579           accum = accum + ((unsigned char) *source << accum_bits);
2580           accum_bits += HOST_CHAR_BIT;
2581           source += 1;
2582           chunk_size = HOST_CHAR_BIT - targ_offset;
2583           if (chunk_size > n)
2584             chunk_size = n;
2585           mask = ((1 << chunk_size) - 1) << targ_offset;
2586           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2587           n -= chunk_size;
2588           accum_bits -= chunk_size;
2589           accum >>= chunk_size;
2590           target += 1;
2591           targ_offset = 0;
2592         }
2593     }
2594 }
2595
2596 /* Store the contents of FROMVAL into the location of TOVAL.
2597    Return a new value with the location of TOVAL and contents of
2598    FROMVAL.   Handles assignment into packed fields that have
2599    floating-point or non-scalar types.  */
2600
2601 static struct value *
2602 ada_value_assign (struct value *toval, struct value *fromval)
2603 {
2604   struct type *type = value_type (toval);
2605   int bits = value_bitsize (toval);
2606
2607   toval = ada_coerce_ref (toval);
2608   fromval = ada_coerce_ref (fromval);
2609
2610   if (ada_is_direct_array_type (value_type (toval)))
2611     toval = ada_coerce_to_simple_array (toval);
2612   if (ada_is_direct_array_type (value_type (fromval)))
2613     fromval = ada_coerce_to_simple_array (fromval);
2614
2615   if (!deprecated_value_modifiable (toval))
2616     error (_("Left operand of assignment is not a modifiable lvalue."));
2617
2618   if (VALUE_LVAL (toval) == lval_memory
2619       && bits > 0
2620       && (TYPE_CODE (type) == TYPE_CODE_FLT
2621           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2622     {
2623       int len = (value_bitpos (toval)
2624                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2625       int from_size;
2626       gdb_byte *buffer = alloca (len);
2627       struct value *val;
2628       CORE_ADDR to_addr = value_address (toval);
2629
2630       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2631         fromval = value_cast (type, fromval);
2632
2633       read_memory (to_addr, buffer, len);
2634       from_size = value_bitsize (fromval);
2635       if (from_size == 0)
2636         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2637       if (gdbarch_bits_big_endian (get_type_arch (type)))
2638         move_bits (buffer, value_bitpos (toval),
2639                    value_contents (fromval), from_size - bits, bits, 1);
2640       else
2641         move_bits (buffer, value_bitpos (toval),
2642                    value_contents (fromval), 0, bits, 0);
2643       write_memory_with_notification (to_addr, buffer, len);
2644
2645       val = value_copy (toval);
2646       memcpy (value_contents_raw (val), value_contents (fromval),
2647               TYPE_LENGTH (type));
2648       deprecated_set_value_type (val, type);
2649
2650       return val;
2651     }
2652
2653   return value_assign (toval, fromval);
2654 }
2655
2656
2657 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2658  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2659  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2660  * COMPONENT, and not the inferior's memory.  The current contents 
2661  * of COMPONENT are ignored.  */
2662 static void
2663 value_assign_to_component (struct value *container, struct value *component,
2664                            struct value *val)
2665 {
2666   LONGEST offset_in_container =
2667     (LONGEST)  (value_address (component) - value_address (container));
2668   int bit_offset_in_container = 
2669     value_bitpos (component) - value_bitpos (container);
2670   int bits;
2671   
2672   val = value_cast (value_type (component), val);
2673
2674   if (value_bitsize (component) == 0)
2675     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2676   else
2677     bits = value_bitsize (component);
2678
2679   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2680     move_bits (value_contents_writeable (container) + offset_in_container, 
2681                value_bitpos (container) + bit_offset_in_container,
2682                value_contents (val),
2683                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2684                bits, 1);
2685   else
2686     move_bits (value_contents_writeable (container) + offset_in_container, 
2687                value_bitpos (container) + bit_offset_in_container,
2688                value_contents (val), 0, bits, 0);
2689 }              
2690                         
2691 /* The value of the element of array ARR at the ARITY indices given in IND.
2692    ARR may be either a simple array, GNAT array descriptor, or pointer
2693    thereto.  */
2694
2695 struct value *
2696 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2697 {
2698   int k;
2699   struct value *elt;
2700   struct type *elt_type;
2701
2702   elt = ada_coerce_to_simple_array (arr);
2703
2704   elt_type = ada_check_typedef (value_type (elt));
2705   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2706       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2707     return value_subscript_packed (elt, arity, ind);
2708
2709   for (k = 0; k < arity; k += 1)
2710     {
2711       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2712         error (_("too many subscripts (%d expected)"), k);
2713       elt = value_subscript (elt, pos_atr (ind[k]));
2714     }
2715   return elt;
2716 }
2717
2718 /* Assuming ARR is a pointer to a GDB array, the value of the element
2719    of *ARR at the ARITY indices given in IND.
2720    Does not read the entire array into memory.  */
2721
2722 static struct value *
2723 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2724 {
2725   int k;
2726   struct type *type
2727     = check_typedef (value_enclosing_type (ada_value_ind (arr)));
2728
2729   for (k = 0; k < arity; k += 1)
2730     {
2731       LONGEST lwb, upb;
2732
2733       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2734         error (_("too many subscripts (%d expected)"), k);
2735       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2736                         value_copy (arr));
2737       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2738       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2739       type = TYPE_TARGET_TYPE (type);
2740     }
2741
2742   return value_ind (arr);
2743 }
2744
2745 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2746    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2747    elements starting at index LOW.  The lower bound of this array is LOW, as
2748    per Ada rules.  */
2749 static struct value *
2750 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2751                           int low, int high)
2752 {
2753   struct type *type0 = ada_check_typedef (type);
2754   CORE_ADDR base = value_as_address (array_ptr)
2755     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2756        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2757   struct type *index_type
2758     = create_static_range_type (NULL,
2759                                 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2760                                 low, high);
2761   struct type *slice_type =
2762     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2763
2764   return value_at_lazy (slice_type, base);
2765 }
2766
2767
2768 static struct value *
2769 ada_value_slice (struct value *array, int low, int high)
2770 {
2771   struct type *type = ada_check_typedef (value_type (array));
2772   struct type *index_type
2773     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2774   struct type *slice_type =
2775     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2776
2777   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2778 }
2779
2780 /* If type is a record type in the form of a standard GNAT array
2781    descriptor, returns the number of dimensions for type.  If arr is a
2782    simple array, returns the number of "array of"s that prefix its
2783    type designation.  Otherwise, returns 0.  */
2784
2785 int
2786 ada_array_arity (struct type *type)
2787 {
2788   int arity;
2789
2790   if (type == NULL)
2791     return 0;
2792
2793   type = desc_base_type (type);
2794
2795   arity = 0;
2796   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2797     return desc_arity (desc_bounds_type (type));
2798   else
2799     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2800       {
2801         arity += 1;
2802         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2803       }
2804
2805   return arity;
2806 }
2807
2808 /* If TYPE is a record type in the form of a standard GNAT array
2809    descriptor or a simple array type, returns the element type for
2810    TYPE after indexing by NINDICES indices, or by all indices if
2811    NINDICES is -1.  Otherwise, returns NULL.  */
2812
2813 struct type *
2814 ada_array_element_type (struct type *type, int nindices)
2815 {
2816   type = desc_base_type (type);
2817
2818   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2819     {
2820       int k;
2821       struct type *p_array_type;
2822
2823       p_array_type = desc_data_target_type (type);
2824
2825       k = ada_array_arity (type);
2826       if (k == 0)
2827         return NULL;
2828
2829       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2830       if (nindices >= 0 && k > nindices)
2831         k = nindices;
2832       while (k > 0 && p_array_type != NULL)
2833         {
2834           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2835           k -= 1;
2836         }
2837       return p_array_type;
2838     }
2839   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2840     {
2841       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2842         {
2843           type = TYPE_TARGET_TYPE (type);
2844           nindices -= 1;
2845         }
2846       return type;
2847     }
2848
2849   return NULL;
2850 }
2851
2852 /* The type of nth index in arrays of given type (n numbering from 1).
2853    Does not examine memory.  Throws an error if N is invalid or TYPE
2854    is not an array type.  NAME is the name of the Ada attribute being
2855    evaluated ('range, 'first, 'last, or 'length); it is used in building
2856    the error message.  */
2857
2858 static struct type *
2859 ada_index_type (struct type *type, int n, const char *name)
2860 {
2861   struct type *result_type;
2862
2863   type = desc_base_type (type);
2864
2865   if (n < 0 || n > ada_array_arity (type))
2866     error (_("invalid dimension number to '%s"), name);
2867
2868   if (ada_is_simple_array_type (type))
2869     {
2870       int i;
2871
2872       for (i = 1; i < n; i += 1)
2873         type = TYPE_TARGET_TYPE (type);
2874       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2875       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2876          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2877          perhaps stabsread.c would make more sense.  */
2878       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2879         result_type = NULL;
2880     }
2881   else
2882     {
2883       result_type = desc_index_type (desc_bounds_type (type), n);
2884       if (result_type == NULL)
2885         error (_("attempt to take bound of something that is not an array"));
2886     }
2887
2888   return result_type;
2889 }
2890
2891 /* Given that arr is an array type, returns the lower bound of the
2892    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2893    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2894    array-descriptor type.  It works for other arrays with bounds supplied
2895    by run-time quantities other than discriminants.  */
2896
2897 static LONGEST
2898 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2899 {
2900   struct type *type, *index_type_desc, *index_type;
2901   int i;
2902
2903   gdb_assert (which == 0 || which == 1);
2904
2905   if (ada_is_constrained_packed_array_type (arr_type))
2906     arr_type = decode_constrained_packed_array_type (arr_type);
2907
2908   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2909     return (LONGEST) - which;
2910
2911   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2912     type = TYPE_TARGET_TYPE (arr_type);
2913   else
2914     type = arr_type;
2915
2916   index_type_desc = ada_find_parallel_type (type, "___XA");
2917   ada_fixup_array_indexes_type (index_type_desc);
2918   if (index_type_desc != NULL)
2919     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2920                                       NULL);
2921   else
2922     {
2923       struct type *elt_type = check_typedef (type);
2924
2925       for (i = 1; i < n; i++)
2926         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2927
2928       index_type = TYPE_INDEX_TYPE (elt_type);
2929     }
2930
2931   return
2932     (LONGEST) (which == 0
2933                ? ada_discrete_type_low_bound (index_type)
2934                : ada_discrete_type_high_bound (index_type));
2935 }
2936
2937 /* Given that arr is an array value, returns the lower bound of the
2938    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2939    WHICH is 1.  This routine will also work for arrays with bounds
2940    supplied by run-time quantities other than discriminants.  */
2941
2942 static LONGEST
2943 ada_array_bound (struct value *arr, int n, int which)
2944 {
2945   struct type *arr_type;
2946
2947   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2948     arr = value_ind (arr);
2949   arr_type = value_enclosing_type (arr);
2950
2951   if (ada_is_constrained_packed_array_type (arr_type))
2952     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2953   else if (ada_is_simple_array_type (arr_type))
2954     return ada_array_bound_from_type (arr_type, n, which);
2955   else
2956     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2957 }
2958
2959 /* Given that arr is an array value, returns the length of the
2960    nth index.  This routine will also work for arrays with bounds
2961    supplied by run-time quantities other than discriminants.
2962    Does not work for arrays indexed by enumeration types with representation
2963    clauses at the moment.  */
2964
2965 static LONGEST
2966 ada_array_length (struct value *arr, int n)
2967 {
2968   struct type *arr_type;
2969
2970   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2971     arr = value_ind (arr);
2972   arr_type = value_enclosing_type (arr);
2973
2974   if (ada_is_constrained_packed_array_type (arr_type))
2975     return ada_array_length (decode_constrained_packed_array (arr), n);
2976
2977   if (ada_is_simple_array_type (arr_type))
2978     return (ada_array_bound_from_type (arr_type, n, 1)
2979             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2980   else
2981     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2982             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2983 }
2984
2985 /* An empty array whose type is that of ARR_TYPE (an array type),
2986    with bounds LOW to LOW-1.  */
2987
2988 static struct value *
2989 empty_array (struct type *arr_type, int low)
2990 {
2991   struct type *arr_type0 = ada_check_typedef (arr_type);
2992   struct type *index_type
2993     = create_static_range_type
2994         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
2995   struct type *elt_type = ada_array_element_type (arr_type0, 1);
2996
2997   return allocate_value (create_array_type (NULL, elt_type, index_type));
2998 }
2999 \f
3000
3001                                 /* Name resolution */
3002
3003 /* The "decoded" name for the user-definable Ada operator corresponding
3004    to OP.  */
3005
3006 static const char *
3007 ada_decoded_op_name (enum exp_opcode op)
3008 {
3009   int i;
3010
3011   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3012     {
3013       if (ada_opname_table[i].op == op)
3014         return ada_opname_table[i].decoded;
3015     }
3016   error (_("Could not find operator name for opcode"));
3017 }
3018
3019
3020 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3021    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3022    undefined namespace) and converts operators that are
3023    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3024    non-null, it provides a preferred result type [at the moment, only
3025    type void has any effect---causing procedures to be preferred over
3026    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3027    return type is preferred.  May change (expand) *EXP.  */
3028
3029 static void
3030 resolve (struct expression **expp, int void_context_p)
3031 {
3032   struct type *context_type = NULL;
3033   int pc = 0;
3034
3035   if (void_context_p)
3036     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3037
3038   resolve_subexp (expp, &pc, 1, context_type);
3039 }
3040
3041 /* Resolve the operator of the subexpression beginning at
3042    position *POS of *EXPP.  "Resolving" consists of replacing
3043    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3044    with their resolutions, replacing built-in operators with
3045    function calls to user-defined operators, where appropriate, and,
3046    when DEPROCEDURE_P is non-zero, converting function-valued variables
3047    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3048    are as in ada_resolve, above.  */
3049
3050 static struct value *
3051 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3052                 struct type *context_type)
3053 {
3054   int pc = *pos;
3055   int i;
3056   struct expression *exp;       /* Convenience: == *expp.  */
3057   enum exp_opcode op = (*expp)->elts[pc].opcode;
3058   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3059   int nargs;                    /* Number of operands.  */
3060   int oplen;
3061
3062   argvec = NULL;
3063   nargs = 0;
3064   exp = *expp;
3065
3066   /* Pass one: resolve operands, saving their types and updating *pos,
3067      if needed.  */
3068   switch (op)
3069     {
3070     case OP_FUNCALL:
3071       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3072           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3073         *pos += 7;
3074       else
3075         {
3076           *pos += 3;
3077           resolve_subexp (expp, pos, 0, NULL);
3078         }
3079       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3080       break;
3081
3082     case UNOP_ADDR:
3083       *pos += 1;
3084       resolve_subexp (expp, pos, 0, NULL);
3085       break;
3086
3087     case UNOP_QUAL:
3088       *pos += 3;
3089       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3090       break;
3091
3092     case OP_ATR_MODULUS:
3093     case OP_ATR_SIZE:
3094     case OP_ATR_TAG:
3095     case OP_ATR_FIRST:
3096     case OP_ATR_LAST:
3097     case OP_ATR_LENGTH:
3098     case OP_ATR_POS:
3099     case OP_ATR_VAL:
3100     case OP_ATR_MIN:
3101     case OP_ATR_MAX:
3102     case TERNOP_IN_RANGE:
3103     case BINOP_IN_BOUNDS:
3104     case UNOP_IN_RANGE:
3105     case OP_AGGREGATE:
3106     case OP_OTHERS:
3107     case OP_CHOICES:
3108     case OP_POSITIONAL:
3109     case OP_DISCRETE_RANGE:
3110     case OP_NAME:
3111       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3112       *pos += oplen;
3113       break;
3114
3115     case BINOP_ASSIGN:
3116       {
3117         struct value *arg1;
3118
3119         *pos += 1;
3120         arg1 = resolve_subexp (expp, pos, 0, NULL);
3121         if (arg1 == NULL)
3122           resolve_subexp (expp, pos, 1, NULL);
3123         else
3124           resolve_subexp (expp, pos, 1, value_type (arg1));
3125         break;
3126       }
3127
3128     case UNOP_CAST:
3129       *pos += 3;
3130       nargs = 1;
3131       break;
3132
3133     case BINOP_ADD:
3134     case BINOP_SUB:
3135     case BINOP_MUL:
3136     case BINOP_DIV:
3137     case BINOP_REM:
3138     case BINOP_MOD:
3139     case BINOP_EXP:
3140     case BINOP_CONCAT:
3141     case BINOP_LOGICAL_AND:
3142     case BINOP_LOGICAL_OR:
3143     case BINOP_BITWISE_AND:
3144     case BINOP_BITWISE_IOR:
3145     case BINOP_BITWISE_XOR:
3146
3147     case BINOP_EQUAL:
3148     case BINOP_NOTEQUAL:
3149     case BINOP_LESS:
3150     case BINOP_GTR:
3151     case BINOP_LEQ:
3152     case BINOP_GEQ:
3153
3154     case BINOP_REPEAT:
3155     case BINOP_SUBSCRIPT:
3156     case BINOP_COMMA:
3157       *pos += 1;
3158       nargs = 2;
3159       break;
3160
3161     case UNOP_NEG:
3162     case UNOP_PLUS:
3163     case UNOP_LOGICAL_NOT:
3164     case UNOP_ABS:
3165     case UNOP_IND:
3166       *pos += 1;
3167       nargs = 1;
3168       break;
3169
3170     case OP_LONG:
3171     case OP_DOUBLE:
3172     case OP_VAR_VALUE:
3173       *pos += 4;
3174       break;
3175
3176     case OP_TYPE:
3177     case OP_BOOL:
3178     case OP_LAST:
3179     case OP_INTERNALVAR:
3180       *pos += 3;
3181       break;
3182
3183     case UNOP_MEMVAL:
3184       *pos += 3;
3185       nargs = 1;
3186       break;
3187
3188     case OP_REGISTER:
3189       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3190       break;
3191
3192     case STRUCTOP_STRUCT:
3193       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3194       nargs = 1;
3195       break;
3196
3197     case TERNOP_SLICE:
3198       *pos += 1;
3199       nargs = 3;
3200       break;
3201
3202     case OP_STRING:
3203       break;
3204
3205     default:
3206       error (_("Unexpected operator during name resolution"));
3207     }
3208
3209   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3210   for (i = 0; i < nargs; i += 1)
3211     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3212   argvec[i] = NULL;
3213   exp = *expp;
3214
3215   /* Pass two: perform any resolution on principal operator.  */
3216   switch (op)
3217     {
3218     default:
3219       break;
3220
3221     case OP_VAR_VALUE:
3222       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3223         {
3224           struct ada_symbol_info *candidates;
3225           int n_candidates;
3226
3227           n_candidates =
3228             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3229                                     (exp->elts[pc + 2].symbol),
3230                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3231                                     &candidates);
3232
3233           if (n_candidates > 1)
3234             {
3235               /* Types tend to get re-introduced locally, so if there
3236                  are any local symbols that are not types, first filter
3237                  out all types.  */
3238               int j;
3239               for (j = 0; j < n_candidates; j += 1)
3240                 switch (SYMBOL_CLASS (candidates[j].sym))
3241                   {
3242                   case LOC_REGISTER:
3243                   case LOC_ARG:
3244                   case LOC_REF_ARG:
3245                   case LOC_REGPARM_ADDR:
3246                   case LOC_LOCAL:
3247                   case LOC_COMPUTED:
3248                     goto FoundNonType;
3249                   default:
3250                     break;
3251                   }
3252             FoundNonType:
3253               if (j < n_candidates)
3254                 {
3255                   j = 0;
3256                   while (j < n_candidates)
3257                     {
3258                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3259                         {
3260                           candidates[j] = candidates[n_candidates - 1];
3261                           n_candidates -= 1;
3262                         }
3263                       else
3264                         j += 1;
3265                     }
3266                 }
3267             }
3268
3269           if (n_candidates == 0)
3270             error (_("No definition found for %s"),
3271                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3272           else if (n_candidates == 1)
3273             i = 0;
3274           else if (deprocedure_p
3275                    && !is_nonfunction (candidates, n_candidates))
3276             {
3277               i = ada_resolve_function
3278                 (candidates, n_candidates, NULL, 0,
3279                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3280                  context_type);
3281               if (i < 0)
3282                 error (_("Could not find a match for %s"),
3283                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3284             }
3285           else
3286             {
3287               printf_filtered (_("Multiple matches for %s\n"),
3288                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3289               user_select_syms (candidates, n_candidates, 1);
3290               i = 0;
3291             }
3292
3293           exp->elts[pc + 1].block = candidates[i].block;
3294           exp->elts[pc + 2].symbol = candidates[i].sym;
3295           if (innermost_block == NULL
3296               || contained_in (candidates[i].block, innermost_block))
3297             innermost_block = candidates[i].block;
3298         }
3299
3300       if (deprocedure_p
3301           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3302               == TYPE_CODE_FUNC))
3303         {
3304           replace_operator_with_call (expp, pc, 0, 0,
3305                                       exp->elts[pc + 2].symbol,
3306                                       exp->elts[pc + 1].block);
3307           exp = *expp;
3308         }
3309       break;
3310
3311     case OP_FUNCALL:
3312       {
3313         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3314             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3315           {
3316             struct ada_symbol_info *candidates;
3317             int n_candidates;
3318
3319             n_candidates =
3320               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3321                                       (exp->elts[pc + 5].symbol),
3322                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3323                                       &candidates);
3324             if (n_candidates == 1)
3325               i = 0;
3326             else
3327               {
3328                 i = ada_resolve_function
3329                   (candidates, n_candidates,
3330                    argvec, nargs,
3331                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3332                    context_type);
3333                 if (i < 0)
3334                   error (_("Could not find a match for %s"),
3335                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3336               }
3337
3338             exp->elts[pc + 4].block = candidates[i].block;
3339             exp->elts[pc + 5].symbol = candidates[i].sym;
3340             if (innermost_block == NULL
3341                 || contained_in (candidates[i].block, innermost_block))
3342               innermost_block = candidates[i].block;
3343           }
3344       }
3345       break;
3346     case BINOP_ADD:
3347     case BINOP_SUB:
3348     case BINOP_MUL:
3349     case BINOP_DIV:
3350     case BINOP_REM:
3351     case BINOP_MOD:
3352     case BINOP_CONCAT:
3353     case BINOP_BITWISE_AND:
3354     case BINOP_BITWISE_IOR:
3355     case BINOP_BITWISE_XOR:
3356     case BINOP_EQUAL:
3357     case BINOP_NOTEQUAL:
3358     case BINOP_LESS:
3359     case BINOP_GTR:
3360     case BINOP_LEQ:
3361     case BINOP_GEQ:
3362     case BINOP_EXP:
3363     case UNOP_NEG:
3364     case UNOP_PLUS:
3365     case UNOP_LOGICAL_NOT:
3366     case UNOP_ABS:
3367       if (possible_user_operator_p (op, argvec))
3368         {
3369           struct ada_symbol_info *candidates;
3370           int n_candidates;
3371
3372           n_candidates =
3373             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3374                                     (struct block *) NULL, VAR_DOMAIN,
3375                                     &candidates);
3376           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3377                                     ada_decoded_op_name (op), NULL);
3378           if (i < 0)
3379             break;
3380
3381           replace_operator_with_call (expp, pc, nargs, 1,
3382                                       candidates[i].sym, candidates[i].block);
3383           exp = *expp;
3384         }
3385       break;
3386
3387     case OP_TYPE:
3388     case OP_REGISTER:
3389       return NULL;
3390     }
3391
3392   *pos = pc;
3393   return evaluate_subexp_type (exp, pos);
3394 }
3395
3396 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3397    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3398    a non-pointer.  */
3399 /* The term "match" here is rather loose.  The match is heuristic and
3400    liberal.  */
3401
3402 static int
3403 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3404 {
3405   ftype = ada_check_typedef (ftype);
3406   atype = ada_check_typedef (atype);
3407
3408   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3409     ftype = TYPE_TARGET_TYPE (ftype);
3410   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3411     atype = TYPE_TARGET_TYPE (atype);
3412
3413   switch (TYPE_CODE (ftype))
3414     {
3415     default:
3416       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3417     case TYPE_CODE_PTR:
3418       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3419         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3420                                TYPE_TARGET_TYPE (atype), 0);
3421       else
3422         return (may_deref
3423                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3424     case TYPE_CODE_INT:
3425     case TYPE_CODE_ENUM:
3426     case TYPE_CODE_RANGE:
3427       switch (TYPE_CODE (atype))
3428         {
3429         case TYPE_CODE_INT:
3430         case TYPE_CODE_ENUM:
3431         case TYPE_CODE_RANGE:
3432           return 1;
3433         default:
3434           return 0;
3435         }
3436
3437     case TYPE_CODE_ARRAY:
3438       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3439               || ada_is_array_descriptor_type (atype));
3440
3441     case TYPE_CODE_STRUCT:
3442       if (ada_is_array_descriptor_type (ftype))
3443         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3444                 || ada_is_array_descriptor_type (atype));
3445       else
3446         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3447                 && !ada_is_array_descriptor_type (atype));
3448
3449     case TYPE_CODE_UNION:
3450     case TYPE_CODE_FLT:
3451       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3452     }
3453 }
3454
3455 /* Return non-zero if the formals of FUNC "sufficiently match" the
3456    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3457    may also be an enumeral, in which case it is treated as a 0-
3458    argument function.  */
3459
3460 static int
3461 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3462 {
3463   int i;
3464   struct type *func_type = SYMBOL_TYPE (func);
3465
3466   if (SYMBOL_CLASS (func) == LOC_CONST
3467       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3468     return (n_actuals == 0);
3469   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3470     return 0;
3471
3472   if (TYPE_NFIELDS (func_type) != n_actuals)
3473     return 0;
3474
3475   for (i = 0; i < n_actuals; i += 1)
3476     {
3477       if (actuals[i] == NULL)
3478         return 0;
3479       else
3480         {
3481           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3482                                                                    i));
3483           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3484
3485           if (!ada_type_match (ftype, atype, 1))
3486             return 0;
3487         }
3488     }
3489   return 1;
3490 }
3491
3492 /* False iff function type FUNC_TYPE definitely does not produce a value
3493    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3494    FUNC_TYPE is not a valid function type with a non-null return type
3495    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3496
3497 static int
3498 return_match (struct type *func_type, struct type *context_type)
3499 {
3500   struct type *return_type;
3501
3502   if (func_type == NULL)
3503     return 1;
3504
3505   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3506     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3507   else
3508     return_type = get_base_type (func_type);
3509   if (return_type == NULL)
3510     return 1;
3511
3512   context_type = get_base_type (context_type);
3513
3514   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3515     return context_type == NULL || return_type == context_type;
3516   else if (context_type == NULL)
3517     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3518   else
3519     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3520 }
3521
3522
3523 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3524    function (if any) that matches the types of the NARGS arguments in
3525    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3526    that returns that type, then eliminate matches that don't.  If
3527    CONTEXT_TYPE is void and there is at least one match that does not
3528    return void, eliminate all matches that do.
3529
3530    Asks the user if there is more than one match remaining.  Returns -1
3531    if there is no such symbol or none is selected.  NAME is used
3532    solely for messages.  May re-arrange and modify SYMS in
3533    the process; the index returned is for the modified vector.  */
3534
3535 static int
3536 ada_resolve_function (struct ada_symbol_info syms[],
3537                       int nsyms, struct value **args, int nargs,
3538                       const char *name, struct type *context_type)
3539 {
3540   int fallback;
3541   int k;
3542   int m;                        /* Number of hits */
3543
3544   m = 0;
3545   /* In the first pass of the loop, we only accept functions matching
3546      context_type.  If none are found, we add a second pass of the loop
3547      where every function is accepted.  */
3548   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3549     {
3550       for (k = 0; k < nsyms; k += 1)
3551         {
3552           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3553
3554           if (ada_args_match (syms[k].sym, args, nargs)
3555               && (fallback || return_match (type, context_type)))
3556             {
3557               syms[m] = syms[k];
3558               m += 1;
3559             }
3560         }
3561     }
3562
3563   if (m == 0)
3564     return -1;
3565   else if (m > 1)
3566     {
3567       printf_filtered (_("Multiple matches for %s\n"), name);
3568       user_select_syms (syms, m, 1);
3569       return 0;
3570     }
3571   return 0;
3572 }
3573
3574 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3575    in a listing of choices during disambiguation (see sort_choices, below).
3576    The idea is that overloadings of a subprogram name from the
3577    same package should sort in their source order.  We settle for ordering
3578    such symbols by their trailing number (__N  or $N).  */
3579
3580 static int
3581 encoded_ordered_before (const char *N0, const char *N1)
3582 {
3583   if (N1 == NULL)
3584     return 0;
3585   else if (N0 == NULL)
3586     return 1;
3587   else
3588     {
3589       int k0, k1;
3590
3591       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3592         ;
3593       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3594         ;
3595       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3596           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3597         {
3598           int n0, n1;
3599
3600           n0 = k0;
3601           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3602             n0 -= 1;
3603           n1 = k1;
3604           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3605             n1 -= 1;
3606           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3607             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3608         }
3609       return (strcmp (N0, N1) < 0);
3610     }
3611 }
3612
3613 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3614    encoded names.  */
3615
3616 static void
3617 sort_choices (struct ada_symbol_info syms[], int nsyms)
3618 {
3619   int i;
3620
3621   for (i = 1; i < nsyms; i += 1)
3622     {
3623       struct ada_symbol_info sym = syms[i];
3624       int j;
3625
3626       for (j = i - 1; j >= 0; j -= 1)
3627         {
3628           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3629                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3630             break;
3631           syms[j + 1] = syms[j];
3632         }
3633       syms[j + 1] = sym;
3634     }
3635 }
3636
3637 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3638    by asking the user (if necessary), returning the number selected, 
3639    and setting the first elements of SYMS items.  Error if no symbols
3640    selected.  */
3641
3642 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3643    to be re-integrated one of these days.  */
3644
3645 int
3646 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3647 {
3648   int i;
3649   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3650   int n_chosen;
3651   int first_choice = (max_results == 1) ? 1 : 2;
3652   const char *select_mode = multiple_symbols_select_mode ();
3653
3654   if (max_results < 1)
3655     error (_("Request to select 0 symbols!"));
3656   if (nsyms <= 1)
3657     return nsyms;
3658
3659   if (select_mode == multiple_symbols_cancel)
3660     error (_("\
3661 canceled because the command is ambiguous\n\
3662 See set/show multiple-symbol."));
3663   
3664   /* If select_mode is "all", then return all possible symbols.
3665      Only do that if more than one symbol can be selected, of course.
3666      Otherwise, display the menu as usual.  */
3667   if (select_mode == multiple_symbols_all && max_results > 1)
3668     return nsyms;
3669
3670   printf_unfiltered (_("[0] cancel\n"));
3671   if (max_results > 1)
3672     printf_unfiltered (_("[1] all\n"));
3673
3674   sort_choices (syms, nsyms);
3675
3676   for (i = 0; i < nsyms; i += 1)
3677     {
3678       if (syms[i].sym == NULL)
3679         continue;
3680
3681       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3682         {
3683           struct symtab_and_line sal =
3684             find_function_start_sal (syms[i].sym, 1);
3685
3686           if (sal.symtab == NULL)
3687             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3688                                i + first_choice,
3689                                SYMBOL_PRINT_NAME (syms[i].sym),
3690                                sal.line);
3691           else
3692             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3693                                SYMBOL_PRINT_NAME (syms[i].sym),
3694                                symtab_to_filename_for_display (sal.symtab),
3695                                sal.line);
3696           continue;
3697         }
3698       else
3699         {
3700           int is_enumeral =
3701             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3702              && SYMBOL_TYPE (syms[i].sym) != NULL
3703              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3704           struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
3705
3706           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3707             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3708                                i + first_choice,
3709                                SYMBOL_PRINT_NAME (syms[i].sym),
3710                                symtab_to_filename_for_display (symtab),
3711                                SYMBOL_LINE (syms[i].sym));
3712           else if (is_enumeral
3713                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3714             {
3715               printf_unfiltered (("[%d] "), i + first_choice);
3716               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3717                               gdb_stdout, -1, 0, &type_print_raw_options);
3718               printf_unfiltered (_("'(%s) (enumeral)\n"),
3719                                  SYMBOL_PRINT_NAME (syms[i].sym));
3720             }
3721           else if (symtab != NULL)
3722             printf_unfiltered (is_enumeral
3723                                ? _("[%d] %s in %s (enumeral)\n")
3724                                : _("[%d] %s at %s:?\n"),
3725                                i + first_choice,
3726                                SYMBOL_PRINT_NAME (syms[i].sym),
3727                                symtab_to_filename_for_display (symtab));
3728           else
3729             printf_unfiltered (is_enumeral
3730                                ? _("[%d] %s (enumeral)\n")
3731                                : _("[%d] %s at ?\n"),
3732                                i + first_choice,
3733                                SYMBOL_PRINT_NAME (syms[i].sym));
3734         }
3735     }
3736
3737   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3738                              "overload-choice");
3739
3740   for (i = 0; i < n_chosen; i += 1)
3741     syms[i] = syms[chosen[i]];
3742
3743   return n_chosen;
3744 }
3745
3746 /* Read and validate a set of numeric choices from the user in the
3747    range 0 .. N_CHOICES-1.  Place the results in increasing
3748    order in CHOICES[0 .. N-1], and return N.
3749
3750    The user types choices as a sequence of numbers on one line
3751    separated by blanks, encoding them as follows:
3752
3753      + A choice of 0 means to cancel the selection, throwing an error.
3754      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3755      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3756
3757    The user is not allowed to choose more than MAX_RESULTS values.
3758
3759    ANNOTATION_SUFFIX, if present, is used to annotate the input
3760    prompts (for use with the -f switch).  */
3761
3762 int
3763 get_selections (int *choices, int n_choices, int max_results,
3764                 int is_all_choice, char *annotation_suffix)
3765 {
3766   char *args;
3767   char *prompt;
3768   int n_chosen;
3769   int first_choice = is_all_choice ? 2 : 1;
3770
3771   prompt = getenv ("PS2");
3772   if (prompt == NULL)
3773     prompt = "> ";
3774
3775   args = command_line_input (prompt, 0, annotation_suffix);
3776
3777   if (args == NULL)
3778     error_no_arg (_("one or more choice numbers"));
3779
3780   n_chosen = 0;
3781
3782   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3783      order, as given in args.  Choices are validated.  */
3784   while (1)
3785     {
3786       char *args2;
3787       int choice, j;
3788
3789       args = skip_spaces (args);
3790       if (*args == '\0' && n_chosen == 0)
3791         error_no_arg (_("one or more choice numbers"));
3792       else if (*args == '\0')
3793         break;
3794
3795       choice = strtol (args, &args2, 10);
3796       if (args == args2 || choice < 0
3797           || choice > n_choices + first_choice - 1)
3798         error (_("Argument must be choice number"));
3799       args = args2;
3800
3801       if (choice == 0)
3802         error (_("cancelled"));
3803
3804       if (choice < first_choice)
3805         {
3806           n_chosen = n_choices;
3807           for (j = 0; j < n_choices; j += 1)
3808             choices[j] = j;
3809           break;
3810         }
3811       choice -= first_choice;
3812
3813       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3814         {
3815         }
3816
3817       if (j < 0 || choice != choices[j])
3818         {
3819           int k;
3820
3821           for (k = n_chosen - 1; k > j; k -= 1)
3822             choices[k + 1] = choices[k];
3823           choices[j + 1] = choice;
3824           n_chosen += 1;
3825         }
3826     }
3827
3828   if (n_chosen > max_results)
3829     error (_("Select no more than %d of the above"), max_results);
3830
3831   return n_chosen;
3832 }
3833
3834 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3835    on the function identified by SYM and BLOCK, and taking NARGS
3836    arguments.  Update *EXPP as needed to hold more space.  */
3837
3838 static void
3839 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3840                             int oplen, struct symbol *sym,
3841                             const struct block *block)
3842 {
3843   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3844      symbol, -oplen for operator being replaced).  */
3845   struct expression *newexp = (struct expression *)
3846     xzalloc (sizeof (struct expression)
3847              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3848   struct expression *exp = *expp;
3849
3850   newexp->nelts = exp->nelts + 7 - oplen;
3851   newexp->language_defn = exp->language_defn;
3852   newexp->gdbarch = exp->gdbarch;
3853   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3854   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3855           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3856
3857   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3858   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3859
3860   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3861   newexp->elts[pc + 4].block = block;
3862   newexp->elts[pc + 5].symbol = sym;
3863
3864   *expp = newexp;
3865   xfree (exp);
3866 }
3867
3868 /* Type-class predicates */
3869
3870 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3871    or FLOAT).  */
3872
3873 static int
3874 numeric_type_p (struct type *type)
3875 {
3876   if (type == NULL)
3877     return 0;
3878   else
3879     {
3880       switch (TYPE_CODE (type))
3881         {
3882         case TYPE_CODE_INT:
3883         case TYPE_CODE_FLT:
3884           return 1;
3885         case TYPE_CODE_RANGE:
3886           return (type == TYPE_TARGET_TYPE (type)
3887                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3888         default:
3889           return 0;
3890         }
3891     }
3892 }
3893
3894 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3895
3896 static int
3897 integer_type_p (struct type *type)
3898 {
3899   if (type == NULL)
3900     return 0;
3901   else
3902     {
3903       switch (TYPE_CODE (type))
3904         {
3905         case TYPE_CODE_INT:
3906           return 1;
3907         case TYPE_CODE_RANGE:
3908           return (type == TYPE_TARGET_TYPE (type)
3909                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3910         default:
3911           return 0;
3912         }
3913     }
3914 }
3915
3916 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3917
3918 static int
3919 scalar_type_p (struct type *type)
3920 {
3921   if (type == NULL)
3922     return 0;
3923   else
3924     {
3925       switch (TYPE_CODE (type))
3926         {
3927         case TYPE_CODE_INT:
3928         case TYPE_CODE_RANGE:
3929         case TYPE_CODE_ENUM:
3930         case TYPE_CODE_FLT:
3931           return 1;
3932         default:
3933           return 0;
3934         }
3935     }
3936 }
3937
3938 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3939
3940 static int
3941 discrete_type_p (struct type *type)
3942 {
3943   if (type == NULL)
3944     return 0;
3945   else
3946     {
3947       switch (TYPE_CODE (type))
3948         {
3949         case TYPE_CODE_INT:
3950         case TYPE_CODE_RANGE:
3951         case TYPE_CODE_ENUM:
3952         case TYPE_CODE_BOOL:
3953           return 1;
3954         default:
3955           return 0;
3956         }
3957     }
3958 }
3959
3960 /* Returns non-zero if OP with operands in the vector ARGS could be
3961    a user-defined function.  Errs on the side of pre-defined operators
3962    (i.e., result 0).  */
3963
3964 static int
3965 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3966 {
3967   struct type *type0 =
3968     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3969   struct type *type1 =
3970     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3971
3972   if (type0 == NULL)
3973     return 0;
3974
3975   switch (op)
3976     {
3977     default:
3978       return 0;
3979
3980     case BINOP_ADD:
3981     case BINOP_SUB:
3982     case BINOP_MUL:
3983     case BINOP_DIV:
3984       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3985
3986     case BINOP_REM:
3987     case BINOP_MOD:
3988     case BINOP_BITWISE_AND:
3989     case BINOP_BITWISE_IOR:
3990     case BINOP_BITWISE_XOR:
3991       return (!(integer_type_p (type0) && integer_type_p (type1)));
3992
3993     case BINOP_EQUAL:
3994     case BINOP_NOTEQUAL:
3995     case BINOP_LESS:
3996     case BINOP_GTR:
3997     case BINOP_LEQ:
3998     case BINOP_GEQ:
3999       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4000
4001     case BINOP_CONCAT:
4002       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4003
4004     case BINOP_EXP:
4005       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4006
4007     case UNOP_NEG:
4008     case UNOP_PLUS:
4009     case UNOP_LOGICAL_NOT:
4010     case UNOP_ABS:
4011       return (!numeric_type_p (type0));
4012
4013     }
4014 }
4015 \f
4016                                 /* Renaming */
4017
4018 /* NOTES: 
4019
4020    1. In the following, we assume that a renaming type's name may
4021       have an ___XD suffix.  It would be nice if this went away at some
4022       point.
4023    2. We handle both the (old) purely type-based representation of 
4024       renamings and the (new) variable-based encoding.  At some point,
4025       it is devoutly to be hoped that the former goes away 
4026       (FIXME: hilfinger-2007-07-09).
4027    3. Subprogram renamings are not implemented, although the XRS
4028       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4029
4030 /* If SYM encodes a renaming, 
4031
4032        <renaming> renames <renamed entity>,
4033
4034    sets *LEN to the length of the renamed entity's name,
4035    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4036    the string describing the subcomponent selected from the renamed
4037    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4038    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4039    are undefined).  Otherwise, returns a value indicating the category
4040    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4041    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4042    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4043    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4044    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4045    may be NULL, in which case they are not assigned.
4046
4047    [Currently, however, GCC does not generate subprogram renamings.]  */
4048
4049 enum ada_renaming_category
4050 ada_parse_renaming (struct symbol *sym,
4051                     const char **renamed_entity, int *len, 
4052                     const char **renaming_expr)
4053 {
4054   enum ada_renaming_category kind;
4055   const char *info;
4056   const char *suffix;
4057
4058   if (sym == NULL)
4059     return ADA_NOT_RENAMING;
4060   switch (SYMBOL_CLASS (sym)) 
4061     {
4062     default:
4063       return ADA_NOT_RENAMING;
4064     case LOC_TYPEDEF:
4065       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4066                                        renamed_entity, len, renaming_expr);
4067     case LOC_LOCAL:
4068     case LOC_STATIC:
4069     case LOC_COMPUTED:
4070     case LOC_OPTIMIZED_OUT:
4071       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4072       if (info == NULL)
4073         return ADA_NOT_RENAMING;
4074       switch (info[5])
4075         {
4076         case '_':
4077           kind = ADA_OBJECT_RENAMING;
4078           info += 6;
4079           break;
4080         case 'E':
4081           kind = ADA_EXCEPTION_RENAMING;
4082           info += 7;
4083           break;
4084         case 'P':
4085           kind = ADA_PACKAGE_RENAMING;
4086           info += 7;
4087           break;
4088         case 'S':
4089           kind = ADA_SUBPROGRAM_RENAMING;
4090           info += 7;
4091           break;
4092         default:
4093           return ADA_NOT_RENAMING;
4094         }
4095     }
4096
4097   if (renamed_entity != NULL)
4098     *renamed_entity = info;
4099   suffix = strstr (info, "___XE");
4100   if (suffix == NULL || suffix == info)
4101     return ADA_NOT_RENAMING;
4102   if (len != NULL)
4103     *len = strlen (info) - strlen (suffix);
4104   suffix += 5;
4105   if (renaming_expr != NULL)
4106     *renaming_expr = suffix;
4107   return kind;
4108 }
4109
4110 /* Assuming TYPE encodes a renaming according to the old encoding in
4111    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4112    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4113    ADA_NOT_RENAMING otherwise.  */
4114 static enum ada_renaming_category
4115 parse_old_style_renaming (struct type *type,
4116                           const char **renamed_entity, int *len, 
4117                           const char **renaming_expr)
4118 {
4119   enum ada_renaming_category kind;
4120   const char *name;
4121   const char *info;
4122   const char *suffix;
4123
4124   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4125       || TYPE_NFIELDS (type) != 1)
4126     return ADA_NOT_RENAMING;
4127
4128   name = type_name_no_tag (type);
4129   if (name == NULL)
4130     return ADA_NOT_RENAMING;
4131   
4132   name = strstr (name, "___XR");
4133   if (name == NULL)
4134     return ADA_NOT_RENAMING;
4135   switch (name[5])
4136     {
4137     case '\0':
4138     case '_':
4139       kind = ADA_OBJECT_RENAMING;
4140       break;
4141     case 'E':
4142       kind = ADA_EXCEPTION_RENAMING;
4143       break;
4144     case 'P':
4145       kind = ADA_PACKAGE_RENAMING;
4146       break;
4147     case 'S':
4148       kind = ADA_SUBPROGRAM_RENAMING;
4149       break;
4150     default:
4151       return ADA_NOT_RENAMING;
4152     }
4153
4154   info = TYPE_FIELD_NAME (type, 0);
4155   if (info == NULL)
4156     return ADA_NOT_RENAMING;
4157   if (renamed_entity != NULL)
4158     *renamed_entity = info;
4159   suffix = strstr (info, "___XE");
4160   if (renaming_expr != NULL)
4161     *renaming_expr = suffix + 5;
4162   if (suffix == NULL || suffix == info)
4163     return ADA_NOT_RENAMING;
4164   if (len != NULL)
4165     *len = suffix - info;
4166   return kind;
4167 }
4168
4169 /* Compute the value of the given RENAMING_SYM, which is expected to
4170    be a symbol encoding a renaming expression.  BLOCK is the block
4171    used to evaluate the renaming.  */
4172
4173 static struct value *
4174 ada_read_renaming_var_value (struct symbol *renaming_sym,
4175                              const struct block *block)
4176 {
4177   const char *sym_name;
4178   struct expression *expr;
4179   struct value *value;
4180   struct cleanup *old_chain = NULL;
4181
4182   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4183   expr = parse_exp_1 (&sym_name, 0, block, 0);
4184   old_chain = make_cleanup (free_current_contents, &expr);
4185   value = evaluate_expression (expr);
4186
4187   do_cleanups (old_chain);
4188   return value;
4189 }
4190 \f
4191
4192                                 /* Evaluation: Function Calls */
4193
4194 /* Return an lvalue containing the value VAL.  This is the identity on
4195    lvalues, and otherwise has the side-effect of allocating memory
4196    in the inferior where a copy of the value contents is copied.  */
4197
4198 static struct value *
4199 ensure_lval (struct value *val)
4200 {
4201   if (VALUE_LVAL (val) == not_lval
4202       || VALUE_LVAL (val) == lval_internalvar)
4203     {
4204       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4205       const CORE_ADDR addr =
4206         value_as_long (value_allocate_space_in_inferior (len));
4207
4208       set_value_address (val, addr);
4209       VALUE_LVAL (val) = lval_memory;
4210       write_memory (addr, value_contents (val), len);
4211     }
4212
4213   return val;
4214 }
4215
4216 /* Return the value ACTUAL, converted to be an appropriate value for a
4217    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4218    allocating any necessary descriptors (fat pointers), or copies of
4219    values not residing in memory, updating it as needed.  */
4220
4221 struct value *
4222 ada_convert_actual (struct value *actual, struct type *formal_type0)
4223 {
4224   struct type *actual_type = ada_check_typedef (value_type (actual));
4225   struct type *formal_type = ada_check_typedef (formal_type0);
4226   struct type *formal_target =
4227     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4228     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4229   struct type *actual_target =
4230     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4231     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4232
4233   if (ada_is_array_descriptor_type (formal_target)
4234       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4235     return make_array_descriptor (formal_type, actual);
4236   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4237            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4238     {
4239       struct value *result;
4240
4241       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4242           && ada_is_array_descriptor_type (actual_target))
4243         result = desc_data (actual);
4244       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4245         {
4246           if (VALUE_LVAL (actual) != lval_memory)
4247             {
4248               struct value *val;
4249
4250               actual_type = ada_check_typedef (value_type (actual));
4251               val = allocate_value (actual_type);
4252               memcpy ((char *) value_contents_raw (val),
4253                       (char *) value_contents (actual),
4254                       TYPE_LENGTH (actual_type));
4255               actual = ensure_lval (val);
4256             }
4257           result = value_addr (actual);
4258         }
4259       else
4260         return actual;
4261       return value_cast_pointers (formal_type, result, 0);
4262     }
4263   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4264     return ada_value_ind (actual);
4265
4266   return actual;
4267 }
4268
4269 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4270    type TYPE.  This is usually an inefficient no-op except on some targets
4271    (such as AVR) where the representation of a pointer and an address
4272    differs.  */
4273
4274 static CORE_ADDR
4275 value_pointer (struct value *value, struct type *type)
4276 {
4277   struct gdbarch *gdbarch = get_type_arch (type);
4278   unsigned len = TYPE_LENGTH (type);
4279   gdb_byte *buf = alloca (len);
4280   CORE_ADDR addr;
4281
4282   addr = value_address (value);
4283   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4284   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4285   return addr;
4286 }
4287
4288
4289 /* Push a descriptor of type TYPE for array value ARR on the stack at
4290    *SP, updating *SP to reflect the new descriptor.  Return either
4291    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4292    to-descriptor type rather than a descriptor type), a struct value *
4293    representing a pointer to this descriptor.  */
4294
4295 static struct value *
4296 make_array_descriptor (struct type *type, struct value *arr)
4297 {
4298   struct type *bounds_type = desc_bounds_type (type);
4299   struct type *desc_type = desc_base_type (type);
4300   struct value *descriptor = allocate_value (desc_type);
4301   struct value *bounds = allocate_value (bounds_type);
4302   int i;
4303
4304   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4305        i > 0; i -= 1)
4306     {
4307       modify_field (value_type (bounds), value_contents_writeable (bounds),
4308                     ada_array_bound (arr, i, 0),
4309                     desc_bound_bitpos (bounds_type, i, 0),
4310                     desc_bound_bitsize (bounds_type, i, 0));
4311       modify_field (value_type (bounds), value_contents_writeable (bounds),
4312                     ada_array_bound (arr, i, 1),
4313                     desc_bound_bitpos (bounds_type, i, 1),
4314                     desc_bound_bitsize (bounds_type, i, 1));
4315     }
4316
4317   bounds = ensure_lval (bounds);
4318
4319   modify_field (value_type (descriptor),
4320                 value_contents_writeable (descriptor),
4321                 value_pointer (ensure_lval (arr),
4322                                TYPE_FIELD_TYPE (desc_type, 0)),
4323                 fat_pntr_data_bitpos (desc_type),
4324                 fat_pntr_data_bitsize (desc_type));
4325
4326   modify_field (value_type (descriptor),
4327                 value_contents_writeable (descriptor),
4328                 value_pointer (bounds,
4329                                TYPE_FIELD_TYPE (desc_type, 1)),
4330                 fat_pntr_bounds_bitpos (desc_type),
4331                 fat_pntr_bounds_bitsize (desc_type));
4332
4333   descriptor = ensure_lval (descriptor);
4334
4335   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4336     return value_addr (descriptor);
4337   else
4338     return descriptor;
4339 }
4340 \f
4341                                 /* Symbol Cache Module */
4342
4343 /* Performance measurements made as of 2010-01-15 indicate that
4344    this cache does bring some noticeable improvements.  Depending
4345    on the type of entity being printed, the cache can make it as much
4346    as an order of magnitude faster than without it.
4347
4348    The descriptive type DWARF extension has significantly reduced
4349    the need for this cache, at least when DWARF is being used.  However,
4350    even in this case, some expensive name-based symbol searches are still
4351    sometimes necessary - to find an XVZ variable, mostly.  */
4352
4353 /* Initialize the contents of SYM_CACHE.  */
4354
4355 static void
4356 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4357 {
4358   obstack_init (&sym_cache->cache_space);
4359   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4360 }
4361
4362 /* Free the memory used by SYM_CACHE.  */
4363
4364 static void
4365 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4366 {
4367   obstack_free (&sym_cache->cache_space, NULL);
4368   xfree (sym_cache);
4369 }
4370
4371 /* Return the symbol cache associated to the given program space PSPACE.
4372    If not allocated for this PSPACE yet, allocate and initialize one.  */
4373
4374 static struct ada_symbol_cache *
4375 ada_get_symbol_cache (struct program_space *pspace)
4376 {
4377   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4378   struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4379
4380   if (sym_cache == NULL)
4381     {
4382       sym_cache = XCNEW (struct ada_symbol_cache);
4383       ada_init_symbol_cache (sym_cache);
4384     }
4385
4386   return sym_cache;
4387 }
4388
4389 /* Clear all entries from the symbol cache.  */
4390
4391 static void
4392 ada_clear_symbol_cache (void)
4393 {
4394   struct ada_symbol_cache *sym_cache
4395     = ada_get_symbol_cache (current_program_space);
4396
4397   obstack_free (&sym_cache->cache_space, NULL);
4398   ada_init_symbol_cache (sym_cache);
4399 }
4400
4401 /* Search our cache for an entry matching NAME and NAMESPACE.
4402    Return it if found, or NULL otherwise.  */
4403
4404 static struct cache_entry **
4405 find_entry (const char *name, domain_enum namespace)
4406 {
4407   struct ada_symbol_cache *sym_cache
4408     = ada_get_symbol_cache (current_program_space);
4409   int h = msymbol_hash (name) % HASH_SIZE;
4410   struct cache_entry **e;
4411
4412   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4413     {
4414       if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4415         return e;
4416     }
4417   return NULL;
4418 }
4419
4420 /* Search the symbol cache for an entry matching NAME and NAMESPACE.
4421    Return 1 if found, 0 otherwise.
4422
4423    If an entry was found and SYM is not NULL, set *SYM to the entry's
4424    SYM.  Same principle for BLOCK if not NULL.  */
4425
4426 static int
4427 lookup_cached_symbol (const char *name, domain_enum namespace,
4428                       struct symbol **sym, const struct block **block)
4429 {
4430   struct cache_entry **e = find_entry (name, namespace);
4431
4432   if (e == NULL)
4433     return 0;
4434   if (sym != NULL)
4435     *sym = (*e)->sym;
4436   if (block != NULL)
4437     *block = (*e)->block;
4438   return 1;
4439 }
4440
4441 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4442    in domain NAMESPACE, save this result in our symbol cache.  */
4443
4444 static void
4445 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
4446               const struct block *block)
4447 {
4448   struct ada_symbol_cache *sym_cache
4449     = ada_get_symbol_cache (current_program_space);
4450   int h;
4451   char *copy;
4452   struct cache_entry *e;
4453
4454   /* If the symbol is a local symbol, then do not cache it, as a search
4455      for that symbol depends on the context.  To determine whether
4456      the symbol is local or not, we check the block where we found it
4457      against the global and static blocks of its associated symtab.  */
4458   if (sym
4459       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), GLOBAL_BLOCK) != block
4460       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), STATIC_BLOCK) != block)
4461     return;
4462
4463   h = msymbol_hash (name) % HASH_SIZE;
4464   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4465                                             sizeof (*e));
4466   e->next = sym_cache->root[h];
4467   sym_cache->root[h] = e;
4468   e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4469   strcpy (copy, name);
4470   e->sym = sym;
4471   e->namespace = namespace;
4472   e->block = block;
4473 }
4474 \f
4475                                 /* Symbol Lookup */
4476
4477 /* Return nonzero if wild matching should be used when searching for
4478    all symbols matching LOOKUP_NAME.
4479
4480    LOOKUP_NAME is expected to be a symbol name after transformation
4481    for Ada lookups (see ada_name_for_lookup).  */
4482
4483 static int
4484 should_use_wild_match (const char *lookup_name)
4485 {
4486   return (strstr (lookup_name, "__") == NULL);
4487 }
4488
4489 /* Return the result of a standard (literal, C-like) lookup of NAME in
4490    given DOMAIN, visible from lexical block BLOCK.  */
4491
4492 static struct symbol *
4493 standard_lookup (const char *name, const struct block *block,
4494                  domain_enum domain)
4495 {
4496   /* Initialize it just to avoid a GCC false warning.  */
4497   struct symbol *sym = NULL;
4498
4499   if (lookup_cached_symbol (name, domain, &sym, NULL))
4500     return sym;
4501   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4502   cache_symbol (name, domain, sym, block_found);
4503   return sym;
4504 }
4505
4506
4507 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4508    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4509    since they contend in overloading in the same way.  */
4510 static int
4511 is_nonfunction (struct ada_symbol_info syms[], int n)
4512 {
4513   int i;
4514
4515   for (i = 0; i < n; i += 1)
4516     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4517         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4518             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4519       return 1;
4520
4521   return 0;
4522 }
4523
4524 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4525    struct types.  Otherwise, they may not.  */
4526
4527 static int
4528 equiv_types (struct type *type0, struct type *type1)
4529 {
4530   if (type0 == type1)
4531     return 1;
4532   if (type0 == NULL || type1 == NULL
4533       || TYPE_CODE (type0) != TYPE_CODE (type1))
4534     return 0;
4535   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4536        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4537       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4538       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4539     return 1;
4540
4541   return 0;
4542 }
4543
4544 /* True iff SYM0 represents the same entity as SYM1, or one that is
4545    no more defined than that of SYM1.  */
4546
4547 static int
4548 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4549 {
4550   if (sym0 == sym1)
4551     return 1;
4552   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4553       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4554     return 0;
4555
4556   switch (SYMBOL_CLASS (sym0))
4557     {
4558     case LOC_UNDEF:
4559       return 1;
4560     case LOC_TYPEDEF:
4561       {
4562         struct type *type0 = SYMBOL_TYPE (sym0);
4563         struct type *type1 = SYMBOL_TYPE (sym1);
4564         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4565         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4566         int len0 = strlen (name0);
4567
4568         return
4569           TYPE_CODE (type0) == TYPE_CODE (type1)
4570           && (equiv_types (type0, type1)
4571               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4572                   && strncmp (name1 + len0, "___XV", 5) == 0));
4573       }
4574     case LOC_CONST:
4575       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4576         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4577     default:
4578       return 0;
4579     }
4580 }
4581
4582 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4583    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4584
4585 static void
4586 add_defn_to_vec (struct obstack *obstackp,
4587                  struct symbol *sym,
4588                  const struct block *block)
4589 {
4590   int i;
4591   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4592
4593   /* Do not try to complete stub types, as the debugger is probably
4594      already scanning all symbols matching a certain name at the
4595      time when this function is called.  Trying to replace the stub
4596      type by its associated full type will cause us to restart a scan
4597      which may lead to an infinite recursion.  Instead, the client
4598      collecting the matching symbols will end up collecting several
4599      matches, with at least one of them complete.  It can then filter
4600      out the stub ones if needed.  */
4601
4602   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4603     {
4604       if (lesseq_defined_than (sym, prevDefns[i].sym))
4605         return;
4606       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4607         {
4608           prevDefns[i].sym = sym;
4609           prevDefns[i].block = block;
4610           return;
4611         }
4612     }
4613
4614   {
4615     struct ada_symbol_info info;
4616
4617     info.sym = sym;
4618     info.block = block;
4619     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4620   }
4621 }
4622
4623 /* Number of ada_symbol_info structures currently collected in 
4624    current vector in *OBSTACKP.  */
4625
4626 static int
4627 num_defns_collected (struct obstack *obstackp)
4628 {
4629   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4630 }
4631
4632 /* Vector of ada_symbol_info structures currently collected in current 
4633    vector in *OBSTACKP.  If FINISH, close off the vector and return
4634    its final address.  */
4635
4636 static struct ada_symbol_info *
4637 defns_collected (struct obstack *obstackp, int finish)
4638 {
4639   if (finish)
4640     return obstack_finish (obstackp);
4641   else
4642     return (struct ada_symbol_info *) obstack_base (obstackp);
4643 }
4644
4645 /* Return a bound minimal symbol matching NAME according to Ada
4646    decoding rules.  Returns an invalid symbol if there is no such
4647    minimal symbol.  Names prefixed with "standard__" are handled
4648    specially: "standard__" is first stripped off, and only static and
4649    global symbols are searched.  */
4650
4651 struct bound_minimal_symbol
4652 ada_lookup_simple_minsym (const char *name)
4653 {
4654   struct bound_minimal_symbol result;
4655   struct objfile *objfile;
4656   struct minimal_symbol *msymbol;
4657   const int wild_match_p = should_use_wild_match (name);
4658
4659   memset (&result, 0, sizeof (result));
4660
4661   /* Special case: If the user specifies a symbol name inside package
4662      Standard, do a non-wild matching of the symbol name without
4663      the "standard__" prefix.  This was primarily introduced in order
4664      to allow the user to specifically access the standard exceptions
4665      using, for instance, Standard.Constraint_Error when Constraint_Error
4666      is ambiguous (due to the user defining its own Constraint_Error
4667      entity inside its program).  */
4668   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4669     name += sizeof ("standard__") - 1;
4670
4671   ALL_MSYMBOLS (objfile, msymbol)
4672   {
4673     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4674         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4675       {
4676         result.minsym = msymbol;
4677         result.objfile = objfile;
4678         break;
4679       }
4680   }
4681
4682   return result;
4683 }
4684
4685 /* For all subprograms that statically enclose the subprogram of the
4686    selected frame, add symbols matching identifier NAME in DOMAIN
4687    and their blocks to the list of data in OBSTACKP, as for
4688    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4689    with a wildcard prefix.  */
4690
4691 static void
4692 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4693                                   const char *name, domain_enum namespace,
4694                                   int wild_match_p)
4695 {
4696 }
4697
4698 /* True if TYPE is definitely an artificial type supplied to a symbol
4699    for which no debugging information was given in the symbol file.  */
4700
4701 static int
4702 is_nondebugging_type (struct type *type)
4703 {
4704   const char *name = ada_type_name (type);
4705
4706   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4707 }
4708
4709 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4710    that are deemed "identical" for practical purposes.
4711
4712    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4713    types and that their number of enumerals is identical (in other
4714    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4715
4716 static int
4717 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4718 {
4719   int i;
4720
4721   /* The heuristic we use here is fairly conservative.  We consider
4722      that 2 enumerate types are identical if they have the same
4723      number of enumerals and that all enumerals have the same
4724      underlying value and name.  */
4725
4726   /* All enums in the type should have an identical underlying value.  */
4727   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4728     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4729       return 0;
4730
4731   /* All enumerals should also have the same name (modulo any numerical
4732      suffix).  */
4733   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4734     {
4735       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4736       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4737       int len_1 = strlen (name_1);
4738       int len_2 = strlen (name_2);
4739
4740       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4741       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4742       if (len_1 != len_2
4743           || strncmp (TYPE_FIELD_NAME (type1, i),
4744                       TYPE_FIELD_NAME (type2, i),
4745                       len_1) != 0)
4746         return 0;
4747     }
4748
4749   return 1;
4750 }
4751
4752 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4753    that are deemed "identical" for practical purposes.  Sometimes,
4754    enumerals are not strictly identical, but their types are so similar
4755    that they can be considered identical.
4756
4757    For instance, consider the following code:
4758
4759       type Color is (Black, Red, Green, Blue, White);
4760       type RGB_Color is new Color range Red .. Blue;
4761
4762    Type RGB_Color is a subrange of an implicit type which is a copy
4763    of type Color. If we call that implicit type RGB_ColorB ("B" is
4764    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4765    As a result, when an expression references any of the enumeral
4766    by name (Eg. "print green"), the expression is technically
4767    ambiguous and the user should be asked to disambiguate. But
4768    doing so would only hinder the user, since it wouldn't matter
4769    what choice he makes, the outcome would always be the same.
4770    So, for practical purposes, we consider them as the same.  */
4771
4772 static int
4773 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4774 {
4775   int i;
4776
4777   /* Before performing a thorough comparison check of each type,
4778      we perform a series of inexpensive checks.  We expect that these
4779      checks will quickly fail in the vast majority of cases, and thus
4780      help prevent the unnecessary use of a more expensive comparison.
4781      Said comparison also expects us to make some of these checks
4782      (see ada_identical_enum_types_p).  */
4783
4784   /* Quick check: All symbols should have an enum type.  */
4785   for (i = 0; i < nsyms; i++)
4786     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4787       return 0;
4788
4789   /* Quick check: They should all have the same value.  */
4790   for (i = 1; i < nsyms; i++)
4791     if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4792       return 0;
4793
4794   /* Quick check: They should all have the same number of enumerals.  */
4795   for (i = 1; i < nsyms; i++)
4796     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4797         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4798       return 0;
4799
4800   /* All the sanity checks passed, so we might have a set of
4801      identical enumeration types.  Perform a more complete
4802      comparison of the type of each symbol.  */
4803   for (i = 1; i < nsyms; i++)
4804     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4805                                      SYMBOL_TYPE (syms[0].sym)))
4806       return 0;
4807
4808   return 1;
4809 }
4810
4811 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4812    duplicate other symbols in the list (The only case I know of where
4813    this happens is when object files containing stabs-in-ecoff are
4814    linked with files containing ordinary ecoff debugging symbols (or no
4815    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4816    Returns the number of items in the modified list.  */
4817
4818 static int
4819 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4820 {
4821   int i, j;
4822
4823   /* We should never be called with less than 2 symbols, as there
4824      cannot be any extra symbol in that case.  But it's easy to
4825      handle, since we have nothing to do in that case.  */
4826   if (nsyms < 2)
4827     return nsyms;
4828
4829   i = 0;
4830   while (i < nsyms)
4831     {
4832       int remove_p = 0;
4833
4834       /* If two symbols have the same name and one of them is a stub type,
4835          the get rid of the stub.  */
4836
4837       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4838           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4839         {
4840           for (j = 0; j < nsyms; j++)
4841             {
4842               if (j != i
4843                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4844                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4845                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4846                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4847                 remove_p = 1;
4848             }
4849         }
4850
4851       /* Two symbols with the same name, same class and same address
4852          should be identical.  */
4853
4854       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4855           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4856           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4857         {
4858           for (j = 0; j < nsyms; j += 1)
4859             {
4860               if (i != j
4861                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4862                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4863                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4864                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4865                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4866                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4867                 remove_p = 1;
4868             }
4869         }
4870       
4871       if (remove_p)
4872         {
4873           for (j = i + 1; j < nsyms; j += 1)
4874             syms[j - 1] = syms[j];
4875           nsyms -= 1;
4876         }
4877
4878       i += 1;
4879     }
4880
4881   /* If all the remaining symbols are identical enumerals, then
4882      just keep the first one and discard the rest.
4883
4884      Unlike what we did previously, we do not discard any entry
4885      unless they are ALL identical.  This is because the symbol
4886      comparison is not a strict comparison, but rather a practical
4887      comparison.  If all symbols are considered identical, then
4888      we can just go ahead and use the first one and discard the rest.
4889      But if we cannot reduce the list to a single element, we have
4890      to ask the user to disambiguate anyways.  And if we have to
4891      present a multiple-choice menu, it's less confusing if the list
4892      isn't missing some choices that were identical and yet distinct.  */
4893   if (symbols_are_identical_enums (syms, nsyms))
4894     nsyms = 1;
4895
4896   return nsyms;
4897 }
4898
4899 /* Given a type that corresponds to a renaming entity, use the type name
4900    to extract the scope (package name or function name, fully qualified,
4901    and following the GNAT encoding convention) where this renaming has been
4902    defined.  The string returned needs to be deallocated after use.  */
4903
4904 static char *
4905 xget_renaming_scope (struct type *renaming_type)
4906 {
4907   /* The renaming types adhere to the following convention:
4908      <scope>__<rename>___<XR extension>.
4909      So, to extract the scope, we search for the "___XR" extension,
4910      and then backtrack until we find the first "__".  */
4911
4912   const char *name = type_name_no_tag (renaming_type);
4913   char *suffix = strstr (name, "___XR");
4914   char *last;
4915   int scope_len;
4916   char *scope;
4917
4918   /* Now, backtrack a bit until we find the first "__".  Start looking
4919      at suffix - 3, as the <rename> part is at least one character long.  */
4920
4921   for (last = suffix - 3; last > name; last--)
4922     if (last[0] == '_' && last[1] == '_')
4923       break;
4924
4925   /* Make a copy of scope and return it.  */
4926
4927   scope_len = last - name;
4928   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4929
4930   strncpy (scope, name, scope_len);
4931   scope[scope_len] = '\0';
4932
4933   return scope;
4934 }
4935
4936 /* Return nonzero if NAME corresponds to a package name.  */
4937
4938 static int
4939 is_package_name (const char *name)
4940 {
4941   /* Here, We take advantage of the fact that no symbols are generated
4942      for packages, while symbols are generated for each function.
4943      So the condition for NAME represent a package becomes equivalent
4944      to NAME not existing in our list of symbols.  There is only one
4945      small complication with library-level functions (see below).  */
4946
4947   char *fun_name;
4948
4949   /* If it is a function that has not been defined at library level,
4950      then we should be able to look it up in the symbols.  */
4951   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4952     return 0;
4953
4954   /* Library-level function names start with "_ada_".  See if function
4955      "_ada_" followed by NAME can be found.  */
4956
4957   /* Do a quick check that NAME does not contain "__", since library-level
4958      functions names cannot contain "__" in them.  */
4959   if (strstr (name, "__") != NULL)
4960     return 0;
4961
4962   fun_name = xstrprintf ("_ada_%s", name);
4963
4964   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4965 }
4966
4967 /* Return nonzero if SYM corresponds to a renaming entity that is
4968    not visible from FUNCTION_NAME.  */
4969
4970 static int
4971 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
4972 {
4973   char *scope;
4974   struct cleanup *old_chain;
4975
4976   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4977     return 0;
4978
4979   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4980   old_chain = make_cleanup (xfree, scope);
4981
4982   /* If the rename has been defined in a package, then it is visible.  */
4983   if (is_package_name (scope))
4984     {
4985       do_cleanups (old_chain);
4986       return 0;
4987     }
4988
4989   /* Check that the rename is in the current function scope by checking
4990      that its name starts with SCOPE.  */
4991
4992   /* If the function name starts with "_ada_", it means that it is
4993      a library-level function.  Strip this prefix before doing the
4994      comparison, as the encoding for the renaming does not contain
4995      this prefix.  */
4996   if (strncmp (function_name, "_ada_", 5) == 0)
4997     function_name += 5;
4998
4999   {
5000     int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
5001
5002     do_cleanups (old_chain);
5003     return is_invisible;
5004   }
5005 }
5006
5007 /* Remove entries from SYMS that corresponds to a renaming entity that
5008    is not visible from the function associated with CURRENT_BLOCK or
5009    that is superfluous due to the presence of more specific renaming
5010    information.  Places surviving symbols in the initial entries of
5011    SYMS and returns the number of surviving symbols.
5012    
5013    Rationale:
5014    First, in cases where an object renaming is implemented as a
5015    reference variable, GNAT may produce both the actual reference
5016    variable and the renaming encoding.  In this case, we discard the
5017    latter.
5018
5019    Second, GNAT emits a type following a specified encoding for each renaming
5020    entity.  Unfortunately, STABS currently does not support the definition
5021    of types that are local to a given lexical block, so all renamings types
5022    are emitted at library level.  As a consequence, if an application
5023    contains two renaming entities using the same name, and a user tries to
5024    print the value of one of these entities, the result of the ada symbol
5025    lookup will also contain the wrong renaming type.
5026
5027    This function partially covers for this limitation by attempting to
5028    remove from the SYMS list renaming symbols that should be visible
5029    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5030    method with the current information available.  The implementation
5031    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5032    
5033       - When the user tries to print a rename in a function while there
5034         is another rename entity defined in a package:  Normally, the
5035         rename in the function has precedence over the rename in the
5036         package, so the latter should be removed from the list.  This is
5037         currently not the case.
5038         
5039       - This function will incorrectly remove valid renames if
5040         the CURRENT_BLOCK corresponds to a function which symbol name
5041         has been changed by an "Export" pragma.  As a consequence,
5042         the user will be unable to print such rename entities.  */
5043
5044 static int
5045 remove_irrelevant_renamings (struct ada_symbol_info *syms,
5046                              int nsyms, const struct block *current_block)
5047 {
5048   struct symbol *current_function;
5049   const char *current_function_name;
5050   int i;
5051   int is_new_style_renaming;
5052
5053   /* If there is both a renaming foo___XR... encoded as a variable and
5054      a simple variable foo in the same block, discard the latter.
5055      First, zero out such symbols, then compress.  */
5056   is_new_style_renaming = 0;
5057   for (i = 0; i < nsyms; i += 1)
5058     {
5059       struct symbol *sym = syms[i].sym;
5060       const struct block *block = syms[i].block;
5061       const char *name;
5062       const char *suffix;
5063
5064       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5065         continue;
5066       name = SYMBOL_LINKAGE_NAME (sym);
5067       suffix = strstr (name, "___XR");
5068
5069       if (suffix != NULL)
5070         {
5071           int name_len = suffix - name;
5072           int j;
5073
5074           is_new_style_renaming = 1;
5075           for (j = 0; j < nsyms; j += 1)
5076             if (i != j && syms[j].sym != NULL
5077                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5078                             name_len) == 0
5079                 && block == syms[j].block)
5080               syms[j].sym = NULL;
5081         }
5082     }
5083   if (is_new_style_renaming)
5084     {
5085       int j, k;
5086
5087       for (j = k = 0; j < nsyms; j += 1)
5088         if (syms[j].sym != NULL)
5089             {
5090               syms[k] = syms[j];
5091               k += 1;
5092             }
5093       return k;
5094     }
5095
5096   /* Extract the function name associated to CURRENT_BLOCK.
5097      Abort if unable to do so.  */
5098
5099   if (current_block == NULL)
5100     return nsyms;
5101
5102   current_function = block_linkage_function (current_block);
5103   if (current_function == NULL)
5104     return nsyms;
5105
5106   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5107   if (current_function_name == NULL)
5108     return nsyms;
5109
5110   /* Check each of the symbols, and remove it from the list if it is
5111      a type corresponding to a renaming that is out of the scope of
5112      the current block.  */
5113
5114   i = 0;
5115   while (i < nsyms)
5116     {
5117       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5118           == ADA_OBJECT_RENAMING
5119           && old_renaming_is_invisible (syms[i].sym, current_function_name))
5120         {
5121           int j;
5122
5123           for (j = i + 1; j < nsyms; j += 1)
5124             syms[j - 1] = syms[j];
5125           nsyms -= 1;
5126         }
5127       else
5128         i += 1;
5129     }
5130
5131   return nsyms;
5132 }
5133
5134 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5135    whose name and domain match NAME and DOMAIN respectively.
5136    If no match was found, then extend the search to "enclosing"
5137    routines (in other words, if we're inside a nested function,
5138    search the symbols defined inside the enclosing functions).
5139    If WILD_MATCH_P is nonzero, perform the naming matching in
5140    "wild" mode (see function "wild_match" for more info).
5141
5142    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5143
5144 static void
5145 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5146                        const struct block *block, domain_enum domain,
5147                        int wild_match_p)
5148 {
5149   int block_depth = 0;
5150
5151   while (block != NULL)
5152     {
5153       block_depth += 1;
5154       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5155                              wild_match_p);
5156
5157       /* If we found a non-function match, assume that's the one.  */
5158       if (is_nonfunction (defns_collected (obstackp, 0),
5159                           num_defns_collected (obstackp)))
5160         return;
5161
5162       block = BLOCK_SUPERBLOCK (block);
5163     }
5164
5165   /* If no luck so far, try to find NAME as a local symbol in some lexically
5166      enclosing subprogram.  */
5167   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5168     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5169 }
5170
5171 /* An object of this type is used as the user_data argument when
5172    calling the map_matching_symbols method.  */
5173
5174 struct match_data
5175 {
5176   struct objfile *objfile;
5177   struct obstack *obstackp;
5178   struct symbol *arg_sym;
5179   int found_sym;
5180 };
5181
5182 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5183    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5184    containing the obstack that collects the symbol list, the file that SYM
5185    must come from, a flag indicating whether a non-argument symbol has
5186    been found in the current block, and the last argument symbol
5187    passed in SYM within the current block (if any).  When SYM is null,
5188    marking the end of a block, the argument symbol is added if no
5189    other has been found.  */
5190
5191 static int
5192 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5193 {
5194   struct match_data *data = (struct match_data *) data0;
5195   
5196   if (sym == NULL)
5197     {
5198       if (!data->found_sym && data->arg_sym != NULL) 
5199         add_defn_to_vec (data->obstackp,
5200                          fixup_symbol_section (data->arg_sym, data->objfile),
5201                          block);
5202       data->found_sym = 0;
5203       data->arg_sym = NULL;
5204     }
5205   else 
5206     {
5207       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5208         return 0;
5209       else if (SYMBOL_IS_ARGUMENT (sym))
5210         data->arg_sym = sym;
5211       else
5212         {
5213           data->found_sym = 1;
5214           add_defn_to_vec (data->obstackp,
5215                            fixup_symbol_section (sym, data->objfile),
5216                            block);
5217         }
5218     }
5219   return 0;
5220 }
5221
5222 /* Implements compare_names, but only applying the comparision using
5223    the given CASING.  */
5224
5225 static int
5226 compare_names_with_case (const char *string1, const char *string2,
5227                          enum case_sensitivity casing)
5228 {
5229   while (*string1 != '\0' && *string2 != '\0')
5230     {
5231       char c1, c2;
5232
5233       if (isspace (*string1) || isspace (*string2))
5234         return strcmp_iw_ordered (string1, string2);
5235
5236       if (casing == case_sensitive_off)
5237         {
5238           c1 = tolower (*string1);
5239           c2 = tolower (*string2);
5240         }
5241       else
5242         {
5243           c1 = *string1;
5244           c2 = *string2;
5245         }
5246       if (c1 != c2)
5247         break;
5248
5249       string1 += 1;
5250       string2 += 1;
5251     }
5252
5253   switch (*string1)
5254     {
5255     case '(':
5256       return strcmp_iw_ordered (string1, string2);
5257     case '_':
5258       if (*string2 == '\0')
5259         {
5260           if (is_name_suffix (string1))
5261             return 0;
5262           else
5263             return 1;
5264         }
5265       /* FALLTHROUGH */
5266     default:
5267       if (*string2 == '(')
5268         return strcmp_iw_ordered (string1, string2);
5269       else
5270         {
5271           if (casing == case_sensitive_off)
5272             return tolower (*string1) - tolower (*string2);
5273           else
5274             return *string1 - *string2;
5275         }
5276     }
5277 }
5278
5279 /* Compare STRING1 to STRING2, with results as for strcmp.
5280    Compatible with strcmp_iw_ordered in that...
5281
5282        strcmp_iw_ordered (STRING1, STRING2) <= 0
5283
5284    ... implies...
5285
5286        compare_names (STRING1, STRING2) <= 0
5287
5288    (they may differ as to what symbols compare equal).  */
5289
5290 static int
5291 compare_names (const char *string1, const char *string2)
5292 {
5293   int result;
5294
5295   /* Similar to what strcmp_iw_ordered does, we need to perform
5296      a case-insensitive comparison first, and only resort to
5297      a second, case-sensitive, comparison if the first one was
5298      not sufficient to differentiate the two strings.  */
5299
5300   result = compare_names_with_case (string1, string2, case_sensitive_off);
5301   if (result == 0)
5302     result = compare_names_with_case (string1, string2, case_sensitive_on);
5303
5304   return result;
5305 }
5306
5307 /* Add to OBSTACKP all non-local symbols whose name and domain match
5308    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5309    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5310
5311 static void
5312 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5313                       domain_enum domain, int global,
5314                       int is_wild_match)
5315 {
5316   struct objfile *objfile;
5317   struct match_data data;
5318
5319   memset (&data, 0, sizeof data);
5320   data.obstackp = obstackp;
5321
5322   ALL_OBJFILES (objfile)
5323     {
5324       data.objfile = objfile;
5325
5326       if (is_wild_match)
5327         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5328                                                aux_add_nonlocal_symbols, &data,
5329                                                wild_match, NULL);
5330       else
5331         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5332                                                aux_add_nonlocal_symbols, &data,
5333                                                full_match, compare_names);
5334     }
5335
5336   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5337     {
5338       ALL_OBJFILES (objfile)
5339         {
5340           char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5341           strcpy (name1, "_ada_");
5342           strcpy (name1 + sizeof ("_ada_") - 1, name);
5343           data.objfile = objfile;
5344           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5345                                                  global,
5346                                                  aux_add_nonlocal_symbols,
5347                                                  &data,
5348                                                  full_match, compare_names);
5349         }
5350     }           
5351 }
5352
5353 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5354    non-zero, enclosing scope and in global scopes, returning the number of
5355    matches.
5356    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5357    indicating the symbols found and the blocks and symbol tables (if
5358    any) in which they were found.  This vector is transient---good only to
5359    the next call of ada_lookup_symbol_list.
5360
5361    When full_search is non-zero, any non-function/non-enumeral
5362    symbol match within the nest of blocks whose innermost member is BLOCK0,
5363    is the one match returned (no other matches in that or
5364    enclosing blocks is returned).  If there are any matches in or
5365    surrounding BLOCK0, then these alone are returned.
5366
5367    Names prefixed with "standard__" are handled specially: "standard__"
5368    is first stripped off, and only static and global symbols are searched.  */
5369
5370 static int
5371 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5372                                domain_enum namespace,
5373                                struct ada_symbol_info **results,
5374                                int full_search)
5375 {
5376   struct symbol *sym;
5377   const struct block *block;
5378   const char *name;
5379   const int wild_match_p = should_use_wild_match (name0);
5380   int cacheIfUnique;
5381   int ndefns;
5382
5383   obstack_free (&symbol_list_obstack, NULL);
5384   obstack_init (&symbol_list_obstack);
5385
5386   cacheIfUnique = 0;
5387
5388   /* Search specified block and its superiors.  */
5389
5390   name = name0;
5391   block = block0;
5392
5393   /* Special case: If the user specifies a symbol name inside package
5394      Standard, do a non-wild matching of the symbol name without
5395      the "standard__" prefix.  This was primarily introduced in order
5396      to allow the user to specifically access the standard exceptions
5397      using, for instance, Standard.Constraint_Error when Constraint_Error
5398      is ambiguous (due to the user defining its own Constraint_Error
5399      entity inside its program).  */
5400   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5401     {
5402       block = NULL;
5403       name = name0 + sizeof ("standard__") - 1;
5404     }
5405
5406   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5407
5408   if (block != NULL)
5409     {
5410       if (full_search)
5411         {
5412           ada_add_local_symbols (&symbol_list_obstack, name, block,
5413                                  namespace, wild_match_p);
5414         }
5415       else
5416         {
5417           /* In the !full_search case we're are being called by
5418              ada_iterate_over_symbols, and we don't want to search
5419              superblocks.  */
5420           ada_add_block_symbols (&symbol_list_obstack, block, name,
5421                                  namespace, NULL, wild_match_p);
5422         }
5423       if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5424         goto done;
5425     }
5426
5427   /* No non-global symbols found.  Check our cache to see if we have
5428      already performed this search before.  If we have, then return
5429      the same result.  */
5430
5431   cacheIfUnique = 1;
5432   if (lookup_cached_symbol (name0, namespace, &sym, &block))
5433     {
5434       if (sym != NULL)
5435         add_defn_to_vec (&symbol_list_obstack, sym, block);
5436       goto done;
5437     }
5438
5439   /* Search symbols from all global blocks.  */
5440  
5441   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5442                         wild_match_p);
5443
5444   /* Now add symbols from all per-file blocks if we've gotten no hits
5445      (not strictly correct, but perhaps better than an error).  */
5446
5447   if (num_defns_collected (&symbol_list_obstack) == 0)
5448     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5449                           wild_match_p);
5450
5451 done:
5452   ndefns = num_defns_collected (&symbol_list_obstack);
5453   *results = defns_collected (&symbol_list_obstack, 1);
5454
5455   ndefns = remove_extra_symbols (*results, ndefns);
5456
5457   if (ndefns == 0 && full_search)
5458     cache_symbol (name0, namespace, NULL, NULL);
5459
5460   if (ndefns == 1 && full_search && cacheIfUnique)
5461     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
5462
5463   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5464
5465   return ndefns;
5466 }
5467
5468 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5469    in global scopes, returning the number of matches, and setting *RESULTS
5470    to a vector of (SYM,BLOCK) tuples.
5471    See ada_lookup_symbol_list_worker for further details.  */
5472
5473 int
5474 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5475                         domain_enum domain, struct ada_symbol_info **results)
5476 {
5477   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5478 }
5479
5480 /* Implementation of the la_iterate_over_symbols method.  */
5481
5482 static void
5483 ada_iterate_over_symbols (const struct block *block,
5484                           const char *name, domain_enum domain,
5485                           symbol_found_callback_ftype *callback,
5486                           void *data)
5487 {
5488   int ndefs, i;
5489   struct ada_symbol_info *results;
5490
5491   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5492   for (i = 0; i < ndefs; ++i)
5493     {
5494       if (! (*callback) (results[i].sym, data))
5495         break;
5496     }
5497 }
5498
5499 /* If NAME is the name of an entity, return a string that should
5500    be used to look that entity up in Ada units.  This string should
5501    be deallocated after use using xfree.
5502
5503    NAME can have any form that the "break" or "print" commands might
5504    recognize.  In other words, it does not have to be the "natural"
5505    name, or the "encoded" name.  */
5506
5507 char *
5508 ada_name_for_lookup (const char *name)
5509 {
5510   char *canon;
5511   int nlen = strlen (name);
5512
5513   if (name[0] == '<' && name[nlen - 1] == '>')
5514     {
5515       canon = xmalloc (nlen - 1);
5516       memcpy (canon, name + 1, nlen - 2);
5517       canon[nlen - 2] = '\0';
5518     }
5519   else
5520     canon = xstrdup (ada_encode (ada_fold_name (name)));
5521   return canon;
5522 }
5523
5524 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5525    to 1, but choosing the first symbol found if there are multiple
5526    choices.
5527
5528    The result is stored in *INFO, which must be non-NULL.
5529    If no match is found, INFO->SYM is set to NULL.  */
5530
5531 void
5532 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5533                            domain_enum namespace,
5534                            struct ada_symbol_info *info)
5535 {
5536   struct ada_symbol_info *candidates;
5537   int n_candidates;
5538
5539   gdb_assert (info != NULL);
5540   memset (info, 0, sizeof (struct ada_symbol_info));
5541
5542   n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
5543   if (n_candidates == 0)
5544     return;
5545
5546   *info = candidates[0];
5547   info->sym = fixup_symbol_section (info->sym, NULL);
5548 }
5549
5550 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5551    scope and in global scopes, or NULL if none.  NAME is folded and
5552    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5553    choosing the first symbol if there are multiple choices.
5554    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5555
5556 struct symbol *
5557 ada_lookup_symbol (const char *name, const struct block *block0,
5558                    domain_enum namespace, int *is_a_field_of_this)
5559 {
5560   struct ada_symbol_info info;
5561
5562   if (is_a_field_of_this != NULL)
5563     *is_a_field_of_this = 0;
5564
5565   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5566                              block0, namespace, &info);
5567   return info.sym;
5568 }
5569
5570 static struct symbol *
5571 ada_lookup_symbol_nonlocal (const char *name,
5572                             const struct block *block,
5573                             const domain_enum domain)
5574 {
5575   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5576 }
5577
5578
5579 /* True iff STR is a possible encoded suffix of a normal Ada name
5580    that is to be ignored for matching purposes.  Suffixes of parallel
5581    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5582    are given by any of the regular expressions:
5583
5584    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5585    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5586    TKB              [subprogram suffix for task bodies]
5587    _E[0-9]+[bs]$    [protected object entry suffixes]
5588    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5589
5590    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5591    match is performed.  This sequence is used to differentiate homonyms,
5592    is an optional part of a valid name suffix.  */
5593
5594 static int
5595 is_name_suffix (const char *str)
5596 {
5597   int k;
5598   const char *matching;
5599   const int len = strlen (str);
5600
5601   /* Skip optional leading __[0-9]+.  */
5602
5603   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5604     {
5605       str += 3;
5606       while (isdigit (str[0]))
5607         str += 1;
5608     }
5609   
5610   /* [.$][0-9]+ */
5611
5612   if (str[0] == '.' || str[0] == '$')
5613     {
5614       matching = str + 1;
5615       while (isdigit (matching[0]))
5616         matching += 1;
5617       if (matching[0] == '\0')
5618         return 1;
5619     }
5620
5621   /* ___[0-9]+ */
5622
5623   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5624     {
5625       matching = str + 3;
5626       while (isdigit (matching[0]))
5627         matching += 1;
5628       if (matching[0] == '\0')
5629         return 1;
5630     }
5631
5632   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5633
5634   if (strcmp (str, "TKB") == 0)
5635     return 1;
5636
5637 #if 0
5638   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5639      with a N at the end.  Unfortunately, the compiler uses the same
5640      convention for other internal types it creates.  So treating
5641      all entity names that end with an "N" as a name suffix causes
5642      some regressions.  For instance, consider the case of an enumerated
5643      type.  To support the 'Image attribute, it creates an array whose
5644      name ends with N.
5645      Having a single character like this as a suffix carrying some
5646      information is a bit risky.  Perhaps we should change the encoding
5647      to be something like "_N" instead.  In the meantime, do not do
5648      the following check.  */
5649   /* Protected Object Subprograms */
5650   if (len == 1 && str [0] == 'N')
5651     return 1;
5652 #endif
5653
5654   /* _E[0-9]+[bs]$ */
5655   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5656     {
5657       matching = str + 3;
5658       while (isdigit (matching[0]))
5659         matching += 1;
5660       if ((matching[0] == 'b' || matching[0] == 's')
5661           && matching [1] == '\0')
5662         return 1;
5663     }
5664
5665   /* ??? We should not modify STR directly, as we are doing below.  This
5666      is fine in this case, but may become problematic later if we find
5667      that this alternative did not work, and want to try matching
5668      another one from the begining of STR.  Since we modified it, we
5669      won't be able to find the begining of the string anymore!  */
5670   if (str[0] == 'X')
5671     {
5672       str += 1;
5673       while (str[0] != '_' && str[0] != '\0')
5674         {
5675           if (str[0] != 'n' && str[0] != 'b')
5676             return 0;
5677           str += 1;
5678         }
5679     }
5680
5681   if (str[0] == '\000')
5682     return 1;
5683
5684   if (str[0] == '_')
5685     {
5686       if (str[1] != '_' || str[2] == '\000')
5687         return 0;
5688       if (str[2] == '_')
5689         {
5690           if (strcmp (str + 3, "JM") == 0)
5691             return 1;
5692           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5693              the LJM suffix in favor of the JM one.  But we will
5694              still accept LJM as a valid suffix for a reasonable
5695              amount of time, just to allow ourselves to debug programs
5696              compiled using an older version of GNAT.  */
5697           if (strcmp (str + 3, "LJM") == 0)
5698             return 1;
5699           if (str[3] != 'X')
5700             return 0;
5701           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5702               || str[4] == 'U' || str[4] == 'P')
5703             return 1;
5704           if (str[4] == 'R' && str[5] != 'T')
5705             return 1;
5706           return 0;
5707         }
5708       if (!isdigit (str[2]))
5709         return 0;
5710       for (k = 3; str[k] != '\0'; k += 1)
5711         if (!isdigit (str[k]) && str[k] != '_')
5712           return 0;
5713       return 1;
5714     }
5715   if (str[0] == '$' && isdigit (str[1]))
5716     {
5717       for (k = 2; str[k] != '\0'; k += 1)
5718         if (!isdigit (str[k]) && str[k] != '_')
5719           return 0;
5720       return 1;
5721     }
5722   return 0;
5723 }
5724
5725 /* Return non-zero if the string starting at NAME and ending before
5726    NAME_END contains no capital letters.  */
5727
5728 static int
5729 is_valid_name_for_wild_match (const char *name0)
5730 {
5731   const char *decoded_name = ada_decode (name0);
5732   int i;
5733
5734   /* If the decoded name starts with an angle bracket, it means that
5735      NAME0 does not follow the GNAT encoding format.  It should then
5736      not be allowed as a possible wild match.  */
5737   if (decoded_name[0] == '<')
5738     return 0;
5739
5740   for (i=0; decoded_name[i] != '\0'; i++)
5741     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5742       return 0;
5743
5744   return 1;
5745 }
5746
5747 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5748    that could start a simple name.  Assumes that *NAMEP points into
5749    the string beginning at NAME0.  */
5750
5751 static int
5752 advance_wild_match (const char **namep, const char *name0, int target0)
5753 {
5754   const char *name = *namep;
5755
5756   while (1)
5757     {
5758       int t0, t1;
5759
5760       t0 = *name;
5761       if (t0 == '_')
5762         {
5763           t1 = name[1];
5764           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5765             {
5766               name += 1;
5767               if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5768                 break;
5769               else
5770                 name += 1;
5771             }
5772           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5773                                  || name[2] == target0))
5774             {
5775               name += 2;
5776               break;
5777             }
5778           else
5779             return 0;
5780         }
5781       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5782         name += 1;
5783       else
5784         return 0;
5785     }
5786
5787   *namep = name;
5788   return 1;
5789 }
5790
5791 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5792    informational suffixes of NAME (i.e., for which is_name_suffix is
5793    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5794
5795 static int
5796 wild_match (const char *name, const char *patn)
5797 {
5798   const char *p;
5799   const char *name0 = name;
5800
5801   while (1)
5802     {
5803       const char *match = name;
5804
5805       if (*name == *patn)
5806         {
5807           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5808             if (*p != *name)
5809               break;
5810           if (*p == '\0' && is_name_suffix (name))
5811             return match != name0 && !is_valid_name_for_wild_match (name0);
5812
5813           if (name[-1] == '_')
5814             name -= 1;
5815         }
5816       if (!advance_wild_match (&name, name0, *patn))
5817         return 1;
5818     }
5819 }
5820
5821 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5822    informational suffix.  */
5823
5824 static int
5825 full_match (const char *sym_name, const char *search_name)
5826 {
5827   return !match_name (sym_name, search_name, 0);
5828 }
5829
5830
5831 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5832    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5833    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5834    OBJFILE is the section containing BLOCK.  */
5835
5836 static void
5837 ada_add_block_symbols (struct obstack *obstackp,
5838                        const struct block *block, const char *name,
5839                        domain_enum domain, struct objfile *objfile,
5840                        int wild)
5841 {
5842   struct block_iterator iter;
5843   int name_len = strlen (name);
5844   /* A matching argument symbol, if any.  */
5845   struct symbol *arg_sym;
5846   /* Set true when we find a matching non-argument symbol.  */
5847   int found_sym;
5848   struct symbol *sym;
5849
5850   arg_sym = NULL;
5851   found_sym = 0;
5852   if (wild)
5853     {
5854       for (sym = block_iter_match_first (block, name, wild_match, &iter);
5855            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5856       {
5857         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5858                                    SYMBOL_DOMAIN (sym), domain)
5859             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5860           {
5861             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5862               continue;
5863             else if (SYMBOL_IS_ARGUMENT (sym))
5864               arg_sym = sym;
5865             else
5866               {
5867                 found_sym = 1;
5868                 add_defn_to_vec (obstackp,
5869                                  fixup_symbol_section (sym, objfile),
5870                                  block);
5871               }
5872           }
5873       }
5874     }
5875   else
5876     {
5877      for (sym = block_iter_match_first (block, name, full_match, &iter);
5878           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5879       {
5880         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5881                                    SYMBOL_DOMAIN (sym), domain))
5882           {
5883             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5884               {
5885                 if (SYMBOL_IS_ARGUMENT (sym))
5886                   arg_sym = sym;
5887                 else
5888                   {
5889                     found_sym = 1;
5890                     add_defn_to_vec (obstackp,
5891                                      fixup_symbol_section (sym, objfile),
5892                                      block);
5893                   }
5894               }
5895           }
5896       }
5897     }
5898
5899   if (!found_sym && arg_sym != NULL)
5900     {
5901       add_defn_to_vec (obstackp,
5902                        fixup_symbol_section (arg_sym, objfile),
5903                        block);
5904     }
5905
5906   if (!wild)
5907     {
5908       arg_sym = NULL;
5909       found_sym = 0;
5910
5911       ALL_BLOCK_SYMBOLS (block, iter, sym)
5912       {
5913         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5914                                    SYMBOL_DOMAIN (sym), domain))
5915           {
5916             int cmp;
5917
5918             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5919             if (cmp == 0)
5920               {
5921                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5922                 if (cmp == 0)
5923                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5924                                  name_len);
5925               }
5926
5927             if (cmp == 0
5928                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5929               {
5930                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5931                   {
5932                     if (SYMBOL_IS_ARGUMENT (sym))
5933                       arg_sym = sym;
5934                     else
5935                       {
5936                         found_sym = 1;
5937                         add_defn_to_vec (obstackp,
5938                                          fixup_symbol_section (sym, objfile),
5939                                          block);
5940                       }
5941                   }
5942               }
5943           }
5944       }
5945
5946       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5947          They aren't parameters, right?  */
5948       if (!found_sym && arg_sym != NULL)
5949         {
5950           add_defn_to_vec (obstackp,
5951                            fixup_symbol_section (arg_sym, objfile),
5952                            block);
5953         }
5954     }
5955 }
5956 \f
5957
5958                                 /* Symbol Completion */
5959
5960 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5961    name in a form that's appropriate for the completion.  The result
5962    does not need to be deallocated, but is only good until the next call.
5963
5964    TEXT_LEN is equal to the length of TEXT.
5965    Perform a wild match if WILD_MATCH_P is set.
5966    ENCODED_P should be set if TEXT represents the start of a symbol name
5967    in its encoded form.  */
5968
5969 static const char *
5970 symbol_completion_match (const char *sym_name,
5971                          const char *text, int text_len,
5972                          int wild_match_p, int encoded_p)
5973 {
5974   const int verbatim_match = (text[0] == '<');
5975   int match = 0;
5976
5977   if (verbatim_match)
5978     {
5979       /* Strip the leading angle bracket.  */
5980       text = text + 1;
5981       text_len--;
5982     }
5983
5984   /* First, test against the fully qualified name of the symbol.  */
5985
5986   if (strncmp (sym_name, text, text_len) == 0)
5987     match = 1;
5988
5989   if (match && !encoded_p)
5990     {
5991       /* One needed check before declaring a positive match is to verify
5992          that iff we are doing a verbatim match, the decoded version
5993          of the symbol name starts with '<'.  Otherwise, this symbol name
5994          is not a suitable completion.  */
5995       const char *sym_name_copy = sym_name;
5996       int has_angle_bracket;
5997
5998       sym_name = ada_decode (sym_name);
5999       has_angle_bracket = (sym_name[0] == '<');
6000       match = (has_angle_bracket == verbatim_match);
6001       sym_name = sym_name_copy;
6002     }
6003
6004   if (match && !verbatim_match)
6005     {
6006       /* When doing non-verbatim match, another check that needs to
6007          be done is to verify that the potentially matching symbol name
6008          does not include capital letters, because the ada-mode would
6009          not be able to understand these symbol names without the
6010          angle bracket notation.  */
6011       const char *tmp;
6012
6013       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6014       if (*tmp != '\0')
6015         match = 0;
6016     }
6017
6018   /* Second: Try wild matching...  */
6019
6020   if (!match && wild_match_p)
6021     {
6022       /* Since we are doing wild matching, this means that TEXT
6023          may represent an unqualified symbol name.  We therefore must
6024          also compare TEXT against the unqualified name of the symbol.  */
6025       sym_name = ada_unqualified_name (ada_decode (sym_name));
6026
6027       if (strncmp (sym_name, text, text_len) == 0)
6028         match = 1;
6029     }
6030
6031   /* Finally: If we found a mach, prepare the result to return.  */
6032
6033   if (!match)
6034     return NULL;
6035
6036   if (verbatim_match)
6037     sym_name = add_angle_brackets (sym_name);
6038
6039   if (!encoded_p)
6040     sym_name = ada_decode (sym_name);
6041
6042   return sym_name;
6043 }
6044
6045 /* A companion function to ada_make_symbol_completion_list().
6046    Check if SYM_NAME represents a symbol which name would be suitable
6047    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6048    it is appended at the end of the given string vector SV.
6049
6050    ORIG_TEXT is the string original string from the user command
6051    that needs to be completed.  WORD is the entire command on which
6052    completion should be performed.  These two parameters are used to
6053    determine which part of the symbol name should be added to the
6054    completion vector.
6055    if WILD_MATCH_P is set, then wild matching is performed.
6056    ENCODED_P should be set if TEXT represents a symbol name in its
6057    encoded formed (in which case the completion should also be
6058    encoded).  */
6059
6060 static void
6061 symbol_completion_add (VEC(char_ptr) **sv,
6062                        const char *sym_name,
6063                        const char *text, int text_len,
6064                        const char *orig_text, const char *word,
6065                        int wild_match_p, int encoded_p)
6066 {
6067   const char *match = symbol_completion_match (sym_name, text, text_len,
6068                                                wild_match_p, encoded_p);
6069   char *completion;
6070
6071   if (match == NULL)
6072     return;
6073
6074   /* We found a match, so add the appropriate completion to the given
6075      string vector.  */
6076
6077   if (word == orig_text)
6078     {
6079       completion = xmalloc (strlen (match) + 5);
6080       strcpy (completion, match);
6081     }
6082   else if (word > orig_text)
6083     {
6084       /* Return some portion of sym_name.  */
6085       completion = xmalloc (strlen (match) + 5);
6086       strcpy (completion, match + (word - orig_text));
6087     }
6088   else
6089     {
6090       /* Return some of ORIG_TEXT plus sym_name.  */
6091       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6092       strncpy (completion, word, orig_text - word);
6093       completion[orig_text - word] = '\0';
6094       strcat (completion, match);
6095     }
6096
6097   VEC_safe_push (char_ptr, *sv, completion);
6098 }
6099
6100 /* An object of this type is passed as the user_data argument to the
6101    expand_symtabs_matching method.  */
6102 struct add_partial_datum
6103 {
6104   VEC(char_ptr) **completions;
6105   const char *text;
6106   int text_len;
6107   const char *text0;
6108   const char *word;
6109   int wild_match;
6110   int encoded;
6111 };
6112
6113 /* A callback for expand_symtabs_matching.  */
6114
6115 static int
6116 ada_complete_symbol_matcher (const char *name, void *user_data)
6117 {
6118   struct add_partial_datum *data = user_data;
6119   
6120   return symbol_completion_match (name, data->text, data->text_len,
6121                                   data->wild_match, data->encoded) != NULL;
6122 }
6123
6124 /* Return a list of possible symbol names completing TEXT0.  WORD is
6125    the entire command on which completion is made.  */
6126
6127 static VEC (char_ptr) *
6128 ada_make_symbol_completion_list (const char *text0, const char *word,
6129                                  enum type_code code)
6130 {
6131   char *text;
6132   int text_len;
6133   int wild_match_p;
6134   int encoded_p;
6135   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6136   struct symbol *sym;
6137   struct symtab *s;
6138   struct minimal_symbol *msymbol;
6139   struct objfile *objfile;
6140   const struct block *b, *surrounding_static_block = 0;
6141   int i;
6142   struct block_iterator iter;
6143   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6144
6145   gdb_assert (code == TYPE_CODE_UNDEF);
6146
6147   if (text0[0] == '<')
6148     {
6149       text = xstrdup (text0);
6150       make_cleanup (xfree, text);
6151       text_len = strlen (text);
6152       wild_match_p = 0;
6153       encoded_p = 1;
6154     }
6155   else
6156     {
6157       text = xstrdup (ada_encode (text0));
6158       make_cleanup (xfree, text);
6159       text_len = strlen (text);
6160       for (i = 0; i < text_len; i++)
6161         text[i] = tolower (text[i]);
6162
6163       encoded_p = (strstr (text0, "__") != NULL);
6164       /* If the name contains a ".", then the user is entering a fully
6165          qualified entity name, and the match must not be done in wild
6166          mode.  Similarly, if the user wants to complete what looks like
6167          an encoded name, the match must not be done in wild mode.  */
6168       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6169     }
6170
6171   /* First, look at the partial symtab symbols.  */
6172   {
6173     struct add_partial_datum data;
6174
6175     data.completions = &completions;
6176     data.text = text;
6177     data.text_len = text_len;
6178     data.text0 = text0;
6179     data.word = word;
6180     data.wild_match = wild_match_p;
6181     data.encoded = encoded_p;
6182     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6183                              &data);
6184   }
6185
6186   /* At this point scan through the misc symbol vectors and add each
6187      symbol you find to the list.  Eventually we want to ignore
6188      anything that isn't a text symbol (everything else will be
6189      handled by the psymtab code above).  */
6190
6191   ALL_MSYMBOLS (objfile, msymbol)
6192   {
6193     QUIT;
6194     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6195                            text, text_len, text0, word, wild_match_p,
6196                            encoded_p);
6197   }
6198
6199   /* Search upwards from currently selected frame (so that we can
6200      complete on local vars.  */
6201
6202   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6203     {
6204       if (!BLOCK_SUPERBLOCK (b))
6205         surrounding_static_block = b;   /* For elmin of dups */
6206
6207       ALL_BLOCK_SYMBOLS (b, iter, sym)
6208       {
6209         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6210                                text, text_len, text0, word,
6211                                wild_match_p, encoded_p);
6212       }
6213     }
6214
6215   /* Go through the symtabs and check the externs and statics for
6216      symbols which match.  */
6217
6218   ALL_SYMTABS (objfile, s)
6219   {
6220     QUIT;
6221     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
6222     ALL_BLOCK_SYMBOLS (b, iter, sym)
6223     {
6224       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6225                              text, text_len, text0, word,
6226                              wild_match_p, encoded_p);
6227     }
6228   }
6229
6230   ALL_SYMTABS (objfile, s)
6231   {
6232     QUIT;
6233     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
6234     /* Don't do this block twice.  */
6235     if (b == surrounding_static_block)
6236       continue;
6237     ALL_BLOCK_SYMBOLS (b, iter, sym)
6238     {
6239       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6240                              text, text_len, text0, word,
6241                              wild_match_p, encoded_p);
6242     }
6243   }
6244
6245   do_cleanups (old_chain);
6246   return completions;
6247 }
6248
6249                                 /* Field Access */
6250
6251 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6252    for tagged types.  */
6253
6254 static int
6255 ada_is_dispatch_table_ptr_type (struct type *type)
6256 {
6257   const char *name;
6258
6259   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6260     return 0;
6261
6262   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6263   if (name == NULL)
6264     return 0;
6265
6266   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6267 }
6268
6269 /* Return non-zero if TYPE is an interface tag.  */
6270
6271 static int
6272 ada_is_interface_tag (struct type *type)
6273 {
6274   const char *name = TYPE_NAME (type);
6275
6276   if (name == NULL)
6277     return 0;
6278
6279   return (strcmp (name, "ada__tags__interface_tag") == 0);
6280 }
6281
6282 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6283    to be invisible to users.  */
6284
6285 int
6286 ada_is_ignored_field (struct type *type, int field_num)
6287 {
6288   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6289     return 1;
6290
6291   /* Check the name of that field.  */
6292   {
6293     const char *name = TYPE_FIELD_NAME (type, field_num);
6294
6295     /* Anonymous field names should not be printed.
6296        brobecker/2007-02-20: I don't think this can actually happen
6297        but we don't want to print the value of annonymous fields anyway.  */
6298     if (name == NULL)
6299       return 1;
6300
6301     /* Normally, fields whose name start with an underscore ("_")
6302        are fields that have been internally generated by the compiler,
6303        and thus should not be printed.  The "_parent" field is special,
6304        however: This is a field internally generated by the compiler
6305        for tagged types, and it contains the components inherited from
6306        the parent type.  This field should not be printed as is, but
6307        should not be ignored either.  */
6308     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6309       return 1;
6310   }
6311
6312   /* If this is the dispatch table of a tagged type or an interface tag,
6313      then ignore.  */
6314   if (ada_is_tagged_type (type, 1)
6315       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6316           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6317     return 1;
6318
6319   /* Not a special field, so it should not be ignored.  */
6320   return 0;
6321 }
6322
6323 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6324    pointer or reference type whose ultimate target has a tag field.  */
6325
6326 int
6327 ada_is_tagged_type (struct type *type, int refok)
6328 {
6329   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6330 }
6331
6332 /* True iff TYPE represents the type of X'Tag */
6333
6334 int
6335 ada_is_tag_type (struct type *type)
6336 {
6337   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6338     return 0;
6339   else
6340     {
6341       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6342
6343       return (name != NULL
6344               && strcmp (name, "ada__tags__dispatch_table") == 0);
6345     }
6346 }
6347
6348 /* The type of the tag on VAL.  */
6349
6350 struct type *
6351 ada_tag_type (struct value *val)
6352 {
6353   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6354 }
6355
6356 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6357    retired at Ada 05).  */
6358
6359 static int
6360 is_ada95_tag (struct value *tag)
6361 {
6362   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6363 }
6364
6365 /* The value of the tag on VAL.  */
6366
6367 struct value *
6368 ada_value_tag (struct value *val)
6369 {
6370   return ada_value_struct_elt (val, "_tag", 0);
6371 }
6372
6373 /* The value of the tag on the object of type TYPE whose contents are
6374    saved at VALADDR, if it is non-null, or is at memory address
6375    ADDRESS.  */
6376
6377 static struct value *
6378 value_tag_from_contents_and_address (struct type *type,
6379                                      const gdb_byte *valaddr,
6380                                      CORE_ADDR address)
6381 {
6382   int tag_byte_offset;
6383   struct type *tag_type;
6384
6385   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6386                          NULL, NULL, NULL))
6387     {
6388       const gdb_byte *valaddr1 = ((valaddr == NULL)
6389                                   ? NULL
6390                                   : valaddr + tag_byte_offset);
6391       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6392
6393       return value_from_contents_and_address (tag_type, valaddr1, address1);
6394     }
6395   return NULL;
6396 }
6397
6398 static struct type *
6399 type_from_tag (struct value *tag)
6400 {
6401   const char *type_name = ada_tag_name (tag);
6402
6403   if (type_name != NULL)
6404     return ada_find_any_type (ada_encode (type_name));
6405   return NULL;
6406 }
6407
6408 /* Given a value OBJ of a tagged type, return a value of this
6409    type at the base address of the object.  The base address, as
6410    defined in Ada.Tags, it is the address of the primary tag of
6411    the object, and therefore where the field values of its full
6412    view can be fetched.  */
6413
6414 struct value *
6415 ada_tag_value_at_base_address (struct value *obj)
6416 {
6417   volatile struct gdb_exception e;
6418   struct value *val;
6419   LONGEST offset_to_top = 0;
6420   struct type *ptr_type, *obj_type;
6421   struct value *tag;
6422   CORE_ADDR base_address;
6423
6424   obj_type = value_type (obj);
6425
6426   /* It is the responsability of the caller to deref pointers.  */
6427
6428   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6429       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6430     return obj;
6431
6432   tag = ada_value_tag (obj);
6433   if (!tag)
6434     return obj;
6435
6436   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6437
6438   if (is_ada95_tag (tag))
6439     return obj;
6440
6441   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6442   ptr_type = lookup_pointer_type (ptr_type);
6443   val = value_cast (ptr_type, tag);
6444   if (!val)
6445     return obj;
6446
6447   /* It is perfectly possible that an exception be raised while
6448      trying to determine the base address, just like for the tag;
6449      see ada_tag_name for more details.  We do not print the error
6450      message for the same reason.  */
6451
6452   TRY_CATCH (e, RETURN_MASK_ERROR)
6453     {
6454       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6455     }
6456
6457   if (e.reason < 0)
6458     return obj;
6459
6460   /* If offset is null, nothing to do.  */
6461
6462   if (offset_to_top == 0)
6463     return obj;
6464
6465   /* -1 is a special case in Ada.Tags; however, what should be done
6466      is not quite clear from the documentation.  So do nothing for
6467      now.  */
6468
6469   if (offset_to_top == -1)
6470     return obj;
6471
6472   base_address = value_address (obj) - offset_to_top;
6473   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6474
6475   /* Make sure that we have a proper tag at the new address.
6476      Otherwise, offset_to_top is bogus (which can happen when
6477      the object is not initialized yet).  */
6478
6479   if (!tag)
6480     return obj;
6481
6482   obj_type = type_from_tag (tag);
6483
6484   if (!obj_type)
6485     return obj;
6486
6487   return value_from_contents_and_address (obj_type, NULL, base_address);
6488 }
6489
6490 /* Return the "ada__tags__type_specific_data" type.  */
6491
6492 static struct type *
6493 ada_get_tsd_type (struct inferior *inf)
6494 {
6495   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6496
6497   if (data->tsd_type == 0)
6498     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6499   return data->tsd_type;
6500 }
6501
6502 /* Return the TSD (type-specific data) associated to the given TAG.
6503    TAG is assumed to be the tag of a tagged-type entity.
6504
6505    May return NULL if we are unable to get the TSD.  */
6506
6507 static struct value *
6508 ada_get_tsd_from_tag (struct value *tag)
6509 {
6510   struct value *val;
6511   struct type *type;
6512
6513   /* First option: The TSD is simply stored as a field of our TAG.
6514      Only older versions of GNAT would use this format, but we have
6515      to test it first, because there are no visible markers for
6516      the current approach except the absence of that field.  */
6517
6518   val = ada_value_struct_elt (tag, "tsd", 1);
6519   if (val)
6520     return val;
6521
6522   /* Try the second representation for the dispatch table (in which
6523      there is no explicit 'tsd' field in the referent of the tag pointer,
6524      and instead the tsd pointer is stored just before the dispatch
6525      table.  */
6526
6527   type = ada_get_tsd_type (current_inferior());
6528   if (type == NULL)
6529     return NULL;
6530   type = lookup_pointer_type (lookup_pointer_type (type));
6531   val = value_cast (type, tag);
6532   if (val == NULL)
6533     return NULL;
6534   return value_ind (value_ptradd (val, -1));
6535 }
6536
6537 /* Given the TSD of a tag (type-specific data), return a string
6538    containing the name of the associated type.
6539
6540    The returned value is good until the next call.  May return NULL
6541    if we are unable to determine the tag name.  */
6542
6543 static char *
6544 ada_tag_name_from_tsd (struct value *tsd)
6545 {
6546   static char name[1024];
6547   char *p;
6548   struct value *val;
6549
6550   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6551   if (val == NULL)
6552     return NULL;
6553   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6554   for (p = name; *p != '\0'; p += 1)
6555     if (isalpha (*p))
6556       *p = tolower (*p);
6557   return name;
6558 }
6559
6560 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6561    a C string.
6562
6563    Return NULL if the TAG is not an Ada tag, or if we were unable to
6564    determine the name of that tag.  The result is good until the next
6565    call.  */
6566
6567 const char *
6568 ada_tag_name (struct value *tag)
6569 {
6570   volatile struct gdb_exception e;
6571   char *name = NULL;
6572
6573   if (!ada_is_tag_type (value_type (tag)))
6574     return NULL;
6575
6576   /* It is perfectly possible that an exception be raised while trying
6577      to determine the TAG's name, even under normal circumstances:
6578      The associated variable may be uninitialized or corrupted, for
6579      instance. We do not let any exception propagate past this point.
6580      instead we return NULL.
6581
6582      We also do not print the error message either (which often is very
6583      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6584      the caller print a more meaningful message if necessary.  */
6585   TRY_CATCH (e, RETURN_MASK_ERROR)
6586     {
6587       struct value *tsd = ada_get_tsd_from_tag (tag);
6588
6589       if (tsd != NULL)
6590         name = ada_tag_name_from_tsd (tsd);
6591     }
6592
6593   return name;
6594 }
6595
6596 /* The parent type of TYPE, or NULL if none.  */
6597
6598 struct type *
6599 ada_parent_type (struct type *type)
6600 {
6601   int i;
6602
6603   type = ada_check_typedef (type);
6604
6605   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6606     return NULL;
6607
6608   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6609     if (ada_is_parent_field (type, i))
6610       {
6611         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6612
6613         /* If the _parent field is a pointer, then dereference it.  */
6614         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6615           parent_type = TYPE_TARGET_TYPE (parent_type);
6616         /* If there is a parallel XVS type, get the actual base type.  */
6617         parent_type = ada_get_base_type (parent_type);
6618
6619         return ada_check_typedef (parent_type);
6620       }
6621
6622   return NULL;
6623 }
6624
6625 /* True iff field number FIELD_NUM of structure type TYPE contains the
6626    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6627    a structure type with at least FIELD_NUM+1 fields.  */
6628
6629 int
6630 ada_is_parent_field (struct type *type, int field_num)
6631 {
6632   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6633
6634   return (name != NULL
6635           && (strncmp (name, "PARENT", 6) == 0
6636               || strncmp (name, "_parent", 7) == 0));
6637 }
6638
6639 /* True iff field number FIELD_NUM of structure type TYPE is a
6640    transparent wrapper field (which should be silently traversed when doing
6641    field selection and flattened when printing).  Assumes TYPE is a
6642    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6643    structures.  */
6644
6645 int
6646 ada_is_wrapper_field (struct type *type, int field_num)
6647 {
6648   const char *name = TYPE_FIELD_NAME (type, field_num);
6649
6650   return (name != NULL
6651           && (strncmp (name, "PARENT", 6) == 0
6652               || strcmp (name, "REP") == 0
6653               || strncmp (name, "_parent", 7) == 0
6654               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6655 }
6656
6657 /* True iff field number FIELD_NUM of structure or union type TYPE
6658    is a variant wrapper.  Assumes TYPE is a structure type with at least
6659    FIELD_NUM+1 fields.  */
6660
6661 int
6662 ada_is_variant_part (struct type *type, int field_num)
6663 {
6664   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6665
6666   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6667           || (is_dynamic_field (type, field_num)
6668               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
6669                   == TYPE_CODE_UNION)));
6670 }
6671
6672 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6673    whose discriminants are contained in the record type OUTER_TYPE,
6674    returns the type of the controlling discriminant for the variant.
6675    May return NULL if the type could not be found.  */
6676
6677 struct type *
6678 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6679 {
6680   char *name = ada_variant_discrim_name (var_type);
6681
6682   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6683 }
6684
6685 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6686    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6687    represents a 'when others' clause; otherwise 0.  */
6688
6689 int
6690 ada_is_others_clause (struct type *type, int field_num)
6691 {
6692   const char *name = TYPE_FIELD_NAME (type, field_num);
6693
6694   return (name != NULL && name[0] == 'O');
6695 }
6696
6697 /* Assuming that TYPE0 is the type of the variant part of a record,
6698    returns the name of the discriminant controlling the variant.
6699    The value is valid until the next call to ada_variant_discrim_name.  */
6700
6701 char *
6702 ada_variant_discrim_name (struct type *type0)
6703 {
6704   static char *result = NULL;
6705   static size_t result_len = 0;
6706   struct type *type;
6707   const char *name;
6708   const char *discrim_end;
6709   const char *discrim_start;
6710
6711   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6712     type = TYPE_TARGET_TYPE (type0);
6713   else
6714     type = type0;
6715
6716   name = ada_type_name (type);
6717
6718   if (name == NULL || name[0] == '\000')
6719     return "";
6720
6721   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6722        discrim_end -= 1)
6723     {
6724       if (strncmp (discrim_end, "___XVN", 6) == 0)
6725         break;
6726     }
6727   if (discrim_end == name)
6728     return "";
6729
6730   for (discrim_start = discrim_end; discrim_start != name + 3;
6731        discrim_start -= 1)
6732     {
6733       if (discrim_start == name + 1)
6734         return "";
6735       if ((discrim_start > name + 3
6736            && strncmp (discrim_start - 3, "___", 3) == 0)
6737           || discrim_start[-1] == '.')
6738         break;
6739     }
6740
6741   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6742   strncpy (result, discrim_start, discrim_end - discrim_start);
6743   result[discrim_end - discrim_start] = '\0';
6744   return result;
6745 }
6746
6747 /* Scan STR for a subtype-encoded number, beginning at position K.
6748    Put the position of the character just past the number scanned in
6749    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6750    Return 1 if there was a valid number at the given position, and 0
6751    otherwise.  A "subtype-encoded" number consists of the absolute value
6752    in decimal, followed by the letter 'm' to indicate a negative number.
6753    Assumes 0m does not occur.  */
6754
6755 int
6756 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6757 {
6758   ULONGEST RU;
6759
6760   if (!isdigit (str[k]))
6761     return 0;
6762
6763   /* Do it the hard way so as not to make any assumption about
6764      the relationship of unsigned long (%lu scan format code) and
6765      LONGEST.  */
6766   RU = 0;
6767   while (isdigit (str[k]))
6768     {
6769       RU = RU * 10 + (str[k] - '0');
6770       k += 1;
6771     }
6772
6773   if (str[k] == 'm')
6774     {
6775       if (R != NULL)
6776         *R = (-(LONGEST) (RU - 1)) - 1;
6777       k += 1;
6778     }
6779   else if (R != NULL)
6780     *R = (LONGEST) RU;
6781
6782   /* NOTE on the above: Technically, C does not say what the results of
6783      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6784      number representable as a LONGEST (although either would probably work
6785      in most implementations).  When RU>0, the locution in the then branch
6786      above is always equivalent to the negative of RU.  */
6787
6788   if (new_k != NULL)
6789     *new_k = k;
6790   return 1;
6791 }
6792
6793 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6794    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6795    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6796
6797 int
6798 ada_in_variant (LONGEST val, struct type *type, int field_num)
6799 {
6800   const char *name = TYPE_FIELD_NAME (type, field_num);
6801   int p;
6802
6803   p = 0;
6804   while (1)
6805     {
6806       switch (name[p])
6807         {
6808         case '\0':
6809           return 0;
6810         case 'S':
6811           {
6812             LONGEST W;
6813
6814             if (!ada_scan_number (name, p + 1, &W, &p))
6815               return 0;
6816             if (val == W)
6817               return 1;
6818             break;
6819           }
6820         case 'R':
6821           {
6822             LONGEST L, U;
6823
6824             if (!ada_scan_number (name, p + 1, &L, &p)
6825                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6826               return 0;
6827             if (val >= L && val <= U)
6828               return 1;
6829             break;
6830           }
6831         case 'O':
6832           return 1;
6833         default:
6834           return 0;
6835         }
6836     }
6837 }
6838
6839 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6840
6841 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6842    ARG_TYPE, extract and return the value of one of its (non-static)
6843    fields.  FIELDNO says which field.   Differs from value_primitive_field
6844    only in that it can handle packed values of arbitrary type.  */
6845
6846 static struct value *
6847 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6848                            struct type *arg_type)
6849 {
6850   struct type *type;
6851
6852   arg_type = ada_check_typedef (arg_type);
6853   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6854
6855   /* Handle packed fields.  */
6856
6857   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6858     {
6859       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6860       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6861
6862       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6863                                              offset + bit_pos / 8,
6864                                              bit_pos % 8, bit_size, type);
6865     }
6866   else
6867     return value_primitive_field (arg1, offset, fieldno, arg_type);
6868 }
6869
6870 /* Find field with name NAME in object of type TYPE.  If found, 
6871    set the following for each argument that is non-null:
6872     - *FIELD_TYPE_P to the field's type; 
6873     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6874       an object of that type;
6875     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6876     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6877       0 otherwise;
6878    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6879    fields up to but not including the desired field, or by the total
6880    number of fields if not found.   A NULL value of NAME never
6881    matches; the function just counts visible fields in this case.
6882    
6883    Returns 1 if found, 0 otherwise.  */
6884
6885 static int
6886 find_struct_field (const char *name, struct type *type, int offset,
6887                    struct type **field_type_p,
6888                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6889                    int *index_p)
6890 {
6891   int i;
6892
6893   type = ada_check_typedef (type);
6894
6895   if (field_type_p != NULL)
6896     *field_type_p = NULL;
6897   if (byte_offset_p != NULL)
6898     *byte_offset_p = 0;
6899   if (bit_offset_p != NULL)
6900     *bit_offset_p = 0;
6901   if (bit_size_p != NULL)
6902     *bit_size_p = 0;
6903
6904   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6905     {
6906       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6907       int fld_offset = offset + bit_pos / 8;
6908       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6909
6910       if (t_field_name == NULL)
6911         continue;
6912
6913       else if (name != NULL && field_name_match (t_field_name, name))
6914         {
6915           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6916
6917           if (field_type_p != NULL)
6918             *field_type_p = TYPE_FIELD_TYPE (type, i);
6919           if (byte_offset_p != NULL)
6920             *byte_offset_p = fld_offset;
6921           if (bit_offset_p != NULL)
6922             *bit_offset_p = bit_pos % 8;
6923           if (bit_size_p != NULL)
6924             *bit_size_p = bit_size;
6925           return 1;
6926         }
6927       else if (ada_is_wrapper_field (type, i))
6928         {
6929           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6930                                  field_type_p, byte_offset_p, bit_offset_p,
6931                                  bit_size_p, index_p))
6932             return 1;
6933         }
6934       else if (ada_is_variant_part (type, i))
6935         {
6936           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6937              fixed type?? */
6938           int j;
6939           struct type *field_type
6940             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6941
6942           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6943             {
6944               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6945                                      fld_offset
6946                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6947                                      field_type_p, byte_offset_p,
6948                                      bit_offset_p, bit_size_p, index_p))
6949                 return 1;
6950             }
6951         }
6952       else if (index_p != NULL)
6953         *index_p += 1;
6954     }
6955   return 0;
6956 }
6957
6958 /* Number of user-visible fields in record type TYPE.  */
6959
6960 static int
6961 num_visible_fields (struct type *type)
6962 {
6963   int n;
6964
6965   n = 0;
6966   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6967   return n;
6968 }
6969
6970 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6971    and search in it assuming it has (class) type TYPE.
6972    If found, return value, else return NULL.
6973
6974    Searches recursively through wrapper fields (e.g., '_parent').  */
6975
6976 static struct value *
6977 ada_search_struct_field (char *name, struct value *arg, int offset,
6978                          struct type *type)
6979 {
6980   int i;
6981
6982   type = ada_check_typedef (type);
6983   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6984     {
6985       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6986
6987       if (t_field_name == NULL)
6988         continue;
6989
6990       else if (field_name_match (t_field_name, name))
6991         return ada_value_primitive_field (arg, offset, i, type);
6992
6993       else if (ada_is_wrapper_field (type, i))
6994         {
6995           struct value *v =     /* Do not let indent join lines here.  */
6996             ada_search_struct_field (name, arg,
6997                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
6998                                      TYPE_FIELD_TYPE (type, i));
6999
7000           if (v != NULL)
7001             return v;
7002         }
7003
7004       else if (ada_is_variant_part (type, i))
7005         {
7006           /* PNH: Do we ever get here?  See find_struct_field.  */
7007           int j;
7008           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7009                                                                         i));
7010           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7011
7012           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7013             {
7014               struct value *v = ada_search_struct_field /* Force line
7015                                                            break.  */
7016                 (name, arg,
7017                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7018                  TYPE_FIELD_TYPE (field_type, j));
7019
7020               if (v != NULL)
7021                 return v;
7022             }
7023         }
7024     }
7025   return NULL;
7026 }
7027
7028 static struct value *ada_index_struct_field_1 (int *, struct value *,
7029                                                int, struct type *);
7030
7031
7032 /* Return field #INDEX in ARG, where the index is that returned by
7033  * find_struct_field through its INDEX_P argument.  Adjust the address
7034  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7035  * If found, return value, else return NULL.  */
7036
7037 static struct value *
7038 ada_index_struct_field (int index, struct value *arg, int offset,
7039                         struct type *type)
7040 {
7041   return ada_index_struct_field_1 (&index, arg, offset, type);
7042 }
7043
7044
7045 /* Auxiliary function for ada_index_struct_field.  Like
7046  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7047  * *INDEX_P.  */
7048
7049 static struct value *
7050 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7051                           struct type *type)
7052 {
7053   int i;
7054   type = ada_check_typedef (type);
7055
7056   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7057     {
7058       if (TYPE_FIELD_NAME (type, i) == NULL)
7059         continue;
7060       else if (ada_is_wrapper_field (type, i))
7061         {
7062           struct value *v =     /* Do not let indent join lines here.  */
7063             ada_index_struct_field_1 (index_p, arg,
7064                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7065                                       TYPE_FIELD_TYPE (type, i));
7066
7067           if (v != NULL)
7068             return v;
7069         }
7070
7071       else if (ada_is_variant_part (type, i))
7072         {
7073           /* PNH: Do we ever get here?  See ada_search_struct_field,
7074              find_struct_field.  */
7075           error (_("Cannot assign this kind of variant record"));
7076         }
7077       else if (*index_p == 0)
7078         return ada_value_primitive_field (arg, offset, i, type);
7079       else
7080         *index_p -= 1;
7081     }
7082   return NULL;
7083 }
7084
7085 /* Given ARG, a value of type (pointer or reference to a)*
7086    structure/union, extract the component named NAME from the ultimate
7087    target structure/union and return it as a value with its
7088    appropriate type.
7089
7090    The routine searches for NAME among all members of the structure itself
7091    and (recursively) among all members of any wrapper members
7092    (e.g., '_parent').
7093
7094    If NO_ERR, then simply return NULL in case of error, rather than 
7095    calling error.  */
7096
7097 struct value *
7098 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7099 {
7100   struct type *t, *t1;
7101   struct value *v;
7102
7103   v = NULL;
7104   t1 = t = ada_check_typedef (value_type (arg));
7105   if (TYPE_CODE (t) == TYPE_CODE_REF)
7106     {
7107       t1 = TYPE_TARGET_TYPE (t);
7108       if (t1 == NULL)
7109         goto BadValue;
7110       t1 = ada_check_typedef (t1);
7111       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7112         {
7113           arg = coerce_ref (arg);
7114           t = t1;
7115         }
7116     }
7117
7118   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7119     {
7120       t1 = TYPE_TARGET_TYPE (t);
7121       if (t1 == NULL)
7122         goto BadValue;
7123       t1 = ada_check_typedef (t1);
7124       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7125         {
7126           arg = value_ind (arg);
7127           t = t1;
7128         }
7129       else
7130         break;
7131     }
7132
7133   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7134     goto BadValue;
7135
7136   if (t1 == t)
7137     v = ada_search_struct_field (name, arg, 0, t);
7138   else
7139     {
7140       int bit_offset, bit_size, byte_offset;
7141       struct type *field_type;
7142       CORE_ADDR address;
7143
7144       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7145         address = value_address (ada_value_ind (arg));
7146       else
7147         address = value_address (ada_coerce_ref (arg));
7148
7149       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7150       if (find_struct_field (name, t1, 0,
7151                              &field_type, &byte_offset, &bit_offset,
7152                              &bit_size, NULL))
7153         {
7154           if (bit_size != 0)
7155             {
7156               if (TYPE_CODE (t) == TYPE_CODE_REF)
7157                 arg = ada_coerce_ref (arg);
7158               else
7159                 arg = ada_value_ind (arg);
7160               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7161                                                   bit_offset, bit_size,
7162                                                   field_type);
7163             }
7164           else
7165             v = value_at_lazy (field_type, address + byte_offset);
7166         }
7167     }
7168
7169   if (v != NULL || no_err)
7170     return v;
7171   else
7172     error (_("There is no member named %s."), name);
7173
7174  BadValue:
7175   if (no_err)
7176     return NULL;
7177   else
7178     error (_("Attempt to extract a component of "
7179              "a value that is not a record."));
7180 }
7181
7182 /* Given a type TYPE, look up the type of the component of type named NAME.
7183    If DISPP is non-null, add its byte displacement from the beginning of a
7184    structure (pointed to by a value) of type TYPE to *DISPP (does not
7185    work for packed fields).
7186
7187    Matches any field whose name has NAME as a prefix, possibly
7188    followed by "___".
7189
7190    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7191    be a (pointer or reference)+ to a struct or union, and the
7192    ultimate target type will be searched.
7193
7194    Looks recursively into variant clauses and parent types.
7195
7196    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7197    TYPE is not a type of the right kind.  */
7198
7199 static struct type *
7200 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7201                             int noerr, int *dispp)
7202 {
7203   int i;
7204
7205   if (name == NULL)
7206     goto BadName;
7207
7208   if (refok && type != NULL)
7209     while (1)
7210       {
7211         type = ada_check_typedef (type);
7212         if (TYPE_CODE (type) != TYPE_CODE_PTR
7213             && TYPE_CODE (type) != TYPE_CODE_REF)
7214           break;
7215         type = TYPE_TARGET_TYPE (type);
7216       }
7217
7218   if (type == NULL
7219       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7220           && TYPE_CODE (type) != TYPE_CODE_UNION))
7221     {
7222       if (noerr)
7223         return NULL;
7224       else
7225         {
7226           target_terminal_ours ();
7227           gdb_flush (gdb_stdout);
7228           if (type == NULL)
7229             error (_("Type (null) is not a structure or union type"));
7230           else
7231             {
7232               /* XXX: type_sprint */
7233               fprintf_unfiltered (gdb_stderr, _("Type "));
7234               type_print (type, "", gdb_stderr, -1);
7235               error (_(" is not a structure or union type"));
7236             }
7237         }
7238     }
7239
7240   type = to_static_fixed_type (type);
7241
7242   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7243     {
7244       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7245       struct type *t;
7246       int disp;
7247
7248       if (t_field_name == NULL)
7249         continue;
7250
7251       else if (field_name_match (t_field_name, name))
7252         {
7253           if (dispp != NULL)
7254             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7255           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7256         }
7257
7258       else if (ada_is_wrapper_field (type, i))
7259         {
7260           disp = 0;
7261           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7262                                           0, 1, &disp);
7263           if (t != NULL)
7264             {
7265               if (dispp != NULL)
7266                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7267               return t;
7268             }
7269         }
7270
7271       else if (ada_is_variant_part (type, i))
7272         {
7273           int j;
7274           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7275                                                                         i));
7276
7277           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7278             {
7279               /* FIXME pnh 2008/01/26: We check for a field that is
7280                  NOT wrapped in a struct, since the compiler sometimes
7281                  generates these for unchecked variant types.  Revisit
7282                  if the compiler changes this practice.  */
7283               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7284               disp = 0;
7285               if (v_field_name != NULL 
7286                   && field_name_match (v_field_name, name))
7287                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7288               else
7289                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7290                                                                  j),
7291                                                 name, 0, 1, &disp);
7292
7293               if (t != NULL)
7294                 {
7295                   if (dispp != NULL)
7296                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7297                   return t;
7298                 }
7299             }
7300         }
7301
7302     }
7303
7304 BadName:
7305   if (!noerr)
7306     {
7307       target_terminal_ours ();
7308       gdb_flush (gdb_stdout);
7309       if (name == NULL)
7310         {
7311           /* XXX: type_sprint */
7312           fprintf_unfiltered (gdb_stderr, _("Type "));
7313           type_print (type, "", gdb_stderr, -1);
7314           error (_(" has no component named <null>"));
7315         }
7316       else
7317         {
7318           /* XXX: type_sprint */
7319           fprintf_unfiltered (gdb_stderr, _("Type "));
7320           type_print (type, "", gdb_stderr, -1);
7321           error (_(" has no component named %s"), name);
7322         }
7323     }
7324
7325   return NULL;
7326 }
7327
7328 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7329    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7330    represents an unchecked union (that is, the variant part of a
7331    record that is named in an Unchecked_Union pragma).  */
7332
7333 static int
7334 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7335 {
7336   char *discrim_name = ada_variant_discrim_name (var_type);
7337
7338   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7339           == NULL);
7340 }
7341
7342
7343 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7344    within a value of type OUTER_TYPE that is stored in GDB at
7345    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7346    numbering from 0) is applicable.  Returns -1 if none are.  */
7347
7348 int
7349 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7350                            const gdb_byte *outer_valaddr)
7351 {
7352   int others_clause;
7353   int i;
7354   char *discrim_name = ada_variant_discrim_name (var_type);
7355   struct value *outer;
7356   struct value *discrim;
7357   LONGEST discrim_val;
7358
7359   /* Using plain value_from_contents_and_address here causes problems
7360      because we will end up trying to resolve a type that is currently
7361      being constructed.  */
7362   outer = value_from_contents_and_address_unresolved (outer_type,
7363                                                       outer_valaddr, 0);
7364   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7365   if (discrim == NULL)
7366     return -1;
7367   discrim_val = value_as_long (discrim);
7368
7369   others_clause = -1;
7370   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7371     {
7372       if (ada_is_others_clause (var_type, i))
7373         others_clause = i;
7374       else if (ada_in_variant (discrim_val, var_type, i))
7375         return i;
7376     }
7377
7378   return others_clause;
7379 }
7380 \f
7381
7382
7383                                 /* Dynamic-Sized Records */
7384
7385 /* Strategy: The type ostensibly attached to a value with dynamic size
7386    (i.e., a size that is not statically recorded in the debugging
7387    data) does not accurately reflect the size or layout of the value.
7388    Our strategy is to convert these values to values with accurate,
7389    conventional types that are constructed on the fly.  */
7390
7391 /* There is a subtle and tricky problem here.  In general, we cannot
7392    determine the size of dynamic records without its data.  However,
7393    the 'struct value' data structure, which GDB uses to represent
7394    quantities in the inferior process (the target), requires the size
7395    of the type at the time of its allocation in order to reserve space
7396    for GDB's internal copy of the data.  That's why the
7397    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7398    rather than struct value*s.
7399
7400    However, GDB's internal history variables ($1, $2, etc.) are
7401    struct value*s containing internal copies of the data that are not, in
7402    general, the same as the data at their corresponding addresses in
7403    the target.  Fortunately, the types we give to these values are all
7404    conventional, fixed-size types (as per the strategy described
7405    above), so that we don't usually have to perform the
7406    'to_fixed_xxx_type' conversions to look at their values.
7407    Unfortunately, there is one exception: if one of the internal
7408    history variables is an array whose elements are unconstrained
7409    records, then we will need to create distinct fixed types for each
7410    element selected.  */
7411
7412 /* The upshot of all of this is that many routines take a (type, host
7413    address, target address) triple as arguments to represent a value.
7414    The host address, if non-null, is supposed to contain an internal
7415    copy of the relevant data; otherwise, the program is to consult the
7416    target at the target address.  */
7417
7418 /* Assuming that VAL0 represents a pointer value, the result of
7419    dereferencing it.  Differs from value_ind in its treatment of
7420    dynamic-sized types.  */
7421
7422 struct value *
7423 ada_value_ind (struct value *val0)
7424 {
7425   struct value *val = value_ind (val0);
7426
7427   if (ada_is_tagged_type (value_type (val), 0))
7428     val = ada_tag_value_at_base_address (val);
7429
7430   return ada_to_fixed_value (val);
7431 }
7432
7433 /* The value resulting from dereferencing any "reference to"
7434    qualifiers on VAL0.  */
7435
7436 static struct value *
7437 ada_coerce_ref (struct value *val0)
7438 {
7439   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7440     {
7441       struct value *val = val0;
7442
7443       val = coerce_ref (val);
7444
7445       if (ada_is_tagged_type (value_type (val), 0))
7446         val = ada_tag_value_at_base_address (val);
7447
7448       return ada_to_fixed_value (val);
7449     }
7450   else
7451     return val0;
7452 }
7453
7454 /* Return OFF rounded upward if necessary to a multiple of
7455    ALIGNMENT (a power of 2).  */
7456
7457 static unsigned int
7458 align_value (unsigned int off, unsigned int alignment)
7459 {
7460   return (off + alignment - 1) & ~(alignment - 1);
7461 }
7462
7463 /* Return the bit alignment required for field #F of template type TYPE.  */
7464
7465 static unsigned int
7466 field_alignment (struct type *type, int f)
7467 {
7468   const char *name = TYPE_FIELD_NAME (type, f);
7469   int len;
7470   int align_offset;
7471
7472   /* The field name should never be null, unless the debugging information
7473      is somehow malformed.  In this case, we assume the field does not
7474      require any alignment.  */
7475   if (name == NULL)
7476     return 1;
7477
7478   len = strlen (name);
7479
7480   if (!isdigit (name[len - 1]))
7481     return 1;
7482
7483   if (isdigit (name[len - 2]))
7484     align_offset = len - 2;
7485   else
7486     align_offset = len - 1;
7487
7488   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7489     return TARGET_CHAR_BIT;
7490
7491   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7492 }
7493
7494 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7495
7496 static struct symbol *
7497 ada_find_any_type_symbol (const char *name)
7498 {
7499   struct symbol *sym;
7500
7501   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7502   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7503     return sym;
7504
7505   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7506   return sym;
7507 }
7508
7509 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7510    solely for types defined by debug info, it will not search the GDB
7511    primitive types.  */
7512
7513 static struct type *
7514 ada_find_any_type (const char *name)
7515 {
7516   struct symbol *sym = ada_find_any_type_symbol (name);
7517
7518   if (sym != NULL)
7519     return SYMBOL_TYPE (sym);
7520
7521   return NULL;
7522 }
7523
7524 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7525    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7526    symbol, in which case it is returned.  Otherwise, this looks for
7527    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7528    Return symbol if found, and NULL otherwise.  */
7529
7530 struct symbol *
7531 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7532 {
7533   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7534   struct symbol *sym;
7535
7536   if (strstr (name, "___XR") != NULL)
7537      return name_sym;
7538
7539   sym = find_old_style_renaming_symbol (name, block);
7540
7541   if (sym != NULL)
7542     return sym;
7543
7544   /* Not right yet.  FIXME pnh 7/20/2007.  */
7545   sym = ada_find_any_type_symbol (name);
7546   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7547     return sym;
7548   else
7549     return NULL;
7550 }
7551
7552 static struct symbol *
7553 find_old_style_renaming_symbol (const char *name, const struct block *block)
7554 {
7555   const struct symbol *function_sym = block_linkage_function (block);
7556   char *rename;
7557
7558   if (function_sym != NULL)
7559     {
7560       /* If the symbol is defined inside a function, NAME is not fully
7561          qualified.  This means we need to prepend the function name
7562          as well as adding the ``___XR'' suffix to build the name of
7563          the associated renaming symbol.  */
7564       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7565       /* Function names sometimes contain suffixes used
7566          for instance to qualify nested subprograms.  When building
7567          the XR type name, we need to make sure that this suffix is
7568          not included.  So do not include any suffix in the function
7569          name length below.  */
7570       int function_name_len = ada_name_prefix_len (function_name);
7571       const int rename_len = function_name_len + 2      /*  "__" */
7572         + strlen (name) + 6 /* "___XR\0" */ ;
7573
7574       /* Strip the suffix if necessary.  */
7575       ada_remove_trailing_digits (function_name, &function_name_len);
7576       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7577       ada_remove_Xbn_suffix (function_name, &function_name_len);
7578
7579       /* Library-level functions are a special case, as GNAT adds
7580          a ``_ada_'' prefix to the function name to avoid namespace
7581          pollution.  However, the renaming symbols themselves do not
7582          have this prefix, so we need to skip this prefix if present.  */
7583       if (function_name_len > 5 /* "_ada_" */
7584           && strstr (function_name, "_ada_") == function_name)
7585         {
7586           function_name += 5;
7587           function_name_len -= 5;
7588         }
7589
7590       rename = (char *) alloca (rename_len * sizeof (char));
7591       strncpy (rename, function_name, function_name_len);
7592       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7593                  "__%s___XR", name);
7594     }
7595   else
7596     {
7597       const int rename_len = strlen (name) + 6;
7598
7599       rename = (char *) alloca (rename_len * sizeof (char));
7600       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7601     }
7602
7603   return ada_find_any_type_symbol (rename);
7604 }
7605
7606 /* Because of GNAT encoding conventions, several GDB symbols may match a
7607    given type name.  If the type denoted by TYPE0 is to be preferred to
7608    that of TYPE1 for purposes of type printing, return non-zero;
7609    otherwise return 0.  */
7610
7611 int
7612 ada_prefer_type (struct type *type0, struct type *type1)
7613 {
7614   if (type1 == NULL)
7615     return 1;
7616   else if (type0 == NULL)
7617     return 0;
7618   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7619     return 1;
7620   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7621     return 0;
7622   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7623     return 1;
7624   else if (ada_is_constrained_packed_array_type (type0))
7625     return 1;
7626   else if (ada_is_array_descriptor_type (type0)
7627            && !ada_is_array_descriptor_type (type1))
7628     return 1;
7629   else
7630     {
7631       const char *type0_name = type_name_no_tag (type0);
7632       const char *type1_name = type_name_no_tag (type1);
7633
7634       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7635           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7636         return 1;
7637     }
7638   return 0;
7639 }
7640
7641 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7642    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
7643
7644 const char *
7645 ada_type_name (struct type *type)
7646 {
7647   if (type == NULL)
7648     return NULL;
7649   else if (TYPE_NAME (type) != NULL)
7650     return TYPE_NAME (type);
7651   else
7652     return TYPE_TAG_NAME (type);
7653 }
7654
7655 /* Search the list of "descriptive" types associated to TYPE for a type
7656    whose name is NAME.  */
7657
7658 static struct type *
7659 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7660 {
7661   struct type *result;
7662
7663   if (ada_ignore_descriptive_types_p)
7664     return NULL;
7665
7666   /* If there no descriptive-type info, then there is no parallel type
7667      to be found.  */
7668   if (!HAVE_GNAT_AUX_INFO (type))
7669     return NULL;
7670
7671   result = TYPE_DESCRIPTIVE_TYPE (type);
7672   while (result != NULL)
7673     {
7674       const char *result_name = ada_type_name (result);
7675
7676       if (result_name == NULL)
7677         {
7678           warning (_("unexpected null name on descriptive type"));
7679           return NULL;
7680         }
7681
7682       /* If the names match, stop.  */
7683       if (strcmp (result_name, name) == 0)
7684         break;
7685
7686       /* Otherwise, look at the next item on the list, if any.  */
7687       if (HAVE_GNAT_AUX_INFO (result))
7688         result = TYPE_DESCRIPTIVE_TYPE (result);
7689       else
7690         result = NULL;
7691     }
7692
7693   /* If we didn't find a match, see whether this is a packed array.  With
7694      older compilers, the descriptive type information is either absent or
7695      irrelevant when it comes to packed arrays so the above lookup fails.
7696      Fall back to using a parallel lookup by name in this case.  */
7697   if (result == NULL && ada_is_constrained_packed_array_type (type))
7698     return ada_find_any_type (name);
7699
7700   return result;
7701 }
7702
7703 /* Find a parallel type to TYPE with the specified NAME, using the
7704    descriptive type taken from the debugging information, if available,
7705    and otherwise using the (slower) name-based method.  */
7706
7707 static struct type *
7708 ada_find_parallel_type_with_name (struct type *type, const char *name)
7709 {
7710   struct type *result = NULL;
7711
7712   if (HAVE_GNAT_AUX_INFO (type))
7713     result = find_parallel_type_by_descriptive_type (type, name);
7714   else
7715     result = ada_find_any_type (name);
7716
7717   return result;
7718 }
7719
7720 /* Same as above, but specify the name of the parallel type by appending
7721    SUFFIX to the name of TYPE.  */
7722
7723 struct type *
7724 ada_find_parallel_type (struct type *type, const char *suffix)
7725 {
7726   char *name;
7727   const char *typename = ada_type_name (type);
7728   int len;
7729
7730   if (typename == NULL)
7731     return NULL;
7732
7733   len = strlen (typename);
7734
7735   name = (char *) alloca (len + strlen (suffix) + 1);
7736
7737   strcpy (name, typename);
7738   strcpy (name + len, suffix);
7739
7740   return ada_find_parallel_type_with_name (type, name);
7741 }
7742
7743 /* If TYPE is a variable-size record type, return the corresponding template
7744    type describing its fields.  Otherwise, return NULL.  */
7745
7746 static struct type *
7747 dynamic_template_type (struct type *type)
7748 {
7749   type = ada_check_typedef (type);
7750
7751   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7752       || ada_type_name (type) == NULL)
7753     return NULL;
7754   else
7755     {
7756       int len = strlen (ada_type_name (type));
7757
7758       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7759         return type;
7760       else
7761         return ada_find_parallel_type (type, "___XVE");
7762     }
7763 }
7764
7765 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7766    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7767
7768 static int
7769 is_dynamic_field (struct type *templ_type, int field_num)
7770 {
7771   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7772
7773   return name != NULL
7774     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7775     && strstr (name, "___XVL") != NULL;
7776 }
7777
7778 /* The index of the variant field of TYPE, or -1 if TYPE does not
7779    represent a variant record type.  */
7780
7781 static int
7782 variant_field_index (struct type *type)
7783 {
7784   int f;
7785
7786   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7787     return -1;
7788
7789   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7790     {
7791       if (ada_is_variant_part (type, f))
7792         return f;
7793     }
7794   return -1;
7795 }
7796
7797 /* A record type with no fields.  */
7798
7799 static struct type *
7800 empty_record (struct type *template)
7801 {
7802   struct type *type = alloc_type_copy (template);
7803
7804   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7805   TYPE_NFIELDS (type) = 0;
7806   TYPE_FIELDS (type) = NULL;
7807   INIT_CPLUS_SPECIFIC (type);
7808   TYPE_NAME (type) = "<empty>";
7809   TYPE_TAG_NAME (type) = NULL;
7810   TYPE_LENGTH (type) = 0;
7811   return type;
7812 }
7813
7814 /* An ordinary record type (with fixed-length fields) that describes
7815    the value of type TYPE at VALADDR or ADDRESS (see comments at
7816    the beginning of this section) VAL according to GNAT conventions.
7817    DVAL0 should describe the (portion of a) record that contains any
7818    necessary discriminants.  It should be NULL if value_type (VAL) is
7819    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7820    variant field (unless unchecked) is replaced by a particular branch
7821    of the variant.
7822
7823    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7824    length are not statically known are discarded.  As a consequence,
7825    VALADDR, ADDRESS and DVAL0 are ignored.
7826
7827    NOTE: Limitations: For now, we assume that dynamic fields and
7828    variants occupy whole numbers of bytes.  However, they need not be
7829    byte-aligned.  */
7830
7831 struct type *
7832 ada_template_to_fixed_record_type_1 (struct type *type,
7833                                      const gdb_byte *valaddr,
7834                                      CORE_ADDR address, struct value *dval0,
7835                                      int keep_dynamic_fields)
7836 {
7837   struct value *mark = value_mark ();
7838   struct value *dval;
7839   struct type *rtype;
7840   int nfields, bit_len;
7841   int variant_field;
7842   long off;
7843   int fld_bit_len;
7844   int f;
7845
7846   /* Compute the number of fields in this record type that are going
7847      to be processed: unless keep_dynamic_fields, this includes only
7848      fields whose position and length are static will be processed.  */
7849   if (keep_dynamic_fields)
7850     nfields = TYPE_NFIELDS (type);
7851   else
7852     {
7853       nfields = 0;
7854       while (nfields < TYPE_NFIELDS (type)
7855              && !ada_is_variant_part (type, nfields)
7856              && !is_dynamic_field (type, nfields))
7857         nfields++;
7858     }
7859
7860   rtype = alloc_type_copy (type);
7861   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7862   INIT_CPLUS_SPECIFIC (rtype);
7863   TYPE_NFIELDS (rtype) = nfields;
7864   TYPE_FIELDS (rtype) = (struct field *)
7865     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7866   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7867   TYPE_NAME (rtype) = ada_type_name (type);
7868   TYPE_TAG_NAME (rtype) = NULL;
7869   TYPE_FIXED_INSTANCE (rtype) = 1;
7870
7871   off = 0;
7872   bit_len = 0;
7873   variant_field = -1;
7874
7875   for (f = 0; f < nfields; f += 1)
7876     {
7877       off = align_value (off, field_alignment (type, f))
7878         + TYPE_FIELD_BITPOS (type, f);
7879       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7880       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7881
7882       if (ada_is_variant_part (type, f))
7883         {
7884           variant_field = f;
7885           fld_bit_len = 0;
7886         }
7887       else if (is_dynamic_field (type, f))
7888         {
7889           const gdb_byte *field_valaddr = valaddr;
7890           CORE_ADDR field_address = address;
7891           struct type *field_type =
7892             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7893
7894           if (dval0 == NULL)
7895             {
7896               /* rtype's length is computed based on the run-time
7897                  value of discriminants.  If the discriminants are not
7898                  initialized, the type size may be completely bogus and
7899                  GDB may fail to allocate a value for it.  So check the
7900                  size first before creating the value.  */
7901               check_size (rtype);
7902               /* Using plain value_from_contents_and_address here
7903                  causes problems because we will end up trying to
7904                  resolve a type that is currently being
7905                  constructed.  */
7906               dval = value_from_contents_and_address_unresolved (rtype,
7907                                                                  valaddr,
7908                                                                  address);
7909               rtype = value_type (dval);
7910             }
7911           else
7912             dval = dval0;
7913
7914           /* If the type referenced by this field is an aligner type, we need
7915              to unwrap that aligner type, because its size might not be set.
7916              Keeping the aligner type would cause us to compute the wrong
7917              size for this field, impacting the offset of the all the fields
7918              that follow this one.  */
7919           if (ada_is_aligner_type (field_type))
7920             {
7921               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7922
7923               field_valaddr = cond_offset_host (field_valaddr, field_offset);
7924               field_address = cond_offset_target (field_address, field_offset);
7925               field_type = ada_aligned_type (field_type);
7926             }
7927
7928           field_valaddr = cond_offset_host (field_valaddr,
7929                                             off / TARGET_CHAR_BIT);
7930           field_address = cond_offset_target (field_address,
7931                                               off / TARGET_CHAR_BIT);
7932
7933           /* Get the fixed type of the field.  Note that, in this case,
7934              we do not want to get the real type out of the tag: if
7935              the current field is the parent part of a tagged record,
7936              we will get the tag of the object.  Clearly wrong: the real
7937              type of the parent is not the real type of the child.  We
7938              would end up in an infinite loop.  */
7939           field_type = ada_get_base_type (field_type);
7940           field_type = ada_to_fixed_type (field_type, field_valaddr,
7941                                           field_address, dval, 0);
7942           /* If the field size is already larger than the maximum
7943              object size, then the record itself will necessarily
7944              be larger than the maximum object size.  We need to make
7945              this check now, because the size might be so ridiculously
7946              large (due to an uninitialized variable in the inferior)
7947              that it would cause an overflow when adding it to the
7948              record size.  */
7949           check_size (field_type);
7950
7951           TYPE_FIELD_TYPE (rtype, f) = field_type;
7952           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7953           /* The multiplication can potentially overflow.  But because
7954              the field length has been size-checked just above, and
7955              assuming that the maximum size is a reasonable value,
7956              an overflow should not happen in practice.  So rather than
7957              adding overflow recovery code to this already complex code,
7958              we just assume that it's not going to happen.  */
7959           fld_bit_len =
7960             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7961         }
7962       else
7963         {
7964           /* Note: If this field's type is a typedef, it is important
7965              to preserve the typedef layer.
7966
7967              Otherwise, we might be transforming a typedef to a fat
7968              pointer (encoding a pointer to an unconstrained array),
7969              into a basic fat pointer (encoding an unconstrained
7970              array).  As both types are implemented using the same
7971              structure, the typedef is the only clue which allows us
7972              to distinguish between the two options.  Stripping it
7973              would prevent us from printing this field appropriately.  */
7974           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
7975           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7976           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7977             fld_bit_len =
7978               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7979           else
7980             {
7981               struct type *field_type = TYPE_FIELD_TYPE (type, f);
7982
7983               /* We need to be careful of typedefs when computing
7984                  the length of our field.  If this is a typedef,
7985                  get the length of the target type, not the length
7986                  of the typedef.  */
7987               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7988                 field_type = ada_typedef_target_type (field_type);
7989
7990               fld_bit_len =
7991                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7992             }
7993         }
7994       if (off + fld_bit_len > bit_len)
7995         bit_len = off + fld_bit_len;
7996       off += fld_bit_len;
7997       TYPE_LENGTH (rtype) =
7998         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7999     }
8000
8001   /* We handle the variant part, if any, at the end because of certain
8002      odd cases in which it is re-ordered so as NOT to be the last field of
8003      the record.  This can happen in the presence of representation
8004      clauses.  */
8005   if (variant_field >= 0)
8006     {
8007       struct type *branch_type;
8008
8009       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8010
8011       if (dval0 == NULL)
8012         {
8013           /* Using plain value_from_contents_and_address here causes
8014              problems because we will end up trying to resolve a type
8015              that is currently being constructed.  */
8016           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8017                                                              address);
8018           rtype = value_type (dval);
8019         }
8020       else
8021         dval = dval0;
8022
8023       branch_type =
8024         to_fixed_variant_branch_type
8025         (TYPE_FIELD_TYPE (type, variant_field),
8026          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8027          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8028       if (branch_type == NULL)
8029         {
8030           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8031             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8032           TYPE_NFIELDS (rtype) -= 1;
8033         }
8034       else
8035         {
8036           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8037           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8038           fld_bit_len =
8039             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8040             TARGET_CHAR_BIT;
8041           if (off + fld_bit_len > bit_len)
8042             bit_len = off + fld_bit_len;
8043           TYPE_LENGTH (rtype) =
8044             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8045         }
8046     }
8047
8048   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8049      should contain the alignment of that record, which should be a strictly
8050      positive value.  If null or negative, then something is wrong, most
8051      probably in the debug info.  In that case, we don't round up the size
8052      of the resulting type.  If this record is not part of another structure,
8053      the current RTYPE length might be good enough for our purposes.  */
8054   if (TYPE_LENGTH (type) <= 0)
8055     {
8056       if (TYPE_NAME (rtype))
8057         warning (_("Invalid type size for `%s' detected: %d."),
8058                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8059       else
8060         warning (_("Invalid type size for <unnamed> detected: %d."),
8061                  TYPE_LENGTH (type));
8062     }
8063   else
8064     {
8065       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8066                                          TYPE_LENGTH (type));
8067     }
8068
8069   value_free_to_mark (mark);
8070   if (TYPE_LENGTH (rtype) > varsize_limit)
8071     error (_("record type with dynamic size is larger than varsize-limit"));
8072   return rtype;
8073 }
8074
8075 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8076    of 1.  */
8077
8078 static struct type *
8079 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8080                                CORE_ADDR address, struct value *dval0)
8081 {
8082   return ada_template_to_fixed_record_type_1 (type, valaddr,
8083                                               address, dval0, 1);
8084 }
8085
8086 /* An ordinary record type in which ___XVL-convention fields and
8087    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8088    static approximations, containing all possible fields.  Uses
8089    no runtime values.  Useless for use in values, but that's OK,
8090    since the results are used only for type determinations.   Works on both
8091    structs and unions.  Representation note: to save space, we memorize
8092    the result of this function in the TYPE_TARGET_TYPE of the
8093    template type.  */
8094
8095 static struct type *
8096 template_to_static_fixed_type (struct type *type0)
8097 {
8098   struct type *type;
8099   int nfields;
8100   int f;
8101
8102   if (TYPE_TARGET_TYPE (type0) != NULL)
8103     return TYPE_TARGET_TYPE (type0);
8104
8105   nfields = TYPE_NFIELDS (type0);
8106   type = type0;
8107
8108   for (f = 0; f < nfields; f += 1)
8109     {
8110       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
8111       struct type *new_type;
8112
8113       if (is_dynamic_field (type0, f))
8114         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8115       else
8116         new_type = static_unwrap_type (field_type);
8117       if (type == type0 && new_type != field_type)
8118         {
8119           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8120           TYPE_CODE (type) = TYPE_CODE (type0);
8121           INIT_CPLUS_SPECIFIC (type);
8122           TYPE_NFIELDS (type) = nfields;
8123           TYPE_FIELDS (type) = (struct field *)
8124             TYPE_ALLOC (type, nfields * sizeof (struct field));
8125           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8126                   sizeof (struct field) * nfields);
8127           TYPE_NAME (type) = ada_type_name (type0);
8128           TYPE_TAG_NAME (type) = NULL;
8129           TYPE_FIXED_INSTANCE (type) = 1;
8130           TYPE_LENGTH (type) = 0;
8131         }
8132       TYPE_FIELD_TYPE (type, f) = new_type;
8133       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8134     }
8135   return type;
8136 }
8137
8138 /* Given an object of type TYPE whose contents are at VALADDR and
8139    whose address in memory is ADDRESS, returns a revision of TYPE,
8140    which should be a non-dynamic-sized record, in which the variant
8141    part, if any, is replaced with the appropriate branch.  Looks
8142    for discriminant values in DVAL0, which can be NULL if the record
8143    contains the necessary discriminant values.  */
8144
8145 static struct type *
8146 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8147                                    CORE_ADDR address, struct value *dval0)
8148 {
8149   struct value *mark = value_mark ();
8150   struct value *dval;
8151   struct type *rtype;
8152   struct type *branch_type;
8153   int nfields = TYPE_NFIELDS (type);
8154   int variant_field = variant_field_index (type);
8155
8156   if (variant_field == -1)
8157     return type;
8158
8159   if (dval0 == NULL)
8160     {
8161       dval = value_from_contents_and_address (type, valaddr, address);
8162       type = value_type (dval);
8163     }
8164   else
8165     dval = dval0;
8166
8167   rtype = alloc_type_copy (type);
8168   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8169   INIT_CPLUS_SPECIFIC (rtype);
8170   TYPE_NFIELDS (rtype) = nfields;
8171   TYPE_FIELDS (rtype) =
8172     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8173   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8174           sizeof (struct field) * nfields);
8175   TYPE_NAME (rtype) = ada_type_name (type);
8176   TYPE_TAG_NAME (rtype) = NULL;
8177   TYPE_FIXED_INSTANCE (rtype) = 1;
8178   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8179
8180   branch_type = to_fixed_variant_branch_type
8181     (TYPE_FIELD_TYPE (type, variant_field),
8182      cond_offset_host (valaddr,
8183                        TYPE_FIELD_BITPOS (type, variant_field)
8184                        / TARGET_CHAR_BIT),
8185      cond_offset_target (address,
8186                          TYPE_FIELD_BITPOS (type, variant_field)
8187                          / TARGET_CHAR_BIT), dval);
8188   if (branch_type == NULL)
8189     {
8190       int f;
8191
8192       for (f = variant_field + 1; f < nfields; f += 1)
8193         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8194       TYPE_NFIELDS (rtype) -= 1;
8195     }
8196   else
8197     {
8198       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8199       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8200       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8201       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8202     }
8203   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8204
8205   value_free_to_mark (mark);
8206   return rtype;
8207 }
8208
8209 /* An ordinary record type (with fixed-length fields) that describes
8210    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8211    beginning of this section].   Any necessary discriminants' values
8212    should be in DVAL, a record value; it may be NULL if the object
8213    at ADDR itself contains any necessary discriminant values.
8214    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8215    values from the record are needed.  Except in the case that DVAL,
8216    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8217    unchecked) is replaced by a particular branch of the variant.
8218
8219    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8220    is questionable and may be removed.  It can arise during the
8221    processing of an unconstrained-array-of-record type where all the
8222    variant branches have exactly the same size.  This is because in
8223    such cases, the compiler does not bother to use the XVS convention
8224    when encoding the record.  I am currently dubious of this
8225    shortcut and suspect the compiler should be altered.  FIXME.  */
8226
8227 static struct type *
8228 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8229                       CORE_ADDR address, struct value *dval)
8230 {
8231   struct type *templ_type;
8232
8233   if (TYPE_FIXED_INSTANCE (type0))
8234     return type0;
8235
8236   templ_type = dynamic_template_type (type0);
8237
8238   if (templ_type != NULL)
8239     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8240   else if (variant_field_index (type0) >= 0)
8241     {
8242       if (dval == NULL && valaddr == NULL && address == 0)
8243         return type0;
8244       return to_record_with_fixed_variant_part (type0, valaddr, address,
8245                                                 dval);
8246     }
8247   else
8248     {
8249       TYPE_FIXED_INSTANCE (type0) = 1;
8250       return type0;
8251     }
8252
8253 }
8254
8255 /* An ordinary record type (with fixed-length fields) that describes
8256    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8257    union type.  Any necessary discriminants' values should be in DVAL,
8258    a record value.  That is, this routine selects the appropriate
8259    branch of the union at ADDR according to the discriminant value
8260    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8261    it represents a variant subject to a pragma Unchecked_Union.  */
8262
8263 static struct type *
8264 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8265                               CORE_ADDR address, struct value *dval)
8266 {
8267   int which;
8268   struct type *templ_type;
8269   struct type *var_type;
8270
8271   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8272     var_type = TYPE_TARGET_TYPE (var_type0);
8273   else
8274     var_type = var_type0;
8275
8276   templ_type = ada_find_parallel_type (var_type, "___XVU");
8277
8278   if (templ_type != NULL)
8279     var_type = templ_type;
8280
8281   if (is_unchecked_variant (var_type, value_type (dval)))
8282       return var_type0;
8283   which =
8284     ada_which_variant_applies (var_type,
8285                                value_type (dval), value_contents (dval));
8286
8287   if (which < 0)
8288     return empty_record (var_type);
8289   else if (is_dynamic_field (var_type, which))
8290     return to_fixed_record_type
8291       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8292        valaddr, address, dval);
8293   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8294     return
8295       to_fixed_record_type
8296       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8297   else
8298     return TYPE_FIELD_TYPE (var_type, which);
8299 }
8300
8301 /* Assuming that TYPE0 is an array type describing the type of a value
8302    at ADDR, and that DVAL describes a record containing any
8303    discriminants used in TYPE0, returns a type for the value that
8304    contains no dynamic components (that is, no components whose sizes
8305    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8306    true, gives an error message if the resulting type's size is over
8307    varsize_limit.  */
8308
8309 static struct type *
8310 to_fixed_array_type (struct type *type0, struct value *dval,
8311                      int ignore_too_big)
8312 {
8313   struct type *index_type_desc;
8314   struct type *result;
8315   int constrained_packed_array_p;
8316
8317   type0 = ada_check_typedef (type0);
8318   if (TYPE_FIXED_INSTANCE (type0))
8319     return type0;
8320
8321   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8322   if (constrained_packed_array_p)
8323     type0 = decode_constrained_packed_array_type (type0);
8324
8325   index_type_desc = ada_find_parallel_type (type0, "___XA");
8326   ada_fixup_array_indexes_type (index_type_desc);
8327   if (index_type_desc == NULL)
8328     {
8329       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8330
8331       /* NOTE: elt_type---the fixed version of elt_type0---should never
8332          depend on the contents of the array in properly constructed
8333          debugging data.  */
8334       /* Create a fixed version of the array element type.
8335          We're not providing the address of an element here,
8336          and thus the actual object value cannot be inspected to do
8337          the conversion.  This should not be a problem, since arrays of
8338          unconstrained objects are not allowed.  In particular, all
8339          the elements of an array of a tagged type should all be of
8340          the same type specified in the debugging info.  No need to
8341          consult the object tag.  */
8342       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8343
8344       /* Make sure we always create a new array type when dealing with
8345          packed array types, since we're going to fix-up the array
8346          type length and element bitsize a little further down.  */
8347       if (elt_type0 == elt_type && !constrained_packed_array_p)
8348         result = type0;
8349       else
8350         result = create_array_type (alloc_type_copy (type0),
8351                                     elt_type, TYPE_INDEX_TYPE (type0));
8352     }
8353   else
8354     {
8355       int i;
8356       struct type *elt_type0;
8357
8358       elt_type0 = type0;
8359       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8360         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8361
8362       /* NOTE: result---the fixed version of elt_type0---should never
8363          depend on the contents of the array in properly constructed
8364          debugging data.  */
8365       /* Create a fixed version of the array element type.
8366          We're not providing the address of an element here,
8367          and thus the actual object value cannot be inspected to do
8368          the conversion.  This should not be a problem, since arrays of
8369          unconstrained objects are not allowed.  In particular, all
8370          the elements of an array of a tagged type should all be of
8371          the same type specified in the debugging info.  No need to
8372          consult the object tag.  */
8373       result =
8374         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8375
8376       elt_type0 = type0;
8377       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8378         {
8379           struct type *range_type =
8380             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8381
8382           result = create_array_type (alloc_type_copy (elt_type0),
8383                                       result, range_type);
8384           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8385         }
8386       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8387         error (_("array type with dynamic size is larger than varsize-limit"));
8388     }
8389
8390   /* We want to preserve the type name.  This can be useful when
8391      trying to get the type name of a value that has already been
8392      printed (for instance, if the user did "print VAR; whatis $".  */
8393   TYPE_NAME (result) = TYPE_NAME (type0);
8394
8395   if (constrained_packed_array_p)
8396     {
8397       /* So far, the resulting type has been created as if the original
8398          type was a regular (non-packed) array type.  As a result, the
8399          bitsize of the array elements needs to be set again, and the array
8400          length needs to be recomputed based on that bitsize.  */
8401       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8402       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8403
8404       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8405       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8406       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8407         TYPE_LENGTH (result)++;
8408     }
8409
8410   TYPE_FIXED_INSTANCE (result) = 1;
8411   return result;
8412 }
8413
8414
8415 /* A standard type (containing no dynamically sized components)
8416    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8417    DVAL describes a record containing any discriminants used in TYPE0,
8418    and may be NULL if there are none, or if the object of type TYPE at
8419    ADDRESS or in VALADDR contains these discriminants.
8420    
8421    If CHECK_TAG is not null, in the case of tagged types, this function
8422    attempts to locate the object's tag and use it to compute the actual
8423    type.  However, when ADDRESS is null, we cannot use it to determine the
8424    location of the tag, and therefore compute the tagged type's actual type.
8425    So we return the tagged type without consulting the tag.  */
8426    
8427 static struct type *
8428 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8429                    CORE_ADDR address, struct value *dval, int check_tag)
8430 {
8431   type = ada_check_typedef (type);
8432   switch (TYPE_CODE (type))
8433     {
8434     default:
8435       return type;
8436     case TYPE_CODE_STRUCT:
8437       {
8438         struct type *static_type = to_static_fixed_type (type);
8439         struct type *fixed_record_type =
8440           to_fixed_record_type (type, valaddr, address, NULL);
8441
8442         /* If STATIC_TYPE is a tagged type and we know the object's address,
8443            then we can determine its tag, and compute the object's actual
8444            type from there.  Note that we have to use the fixed record
8445            type (the parent part of the record may have dynamic fields
8446            and the way the location of _tag is expressed may depend on
8447            them).  */
8448
8449         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8450           {
8451             struct value *tag =
8452               value_tag_from_contents_and_address
8453               (fixed_record_type,
8454                valaddr,
8455                address);
8456             struct type *real_type = type_from_tag (tag);
8457             struct value *obj =
8458               value_from_contents_and_address (fixed_record_type,
8459                                                valaddr,
8460                                                address);
8461             fixed_record_type = value_type (obj);
8462             if (real_type != NULL)
8463               return to_fixed_record_type
8464                 (real_type, NULL,
8465                  value_address (ada_tag_value_at_base_address (obj)), NULL);
8466           }
8467
8468         /* Check to see if there is a parallel ___XVZ variable.
8469            If there is, then it provides the actual size of our type.  */
8470         else if (ada_type_name (fixed_record_type) != NULL)
8471           {
8472             const char *name = ada_type_name (fixed_record_type);
8473             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8474             int xvz_found = 0;
8475             LONGEST size;
8476
8477             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8478             size = get_int_var_value (xvz_name, &xvz_found);
8479             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8480               {
8481                 fixed_record_type = copy_type (fixed_record_type);
8482                 TYPE_LENGTH (fixed_record_type) = size;
8483
8484                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8485                    observed this when the debugging info is STABS, and
8486                    apparently it is something that is hard to fix.
8487
8488                    In practice, we don't need the actual type definition
8489                    at all, because the presence of the XVZ variable allows us
8490                    to assume that there must be a XVS type as well, which we
8491                    should be able to use later, when we need the actual type
8492                    definition.
8493
8494                    In the meantime, pretend that the "fixed" type we are
8495                    returning is NOT a stub, because this can cause trouble
8496                    when using this type to create new types targeting it.
8497                    Indeed, the associated creation routines often check
8498                    whether the target type is a stub and will try to replace
8499                    it, thus using a type with the wrong size.  This, in turn,
8500                    might cause the new type to have the wrong size too.
8501                    Consider the case of an array, for instance, where the size
8502                    of the array is computed from the number of elements in
8503                    our array multiplied by the size of its element.  */
8504                 TYPE_STUB (fixed_record_type) = 0;
8505               }
8506           }
8507         return fixed_record_type;
8508       }
8509     case TYPE_CODE_ARRAY:
8510       return to_fixed_array_type (type, dval, 1);
8511     case TYPE_CODE_UNION:
8512       if (dval == NULL)
8513         return type;
8514       else
8515         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8516     }
8517 }
8518
8519 /* The same as ada_to_fixed_type_1, except that it preserves the type
8520    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8521
8522    The typedef layer needs be preserved in order to differentiate between
8523    arrays and array pointers when both types are implemented using the same
8524    fat pointer.  In the array pointer case, the pointer is encoded as
8525    a typedef of the pointer type.  For instance, considering:
8526
8527           type String_Access is access String;
8528           S1 : String_Access := null;
8529
8530    To the debugger, S1 is defined as a typedef of type String.  But
8531    to the user, it is a pointer.  So if the user tries to print S1,
8532    we should not dereference the array, but print the array address
8533    instead.
8534
8535    If we didn't preserve the typedef layer, we would lose the fact that
8536    the type is to be presented as a pointer (needs de-reference before
8537    being printed).  And we would also use the source-level type name.  */
8538
8539 struct type *
8540 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8541                    CORE_ADDR address, struct value *dval, int check_tag)
8542
8543 {
8544   struct type *fixed_type =
8545     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8546
8547   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8548       then preserve the typedef layer.
8549
8550       Implementation note: We can only check the main-type portion of
8551       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8552       from TYPE now returns a type that has the same instance flags
8553       as TYPE.  For instance, if TYPE is a "typedef const", and its
8554       target type is a "struct", then the typedef elimination will return
8555       a "const" version of the target type.  See check_typedef for more
8556       details about how the typedef layer elimination is done.
8557
8558       brobecker/2010-11-19: It seems to me that the only case where it is
8559       useful to preserve the typedef layer is when dealing with fat pointers.
8560       Perhaps, we could add a check for that and preserve the typedef layer
8561       only in that situation.  But this seems unecessary so far, probably
8562       because we call check_typedef/ada_check_typedef pretty much everywhere.
8563       */
8564   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8565       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8566           == TYPE_MAIN_TYPE (fixed_type)))
8567     return type;
8568
8569   return fixed_type;
8570 }
8571
8572 /* A standard (static-sized) type corresponding as well as possible to
8573    TYPE0, but based on no runtime data.  */
8574
8575 static struct type *
8576 to_static_fixed_type (struct type *type0)
8577 {
8578   struct type *type;
8579
8580   if (type0 == NULL)
8581     return NULL;
8582
8583   if (TYPE_FIXED_INSTANCE (type0))
8584     return type0;
8585
8586   type0 = ada_check_typedef (type0);
8587
8588   switch (TYPE_CODE (type0))
8589     {
8590     default:
8591       return type0;
8592     case TYPE_CODE_STRUCT:
8593       type = dynamic_template_type (type0);
8594       if (type != NULL)
8595         return template_to_static_fixed_type (type);
8596       else
8597         return template_to_static_fixed_type (type0);
8598     case TYPE_CODE_UNION:
8599       type = ada_find_parallel_type (type0, "___XVU");
8600       if (type != NULL)
8601         return template_to_static_fixed_type (type);
8602       else
8603         return template_to_static_fixed_type (type0);
8604     }
8605 }
8606
8607 /* A static approximation of TYPE with all type wrappers removed.  */
8608
8609 static struct type *
8610 static_unwrap_type (struct type *type)
8611 {
8612   if (ada_is_aligner_type (type))
8613     {
8614       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8615       if (ada_type_name (type1) == NULL)
8616         TYPE_NAME (type1) = ada_type_name (type);
8617
8618       return static_unwrap_type (type1);
8619     }
8620   else
8621     {
8622       struct type *raw_real_type = ada_get_base_type (type);
8623
8624       if (raw_real_type == type)
8625         return type;
8626       else
8627         return to_static_fixed_type (raw_real_type);
8628     }
8629 }
8630
8631 /* In some cases, incomplete and private types require
8632    cross-references that are not resolved as records (for example,
8633       type Foo;
8634       type FooP is access Foo;
8635       V: FooP;
8636       type Foo is array ...;
8637    ).  In these cases, since there is no mechanism for producing
8638    cross-references to such types, we instead substitute for FooP a
8639    stub enumeration type that is nowhere resolved, and whose tag is
8640    the name of the actual type.  Call these types "non-record stubs".  */
8641
8642 /* A type equivalent to TYPE that is not a non-record stub, if one
8643    exists, otherwise TYPE.  */
8644
8645 struct type *
8646 ada_check_typedef (struct type *type)
8647 {
8648   if (type == NULL)
8649     return NULL;
8650
8651   /* If our type is a typedef type of a fat pointer, then we're done.
8652      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8653      what allows us to distinguish between fat pointers that represent
8654      array types, and fat pointers that represent array access types
8655      (in both cases, the compiler implements them as fat pointers).  */
8656   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8657       && is_thick_pntr (ada_typedef_target_type (type)))
8658     return type;
8659
8660   CHECK_TYPEDEF (type);
8661   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8662       || !TYPE_STUB (type)
8663       || TYPE_TAG_NAME (type) == NULL)
8664     return type;
8665   else
8666     {
8667       const char *name = TYPE_TAG_NAME (type);
8668       struct type *type1 = ada_find_any_type (name);
8669
8670       if (type1 == NULL)
8671         return type;
8672
8673       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8674          stubs pointing to arrays, as we don't create symbols for array
8675          types, only for the typedef-to-array types).  If that's the case,
8676          strip the typedef layer.  */
8677       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8678         type1 = ada_check_typedef (type1);
8679
8680       return type1;
8681     }
8682 }
8683
8684 /* A value representing the data at VALADDR/ADDRESS as described by
8685    type TYPE0, but with a standard (static-sized) type that correctly
8686    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8687    type, then return VAL0 [this feature is simply to avoid redundant
8688    creation of struct values].  */
8689
8690 static struct value *
8691 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8692                            struct value *val0)
8693 {
8694   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8695
8696   if (type == type0 && val0 != NULL)
8697     return val0;
8698   else
8699     return value_from_contents_and_address (type, 0, address);
8700 }
8701
8702 /* A value representing VAL, but with a standard (static-sized) type
8703    that correctly describes it.  Does not necessarily create a new
8704    value.  */
8705
8706 struct value *
8707 ada_to_fixed_value (struct value *val)
8708 {
8709   val = unwrap_value (val);
8710   val = ada_to_fixed_value_create (value_type (val),
8711                                       value_address (val),
8712                                       val);
8713   return val;
8714 }
8715 \f
8716
8717 /* Attributes */
8718
8719 /* Table mapping attribute numbers to names.
8720    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8721
8722 static const char *attribute_names[] = {
8723   "<?>",
8724
8725   "first",
8726   "last",
8727   "length",
8728   "image",
8729   "max",
8730   "min",
8731   "modulus",
8732   "pos",
8733   "size",
8734   "tag",
8735   "val",
8736   0
8737 };
8738
8739 const char *
8740 ada_attribute_name (enum exp_opcode n)
8741 {
8742   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8743     return attribute_names[n - OP_ATR_FIRST + 1];
8744   else
8745     return attribute_names[0];
8746 }
8747
8748 /* Evaluate the 'POS attribute applied to ARG.  */
8749
8750 static LONGEST
8751 pos_atr (struct value *arg)
8752 {
8753   struct value *val = coerce_ref (arg);
8754   struct type *type = value_type (val);
8755
8756   if (!discrete_type_p (type))
8757     error (_("'POS only defined on discrete types"));
8758
8759   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8760     {
8761       int i;
8762       LONGEST v = value_as_long (val);
8763
8764       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8765         {
8766           if (v == TYPE_FIELD_ENUMVAL (type, i))
8767             return i;
8768         }
8769       error (_("enumeration value is invalid: can't find 'POS"));
8770     }
8771   else
8772     return value_as_long (val);
8773 }
8774
8775 static struct value *
8776 value_pos_atr (struct type *type, struct value *arg)
8777 {
8778   return value_from_longest (type, pos_atr (arg));
8779 }
8780
8781 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8782
8783 static struct value *
8784 value_val_atr (struct type *type, struct value *arg)
8785 {
8786   if (!discrete_type_p (type))
8787     error (_("'VAL only defined on discrete types"));
8788   if (!integer_type_p (value_type (arg)))
8789     error (_("'VAL requires integral argument"));
8790
8791   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8792     {
8793       long pos = value_as_long (arg);
8794
8795       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8796         error (_("argument to 'VAL out of range"));
8797       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8798     }
8799   else
8800     return value_from_longest (type, value_as_long (arg));
8801 }
8802 \f
8803
8804                                 /* Evaluation */
8805
8806 /* True if TYPE appears to be an Ada character type.
8807    [At the moment, this is true only for Character and Wide_Character;
8808    It is a heuristic test that could stand improvement].  */
8809
8810 int
8811 ada_is_character_type (struct type *type)
8812 {
8813   const char *name;
8814
8815   /* If the type code says it's a character, then assume it really is,
8816      and don't check any further.  */
8817   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8818     return 1;
8819   
8820   /* Otherwise, assume it's a character type iff it is a discrete type
8821      with a known character type name.  */
8822   name = ada_type_name (type);
8823   return (name != NULL
8824           && (TYPE_CODE (type) == TYPE_CODE_INT
8825               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8826           && (strcmp (name, "character") == 0
8827               || strcmp (name, "wide_character") == 0
8828               || strcmp (name, "wide_wide_character") == 0
8829               || strcmp (name, "unsigned char") == 0));
8830 }
8831
8832 /* True if TYPE appears to be an Ada string type.  */
8833
8834 int
8835 ada_is_string_type (struct type *type)
8836 {
8837   type = ada_check_typedef (type);
8838   if (type != NULL
8839       && TYPE_CODE (type) != TYPE_CODE_PTR
8840       && (ada_is_simple_array_type (type)
8841           || ada_is_array_descriptor_type (type))
8842       && ada_array_arity (type) == 1)
8843     {
8844       struct type *elttype = ada_array_element_type (type, 1);
8845
8846       return ada_is_character_type (elttype);
8847     }
8848   else
8849     return 0;
8850 }
8851
8852 /* The compiler sometimes provides a parallel XVS type for a given
8853    PAD type.  Normally, it is safe to follow the PAD type directly,
8854    but older versions of the compiler have a bug that causes the offset
8855    of its "F" field to be wrong.  Following that field in that case
8856    would lead to incorrect results, but this can be worked around
8857    by ignoring the PAD type and using the associated XVS type instead.
8858
8859    Set to True if the debugger should trust the contents of PAD types.
8860    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8861 static int trust_pad_over_xvs = 1;
8862
8863 /* True if TYPE is a struct type introduced by the compiler to force the
8864    alignment of a value.  Such types have a single field with a
8865    distinctive name.  */
8866
8867 int
8868 ada_is_aligner_type (struct type *type)
8869 {
8870   type = ada_check_typedef (type);
8871
8872   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8873     return 0;
8874
8875   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8876           && TYPE_NFIELDS (type) == 1
8877           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8878 }
8879
8880 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8881    the parallel type.  */
8882
8883 struct type *
8884 ada_get_base_type (struct type *raw_type)
8885 {
8886   struct type *real_type_namer;
8887   struct type *raw_real_type;
8888
8889   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8890     return raw_type;
8891
8892   if (ada_is_aligner_type (raw_type))
8893     /* The encoding specifies that we should always use the aligner type.
8894        So, even if this aligner type has an associated XVS type, we should
8895        simply ignore it.
8896
8897        According to the compiler gurus, an XVS type parallel to an aligner
8898        type may exist because of a stabs limitation.  In stabs, aligner
8899        types are empty because the field has a variable-sized type, and
8900        thus cannot actually be used as an aligner type.  As a result,
8901        we need the associated parallel XVS type to decode the type.
8902        Since the policy in the compiler is to not change the internal
8903        representation based on the debugging info format, we sometimes
8904        end up having a redundant XVS type parallel to the aligner type.  */
8905     return raw_type;
8906
8907   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8908   if (real_type_namer == NULL
8909       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8910       || TYPE_NFIELDS (real_type_namer) != 1)
8911     return raw_type;
8912
8913   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8914     {
8915       /* This is an older encoding form where the base type needs to be
8916          looked up by name.  We prefer the newer enconding because it is
8917          more efficient.  */
8918       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8919       if (raw_real_type == NULL)
8920         return raw_type;
8921       else
8922         return raw_real_type;
8923     }
8924
8925   /* The field in our XVS type is a reference to the base type.  */
8926   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
8927 }
8928
8929 /* The type of value designated by TYPE, with all aligners removed.  */
8930
8931 struct type *
8932 ada_aligned_type (struct type *type)
8933 {
8934   if (ada_is_aligner_type (type))
8935     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8936   else
8937     return ada_get_base_type (type);
8938 }
8939
8940
8941 /* The address of the aligned value in an object at address VALADDR
8942    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
8943
8944 const gdb_byte *
8945 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
8946 {
8947   if (ada_is_aligner_type (type))
8948     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8949                                    valaddr +
8950                                    TYPE_FIELD_BITPOS (type,
8951                                                       0) / TARGET_CHAR_BIT);
8952   else
8953     return valaddr;
8954 }
8955
8956
8957
8958 /* The printed representation of an enumeration literal with encoded
8959    name NAME.  The value is good to the next call of ada_enum_name.  */
8960 const char *
8961 ada_enum_name (const char *name)
8962 {
8963   static char *result;
8964   static size_t result_len = 0;
8965   char *tmp;
8966
8967   /* First, unqualify the enumeration name:
8968      1. Search for the last '.' character.  If we find one, then skip
8969      all the preceding characters, the unqualified name starts
8970      right after that dot.
8971      2. Otherwise, we may be debugging on a target where the compiler
8972      translates dots into "__".  Search forward for double underscores,
8973      but stop searching when we hit an overloading suffix, which is
8974      of the form "__" followed by digits.  */
8975
8976   tmp = strrchr (name, '.');
8977   if (tmp != NULL)
8978     name = tmp + 1;
8979   else
8980     {
8981       while ((tmp = strstr (name, "__")) != NULL)
8982         {
8983           if (isdigit (tmp[2]))
8984             break;
8985           else
8986             name = tmp + 2;
8987         }
8988     }
8989
8990   if (name[0] == 'Q')
8991     {
8992       int v;
8993
8994       if (name[1] == 'U' || name[1] == 'W')
8995         {
8996           if (sscanf (name + 2, "%x", &v) != 1)
8997             return name;
8998         }
8999       else
9000         return name;
9001
9002       GROW_VECT (result, result_len, 16);
9003       if (isascii (v) && isprint (v))
9004         xsnprintf (result, result_len, "'%c'", v);
9005       else if (name[1] == 'U')
9006         xsnprintf (result, result_len, "[\"%02x\"]", v);
9007       else
9008         xsnprintf (result, result_len, "[\"%04x\"]", v);
9009
9010       return result;
9011     }
9012   else
9013     {
9014       tmp = strstr (name, "__");
9015       if (tmp == NULL)
9016         tmp = strstr (name, "$");
9017       if (tmp != NULL)
9018         {
9019           GROW_VECT (result, result_len, tmp - name + 1);
9020           strncpy (result, name, tmp - name);
9021           result[tmp - name] = '\0';
9022           return result;
9023         }
9024
9025       return name;
9026     }
9027 }
9028
9029 /* Evaluate the subexpression of EXP starting at *POS as for
9030    evaluate_type, updating *POS to point just past the evaluated
9031    expression.  */
9032
9033 static struct value *
9034 evaluate_subexp_type (struct expression *exp, int *pos)
9035 {
9036   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9037 }
9038
9039 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9040    value it wraps.  */
9041
9042 static struct value *
9043 unwrap_value (struct value *val)
9044 {
9045   struct type *type = ada_check_typedef (value_type (val));
9046
9047   if (ada_is_aligner_type (type))
9048     {
9049       struct value *v = ada_value_struct_elt (val, "F", 0);
9050       struct type *val_type = ada_check_typedef (value_type (v));
9051
9052       if (ada_type_name (val_type) == NULL)
9053         TYPE_NAME (val_type) = ada_type_name (type);
9054
9055       return unwrap_value (v);
9056     }
9057   else
9058     {
9059       struct type *raw_real_type =
9060         ada_check_typedef (ada_get_base_type (type));
9061
9062       /* If there is no parallel XVS or XVE type, then the value is
9063          already unwrapped.  Return it without further modification.  */
9064       if ((type == raw_real_type)
9065           && ada_find_parallel_type (type, "___XVE") == NULL)
9066         return val;
9067
9068       return
9069         coerce_unspec_val_to_type
9070         (val, ada_to_fixed_type (raw_real_type, 0,
9071                                  value_address (val),
9072                                  NULL, 1));
9073     }
9074 }
9075
9076 static struct value *
9077 cast_to_fixed (struct type *type, struct value *arg)
9078 {
9079   LONGEST val;
9080
9081   if (type == value_type (arg))
9082     return arg;
9083   else if (ada_is_fixed_point_type (value_type (arg)))
9084     val = ada_float_to_fixed (type,
9085                               ada_fixed_to_float (value_type (arg),
9086                                                   value_as_long (arg)));
9087   else
9088     {
9089       DOUBLEST argd = value_as_double (arg);
9090
9091       val = ada_float_to_fixed (type, argd);
9092     }
9093
9094   return value_from_longest (type, val);
9095 }
9096
9097 static struct value *
9098 cast_from_fixed (struct type *type, struct value *arg)
9099 {
9100   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9101                                      value_as_long (arg));
9102
9103   return value_from_double (type, val);
9104 }
9105
9106 /* Given two array types T1 and T2, return nonzero iff both arrays
9107    contain the same number of elements.  */
9108
9109 static int
9110 ada_same_array_size_p (struct type *t1, struct type *t2)
9111 {
9112   LONGEST lo1, hi1, lo2, hi2;
9113
9114   /* Get the array bounds in order to verify that the size of
9115      the two arrays match.  */
9116   if (!get_array_bounds (t1, &lo1, &hi1)
9117       || !get_array_bounds (t2, &lo2, &hi2))
9118     error (_("unable to determine array bounds"));
9119
9120   /* To make things easier for size comparison, normalize a bit
9121      the case of empty arrays by making sure that the difference
9122      between upper bound and lower bound is always -1.  */
9123   if (lo1 > hi1)
9124     hi1 = lo1 - 1;
9125   if (lo2 > hi2)
9126     hi2 = lo2 - 1;
9127
9128   return (hi1 - lo1 == hi2 - lo2);
9129 }
9130
9131 /* Assuming that VAL is an array of integrals, and TYPE represents
9132    an array with the same number of elements, but with wider integral
9133    elements, return an array "casted" to TYPE.  In practice, this
9134    means that the returned array is built by casting each element
9135    of the original array into TYPE's (wider) element type.  */
9136
9137 static struct value *
9138 ada_promote_array_of_integrals (struct type *type, struct value *val)
9139 {
9140   struct type *elt_type = TYPE_TARGET_TYPE (type);
9141   LONGEST lo, hi;
9142   struct value *res;
9143   LONGEST i;
9144
9145   /* Verify that both val and type are arrays of scalars, and
9146      that the size of val's elements is smaller than the size
9147      of type's element.  */
9148   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9149   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9150   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9151   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9152   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9153               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9154
9155   if (!get_array_bounds (type, &lo, &hi))
9156     error (_("unable to determine array bounds"));
9157
9158   res = allocate_value (type);
9159
9160   /* Promote each array element.  */
9161   for (i = 0; i < hi - lo + 1; i++)
9162     {
9163       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9164
9165       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9166               value_contents_all (elt), TYPE_LENGTH (elt_type));
9167     }
9168
9169   return res;
9170 }
9171
9172 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9173    return the converted value.  */
9174
9175 static struct value *
9176 coerce_for_assign (struct type *type, struct value *val)
9177 {
9178   struct type *type2 = value_type (val);
9179
9180   if (type == type2)
9181     return val;
9182
9183   type2 = ada_check_typedef (type2);
9184   type = ada_check_typedef (type);
9185
9186   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9187       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9188     {
9189       val = ada_value_ind (val);
9190       type2 = value_type (val);
9191     }
9192
9193   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9194       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9195     {
9196       if (!ada_same_array_size_p (type, type2))
9197         error (_("cannot assign arrays of different length"));
9198
9199       if (is_integral_type (TYPE_TARGET_TYPE (type))
9200           && is_integral_type (TYPE_TARGET_TYPE (type2))
9201           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9202                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9203         {
9204           /* Allow implicit promotion of the array elements to
9205              a wider type.  */
9206           return ada_promote_array_of_integrals (type, val);
9207         }
9208
9209       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9210           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9211         error (_("Incompatible types in assignment"));
9212       deprecated_set_value_type (val, type);
9213     }
9214   return val;
9215 }
9216
9217 static struct value *
9218 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9219 {
9220   struct value *val;
9221   struct type *type1, *type2;
9222   LONGEST v, v1, v2;
9223
9224   arg1 = coerce_ref (arg1);
9225   arg2 = coerce_ref (arg2);
9226   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9227   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9228
9229   if (TYPE_CODE (type1) != TYPE_CODE_INT
9230       || TYPE_CODE (type2) != TYPE_CODE_INT)
9231     return value_binop (arg1, arg2, op);
9232
9233   switch (op)
9234     {
9235     case BINOP_MOD:
9236     case BINOP_DIV:
9237     case BINOP_REM:
9238       break;
9239     default:
9240       return value_binop (arg1, arg2, op);
9241     }
9242
9243   v2 = value_as_long (arg2);
9244   if (v2 == 0)
9245     error (_("second operand of %s must not be zero."), op_string (op));
9246
9247   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9248     return value_binop (arg1, arg2, op);
9249
9250   v1 = value_as_long (arg1);
9251   switch (op)
9252     {
9253     case BINOP_DIV:
9254       v = v1 / v2;
9255       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9256         v += v > 0 ? -1 : 1;
9257       break;
9258     case BINOP_REM:
9259       v = v1 % v2;
9260       if (v * v1 < 0)
9261         v -= v2;
9262       break;
9263     default:
9264       /* Should not reach this point.  */
9265       v = 0;
9266     }
9267
9268   val = allocate_value (type1);
9269   store_unsigned_integer (value_contents_raw (val),
9270                           TYPE_LENGTH (value_type (val)),
9271                           gdbarch_byte_order (get_type_arch (type1)), v);
9272   return val;
9273 }
9274
9275 static int
9276 ada_value_equal (struct value *arg1, struct value *arg2)
9277 {
9278   if (ada_is_direct_array_type (value_type (arg1))
9279       || ada_is_direct_array_type (value_type (arg2)))
9280     {
9281       /* Automatically dereference any array reference before
9282          we attempt to perform the comparison.  */
9283       arg1 = ada_coerce_ref (arg1);
9284       arg2 = ada_coerce_ref (arg2);
9285       
9286       arg1 = ada_coerce_to_simple_array (arg1);
9287       arg2 = ada_coerce_to_simple_array (arg2);
9288       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9289           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9290         error (_("Attempt to compare array with non-array"));
9291       /* FIXME: The following works only for types whose
9292          representations use all bits (no padding or undefined bits)
9293          and do not have user-defined equality.  */
9294       return
9295         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9296         && memcmp (value_contents (arg1), value_contents (arg2),
9297                    TYPE_LENGTH (value_type (arg1))) == 0;
9298     }
9299   return value_equal (arg1, arg2);
9300 }
9301
9302 /* Total number of component associations in the aggregate starting at
9303    index PC in EXP.  Assumes that index PC is the start of an
9304    OP_AGGREGATE.  */
9305
9306 static int
9307 num_component_specs (struct expression *exp, int pc)
9308 {
9309   int n, m, i;
9310
9311   m = exp->elts[pc + 1].longconst;
9312   pc += 3;
9313   n = 0;
9314   for (i = 0; i < m; i += 1)
9315     {
9316       switch (exp->elts[pc].opcode) 
9317         {
9318         default:
9319           n += 1;
9320           break;
9321         case OP_CHOICES:
9322           n += exp->elts[pc + 1].longconst;
9323           break;
9324         }
9325       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9326     }
9327   return n;
9328 }
9329
9330 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9331    component of LHS (a simple array or a record), updating *POS past
9332    the expression, assuming that LHS is contained in CONTAINER.  Does
9333    not modify the inferior's memory, nor does it modify LHS (unless
9334    LHS == CONTAINER).  */
9335
9336 static void
9337 assign_component (struct value *container, struct value *lhs, LONGEST index,
9338                   struct expression *exp, int *pos)
9339 {
9340   struct value *mark = value_mark ();
9341   struct value *elt;
9342
9343   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9344     {
9345       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9346       struct value *index_val = value_from_longest (index_type, index);
9347
9348       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9349     }
9350   else
9351     {
9352       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9353       elt = ada_to_fixed_value (elt);
9354     }
9355
9356   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9357     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9358   else
9359     value_assign_to_component (container, elt, 
9360                                ada_evaluate_subexp (NULL, exp, pos, 
9361                                                     EVAL_NORMAL));
9362
9363   value_free_to_mark (mark);
9364 }
9365
9366 /* Assuming that LHS represents an lvalue having a record or array
9367    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9368    of that aggregate's value to LHS, advancing *POS past the
9369    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9370    lvalue containing LHS (possibly LHS itself).  Does not modify
9371    the inferior's memory, nor does it modify the contents of 
9372    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9373
9374 static struct value *
9375 assign_aggregate (struct value *container, 
9376                   struct value *lhs, struct expression *exp, 
9377                   int *pos, enum noside noside)
9378 {
9379   struct type *lhs_type;
9380   int n = exp->elts[*pos+1].longconst;
9381   LONGEST low_index, high_index;
9382   int num_specs;
9383   LONGEST *indices;
9384   int max_indices, num_indices;
9385   int i;
9386
9387   *pos += 3;
9388   if (noside != EVAL_NORMAL)
9389     {
9390       for (i = 0; i < n; i += 1)
9391         ada_evaluate_subexp (NULL, exp, pos, noside);
9392       return container;
9393     }
9394
9395   container = ada_coerce_ref (container);
9396   if (ada_is_direct_array_type (value_type (container)))
9397     container = ada_coerce_to_simple_array (container);
9398   lhs = ada_coerce_ref (lhs);
9399   if (!deprecated_value_modifiable (lhs))
9400     error (_("Left operand of assignment is not a modifiable lvalue."));
9401
9402   lhs_type = value_type (lhs);
9403   if (ada_is_direct_array_type (lhs_type))
9404     {
9405       lhs = ada_coerce_to_simple_array (lhs);
9406       lhs_type = value_type (lhs);
9407       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9408       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9409     }
9410   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9411     {
9412       low_index = 0;
9413       high_index = num_visible_fields (lhs_type) - 1;
9414     }
9415   else
9416     error (_("Left-hand side must be array or record."));
9417
9418   num_specs = num_component_specs (exp, *pos - 3);
9419   max_indices = 4 * num_specs + 4;
9420   indices = alloca (max_indices * sizeof (indices[0]));
9421   indices[0] = indices[1] = low_index - 1;
9422   indices[2] = indices[3] = high_index + 1;
9423   num_indices = 4;
9424
9425   for (i = 0; i < n; i += 1)
9426     {
9427       switch (exp->elts[*pos].opcode)
9428         {
9429           case OP_CHOICES:
9430             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9431                                            &num_indices, max_indices,
9432                                            low_index, high_index);
9433             break;
9434           case OP_POSITIONAL:
9435             aggregate_assign_positional (container, lhs, exp, pos, indices,
9436                                          &num_indices, max_indices,
9437                                          low_index, high_index);
9438             break;
9439           case OP_OTHERS:
9440             if (i != n-1)
9441               error (_("Misplaced 'others' clause"));
9442             aggregate_assign_others (container, lhs, exp, pos, indices, 
9443                                      num_indices, low_index, high_index);
9444             break;
9445           default:
9446             error (_("Internal error: bad aggregate clause"));
9447         }
9448     }
9449
9450   return container;
9451 }
9452               
9453 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9454    construct at *POS, updating *POS past the construct, given that
9455    the positions are relative to lower bound LOW, where HIGH is the 
9456    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9457    updating *NUM_INDICES as needed.  CONTAINER is as for
9458    assign_aggregate.  */
9459 static void
9460 aggregate_assign_positional (struct value *container,
9461                              struct value *lhs, struct expression *exp,
9462                              int *pos, LONGEST *indices, int *num_indices,
9463                              int max_indices, LONGEST low, LONGEST high) 
9464 {
9465   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9466   
9467   if (ind - 1 == high)
9468     warning (_("Extra components in aggregate ignored."));
9469   if (ind <= high)
9470     {
9471       add_component_interval (ind, ind, indices, num_indices, max_indices);
9472       *pos += 3;
9473       assign_component (container, lhs, ind, exp, pos);
9474     }
9475   else
9476     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9477 }
9478
9479 /* Assign into the components of LHS indexed by the OP_CHOICES
9480    construct at *POS, updating *POS past the construct, given that
9481    the allowable indices are LOW..HIGH.  Record the indices assigned
9482    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9483    needed.  CONTAINER is as for assign_aggregate.  */
9484 static void
9485 aggregate_assign_from_choices (struct value *container,
9486                                struct value *lhs, struct expression *exp,
9487                                int *pos, LONGEST *indices, int *num_indices,
9488                                int max_indices, LONGEST low, LONGEST high) 
9489 {
9490   int j;
9491   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9492   int choice_pos, expr_pc;
9493   int is_array = ada_is_direct_array_type (value_type (lhs));
9494
9495   choice_pos = *pos += 3;
9496
9497   for (j = 0; j < n_choices; j += 1)
9498     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9499   expr_pc = *pos;
9500   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9501   
9502   for (j = 0; j < n_choices; j += 1)
9503     {
9504       LONGEST lower, upper;
9505       enum exp_opcode op = exp->elts[choice_pos].opcode;
9506
9507       if (op == OP_DISCRETE_RANGE)
9508         {
9509           choice_pos += 1;
9510           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9511                                                       EVAL_NORMAL));
9512           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
9513                                                       EVAL_NORMAL));
9514         }
9515       else if (is_array)
9516         {
9517           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
9518                                                       EVAL_NORMAL));
9519           upper = lower;
9520         }
9521       else
9522         {
9523           int ind;
9524           const char *name;
9525
9526           switch (op)
9527             {
9528             case OP_NAME:
9529               name = &exp->elts[choice_pos + 2].string;
9530               break;
9531             case OP_VAR_VALUE:
9532               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9533               break;
9534             default:
9535               error (_("Invalid record component association."));
9536             }
9537           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9538           ind = 0;
9539           if (! find_struct_field (name, value_type (lhs), 0, 
9540                                    NULL, NULL, NULL, NULL, &ind))
9541             error (_("Unknown component name: %s."), name);
9542           lower = upper = ind;
9543         }
9544
9545       if (lower <= upper && (lower < low || upper > high))
9546         error (_("Index in component association out of bounds."));
9547
9548       add_component_interval (lower, upper, indices, num_indices,
9549                               max_indices);
9550       while (lower <= upper)
9551         {
9552           int pos1;
9553
9554           pos1 = expr_pc;
9555           assign_component (container, lhs, lower, exp, &pos1);
9556           lower += 1;
9557         }
9558     }
9559 }
9560
9561 /* Assign the value of the expression in the OP_OTHERS construct in
9562    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9563    have not been previously assigned.  The index intervals already assigned
9564    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
9565    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9566 static void
9567 aggregate_assign_others (struct value *container,
9568                          struct value *lhs, struct expression *exp,
9569                          int *pos, LONGEST *indices, int num_indices,
9570                          LONGEST low, LONGEST high) 
9571 {
9572   int i;
9573   int expr_pc = *pos + 1;
9574   
9575   for (i = 0; i < num_indices - 2; i += 2)
9576     {
9577       LONGEST ind;
9578
9579       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9580         {
9581           int localpos;
9582
9583           localpos = expr_pc;
9584           assign_component (container, lhs, ind, exp, &localpos);
9585         }
9586     }
9587   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9588 }
9589
9590 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
9591    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9592    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9593    MAX_SIZE.  The resulting intervals do not overlap.  */
9594 static void
9595 add_component_interval (LONGEST low, LONGEST high, 
9596                         LONGEST* indices, int *size, int max_size)
9597 {
9598   int i, j;
9599
9600   for (i = 0; i < *size; i += 2) {
9601     if (high >= indices[i] && low <= indices[i + 1])
9602       {
9603         int kh;
9604
9605         for (kh = i + 2; kh < *size; kh += 2)
9606           if (high < indices[kh])
9607             break;
9608         if (low < indices[i])
9609           indices[i] = low;
9610         indices[i + 1] = indices[kh - 1];
9611         if (high > indices[i + 1])
9612           indices[i + 1] = high;
9613         memcpy (indices + i + 2, indices + kh, *size - kh);
9614         *size -= kh - i - 2;
9615         return;
9616       }
9617     else if (high < indices[i])
9618       break;
9619   }
9620         
9621   if (*size == max_size)
9622     error (_("Internal error: miscounted aggregate components."));
9623   *size += 2;
9624   for (j = *size-1; j >= i+2; j -= 1)
9625     indices[j] = indices[j - 2];
9626   indices[i] = low;
9627   indices[i + 1] = high;
9628 }
9629
9630 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9631    is different.  */
9632
9633 static struct value *
9634 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9635 {
9636   if (type == ada_check_typedef (value_type (arg2)))
9637     return arg2;
9638
9639   if (ada_is_fixed_point_type (type))
9640     return (cast_to_fixed (type, arg2));
9641
9642   if (ada_is_fixed_point_type (value_type (arg2)))
9643     return cast_from_fixed (type, arg2);
9644
9645   return value_cast (type, arg2);
9646 }
9647
9648 /*  Evaluating Ada expressions, and printing their result.
9649     ------------------------------------------------------
9650
9651     1. Introduction:
9652     ----------------
9653
9654     We usually evaluate an Ada expression in order to print its value.
9655     We also evaluate an expression in order to print its type, which
9656     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9657     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9658     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9659     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9660     similar.
9661
9662     Evaluating expressions is a little more complicated for Ada entities
9663     than it is for entities in languages such as C.  The main reason for
9664     this is that Ada provides types whose definition might be dynamic.
9665     One example of such types is variant records.  Or another example
9666     would be an array whose bounds can only be known at run time.
9667
9668     The following description is a general guide as to what should be
9669     done (and what should NOT be done) in order to evaluate an expression
9670     involving such types, and when.  This does not cover how the semantic
9671     information is encoded by GNAT as this is covered separatly.  For the
9672     document used as the reference for the GNAT encoding, see exp_dbug.ads
9673     in the GNAT sources.
9674
9675     Ideally, we should embed each part of this description next to its
9676     associated code.  Unfortunately, the amount of code is so vast right
9677     now that it's hard to see whether the code handling a particular
9678     situation might be duplicated or not.  One day, when the code is
9679     cleaned up, this guide might become redundant with the comments
9680     inserted in the code, and we might want to remove it.
9681
9682     2. ``Fixing'' an Entity, the Simple Case:
9683     -----------------------------------------
9684
9685     When evaluating Ada expressions, the tricky issue is that they may
9686     reference entities whose type contents and size are not statically
9687     known.  Consider for instance a variant record:
9688
9689        type Rec (Empty : Boolean := True) is record
9690           case Empty is
9691              when True => null;
9692              when False => Value : Integer;
9693           end case;
9694        end record;
9695        Yes : Rec := (Empty => False, Value => 1);
9696        No  : Rec := (empty => True);
9697
9698     The size and contents of that record depends on the value of the
9699     descriminant (Rec.Empty).  At this point, neither the debugging
9700     information nor the associated type structure in GDB are able to
9701     express such dynamic types.  So what the debugger does is to create
9702     "fixed" versions of the type that applies to the specific object.
9703     We also informally refer to this opperation as "fixing" an object,
9704     which means creating its associated fixed type.
9705
9706     Example: when printing the value of variable "Yes" above, its fixed
9707     type would look like this:
9708
9709        type Rec is record
9710           Empty : Boolean;
9711           Value : Integer;
9712        end record;
9713
9714     On the other hand, if we printed the value of "No", its fixed type
9715     would become:
9716
9717        type Rec is record
9718           Empty : Boolean;
9719        end record;
9720
9721     Things become a little more complicated when trying to fix an entity
9722     with a dynamic type that directly contains another dynamic type,
9723     such as an array of variant records, for instance.  There are
9724     two possible cases: Arrays, and records.
9725
9726     3. ``Fixing'' Arrays:
9727     ---------------------
9728
9729     The type structure in GDB describes an array in terms of its bounds,
9730     and the type of its elements.  By design, all elements in the array
9731     have the same type and we cannot represent an array of variant elements
9732     using the current type structure in GDB.  When fixing an array,
9733     we cannot fix the array element, as we would potentially need one
9734     fixed type per element of the array.  As a result, the best we can do
9735     when fixing an array is to produce an array whose bounds and size
9736     are correct (allowing us to read it from memory), but without having
9737     touched its element type.  Fixing each element will be done later,
9738     when (if) necessary.
9739
9740     Arrays are a little simpler to handle than records, because the same
9741     amount of memory is allocated for each element of the array, even if
9742     the amount of space actually used by each element differs from element
9743     to element.  Consider for instance the following array of type Rec:
9744
9745        type Rec_Array is array (1 .. 2) of Rec;
9746
9747     The actual amount of memory occupied by each element might be different
9748     from element to element, depending on the value of their discriminant.
9749     But the amount of space reserved for each element in the array remains
9750     fixed regardless.  So we simply need to compute that size using
9751     the debugging information available, from which we can then determine
9752     the array size (we multiply the number of elements of the array by
9753     the size of each element).
9754
9755     The simplest case is when we have an array of a constrained element
9756     type. For instance, consider the following type declarations:
9757
9758         type Bounded_String (Max_Size : Integer) is
9759            Length : Integer;
9760            Buffer : String (1 .. Max_Size);
9761         end record;
9762         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9763
9764     In this case, the compiler describes the array as an array of
9765     variable-size elements (identified by its XVS suffix) for which
9766     the size can be read in the parallel XVZ variable.
9767
9768     In the case of an array of an unconstrained element type, the compiler
9769     wraps the array element inside a private PAD type.  This type should not
9770     be shown to the user, and must be "unwrap"'ed before printing.  Note
9771     that we also use the adjective "aligner" in our code to designate
9772     these wrapper types.
9773
9774     In some cases, the size allocated for each element is statically
9775     known.  In that case, the PAD type already has the correct size,
9776     and the array element should remain unfixed.
9777
9778     But there are cases when this size is not statically known.
9779     For instance, assuming that "Five" is an integer variable:
9780
9781         type Dynamic is array (1 .. Five) of Integer;
9782         type Wrapper (Has_Length : Boolean := False) is record
9783            Data : Dynamic;
9784            case Has_Length is
9785               when True => Length : Integer;
9786               when False => null;
9787            end case;
9788         end record;
9789         type Wrapper_Array is array (1 .. 2) of Wrapper;
9790
9791         Hello : Wrapper_Array := (others => (Has_Length => True,
9792                                              Data => (others => 17),
9793                                              Length => 1));
9794
9795
9796     The debugging info would describe variable Hello as being an
9797     array of a PAD type.  The size of that PAD type is not statically
9798     known, but can be determined using a parallel XVZ variable.
9799     In that case, a copy of the PAD type with the correct size should
9800     be used for the fixed array.
9801
9802     3. ``Fixing'' record type objects:
9803     ----------------------------------
9804
9805     Things are slightly different from arrays in the case of dynamic
9806     record types.  In this case, in order to compute the associated
9807     fixed type, we need to determine the size and offset of each of
9808     its components.  This, in turn, requires us to compute the fixed
9809     type of each of these components.
9810
9811     Consider for instance the example:
9812
9813         type Bounded_String (Max_Size : Natural) is record
9814            Str : String (1 .. Max_Size);
9815            Length : Natural;
9816         end record;
9817         My_String : Bounded_String (Max_Size => 10);
9818
9819     In that case, the position of field "Length" depends on the size
9820     of field Str, which itself depends on the value of the Max_Size
9821     discriminant.  In order to fix the type of variable My_String,
9822     we need to fix the type of field Str.  Therefore, fixing a variant
9823     record requires us to fix each of its components.
9824
9825     However, if a component does not have a dynamic size, the component
9826     should not be fixed.  In particular, fields that use a PAD type
9827     should not fixed.  Here is an example where this might happen
9828     (assuming type Rec above):
9829
9830        type Container (Big : Boolean) is record
9831           First : Rec;
9832           After : Integer;
9833           case Big is
9834              when True => Another : Integer;
9835              when False => null;
9836           end case;
9837        end record;
9838        My_Container : Container := (Big => False,
9839                                     First => (Empty => True),
9840                                     After => 42);
9841
9842     In that example, the compiler creates a PAD type for component First,
9843     whose size is constant, and then positions the component After just
9844     right after it.  The offset of component After is therefore constant
9845     in this case.
9846
9847     The debugger computes the position of each field based on an algorithm
9848     that uses, among other things, the actual position and size of the field
9849     preceding it.  Let's now imagine that the user is trying to print
9850     the value of My_Container.  If the type fixing was recursive, we would
9851     end up computing the offset of field After based on the size of the
9852     fixed version of field First.  And since in our example First has
9853     only one actual field, the size of the fixed type is actually smaller
9854     than the amount of space allocated to that field, and thus we would
9855     compute the wrong offset of field After.
9856
9857     To make things more complicated, we need to watch out for dynamic
9858     components of variant records (identified by the ___XVL suffix in
9859     the component name).  Even if the target type is a PAD type, the size
9860     of that type might not be statically known.  So the PAD type needs
9861     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9862     we might end up with the wrong size for our component.  This can be
9863     observed with the following type declarations:
9864
9865         type Octal is new Integer range 0 .. 7;
9866         type Octal_Array is array (Positive range <>) of Octal;
9867         pragma Pack (Octal_Array);
9868
9869         type Octal_Buffer (Size : Positive) is record
9870            Buffer : Octal_Array (1 .. Size);
9871            Length : Integer;
9872         end record;
9873
9874     In that case, Buffer is a PAD type whose size is unset and needs
9875     to be computed by fixing the unwrapped type.
9876
9877     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9878     ----------------------------------------------------------
9879
9880     Lastly, when should the sub-elements of an entity that remained unfixed
9881     thus far, be actually fixed?
9882
9883     The answer is: Only when referencing that element.  For instance
9884     when selecting one component of a record, this specific component
9885     should be fixed at that point in time.  Or when printing the value
9886     of a record, each component should be fixed before its value gets
9887     printed.  Similarly for arrays, the element of the array should be
9888     fixed when printing each element of the array, or when extracting
9889     one element out of that array.  On the other hand, fixing should
9890     not be performed on the elements when taking a slice of an array!
9891
9892     Note that one of the side-effects of miscomputing the offset and
9893     size of each field is that we end up also miscomputing the size
9894     of the containing type.  This can have adverse results when computing
9895     the value of an entity.  GDB fetches the value of an entity based
9896     on the size of its type, and thus a wrong size causes GDB to fetch
9897     the wrong amount of memory.  In the case where the computed size is
9898     too small, GDB fetches too little data to print the value of our
9899     entiry.  Results in this case as unpredicatble, as we usually read
9900     past the buffer containing the data =:-o.  */
9901
9902 /* Implement the evaluate_exp routine in the exp_descriptor structure
9903    for the Ada language.  */
9904
9905 static struct value *
9906 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9907                      int *pos, enum noside noside)
9908 {
9909   enum exp_opcode op;
9910   int tem;
9911   int pc;
9912   int preeval_pos;
9913   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9914   struct type *type;
9915   int nargs, oplen;
9916   struct value **argvec;
9917
9918   pc = *pos;
9919   *pos += 1;
9920   op = exp->elts[pc].opcode;
9921
9922   switch (op)
9923     {
9924     default:
9925       *pos -= 1;
9926       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9927
9928       if (noside == EVAL_NORMAL)
9929         arg1 = unwrap_value (arg1);
9930
9931       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9932          then we need to perform the conversion manually, because
9933          evaluate_subexp_standard doesn't do it.  This conversion is
9934          necessary in Ada because the different kinds of float/fixed
9935          types in Ada have different representations.
9936
9937          Similarly, we need to perform the conversion from OP_LONG
9938          ourselves.  */
9939       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9940         arg1 = ada_value_cast (expect_type, arg1, noside);
9941
9942       return arg1;
9943
9944     case OP_STRING:
9945       {
9946         struct value *result;
9947
9948         *pos -= 1;
9949         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9950         /* The result type will have code OP_STRING, bashed there from 
9951            OP_ARRAY.  Bash it back.  */
9952         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9953           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
9954         return result;
9955       }
9956
9957     case UNOP_CAST:
9958       (*pos) += 2;
9959       type = exp->elts[pc + 1].type;
9960       arg1 = evaluate_subexp (type, exp, pos, noside);
9961       if (noside == EVAL_SKIP)
9962         goto nosideret;
9963       arg1 = ada_value_cast (type, arg1, noside);
9964       return arg1;
9965
9966     case UNOP_QUAL:
9967       (*pos) += 2;
9968       type = exp->elts[pc + 1].type;
9969       return ada_evaluate_subexp (type, exp, pos, noside);
9970
9971     case BINOP_ASSIGN:
9972       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9973       if (exp->elts[*pos].opcode == OP_AGGREGATE)
9974         {
9975           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9976           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9977             return arg1;
9978           return ada_value_assign (arg1, arg1);
9979         }
9980       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9981          except if the lhs of our assignment is a convenience variable.
9982          In the case of assigning to a convenience variable, the lhs
9983          should be exactly the result of the evaluation of the rhs.  */
9984       type = value_type (arg1);
9985       if (VALUE_LVAL (arg1) == lval_internalvar)
9986          type = NULL;
9987       arg2 = evaluate_subexp (type, exp, pos, noside);
9988       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9989         return arg1;
9990       if (ada_is_fixed_point_type (value_type (arg1)))
9991         arg2 = cast_to_fixed (value_type (arg1), arg2);
9992       else if (ada_is_fixed_point_type (value_type (arg2)))
9993         error
9994           (_("Fixed-point values must be assigned to fixed-point variables"));
9995       else
9996         arg2 = coerce_for_assign (value_type (arg1), arg2);
9997       return ada_value_assign (arg1, arg2);
9998
9999     case BINOP_ADD:
10000       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10001       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10002       if (noside == EVAL_SKIP)
10003         goto nosideret;
10004       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10005         return (value_from_longest
10006                  (value_type (arg1),
10007                   value_as_long (arg1) + value_as_long (arg2)));
10008       if ((ada_is_fixed_point_type (value_type (arg1))
10009            || ada_is_fixed_point_type (value_type (arg2)))
10010           && value_type (arg1) != value_type (arg2))
10011         error (_("Operands of fixed-point addition must have the same type"));
10012       /* Do the addition, and cast the result to the type of the first
10013          argument.  We cannot cast the result to a reference type, so if
10014          ARG1 is a reference type, find its underlying type.  */
10015       type = value_type (arg1);
10016       while (TYPE_CODE (type) == TYPE_CODE_REF)
10017         type = TYPE_TARGET_TYPE (type);
10018       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10019       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10020
10021     case BINOP_SUB:
10022       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10023       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10024       if (noside == EVAL_SKIP)
10025         goto nosideret;
10026       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10027         return (value_from_longest
10028                  (value_type (arg1),
10029                   value_as_long (arg1) - value_as_long (arg2)));
10030       if ((ada_is_fixed_point_type (value_type (arg1))
10031            || ada_is_fixed_point_type (value_type (arg2)))
10032           && value_type (arg1) != value_type (arg2))
10033         error (_("Operands of fixed-point subtraction "
10034                  "must have the same type"));
10035       /* Do the substraction, and cast the result to the type of the first
10036          argument.  We cannot cast the result to a reference type, so if
10037          ARG1 is a reference type, find its underlying type.  */
10038       type = value_type (arg1);
10039       while (TYPE_CODE (type) == TYPE_CODE_REF)
10040         type = TYPE_TARGET_TYPE (type);
10041       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10042       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10043
10044     case BINOP_MUL:
10045     case BINOP_DIV:
10046     case BINOP_REM:
10047     case BINOP_MOD:
10048       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10049       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10050       if (noside == EVAL_SKIP)
10051         goto nosideret;
10052       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10053         {
10054           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10055           return value_zero (value_type (arg1), not_lval);
10056         }
10057       else
10058         {
10059           type = builtin_type (exp->gdbarch)->builtin_double;
10060           if (ada_is_fixed_point_type (value_type (arg1)))
10061             arg1 = cast_from_fixed (type, arg1);
10062           if (ada_is_fixed_point_type (value_type (arg2)))
10063             arg2 = cast_from_fixed (type, arg2);
10064           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10065           return ada_value_binop (arg1, arg2, op);
10066         }
10067
10068     case BINOP_EQUAL:
10069     case BINOP_NOTEQUAL:
10070       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10071       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10072       if (noside == EVAL_SKIP)
10073         goto nosideret;
10074       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10075         tem = 0;
10076       else
10077         {
10078           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10079           tem = ada_value_equal (arg1, arg2);
10080         }
10081       if (op == BINOP_NOTEQUAL)
10082         tem = !tem;
10083       type = language_bool_type (exp->language_defn, exp->gdbarch);
10084       return value_from_longest (type, (LONGEST) tem);
10085
10086     case UNOP_NEG:
10087       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10088       if (noside == EVAL_SKIP)
10089         goto nosideret;
10090       else if (ada_is_fixed_point_type (value_type (arg1)))
10091         return value_cast (value_type (arg1), value_neg (arg1));
10092       else
10093         {
10094           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10095           return value_neg (arg1);
10096         }
10097
10098     case BINOP_LOGICAL_AND:
10099     case BINOP_LOGICAL_OR:
10100     case UNOP_LOGICAL_NOT:
10101       {
10102         struct value *val;
10103
10104         *pos -= 1;
10105         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10106         type = language_bool_type (exp->language_defn, exp->gdbarch);
10107         return value_cast (type, val);
10108       }
10109
10110     case BINOP_BITWISE_AND:
10111     case BINOP_BITWISE_IOR:
10112     case BINOP_BITWISE_XOR:
10113       {
10114         struct value *val;
10115
10116         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10117         *pos = pc;
10118         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10119
10120         return value_cast (value_type (arg1), val);
10121       }
10122
10123     case OP_VAR_VALUE:
10124       *pos -= 1;
10125
10126       if (noside == EVAL_SKIP)
10127         {
10128           *pos += 4;
10129           goto nosideret;
10130         }
10131
10132       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10133         /* Only encountered when an unresolved symbol occurs in a
10134            context other than a function call, in which case, it is
10135            invalid.  */
10136         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10137                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10138
10139       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10140         {
10141           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10142           /* Check to see if this is a tagged type.  We also need to handle
10143              the case where the type is a reference to a tagged type, but
10144              we have to be careful to exclude pointers to tagged types.
10145              The latter should be shown as usual (as a pointer), whereas
10146              a reference should mostly be transparent to the user.  */
10147           if (ada_is_tagged_type (type, 0)
10148               || (TYPE_CODE (type) == TYPE_CODE_REF
10149                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10150             {
10151               /* Tagged types are a little special in the fact that the real
10152                  type is dynamic and can only be determined by inspecting the
10153                  object's tag.  This means that we need to get the object's
10154                  value first (EVAL_NORMAL) and then extract the actual object
10155                  type from its tag.
10156
10157                  Note that we cannot skip the final step where we extract
10158                  the object type from its tag, because the EVAL_NORMAL phase
10159                  results in dynamic components being resolved into fixed ones.
10160                  This can cause problems when trying to print the type
10161                  description of tagged types whose parent has a dynamic size:
10162                  We use the type name of the "_parent" component in order
10163                  to print the name of the ancestor type in the type description.
10164                  If that component had a dynamic size, the resolution into
10165                  a fixed type would result in the loss of that type name,
10166                  thus preventing us from printing the name of the ancestor
10167                  type in the type description.  */
10168               arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10169
10170               if (TYPE_CODE (type) != TYPE_CODE_REF)
10171                 {
10172                   struct type *actual_type;
10173
10174                   actual_type = type_from_tag (ada_value_tag (arg1));
10175                   if (actual_type == NULL)
10176                     /* If, for some reason, we were unable to determine
10177                        the actual type from the tag, then use the static
10178                        approximation that we just computed as a fallback.
10179                        This can happen if the debugging information is
10180                        incomplete, for instance.  */
10181                     actual_type = type;
10182                   return value_zero (actual_type, not_lval);
10183                 }
10184               else
10185                 {
10186                   /* In the case of a ref, ada_coerce_ref takes care
10187                      of determining the actual type.  But the evaluation
10188                      should return a ref as it should be valid to ask
10189                      for its address; so rebuild a ref after coerce.  */
10190                   arg1 = ada_coerce_ref (arg1);
10191                   return value_ref (arg1);
10192                 }
10193             }
10194
10195           /* Records and unions for which GNAT encodings have been
10196              generated need to be statically fixed as well.
10197              Otherwise, non-static fixing produces a type where
10198              all dynamic properties are removed, which prevents "ptype"
10199              from being able to completely describe the type.
10200              For instance, a case statement in a variant record would be
10201              replaced by the relevant components based on the actual
10202              value of the discriminants.  */
10203           if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10204                && dynamic_template_type (type) != NULL)
10205               || (TYPE_CODE (type) == TYPE_CODE_UNION
10206                   && ada_find_parallel_type (type, "___XVU") != NULL))
10207             {
10208               *pos += 4;
10209               return value_zero (to_static_fixed_type (type), not_lval);
10210             }
10211         }
10212
10213       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10214       return ada_to_fixed_value (arg1);
10215
10216     case OP_FUNCALL:
10217       (*pos) += 2;
10218
10219       /* Allocate arg vector, including space for the function to be
10220          called in argvec[0] and a terminating NULL.  */
10221       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10222       argvec =
10223         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10224
10225       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10226           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10227         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10228                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10229       else
10230         {
10231           for (tem = 0; tem <= nargs; tem += 1)
10232             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10233           argvec[tem] = 0;
10234
10235           if (noside == EVAL_SKIP)
10236             goto nosideret;
10237         }
10238
10239       if (ada_is_constrained_packed_array_type
10240           (desc_base_type (value_type (argvec[0]))))
10241         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10242       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10243                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10244         /* This is a packed array that has already been fixed, and
10245            therefore already coerced to a simple array.  Nothing further
10246            to do.  */
10247         ;
10248       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10249                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10250                    && VALUE_LVAL (argvec[0]) == lval_memory))
10251         argvec[0] = value_addr (argvec[0]);
10252
10253       type = ada_check_typedef (value_type (argvec[0]));
10254
10255       /* Ada allows us to implicitly dereference arrays when subscripting
10256          them.  So, if this is an array typedef (encoding use for array
10257          access types encoded as fat pointers), strip it now.  */
10258       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10259         type = ada_typedef_target_type (type);
10260
10261       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10262         {
10263           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10264             {
10265             case TYPE_CODE_FUNC:
10266               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10267               break;
10268             case TYPE_CODE_ARRAY:
10269               break;
10270             case TYPE_CODE_STRUCT:
10271               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10272                 argvec[0] = ada_value_ind (argvec[0]);
10273               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10274               break;
10275             default:
10276               error (_("cannot subscript or call something of type `%s'"),
10277                      ada_type_name (value_type (argvec[0])));
10278               break;
10279             }
10280         }
10281
10282       switch (TYPE_CODE (type))
10283         {
10284         case TYPE_CODE_FUNC:
10285           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10286             {
10287               struct type *rtype = TYPE_TARGET_TYPE (type);
10288
10289               if (TYPE_GNU_IFUNC (type))
10290                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10291               return allocate_value (rtype);
10292             }
10293           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10294         case TYPE_CODE_INTERNAL_FUNCTION:
10295           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10296             /* We don't know anything about what the internal
10297                function might return, but we have to return
10298                something.  */
10299             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10300                                not_lval);
10301           else
10302             return call_internal_function (exp->gdbarch, exp->language_defn,
10303                                            argvec[0], nargs, argvec + 1);
10304
10305         case TYPE_CODE_STRUCT:
10306           {
10307             int arity;
10308
10309             arity = ada_array_arity (type);
10310             type = ada_array_element_type (type, nargs);
10311             if (type == NULL)
10312               error (_("cannot subscript or call a record"));
10313             if (arity != nargs)
10314               error (_("wrong number of subscripts; expecting %d"), arity);
10315             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10316               return value_zero (ada_aligned_type (type), lval_memory);
10317             return
10318               unwrap_value (ada_value_subscript
10319                             (argvec[0], nargs, argvec + 1));
10320           }
10321         case TYPE_CODE_ARRAY:
10322           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10323             {
10324               type = ada_array_element_type (type, nargs);
10325               if (type == NULL)
10326                 error (_("element type of array unknown"));
10327               else
10328                 return value_zero (ada_aligned_type (type), lval_memory);
10329             }
10330           return
10331             unwrap_value (ada_value_subscript
10332                           (ada_coerce_to_simple_array (argvec[0]),
10333                            nargs, argvec + 1));
10334         case TYPE_CODE_PTR:     /* Pointer to array */
10335           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10336             {
10337               type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10338               type = ada_array_element_type (type, nargs);
10339               if (type == NULL)
10340                 error (_("element type of array unknown"));
10341               else
10342                 return value_zero (ada_aligned_type (type), lval_memory);
10343             }
10344           return
10345             unwrap_value (ada_value_ptr_subscript (argvec[0],
10346                                                    nargs, argvec + 1));
10347
10348         default:
10349           error (_("Attempt to index or call something other than an "
10350                    "array or function"));
10351         }
10352
10353     case TERNOP_SLICE:
10354       {
10355         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10356         struct value *low_bound_val =
10357           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10358         struct value *high_bound_val =
10359           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10360         LONGEST low_bound;
10361         LONGEST high_bound;
10362
10363         low_bound_val = coerce_ref (low_bound_val);
10364         high_bound_val = coerce_ref (high_bound_val);
10365         low_bound = pos_atr (low_bound_val);
10366         high_bound = pos_atr (high_bound_val);
10367
10368         if (noside == EVAL_SKIP)
10369           goto nosideret;
10370
10371         /* If this is a reference to an aligner type, then remove all
10372            the aligners.  */
10373         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10374             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10375           TYPE_TARGET_TYPE (value_type (array)) =
10376             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10377
10378         if (ada_is_constrained_packed_array_type (value_type (array)))
10379           error (_("cannot slice a packed array"));
10380
10381         /* If this is a reference to an array or an array lvalue,
10382            convert to a pointer.  */
10383         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10384             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10385                 && VALUE_LVAL (array) == lval_memory))
10386           array = value_addr (array);
10387
10388         if (noside == EVAL_AVOID_SIDE_EFFECTS
10389             && ada_is_array_descriptor_type (ada_check_typedef
10390                                              (value_type (array))))
10391           return empty_array (ada_type_of_array (array, 0), low_bound);
10392
10393         array = ada_coerce_to_simple_array_ptr (array);
10394
10395         /* If we have more than one level of pointer indirection,
10396            dereference the value until we get only one level.  */
10397         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10398                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10399                      == TYPE_CODE_PTR))
10400           array = value_ind (array);
10401
10402         /* Make sure we really do have an array type before going further,
10403            to avoid a SEGV when trying to get the index type or the target
10404            type later down the road if the debug info generated by
10405            the compiler is incorrect or incomplete.  */
10406         if (!ada_is_simple_array_type (value_type (array)))
10407           error (_("cannot take slice of non-array"));
10408
10409         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10410             == TYPE_CODE_PTR)
10411           {
10412             struct type *type0 = ada_check_typedef (value_type (array));
10413
10414             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10415               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10416             else
10417               {
10418                 struct type *arr_type0 =
10419                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10420
10421                 return ada_value_slice_from_ptr (array, arr_type0,
10422                                                  longest_to_int (low_bound),
10423                                                  longest_to_int (high_bound));
10424               }
10425           }
10426         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10427           return array;
10428         else if (high_bound < low_bound)
10429           return empty_array (value_type (array), low_bound);
10430         else
10431           return ada_value_slice (array, longest_to_int (low_bound),
10432                                   longest_to_int (high_bound));
10433       }
10434
10435     case UNOP_IN_RANGE:
10436       (*pos) += 2;
10437       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10438       type = check_typedef (exp->elts[pc + 1].type);
10439
10440       if (noside == EVAL_SKIP)
10441         goto nosideret;
10442
10443       switch (TYPE_CODE (type))
10444         {
10445         default:
10446           lim_warning (_("Membership test incompletely implemented; "
10447                          "always returns true"));
10448           type = language_bool_type (exp->language_defn, exp->gdbarch);
10449           return value_from_longest (type, (LONGEST) 1);
10450
10451         case TYPE_CODE_RANGE:
10452           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10453           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10454           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10455           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10456           type = language_bool_type (exp->language_defn, exp->gdbarch);
10457           return
10458             value_from_longest (type,
10459                                 (value_less (arg1, arg3)
10460                                  || value_equal (arg1, arg3))
10461                                 && (value_less (arg2, arg1)
10462                                     || value_equal (arg2, arg1)));
10463         }
10464
10465     case BINOP_IN_BOUNDS:
10466       (*pos) += 2;
10467       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10468       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10469
10470       if (noside == EVAL_SKIP)
10471         goto nosideret;
10472
10473       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10474         {
10475           type = language_bool_type (exp->language_defn, exp->gdbarch);
10476           return value_zero (type, not_lval);
10477         }
10478
10479       tem = longest_to_int (exp->elts[pc + 1].longconst);
10480
10481       type = ada_index_type (value_type (arg2), tem, "range");
10482       if (!type)
10483         type = value_type (arg1);
10484
10485       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10486       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10487
10488       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10489       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10490       type = language_bool_type (exp->language_defn, exp->gdbarch);
10491       return
10492         value_from_longest (type,
10493                             (value_less (arg1, arg3)
10494                              || value_equal (arg1, arg3))
10495                             && (value_less (arg2, arg1)
10496                                 || value_equal (arg2, arg1)));
10497
10498     case TERNOP_IN_RANGE:
10499       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10500       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10501       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10502
10503       if (noside == EVAL_SKIP)
10504         goto nosideret;
10505
10506       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10507       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10508       type = language_bool_type (exp->language_defn, exp->gdbarch);
10509       return
10510         value_from_longest (type,
10511                             (value_less (arg1, arg3)
10512                              || value_equal (arg1, arg3))
10513                             && (value_less (arg2, arg1)
10514                                 || value_equal (arg2, arg1)));
10515
10516     case OP_ATR_FIRST:
10517     case OP_ATR_LAST:
10518     case OP_ATR_LENGTH:
10519       {
10520         struct type *type_arg;
10521
10522         if (exp->elts[*pos].opcode == OP_TYPE)
10523           {
10524             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10525             arg1 = NULL;
10526             type_arg = check_typedef (exp->elts[pc + 2].type);
10527           }
10528         else
10529           {
10530             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10531             type_arg = NULL;
10532           }
10533
10534         if (exp->elts[*pos].opcode != OP_LONG)
10535           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10536         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10537         *pos += 4;
10538
10539         if (noside == EVAL_SKIP)
10540           goto nosideret;
10541
10542         if (type_arg == NULL)
10543           {
10544             arg1 = ada_coerce_ref (arg1);
10545
10546             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10547               arg1 = ada_coerce_to_simple_array (arg1);
10548
10549             if (op == OP_ATR_LENGTH)
10550               type = builtin_type (exp->gdbarch)->builtin_int;
10551             else
10552               {
10553                 type = ada_index_type (value_type (arg1), tem,
10554                                        ada_attribute_name (op));
10555                 if (type == NULL)
10556                   type = builtin_type (exp->gdbarch)->builtin_int;
10557               }
10558
10559             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10560               return allocate_value (type);
10561
10562             switch (op)
10563               {
10564               default:          /* Should never happen.  */
10565                 error (_("unexpected attribute encountered"));
10566               case OP_ATR_FIRST:
10567                 return value_from_longest
10568                         (type, ada_array_bound (arg1, tem, 0));
10569               case OP_ATR_LAST:
10570                 return value_from_longest
10571                         (type, ada_array_bound (arg1, tem, 1));
10572               case OP_ATR_LENGTH:
10573                 return value_from_longest
10574                         (type, ada_array_length (arg1, tem));
10575               }
10576           }
10577         else if (discrete_type_p (type_arg))
10578           {
10579             struct type *range_type;
10580             const char *name = ada_type_name (type_arg);
10581
10582             range_type = NULL;
10583             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10584               range_type = to_fixed_range_type (type_arg, NULL);
10585             if (range_type == NULL)
10586               range_type = type_arg;
10587             switch (op)
10588               {
10589               default:
10590                 error (_("unexpected attribute encountered"));
10591               case OP_ATR_FIRST:
10592                 return value_from_longest 
10593                   (range_type, ada_discrete_type_low_bound (range_type));
10594               case OP_ATR_LAST:
10595                 return value_from_longest
10596                   (range_type, ada_discrete_type_high_bound (range_type));
10597               case OP_ATR_LENGTH:
10598                 error (_("the 'length attribute applies only to array types"));
10599               }
10600           }
10601         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10602           error (_("unimplemented type attribute"));
10603         else
10604           {
10605             LONGEST low, high;
10606
10607             if (ada_is_constrained_packed_array_type (type_arg))
10608               type_arg = decode_constrained_packed_array_type (type_arg);
10609
10610             if (op == OP_ATR_LENGTH)
10611               type = builtin_type (exp->gdbarch)->builtin_int;
10612             else
10613               {
10614                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10615                 if (type == NULL)
10616                   type = builtin_type (exp->gdbarch)->builtin_int;
10617               }
10618
10619             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10620               return allocate_value (type);
10621
10622             switch (op)
10623               {
10624               default:
10625                 error (_("unexpected attribute encountered"));
10626               case OP_ATR_FIRST:
10627                 low = ada_array_bound_from_type (type_arg, tem, 0);
10628                 return value_from_longest (type, low);
10629               case OP_ATR_LAST:
10630                 high = ada_array_bound_from_type (type_arg, tem, 1);
10631                 return value_from_longest (type, high);
10632               case OP_ATR_LENGTH:
10633                 low = ada_array_bound_from_type (type_arg, tem, 0);
10634                 high = ada_array_bound_from_type (type_arg, tem, 1);
10635                 return value_from_longest (type, high - low + 1);
10636               }
10637           }
10638       }
10639
10640     case OP_ATR_TAG:
10641       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10642       if (noside == EVAL_SKIP)
10643         goto nosideret;
10644
10645       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10646         return value_zero (ada_tag_type (arg1), not_lval);
10647
10648       return ada_value_tag (arg1);
10649
10650     case OP_ATR_MIN:
10651     case OP_ATR_MAX:
10652       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10653       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10654       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10655       if (noside == EVAL_SKIP)
10656         goto nosideret;
10657       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10658         return value_zero (value_type (arg1), not_lval);
10659       else
10660         {
10661           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10662           return value_binop (arg1, arg2,
10663                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10664         }
10665
10666     case OP_ATR_MODULUS:
10667       {
10668         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10669
10670         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10671         if (noside == EVAL_SKIP)
10672           goto nosideret;
10673
10674         if (!ada_is_modular_type (type_arg))
10675           error (_("'modulus must be applied to modular type"));
10676
10677         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10678                                    ada_modulus (type_arg));
10679       }
10680
10681
10682     case OP_ATR_POS:
10683       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10684       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10685       if (noside == EVAL_SKIP)
10686         goto nosideret;
10687       type = builtin_type (exp->gdbarch)->builtin_int;
10688       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10689         return value_zero (type, not_lval);
10690       else
10691         return value_pos_atr (type, arg1);
10692
10693     case OP_ATR_SIZE:
10694       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10695       type = value_type (arg1);
10696
10697       /* If the argument is a reference, then dereference its type, since
10698          the user is really asking for the size of the actual object,
10699          not the size of the pointer.  */
10700       if (TYPE_CODE (type) == TYPE_CODE_REF)
10701         type = TYPE_TARGET_TYPE (type);
10702
10703       if (noside == EVAL_SKIP)
10704         goto nosideret;
10705       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10706         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10707       else
10708         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10709                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10710
10711     case OP_ATR_VAL:
10712       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10713       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10714       type = exp->elts[pc + 2].type;
10715       if (noside == EVAL_SKIP)
10716         goto nosideret;
10717       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10718         return value_zero (type, not_lval);
10719       else
10720         return value_val_atr (type, arg1);
10721
10722     case BINOP_EXP:
10723       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10724       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10725       if (noside == EVAL_SKIP)
10726         goto nosideret;
10727       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10728         return value_zero (value_type (arg1), not_lval);
10729       else
10730         {
10731           /* For integer exponentiation operations,
10732              only promote the first argument.  */
10733           if (is_integral_type (value_type (arg2)))
10734             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10735           else
10736             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10737
10738           return value_binop (arg1, arg2, op);
10739         }
10740
10741     case UNOP_PLUS:
10742       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10743       if (noside == EVAL_SKIP)
10744         goto nosideret;
10745       else
10746         return arg1;
10747
10748     case UNOP_ABS:
10749       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10750       if (noside == EVAL_SKIP)
10751         goto nosideret;
10752       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10753       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10754         return value_neg (arg1);
10755       else
10756         return arg1;
10757
10758     case UNOP_IND:
10759       preeval_pos = *pos;
10760       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10761       if (noside == EVAL_SKIP)
10762         goto nosideret;
10763       type = ada_check_typedef (value_type (arg1));
10764       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10765         {
10766           if (ada_is_array_descriptor_type (type))
10767             /* GDB allows dereferencing GNAT array descriptors.  */
10768             {
10769               struct type *arrType = ada_type_of_array (arg1, 0);
10770
10771               if (arrType == NULL)
10772                 error (_("Attempt to dereference null array pointer."));
10773               return value_at_lazy (arrType, 0);
10774             }
10775           else if (TYPE_CODE (type) == TYPE_CODE_PTR
10776                    || TYPE_CODE (type) == TYPE_CODE_REF
10777                    /* In C you can dereference an array to get the 1st elt.  */
10778                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10779             {
10780             /* As mentioned in the OP_VAR_VALUE case, tagged types can
10781                only be determined by inspecting the object's tag.
10782                This means that we need to evaluate completely the
10783                expression in order to get its type.  */
10784
10785               if ((TYPE_CODE (type) == TYPE_CODE_REF
10786                    || TYPE_CODE (type) == TYPE_CODE_PTR)
10787                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10788                 {
10789                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10790                                           EVAL_NORMAL);
10791                   type = value_type (ada_value_ind (arg1));
10792                 }
10793               else
10794                 {
10795                   type = to_static_fixed_type
10796                     (ada_aligned_type
10797                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10798                 }
10799               check_size (type);
10800               return value_zero (type, lval_memory);
10801             }
10802           else if (TYPE_CODE (type) == TYPE_CODE_INT)
10803             {
10804               /* GDB allows dereferencing an int.  */
10805               if (expect_type == NULL)
10806                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10807                                    lval_memory);
10808               else
10809                 {
10810                   expect_type = 
10811                     to_static_fixed_type (ada_aligned_type (expect_type));
10812                   return value_zero (expect_type, lval_memory);
10813                 }
10814             }
10815           else
10816             error (_("Attempt to take contents of a non-pointer value."));
10817         }
10818       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
10819       type = ada_check_typedef (value_type (arg1));
10820
10821       if (TYPE_CODE (type) == TYPE_CODE_INT)
10822           /* GDB allows dereferencing an int.  If we were given
10823              the expect_type, then use that as the target type.
10824              Otherwise, assume that the target type is an int.  */
10825         {
10826           if (expect_type != NULL)
10827             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10828                                               arg1));
10829           else
10830             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10831                                   (CORE_ADDR) value_as_address (arg1));
10832         }
10833
10834       if (ada_is_array_descriptor_type (type))
10835         /* GDB allows dereferencing GNAT array descriptors.  */
10836         return ada_coerce_to_simple_array (arg1);
10837       else
10838         return ada_value_ind (arg1);
10839
10840     case STRUCTOP_STRUCT:
10841       tem = longest_to_int (exp->elts[pc + 1].longconst);
10842       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10843       preeval_pos = *pos;
10844       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10845       if (noside == EVAL_SKIP)
10846         goto nosideret;
10847       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10848         {
10849           struct type *type1 = value_type (arg1);
10850
10851           if (ada_is_tagged_type (type1, 1))
10852             {
10853               type = ada_lookup_struct_elt_type (type1,
10854                                                  &exp->elts[pc + 2].string,
10855                                                  1, 1, NULL);
10856
10857               /* If the field is not found, check if it exists in the
10858                  extension of this object's type. This means that we
10859                  need to evaluate completely the expression.  */
10860
10861               if (type == NULL)
10862                 {
10863                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10864                                           EVAL_NORMAL);
10865                   arg1 = ada_value_struct_elt (arg1,
10866                                                &exp->elts[pc + 2].string,
10867                                                0);
10868                   arg1 = unwrap_value (arg1);
10869                   type = value_type (ada_to_fixed_value (arg1));
10870                 }
10871             }
10872           else
10873             type =
10874               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10875                                           0, NULL);
10876
10877           return value_zero (ada_aligned_type (type), lval_memory);
10878         }
10879       else
10880         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10881         arg1 = unwrap_value (arg1);
10882         return ada_to_fixed_value (arg1);
10883
10884     case OP_TYPE:
10885       /* The value is not supposed to be used.  This is here to make it
10886          easier to accommodate expressions that contain types.  */
10887       (*pos) += 2;
10888       if (noside == EVAL_SKIP)
10889         goto nosideret;
10890       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10891         return allocate_value (exp->elts[pc + 1].type);
10892       else
10893         error (_("Attempt to use a type name as an expression"));
10894
10895     case OP_AGGREGATE:
10896     case OP_CHOICES:
10897     case OP_OTHERS:
10898     case OP_DISCRETE_RANGE:
10899     case OP_POSITIONAL:
10900     case OP_NAME:
10901       if (noside == EVAL_NORMAL)
10902         switch (op) 
10903           {
10904           case OP_NAME:
10905             error (_("Undefined name, ambiguous name, or renaming used in "
10906                      "component association: %s."), &exp->elts[pc+2].string);
10907           case OP_AGGREGATE:
10908             error (_("Aggregates only allowed on the right of an assignment"));
10909           default:
10910             internal_error (__FILE__, __LINE__,
10911                             _("aggregate apparently mangled"));
10912           }
10913
10914       ada_forward_operator_length (exp, pc, &oplen, &nargs);
10915       *pos += oplen - 1;
10916       for (tem = 0; tem < nargs; tem += 1) 
10917         ada_evaluate_subexp (NULL, exp, pos, noside);
10918       goto nosideret;
10919     }
10920
10921 nosideret:
10922   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
10923 }
10924 \f
10925
10926                                 /* Fixed point */
10927
10928 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
10929    type name that encodes the 'small and 'delta information.
10930    Otherwise, return NULL.  */
10931
10932 static const char *
10933 fixed_type_info (struct type *type)
10934 {
10935   const char *name = ada_type_name (type);
10936   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10937
10938   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10939     {
10940       const char *tail = strstr (name, "___XF_");
10941
10942       if (tail == NULL)
10943         return NULL;
10944       else
10945         return tail + 5;
10946     }
10947   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10948     return fixed_type_info (TYPE_TARGET_TYPE (type));
10949   else
10950     return NULL;
10951 }
10952
10953 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
10954
10955 int
10956 ada_is_fixed_point_type (struct type *type)
10957 {
10958   return fixed_type_info (type) != NULL;
10959 }
10960
10961 /* Return non-zero iff TYPE represents a System.Address type.  */
10962
10963 int
10964 ada_is_system_address_type (struct type *type)
10965 {
10966   return (TYPE_NAME (type)
10967           && strcmp (TYPE_NAME (type), "system__address") == 0);
10968 }
10969
10970 /* Assuming that TYPE is the representation of an Ada fixed-point
10971    type, return its delta, or -1 if the type is malformed and the
10972    delta cannot be determined.  */
10973
10974 DOUBLEST
10975 ada_delta (struct type *type)
10976 {
10977   const char *encoding = fixed_type_info (type);
10978   DOUBLEST num, den;
10979
10980   /* Strictly speaking, num and den are encoded as integer.  However,
10981      they may not fit into a long, and they will have to be converted
10982      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10983   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10984               &num, &den) < 2)
10985     return -1.0;
10986   else
10987     return num / den;
10988 }
10989
10990 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
10991    factor ('SMALL value) associated with the type.  */
10992
10993 static DOUBLEST
10994 scaling_factor (struct type *type)
10995 {
10996   const char *encoding = fixed_type_info (type);
10997   DOUBLEST num0, den0, num1, den1;
10998   int n;
10999
11000   /* Strictly speaking, num's and den's are encoded as integer.  However,
11001      they may not fit into a long, and they will have to be converted
11002      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11003   n = sscanf (encoding,
11004               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11005               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11006               &num0, &den0, &num1, &den1);
11007
11008   if (n < 2)
11009     return 1.0;
11010   else if (n == 4)
11011     return num1 / den1;
11012   else
11013     return num0 / den0;
11014 }
11015
11016
11017 /* Assuming that X is the representation of a value of fixed-point
11018    type TYPE, return its floating-point equivalent.  */
11019
11020 DOUBLEST
11021 ada_fixed_to_float (struct type *type, LONGEST x)
11022 {
11023   return (DOUBLEST) x *scaling_factor (type);
11024 }
11025
11026 /* The representation of a fixed-point value of type TYPE
11027    corresponding to the value X.  */
11028
11029 LONGEST
11030 ada_float_to_fixed (struct type *type, DOUBLEST x)
11031 {
11032   return (LONGEST) (x / scaling_factor (type) + 0.5);
11033 }
11034
11035 \f
11036
11037                                 /* Range types */
11038
11039 /* Scan STR beginning at position K for a discriminant name, and
11040    return the value of that discriminant field of DVAL in *PX.  If
11041    PNEW_K is not null, put the position of the character beyond the
11042    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11043    not alter *PX and *PNEW_K if unsuccessful.  */
11044
11045 static int
11046 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
11047                     int *pnew_k)
11048 {
11049   static char *bound_buffer = NULL;
11050   static size_t bound_buffer_len = 0;
11051   char *bound;
11052   char *pend;
11053   struct value *bound_val;
11054
11055   if (dval == NULL || str == NULL || str[k] == '\0')
11056     return 0;
11057
11058   pend = strstr (str + k, "__");
11059   if (pend == NULL)
11060     {
11061       bound = str + k;
11062       k += strlen (bound);
11063     }
11064   else
11065     {
11066       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
11067       bound = bound_buffer;
11068       strncpy (bound_buffer, str + k, pend - (str + k));
11069       bound[pend - (str + k)] = '\0';
11070       k = pend - str;
11071     }
11072
11073   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11074   if (bound_val == NULL)
11075     return 0;
11076
11077   *px = value_as_long (bound_val);
11078   if (pnew_k != NULL)
11079     *pnew_k = k;
11080   return 1;
11081 }
11082
11083 /* Value of variable named NAME in the current environment.  If
11084    no such variable found, then if ERR_MSG is null, returns 0, and
11085    otherwise causes an error with message ERR_MSG.  */
11086
11087 static struct value *
11088 get_var_value (char *name, char *err_msg)
11089 {
11090   struct ada_symbol_info *syms;
11091   int nsyms;
11092
11093   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11094                                   &syms);
11095
11096   if (nsyms != 1)
11097     {
11098       if (err_msg == NULL)
11099         return 0;
11100       else
11101         error (("%s"), err_msg);
11102     }
11103
11104   return value_of_variable (syms[0].sym, syms[0].block);
11105 }
11106
11107 /* Value of integer variable named NAME in the current environment.  If
11108    no such variable found, returns 0, and sets *FLAG to 0.  If
11109    successful, sets *FLAG to 1.  */
11110
11111 LONGEST
11112 get_int_var_value (char *name, int *flag)
11113 {
11114   struct value *var_val = get_var_value (name, 0);
11115
11116   if (var_val == 0)
11117     {
11118       if (flag != NULL)
11119         *flag = 0;
11120       return 0;
11121     }
11122   else
11123     {
11124       if (flag != NULL)
11125         *flag = 1;
11126       return value_as_long (var_val);
11127     }
11128 }
11129
11130
11131 /* Return a range type whose base type is that of the range type named
11132    NAME in the current environment, and whose bounds are calculated
11133    from NAME according to the GNAT range encoding conventions.
11134    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11135    corresponding range type from debug information; fall back to using it
11136    if symbol lookup fails.  If a new type must be created, allocate it
11137    like ORIG_TYPE was.  The bounds information, in general, is encoded
11138    in NAME, the base type given in the named range type.  */
11139
11140 static struct type *
11141 to_fixed_range_type (struct type *raw_type, struct value *dval)
11142 {
11143   const char *name;
11144   struct type *base_type;
11145   char *subtype_info;
11146
11147   gdb_assert (raw_type != NULL);
11148   gdb_assert (TYPE_NAME (raw_type) != NULL);
11149
11150   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11151     base_type = TYPE_TARGET_TYPE (raw_type);
11152   else
11153     base_type = raw_type;
11154
11155   name = TYPE_NAME (raw_type);
11156   subtype_info = strstr (name, "___XD");
11157   if (subtype_info == NULL)
11158     {
11159       LONGEST L = ada_discrete_type_low_bound (raw_type);
11160       LONGEST U = ada_discrete_type_high_bound (raw_type);
11161
11162       if (L < INT_MIN || U > INT_MAX)
11163         return raw_type;
11164       else
11165         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11166                                          L, U);
11167     }
11168   else
11169     {
11170       static char *name_buf = NULL;
11171       static size_t name_len = 0;
11172       int prefix_len = subtype_info - name;
11173       LONGEST L, U;
11174       struct type *type;
11175       char *bounds_str;
11176       int n;
11177
11178       GROW_VECT (name_buf, name_len, prefix_len + 5);
11179       strncpy (name_buf, name, prefix_len);
11180       name_buf[prefix_len] = '\0';
11181
11182       subtype_info += 5;
11183       bounds_str = strchr (subtype_info, '_');
11184       n = 1;
11185
11186       if (*subtype_info == 'L')
11187         {
11188           if (!ada_scan_number (bounds_str, n, &L, &n)
11189               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11190             return raw_type;
11191           if (bounds_str[n] == '_')
11192             n += 2;
11193           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11194             n += 1;
11195           subtype_info += 1;
11196         }
11197       else
11198         {
11199           int ok;
11200
11201           strcpy (name_buf + prefix_len, "___L");
11202           L = get_int_var_value (name_buf, &ok);
11203           if (!ok)
11204             {
11205               lim_warning (_("Unknown lower bound, using 1."));
11206               L = 1;
11207             }
11208         }
11209
11210       if (*subtype_info == 'U')
11211         {
11212           if (!ada_scan_number (bounds_str, n, &U, &n)
11213               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11214             return raw_type;
11215         }
11216       else
11217         {
11218           int ok;
11219
11220           strcpy (name_buf + prefix_len, "___U");
11221           U = get_int_var_value (name_buf, &ok);
11222           if (!ok)
11223             {
11224               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11225               U = L;
11226             }
11227         }
11228
11229       type = create_static_range_type (alloc_type_copy (raw_type),
11230                                        base_type, L, U);
11231       TYPE_NAME (type) = name;
11232       return type;
11233     }
11234 }
11235
11236 /* True iff NAME is the name of a range type.  */
11237
11238 int
11239 ada_is_range_type_name (const char *name)
11240 {
11241   return (name != NULL && strstr (name, "___XD"));
11242 }
11243 \f
11244
11245                                 /* Modular types */
11246
11247 /* True iff TYPE is an Ada modular type.  */
11248
11249 int
11250 ada_is_modular_type (struct type *type)
11251 {
11252   struct type *subranged_type = get_base_type (type);
11253
11254   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11255           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11256           && TYPE_UNSIGNED (subranged_type));
11257 }
11258
11259 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11260
11261 ULONGEST
11262 ada_modulus (struct type *type)
11263 {
11264   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11265 }
11266 \f
11267
11268 /* Ada exception catchpoint support:
11269    ---------------------------------
11270
11271    We support 3 kinds of exception catchpoints:
11272      . catchpoints on Ada exceptions
11273      . catchpoints on unhandled Ada exceptions
11274      . catchpoints on failed assertions
11275
11276    Exceptions raised during failed assertions, or unhandled exceptions
11277    could perfectly be caught with the general catchpoint on Ada exceptions.
11278    However, we can easily differentiate these two special cases, and having
11279    the option to distinguish these two cases from the rest can be useful
11280    to zero-in on certain situations.
11281
11282    Exception catchpoints are a specialized form of breakpoint,
11283    since they rely on inserting breakpoints inside known routines
11284    of the GNAT runtime.  The implementation therefore uses a standard
11285    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11286    of breakpoint_ops.
11287
11288    Support in the runtime for exception catchpoints have been changed
11289    a few times already, and these changes affect the implementation
11290    of these catchpoints.  In order to be able to support several
11291    variants of the runtime, we use a sniffer that will determine
11292    the runtime variant used by the program being debugged.  */
11293
11294 /* Ada's standard exceptions.
11295
11296    The Ada 83 standard also defined Numeric_Error.  But there so many
11297    situations where it was unclear from the Ada 83 Reference Manual
11298    (RM) whether Constraint_Error or Numeric_Error should be raised,
11299    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11300    Interpretation saying that anytime the RM says that Numeric_Error
11301    should be raised, the implementation may raise Constraint_Error.
11302    Ada 95 went one step further and pretty much removed Numeric_Error
11303    from the list of standard exceptions (it made it a renaming of
11304    Constraint_Error, to help preserve compatibility when compiling
11305    an Ada83 compiler). As such, we do not include Numeric_Error from
11306    this list of standard exceptions.  */
11307
11308 static char *standard_exc[] = {
11309   "constraint_error",
11310   "program_error",
11311   "storage_error",
11312   "tasking_error"
11313 };
11314
11315 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11316
11317 /* A structure that describes how to support exception catchpoints
11318    for a given executable.  */
11319
11320 struct exception_support_info
11321 {
11322    /* The name of the symbol to break on in order to insert
11323       a catchpoint on exceptions.  */
11324    const char *catch_exception_sym;
11325
11326    /* The name of the symbol to break on in order to insert
11327       a catchpoint on unhandled exceptions.  */
11328    const char *catch_exception_unhandled_sym;
11329
11330    /* The name of the symbol to break on in order to insert
11331       a catchpoint on failed assertions.  */
11332    const char *catch_assert_sym;
11333
11334    /* Assuming that the inferior just triggered an unhandled exception
11335       catchpoint, this function is responsible for returning the address
11336       in inferior memory where the name of that exception is stored.
11337       Return zero if the address could not be computed.  */
11338    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11339 };
11340
11341 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11342 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11343
11344 /* The following exception support info structure describes how to
11345    implement exception catchpoints with the latest version of the
11346    Ada runtime (as of 2007-03-06).  */
11347
11348 static const struct exception_support_info default_exception_support_info =
11349 {
11350   "__gnat_debug_raise_exception", /* catch_exception_sym */
11351   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11352   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11353   ada_unhandled_exception_name_addr
11354 };
11355
11356 /* The following exception support info structure describes how to
11357    implement exception catchpoints with a slightly older version
11358    of the Ada runtime.  */
11359
11360 static const struct exception_support_info exception_support_info_fallback =
11361 {
11362   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11363   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11364   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11365   ada_unhandled_exception_name_addr_from_raise
11366 };
11367
11368 /* Return nonzero if we can detect the exception support routines
11369    described in EINFO.
11370
11371    This function errors out if an abnormal situation is detected
11372    (for instance, if we find the exception support routines, but
11373    that support is found to be incomplete).  */
11374
11375 static int
11376 ada_has_this_exception_support (const struct exception_support_info *einfo)
11377 {
11378   struct symbol *sym;
11379
11380   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11381      that should be compiled with debugging information.  As a result, we
11382      expect to find that symbol in the symtabs.  */
11383
11384   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11385   if (sym == NULL)
11386     {
11387       /* Perhaps we did not find our symbol because the Ada runtime was
11388          compiled without debugging info, or simply stripped of it.
11389          It happens on some GNU/Linux distributions for instance, where
11390          users have to install a separate debug package in order to get
11391          the runtime's debugging info.  In that situation, let the user
11392          know why we cannot insert an Ada exception catchpoint.
11393
11394          Note: Just for the purpose of inserting our Ada exception
11395          catchpoint, we could rely purely on the associated minimal symbol.
11396          But we would be operating in degraded mode anyway, since we are
11397          still lacking the debugging info needed later on to extract
11398          the name of the exception being raised (this name is printed in
11399          the catchpoint message, and is also used when trying to catch
11400          a specific exception).  We do not handle this case for now.  */
11401       struct bound_minimal_symbol msym
11402         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11403
11404       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11405         error (_("Your Ada runtime appears to be missing some debugging "
11406                  "information.\nCannot insert Ada exception catchpoint "
11407                  "in this configuration."));
11408
11409       return 0;
11410     }
11411
11412   /* Make sure that the symbol we found corresponds to a function.  */
11413
11414   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11415     error (_("Symbol \"%s\" is not a function (class = %d)"),
11416            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11417
11418   return 1;
11419 }
11420
11421 /* Inspect the Ada runtime and determine which exception info structure
11422    should be used to provide support for exception catchpoints.
11423
11424    This function will always set the per-inferior exception_info,
11425    or raise an error.  */
11426
11427 static void
11428 ada_exception_support_info_sniffer (void)
11429 {
11430   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11431
11432   /* If the exception info is already known, then no need to recompute it.  */
11433   if (data->exception_info != NULL)
11434     return;
11435
11436   /* Check the latest (default) exception support info.  */
11437   if (ada_has_this_exception_support (&default_exception_support_info))
11438     {
11439       data->exception_info = &default_exception_support_info;
11440       return;
11441     }
11442
11443   /* Try our fallback exception suport info.  */
11444   if (ada_has_this_exception_support (&exception_support_info_fallback))
11445     {
11446       data->exception_info = &exception_support_info_fallback;
11447       return;
11448     }
11449
11450   /* Sometimes, it is normal for us to not be able to find the routine
11451      we are looking for.  This happens when the program is linked with
11452      the shared version of the GNAT runtime, and the program has not been
11453      started yet.  Inform the user of these two possible causes if
11454      applicable.  */
11455
11456   if (ada_update_initial_language (language_unknown) != language_ada)
11457     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11458
11459   /* If the symbol does not exist, then check that the program is
11460      already started, to make sure that shared libraries have been
11461      loaded.  If it is not started, this may mean that the symbol is
11462      in a shared library.  */
11463
11464   if (ptid_get_pid (inferior_ptid) == 0)
11465     error (_("Unable to insert catchpoint. Try to start the program first."));
11466
11467   /* At this point, we know that we are debugging an Ada program and
11468      that the inferior has been started, but we still are not able to
11469      find the run-time symbols.  That can mean that we are in
11470      configurable run time mode, or that a-except as been optimized
11471      out by the linker...  In any case, at this point it is not worth
11472      supporting this feature.  */
11473
11474   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11475 }
11476
11477 /* True iff FRAME is very likely to be that of a function that is
11478    part of the runtime system.  This is all very heuristic, but is
11479    intended to be used as advice as to what frames are uninteresting
11480    to most users.  */
11481
11482 static int
11483 is_known_support_routine (struct frame_info *frame)
11484 {
11485   struct symtab_and_line sal;
11486   char *func_name;
11487   enum language func_lang;
11488   int i;
11489   const char *fullname;
11490
11491   /* If this code does not have any debugging information (no symtab),
11492      This cannot be any user code.  */
11493
11494   find_frame_sal (frame, &sal);
11495   if (sal.symtab == NULL)
11496     return 1;
11497
11498   /* If there is a symtab, but the associated source file cannot be
11499      located, then assume this is not user code:  Selecting a frame
11500      for which we cannot display the code would not be very helpful
11501      for the user.  This should also take care of case such as VxWorks
11502      where the kernel has some debugging info provided for a few units.  */
11503
11504   fullname = symtab_to_fullname (sal.symtab);
11505   if (access (fullname, R_OK) != 0)
11506     return 1;
11507
11508   /* Check the unit filename againt the Ada runtime file naming.
11509      We also check the name of the objfile against the name of some
11510      known system libraries that sometimes come with debugging info
11511      too.  */
11512
11513   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11514     {
11515       re_comp (known_runtime_file_name_patterns[i]);
11516       if (re_exec (lbasename (sal.symtab->filename)))
11517         return 1;
11518       if (sal.symtab->objfile != NULL
11519           && re_exec (objfile_name (sal.symtab->objfile)))
11520         return 1;
11521     }
11522
11523   /* Check whether the function is a GNAT-generated entity.  */
11524
11525   find_frame_funname (frame, &func_name, &func_lang, NULL);
11526   if (func_name == NULL)
11527     return 1;
11528
11529   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11530     {
11531       re_comp (known_auxiliary_function_name_patterns[i]);
11532       if (re_exec (func_name))
11533         {
11534           xfree (func_name);
11535           return 1;
11536         }
11537     }
11538
11539   xfree (func_name);
11540   return 0;
11541 }
11542
11543 /* Find the first frame that contains debugging information and that is not
11544    part of the Ada run-time, starting from FI and moving upward.  */
11545
11546 void
11547 ada_find_printable_frame (struct frame_info *fi)
11548 {
11549   for (; fi != NULL; fi = get_prev_frame (fi))
11550     {
11551       if (!is_known_support_routine (fi))
11552         {
11553           select_frame (fi);
11554           break;
11555         }
11556     }
11557
11558 }
11559
11560 /* Assuming that the inferior just triggered an unhandled exception
11561    catchpoint, return the address in inferior memory where the name
11562    of the exception is stored.
11563    
11564    Return zero if the address could not be computed.  */
11565
11566 static CORE_ADDR
11567 ada_unhandled_exception_name_addr (void)
11568 {
11569   return parse_and_eval_address ("e.full_name");
11570 }
11571
11572 /* Same as ada_unhandled_exception_name_addr, except that this function
11573    should be used when the inferior uses an older version of the runtime,
11574    where the exception name needs to be extracted from a specific frame
11575    several frames up in the callstack.  */
11576
11577 static CORE_ADDR
11578 ada_unhandled_exception_name_addr_from_raise (void)
11579 {
11580   int frame_level;
11581   struct frame_info *fi;
11582   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11583   struct cleanup *old_chain;
11584
11585   /* To determine the name of this exception, we need to select
11586      the frame corresponding to RAISE_SYM_NAME.  This frame is
11587      at least 3 levels up, so we simply skip the first 3 frames
11588      without checking the name of their associated function.  */
11589   fi = get_current_frame ();
11590   for (frame_level = 0; frame_level < 3; frame_level += 1)
11591     if (fi != NULL)
11592       fi = get_prev_frame (fi); 
11593
11594   old_chain = make_cleanup (null_cleanup, NULL);
11595   while (fi != NULL)
11596     {
11597       char *func_name;
11598       enum language func_lang;
11599
11600       find_frame_funname (fi, &func_name, &func_lang, NULL);
11601       if (func_name != NULL)
11602         {
11603           make_cleanup (xfree, func_name);
11604
11605           if (strcmp (func_name,
11606                       data->exception_info->catch_exception_sym) == 0)
11607             break; /* We found the frame we were looking for...  */
11608           fi = get_prev_frame (fi);
11609         }
11610     }
11611   do_cleanups (old_chain);
11612
11613   if (fi == NULL)
11614     return 0;
11615
11616   select_frame (fi);
11617   return parse_and_eval_address ("id.full_name");
11618 }
11619
11620 /* Assuming the inferior just triggered an Ada exception catchpoint
11621    (of any type), return the address in inferior memory where the name
11622    of the exception is stored, if applicable.
11623
11624    Return zero if the address could not be computed, or if not relevant.  */
11625
11626 static CORE_ADDR
11627 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11628                            struct breakpoint *b)
11629 {
11630   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11631
11632   switch (ex)
11633     {
11634       case ada_catch_exception:
11635         return (parse_and_eval_address ("e.full_name"));
11636         break;
11637
11638       case ada_catch_exception_unhandled:
11639         return data->exception_info->unhandled_exception_name_addr ();
11640         break;
11641       
11642       case ada_catch_assert:
11643         return 0;  /* Exception name is not relevant in this case.  */
11644         break;
11645
11646       default:
11647         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11648         break;
11649     }
11650
11651   return 0; /* Should never be reached.  */
11652 }
11653
11654 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11655    any error that ada_exception_name_addr_1 might cause to be thrown.
11656    When an error is intercepted, a warning with the error message is printed,
11657    and zero is returned.  */
11658
11659 static CORE_ADDR
11660 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11661                          struct breakpoint *b)
11662 {
11663   volatile struct gdb_exception e;
11664   CORE_ADDR result = 0;
11665
11666   TRY_CATCH (e, RETURN_MASK_ERROR)
11667     {
11668       result = ada_exception_name_addr_1 (ex, b);
11669     }
11670
11671   if (e.reason < 0)
11672     {
11673       warning (_("failed to get exception name: %s"), e.message);
11674       return 0;
11675     }
11676
11677   return result;
11678 }
11679
11680 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11681
11682 /* Ada catchpoints.
11683
11684    In the case of catchpoints on Ada exceptions, the catchpoint will
11685    stop the target on every exception the program throws.  When a user
11686    specifies the name of a specific exception, we translate this
11687    request into a condition expression (in text form), and then parse
11688    it into an expression stored in each of the catchpoint's locations.
11689    We then use this condition to check whether the exception that was
11690    raised is the one the user is interested in.  If not, then the
11691    target is resumed again.  We store the name of the requested
11692    exception, in order to be able to re-set the condition expression
11693    when symbols change.  */
11694
11695 /* An instance of this type is used to represent an Ada catchpoint
11696    breakpoint location.  It includes a "struct bp_location" as a kind
11697    of base class; users downcast to "struct bp_location *" when
11698    needed.  */
11699
11700 struct ada_catchpoint_location
11701 {
11702   /* The base class.  */
11703   struct bp_location base;
11704
11705   /* The condition that checks whether the exception that was raised
11706      is the specific exception the user specified on catchpoint
11707      creation.  */
11708   struct expression *excep_cond_expr;
11709 };
11710
11711 /* Implement the DTOR method in the bp_location_ops structure for all
11712    Ada exception catchpoint kinds.  */
11713
11714 static void
11715 ada_catchpoint_location_dtor (struct bp_location *bl)
11716 {
11717   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11718
11719   xfree (al->excep_cond_expr);
11720 }
11721
11722 /* The vtable to be used in Ada catchpoint locations.  */
11723
11724 static const struct bp_location_ops ada_catchpoint_location_ops =
11725 {
11726   ada_catchpoint_location_dtor
11727 };
11728
11729 /* An instance of this type is used to represent an Ada catchpoint.
11730    It includes a "struct breakpoint" as a kind of base class; users
11731    downcast to "struct breakpoint *" when needed.  */
11732
11733 struct ada_catchpoint
11734 {
11735   /* The base class.  */
11736   struct breakpoint base;
11737
11738   /* The name of the specific exception the user specified.  */
11739   char *excep_string;
11740 };
11741
11742 /* Parse the exception condition string in the context of each of the
11743    catchpoint's locations, and store them for later evaluation.  */
11744
11745 static void
11746 create_excep_cond_exprs (struct ada_catchpoint *c)
11747 {
11748   struct cleanup *old_chain;
11749   struct bp_location *bl;
11750   char *cond_string;
11751
11752   /* Nothing to do if there's no specific exception to catch.  */
11753   if (c->excep_string == NULL)
11754     return;
11755
11756   /* Same if there are no locations... */
11757   if (c->base.loc == NULL)
11758     return;
11759
11760   /* Compute the condition expression in text form, from the specific
11761      expection we want to catch.  */
11762   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11763   old_chain = make_cleanup (xfree, cond_string);
11764
11765   /* Iterate over all the catchpoint's locations, and parse an
11766      expression for each.  */
11767   for (bl = c->base.loc; bl != NULL; bl = bl->next)
11768     {
11769       struct ada_catchpoint_location *ada_loc
11770         = (struct ada_catchpoint_location *) bl;
11771       struct expression *exp = NULL;
11772
11773       if (!bl->shlib_disabled)
11774         {
11775           volatile struct gdb_exception e;
11776           const char *s;
11777
11778           s = cond_string;
11779           TRY_CATCH (e, RETURN_MASK_ERROR)
11780             {
11781               exp = parse_exp_1 (&s, bl->address,
11782                                  block_for_pc (bl->address), 0);
11783             }
11784           if (e.reason < 0)
11785             {
11786               warning (_("failed to reevaluate internal exception condition "
11787                          "for catchpoint %d: %s"),
11788                        c->base.number, e.message);
11789               /* There is a bug in GCC on sparc-solaris when building with
11790                  optimization which causes EXP to change unexpectedly
11791                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11792                  The problem should be fixed starting with GCC 4.9.
11793                  In the meantime, work around it by forcing EXP back
11794                  to NULL.  */
11795               exp = NULL;
11796             }
11797         }
11798
11799       ada_loc->excep_cond_expr = exp;
11800     }
11801
11802   do_cleanups (old_chain);
11803 }
11804
11805 /* Implement the DTOR method in the breakpoint_ops structure for all
11806    exception catchpoint kinds.  */
11807
11808 static void
11809 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11810 {
11811   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11812
11813   xfree (c->excep_string);
11814
11815   bkpt_breakpoint_ops.dtor (b);
11816 }
11817
11818 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11819    structure for all exception catchpoint kinds.  */
11820
11821 static struct bp_location *
11822 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
11823                              struct breakpoint *self)
11824 {
11825   struct ada_catchpoint_location *loc;
11826
11827   loc = XNEW (struct ada_catchpoint_location);
11828   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11829   loc->excep_cond_expr = NULL;
11830   return &loc->base;
11831 }
11832
11833 /* Implement the RE_SET method in the breakpoint_ops structure for all
11834    exception catchpoint kinds.  */
11835
11836 static void
11837 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11838 {
11839   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11840
11841   /* Call the base class's method.  This updates the catchpoint's
11842      locations.  */
11843   bkpt_breakpoint_ops.re_set (b);
11844
11845   /* Reparse the exception conditional expressions.  One for each
11846      location.  */
11847   create_excep_cond_exprs (c);
11848 }
11849
11850 /* Returns true if we should stop for this breakpoint hit.  If the
11851    user specified a specific exception, we only want to cause a stop
11852    if the program thrown that exception.  */
11853
11854 static int
11855 should_stop_exception (const struct bp_location *bl)
11856 {
11857   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11858   const struct ada_catchpoint_location *ada_loc
11859     = (const struct ada_catchpoint_location *) bl;
11860   volatile struct gdb_exception ex;
11861   int stop;
11862
11863   /* With no specific exception, should always stop.  */
11864   if (c->excep_string == NULL)
11865     return 1;
11866
11867   if (ada_loc->excep_cond_expr == NULL)
11868     {
11869       /* We will have a NULL expression if back when we were creating
11870          the expressions, this location's had failed to parse.  */
11871       return 1;
11872     }
11873
11874   stop = 1;
11875   TRY_CATCH (ex, RETURN_MASK_ALL)
11876     {
11877       struct value *mark;
11878
11879       mark = value_mark ();
11880       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11881       value_free_to_mark (mark);
11882     }
11883   if (ex.reason < 0)
11884     exception_fprintf (gdb_stderr, ex,
11885                        _("Error in testing exception condition:\n"));
11886   return stop;
11887 }
11888
11889 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
11890    for all exception catchpoint kinds.  */
11891
11892 static void
11893 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11894 {
11895   bs->stop = should_stop_exception (bs->bp_location_at);
11896 }
11897
11898 /* Implement the PRINT_IT method in the breakpoint_ops structure
11899    for all exception catchpoint kinds.  */
11900
11901 static enum print_stop_action
11902 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11903 {
11904   struct ui_out *uiout = current_uiout;
11905   struct breakpoint *b = bs->breakpoint_at;
11906
11907   annotate_catchpoint (b->number);
11908
11909   if (ui_out_is_mi_like_p (uiout))
11910     {
11911       ui_out_field_string (uiout, "reason",
11912                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11913       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11914     }
11915
11916   ui_out_text (uiout,
11917                b->disposition == disp_del ? "\nTemporary catchpoint "
11918                                           : "\nCatchpoint ");
11919   ui_out_field_int (uiout, "bkptno", b->number);
11920   ui_out_text (uiout, ", ");
11921
11922   switch (ex)
11923     {
11924       case ada_catch_exception:
11925       case ada_catch_exception_unhandled:
11926         {
11927           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11928           char exception_name[256];
11929
11930           if (addr != 0)
11931             {
11932               read_memory (addr, (gdb_byte *) exception_name,
11933                            sizeof (exception_name) - 1);
11934               exception_name [sizeof (exception_name) - 1] = '\0';
11935             }
11936           else
11937             {
11938               /* For some reason, we were unable to read the exception
11939                  name.  This could happen if the Runtime was compiled
11940                  without debugging info, for instance.  In that case,
11941                  just replace the exception name by the generic string
11942                  "exception" - it will read as "an exception" in the
11943                  notification we are about to print.  */
11944               memcpy (exception_name, "exception", sizeof ("exception"));
11945             }
11946           /* In the case of unhandled exception breakpoints, we print
11947              the exception name as "unhandled EXCEPTION_NAME", to make
11948              it clearer to the user which kind of catchpoint just got
11949              hit.  We used ui_out_text to make sure that this extra
11950              info does not pollute the exception name in the MI case.  */
11951           if (ex == ada_catch_exception_unhandled)
11952             ui_out_text (uiout, "unhandled ");
11953           ui_out_field_string (uiout, "exception-name", exception_name);
11954         }
11955         break;
11956       case ada_catch_assert:
11957         /* In this case, the name of the exception is not really
11958            important.  Just print "failed assertion" to make it clearer
11959            that his program just hit an assertion-failure catchpoint.
11960            We used ui_out_text because this info does not belong in
11961            the MI output.  */
11962         ui_out_text (uiout, "failed assertion");
11963         break;
11964     }
11965   ui_out_text (uiout, " at ");
11966   ada_find_printable_frame (get_current_frame ());
11967
11968   return PRINT_SRC_AND_LOC;
11969 }
11970
11971 /* Implement the PRINT_ONE method in the breakpoint_ops structure
11972    for all exception catchpoint kinds.  */
11973
11974 static void
11975 print_one_exception (enum ada_exception_catchpoint_kind ex,
11976                      struct breakpoint *b, struct bp_location **last_loc)
11977
11978   struct ui_out *uiout = current_uiout;
11979   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11980   struct value_print_options opts;
11981
11982   get_user_print_options (&opts);
11983   if (opts.addressprint)
11984     {
11985       annotate_field (4);
11986       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
11987     }
11988
11989   annotate_field (5);
11990   *last_loc = b->loc;
11991   switch (ex)
11992     {
11993       case ada_catch_exception:
11994         if (c->excep_string != NULL)
11995           {
11996             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11997
11998             ui_out_field_string (uiout, "what", msg);
11999             xfree (msg);
12000           }
12001         else
12002           ui_out_field_string (uiout, "what", "all Ada exceptions");
12003         
12004         break;
12005
12006       case ada_catch_exception_unhandled:
12007         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12008         break;
12009       
12010       case ada_catch_assert:
12011         ui_out_field_string (uiout, "what", "failed Ada assertions");
12012         break;
12013
12014       default:
12015         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12016         break;
12017     }
12018 }
12019
12020 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12021    for all exception catchpoint kinds.  */
12022
12023 static void
12024 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12025                          struct breakpoint *b)
12026 {
12027   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12028   struct ui_out *uiout = current_uiout;
12029
12030   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12031                                                  : _("Catchpoint "));
12032   ui_out_field_int (uiout, "bkptno", b->number);
12033   ui_out_text (uiout, ": ");
12034
12035   switch (ex)
12036     {
12037       case ada_catch_exception:
12038         if (c->excep_string != NULL)
12039           {
12040             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12041             struct cleanup *old_chain = make_cleanup (xfree, info);
12042
12043             ui_out_text (uiout, info);
12044             do_cleanups (old_chain);
12045           }
12046         else
12047           ui_out_text (uiout, _("all Ada exceptions"));
12048         break;
12049
12050       case ada_catch_exception_unhandled:
12051         ui_out_text (uiout, _("unhandled Ada exceptions"));
12052         break;
12053       
12054       case ada_catch_assert:
12055         ui_out_text (uiout, _("failed Ada assertions"));
12056         break;
12057
12058       default:
12059         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12060         break;
12061     }
12062 }
12063
12064 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12065    for all exception catchpoint kinds.  */
12066
12067 static void
12068 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12069                           struct breakpoint *b, struct ui_file *fp)
12070 {
12071   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12072
12073   switch (ex)
12074     {
12075       case ada_catch_exception:
12076         fprintf_filtered (fp, "catch exception");
12077         if (c->excep_string != NULL)
12078           fprintf_filtered (fp, " %s", c->excep_string);
12079         break;
12080
12081       case ada_catch_exception_unhandled:
12082         fprintf_filtered (fp, "catch exception unhandled");
12083         break;
12084
12085       case ada_catch_assert:
12086         fprintf_filtered (fp, "catch assert");
12087         break;
12088
12089       default:
12090         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12091     }
12092   print_recreate_thread (b, fp);
12093 }
12094
12095 /* Virtual table for "catch exception" breakpoints.  */
12096
12097 static void
12098 dtor_catch_exception (struct breakpoint *b)
12099 {
12100   dtor_exception (ada_catch_exception, b);
12101 }
12102
12103 static struct bp_location *
12104 allocate_location_catch_exception (struct breakpoint *self)
12105 {
12106   return allocate_location_exception (ada_catch_exception, self);
12107 }
12108
12109 static void
12110 re_set_catch_exception (struct breakpoint *b)
12111 {
12112   re_set_exception (ada_catch_exception, b);
12113 }
12114
12115 static void
12116 check_status_catch_exception (bpstat bs)
12117 {
12118   check_status_exception (ada_catch_exception, bs);
12119 }
12120
12121 static enum print_stop_action
12122 print_it_catch_exception (bpstat bs)
12123 {
12124   return print_it_exception (ada_catch_exception, bs);
12125 }
12126
12127 static void
12128 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12129 {
12130   print_one_exception (ada_catch_exception, b, last_loc);
12131 }
12132
12133 static void
12134 print_mention_catch_exception (struct breakpoint *b)
12135 {
12136   print_mention_exception (ada_catch_exception, b);
12137 }
12138
12139 static void
12140 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12141 {
12142   print_recreate_exception (ada_catch_exception, b, fp);
12143 }
12144
12145 static struct breakpoint_ops catch_exception_breakpoint_ops;
12146
12147 /* Virtual table for "catch exception unhandled" breakpoints.  */
12148
12149 static void
12150 dtor_catch_exception_unhandled (struct breakpoint *b)
12151 {
12152   dtor_exception (ada_catch_exception_unhandled, b);
12153 }
12154
12155 static struct bp_location *
12156 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12157 {
12158   return allocate_location_exception (ada_catch_exception_unhandled, self);
12159 }
12160
12161 static void
12162 re_set_catch_exception_unhandled (struct breakpoint *b)
12163 {
12164   re_set_exception (ada_catch_exception_unhandled, b);
12165 }
12166
12167 static void
12168 check_status_catch_exception_unhandled (bpstat bs)
12169 {
12170   check_status_exception (ada_catch_exception_unhandled, bs);
12171 }
12172
12173 static enum print_stop_action
12174 print_it_catch_exception_unhandled (bpstat bs)
12175 {
12176   return print_it_exception (ada_catch_exception_unhandled, bs);
12177 }
12178
12179 static void
12180 print_one_catch_exception_unhandled (struct breakpoint *b,
12181                                      struct bp_location **last_loc)
12182 {
12183   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12184 }
12185
12186 static void
12187 print_mention_catch_exception_unhandled (struct breakpoint *b)
12188 {
12189   print_mention_exception (ada_catch_exception_unhandled, b);
12190 }
12191
12192 static void
12193 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12194                                           struct ui_file *fp)
12195 {
12196   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12197 }
12198
12199 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12200
12201 /* Virtual table for "catch assert" breakpoints.  */
12202
12203 static void
12204 dtor_catch_assert (struct breakpoint *b)
12205 {
12206   dtor_exception (ada_catch_assert, b);
12207 }
12208
12209 static struct bp_location *
12210 allocate_location_catch_assert (struct breakpoint *self)
12211 {
12212   return allocate_location_exception (ada_catch_assert, self);
12213 }
12214
12215 static void
12216 re_set_catch_assert (struct breakpoint *b)
12217 {
12218   re_set_exception (ada_catch_assert, b);
12219 }
12220
12221 static void
12222 check_status_catch_assert (bpstat bs)
12223 {
12224   check_status_exception (ada_catch_assert, bs);
12225 }
12226
12227 static enum print_stop_action
12228 print_it_catch_assert (bpstat bs)
12229 {
12230   return print_it_exception (ada_catch_assert, bs);
12231 }
12232
12233 static void
12234 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12235 {
12236   print_one_exception (ada_catch_assert, b, last_loc);
12237 }
12238
12239 static void
12240 print_mention_catch_assert (struct breakpoint *b)
12241 {
12242   print_mention_exception (ada_catch_assert, b);
12243 }
12244
12245 static void
12246 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12247 {
12248   print_recreate_exception (ada_catch_assert, b, fp);
12249 }
12250
12251 static struct breakpoint_ops catch_assert_breakpoint_ops;
12252
12253 /* Return a newly allocated copy of the first space-separated token
12254    in ARGSP, and then adjust ARGSP to point immediately after that
12255    token.
12256
12257    Return NULL if ARGPS does not contain any more tokens.  */
12258
12259 static char *
12260 ada_get_next_arg (char **argsp)
12261 {
12262   char *args = *argsp;
12263   char *end;
12264   char *result;
12265
12266   args = skip_spaces (args);
12267   if (args[0] == '\0')
12268     return NULL; /* No more arguments.  */
12269   
12270   /* Find the end of the current argument.  */
12271
12272   end = skip_to_space (args);
12273
12274   /* Adjust ARGSP to point to the start of the next argument.  */
12275
12276   *argsp = end;
12277
12278   /* Make a copy of the current argument and return it.  */
12279
12280   result = xmalloc (end - args + 1);
12281   strncpy (result, args, end - args);
12282   result[end - args] = '\0';
12283   
12284   return result;
12285 }
12286
12287 /* Split the arguments specified in a "catch exception" command.  
12288    Set EX to the appropriate catchpoint type.
12289    Set EXCEP_STRING to the name of the specific exception if
12290    specified by the user.
12291    If a condition is found at the end of the arguments, the condition
12292    expression is stored in COND_STRING (memory must be deallocated
12293    after use).  Otherwise COND_STRING is set to NULL.  */
12294
12295 static void
12296 catch_ada_exception_command_split (char *args,
12297                                    enum ada_exception_catchpoint_kind *ex,
12298                                    char **excep_string,
12299                                    char **cond_string)
12300 {
12301   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12302   char *exception_name;
12303   char *cond = NULL;
12304
12305   exception_name = ada_get_next_arg (&args);
12306   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12307     {
12308       /* This is not an exception name; this is the start of a condition
12309          expression for a catchpoint on all exceptions.  So, "un-get"
12310          this token, and set exception_name to NULL.  */
12311       xfree (exception_name);
12312       exception_name = NULL;
12313       args -= 2;
12314     }
12315   make_cleanup (xfree, exception_name);
12316
12317   /* Check to see if we have a condition.  */
12318
12319   args = skip_spaces (args);
12320   if (strncmp (args, "if", 2) == 0
12321       && (isspace (args[2]) || args[2] == '\0'))
12322     {
12323       args += 2;
12324       args = skip_spaces (args);
12325
12326       if (args[0] == '\0')
12327         error (_("Condition missing after `if' keyword"));
12328       cond = xstrdup (args);
12329       make_cleanup (xfree, cond);
12330
12331       args += strlen (args);
12332     }
12333
12334   /* Check that we do not have any more arguments.  Anything else
12335      is unexpected.  */
12336
12337   if (args[0] != '\0')
12338     error (_("Junk at end of expression"));
12339
12340   discard_cleanups (old_chain);
12341
12342   if (exception_name == NULL)
12343     {
12344       /* Catch all exceptions.  */
12345       *ex = ada_catch_exception;
12346       *excep_string = NULL;
12347     }
12348   else if (strcmp (exception_name, "unhandled") == 0)
12349     {
12350       /* Catch unhandled exceptions.  */
12351       *ex = ada_catch_exception_unhandled;
12352       *excep_string = NULL;
12353     }
12354   else
12355     {
12356       /* Catch a specific exception.  */
12357       *ex = ada_catch_exception;
12358       *excep_string = exception_name;
12359     }
12360   *cond_string = cond;
12361 }
12362
12363 /* Return the name of the symbol on which we should break in order to
12364    implement a catchpoint of the EX kind.  */
12365
12366 static const char *
12367 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12368 {
12369   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12370
12371   gdb_assert (data->exception_info != NULL);
12372
12373   switch (ex)
12374     {
12375       case ada_catch_exception:
12376         return (data->exception_info->catch_exception_sym);
12377         break;
12378       case ada_catch_exception_unhandled:
12379         return (data->exception_info->catch_exception_unhandled_sym);
12380         break;
12381       case ada_catch_assert:
12382         return (data->exception_info->catch_assert_sym);
12383         break;
12384       default:
12385         internal_error (__FILE__, __LINE__,
12386                         _("unexpected catchpoint kind (%d)"), ex);
12387     }
12388 }
12389
12390 /* Return the breakpoint ops "virtual table" used for catchpoints
12391    of the EX kind.  */
12392
12393 static const struct breakpoint_ops *
12394 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12395 {
12396   switch (ex)
12397     {
12398       case ada_catch_exception:
12399         return (&catch_exception_breakpoint_ops);
12400         break;
12401       case ada_catch_exception_unhandled:
12402         return (&catch_exception_unhandled_breakpoint_ops);
12403         break;
12404       case ada_catch_assert:
12405         return (&catch_assert_breakpoint_ops);
12406         break;
12407       default:
12408         internal_error (__FILE__, __LINE__,
12409                         _("unexpected catchpoint kind (%d)"), ex);
12410     }
12411 }
12412
12413 /* Return the condition that will be used to match the current exception
12414    being raised with the exception that the user wants to catch.  This
12415    assumes that this condition is used when the inferior just triggered
12416    an exception catchpoint.
12417    
12418    The string returned is a newly allocated string that needs to be
12419    deallocated later.  */
12420
12421 static char *
12422 ada_exception_catchpoint_cond_string (const char *excep_string)
12423 {
12424   int i;
12425
12426   /* The standard exceptions are a special case.  They are defined in
12427      runtime units that have been compiled without debugging info; if
12428      EXCEP_STRING is the not-fully-qualified name of a standard
12429      exception (e.g. "constraint_error") then, during the evaluation
12430      of the condition expression, the symbol lookup on this name would
12431      *not* return this standard exception.  The catchpoint condition
12432      may then be set only on user-defined exceptions which have the
12433      same not-fully-qualified name (e.g. my_package.constraint_error).
12434
12435      To avoid this unexcepted behavior, these standard exceptions are
12436      systematically prefixed by "standard".  This means that "catch
12437      exception constraint_error" is rewritten into "catch exception
12438      standard.constraint_error".
12439
12440      If an exception named contraint_error is defined in another package of
12441      the inferior program, then the only way to specify this exception as a
12442      breakpoint condition is to use its fully-qualified named:
12443      e.g. my_package.constraint_error.  */
12444
12445   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12446     {
12447       if (strcmp (standard_exc [i], excep_string) == 0)
12448         {
12449           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12450                              excep_string);
12451         }
12452     }
12453   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12454 }
12455
12456 /* Return the symtab_and_line that should be used to insert an exception
12457    catchpoint of the TYPE kind.
12458
12459    EXCEP_STRING should contain the name of a specific exception that
12460    the catchpoint should catch, or NULL otherwise.
12461
12462    ADDR_STRING returns the name of the function where the real
12463    breakpoint that implements the catchpoints is set, depending on the
12464    type of catchpoint we need to create.  */
12465
12466 static struct symtab_and_line
12467 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12468                    char **addr_string, const struct breakpoint_ops **ops)
12469 {
12470   const char *sym_name;
12471   struct symbol *sym;
12472
12473   /* First, find out which exception support info to use.  */
12474   ada_exception_support_info_sniffer ();
12475
12476   /* Then lookup the function on which we will break in order to catch
12477      the Ada exceptions requested by the user.  */
12478   sym_name = ada_exception_sym_name (ex);
12479   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12480
12481   /* We can assume that SYM is not NULL at this stage.  If the symbol
12482      did not exist, ada_exception_support_info_sniffer would have
12483      raised an exception.
12484
12485      Also, ada_exception_support_info_sniffer should have already
12486      verified that SYM is a function symbol.  */
12487   gdb_assert (sym != NULL);
12488   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12489
12490   /* Set ADDR_STRING.  */
12491   *addr_string = xstrdup (sym_name);
12492
12493   /* Set OPS.  */
12494   *ops = ada_exception_breakpoint_ops (ex);
12495
12496   return find_function_start_sal (sym, 1);
12497 }
12498
12499 /* Create an Ada exception catchpoint.
12500
12501    EX_KIND is the kind of exception catchpoint to be created.
12502
12503    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12504    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12505    of the exception to which this catchpoint applies.  When not NULL,
12506    the string must be allocated on the heap, and its deallocation
12507    is no longer the responsibility of the caller.
12508
12509    COND_STRING, if not NULL, is the catchpoint condition.  This string
12510    must be allocated on the heap, and its deallocation is no longer
12511    the responsibility of the caller.
12512
12513    TEMPFLAG, if nonzero, means that the underlying breakpoint
12514    should be temporary.
12515
12516    FROM_TTY is the usual argument passed to all commands implementations.  */
12517
12518 void
12519 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12520                                  enum ada_exception_catchpoint_kind ex_kind,
12521                                  char *excep_string,
12522                                  char *cond_string,
12523                                  int tempflag,
12524                                  int disabled,
12525                                  int from_tty)
12526 {
12527   struct ada_catchpoint *c;
12528   char *addr_string = NULL;
12529   const struct breakpoint_ops *ops = NULL;
12530   struct symtab_and_line sal
12531     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12532
12533   c = XNEW (struct ada_catchpoint);
12534   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12535                                  ops, tempflag, disabled, from_tty);
12536   c->excep_string = excep_string;
12537   create_excep_cond_exprs (c);
12538   if (cond_string != NULL)
12539     set_breakpoint_condition (&c->base, cond_string, from_tty);
12540   install_breakpoint (0, &c->base, 1);
12541 }
12542
12543 /* Implement the "catch exception" command.  */
12544
12545 static void
12546 catch_ada_exception_command (char *arg, int from_tty,
12547                              struct cmd_list_element *command)
12548 {
12549   struct gdbarch *gdbarch = get_current_arch ();
12550   int tempflag;
12551   enum ada_exception_catchpoint_kind ex_kind;
12552   char *excep_string = NULL;
12553   char *cond_string = NULL;
12554
12555   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12556
12557   if (!arg)
12558     arg = "";
12559   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12560                                      &cond_string);
12561   create_ada_exception_catchpoint (gdbarch, ex_kind,
12562                                    excep_string, cond_string,
12563                                    tempflag, 1 /* enabled */,
12564                                    from_tty);
12565 }
12566
12567 /* Split the arguments specified in a "catch assert" command.
12568
12569    ARGS contains the command's arguments (or the empty string if
12570    no arguments were passed).
12571
12572    If ARGS contains a condition, set COND_STRING to that condition
12573    (the memory needs to be deallocated after use).  */
12574
12575 static void
12576 catch_ada_assert_command_split (char *args, char **cond_string)
12577 {
12578   args = skip_spaces (args);
12579
12580   /* Check whether a condition was provided.  */
12581   if (strncmp (args, "if", 2) == 0
12582       && (isspace (args[2]) || args[2] == '\0'))
12583     {
12584       args += 2;
12585       args = skip_spaces (args);
12586       if (args[0] == '\0')
12587         error (_("condition missing after `if' keyword"));
12588       *cond_string = xstrdup (args);
12589     }
12590
12591   /* Otherwise, there should be no other argument at the end of
12592      the command.  */
12593   else if (args[0] != '\0')
12594     error (_("Junk at end of arguments."));
12595 }
12596
12597 /* Implement the "catch assert" command.  */
12598
12599 static void
12600 catch_assert_command (char *arg, int from_tty,
12601                       struct cmd_list_element *command)
12602 {
12603   struct gdbarch *gdbarch = get_current_arch ();
12604   int tempflag;
12605   char *cond_string = NULL;
12606
12607   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12608
12609   if (!arg)
12610     arg = "";
12611   catch_ada_assert_command_split (arg, &cond_string);
12612   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12613                                    NULL, cond_string,
12614                                    tempflag, 1 /* enabled */,
12615                                    from_tty);
12616 }
12617
12618 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12619
12620 static int
12621 ada_is_exception_sym (struct symbol *sym)
12622 {
12623   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12624
12625   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12626           && SYMBOL_CLASS (sym) != LOC_BLOCK
12627           && SYMBOL_CLASS (sym) != LOC_CONST
12628           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12629           && type_name != NULL && strcmp (type_name, "exception") == 0);
12630 }
12631
12632 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12633    Ada exception object.  This matches all exceptions except the ones
12634    defined by the Ada language.  */
12635
12636 static int
12637 ada_is_non_standard_exception_sym (struct symbol *sym)
12638 {
12639   int i;
12640
12641   if (!ada_is_exception_sym (sym))
12642     return 0;
12643
12644   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12645     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12646       return 0;  /* A standard exception.  */
12647
12648   /* Numeric_Error is also a standard exception, so exclude it.
12649      See the STANDARD_EXC description for more details as to why
12650      this exception is not listed in that array.  */
12651   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12652     return 0;
12653
12654   return 1;
12655 }
12656
12657 /* A helper function for qsort, comparing two struct ada_exc_info
12658    objects.
12659
12660    The comparison is determined first by exception name, and then
12661    by exception address.  */
12662
12663 static int
12664 compare_ada_exception_info (const void *a, const void *b)
12665 {
12666   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12667   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12668   int result;
12669
12670   result = strcmp (exc_a->name, exc_b->name);
12671   if (result != 0)
12672     return result;
12673
12674   if (exc_a->addr < exc_b->addr)
12675     return -1;
12676   if (exc_a->addr > exc_b->addr)
12677     return 1;
12678
12679   return 0;
12680 }
12681
12682 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12683    routine, but keeping the first SKIP elements untouched.
12684
12685    All duplicates are also removed.  */
12686
12687 static void
12688 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12689                                       int skip)
12690 {
12691   struct ada_exc_info *to_sort
12692     = VEC_address (ada_exc_info, *exceptions) + skip;
12693   int to_sort_len
12694     = VEC_length (ada_exc_info, *exceptions) - skip;
12695   int i, j;
12696
12697   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12698          compare_ada_exception_info);
12699
12700   for (i = 1, j = 1; i < to_sort_len; i++)
12701     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12702       to_sort[j++] = to_sort[i];
12703   to_sort_len = j;
12704   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12705 }
12706
12707 /* A function intended as the "name_matcher" callback in the struct
12708    quick_symbol_functions' expand_symtabs_matching method.
12709
12710    SEARCH_NAME is the symbol's search name.
12711
12712    If USER_DATA is not NULL, it is a pointer to a regext_t object
12713    used to match the symbol (by natural name).  Otherwise, when USER_DATA
12714    is null, no filtering is performed, and all symbols are a positive
12715    match.  */
12716
12717 static int
12718 ada_exc_search_name_matches (const char *search_name, void *user_data)
12719 {
12720   regex_t *preg = user_data;
12721
12722   if (preg == NULL)
12723     return 1;
12724
12725   /* In Ada, the symbol "search name" is a linkage name, whereas
12726      the regular expression used to do the matching refers to
12727      the natural name.  So match against the decoded name.  */
12728   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12729 }
12730
12731 /* Add all exceptions defined by the Ada standard whose name match
12732    a regular expression.
12733
12734    If PREG is not NULL, then this regexp_t object is used to
12735    perform the symbol name matching.  Otherwise, no name-based
12736    filtering is performed.
12737
12738    EXCEPTIONS is a vector of exceptions to which matching exceptions
12739    gets pushed.  */
12740
12741 static void
12742 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12743 {
12744   int i;
12745
12746   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12747     {
12748       if (preg == NULL
12749           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12750         {
12751           struct bound_minimal_symbol msymbol
12752             = ada_lookup_simple_minsym (standard_exc[i]);
12753
12754           if (msymbol.minsym != NULL)
12755             {
12756               struct ada_exc_info info
12757                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12758
12759               VEC_safe_push (ada_exc_info, *exceptions, &info);
12760             }
12761         }
12762     }
12763 }
12764
12765 /* Add all Ada exceptions defined locally and accessible from the given
12766    FRAME.
12767
12768    If PREG is not NULL, then this regexp_t object is used to
12769    perform the symbol name matching.  Otherwise, no name-based
12770    filtering is performed.
12771
12772    EXCEPTIONS is a vector of exceptions to which matching exceptions
12773    gets pushed.  */
12774
12775 static void
12776 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12777                                VEC(ada_exc_info) **exceptions)
12778 {
12779   const struct block *block = get_frame_block (frame, 0);
12780
12781   while (block != 0)
12782     {
12783       struct block_iterator iter;
12784       struct symbol *sym;
12785
12786       ALL_BLOCK_SYMBOLS (block, iter, sym)
12787         {
12788           switch (SYMBOL_CLASS (sym))
12789             {
12790             case LOC_TYPEDEF:
12791             case LOC_BLOCK:
12792             case LOC_CONST:
12793               break;
12794             default:
12795               if (ada_is_exception_sym (sym))
12796                 {
12797                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12798                                               SYMBOL_VALUE_ADDRESS (sym)};
12799
12800                   VEC_safe_push (ada_exc_info, *exceptions, &info);
12801                 }
12802             }
12803         }
12804       if (BLOCK_FUNCTION (block) != NULL)
12805         break;
12806       block = BLOCK_SUPERBLOCK (block);
12807     }
12808 }
12809
12810 /* Add all exceptions defined globally whose name name match
12811    a regular expression, excluding standard exceptions.
12812
12813    The reason we exclude standard exceptions is that they need
12814    to be handled separately: Standard exceptions are defined inside
12815    a runtime unit which is normally not compiled with debugging info,
12816    and thus usually do not show up in our symbol search.  However,
12817    if the unit was in fact built with debugging info, we need to
12818    exclude them because they would duplicate the entry we found
12819    during the special loop that specifically searches for those
12820    standard exceptions.
12821
12822    If PREG is not NULL, then this regexp_t object is used to
12823    perform the symbol name matching.  Otherwise, no name-based
12824    filtering is performed.
12825
12826    EXCEPTIONS is a vector of exceptions to which matching exceptions
12827    gets pushed.  */
12828
12829 static void
12830 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12831 {
12832   struct objfile *objfile;
12833   struct symtab *s;
12834
12835   expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12836                            VARIABLES_DOMAIN, preg);
12837
12838   ALL_PRIMARY_SYMTABS (objfile, s)
12839     {
12840       const struct blockvector *bv = BLOCKVECTOR (s);
12841       int i;
12842
12843       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12844         {
12845           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12846           struct block_iterator iter;
12847           struct symbol *sym;
12848
12849           ALL_BLOCK_SYMBOLS (b, iter, sym)
12850             if (ada_is_non_standard_exception_sym (sym)
12851                 && (preg == NULL
12852                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12853                                 0, NULL, 0) == 0))
12854               {
12855                 struct ada_exc_info info
12856                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12857
12858                 VEC_safe_push (ada_exc_info, *exceptions, &info);
12859               }
12860         }
12861     }
12862 }
12863
12864 /* Implements ada_exceptions_list with the regular expression passed
12865    as a regex_t, rather than a string.
12866
12867    If not NULL, PREG is used to filter out exceptions whose names
12868    do not match.  Otherwise, all exceptions are listed.  */
12869
12870 static VEC(ada_exc_info) *
12871 ada_exceptions_list_1 (regex_t *preg)
12872 {
12873   VEC(ada_exc_info) *result = NULL;
12874   struct cleanup *old_chain
12875     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12876   int prev_len;
12877
12878   /* First, list the known standard exceptions.  These exceptions
12879      need to be handled separately, as they are usually defined in
12880      runtime units that have been compiled without debugging info.  */
12881
12882   ada_add_standard_exceptions (preg, &result);
12883
12884   /* Next, find all exceptions whose scope is local and accessible
12885      from the currently selected frame.  */
12886
12887   if (has_stack_frames ())
12888     {
12889       prev_len = VEC_length (ada_exc_info, result);
12890       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12891                                      &result);
12892       if (VEC_length (ada_exc_info, result) > prev_len)
12893         sort_remove_dups_ada_exceptions_list (&result, prev_len);
12894     }
12895
12896   /* Add all exceptions whose scope is global.  */
12897
12898   prev_len = VEC_length (ada_exc_info, result);
12899   ada_add_global_exceptions (preg, &result);
12900   if (VEC_length (ada_exc_info, result) > prev_len)
12901     sort_remove_dups_ada_exceptions_list (&result, prev_len);
12902
12903   discard_cleanups (old_chain);
12904   return result;
12905 }
12906
12907 /* Return a vector of ada_exc_info.
12908
12909    If REGEXP is NULL, all exceptions are included in the result.
12910    Otherwise, it should contain a valid regular expression,
12911    and only the exceptions whose names match that regular expression
12912    are included in the result.
12913
12914    The exceptions are sorted in the following order:
12915      - Standard exceptions (defined by the Ada language), in
12916        alphabetical order;
12917      - Exceptions only visible from the current frame, in
12918        alphabetical order;
12919      - Exceptions whose scope is global, in alphabetical order.  */
12920
12921 VEC(ada_exc_info) *
12922 ada_exceptions_list (const char *regexp)
12923 {
12924   VEC(ada_exc_info) *result = NULL;
12925   struct cleanup *old_chain = NULL;
12926   regex_t reg;
12927
12928   if (regexp != NULL)
12929     old_chain = compile_rx_or_error (&reg, regexp,
12930                                      _("invalid regular expression"));
12931
12932   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12933
12934   if (old_chain != NULL)
12935     do_cleanups (old_chain);
12936   return result;
12937 }
12938
12939 /* Implement the "info exceptions" command.  */
12940
12941 static void
12942 info_exceptions_command (char *regexp, int from_tty)
12943 {
12944   VEC(ada_exc_info) *exceptions;
12945   struct cleanup *cleanup;
12946   struct gdbarch *gdbarch = get_current_arch ();
12947   int ix;
12948   struct ada_exc_info *info;
12949
12950   exceptions = ada_exceptions_list (regexp);
12951   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12952
12953   if (regexp != NULL)
12954     printf_filtered
12955       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12956   else
12957     printf_filtered (_("All defined Ada exceptions:\n"));
12958
12959   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12960     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12961
12962   do_cleanups (cleanup);
12963 }
12964
12965                                 /* Operators */
12966 /* Information about operators given special treatment in functions
12967    below.  */
12968 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
12969
12970 #define ADA_OPERATORS \
12971     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12972     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12973     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12974     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12975     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12976     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12977     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12978     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12979     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12980     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12981     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12982     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12983     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
12984     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
12985     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
12986     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
12987     OP_DEFN (OP_OTHERS, 1, 1, 0) \
12988     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
12989     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
12990
12991 static void
12992 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
12993                      int *argsp)
12994 {
12995   switch (exp->elts[pc - 1].opcode)
12996     {
12997     default:
12998       operator_length_standard (exp, pc, oplenp, argsp);
12999       break;
13000
13001 #define OP_DEFN(op, len, args, binop) \
13002     case op: *oplenp = len; *argsp = args; break;
13003       ADA_OPERATORS;
13004 #undef OP_DEFN
13005
13006     case OP_AGGREGATE:
13007       *oplenp = 3;
13008       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13009       break;
13010
13011     case OP_CHOICES:
13012       *oplenp = 3;
13013       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13014       break;
13015     }
13016 }
13017
13018 /* Implementation of the exp_descriptor method operator_check.  */
13019
13020 static int
13021 ada_operator_check (struct expression *exp, int pos,
13022                     int (*objfile_func) (struct objfile *objfile, void *data),
13023                     void *data)
13024 {
13025   const union exp_element *const elts = exp->elts;
13026   struct type *type = NULL;
13027
13028   switch (elts[pos].opcode)
13029     {
13030       case UNOP_IN_RANGE:
13031       case UNOP_QUAL:
13032         type = elts[pos + 1].type;
13033         break;
13034
13035       default:
13036         return operator_check_standard (exp, pos, objfile_func, data);
13037     }
13038
13039   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13040
13041   if (type && TYPE_OBJFILE (type)
13042       && (*objfile_func) (TYPE_OBJFILE (type), data))
13043     return 1;
13044
13045   return 0;
13046 }
13047
13048 static char *
13049 ada_op_name (enum exp_opcode opcode)
13050 {
13051   switch (opcode)
13052     {
13053     default:
13054       return op_name_standard (opcode);
13055
13056 #define OP_DEFN(op, len, args, binop) case op: return #op;
13057       ADA_OPERATORS;
13058 #undef OP_DEFN
13059
13060     case OP_AGGREGATE:
13061       return "OP_AGGREGATE";
13062     case OP_CHOICES:
13063       return "OP_CHOICES";
13064     case OP_NAME:
13065       return "OP_NAME";
13066     }
13067 }
13068
13069 /* As for operator_length, but assumes PC is pointing at the first
13070    element of the operator, and gives meaningful results only for the 
13071    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13072
13073 static void
13074 ada_forward_operator_length (struct expression *exp, int pc,
13075                              int *oplenp, int *argsp)
13076 {
13077   switch (exp->elts[pc].opcode)
13078     {
13079     default:
13080       *oplenp = *argsp = 0;
13081       break;
13082
13083 #define OP_DEFN(op, len, args, binop) \
13084     case op: *oplenp = len; *argsp = args; break;
13085       ADA_OPERATORS;
13086 #undef OP_DEFN
13087
13088     case OP_AGGREGATE:
13089       *oplenp = 3;
13090       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13091       break;
13092
13093     case OP_CHOICES:
13094       *oplenp = 3;
13095       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13096       break;
13097
13098     case OP_STRING:
13099     case OP_NAME:
13100       {
13101         int len = longest_to_int (exp->elts[pc + 1].longconst);
13102
13103         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13104         *argsp = 0;
13105         break;
13106       }
13107     }
13108 }
13109
13110 static int
13111 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13112 {
13113   enum exp_opcode op = exp->elts[elt].opcode;
13114   int oplen, nargs;
13115   int pc = elt;
13116   int i;
13117
13118   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13119
13120   switch (op)
13121     {
13122       /* Ada attributes ('Foo).  */
13123     case OP_ATR_FIRST:
13124     case OP_ATR_LAST:
13125     case OP_ATR_LENGTH:
13126     case OP_ATR_IMAGE:
13127     case OP_ATR_MAX:
13128     case OP_ATR_MIN:
13129     case OP_ATR_MODULUS:
13130     case OP_ATR_POS:
13131     case OP_ATR_SIZE:
13132     case OP_ATR_TAG:
13133     case OP_ATR_VAL:
13134       break;
13135
13136     case UNOP_IN_RANGE:
13137     case UNOP_QUAL:
13138       /* XXX: gdb_sprint_host_address, type_sprint */
13139       fprintf_filtered (stream, _("Type @"));
13140       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13141       fprintf_filtered (stream, " (");
13142       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13143       fprintf_filtered (stream, ")");
13144       break;
13145     case BINOP_IN_BOUNDS:
13146       fprintf_filtered (stream, " (%d)",
13147                         longest_to_int (exp->elts[pc + 2].longconst));
13148       break;
13149     case TERNOP_IN_RANGE:
13150       break;
13151
13152     case OP_AGGREGATE:
13153     case OP_OTHERS:
13154     case OP_DISCRETE_RANGE:
13155     case OP_POSITIONAL:
13156     case OP_CHOICES:
13157       break;
13158
13159     case OP_NAME:
13160     case OP_STRING:
13161       {
13162         char *name = &exp->elts[elt + 2].string;
13163         int len = longest_to_int (exp->elts[elt + 1].longconst);
13164
13165         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13166         break;
13167       }
13168
13169     default:
13170       return dump_subexp_body_standard (exp, stream, elt);
13171     }
13172
13173   elt += oplen;
13174   for (i = 0; i < nargs; i += 1)
13175     elt = dump_subexp (exp, stream, elt);
13176
13177   return elt;
13178 }
13179
13180 /* The Ada extension of print_subexp (q.v.).  */
13181
13182 static void
13183 ada_print_subexp (struct expression *exp, int *pos,
13184                   struct ui_file *stream, enum precedence prec)
13185 {
13186   int oplen, nargs, i;
13187   int pc = *pos;
13188   enum exp_opcode op = exp->elts[pc].opcode;
13189
13190   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13191
13192   *pos += oplen;
13193   switch (op)
13194     {
13195     default:
13196       *pos -= oplen;
13197       print_subexp_standard (exp, pos, stream, prec);
13198       return;
13199
13200     case OP_VAR_VALUE:
13201       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13202       return;
13203
13204     case BINOP_IN_BOUNDS:
13205       /* XXX: sprint_subexp */
13206       print_subexp (exp, pos, stream, PREC_SUFFIX);
13207       fputs_filtered (" in ", stream);
13208       print_subexp (exp, pos, stream, PREC_SUFFIX);
13209       fputs_filtered ("'range", stream);
13210       if (exp->elts[pc + 1].longconst > 1)
13211         fprintf_filtered (stream, "(%ld)",
13212                           (long) exp->elts[pc + 1].longconst);
13213       return;
13214
13215     case TERNOP_IN_RANGE:
13216       if (prec >= PREC_EQUAL)
13217         fputs_filtered ("(", stream);
13218       /* XXX: sprint_subexp */
13219       print_subexp (exp, pos, stream, PREC_SUFFIX);
13220       fputs_filtered (" in ", stream);
13221       print_subexp (exp, pos, stream, PREC_EQUAL);
13222       fputs_filtered (" .. ", stream);
13223       print_subexp (exp, pos, stream, PREC_EQUAL);
13224       if (prec >= PREC_EQUAL)
13225         fputs_filtered (")", stream);
13226       return;
13227
13228     case OP_ATR_FIRST:
13229     case OP_ATR_LAST:
13230     case OP_ATR_LENGTH:
13231     case OP_ATR_IMAGE:
13232     case OP_ATR_MAX:
13233     case OP_ATR_MIN:
13234     case OP_ATR_MODULUS:
13235     case OP_ATR_POS:
13236     case OP_ATR_SIZE:
13237     case OP_ATR_TAG:
13238     case OP_ATR_VAL:
13239       if (exp->elts[*pos].opcode == OP_TYPE)
13240         {
13241           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13242             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13243                            &type_print_raw_options);
13244           *pos += 3;
13245         }
13246       else
13247         print_subexp (exp, pos, stream, PREC_SUFFIX);
13248       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13249       if (nargs > 1)
13250         {
13251           int tem;
13252
13253           for (tem = 1; tem < nargs; tem += 1)
13254             {
13255               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13256               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13257             }
13258           fputs_filtered (")", stream);
13259         }
13260       return;
13261
13262     case UNOP_QUAL:
13263       type_print (exp->elts[pc + 1].type, "", stream, 0);
13264       fputs_filtered ("'(", stream);
13265       print_subexp (exp, pos, stream, PREC_PREFIX);
13266       fputs_filtered (")", stream);
13267       return;
13268
13269     case UNOP_IN_RANGE:
13270       /* XXX: sprint_subexp */
13271       print_subexp (exp, pos, stream, PREC_SUFFIX);
13272       fputs_filtered (" in ", stream);
13273       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13274                      &type_print_raw_options);
13275       return;
13276
13277     case OP_DISCRETE_RANGE:
13278       print_subexp (exp, pos, stream, PREC_SUFFIX);
13279       fputs_filtered ("..", stream);
13280       print_subexp (exp, pos, stream, PREC_SUFFIX);
13281       return;
13282
13283     case OP_OTHERS:
13284       fputs_filtered ("others => ", stream);
13285       print_subexp (exp, pos, stream, PREC_SUFFIX);
13286       return;
13287
13288     case OP_CHOICES:
13289       for (i = 0; i < nargs-1; i += 1)
13290         {
13291           if (i > 0)
13292             fputs_filtered ("|", stream);
13293           print_subexp (exp, pos, stream, PREC_SUFFIX);
13294         }
13295       fputs_filtered (" => ", stream);
13296       print_subexp (exp, pos, stream, PREC_SUFFIX);
13297       return;
13298       
13299     case OP_POSITIONAL:
13300       print_subexp (exp, pos, stream, PREC_SUFFIX);
13301       return;
13302
13303     case OP_AGGREGATE:
13304       fputs_filtered ("(", stream);
13305       for (i = 0; i < nargs; i += 1)
13306         {
13307           if (i > 0)
13308             fputs_filtered (", ", stream);
13309           print_subexp (exp, pos, stream, PREC_SUFFIX);
13310         }
13311       fputs_filtered (")", stream);
13312       return;
13313     }
13314 }
13315
13316 /* Table mapping opcodes into strings for printing operators
13317    and precedences of the operators.  */
13318
13319 static const struct op_print ada_op_print_tab[] = {
13320   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13321   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13322   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13323   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13324   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13325   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13326   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13327   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13328   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13329   {">=", BINOP_GEQ, PREC_ORDER, 0},
13330   {">", BINOP_GTR, PREC_ORDER, 0},
13331   {"<", BINOP_LESS, PREC_ORDER, 0},
13332   {">>", BINOP_RSH, PREC_SHIFT, 0},
13333   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13334   {"+", BINOP_ADD, PREC_ADD, 0},
13335   {"-", BINOP_SUB, PREC_ADD, 0},
13336   {"&", BINOP_CONCAT, PREC_ADD, 0},
13337   {"*", BINOP_MUL, PREC_MUL, 0},
13338   {"/", BINOP_DIV, PREC_MUL, 0},
13339   {"rem", BINOP_REM, PREC_MUL, 0},
13340   {"mod", BINOP_MOD, PREC_MUL, 0},
13341   {"**", BINOP_EXP, PREC_REPEAT, 0},
13342   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13343   {"-", UNOP_NEG, PREC_PREFIX, 0},
13344   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13345   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13346   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13347   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13348   {".all", UNOP_IND, PREC_SUFFIX, 1},
13349   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13350   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13351   {NULL, 0, 0, 0}
13352 };
13353 \f
13354 enum ada_primitive_types {
13355   ada_primitive_type_int,
13356   ada_primitive_type_long,
13357   ada_primitive_type_short,
13358   ada_primitive_type_char,
13359   ada_primitive_type_float,
13360   ada_primitive_type_double,
13361   ada_primitive_type_void,
13362   ada_primitive_type_long_long,
13363   ada_primitive_type_long_double,
13364   ada_primitive_type_natural,
13365   ada_primitive_type_positive,
13366   ada_primitive_type_system_address,
13367   nr_ada_primitive_types
13368 };
13369
13370 static void
13371 ada_language_arch_info (struct gdbarch *gdbarch,
13372                         struct language_arch_info *lai)
13373 {
13374   const struct builtin_type *builtin = builtin_type (gdbarch);
13375
13376   lai->primitive_type_vector
13377     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13378                               struct type *);
13379
13380   lai->primitive_type_vector [ada_primitive_type_int]
13381     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13382                          0, "integer");
13383   lai->primitive_type_vector [ada_primitive_type_long]
13384     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13385                          0, "long_integer");
13386   lai->primitive_type_vector [ada_primitive_type_short]
13387     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13388                          0, "short_integer");
13389   lai->string_char_type
13390     = lai->primitive_type_vector [ada_primitive_type_char]
13391     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13392   lai->primitive_type_vector [ada_primitive_type_float]
13393     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13394                        "float", NULL);
13395   lai->primitive_type_vector [ada_primitive_type_double]
13396     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13397                        "long_float", NULL);
13398   lai->primitive_type_vector [ada_primitive_type_long_long]
13399     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13400                          0, "long_long_integer");
13401   lai->primitive_type_vector [ada_primitive_type_long_double]
13402     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13403                        "long_long_float", NULL);
13404   lai->primitive_type_vector [ada_primitive_type_natural]
13405     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13406                          0, "natural");
13407   lai->primitive_type_vector [ada_primitive_type_positive]
13408     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13409                          0, "positive");
13410   lai->primitive_type_vector [ada_primitive_type_void]
13411     = builtin->builtin_void;
13412
13413   lai->primitive_type_vector [ada_primitive_type_system_address]
13414     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13415   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13416     = "system__address";
13417
13418   lai->bool_type_symbol = NULL;
13419   lai->bool_type_default = builtin->builtin_bool;
13420 }
13421 \f
13422                                 /* Language vector */
13423
13424 /* Not really used, but needed in the ada_language_defn.  */
13425
13426 static void
13427 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13428 {
13429   ada_emit_char (c, type, stream, quoter, 1);
13430 }
13431
13432 static int
13433 parse (struct parser_state *ps)
13434 {
13435   warnings_issued = 0;
13436   return ada_parse (ps);
13437 }
13438
13439 static const struct exp_descriptor ada_exp_descriptor = {
13440   ada_print_subexp,
13441   ada_operator_length,
13442   ada_operator_check,
13443   ada_op_name,
13444   ada_dump_subexp_body,
13445   ada_evaluate_subexp
13446 };
13447
13448 /* Implement the "la_get_symbol_name_cmp" language_defn method
13449    for Ada.  */
13450
13451 static symbol_name_cmp_ftype
13452 ada_get_symbol_name_cmp (const char *lookup_name)
13453 {
13454   if (should_use_wild_match (lookup_name))
13455     return wild_match;
13456   else
13457     return compare_names;
13458 }
13459
13460 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13461
13462 static struct value *
13463 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13464 {
13465   const struct block *frame_block = NULL;
13466   struct symbol *renaming_sym = NULL;
13467
13468   /* The only case where default_read_var_value is not sufficient
13469      is when VAR is a renaming...  */
13470   if (frame)
13471     frame_block = get_frame_block (frame, NULL);
13472   if (frame_block)
13473     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13474   if (renaming_sym != NULL)
13475     return ada_read_renaming_var_value (renaming_sym, frame_block);
13476
13477   /* This is a typical case where we expect the default_read_var_value
13478      function to work.  */
13479   return default_read_var_value (var, frame);
13480 }
13481
13482 const struct language_defn ada_language_defn = {
13483   "ada",                        /* Language name */
13484   "Ada",
13485   language_ada,
13486   range_check_off,
13487   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13488                                    that's not quite what this means.  */
13489   array_row_major,
13490   macro_expansion_no,
13491   &ada_exp_descriptor,
13492   parse,
13493   ada_error,
13494   resolve,
13495   ada_printchar,                /* Print a character constant */
13496   ada_printstr,                 /* Function to print string constant */
13497   emit_char,                    /* Function to print single char (not used) */
13498   ada_print_type,               /* Print a type using appropriate syntax */
13499   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13500   ada_val_print,                /* Print a value using appropriate syntax */
13501   ada_value_print,              /* Print a top-level value */
13502   ada_read_var_value,           /* la_read_var_value */
13503   NULL,                         /* Language specific skip_trampoline */
13504   NULL,                         /* name_of_this */
13505   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13506   basic_lookup_transparent_type,        /* lookup_transparent_type */
13507   ada_la_decode,                /* Language specific symbol demangler */
13508   NULL,                         /* Language specific
13509                                    class_name_from_physname */
13510   ada_op_print_tab,             /* expression operators for printing */
13511   0,                            /* c-style arrays */
13512   1,                            /* String lower bound */
13513   ada_get_gdb_completer_word_break_characters,
13514   ada_make_symbol_completion_list,
13515   ada_language_arch_info,
13516   ada_print_array_index,
13517   default_pass_by_reference,
13518   c_get_string,
13519   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
13520   ada_iterate_over_symbols,
13521   &ada_varobj_ops,
13522   LANG_MAGIC
13523 };
13524
13525 /* Provide a prototype to silence -Wmissing-prototypes.  */
13526 extern initialize_file_ftype _initialize_ada_language;
13527
13528 /* Command-list for the "set/show ada" prefix command.  */
13529 static struct cmd_list_element *set_ada_list;
13530 static struct cmd_list_element *show_ada_list;
13531
13532 /* Implement the "set ada" prefix command.  */
13533
13534 static void
13535 set_ada_command (char *arg, int from_tty)
13536 {
13537   printf_unfiltered (_(\
13538 "\"set ada\" must be followed by the name of a setting.\n"));
13539   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
13540 }
13541
13542 /* Implement the "show ada" prefix command.  */
13543
13544 static void
13545 show_ada_command (char *args, int from_tty)
13546 {
13547   cmd_show_list (show_ada_list, from_tty, "");
13548 }
13549
13550 static void
13551 initialize_ada_catchpoint_ops (void)
13552 {
13553   struct breakpoint_ops *ops;
13554
13555   initialize_breakpoint_ops ();
13556
13557   ops = &catch_exception_breakpoint_ops;
13558   *ops = bkpt_breakpoint_ops;
13559   ops->dtor = dtor_catch_exception;
13560   ops->allocate_location = allocate_location_catch_exception;
13561   ops->re_set = re_set_catch_exception;
13562   ops->check_status = check_status_catch_exception;
13563   ops->print_it = print_it_catch_exception;
13564   ops->print_one = print_one_catch_exception;
13565   ops->print_mention = print_mention_catch_exception;
13566   ops->print_recreate = print_recreate_catch_exception;
13567
13568   ops = &catch_exception_unhandled_breakpoint_ops;
13569   *ops = bkpt_breakpoint_ops;
13570   ops->dtor = dtor_catch_exception_unhandled;
13571   ops->allocate_location = allocate_location_catch_exception_unhandled;
13572   ops->re_set = re_set_catch_exception_unhandled;
13573   ops->check_status = check_status_catch_exception_unhandled;
13574   ops->print_it = print_it_catch_exception_unhandled;
13575   ops->print_one = print_one_catch_exception_unhandled;
13576   ops->print_mention = print_mention_catch_exception_unhandled;
13577   ops->print_recreate = print_recreate_catch_exception_unhandled;
13578
13579   ops = &catch_assert_breakpoint_ops;
13580   *ops = bkpt_breakpoint_ops;
13581   ops->dtor = dtor_catch_assert;
13582   ops->allocate_location = allocate_location_catch_assert;
13583   ops->re_set = re_set_catch_assert;
13584   ops->check_status = check_status_catch_assert;
13585   ops->print_it = print_it_catch_assert;
13586   ops->print_one = print_one_catch_assert;
13587   ops->print_mention = print_mention_catch_assert;
13588   ops->print_recreate = print_recreate_catch_assert;
13589 }
13590
13591 /* This module's 'new_objfile' observer.  */
13592
13593 static void
13594 ada_new_objfile_observer (struct objfile *objfile)
13595 {
13596   ada_clear_symbol_cache ();
13597 }
13598
13599 /* This module's 'free_objfile' observer.  */
13600
13601 static void
13602 ada_free_objfile_observer (struct objfile *objfile)
13603 {
13604   ada_clear_symbol_cache ();
13605 }
13606
13607 void
13608 _initialize_ada_language (void)
13609 {
13610   add_language (&ada_language_defn);
13611
13612   initialize_ada_catchpoint_ops ();
13613
13614   add_prefix_cmd ("ada", no_class, set_ada_command,
13615                   _("Prefix command for changing Ada-specfic settings"),
13616                   &set_ada_list, "set ada ", 0, &setlist);
13617
13618   add_prefix_cmd ("ada", no_class, show_ada_command,
13619                   _("Generic command for showing Ada-specific settings."),
13620                   &show_ada_list, "show ada ", 0, &showlist);
13621
13622   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13623                            &trust_pad_over_xvs, _("\
13624 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13625 Show whether an optimization trusting PAD types over XVS types is activated"),
13626                            _("\
13627 This is related to the encoding used by the GNAT compiler.  The debugger\n\
13628 should normally trust the contents of PAD types, but certain older versions\n\
13629 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13630 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
13631 work around this bug.  It is always safe to turn this option \"off\", but\n\
13632 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13633 this option to \"off\" unless necessary."),
13634                             NULL, NULL, &set_ada_list, &show_ada_list);
13635
13636   add_catch_command ("exception", _("\
13637 Catch Ada exceptions, when raised.\n\
13638 With an argument, catch only exceptions with the given name."),
13639                      catch_ada_exception_command,
13640                      NULL,
13641                      CATCH_PERMANENT,
13642                      CATCH_TEMPORARY);
13643   add_catch_command ("assert", _("\
13644 Catch failed Ada assertions, when raised.\n\
13645 With an argument, catch only exceptions with the given name."),
13646                      catch_assert_command,
13647                      NULL,
13648                      CATCH_PERMANENT,
13649                      CATCH_TEMPORARY);
13650
13651   varsize_limit = 65536;
13652
13653   add_info ("exceptions", info_exceptions_command,
13654             _("\
13655 List all Ada exception names.\n\
13656 If a regular expression is passed as an argument, only those matching\n\
13657 the regular expression are listed."));
13658
13659   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13660                   _("Set Ada maintenance-related variables."),
13661                   &maint_set_ada_cmdlist, "maintenance set ada ",
13662                   0/*allow-unknown*/, &maintenance_set_cmdlist);
13663
13664   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13665                   _("Show Ada maintenance-related variables"),
13666                   &maint_show_ada_cmdlist, "maintenance show ada ",
13667                   0/*allow-unknown*/, &maintenance_show_cmdlist);
13668
13669   add_setshow_boolean_cmd
13670     ("ignore-descriptive-types", class_maintenance,
13671      &ada_ignore_descriptive_types_p,
13672      _("Set whether descriptive types generated by GNAT should be ignored."),
13673      _("Show whether descriptive types generated by GNAT should be ignored."),
13674      _("\
13675 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13676 DWARF attribute."),
13677      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13678
13679   obstack_init (&symbol_list_obstack);
13680
13681   decoded_names_store = htab_create_alloc
13682     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13683      NULL, xcalloc, xfree);
13684
13685   /* The ada-lang observers.  */
13686   observer_attach_new_objfile (ada_new_objfile_observer);
13687   observer_attach_free_objfile (ada_free_objfile_observer);
13688   observer_attach_inferior_exit (ada_inferior_exit);
13689
13690   /* Setup various context-specific data.  */
13691   ada_inferior_data
13692     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13693   ada_pspace_data_handle
13694     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
13695 }