wrong dimension found in ada-lang.c:ada_array_bound_from_type
[external/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3    Copyright (C) 1992-2013 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 <stdio.h>
23 #include <string.h>
24 #include <ctype.h>
25 #include <stdarg.h>
26 #include "demangle.h"
27 #include "gdb_regex.h"
28 #include "frame.h"
29 #include "symtab.h"
30 #include "gdbtypes.h"
31 #include "gdbcmd.h"
32 #include "expression.h"
33 #include "parser-defs.h"
34 #include "language.h"
35 #include "varobj.h"
36 #include "c-lang.h"
37 #include "inferior.h"
38 #include "symfile.h"
39 #include "objfiles.h"
40 #include "breakpoint.h"
41 #include "gdbcore.h"
42 #include "hashtab.h"
43 #include "gdb_obstack.h"
44 #include "ada-lang.h"
45 #include "completer.h"
46 #include <sys/stat.h>
47 #ifdef UI_OUT
48 #include "ui-out.h"
49 #endif
50 #include "block.h"
51 #include "infcall.h"
52 #include "dictionary.h"
53 #include "exceptions.h"
54 #include "annotate.h"
55 #include "valprint.h"
56 #include "source.h"
57 #include "observer.h"
58 #include "vec.h"
59 #include "stack.h"
60 #include "gdb_vecs.h"
61 #include "typeprint.h"
62
63 #include "psymtab.h"
64 #include "value.h"
65 #include "mi/mi-common.h"
66 #include "arch-utils.h"
67 #include "exceptions.h"
68 #include "cli/cli-utils.h"
69
70 /* Define whether or not the C operator '/' truncates towards zero for
71    differently signed operands (truncation direction is undefined in C).
72    Copied from valarith.c.  */
73
74 #ifndef TRUNCATION_TOWARDS_ZERO
75 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
76 #endif
77
78 static struct type *desc_base_type (struct type *);
79
80 static struct type *desc_bounds_type (struct type *);
81
82 static struct value *desc_bounds (struct value *);
83
84 static int fat_pntr_bounds_bitpos (struct type *);
85
86 static int fat_pntr_bounds_bitsize (struct type *);
87
88 static struct type *desc_data_target_type (struct type *);
89
90 static struct value *desc_data (struct value *);
91
92 static int fat_pntr_data_bitpos (struct type *);
93
94 static int fat_pntr_data_bitsize (struct type *);
95
96 static struct value *desc_one_bound (struct value *, int, int);
97
98 static int desc_bound_bitpos (struct type *, int, int);
99
100 static int desc_bound_bitsize (struct type *, int, int);
101
102 static struct type *desc_index_type (struct type *, int);
103
104 static int desc_arity (struct type *);
105
106 static int ada_type_match (struct type *, struct type *, int);
107
108 static int ada_args_match (struct symbol *, struct value **, int);
109
110 static int full_match (const char *, const char *);
111
112 static struct value *make_array_descriptor (struct type *, struct value *);
113
114 static void ada_add_block_symbols (struct obstack *,
115                                    struct block *, const char *,
116                                    domain_enum, struct objfile *, int);
117
118 static int is_nonfunction (struct ada_symbol_info *, int);
119
120 static void add_defn_to_vec (struct obstack *, struct symbol *,
121                              struct block *);
122
123 static int num_defns_collected (struct obstack *);
124
125 static struct ada_symbol_info *defns_collected (struct obstack *, int);
126
127 static struct value *resolve_subexp (struct expression **, int *, int,
128                                      struct type *);
129
130 static void replace_operator_with_call (struct expression **, int, int, int,
131                                         struct symbol *, const struct block *);
132
133 static int possible_user_operator_p (enum exp_opcode, struct value **);
134
135 static char *ada_op_name (enum exp_opcode);
136
137 static const char *ada_decoded_op_name (enum exp_opcode);
138
139 static int numeric_type_p (struct type *);
140
141 static int integer_type_p (struct type *);
142
143 static int scalar_type_p (struct type *);
144
145 static int discrete_type_p (struct type *);
146
147 static enum ada_renaming_category parse_old_style_renaming (struct type *,
148                                                             const char **,
149                                                             int *,
150                                                             const char **);
151
152 static struct symbol *find_old_style_renaming_symbol (const char *,
153                                                       const struct block *);
154
155 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
156                                                 int, int, int *);
157
158 static struct value *evaluate_subexp_type (struct expression *, int *);
159
160 static struct type *ada_find_parallel_type_with_name (struct type *,
161                                                       const char *);
162
163 static int is_dynamic_field (struct type *, int);
164
165 static struct type *to_fixed_variant_branch_type (struct type *,
166                                                   const gdb_byte *,
167                                                   CORE_ADDR, struct value *);
168
169 static struct type *to_fixed_array_type (struct type *, struct value *, int);
170
171 static struct type *to_fixed_range_type (struct type *, struct value *);
172
173 static struct type *to_static_fixed_type (struct type *);
174 static struct type *static_unwrap_type (struct type *type);
175
176 static struct value *unwrap_value (struct value *);
177
178 static struct type *constrained_packed_array_type (struct type *, long *);
179
180 static struct type *decode_constrained_packed_array_type (struct type *);
181
182 static long decode_packed_array_bitsize (struct type *);
183
184 static struct value *decode_constrained_packed_array (struct value *);
185
186 static int ada_is_packed_array_type  (struct type *);
187
188 static int ada_is_unconstrained_packed_array_type (struct type *);
189
190 static struct value *value_subscript_packed (struct value *, int,
191                                              struct value **);
192
193 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
194
195 static struct value *coerce_unspec_val_to_type (struct value *,
196                                                 struct type *);
197
198 static struct value *get_var_value (char *, char *);
199
200 static int lesseq_defined_than (struct symbol *, struct symbol *);
201
202 static int equiv_types (struct type *, struct type *);
203
204 static int is_name_suffix (const char *);
205
206 static int advance_wild_match (const char **, const char *, int);
207
208 static int wild_match (const char *, const char *);
209
210 static struct value *ada_coerce_ref (struct value *);
211
212 static LONGEST pos_atr (struct value *);
213
214 static struct value *value_pos_atr (struct type *, struct value *);
215
216 static struct value *value_val_atr (struct type *, struct value *);
217
218 static struct symbol *standard_lookup (const char *, const struct block *,
219                                        domain_enum);
220
221 static struct value *ada_search_struct_field (char *, struct value *, int,
222                                               struct type *);
223
224 static struct value *ada_value_primitive_field (struct value *, int, int,
225                                                 struct type *);
226
227 static int find_struct_field (const char *, struct type *, int,
228                               struct type **, int *, int *, int *, int *);
229
230 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
231                                                 struct value *);
232
233 static int ada_resolve_function (struct ada_symbol_info *, int,
234                                  struct value **, int, const char *,
235                                  struct type *);
236
237 static int ada_is_direct_array_type (struct type *);
238
239 static void ada_language_arch_info (struct gdbarch *,
240                                     struct language_arch_info *);
241
242 static void check_size (const struct type *);
243
244 static struct value *ada_index_struct_field (int, struct value *, int,
245                                              struct type *);
246
247 static struct value *assign_aggregate (struct value *, struct value *, 
248                                        struct expression *,
249                                        int *, enum noside);
250
251 static void aggregate_assign_from_choices (struct value *, struct value *, 
252                                            struct expression *,
253                                            int *, LONGEST *, int *,
254                                            int, LONGEST, LONGEST);
255
256 static void aggregate_assign_positional (struct value *, struct value *,
257                                          struct expression *,
258                                          int *, LONGEST *, int *, int,
259                                          LONGEST, LONGEST);
260
261
262 static void aggregate_assign_others (struct value *, struct value *,
263                                      struct expression *,
264                                      int *, LONGEST *, int, LONGEST, LONGEST);
265
266
267 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
268
269
270 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
271                                           int *, enum noside);
272
273 static void ada_forward_operator_length (struct expression *, int, int *,
274                                          int *);
275
276 static struct type *ada_find_any_type (const char *name);
277 \f
278
279
280 /* Maximum-sized dynamic type.  */
281 static unsigned int varsize_limit;
282
283 /* FIXME: brobecker/2003-09-17: No longer a const because it is
284    returned by a function that does not return a const char *.  */
285 static char *ada_completer_word_break_characters =
286 #ifdef VMS
287   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
288 #else
289   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
290 #endif
291
292 /* The name of the symbol to use to get the name of the main subprogram.  */
293 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
294   = "__gnat_ada_main_program_name";
295
296 /* Limit on the number of warnings to raise per expression evaluation.  */
297 static int warning_limit = 2;
298
299 /* Number of warning messages issued; reset to 0 by cleanups after
300    expression evaluation.  */
301 static int warnings_issued = 0;
302
303 static const char *known_runtime_file_name_patterns[] = {
304   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
305 };
306
307 static const char *known_auxiliary_function_name_patterns[] = {
308   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
309 };
310
311 /* Space for allocating results of ada_lookup_symbol_list.  */
312 static struct obstack symbol_list_obstack;
313
314                         /* Inferior-specific data.  */
315
316 /* Per-inferior data for this module.  */
317
318 struct ada_inferior_data
319 {
320   /* The ada__tags__type_specific_data type, which is used when decoding
321      tagged types.  With older versions of GNAT, this type was directly
322      accessible through a component ("tsd") in the object tag.  But this
323      is no longer the case, so we cache it for each inferior.  */
324   struct type *tsd_type;
325
326   /* The exception_support_info data.  This data is used to determine
327      how to implement support for Ada exception catchpoints in a given
328      inferior.  */
329   const struct exception_support_info *exception_info;
330 };
331
332 /* Our key to this module's inferior data.  */
333 static const struct inferior_data *ada_inferior_data;
334
335 /* A cleanup routine for our inferior data.  */
336 static void
337 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
338 {
339   struct ada_inferior_data *data;
340
341   data = inferior_data (inf, ada_inferior_data);
342   if (data != NULL)
343     xfree (data);
344 }
345
346 /* Return our inferior data for the given inferior (INF).
347
348    This function always returns a valid pointer to an allocated
349    ada_inferior_data structure.  If INF's inferior data has not
350    been previously set, this functions creates a new one with all
351    fields set to zero, sets INF's inferior to it, and then returns
352    a pointer to that newly allocated ada_inferior_data.  */
353
354 static struct ada_inferior_data *
355 get_ada_inferior_data (struct inferior *inf)
356 {
357   struct ada_inferior_data *data;
358
359   data = inferior_data (inf, ada_inferior_data);
360   if (data == NULL)
361     {
362       data = XZALLOC (struct ada_inferior_data);
363       set_inferior_data (inf, ada_inferior_data, data);
364     }
365
366   return data;
367 }
368
369 /* Perform all necessary cleanups regarding our module's inferior data
370    that is required after the inferior INF just exited.  */
371
372 static void
373 ada_inferior_exit (struct inferior *inf)
374 {
375   ada_inferior_data_cleanup (inf, NULL);
376   set_inferior_data (inf, ada_inferior_data, NULL);
377 }
378
379                         /* Utilities */
380
381 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
382    all typedef layers have been peeled.  Otherwise, return TYPE.
383
384    Normally, we really expect a typedef type to only have 1 typedef layer.
385    In other words, we really expect the target type of a typedef type to be
386    a non-typedef type.  This is particularly true for Ada units, because
387    the language does not have a typedef vs not-typedef distinction.
388    In that respect, the Ada compiler has been trying to eliminate as many
389    typedef definitions in the debugging information, since they generally
390    do not bring any extra information (we still use typedef under certain
391    circumstances related mostly to the GNAT encoding).
392
393    Unfortunately, we have seen situations where the debugging information
394    generated by the compiler leads to such multiple typedef layers.  For
395    instance, consider the following example with stabs:
396
397      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
398      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
399
400    This is an error in the debugging information which causes type
401    pck__float_array___XUP to be defined twice, and the second time,
402    it is defined as a typedef of a typedef.
403
404    This is on the fringe of legality as far as debugging information is
405    concerned, and certainly unexpected.  But it is easy to handle these
406    situations correctly, so we can afford to be lenient in this case.  */
407
408 static struct type *
409 ada_typedef_target_type (struct type *type)
410 {
411   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
412     type = TYPE_TARGET_TYPE (type);
413   return type;
414 }
415
416 /* Given DECODED_NAME a string holding a symbol name in its
417    decoded form (ie using the Ada dotted notation), returns
418    its unqualified name.  */
419
420 static const char *
421 ada_unqualified_name (const char *decoded_name)
422 {
423   const char *result = strrchr (decoded_name, '.');
424
425   if (result != NULL)
426     result++;                   /* Skip the dot...  */
427   else
428     result = decoded_name;
429
430   return result;
431 }
432
433 /* Return a string starting with '<', followed by STR, and '>'.
434    The result is good until the next call.  */
435
436 static char *
437 add_angle_brackets (const char *str)
438 {
439   static char *result = NULL;
440
441   xfree (result);
442   result = xstrprintf ("<%s>", str);
443   return result;
444 }
445
446 static char *
447 ada_get_gdb_completer_word_break_characters (void)
448 {
449   return ada_completer_word_break_characters;
450 }
451
452 /* Print an array element index using the Ada syntax.  */
453
454 static void
455 ada_print_array_index (struct value *index_value, struct ui_file *stream,
456                        const struct value_print_options *options)
457 {
458   LA_VALUE_PRINT (index_value, stream, options);
459   fprintf_filtered (stream, " => ");
460 }
461
462 /* Assuming VECT points to an array of *SIZE objects of size
463    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
464    updating *SIZE as necessary and returning the (new) array.  */
465
466 void *
467 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
468 {
469   if (*size < min_size)
470     {
471       *size *= 2;
472       if (*size < min_size)
473         *size = min_size;
474       vect = xrealloc (vect, *size * element_size);
475     }
476   return vect;
477 }
478
479 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
480    suffix of FIELD_NAME beginning "___".  */
481
482 static int
483 field_name_match (const char *field_name, const char *target)
484 {
485   int len = strlen (target);
486
487   return
488     (strncmp (field_name, target, len) == 0
489      && (field_name[len] == '\0'
490          || (strncmp (field_name + len, "___", 3) == 0
491              && strcmp (field_name + strlen (field_name) - 6,
492                         "___XVN") != 0)));
493 }
494
495
496 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
497    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
498    and return its index.  This function also handles fields whose name
499    have ___ suffixes because the compiler sometimes alters their name
500    by adding such a suffix to represent fields with certain constraints.
501    If the field could not be found, return a negative number if
502    MAYBE_MISSING is set.  Otherwise raise an error.  */
503
504 int
505 ada_get_field_index (const struct type *type, const char *field_name,
506                      int maybe_missing)
507 {
508   int fieldno;
509   struct type *struct_type = check_typedef ((struct type *) type);
510
511   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
512     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
513       return fieldno;
514
515   if (!maybe_missing)
516     error (_("Unable to find field %s in struct %s.  Aborting"),
517            field_name, TYPE_NAME (struct_type));
518
519   return -1;
520 }
521
522 /* The length of the prefix of NAME prior to any "___" suffix.  */
523
524 int
525 ada_name_prefix_len (const char *name)
526 {
527   if (name == NULL)
528     return 0;
529   else
530     {
531       const char *p = strstr (name, "___");
532
533       if (p == NULL)
534         return strlen (name);
535       else
536         return p - name;
537     }
538 }
539
540 /* Return non-zero if SUFFIX is a suffix of STR.
541    Return zero if STR is null.  */
542
543 static int
544 is_suffix (const char *str, const char *suffix)
545 {
546   int len1, len2;
547
548   if (str == NULL)
549     return 0;
550   len1 = strlen (str);
551   len2 = strlen (suffix);
552   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
553 }
554
555 /* The contents of value VAL, treated as a value of type TYPE.  The
556    result is an lval in memory if VAL is.  */
557
558 static struct value *
559 coerce_unspec_val_to_type (struct value *val, struct type *type)
560 {
561   type = ada_check_typedef (type);
562   if (value_type (val) == type)
563     return val;
564   else
565     {
566       struct value *result;
567
568       /* Make sure that the object size is not unreasonable before
569          trying to allocate some memory for it.  */
570       check_size (type);
571
572       if (value_lazy (val)
573           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
574         result = allocate_value_lazy (type);
575       else
576         {
577           result = allocate_value (type);
578           memcpy (value_contents_raw (result), value_contents (val),
579                   TYPE_LENGTH (type));
580         }
581       set_value_component_location (result, val);
582       set_value_bitsize (result, value_bitsize (val));
583       set_value_bitpos (result, value_bitpos (val));
584       set_value_address (result, value_address (val));
585       set_value_optimized_out (result, value_optimized_out_const (val));
586       return result;
587     }
588 }
589
590 static const gdb_byte *
591 cond_offset_host (const gdb_byte *valaddr, long offset)
592 {
593   if (valaddr == NULL)
594     return NULL;
595   else
596     return valaddr + offset;
597 }
598
599 static CORE_ADDR
600 cond_offset_target (CORE_ADDR address, long offset)
601 {
602   if (address == 0)
603     return 0;
604   else
605     return address + offset;
606 }
607
608 /* Issue a warning (as for the definition of warning in utils.c, but
609    with exactly one argument rather than ...), unless the limit on the
610    number of warnings has passed during the evaluation of the current
611    expression.  */
612
613 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
614    provided by "complaint".  */
615 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
616
617 static void
618 lim_warning (const char *format, ...)
619 {
620   va_list args;
621
622   va_start (args, format);
623   warnings_issued += 1;
624   if (warnings_issued <= warning_limit)
625     vwarning (format, args);
626
627   va_end (args);
628 }
629
630 /* Issue an error if the size of an object of type T is unreasonable,
631    i.e. if it would be a bad idea to allocate a value of this type in
632    GDB.  */
633
634 static void
635 check_size (const struct type *type)
636 {
637   if (TYPE_LENGTH (type) > varsize_limit)
638     error (_("object size is larger than varsize-limit"));
639 }
640
641 /* Maximum value of a SIZE-byte signed integer type.  */
642 static LONGEST
643 max_of_size (int size)
644 {
645   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
646
647   return top_bit | (top_bit - 1);
648 }
649
650 /* Minimum value of a SIZE-byte signed integer type.  */
651 static LONGEST
652 min_of_size (int size)
653 {
654   return -max_of_size (size) - 1;
655 }
656
657 /* Maximum value of a SIZE-byte unsigned integer type.  */
658 static ULONGEST
659 umax_of_size (int size)
660 {
661   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
662
663   return top_bit | (top_bit - 1);
664 }
665
666 /* Maximum value of integral type T, as a signed quantity.  */
667 static LONGEST
668 max_of_type (struct type *t)
669 {
670   if (TYPE_UNSIGNED (t))
671     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
672   else
673     return max_of_size (TYPE_LENGTH (t));
674 }
675
676 /* Minimum value of integral type T, as a signed quantity.  */
677 static LONGEST
678 min_of_type (struct type *t)
679 {
680   if (TYPE_UNSIGNED (t)) 
681     return 0;
682   else
683     return min_of_size (TYPE_LENGTH (t));
684 }
685
686 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
687 LONGEST
688 ada_discrete_type_high_bound (struct type *type)
689 {
690   switch (TYPE_CODE (type))
691     {
692     case TYPE_CODE_RANGE:
693       return TYPE_HIGH_BOUND (type);
694     case TYPE_CODE_ENUM:
695       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
696     case TYPE_CODE_BOOL:
697       return 1;
698     case TYPE_CODE_CHAR:
699     case TYPE_CODE_INT:
700       return max_of_type (type);
701     default:
702       error (_("Unexpected type in ada_discrete_type_high_bound."));
703     }
704 }
705
706 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
707 LONGEST
708 ada_discrete_type_low_bound (struct type *type)
709 {
710   switch (TYPE_CODE (type))
711     {
712     case TYPE_CODE_RANGE:
713       return TYPE_LOW_BOUND (type);
714     case TYPE_CODE_ENUM:
715       return TYPE_FIELD_ENUMVAL (type, 0);
716     case TYPE_CODE_BOOL:
717       return 0;
718     case TYPE_CODE_CHAR:
719     case TYPE_CODE_INT:
720       return min_of_type (type);
721     default:
722       error (_("Unexpected type in ada_discrete_type_low_bound."));
723     }
724 }
725
726 /* The identity on non-range types.  For range types, the underlying
727    non-range scalar type.  */
728
729 static struct type *
730 get_base_type (struct type *type)
731 {
732   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
733     {
734       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
735         return type;
736       type = TYPE_TARGET_TYPE (type);
737     }
738   return type;
739 }
740
741 /* Return a decoded version of the given VALUE.  This means returning
742    a value whose type is obtained by applying all the GNAT-specific
743    encondings, making the resulting type a static but standard description
744    of the initial type.  */
745
746 struct value *
747 ada_get_decoded_value (struct value *value)
748 {
749   struct type *type = ada_check_typedef (value_type (value));
750
751   if (ada_is_array_descriptor_type (type)
752       || (ada_is_constrained_packed_array_type (type)
753           && TYPE_CODE (type) != TYPE_CODE_PTR))
754     {
755       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
756         value = ada_coerce_to_simple_array_ptr (value);
757       else
758         value = ada_coerce_to_simple_array (value);
759     }
760   else
761     value = ada_to_fixed_value (value);
762
763   return value;
764 }
765
766 /* Same as ada_get_decoded_value, but with the given TYPE.
767    Because there is no associated actual value for this type,
768    the resulting type might be a best-effort approximation in
769    the case of dynamic types.  */
770
771 struct type *
772 ada_get_decoded_type (struct type *type)
773 {
774   type = to_static_fixed_type (type);
775   if (ada_is_constrained_packed_array_type (type))
776     type = ada_coerce_to_simple_array_type (type);
777   return type;
778 }
779
780 \f
781
782                                 /* Language Selection */
783
784 /* If the main program is in Ada, return language_ada, otherwise return LANG
785    (the main program is in Ada iif the adainit symbol is found).  */
786
787 enum language
788 ada_update_initial_language (enum language lang)
789 {
790   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
791                              (struct objfile *) NULL) != NULL)
792     return language_ada;
793
794   return lang;
795 }
796
797 /* If the main procedure is written in Ada, then return its name.
798    The result is good until the next call.  Return NULL if the main
799    procedure doesn't appear to be in Ada.  */
800
801 char *
802 ada_main_name (void)
803 {
804   struct minimal_symbol *msym;
805   static char *main_program_name = NULL;
806
807   /* For Ada, the name of the main procedure is stored in a specific
808      string constant, generated by the binder.  Look for that symbol,
809      extract its address, and then read that string.  If we didn't find
810      that string, then most probably the main procedure is not written
811      in Ada.  */
812   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
813
814   if (msym != NULL)
815     {
816       CORE_ADDR main_program_name_addr;
817       int err_code;
818
819       main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
820       if (main_program_name_addr == 0)
821         error (_("Invalid address for Ada main program name."));
822
823       xfree (main_program_name);
824       target_read_string (main_program_name_addr, &main_program_name,
825                           1024, &err_code);
826
827       if (err_code != 0)
828         return NULL;
829       return main_program_name;
830     }
831
832   /* The main procedure doesn't seem to be in Ada.  */
833   return NULL;
834 }
835 \f
836                                 /* Symbols */
837
838 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
839    of NULLs.  */
840
841 const struct ada_opname_map ada_opname_table[] = {
842   {"Oadd", "\"+\"", BINOP_ADD},
843   {"Osubtract", "\"-\"", BINOP_SUB},
844   {"Omultiply", "\"*\"", BINOP_MUL},
845   {"Odivide", "\"/\"", BINOP_DIV},
846   {"Omod", "\"mod\"", BINOP_MOD},
847   {"Orem", "\"rem\"", BINOP_REM},
848   {"Oexpon", "\"**\"", BINOP_EXP},
849   {"Olt", "\"<\"", BINOP_LESS},
850   {"Ole", "\"<=\"", BINOP_LEQ},
851   {"Ogt", "\">\"", BINOP_GTR},
852   {"Oge", "\">=\"", BINOP_GEQ},
853   {"Oeq", "\"=\"", BINOP_EQUAL},
854   {"One", "\"/=\"", BINOP_NOTEQUAL},
855   {"Oand", "\"and\"", BINOP_BITWISE_AND},
856   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
857   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
858   {"Oconcat", "\"&\"", BINOP_CONCAT},
859   {"Oabs", "\"abs\"", UNOP_ABS},
860   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
861   {"Oadd", "\"+\"", UNOP_PLUS},
862   {"Osubtract", "\"-\"", UNOP_NEG},
863   {NULL, NULL}
864 };
865
866 /* The "encoded" form of DECODED, according to GNAT conventions.
867    The result is valid until the next call to ada_encode.  */
868
869 char *
870 ada_encode (const char *decoded)
871 {
872   static char *encoding_buffer = NULL;
873   static size_t encoding_buffer_size = 0;
874   const char *p;
875   int k;
876
877   if (decoded == NULL)
878     return NULL;
879
880   GROW_VECT (encoding_buffer, encoding_buffer_size,
881              2 * strlen (decoded) + 10);
882
883   k = 0;
884   for (p = decoded; *p != '\0'; p += 1)
885     {
886       if (*p == '.')
887         {
888           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
889           k += 2;
890         }
891       else if (*p == '"')
892         {
893           const struct ada_opname_map *mapping;
894
895           for (mapping = ada_opname_table;
896                mapping->encoded != NULL
897                && strncmp (mapping->decoded, p,
898                            strlen (mapping->decoded)) != 0; mapping += 1)
899             ;
900           if (mapping->encoded == NULL)
901             error (_("invalid Ada operator name: %s"), p);
902           strcpy (encoding_buffer + k, mapping->encoded);
903           k += strlen (mapping->encoded);
904           break;
905         }
906       else
907         {
908           encoding_buffer[k] = *p;
909           k += 1;
910         }
911     }
912
913   encoding_buffer[k] = '\0';
914   return encoding_buffer;
915 }
916
917 /* Return NAME folded to lower case, or, if surrounded by single
918    quotes, unfolded, but with the quotes stripped away.  Result good
919    to next call.  */
920
921 char *
922 ada_fold_name (const char *name)
923 {
924   static char *fold_buffer = NULL;
925   static size_t fold_buffer_size = 0;
926
927   int len = strlen (name);
928   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
929
930   if (name[0] == '\'')
931     {
932       strncpy (fold_buffer, name + 1, len - 2);
933       fold_buffer[len - 2] = '\000';
934     }
935   else
936     {
937       int i;
938
939       for (i = 0; i <= len; i += 1)
940         fold_buffer[i] = tolower (name[i]);
941     }
942
943   return fold_buffer;
944 }
945
946 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
947
948 static int
949 is_lower_alphanum (const char c)
950 {
951   return (isdigit (c) || (isalpha (c) && islower (c)));
952 }
953
954 /* ENCODED is the linkage name of a symbol and LEN contains its length.
955    This function saves in LEN the length of that same symbol name but
956    without either of these suffixes:
957      . .{DIGIT}+
958      . ${DIGIT}+
959      . ___{DIGIT}+
960      . __{DIGIT}+.
961
962    These are suffixes introduced by the compiler for entities such as
963    nested subprogram for instance, in order to avoid name clashes.
964    They do not serve any purpose for the debugger.  */
965
966 static void
967 ada_remove_trailing_digits (const char *encoded, int *len)
968 {
969   if (*len > 1 && isdigit (encoded[*len - 1]))
970     {
971       int i = *len - 2;
972
973       while (i > 0 && isdigit (encoded[i]))
974         i--;
975       if (i >= 0 && encoded[i] == '.')
976         *len = i;
977       else if (i >= 0 && encoded[i] == '$')
978         *len = i;
979       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
980         *len = i - 2;
981       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
982         *len = i - 1;
983     }
984 }
985
986 /* Remove the suffix introduced by the compiler for protected object
987    subprograms.  */
988
989 static void
990 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
991 {
992   /* Remove trailing N.  */
993
994   /* Protected entry subprograms are broken into two
995      separate subprograms: The first one is unprotected, and has
996      a 'N' suffix; the second is the protected version, and has
997      the 'P' suffix.  The second calls the first one after handling
998      the protection.  Since the P subprograms are internally generated,
999      we leave these names undecoded, giving the user a clue that this
1000      entity is internal.  */
1001
1002   if (*len > 1
1003       && encoded[*len - 1] == 'N'
1004       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1005     *len = *len - 1;
1006 }
1007
1008 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1009
1010 static void
1011 ada_remove_Xbn_suffix (const char *encoded, int *len)
1012 {
1013   int i = *len - 1;
1014
1015   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1016     i--;
1017
1018   if (encoded[i] != 'X')
1019     return;
1020
1021   if (i == 0)
1022     return;
1023
1024   if (isalnum (encoded[i-1]))
1025     *len = i;
1026 }
1027
1028 /* If ENCODED follows the GNAT entity encoding conventions, then return
1029    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1030    replaced by ENCODED.
1031
1032    The resulting string is valid until the next call of ada_decode.
1033    If the string is unchanged by decoding, the original string pointer
1034    is returned.  */
1035
1036 const char *
1037 ada_decode (const char *encoded)
1038 {
1039   int i, j;
1040   int len0;
1041   const char *p;
1042   char *decoded;
1043   int at_start_name;
1044   static char *decoding_buffer = NULL;
1045   static size_t decoding_buffer_size = 0;
1046
1047   /* The name of the Ada main procedure starts with "_ada_".
1048      This prefix is not part of the decoded name, so skip this part
1049      if we see this prefix.  */
1050   if (strncmp (encoded, "_ada_", 5) == 0)
1051     encoded += 5;
1052
1053   /* If the name starts with '_', then it is not a properly encoded
1054      name, so do not attempt to decode it.  Similarly, if the name
1055      starts with '<', the name should not be decoded.  */
1056   if (encoded[0] == '_' || encoded[0] == '<')
1057     goto Suppress;
1058
1059   len0 = strlen (encoded);
1060
1061   ada_remove_trailing_digits (encoded, &len0);
1062   ada_remove_po_subprogram_suffix (encoded, &len0);
1063
1064   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1065      the suffix is located before the current "end" of ENCODED.  We want
1066      to avoid re-matching parts of ENCODED that have previously been
1067      marked as discarded (by decrementing LEN0).  */
1068   p = strstr (encoded, "___");
1069   if (p != NULL && p - encoded < len0 - 3)
1070     {
1071       if (p[3] == 'X')
1072         len0 = p - encoded;
1073       else
1074         goto Suppress;
1075     }
1076
1077   /* Remove any trailing TKB suffix.  It tells us that this symbol
1078      is for the body of a task, but that information does not actually
1079      appear in the decoded name.  */
1080
1081   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
1082     len0 -= 3;
1083
1084   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1085      from the TKB suffix because it is used for non-anonymous task
1086      bodies.  */
1087
1088   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1089     len0 -= 2;
1090
1091   /* Remove trailing "B" suffixes.  */
1092   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1093
1094   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
1095     len0 -= 1;
1096
1097   /* Make decoded big enough for possible expansion by operator name.  */
1098
1099   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1100   decoded = decoding_buffer;
1101
1102   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1103
1104   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1105     {
1106       i = len0 - 2;
1107       while ((i >= 0 && isdigit (encoded[i]))
1108              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1109         i -= 1;
1110       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1111         len0 = i - 1;
1112       else if (encoded[i] == '$')
1113         len0 = i;
1114     }
1115
1116   /* The first few characters that are not alphabetic are not part
1117      of any encoding we use, so we can copy them over verbatim.  */
1118
1119   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1120     decoded[j] = encoded[i];
1121
1122   at_start_name = 1;
1123   while (i < len0)
1124     {
1125       /* Is this a symbol function?  */
1126       if (at_start_name && encoded[i] == 'O')
1127         {
1128           int k;
1129
1130           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1131             {
1132               int op_len = strlen (ada_opname_table[k].encoded);
1133               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1134                             op_len - 1) == 0)
1135                   && !isalnum (encoded[i + op_len]))
1136                 {
1137                   strcpy (decoded + j, ada_opname_table[k].decoded);
1138                   at_start_name = 0;
1139                   i += op_len;
1140                   j += strlen (ada_opname_table[k].decoded);
1141                   break;
1142                 }
1143             }
1144           if (ada_opname_table[k].encoded != NULL)
1145             continue;
1146         }
1147       at_start_name = 0;
1148
1149       /* Replace "TK__" with "__", which will eventually be translated
1150          into "." (just below).  */
1151
1152       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1153         i += 2;
1154
1155       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1156          be translated into "." (just below).  These are internal names
1157          generated for anonymous blocks inside which our symbol is nested.  */
1158
1159       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1160           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1161           && isdigit (encoded [i+4]))
1162         {
1163           int k = i + 5;
1164           
1165           while (k < len0 && isdigit (encoded[k]))
1166             k++;  /* Skip any extra digit.  */
1167
1168           /* Double-check that the "__B_{DIGITS}+" sequence we found
1169              is indeed followed by "__".  */
1170           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1171             i = k;
1172         }
1173
1174       /* Remove _E{DIGITS}+[sb] */
1175
1176       /* Just as for protected object subprograms, there are 2 categories
1177          of subprograms created by the compiler for each entry.  The first
1178          one implements the actual entry code, and has a suffix following
1179          the convention above; the second one implements the barrier and
1180          uses the same convention as above, except that the 'E' is replaced
1181          by a 'B'.
1182
1183          Just as above, we do not decode the name of barrier functions
1184          to give the user a clue that the code he is debugging has been
1185          internally generated.  */
1186
1187       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1188           && isdigit (encoded[i+2]))
1189         {
1190           int k = i + 3;
1191
1192           while (k < len0 && isdigit (encoded[k]))
1193             k++;
1194
1195           if (k < len0
1196               && (encoded[k] == 'b' || encoded[k] == 's'))
1197             {
1198               k++;
1199               /* Just as an extra precaution, make sure that if this
1200                  suffix is followed by anything else, it is a '_'.
1201                  Otherwise, we matched this sequence by accident.  */
1202               if (k == len0
1203                   || (k < len0 && encoded[k] == '_'))
1204                 i = k;
1205             }
1206         }
1207
1208       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1209          the GNAT front-end in protected object subprograms.  */
1210
1211       if (i < len0 + 3
1212           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1213         {
1214           /* Backtrack a bit up until we reach either the begining of
1215              the encoded name, or "__".  Make sure that we only find
1216              digits or lowercase characters.  */
1217           const char *ptr = encoded + i - 1;
1218
1219           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1220             ptr--;
1221           if (ptr < encoded
1222               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1223             i++;
1224         }
1225
1226       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1227         {
1228           /* This is a X[bn]* sequence not separated from the previous
1229              part of the name with a non-alpha-numeric character (in other
1230              words, immediately following an alpha-numeric character), then
1231              verify that it is placed at the end of the encoded name.  If
1232              not, then the encoding is not valid and we should abort the
1233              decoding.  Otherwise, just skip it, it is used in body-nested
1234              package names.  */
1235           do
1236             i += 1;
1237           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1238           if (i < len0)
1239             goto Suppress;
1240         }
1241       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1242         {
1243          /* Replace '__' by '.'.  */
1244           decoded[j] = '.';
1245           at_start_name = 1;
1246           i += 2;
1247           j += 1;
1248         }
1249       else
1250         {
1251           /* It's a character part of the decoded name, so just copy it
1252              over.  */
1253           decoded[j] = encoded[i];
1254           i += 1;
1255           j += 1;
1256         }
1257     }
1258   decoded[j] = '\000';
1259
1260   /* Decoded names should never contain any uppercase character.
1261      Double-check this, and abort the decoding if we find one.  */
1262
1263   for (i = 0; decoded[i] != '\0'; i += 1)
1264     if (isupper (decoded[i]) || decoded[i] == ' ')
1265       goto Suppress;
1266
1267   if (strcmp (decoded, encoded) == 0)
1268     return encoded;
1269   else
1270     return decoded;
1271
1272 Suppress:
1273   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1274   decoded = decoding_buffer;
1275   if (encoded[0] == '<')
1276     strcpy (decoded, encoded);
1277   else
1278     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1279   return decoded;
1280
1281 }
1282
1283 /* Table for keeping permanent unique copies of decoded names.  Once
1284    allocated, names in this table are never released.  While this is a
1285    storage leak, it should not be significant unless there are massive
1286    changes in the set of decoded names in successive versions of a 
1287    symbol table loaded during a single session.  */
1288 static struct htab *decoded_names_store;
1289
1290 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1291    in the language-specific part of GSYMBOL, if it has not been
1292    previously computed.  Tries to save the decoded name in the same
1293    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1294    in any case, the decoded symbol has a lifetime at least that of
1295    GSYMBOL).
1296    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1297    const, but nevertheless modified to a semantically equivalent form
1298    when a decoded name is cached in it.  */
1299
1300 const char *
1301 ada_decode_symbol (const struct general_symbol_info *arg)
1302 {
1303   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1304   const char **resultp =
1305     &gsymbol->language_specific.mangled_lang.demangled_name;
1306
1307   if (!gsymbol->ada_mangled)
1308     {
1309       const char *decoded = ada_decode (gsymbol->name);
1310       struct obstack *obstack = gsymbol->language_specific.obstack;
1311
1312       gsymbol->ada_mangled = 1;
1313
1314       if (obstack != NULL)
1315         *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1316       else
1317         {
1318           /* Sometimes, we can't find a corresponding objfile, in
1319              which case, we put the result on the heap.  Since we only
1320              decode when needed, we hope this usually does not cause a
1321              significant memory leak (FIXME).  */
1322
1323           char **slot = (char **) htab_find_slot (decoded_names_store,
1324                                                   decoded, INSERT);
1325
1326           if (*slot == NULL)
1327             *slot = xstrdup (decoded);
1328           *resultp = *slot;
1329         }
1330     }
1331
1332   return *resultp;
1333 }
1334
1335 static char *
1336 ada_la_decode (const char *encoded, int options)
1337 {
1338   return xstrdup (ada_decode (encoded));
1339 }
1340
1341 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1342    suffixes that encode debugging information or leading _ada_ on
1343    SYM_NAME (see is_name_suffix commentary for the debugging
1344    information that is ignored).  If WILD, then NAME need only match a
1345    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1346    either argument is NULL.  */
1347
1348 static int
1349 match_name (const char *sym_name, const char *name, int wild)
1350 {
1351   if (sym_name == NULL || name == NULL)
1352     return 0;
1353   else if (wild)
1354     return wild_match (sym_name, name) == 0;
1355   else
1356     {
1357       int len_name = strlen (name);
1358
1359       return (strncmp (sym_name, name, len_name) == 0
1360               && is_name_suffix (sym_name + len_name))
1361         || (strncmp (sym_name, "_ada_", 5) == 0
1362             && strncmp (sym_name + 5, name, len_name) == 0
1363             && is_name_suffix (sym_name + len_name + 5));
1364     }
1365 }
1366 \f
1367
1368                                 /* Arrays */
1369
1370 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1371    generated by the GNAT compiler to describe the index type used
1372    for each dimension of an array, check whether it follows the latest
1373    known encoding.  If not, fix it up to conform to the latest encoding.
1374    Otherwise, do nothing.  This function also does nothing if
1375    INDEX_DESC_TYPE is NULL.
1376
1377    The GNAT encoding used to describle the array index type evolved a bit.
1378    Initially, the information would be provided through the name of each
1379    field of the structure type only, while the type of these fields was
1380    described as unspecified and irrelevant.  The debugger was then expected
1381    to perform a global type lookup using the name of that field in order
1382    to get access to the full index type description.  Because these global
1383    lookups can be very expensive, the encoding was later enhanced to make
1384    the global lookup unnecessary by defining the field type as being
1385    the full index type description.
1386
1387    The purpose of this routine is to allow us to support older versions
1388    of the compiler by detecting the use of the older encoding, and by
1389    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1390    we essentially replace each field's meaningless type by the associated
1391    index subtype).  */
1392
1393 void
1394 ada_fixup_array_indexes_type (struct type *index_desc_type)
1395 {
1396   int i;
1397
1398   if (index_desc_type == NULL)
1399     return;
1400   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1401
1402   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1403      to check one field only, no need to check them all).  If not, return
1404      now.
1405
1406      If our INDEX_DESC_TYPE was generated using the older encoding,
1407      the field type should be a meaningless integer type whose name
1408      is not equal to the field name.  */
1409   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1410       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1411                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1412     return;
1413
1414   /* Fixup each field of INDEX_DESC_TYPE.  */
1415   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1416    {
1417      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1418      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1419
1420      if (raw_type)
1421        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1422    }
1423 }
1424
1425 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1426
1427 static char *bound_name[] = {
1428   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1429   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1430 };
1431
1432 /* Maximum number of array dimensions we are prepared to handle.  */
1433
1434 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1435
1436
1437 /* The desc_* routines return primitive portions of array descriptors
1438    (fat pointers).  */
1439
1440 /* The descriptor or array type, if any, indicated by TYPE; removes
1441    level of indirection, if needed.  */
1442
1443 static struct type *
1444 desc_base_type (struct type *type)
1445 {
1446   if (type == NULL)
1447     return NULL;
1448   type = ada_check_typedef (type);
1449   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1450     type = ada_typedef_target_type (type);
1451
1452   if (type != NULL
1453       && (TYPE_CODE (type) == TYPE_CODE_PTR
1454           || TYPE_CODE (type) == TYPE_CODE_REF))
1455     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1456   else
1457     return type;
1458 }
1459
1460 /* True iff TYPE indicates a "thin" array pointer type.  */
1461
1462 static int
1463 is_thin_pntr (struct type *type)
1464 {
1465   return
1466     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1467     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1468 }
1469
1470 /* The descriptor type for thin pointer type TYPE.  */
1471
1472 static struct type *
1473 thin_descriptor_type (struct type *type)
1474 {
1475   struct type *base_type = desc_base_type (type);
1476
1477   if (base_type == NULL)
1478     return NULL;
1479   if (is_suffix (ada_type_name (base_type), "___XVE"))
1480     return base_type;
1481   else
1482     {
1483       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1484
1485       if (alt_type == NULL)
1486         return base_type;
1487       else
1488         return alt_type;
1489     }
1490 }
1491
1492 /* A pointer to the array data for thin-pointer value VAL.  */
1493
1494 static struct value *
1495 thin_data_pntr (struct value *val)
1496 {
1497   struct type *type = ada_check_typedef (value_type (val));
1498   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1499
1500   data_type = lookup_pointer_type (data_type);
1501
1502   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1503     return value_cast (data_type, value_copy (val));
1504   else
1505     return value_from_longest (data_type, value_address (val));
1506 }
1507
1508 /* True iff TYPE indicates a "thick" array pointer type.  */
1509
1510 static int
1511 is_thick_pntr (struct type *type)
1512 {
1513   type = desc_base_type (type);
1514   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1515           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1516 }
1517
1518 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1519    pointer to one, the type of its bounds data; otherwise, NULL.  */
1520
1521 static struct type *
1522 desc_bounds_type (struct type *type)
1523 {
1524   struct type *r;
1525
1526   type = desc_base_type (type);
1527
1528   if (type == NULL)
1529     return NULL;
1530   else if (is_thin_pntr (type))
1531     {
1532       type = thin_descriptor_type (type);
1533       if (type == NULL)
1534         return NULL;
1535       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1536       if (r != NULL)
1537         return ada_check_typedef (r);
1538     }
1539   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1540     {
1541       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1542       if (r != NULL)
1543         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1544     }
1545   return NULL;
1546 }
1547
1548 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1549    one, a pointer to its bounds data.   Otherwise NULL.  */
1550
1551 static struct value *
1552 desc_bounds (struct value *arr)
1553 {
1554   struct type *type = ada_check_typedef (value_type (arr));
1555
1556   if (is_thin_pntr (type))
1557     {
1558       struct type *bounds_type =
1559         desc_bounds_type (thin_descriptor_type (type));
1560       LONGEST addr;
1561
1562       if (bounds_type == NULL)
1563         error (_("Bad GNAT array descriptor"));
1564
1565       /* NOTE: The following calculation is not really kosher, but
1566          since desc_type is an XVE-encoded type (and shouldn't be),
1567          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1568       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1569         addr = value_as_long (arr);
1570       else
1571         addr = value_address (arr);
1572
1573       return
1574         value_from_longest (lookup_pointer_type (bounds_type),
1575                             addr - TYPE_LENGTH (bounds_type));
1576     }
1577
1578   else if (is_thick_pntr (type))
1579     {
1580       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1581                                                _("Bad GNAT array descriptor"));
1582       struct type *p_bounds_type = value_type (p_bounds);
1583
1584       if (p_bounds_type
1585           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1586         {
1587           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1588
1589           if (TYPE_STUB (target_type))
1590             p_bounds = value_cast (lookup_pointer_type
1591                                    (ada_check_typedef (target_type)),
1592                                    p_bounds);
1593         }
1594       else
1595         error (_("Bad GNAT array descriptor"));
1596
1597       return p_bounds;
1598     }
1599   else
1600     return NULL;
1601 }
1602
1603 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1604    position of the field containing the address of the bounds data.  */
1605
1606 static int
1607 fat_pntr_bounds_bitpos (struct type *type)
1608 {
1609   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1610 }
1611
1612 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1613    size of the field containing the address of the bounds data.  */
1614
1615 static int
1616 fat_pntr_bounds_bitsize (struct type *type)
1617 {
1618   type = desc_base_type (type);
1619
1620   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1621     return TYPE_FIELD_BITSIZE (type, 1);
1622   else
1623     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1624 }
1625
1626 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1627    pointer to one, the type of its array data (a array-with-no-bounds type);
1628    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1629    data.  */
1630
1631 static struct type *
1632 desc_data_target_type (struct type *type)
1633 {
1634   type = desc_base_type (type);
1635
1636   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1637   if (is_thin_pntr (type))
1638     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1639   else if (is_thick_pntr (type))
1640     {
1641       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1642
1643       if (data_type
1644           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1645         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1646     }
1647
1648   return NULL;
1649 }
1650
1651 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1652    its array data.  */
1653
1654 static struct value *
1655 desc_data (struct value *arr)
1656 {
1657   struct type *type = value_type (arr);
1658
1659   if (is_thin_pntr (type))
1660     return thin_data_pntr (arr);
1661   else if (is_thick_pntr (type))
1662     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1663                              _("Bad GNAT array descriptor"));
1664   else
1665     return NULL;
1666 }
1667
1668
1669 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1670    position of the field containing the address of the data.  */
1671
1672 static int
1673 fat_pntr_data_bitpos (struct type *type)
1674 {
1675   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1676 }
1677
1678 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1679    size of the field containing the address of the data.  */
1680
1681 static int
1682 fat_pntr_data_bitsize (struct type *type)
1683 {
1684   type = desc_base_type (type);
1685
1686   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1687     return TYPE_FIELD_BITSIZE (type, 0);
1688   else
1689     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1690 }
1691
1692 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1693    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1694    bound, if WHICH is 1.  The first bound is I=1.  */
1695
1696 static struct value *
1697 desc_one_bound (struct value *bounds, int i, int which)
1698 {
1699   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1700                            _("Bad GNAT array descriptor bounds"));
1701 }
1702
1703 /* If BOUNDS is an array-bounds structure type, return the bit position
1704    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1705    bound, if WHICH is 1.  The first bound is I=1.  */
1706
1707 static int
1708 desc_bound_bitpos (struct type *type, int i, int which)
1709 {
1710   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1711 }
1712
1713 /* If BOUNDS is an array-bounds structure type, return the bit field size
1714    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1715    bound, if WHICH is 1.  The first bound is I=1.  */
1716
1717 static int
1718 desc_bound_bitsize (struct type *type, int i, int which)
1719 {
1720   type = desc_base_type (type);
1721
1722   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1723     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1724   else
1725     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1726 }
1727
1728 /* If TYPE is the type of an array-bounds structure, the type of its
1729    Ith bound (numbering from 1).  Otherwise, NULL.  */
1730
1731 static struct type *
1732 desc_index_type (struct type *type, int i)
1733 {
1734   type = desc_base_type (type);
1735
1736   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1737     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1738   else
1739     return NULL;
1740 }
1741
1742 /* The number of index positions in the array-bounds type TYPE.
1743    Return 0 if TYPE is NULL.  */
1744
1745 static int
1746 desc_arity (struct type *type)
1747 {
1748   type = desc_base_type (type);
1749
1750   if (type != NULL)
1751     return TYPE_NFIELDS (type) / 2;
1752   return 0;
1753 }
1754
1755 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1756    an array descriptor type (representing an unconstrained array
1757    type).  */
1758
1759 static int
1760 ada_is_direct_array_type (struct type *type)
1761 {
1762   if (type == NULL)
1763     return 0;
1764   type = ada_check_typedef (type);
1765   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1766           || ada_is_array_descriptor_type (type));
1767 }
1768
1769 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1770  * to one.  */
1771
1772 static int
1773 ada_is_array_type (struct type *type)
1774 {
1775   while (type != NULL 
1776          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1777              || TYPE_CODE (type) == TYPE_CODE_REF))
1778     type = TYPE_TARGET_TYPE (type);
1779   return ada_is_direct_array_type (type);
1780 }
1781
1782 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1783
1784 int
1785 ada_is_simple_array_type (struct type *type)
1786 {
1787   if (type == NULL)
1788     return 0;
1789   type = ada_check_typedef (type);
1790   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1791           || (TYPE_CODE (type) == TYPE_CODE_PTR
1792               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1793                  == TYPE_CODE_ARRAY));
1794 }
1795
1796 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1797
1798 int
1799 ada_is_array_descriptor_type (struct type *type)
1800 {
1801   struct type *data_type = desc_data_target_type (type);
1802
1803   if (type == NULL)
1804     return 0;
1805   type = ada_check_typedef (type);
1806   return (data_type != NULL
1807           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1808           && desc_arity (desc_bounds_type (type)) > 0);
1809 }
1810
1811 /* Non-zero iff type is a partially mal-formed GNAT array
1812    descriptor.  FIXME: This is to compensate for some problems with
1813    debugging output from GNAT.  Re-examine periodically to see if it
1814    is still needed.  */
1815
1816 int
1817 ada_is_bogus_array_descriptor (struct type *type)
1818 {
1819   return
1820     type != NULL
1821     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1822     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1823         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1824     && !ada_is_array_descriptor_type (type);
1825 }
1826
1827
1828 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1829    (fat pointer) returns the type of the array data described---specifically,
1830    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1831    in from the descriptor; otherwise, they are left unspecified.  If
1832    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1833    returns NULL.  The result is simply the type of ARR if ARR is not
1834    a descriptor.  */
1835 struct type *
1836 ada_type_of_array (struct value *arr, int bounds)
1837 {
1838   if (ada_is_constrained_packed_array_type (value_type (arr)))
1839     return decode_constrained_packed_array_type (value_type (arr));
1840
1841   if (!ada_is_array_descriptor_type (value_type (arr)))
1842     return value_type (arr);
1843
1844   if (!bounds)
1845     {
1846       struct type *array_type =
1847         ada_check_typedef (desc_data_target_type (value_type (arr)));
1848
1849       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1850         TYPE_FIELD_BITSIZE (array_type, 0) =
1851           decode_packed_array_bitsize (value_type (arr));
1852       
1853       return array_type;
1854     }
1855   else
1856     {
1857       struct type *elt_type;
1858       int arity;
1859       struct value *descriptor;
1860
1861       elt_type = ada_array_element_type (value_type (arr), -1);
1862       arity = ada_array_arity (value_type (arr));
1863
1864       if (elt_type == NULL || arity == 0)
1865         return ada_check_typedef (value_type (arr));
1866
1867       descriptor = desc_bounds (arr);
1868       if (value_as_long (descriptor) == 0)
1869         return NULL;
1870       while (arity > 0)
1871         {
1872           struct type *range_type = alloc_type_copy (value_type (arr));
1873           struct type *array_type = alloc_type_copy (value_type (arr));
1874           struct value *low = desc_one_bound (descriptor, arity, 0);
1875           struct value *high = desc_one_bound (descriptor, arity, 1);
1876
1877           arity -= 1;
1878           create_range_type (range_type, value_type (low),
1879                              longest_to_int (value_as_long (low)),
1880                              longest_to_int (value_as_long (high)));
1881           elt_type = create_array_type (array_type, elt_type, range_type);
1882
1883           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1884             {
1885               /* We need to store the element packed bitsize, as well as
1886                  recompute the array size, because it was previously
1887                  computed based on the unpacked element size.  */
1888               LONGEST lo = value_as_long (low);
1889               LONGEST hi = value_as_long (high);
1890
1891               TYPE_FIELD_BITSIZE (elt_type, 0) =
1892                 decode_packed_array_bitsize (value_type (arr));
1893               /* If the array has no element, then the size is already
1894                  zero, and does not need to be recomputed.  */
1895               if (lo < hi)
1896                 {
1897                   int array_bitsize =
1898                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
1899
1900                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1901                 }
1902             }
1903         }
1904
1905       return lookup_pointer_type (elt_type);
1906     }
1907 }
1908
1909 /* If ARR does not represent an array, returns ARR unchanged.
1910    Otherwise, returns either a standard GDB array with bounds set
1911    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1912    GDB array.  Returns NULL if ARR is a null fat pointer.  */
1913
1914 struct value *
1915 ada_coerce_to_simple_array_ptr (struct value *arr)
1916 {
1917   if (ada_is_array_descriptor_type (value_type (arr)))
1918     {
1919       struct type *arrType = ada_type_of_array (arr, 1);
1920
1921       if (arrType == NULL)
1922         return NULL;
1923       return value_cast (arrType, value_copy (desc_data (arr)));
1924     }
1925   else if (ada_is_constrained_packed_array_type (value_type (arr)))
1926     return decode_constrained_packed_array (arr);
1927   else
1928     return arr;
1929 }
1930
1931 /* If ARR does not represent an array, returns ARR unchanged.
1932    Otherwise, returns a standard GDB array describing ARR (which may
1933    be ARR itself if it already is in the proper form).  */
1934
1935 struct value *
1936 ada_coerce_to_simple_array (struct value *arr)
1937 {
1938   if (ada_is_array_descriptor_type (value_type (arr)))
1939     {
1940       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1941
1942       if (arrVal == NULL)
1943         error (_("Bounds unavailable for null array pointer."));
1944       check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
1945       return value_ind (arrVal);
1946     }
1947   else if (ada_is_constrained_packed_array_type (value_type (arr)))
1948     return decode_constrained_packed_array (arr);
1949   else
1950     return arr;
1951 }
1952
1953 /* If TYPE represents a GNAT array type, return it translated to an
1954    ordinary GDB array type (possibly with BITSIZE fields indicating
1955    packing).  For other types, is the identity.  */
1956
1957 struct type *
1958 ada_coerce_to_simple_array_type (struct type *type)
1959 {
1960   if (ada_is_constrained_packed_array_type (type))
1961     return decode_constrained_packed_array_type (type);
1962
1963   if (ada_is_array_descriptor_type (type))
1964     return ada_check_typedef (desc_data_target_type (type));
1965
1966   return type;
1967 }
1968
1969 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
1970
1971 static int
1972 ada_is_packed_array_type  (struct type *type)
1973 {
1974   if (type == NULL)
1975     return 0;
1976   type = desc_base_type (type);
1977   type = ada_check_typedef (type);
1978   return
1979     ada_type_name (type) != NULL
1980     && strstr (ada_type_name (type), "___XP") != NULL;
1981 }
1982
1983 /* Non-zero iff TYPE represents a standard GNAT constrained
1984    packed-array type.  */
1985
1986 int
1987 ada_is_constrained_packed_array_type (struct type *type)
1988 {
1989   return ada_is_packed_array_type (type)
1990     && !ada_is_array_descriptor_type (type);
1991 }
1992
1993 /* Non-zero iff TYPE represents an array descriptor for a
1994    unconstrained packed-array type.  */
1995
1996 static int
1997 ada_is_unconstrained_packed_array_type (struct type *type)
1998 {
1999   return ada_is_packed_array_type (type)
2000     && ada_is_array_descriptor_type (type);
2001 }
2002
2003 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2004    return the size of its elements in bits.  */
2005
2006 static long
2007 decode_packed_array_bitsize (struct type *type)
2008 {
2009   const char *raw_name;
2010   const char *tail;
2011   long bits;
2012
2013   /* Access to arrays implemented as fat pointers are encoded as a typedef
2014      of the fat pointer type.  We need the name of the fat pointer type
2015      to do the decoding, so strip the typedef layer.  */
2016   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2017     type = ada_typedef_target_type (type);
2018
2019   raw_name = ada_type_name (ada_check_typedef (type));
2020   if (!raw_name)
2021     raw_name = ada_type_name (desc_base_type (type));
2022
2023   if (!raw_name)
2024     return 0;
2025
2026   tail = strstr (raw_name, "___XP");
2027   gdb_assert (tail != NULL);
2028
2029   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2030     {
2031       lim_warning
2032         (_("could not understand bit size information on packed array"));
2033       return 0;
2034     }
2035
2036   return bits;
2037 }
2038
2039 /* Given that TYPE is a standard GDB array type with all bounds filled
2040    in, and that the element size of its ultimate scalar constituents
2041    (that is, either its elements, or, if it is an array of arrays, its
2042    elements' elements, etc.) is *ELT_BITS, return an identical type,
2043    but with the bit sizes of its elements (and those of any
2044    constituent arrays) recorded in the BITSIZE components of its
2045    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2046    in bits.  */
2047
2048 static struct type *
2049 constrained_packed_array_type (struct type *type, long *elt_bits)
2050 {
2051   struct type *new_elt_type;
2052   struct type *new_type;
2053   struct type *index_type_desc;
2054   struct type *index_type;
2055   LONGEST low_bound, high_bound;
2056
2057   type = ada_check_typedef (type);
2058   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2059     return type;
2060
2061   index_type_desc = ada_find_parallel_type (type, "___XA");
2062   if (index_type_desc)
2063     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2064                                       NULL);
2065   else
2066     index_type = TYPE_INDEX_TYPE (type);
2067
2068   new_type = alloc_type_copy (type);
2069   new_elt_type =
2070     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2071                                    elt_bits);
2072   create_array_type (new_type, new_elt_type, index_type);
2073   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2074   TYPE_NAME (new_type) = ada_type_name (type);
2075
2076   if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2077     low_bound = high_bound = 0;
2078   if (high_bound < low_bound)
2079     *elt_bits = TYPE_LENGTH (new_type) = 0;
2080   else
2081     {
2082       *elt_bits *= (high_bound - low_bound + 1);
2083       TYPE_LENGTH (new_type) =
2084         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2085     }
2086
2087   TYPE_FIXED_INSTANCE (new_type) = 1;
2088   return new_type;
2089 }
2090
2091 /* The array type encoded by TYPE, where
2092    ada_is_constrained_packed_array_type (TYPE).  */
2093
2094 static struct type *
2095 decode_constrained_packed_array_type (struct type *type)
2096 {
2097   const char *raw_name = ada_type_name (ada_check_typedef (type));
2098   char *name;
2099   const char *tail;
2100   struct type *shadow_type;
2101   long bits;
2102
2103   if (!raw_name)
2104     raw_name = ada_type_name (desc_base_type (type));
2105
2106   if (!raw_name)
2107     return NULL;
2108
2109   name = (char *) alloca (strlen (raw_name) + 1);
2110   tail = strstr (raw_name, "___XP");
2111   type = desc_base_type (type);
2112
2113   memcpy (name, raw_name, tail - raw_name);
2114   name[tail - raw_name] = '\000';
2115
2116   shadow_type = ada_find_parallel_type_with_name (type, name);
2117
2118   if (shadow_type == NULL)
2119     {
2120       lim_warning (_("could not find bounds information on packed array"));
2121       return NULL;
2122     }
2123   CHECK_TYPEDEF (shadow_type);
2124
2125   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2126     {
2127       lim_warning (_("could not understand bounds "
2128                      "information on packed array"));
2129       return NULL;
2130     }
2131
2132   bits = decode_packed_array_bitsize (type);
2133   return constrained_packed_array_type (shadow_type, &bits);
2134 }
2135
2136 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2137    array, returns a simple array that denotes that array.  Its type is a
2138    standard GDB array type except that the BITSIZEs of the array
2139    target types are set to the number of bits in each element, and the
2140    type length is set appropriately.  */
2141
2142 static struct value *
2143 decode_constrained_packed_array (struct value *arr)
2144 {
2145   struct type *type;
2146
2147   arr = ada_coerce_ref (arr);
2148
2149   /* If our value is a pointer, then dererence it.  Make sure that
2150      this operation does not cause the target type to be fixed, as
2151      this would indirectly cause this array to be decoded.  The rest
2152      of the routine assumes that the array hasn't been decoded yet,
2153      so we use the basic "value_ind" routine to perform the dereferencing,
2154      as opposed to using "ada_value_ind".  */
2155   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2156     arr = value_ind (arr);
2157
2158   type = decode_constrained_packed_array_type (value_type (arr));
2159   if (type == NULL)
2160     {
2161       error (_("can't unpack array"));
2162       return NULL;
2163     }
2164
2165   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2166       && ada_is_modular_type (value_type (arr)))
2167     {
2168        /* This is a (right-justified) modular type representing a packed
2169          array with no wrapper.  In order to interpret the value through
2170          the (left-justified) packed array type we just built, we must
2171          first left-justify it.  */
2172       int bit_size, bit_pos;
2173       ULONGEST mod;
2174
2175       mod = ada_modulus (value_type (arr)) - 1;
2176       bit_size = 0;
2177       while (mod > 0)
2178         {
2179           bit_size += 1;
2180           mod >>= 1;
2181         }
2182       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2183       arr = ada_value_primitive_packed_val (arr, NULL,
2184                                             bit_pos / HOST_CHAR_BIT,
2185                                             bit_pos % HOST_CHAR_BIT,
2186                                             bit_size,
2187                                             type);
2188     }
2189
2190   return coerce_unspec_val_to_type (arr, type);
2191 }
2192
2193
2194 /* The value of the element of packed array ARR at the ARITY indices
2195    given in IND.   ARR must be a simple array.  */
2196
2197 static struct value *
2198 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2199 {
2200   int i;
2201   int bits, elt_off, bit_off;
2202   long elt_total_bit_offset;
2203   struct type *elt_type;
2204   struct value *v;
2205
2206   bits = 0;
2207   elt_total_bit_offset = 0;
2208   elt_type = ada_check_typedef (value_type (arr));
2209   for (i = 0; i < arity; i += 1)
2210     {
2211       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2212           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2213         error
2214           (_("attempt to do packed indexing of "
2215              "something other than a packed array"));
2216       else
2217         {
2218           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2219           LONGEST lowerbound, upperbound;
2220           LONGEST idx;
2221
2222           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2223             {
2224               lim_warning (_("don't know bounds of array"));
2225               lowerbound = upperbound = 0;
2226             }
2227
2228           idx = pos_atr (ind[i]);
2229           if (idx < lowerbound || idx > upperbound)
2230             lim_warning (_("packed array index %ld out of bounds"),
2231                          (long) idx);
2232           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2233           elt_total_bit_offset += (idx - lowerbound) * bits;
2234           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2235         }
2236     }
2237   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2238   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2239
2240   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2241                                       bits, elt_type);
2242   return v;
2243 }
2244
2245 /* Non-zero iff TYPE includes negative integer values.  */
2246
2247 static int
2248 has_negatives (struct type *type)
2249 {
2250   switch (TYPE_CODE (type))
2251     {
2252     default:
2253       return 0;
2254     case TYPE_CODE_INT:
2255       return !TYPE_UNSIGNED (type);
2256     case TYPE_CODE_RANGE:
2257       return TYPE_LOW_BOUND (type) < 0;
2258     }
2259 }
2260
2261
2262 /* Create a new value of type TYPE from the contents of OBJ starting
2263    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2264    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2265    assigning through the result will set the field fetched from.
2266    VALADDR is ignored unless OBJ is NULL, in which case,
2267    VALADDR+OFFSET must address the start of storage containing the 
2268    packed value.  The value returned  in this case is never an lval.
2269    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2270
2271 struct value *
2272 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2273                                 long offset, int bit_offset, int bit_size,
2274                                 struct type *type)
2275 {
2276   struct value *v;
2277   int src,                      /* Index into the source area */
2278     targ,                       /* Index into the target area */
2279     srcBitsLeft,                /* Number of source bits left to move */
2280     nsrc, ntarg,                /* Number of source and target bytes */
2281     unusedLS,                   /* Number of bits in next significant
2282                                    byte of source that are unused */
2283     accumSize;                  /* Number of meaningful bits in accum */
2284   unsigned char *bytes;         /* First byte containing data to unpack */
2285   unsigned char *unpacked;
2286   unsigned long accum;          /* Staging area for bits being transferred */
2287   unsigned char sign;
2288   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2289   /* Transmit bytes from least to most significant; delta is the direction
2290      the indices move.  */
2291   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2292
2293   type = ada_check_typedef (type);
2294
2295   if (obj == NULL)
2296     {
2297       v = allocate_value (type);
2298       bytes = (unsigned char *) (valaddr + offset);
2299     }
2300   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2301     {
2302       v = value_at (type, value_address (obj));
2303       bytes = (unsigned char *) alloca (len);
2304       read_memory (value_address (v) + offset, bytes, len);
2305     }
2306   else
2307     {
2308       v = allocate_value (type);
2309       bytes = (unsigned char *) value_contents (obj) + offset;
2310     }
2311
2312   if (obj != NULL)
2313     {
2314       long new_offset = offset;
2315
2316       set_value_component_location (v, obj);
2317       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2318       set_value_bitsize (v, bit_size);
2319       if (value_bitpos (v) >= HOST_CHAR_BIT)
2320         {
2321           ++new_offset;
2322           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2323         }
2324       set_value_offset (v, new_offset);
2325
2326       /* Also set the parent value.  This is needed when trying to
2327          assign a new value (in inferior memory).  */
2328       set_value_parent (v, obj);
2329     }
2330   else
2331     set_value_bitsize (v, bit_size);
2332   unpacked = (unsigned char *) value_contents (v);
2333
2334   srcBitsLeft = bit_size;
2335   nsrc = len;
2336   ntarg = TYPE_LENGTH (type);
2337   sign = 0;
2338   if (bit_size == 0)
2339     {
2340       memset (unpacked, 0, TYPE_LENGTH (type));
2341       return v;
2342     }
2343   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2344     {
2345       src = len - 1;
2346       if (has_negatives (type)
2347           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2348         sign = ~0;
2349
2350       unusedLS =
2351         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2352         % HOST_CHAR_BIT;
2353
2354       switch (TYPE_CODE (type))
2355         {
2356         case TYPE_CODE_ARRAY:
2357         case TYPE_CODE_UNION:
2358         case TYPE_CODE_STRUCT:
2359           /* Non-scalar values must be aligned at a byte boundary...  */
2360           accumSize =
2361             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2362           /* ... And are placed at the beginning (most-significant) bytes
2363              of the target.  */
2364           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2365           ntarg = targ + 1;
2366           break;
2367         default:
2368           accumSize = 0;
2369           targ = TYPE_LENGTH (type) - 1;
2370           break;
2371         }
2372     }
2373   else
2374     {
2375       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2376
2377       src = targ = 0;
2378       unusedLS = bit_offset;
2379       accumSize = 0;
2380
2381       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2382         sign = ~0;
2383     }
2384
2385   accum = 0;
2386   while (nsrc > 0)
2387     {
2388       /* Mask for removing bits of the next source byte that are not
2389          part of the value.  */
2390       unsigned int unusedMSMask =
2391         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2392         1;
2393       /* Sign-extend bits for this byte.  */
2394       unsigned int signMask = sign & ~unusedMSMask;
2395
2396       accum |=
2397         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2398       accumSize += HOST_CHAR_BIT - unusedLS;
2399       if (accumSize >= HOST_CHAR_BIT)
2400         {
2401           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2402           accumSize -= HOST_CHAR_BIT;
2403           accum >>= HOST_CHAR_BIT;
2404           ntarg -= 1;
2405           targ += delta;
2406         }
2407       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2408       unusedLS = 0;
2409       nsrc -= 1;
2410       src += delta;
2411     }
2412   while (ntarg > 0)
2413     {
2414       accum |= sign << accumSize;
2415       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2416       accumSize -= HOST_CHAR_BIT;
2417       accum >>= HOST_CHAR_BIT;
2418       ntarg -= 1;
2419       targ += delta;
2420     }
2421
2422   return v;
2423 }
2424
2425 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2426    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2427    not overlap.  */
2428 static void
2429 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2430            int src_offset, int n, int bits_big_endian_p)
2431 {
2432   unsigned int accum, mask;
2433   int accum_bits, chunk_size;
2434
2435   target += targ_offset / HOST_CHAR_BIT;
2436   targ_offset %= HOST_CHAR_BIT;
2437   source += src_offset / HOST_CHAR_BIT;
2438   src_offset %= HOST_CHAR_BIT;
2439   if (bits_big_endian_p)
2440     {
2441       accum = (unsigned char) *source;
2442       source += 1;
2443       accum_bits = HOST_CHAR_BIT - src_offset;
2444
2445       while (n > 0)
2446         {
2447           int unused_right;
2448
2449           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2450           accum_bits += HOST_CHAR_BIT;
2451           source += 1;
2452           chunk_size = HOST_CHAR_BIT - targ_offset;
2453           if (chunk_size > n)
2454             chunk_size = n;
2455           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2456           mask = ((1 << chunk_size) - 1) << unused_right;
2457           *target =
2458             (*target & ~mask)
2459             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2460           n -= chunk_size;
2461           accum_bits -= chunk_size;
2462           target += 1;
2463           targ_offset = 0;
2464         }
2465     }
2466   else
2467     {
2468       accum = (unsigned char) *source >> src_offset;
2469       source += 1;
2470       accum_bits = HOST_CHAR_BIT - src_offset;
2471
2472       while (n > 0)
2473         {
2474           accum = accum + ((unsigned char) *source << accum_bits);
2475           accum_bits += HOST_CHAR_BIT;
2476           source += 1;
2477           chunk_size = HOST_CHAR_BIT - targ_offset;
2478           if (chunk_size > n)
2479             chunk_size = n;
2480           mask = ((1 << chunk_size) - 1) << targ_offset;
2481           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2482           n -= chunk_size;
2483           accum_bits -= chunk_size;
2484           accum >>= chunk_size;
2485           target += 1;
2486           targ_offset = 0;
2487         }
2488     }
2489 }
2490
2491 /* Store the contents of FROMVAL into the location of TOVAL.
2492    Return a new value with the location of TOVAL and contents of
2493    FROMVAL.   Handles assignment into packed fields that have
2494    floating-point or non-scalar types.  */
2495
2496 static struct value *
2497 ada_value_assign (struct value *toval, struct value *fromval)
2498 {
2499   struct type *type = value_type (toval);
2500   int bits = value_bitsize (toval);
2501
2502   toval = ada_coerce_ref (toval);
2503   fromval = ada_coerce_ref (fromval);
2504
2505   if (ada_is_direct_array_type (value_type (toval)))
2506     toval = ada_coerce_to_simple_array (toval);
2507   if (ada_is_direct_array_type (value_type (fromval)))
2508     fromval = ada_coerce_to_simple_array (fromval);
2509
2510   if (!deprecated_value_modifiable (toval))
2511     error (_("Left operand of assignment is not a modifiable lvalue."));
2512
2513   if (VALUE_LVAL (toval) == lval_memory
2514       && bits > 0
2515       && (TYPE_CODE (type) == TYPE_CODE_FLT
2516           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2517     {
2518       int len = (value_bitpos (toval)
2519                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2520       int from_size;
2521       gdb_byte *buffer = alloca (len);
2522       struct value *val;
2523       CORE_ADDR to_addr = value_address (toval);
2524
2525       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2526         fromval = value_cast (type, fromval);
2527
2528       read_memory (to_addr, buffer, len);
2529       from_size = value_bitsize (fromval);
2530       if (from_size == 0)
2531         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2532       if (gdbarch_bits_big_endian (get_type_arch (type)))
2533         move_bits (buffer, value_bitpos (toval),
2534                    value_contents (fromval), from_size - bits, bits, 1);
2535       else
2536         move_bits (buffer, value_bitpos (toval),
2537                    value_contents (fromval), 0, bits, 0);
2538       write_memory_with_notification (to_addr, buffer, len);
2539
2540       val = value_copy (toval);
2541       memcpy (value_contents_raw (val), value_contents (fromval),
2542               TYPE_LENGTH (type));
2543       deprecated_set_value_type (val, type);
2544
2545       return val;
2546     }
2547
2548   return value_assign (toval, fromval);
2549 }
2550
2551
2552 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2553  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2554  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2555  * COMPONENT, and not the inferior's memory.  The current contents 
2556  * of COMPONENT are ignored.  */
2557 static void
2558 value_assign_to_component (struct value *container, struct value *component,
2559                            struct value *val)
2560 {
2561   LONGEST offset_in_container =
2562     (LONGEST)  (value_address (component) - value_address (container));
2563   int bit_offset_in_container = 
2564     value_bitpos (component) - value_bitpos (container);
2565   int bits;
2566   
2567   val = value_cast (value_type (component), val);
2568
2569   if (value_bitsize (component) == 0)
2570     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2571   else
2572     bits = value_bitsize (component);
2573
2574   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2575     move_bits (value_contents_writeable (container) + offset_in_container, 
2576                value_bitpos (container) + bit_offset_in_container,
2577                value_contents (val),
2578                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2579                bits, 1);
2580   else
2581     move_bits (value_contents_writeable (container) + offset_in_container, 
2582                value_bitpos (container) + bit_offset_in_container,
2583                value_contents (val), 0, bits, 0);
2584 }              
2585                         
2586 /* The value of the element of array ARR at the ARITY indices given in IND.
2587    ARR may be either a simple array, GNAT array descriptor, or pointer
2588    thereto.  */
2589
2590 struct value *
2591 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2592 {
2593   int k;
2594   struct value *elt;
2595   struct type *elt_type;
2596
2597   elt = ada_coerce_to_simple_array (arr);
2598
2599   elt_type = ada_check_typedef (value_type (elt));
2600   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2601       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2602     return value_subscript_packed (elt, arity, ind);
2603
2604   for (k = 0; k < arity; k += 1)
2605     {
2606       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2607         error (_("too many subscripts (%d expected)"), k);
2608       elt = value_subscript (elt, pos_atr (ind[k]));
2609     }
2610   return elt;
2611 }
2612
2613 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2614    value of the element of *ARR at the ARITY indices given in
2615    IND.  Does not read the entire array into memory.  */
2616
2617 static struct value *
2618 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2619                          struct value **ind)
2620 {
2621   int k;
2622
2623   for (k = 0; k < arity; k += 1)
2624     {
2625       LONGEST lwb, upb;
2626
2627       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2628         error (_("too many subscripts (%d expected)"), k);
2629       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2630                         value_copy (arr));
2631       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2632       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2633       type = TYPE_TARGET_TYPE (type);
2634     }
2635
2636   return value_ind (arr);
2637 }
2638
2639 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2640    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2641    elements starting at index LOW.  The lower bound of this array is LOW, as
2642    per Ada rules.  */
2643 static struct value *
2644 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2645                           int low, int high)
2646 {
2647   struct type *type0 = ada_check_typedef (type);
2648   CORE_ADDR base = value_as_address (array_ptr)
2649     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2650        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2651   struct type *index_type =
2652     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2653                        low, high);
2654   struct type *slice_type =
2655     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2656
2657   return value_at_lazy (slice_type, base);
2658 }
2659
2660
2661 static struct value *
2662 ada_value_slice (struct value *array, int low, int high)
2663 {
2664   struct type *type = ada_check_typedef (value_type (array));
2665   struct type *index_type =
2666     create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2667   struct type *slice_type =
2668     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2669
2670   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2671 }
2672
2673 /* If type is a record type in the form of a standard GNAT array
2674    descriptor, returns the number of dimensions for type.  If arr is a
2675    simple array, returns the number of "array of"s that prefix its
2676    type designation.  Otherwise, returns 0.  */
2677
2678 int
2679 ada_array_arity (struct type *type)
2680 {
2681   int arity;
2682
2683   if (type == NULL)
2684     return 0;
2685
2686   type = desc_base_type (type);
2687
2688   arity = 0;
2689   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2690     return desc_arity (desc_bounds_type (type));
2691   else
2692     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2693       {
2694         arity += 1;
2695         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2696       }
2697
2698   return arity;
2699 }
2700
2701 /* If TYPE is a record type in the form of a standard GNAT array
2702    descriptor or a simple array type, returns the element type for
2703    TYPE after indexing by NINDICES indices, or by all indices if
2704    NINDICES is -1.  Otherwise, returns NULL.  */
2705
2706 struct type *
2707 ada_array_element_type (struct type *type, int nindices)
2708 {
2709   type = desc_base_type (type);
2710
2711   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2712     {
2713       int k;
2714       struct type *p_array_type;
2715
2716       p_array_type = desc_data_target_type (type);
2717
2718       k = ada_array_arity (type);
2719       if (k == 0)
2720         return NULL;
2721
2722       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2723       if (nindices >= 0 && k > nindices)
2724         k = nindices;
2725       while (k > 0 && p_array_type != NULL)
2726         {
2727           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2728           k -= 1;
2729         }
2730       return p_array_type;
2731     }
2732   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2733     {
2734       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2735         {
2736           type = TYPE_TARGET_TYPE (type);
2737           nindices -= 1;
2738         }
2739       return type;
2740     }
2741
2742   return NULL;
2743 }
2744
2745 /* The type of nth index in arrays of given type (n numbering from 1).
2746    Does not examine memory.  Throws an error if N is invalid or TYPE
2747    is not an array type.  NAME is the name of the Ada attribute being
2748    evaluated ('range, 'first, 'last, or 'length); it is used in building
2749    the error message.  */
2750
2751 static struct type *
2752 ada_index_type (struct type *type, int n, const char *name)
2753 {
2754   struct type *result_type;
2755
2756   type = desc_base_type (type);
2757
2758   if (n < 0 || n > ada_array_arity (type))
2759     error (_("invalid dimension number to '%s"), name);
2760
2761   if (ada_is_simple_array_type (type))
2762     {
2763       int i;
2764
2765       for (i = 1; i < n; i += 1)
2766         type = TYPE_TARGET_TYPE (type);
2767       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2768       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2769          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2770          perhaps stabsread.c would make more sense.  */
2771       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2772         result_type = NULL;
2773     }
2774   else
2775     {
2776       result_type = desc_index_type (desc_bounds_type (type), n);
2777       if (result_type == NULL)
2778         error (_("attempt to take bound of something that is not an array"));
2779     }
2780
2781   return result_type;
2782 }
2783
2784 /* Given that arr is an array type, returns the lower bound of the
2785    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2786    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2787    array-descriptor type.  It works for other arrays with bounds supplied
2788    by run-time quantities other than discriminants.  */
2789
2790 static LONGEST
2791 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2792 {
2793   struct type *type, *index_type_desc, *index_type;
2794   int i;
2795
2796   gdb_assert (which == 0 || which == 1);
2797
2798   if (ada_is_constrained_packed_array_type (arr_type))
2799     arr_type = decode_constrained_packed_array_type (arr_type);
2800
2801   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2802     return (LONGEST) - which;
2803
2804   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2805     type = TYPE_TARGET_TYPE (arr_type);
2806   else
2807     type = arr_type;
2808
2809   index_type_desc = ada_find_parallel_type (type, "___XA");
2810   ada_fixup_array_indexes_type (index_type_desc);
2811   if (index_type_desc != NULL)
2812     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2813                                       NULL);
2814   else
2815     {
2816       struct type *elt_type = check_typedef (type);
2817
2818       for (i = 1; i < n; i++)
2819         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2820
2821       index_type = TYPE_INDEX_TYPE (elt_type);
2822     }
2823
2824   return
2825     (LONGEST) (which == 0
2826                ? ada_discrete_type_low_bound (index_type)
2827                : ada_discrete_type_high_bound (index_type));
2828 }
2829
2830 /* Given that arr is an array value, returns the lower bound of the
2831    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2832    WHICH is 1.  This routine will also work for arrays with bounds
2833    supplied by run-time quantities other than discriminants.  */
2834
2835 static LONGEST
2836 ada_array_bound (struct value *arr, int n, int which)
2837 {
2838   struct type *arr_type = value_type (arr);
2839
2840   if (ada_is_constrained_packed_array_type (arr_type))
2841     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2842   else if (ada_is_simple_array_type (arr_type))
2843     return ada_array_bound_from_type (arr_type, n, which);
2844   else
2845     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2846 }
2847
2848 /* Given that arr is an array value, returns the length of the
2849    nth index.  This routine will also work for arrays with bounds
2850    supplied by run-time quantities other than discriminants.
2851    Does not work for arrays indexed by enumeration types with representation
2852    clauses at the moment.  */
2853
2854 static LONGEST
2855 ada_array_length (struct value *arr, int n)
2856 {
2857   struct type *arr_type = ada_check_typedef (value_type (arr));
2858
2859   if (ada_is_constrained_packed_array_type (arr_type))
2860     return ada_array_length (decode_constrained_packed_array (arr), n);
2861
2862   if (ada_is_simple_array_type (arr_type))
2863     return (ada_array_bound_from_type (arr_type, n, 1)
2864             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2865   else
2866     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2867             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2868 }
2869
2870 /* An empty array whose type is that of ARR_TYPE (an array type),
2871    with bounds LOW to LOW-1.  */
2872
2873 static struct value *
2874 empty_array (struct type *arr_type, int low)
2875 {
2876   struct type *arr_type0 = ada_check_typedef (arr_type);
2877   struct type *index_type =
2878     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),
2879                        low, low - 1);
2880   struct type *elt_type = ada_array_element_type (arr_type0, 1);
2881
2882   return allocate_value (create_array_type (NULL, elt_type, index_type));
2883 }
2884 \f
2885
2886                                 /* Name resolution */
2887
2888 /* The "decoded" name for the user-definable Ada operator corresponding
2889    to OP.  */
2890
2891 static const char *
2892 ada_decoded_op_name (enum exp_opcode op)
2893 {
2894   int i;
2895
2896   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2897     {
2898       if (ada_opname_table[i].op == op)
2899         return ada_opname_table[i].decoded;
2900     }
2901   error (_("Could not find operator name for opcode"));
2902 }
2903
2904
2905 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2906    references (marked by OP_VAR_VALUE nodes in which the symbol has an
2907    undefined namespace) and converts operators that are
2908    user-defined into appropriate function calls.  If CONTEXT_TYPE is
2909    non-null, it provides a preferred result type [at the moment, only
2910    type void has any effect---causing procedures to be preferred over
2911    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
2912    return type is preferred.  May change (expand) *EXP.  */
2913
2914 static void
2915 resolve (struct expression **expp, int void_context_p)
2916 {
2917   struct type *context_type = NULL;
2918   int pc = 0;
2919
2920   if (void_context_p)
2921     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
2922
2923   resolve_subexp (expp, &pc, 1, context_type);
2924 }
2925
2926 /* Resolve the operator of the subexpression beginning at
2927    position *POS of *EXPP.  "Resolving" consists of replacing
2928    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2929    with their resolutions, replacing built-in operators with
2930    function calls to user-defined operators, where appropriate, and,
2931    when DEPROCEDURE_P is non-zero, converting function-valued variables
2932    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
2933    are as in ada_resolve, above.  */
2934
2935 static struct value *
2936 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2937                 struct type *context_type)
2938 {
2939   int pc = *pos;
2940   int i;
2941   struct expression *exp;       /* Convenience: == *expp.  */
2942   enum exp_opcode op = (*expp)->elts[pc].opcode;
2943   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
2944   int nargs;                    /* Number of operands.  */
2945   int oplen;
2946
2947   argvec = NULL;
2948   nargs = 0;
2949   exp = *expp;
2950
2951   /* Pass one: resolve operands, saving their types and updating *pos,
2952      if needed.  */
2953   switch (op)
2954     {
2955     case OP_FUNCALL:
2956       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2957           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2958         *pos += 7;
2959       else
2960         {
2961           *pos += 3;
2962           resolve_subexp (expp, pos, 0, NULL);
2963         }
2964       nargs = longest_to_int (exp->elts[pc + 1].longconst);
2965       break;
2966
2967     case UNOP_ADDR:
2968       *pos += 1;
2969       resolve_subexp (expp, pos, 0, NULL);
2970       break;
2971
2972     case UNOP_QUAL:
2973       *pos += 3;
2974       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
2975       break;
2976
2977     case OP_ATR_MODULUS:
2978     case OP_ATR_SIZE:
2979     case OP_ATR_TAG:
2980     case OP_ATR_FIRST:
2981     case OP_ATR_LAST:
2982     case OP_ATR_LENGTH:
2983     case OP_ATR_POS:
2984     case OP_ATR_VAL:
2985     case OP_ATR_MIN:
2986     case OP_ATR_MAX:
2987     case TERNOP_IN_RANGE:
2988     case BINOP_IN_BOUNDS:
2989     case UNOP_IN_RANGE:
2990     case OP_AGGREGATE:
2991     case OP_OTHERS:
2992     case OP_CHOICES:
2993     case OP_POSITIONAL:
2994     case OP_DISCRETE_RANGE:
2995     case OP_NAME:
2996       ada_forward_operator_length (exp, pc, &oplen, &nargs);
2997       *pos += oplen;
2998       break;
2999
3000     case BINOP_ASSIGN:
3001       {
3002         struct value *arg1;
3003
3004         *pos += 1;
3005         arg1 = resolve_subexp (expp, pos, 0, NULL);
3006         if (arg1 == NULL)
3007           resolve_subexp (expp, pos, 1, NULL);
3008         else
3009           resolve_subexp (expp, pos, 1, value_type (arg1));
3010         break;
3011       }
3012
3013     case UNOP_CAST:
3014       *pos += 3;
3015       nargs = 1;
3016       break;
3017
3018     case BINOP_ADD:
3019     case BINOP_SUB:
3020     case BINOP_MUL:
3021     case BINOP_DIV:
3022     case BINOP_REM:
3023     case BINOP_MOD:
3024     case BINOP_EXP:
3025     case BINOP_CONCAT:
3026     case BINOP_LOGICAL_AND:
3027     case BINOP_LOGICAL_OR:
3028     case BINOP_BITWISE_AND:
3029     case BINOP_BITWISE_IOR:
3030     case BINOP_BITWISE_XOR:
3031
3032     case BINOP_EQUAL:
3033     case BINOP_NOTEQUAL:
3034     case BINOP_LESS:
3035     case BINOP_GTR:
3036     case BINOP_LEQ:
3037     case BINOP_GEQ:
3038
3039     case BINOP_REPEAT:
3040     case BINOP_SUBSCRIPT:
3041     case BINOP_COMMA:
3042       *pos += 1;
3043       nargs = 2;
3044       break;
3045
3046     case UNOP_NEG:
3047     case UNOP_PLUS:
3048     case UNOP_LOGICAL_NOT:
3049     case UNOP_ABS:
3050     case UNOP_IND:
3051       *pos += 1;
3052       nargs = 1;
3053       break;
3054
3055     case OP_LONG:
3056     case OP_DOUBLE:
3057     case OP_VAR_VALUE:
3058       *pos += 4;
3059       break;
3060
3061     case OP_TYPE:
3062     case OP_BOOL:
3063     case OP_LAST:
3064     case OP_INTERNALVAR:
3065       *pos += 3;
3066       break;
3067
3068     case UNOP_MEMVAL:
3069       *pos += 3;
3070       nargs = 1;
3071       break;
3072
3073     case OP_REGISTER:
3074       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3075       break;
3076
3077     case STRUCTOP_STRUCT:
3078       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3079       nargs = 1;
3080       break;
3081
3082     case TERNOP_SLICE:
3083       *pos += 1;
3084       nargs = 3;
3085       break;
3086
3087     case OP_STRING:
3088       break;
3089
3090     default:
3091       error (_("Unexpected operator during name resolution"));
3092     }
3093
3094   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3095   for (i = 0; i < nargs; i += 1)
3096     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3097   argvec[i] = NULL;
3098   exp = *expp;
3099
3100   /* Pass two: perform any resolution on principal operator.  */
3101   switch (op)
3102     {
3103     default:
3104       break;
3105
3106     case OP_VAR_VALUE:
3107       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3108         {
3109           struct ada_symbol_info *candidates;
3110           int n_candidates;
3111
3112           n_candidates =
3113             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3114                                     (exp->elts[pc + 2].symbol),
3115                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3116                                     &candidates);
3117
3118           if (n_candidates > 1)
3119             {
3120               /* Types tend to get re-introduced locally, so if there
3121                  are any local symbols that are not types, first filter
3122                  out all types.  */
3123               int j;
3124               for (j = 0; j < n_candidates; j += 1)
3125                 switch (SYMBOL_CLASS (candidates[j].sym))
3126                   {
3127                   case LOC_REGISTER:
3128                   case LOC_ARG:
3129                   case LOC_REF_ARG:
3130                   case LOC_REGPARM_ADDR:
3131                   case LOC_LOCAL:
3132                   case LOC_COMPUTED:
3133                     goto FoundNonType;
3134                   default:
3135                     break;
3136                   }
3137             FoundNonType:
3138               if (j < n_candidates)
3139                 {
3140                   j = 0;
3141                   while (j < n_candidates)
3142                     {
3143                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3144                         {
3145                           candidates[j] = candidates[n_candidates - 1];
3146                           n_candidates -= 1;
3147                         }
3148                       else
3149                         j += 1;
3150                     }
3151                 }
3152             }
3153
3154           if (n_candidates == 0)
3155             error (_("No definition found for %s"),
3156                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3157           else if (n_candidates == 1)
3158             i = 0;
3159           else if (deprocedure_p
3160                    && !is_nonfunction (candidates, n_candidates))
3161             {
3162               i = ada_resolve_function
3163                 (candidates, n_candidates, NULL, 0,
3164                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3165                  context_type);
3166               if (i < 0)
3167                 error (_("Could not find a match for %s"),
3168                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3169             }
3170           else
3171             {
3172               printf_filtered (_("Multiple matches for %s\n"),
3173                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3174               user_select_syms (candidates, n_candidates, 1);
3175               i = 0;
3176             }
3177
3178           exp->elts[pc + 1].block = candidates[i].block;
3179           exp->elts[pc + 2].symbol = candidates[i].sym;
3180           if (innermost_block == NULL
3181               || contained_in (candidates[i].block, innermost_block))
3182             innermost_block = candidates[i].block;
3183         }
3184
3185       if (deprocedure_p
3186           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3187               == TYPE_CODE_FUNC))
3188         {
3189           replace_operator_with_call (expp, pc, 0, 0,
3190                                       exp->elts[pc + 2].symbol,
3191                                       exp->elts[pc + 1].block);
3192           exp = *expp;
3193         }
3194       break;
3195
3196     case OP_FUNCALL:
3197       {
3198         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3199             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3200           {
3201             struct ada_symbol_info *candidates;
3202             int n_candidates;
3203
3204             n_candidates =
3205               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3206                                       (exp->elts[pc + 5].symbol),
3207                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3208                                       &candidates);
3209             if (n_candidates == 1)
3210               i = 0;
3211             else
3212               {
3213                 i = ada_resolve_function
3214                   (candidates, n_candidates,
3215                    argvec, nargs,
3216                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3217                    context_type);
3218                 if (i < 0)
3219                   error (_("Could not find a match for %s"),
3220                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3221               }
3222
3223             exp->elts[pc + 4].block = candidates[i].block;
3224             exp->elts[pc + 5].symbol = candidates[i].sym;
3225             if (innermost_block == NULL
3226                 || contained_in (candidates[i].block, innermost_block))
3227               innermost_block = candidates[i].block;
3228           }
3229       }
3230       break;
3231     case BINOP_ADD:
3232     case BINOP_SUB:
3233     case BINOP_MUL:
3234     case BINOP_DIV:
3235     case BINOP_REM:
3236     case BINOP_MOD:
3237     case BINOP_CONCAT:
3238     case BINOP_BITWISE_AND:
3239     case BINOP_BITWISE_IOR:
3240     case BINOP_BITWISE_XOR:
3241     case BINOP_EQUAL:
3242     case BINOP_NOTEQUAL:
3243     case BINOP_LESS:
3244     case BINOP_GTR:
3245     case BINOP_LEQ:
3246     case BINOP_GEQ:
3247     case BINOP_EXP:
3248     case UNOP_NEG:
3249     case UNOP_PLUS:
3250     case UNOP_LOGICAL_NOT:
3251     case UNOP_ABS:
3252       if (possible_user_operator_p (op, argvec))
3253         {
3254           struct ada_symbol_info *candidates;
3255           int n_candidates;
3256
3257           n_candidates =
3258             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3259                                     (struct block *) NULL, VAR_DOMAIN,
3260                                     &candidates);
3261           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3262                                     ada_decoded_op_name (op), NULL);
3263           if (i < 0)
3264             break;
3265
3266           replace_operator_with_call (expp, pc, nargs, 1,
3267                                       candidates[i].sym, candidates[i].block);
3268           exp = *expp;
3269         }
3270       break;
3271
3272     case OP_TYPE:
3273     case OP_REGISTER:
3274       return NULL;
3275     }
3276
3277   *pos = pc;
3278   return evaluate_subexp_type (exp, pos);
3279 }
3280
3281 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3282    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3283    a non-pointer.  */
3284 /* The term "match" here is rather loose.  The match is heuristic and
3285    liberal.  */
3286
3287 static int
3288 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3289 {
3290   ftype = ada_check_typedef (ftype);
3291   atype = ada_check_typedef (atype);
3292
3293   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3294     ftype = TYPE_TARGET_TYPE (ftype);
3295   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3296     atype = TYPE_TARGET_TYPE (atype);
3297
3298   switch (TYPE_CODE (ftype))
3299     {
3300     default:
3301       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3302     case TYPE_CODE_PTR:
3303       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3304         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3305                                TYPE_TARGET_TYPE (atype), 0);
3306       else
3307         return (may_deref
3308                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3309     case TYPE_CODE_INT:
3310     case TYPE_CODE_ENUM:
3311     case TYPE_CODE_RANGE:
3312       switch (TYPE_CODE (atype))
3313         {
3314         case TYPE_CODE_INT:
3315         case TYPE_CODE_ENUM:
3316         case TYPE_CODE_RANGE:
3317           return 1;
3318         default:
3319           return 0;
3320         }
3321
3322     case TYPE_CODE_ARRAY:
3323       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3324               || ada_is_array_descriptor_type (atype));
3325
3326     case TYPE_CODE_STRUCT:
3327       if (ada_is_array_descriptor_type (ftype))
3328         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3329                 || ada_is_array_descriptor_type (atype));
3330       else
3331         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3332                 && !ada_is_array_descriptor_type (atype));
3333
3334     case TYPE_CODE_UNION:
3335     case TYPE_CODE_FLT:
3336       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3337     }
3338 }
3339
3340 /* Return non-zero if the formals of FUNC "sufficiently match" the
3341    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3342    may also be an enumeral, in which case it is treated as a 0-
3343    argument function.  */
3344
3345 static int
3346 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3347 {
3348   int i;
3349   struct type *func_type = SYMBOL_TYPE (func);
3350
3351   if (SYMBOL_CLASS (func) == LOC_CONST
3352       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3353     return (n_actuals == 0);
3354   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3355     return 0;
3356
3357   if (TYPE_NFIELDS (func_type) != n_actuals)
3358     return 0;
3359
3360   for (i = 0; i < n_actuals; i += 1)
3361     {
3362       if (actuals[i] == NULL)
3363         return 0;
3364       else
3365         {
3366           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3367                                                                    i));
3368           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3369
3370           if (!ada_type_match (ftype, atype, 1))
3371             return 0;
3372         }
3373     }
3374   return 1;
3375 }
3376
3377 /* False iff function type FUNC_TYPE definitely does not produce a value
3378    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3379    FUNC_TYPE is not a valid function type with a non-null return type
3380    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3381
3382 static int
3383 return_match (struct type *func_type, struct type *context_type)
3384 {
3385   struct type *return_type;
3386
3387   if (func_type == NULL)
3388     return 1;
3389
3390   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3391     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3392   else
3393     return_type = get_base_type (func_type);
3394   if (return_type == NULL)
3395     return 1;
3396
3397   context_type = get_base_type (context_type);
3398
3399   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3400     return context_type == NULL || return_type == context_type;
3401   else if (context_type == NULL)
3402     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3403   else
3404     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3405 }
3406
3407
3408 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3409    function (if any) that matches the types of the NARGS arguments in
3410    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3411    that returns that type, then eliminate matches that don't.  If
3412    CONTEXT_TYPE is void and there is at least one match that does not
3413    return void, eliminate all matches that do.
3414
3415    Asks the user if there is more than one match remaining.  Returns -1
3416    if there is no such symbol or none is selected.  NAME is used
3417    solely for messages.  May re-arrange and modify SYMS in
3418    the process; the index returned is for the modified vector.  */
3419
3420 static int
3421 ada_resolve_function (struct ada_symbol_info syms[],
3422                       int nsyms, struct value **args, int nargs,
3423                       const char *name, struct type *context_type)
3424 {
3425   int fallback;
3426   int k;
3427   int m;                        /* Number of hits */
3428
3429   m = 0;
3430   /* In the first pass of the loop, we only accept functions matching
3431      context_type.  If none are found, we add a second pass of the loop
3432      where every function is accepted.  */
3433   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3434     {
3435       for (k = 0; k < nsyms; k += 1)
3436         {
3437           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3438
3439           if (ada_args_match (syms[k].sym, args, nargs)
3440               && (fallback || return_match (type, context_type)))
3441             {
3442               syms[m] = syms[k];
3443               m += 1;
3444             }
3445         }
3446     }
3447
3448   if (m == 0)
3449     return -1;
3450   else if (m > 1)
3451     {
3452       printf_filtered (_("Multiple matches for %s\n"), name);
3453       user_select_syms (syms, m, 1);
3454       return 0;
3455     }
3456   return 0;
3457 }
3458
3459 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3460    in a listing of choices during disambiguation (see sort_choices, below).
3461    The idea is that overloadings of a subprogram name from the
3462    same package should sort in their source order.  We settle for ordering
3463    such symbols by their trailing number (__N  or $N).  */
3464
3465 static int
3466 encoded_ordered_before (const char *N0, const char *N1)
3467 {
3468   if (N1 == NULL)
3469     return 0;
3470   else if (N0 == NULL)
3471     return 1;
3472   else
3473     {
3474       int k0, k1;
3475
3476       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3477         ;
3478       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3479         ;
3480       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3481           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3482         {
3483           int n0, n1;
3484
3485           n0 = k0;
3486           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3487             n0 -= 1;
3488           n1 = k1;
3489           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3490             n1 -= 1;
3491           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3492             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3493         }
3494       return (strcmp (N0, N1) < 0);
3495     }
3496 }
3497
3498 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3499    encoded names.  */
3500
3501 static void
3502 sort_choices (struct ada_symbol_info syms[], int nsyms)
3503 {
3504   int i;
3505
3506   for (i = 1; i < nsyms; i += 1)
3507     {
3508       struct ada_symbol_info sym = syms[i];
3509       int j;
3510
3511       for (j = i - 1; j >= 0; j -= 1)
3512         {
3513           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3514                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3515             break;
3516           syms[j + 1] = syms[j];
3517         }
3518       syms[j + 1] = sym;
3519     }
3520 }
3521
3522 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3523    by asking the user (if necessary), returning the number selected, 
3524    and setting the first elements of SYMS items.  Error if no symbols
3525    selected.  */
3526
3527 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3528    to be re-integrated one of these days.  */
3529
3530 int
3531 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3532 {
3533   int i;
3534   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3535   int n_chosen;
3536   int first_choice = (max_results == 1) ? 1 : 2;
3537   const char *select_mode = multiple_symbols_select_mode ();
3538
3539   if (max_results < 1)
3540     error (_("Request to select 0 symbols!"));
3541   if (nsyms <= 1)
3542     return nsyms;
3543
3544   if (select_mode == multiple_symbols_cancel)
3545     error (_("\
3546 canceled because the command is ambiguous\n\
3547 See set/show multiple-symbol."));
3548   
3549   /* If select_mode is "all", then return all possible symbols.
3550      Only do that if more than one symbol can be selected, of course.
3551      Otherwise, display the menu as usual.  */
3552   if (select_mode == multiple_symbols_all && max_results > 1)
3553     return nsyms;
3554
3555   printf_unfiltered (_("[0] cancel\n"));
3556   if (max_results > 1)
3557     printf_unfiltered (_("[1] all\n"));
3558
3559   sort_choices (syms, nsyms);
3560
3561   for (i = 0; i < nsyms; i += 1)
3562     {
3563       if (syms[i].sym == NULL)
3564         continue;
3565
3566       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3567         {
3568           struct symtab_and_line sal =
3569             find_function_start_sal (syms[i].sym, 1);
3570
3571           if (sal.symtab == NULL)
3572             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3573                                i + first_choice,
3574                                SYMBOL_PRINT_NAME (syms[i].sym),
3575                                sal.line);
3576           else
3577             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3578                                SYMBOL_PRINT_NAME (syms[i].sym),
3579                                symtab_to_filename_for_display (sal.symtab),
3580                                sal.line);
3581           continue;
3582         }
3583       else
3584         {
3585           int is_enumeral =
3586             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3587              && SYMBOL_TYPE (syms[i].sym) != NULL
3588              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3589           struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
3590
3591           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3592             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3593                                i + first_choice,
3594                                SYMBOL_PRINT_NAME (syms[i].sym),
3595                                symtab_to_filename_for_display (symtab),
3596                                SYMBOL_LINE (syms[i].sym));
3597           else if (is_enumeral
3598                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3599             {
3600               printf_unfiltered (("[%d] "), i + first_choice);
3601               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3602                               gdb_stdout, -1, 0, &type_print_raw_options);
3603               printf_unfiltered (_("'(%s) (enumeral)\n"),
3604                                  SYMBOL_PRINT_NAME (syms[i].sym));
3605             }
3606           else if (symtab != NULL)
3607             printf_unfiltered (is_enumeral
3608                                ? _("[%d] %s in %s (enumeral)\n")
3609                                : _("[%d] %s at %s:?\n"),
3610                                i + first_choice,
3611                                SYMBOL_PRINT_NAME (syms[i].sym),
3612                                symtab_to_filename_for_display (symtab));
3613           else
3614             printf_unfiltered (is_enumeral
3615                                ? _("[%d] %s (enumeral)\n")
3616                                : _("[%d] %s at ?\n"),
3617                                i + first_choice,
3618                                SYMBOL_PRINT_NAME (syms[i].sym));
3619         }
3620     }
3621
3622   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3623                              "overload-choice");
3624
3625   for (i = 0; i < n_chosen; i += 1)
3626     syms[i] = syms[chosen[i]];
3627
3628   return n_chosen;
3629 }
3630
3631 /* Read and validate a set of numeric choices from the user in the
3632    range 0 .. N_CHOICES-1.  Place the results in increasing
3633    order in CHOICES[0 .. N-1], and return N.
3634
3635    The user types choices as a sequence of numbers on one line
3636    separated by blanks, encoding them as follows:
3637
3638      + A choice of 0 means to cancel the selection, throwing an error.
3639      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3640      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3641
3642    The user is not allowed to choose more than MAX_RESULTS values.
3643
3644    ANNOTATION_SUFFIX, if present, is used to annotate the input
3645    prompts (for use with the -f switch).  */
3646
3647 int
3648 get_selections (int *choices, int n_choices, int max_results,
3649                 int is_all_choice, char *annotation_suffix)
3650 {
3651   char *args;
3652   char *prompt;
3653   int n_chosen;
3654   int first_choice = is_all_choice ? 2 : 1;
3655
3656   prompt = getenv ("PS2");
3657   if (prompt == NULL)
3658     prompt = "> ";
3659
3660   args = command_line_input (prompt, 0, annotation_suffix);
3661
3662   if (args == NULL)
3663     error_no_arg (_("one or more choice numbers"));
3664
3665   n_chosen = 0;
3666
3667   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3668      order, as given in args.  Choices are validated.  */
3669   while (1)
3670     {
3671       char *args2;
3672       int choice, j;
3673
3674       args = skip_spaces (args);
3675       if (*args == '\0' && n_chosen == 0)
3676         error_no_arg (_("one or more choice numbers"));
3677       else if (*args == '\0')
3678         break;
3679
3680       choice = strtol (args, &args2, 10);
3681       if (args == args2 || choice < 0
3682           || choice > n_choices + first_choice - 1)
3683         error (_("Argument must be choice number"));
3684       args = args2;
3685
3686       if (choice == 0)
3687         error (_("cancelled"));
3688
3689       if (choice < first_choice)
3690         {
3691           n_chosen = n_choices;
3692           for (j = 0; j < n_choices; j += 1)
3693             choices[j] = j;
3694           break;
3695         }
3696       choice -= first_choice;
3697
3698       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3699         {
3700         }
3701
3702       if (j < 0 || choice != choices[j])
3703         {
3704           int k;
3705
3706           for (k = n_chosen - 1; k > j; k -= 1)
3707             choices[k + 1] = choices[k];
3708           choices[j + 1] = choice;
3709           n_chosen += 1;
3710         }
3711     }
3712
3713   if (n_chosen > max_results)
3714     error (_("Select no more than %d of the above"), max_results);
3715
3716   return n_chosen;
3717 }
3718
3719 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3720    on the function identified by SYM and BLOCK, and taking NARGS
3721    arguments.  Update *EXPP as needed to hold more space.  */
3722
3723 static void
3724 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3725                             int oplen, struct symbol *sym,
3726                             const struct block *block)
3727 {
3728   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3729      symbol, -oplen for operator being replaced).  */
3730   struct expression *newexp = (struct expression *)
3731     xzalloc (sizeof (struct expression)
3732              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3733   struct expression *exp = *expp;
3734
3735   newexp->nelts = exp->nelts + 7 - oplen;
3736   newexp->language_defn = exp->language_defn;
3737   newexp->gdbarch = exp->gdbarch;
3738   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3739   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3740           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3741
3742   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3743   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3744
3745   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3746   newexp->elts[pc + 4].block = block;
3747   newexp->elts[pc + 5].symbol = sym;
3748
3749   *expp = newexp;
3750   xfree (exp);
3751 }
3752
3753 /* Type-class predicates */
3754
3755 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3756    or FLOAT).  */
3757
3758 static int
3759 numeric_type_p (struct type *type)
3760 {
3761   if (type == NULL)
3762     return 0;
3763   else
3764     {
3765       switch (TYPE_CODE (type))
3766         {
3767         case TYPE_CODE_INT:
3768         case TYPE_CODE_FLT:
3769           return 1;
3770         case TYPE_CODE_RANGE:
3771           return (type == TYPE_TARGET_TYPE (type)
3772                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3773         default:
3774           return 0;
3775         }
3776     }
3777 }
3778
3779 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3780
3781 static int
3782 integer_type_p (struct type *type)
3783 {
3784   if (type == NULL)
3785     return 0;
3786   else
3787     {
3788       switch (TYPE_CODE (type))
3789         {
3790         case TYPE_CODE_INT:
3791           return 1;
3792         case TYPE_CODE_RANGE:
3793           return (type == TYPE_TARGET_TYPE (type)
3794                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3795         default:
3796           return 0;
3797         }
3798     }
3799 }
3800
3801 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3802
3803 static int
3804 scalar_type_p (struct type *type)
3805 {
3806   if (type == NULL)
3807     return 0;
3808   else
3809     {
3810       switch (TYPE_CODE (type))
3811         {
3812         case TYPE_CODE_INT:
3813         case TYPE_CODE_RANGE:
3814         case TYPE_CODE_ENUM:
3815         case TYPE_CODE_FLT:
3816           return 1;
3817         default:
3818           return 0;
3819         }
3820     }
3821 }
3822
3823 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3824
3825 static int
3826 discrete_type_p (struct type *type)
3827 {
3828   if (type == NULL)
3829     return 0;
3830   else
3831     {
3832       switch (TYPE_CODE (type))
3833         {
3834         case TYPE_CODE_INT:
3835         case TYPE_CODE_RANGE:
3836         case TYPE_CODE_ENUM:
3837         case TYPE_CODE_BOOL:
3838           return 1;
3839         default:
3840           return 0;
3841         }
3842     }
3843 }
3844
3845 /* Returns non-zero if OP with operands in the vector ARGS could be
3846    a user-defined function.  Errs on the side of pre-defined operators
3847    (i.e., result 0).  */
3848
3849 static int
3850 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3851 {
3852   struct type *type0 =
3853     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3854   struct type *type1 =
3855     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3856
3857   if (type0 == NULL)
3858     return 0;
3859
3860   switch (op)
3861     {
3862     default:
3863       return 0;
3864
3865     case BINOP_ADD:
3866     case BINOP_SUB:
3867     case BINOP_MUL:
3868     case BINOP_DIV:
3869       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3870
3871     case BINOP_REM:
3872     case BINOP_MOD:
3873     case BINOP_BITWISE_AND:
3874     case BINOP_BITWISE_IOR:
3875     case BINOP_BITWISE_XOR:
3876       return (!(integer_type_p (type0) && integer_type_p (type1)));
3877
3878     case BINOP_EQUAL:
3879     case BINOP_NOTEQUAL:
3880     case BINOP_LESS:
3881     case BINOP_GTR:
3882     case BINOP_LEQ:
3883     case BINOP_GEQ:
3884       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3885
3886     case BINOP_CONCAT:
3887       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3888
3889     case BINOP_EXP:
3890       return (!(numeric_type_p (type0) && integer_type_p (type1)));
3891
3892     case UNOP_NEG:
3893     case UNOP_PLUS:
3894     case UNOP_LOGICAL_NOT:
3895     case UNOP_ABS:
3896       return (!numeric_type_p (type0));
3897
3898     }
3899 }
3900 \f
3901                                 /* Renaming */
3902
3903 /* NOTES: 
3904
3905    1. In the following, we assume that a renaming type's name may
3906       have an ___XD suffix.  It would be nice if this went away at some
3907       point.
3908    2. We handle both the (old) purely type-based representation of 
3909       renamings and the (new) variable-based encoding.  At some point,
3910       it is devoutly to be hoped that the former goes away 
3911       (FIXME: hilfinger-2007-07-09).
3912    3. Subprogram renamings are not implemented, although the XRS
3913       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
3914
3915 /* If SYM encodes a renaming, 
3916
3917        <renaming> renames <renamed entity>,
3918
3919    sets *LEN to the length of the renamed entity's name,
3920    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3921    the string describing the subcomponent selected from the renamed
3922    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
3923    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3924    are undefined).  Otherwise, returns a value indicating the category
3925    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3926    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3927    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
3928    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3929    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3930    may be NULL, in which case they are not assigned.
3931
3932    [Currently, however, GCC does not generate subprogram renamings.]  */
3933
3934 enum ada_renaming_category
3935 ada_parse_renaming (struct symbol *sym,
3936                     const char **renamed_entity, int *len, 
3937                     const char **renaming_expr)
3938 {
3939   enum ada_renaming_category kind;
3940   const char *info;
3941   const char *suffix;
3942
3943   if (sym == NULL)
3944     return ADA_NOT_RENAMING;
3945   switch (SYMBOL_CLASS (sym)) 
3946     {
3947     default:
3948       return ADA_NOT_RENAMING;
3949     case LOC_TYPEDEF:
3950       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
3951                                        renamed_entity, len, renaming_expr);
3952     case LOC_LOCAL:
3953     case LOC_STATIC:
3954     case LOC_COMPUTED:
3955     case LOC_OPTIMIZED_OUT:
3956       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3957       if (info == NULL)
3958         return ADA_NOT_RENAMING;
3959       switch (info[5])
3960         {
3961         case '_':
3962           kind = ADA_OBJECT_RENAMING;
3963           info += 6;
3964           break;
3965         case 'E':
3966           kind = ADA_EXCEPTION_RENAMING;
3967           info += 7;
3968           break;
3969         case 'P':
3970           kind = ADA_PACKAGE_RENAMING;
3971           info += 7;
3972           break;
3973         case 'S':
3974           kind = ADA_SUBPROGRAM_RENAMING;
3975           info += 7;
3976           break;
3977         default:
3978           return ADA_NOT_RENAMING;
3979         }
3980     }
3981
3982   if (renamed_entity != NULL)
3983     *renamed_entity = info;
3984   suffix = strstr (info, "___XE");
3985   if (suffix == NULL || suffix == info)
3986     return ADA_NOT_RENAMING;
3987   if (len != NULL)
3988     *len = strlen (info) - strlen (suffix);
3989   suffix += 5;
3990   if (renaming_expr != NULL)
3991     *renaming_expr = suffix;
3992   return kind;
3993 }
3994
3995 /* Assuming TYPE encodes a renaming according to the old encoding in
3996    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3997    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
3998    ADA_NOT_RENAMING otherwise.  */
3999 static enum ada_renaming_category
4000 parse_old_style_renaming (struct type *type,
4001                           const char **renamed_entity, int *len, 
4002                           const char **renaming_expr)
4003 {
4004   enum ada_renaming_category kind;
4005   const char *name;
4006   const char *info;
4007   const char *suffix;
4008
4009   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4010       || TYPE_NFIELDS (type) != 1)
4011     return ADA_NOT_RENAMING;
4012
4013   name = type_name_no_tag (type);
4014   if (name == NULL)
4015     return ADA_NOT_RENAMING;
4016   
4017   name = strstr (name, "___XR");
4018   if (name == NULL)
4019     return ADA_NOT_RENAMING;
4020   switch (name[5])
4021     {
4022     case '\0':
4023     case '_':
4024       kind = ADA_OBJECT_RENAMING;
4025       break;
4026     case 'E':
4027       kind = ADA_EXCEPTION_RENAMING;
4028       break;
4029     case 'P':
4030       kind = ADA_PACKAGE_RENAMING;
4031       break;
4032     case 'S':
4033       kind = ADA_SUBPROGRAM_RENAMING;
4034       break;
4035     default:
4036       return ADA_NOT_RENAMING;
4037     }
4038
4039   info = TYPE_FIELD_NAME (type, 0);
4040   if (info == NULL)
4041     return ADA_NOT_RENAMING;
4042   if (renamed_entity != NULL)
4043     *renamed_entity = info;
4044   suffix = strstr (info, "___XE");
4045   if (renaming_expr != NULL)
4046     *renaming_expr = suffix + 5;
4047   if (suffix == NULL || suffix == info)
4048     return ADA_NOT_RENAMING;
4049   if (len != NULL)
4050     *len = suffix - info;
4051   return kind;
4052 }
4053
4054 /* Compute the value of the given RENAMING_SYM, which is expected to
4055    be a symbol encoding a renaming expression.  BLOCK is the block
4056    used to evaluate the renaming.  */
4057
4058 static struct value *
4059 ada_read_renaming_var_value (struct symbol *renaming_sym,
4060                              struct block *block)
4061 {
4062   const char *sym_name;
4063   struct expression *expr;
4064   struct value *value;
4065   struct cleanup *old_chain = NULL;
4066
4067   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4068   expr = parse_exp_1 (&sym_name, 0, block, 0);
4069   old_chain = make_cleanup (free_current_contents, &expr);
4070   value = evaluate_expression (expr);
4071
4072   do_cleanups (old_chain);
4073   return value;
4074 }
4075 \f
4076
4077                                 /* Evaluation: Function Calls */
4078
4079 /* Return an lvalue containing the value VAL.  This is the identity on
4080    lvalues, and otherwise has the side-effect of allocating memory
4081    in the inferior where a copy of the value contents is copied.  */
4082
4083 static struct value *
4084 ensure_lval (struct value *val)
4085 {
4086   if (VALUE_LVAL (val) == not_lval
4087       || VALUE_LVAL (val) == lval_internalvar)
4088     {
4089       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4090       const CORE_ADDR addr =
4091         value_as_long (value_allocate_space_in_inferior (len));
4092
4093       set_value_address (val, addr);
4094       VALUE_LVAL (val) = lval_memory;
4095       write_memory (addr, value_contents (val), len);
4096     }
4097
4098   return val;
4099 }
4100
4101 /* Return the value ACTUAL, converted to be an appropriate value for a
4102    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4103    allocating any necessary descriptors (fat pointers), or copies of
4104    values not residing in memory, updating it as needed.  */
4105
4106 struct value *
4107 ada_convert_actual (struct value *actual, struct type *formal_type0)
4108 {
4109   struct type *actual_type = ada_check_typedef (value_type (actual));
4110   struct type *formal_type = ada_check_typedef (formal_type0);
4111   struct type *formal_target =
4112     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4113     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4114   struct type *actual_target =
4115     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4116     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4117
4118   if (ada_is_array_descriptor_type (formal_target)
4119       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4120     return make_array_descriptor (formal_type, actual);
4121   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4122            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4123     {
4124       struct value *result;
4125
4126       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4127           && ada_is_array_descriptor_type (actual_target))
4128         result = desc_data (actual);
4129       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4130         {
4131           if (VALUE_LVAL (actual) != lval_memory)
4132             {
4133               struct value *val;
4134
4135               actual_type = ada_check_typedef (value_type (actual));
4136               val = allocate_value (actual_type);
4137               memcpy ((char *) value_contents_raw (val),
4138                       (char *) value_contents (actual),
4139                       TYPE_LENGTH (actual_type));
4140               actual = ensure_lval (val);
4141             }
4142           result = value_addr (actual);
4143         }
4144       else
4145         return actual;
4146       return value_cast_pointers (formal_type, result, 0);
4147     }
4148   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4149     return ada_value_ind (actual);
4150
4151   return actual;
4152 }
4153
4154 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4155    type TYPE.  This is usually an inefficient no-op except on some targets
4156    (such as AVR) where the representation of a pointer and an address
4157    differs.  */
4158
4159 static CORE_ADDR
4160 value_pointer (struct value *value, struct type *type)
4161 {
4162   struct gdbarch *gdbarch = get_type_arch (type);
4163   unsigned len = TYPE_LENGTH (type);
4164   gdb_byte *buf = alloca (len);
4165   CORE_ADDR addr;
4166
4167   addr = value_address (value);
4168   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4169   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4170   return addr;
4171 }
4172
4173
4174 /* Push a descriptor of type TYPE for array value ARR on the stack at
4175    *SP, updating *SP to reflect the new descriptor.  Return either
4176    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4177    to-descriptor type rather than a descriptor type), a struct value *
4178    representing a pointer to this descriptor.  */
4179
4180 static struct value *
4181 make_array_descriptor (struct type *type, struct value *arr)
4182 {
4183   struct type *bounds_type = desc_bounds_type (type);
4184   struct type *desc_type = desc_base_type (type);
4185   struct value *descriptor = allocate_value (desc_type);
4186   struct value *bounds = allocate_value (bounds_type);
4187   int i;
4188
4189   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4190        i > 0; i -= 1)
4191     {
4192       modify_field (value_type (bounds), value_contents_writeable (bounds),
4193                     ada_array_bound (arr, i, 0),
4194                     desc_bound_bitpos (bounds_type, i, 0),
4195                     desc_bound_bitsize (bounds_type, i, 0));
4196       modify_field (value_type (bounds), value_contents_writeable (bounds),
4197                     ada_array_bound (arr, i, 1),
4198                     desc_bound_bitpos (bounds_type, i, 1),
4199                     desc_bound_bitsize (bounds_type, i, 1));
4200     }
4201
4202   bounds = ensure_lval (bounds);
4203
4204   modify_field (value_type (descriptor),
4205                 value_contents_writeable (descriptor),
4206                 value_pointer (ensure_lval (arr),
4207                                TYPE_FIELD_TYPE (desc_type, 0)),
4208                 fat_pntr_data_bitpos (desc_type),
4209                 fat_pntr_data_bitsize (desc_type));
4210
4211   modify_field (value_type (descriptor),
4212                 value_contents_writeable (descriptor),
4213                 value_pointer (bounds,
4214                                TYPE_FIELD_TYPE (desc_type, 1)),
4215                 fat_pntr_bounds_bitpos (desc_type),
4216                 fat_pntr_bounds_bitsize (desc_type));
4217
4218   descriptor = ensure_lval (descriptor);
4219
4220   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4221     return value_addr (descriptor);
4222   else
4223     return descriptor;
4224 }
4225 \f
4226 /* Dummy definitions for an experimental caching module that is not
4227  * used in the public sources.  */
4228
4229 static int
4230 lookup_cached_symbol (const char *name, domain_enum namespace,
4231                       struct symbol **sym, struct block **block)
4232 {
4233   return 0;
4234 }
4235
4236 static void
4237 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
4238               const struct block *block)
4239 {
4240 }
4241 \f
4242                                 /* Symbol Lookup */
4243
4244 /* Return nonzero if wild matching should be used when searching for
4245    all symbols matching LOOKUP_NAME.
4246
4247    LOOKUP_NAME is expected to be a symbol name after transformation
4248    for Ada lookups (see ada_name_for_lookup).  */
4249
4250 static int
4251 should_use_wild_match (const char *lookup_name)
4252 {
4253   return (strstr (lookup_name, "__") == NULL);
4254 }
4255
4256 /* Return the result of a standard (literal, C-like) lookup of NAME in
4257    given DOMAIN, visible from lexical block BLOCK.  */
4258
4259 static struct symbol *
4260 standard_lookup (const char *name, const struct block *block,
4261                  domain_enum domain)
4262 {
4263   /* Initialize it just to avoid a GCC false warning.  */
4264   struct symbol *sym = NULL;
4265
4266   if (lookup_cached_symbol (name, domain, &sym, NULL))
4267     return sym;
4268   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4269   cache_symbol (name, domain, sym, block_found);
4270   return sym;
4271 }
4272
4273
4274 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4275    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4276    since they contend in overloading in the same way.  */
4277 static int
4278 is_nonfunction (struct ada_symbol_info syms[], int n)
4279 {
4280   int i;
4281
4282   for (i = 0; i < n; i += 1)
4283     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4284         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4285             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4286       return 1;
4287
4288   return 0;
4289 }
4290
4291 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4292    struct types.  Otherwise, they may not.  */
4293
4294 static int
4295 equiv_types (struct type *type0, struct type *type1)
4296 {
4297   if (type0 == type1)
4298     return 1;
4299   if (type0 == NULL || type1 == NULL
4300       || TYPE_CODE (type0) != TYPE_CODE (type1))
4301     return 0;
4302   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4303        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4304       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4305       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4306     return 1;
4307
4308   return 0;
4309 }
4310
4311 /* True iff SYM0 represents the same entity as SYM1, or one that is
4312    no more defined than that of SYM1.  */
4313
4314 static int
4315 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4316 {
4317   if (sym0 == sym1)
4318     return 1;
4319   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4320       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4321     return 0;
4322
4323   switch (SYMBOL_CLASS (sym0))
4324     {
4325     case LOC_UNDEF:
4326       return 1;
4327     case LOC_TYPEDEF:
4328       {
4329         struct type *type0 = SYMBOL_TYPE (sym0);
4330         struct type *type1 = SYMBOL_TYPE (sym1);
4331         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4332         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4333         int len0 = strlen (name0);
4334
4335         return
4336           TYPE_CODE (type0) == TYPE_CODE (type1)
4337           && (equiv_types (type0, type1)
4338               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4339                   && strncmp (name1 + len0, "___XV", 5) == 0));
4340       }
4341     case LOC_CONST:
4342       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4343         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4344     default:
4345       return 0;
4346     }
4347 }
4348
4349 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4350    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4351
4352 static void
4353 add_defn_to_vec (struct obstack *obstackp,
4354                  struct symbol *sym,
4355                  struct block *block)
4356 {
4357   int i;
4358   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4359
4360   /* Do not try to complete stub types, as the debugger is probably
4361      already scanning all symbols matching a certain name at the
4362      time when this function is called.  Trying to replace the stub
4363      type by its associated full type will cause us to restart a scan
4364      which may lead to an infinite recursion.  Instead, the client
4365      collecting the matching symbols will end up collecting several
4366      matches, with at least one of them complete.  It can then filter
4367      out the stub ones if needed.  */
4368
4369   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4370     {
4371       if (lesseq_defined_than (sym, prevDefns[i].sym))
4372         return;
4373       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4374         {
4375           prevDefns[i].sym = sym;
4376           prevDefns[i].block = block;
4377           return;
4378         }
4379     }
4380
4381   {
4382     struct ada_symbol_info info;
4383
4384     info.sym = sym;
4385     info.block = block;
4386     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4387   }
4388 }
4389
4390 /* Number of ada_symbol_info structures currently collected in 
4391    current vector in *OBSTACKP.  */
4392
4393 static int
4394 num_defns_collected (struct obstack *obstackp)
4395 {
4396   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4397 }
4398
4399 /* Vector of ada_symbol_info structures currently collected in current 
4400    vector in *OBSTACKP.  If FINISH, close off the vector and return
4401    its final address.  */
4402
4403 static struct ada_symbol_info *
4404 defns_collected (struct obstack *obstackp, int finish)
4405 {
4406   if (finish)
4407     return obstack_finish (obstackp);
4408   else
4409     return (struct ada_symbol_info *) obstack_base (obstackp);
4410 }
4411
4412 /* Return a bound minimal symbol matching NAME according to Ada
4413    decoding rules.  Returns an invalid symbol if there is no such
4414    minimal symbol.  Names prefixed with "standard__" are handled
4415    specially: "standard__" is first stripped off, and only static and
4416    global symbols are searched.  */
4417
4418 struct bound_minimal_symbol
4419 ada_lookup_simple_minsym (const char *name)
4420 {
4421   struct bound_minimal_symbol result;
4422   struct objfile *objfile;
4423   struct minimal_symbol *msymbol;
4424   const int wild_match_p = should_use_wild_match (name);
4425
4426   memset (&result, 0, sizeof (result));
4427
4428   /* Special case: If the user specifies a symbol name inside package
4429      Standard, do a non-wild matching of the symbol name without
4430      the "standard__" prefix.  This was primarily introduced in order
4431      to allow the user to specifically access the standard exceptions
4432      using, for instance, Standard.Constraint_Error when Constraint_Error
4433      is ambiguous (due to the user defining its own Constraint_Error
4434      entity inside its program).  */
4435   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4436     name += sizeof ("standard__") - 1;
4437
4438   ALL_MSYMBOLS (objfile, msymbol)
4439   {
4440     if (match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4441         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4442       {
4443         result.minsym = msymbol;
4444         result.objfile = objfile;
4445         break;
4446       }
4447   }
4448
4449   return result;
4450 }
4451
4452 /* For all subprograms that statically enclose the subprogram of the
4453    selected frame, add symbols matching identifier NAME in DOMAIN
4454    and their blocks to the list of data in OBSTACKP, as for
4455    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4456    with a wildcard prefix.  */
4457
4458 static void
4459 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4460                                   const char *name, domain_enum namespace,
4461                                   int wild_match_p)
4462 {
4463 }
4464
4465 /* True if TYPE is definitely an artificial type supplied to a symbol
4466    for which no debugging information was given in the symbol file.  */
4467
4468 static int
4469 is_nondebugging_type (struct type *type)
4470 {
4471   const char *name = ada_type_name (type);
4472
4473   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4474 }
4475
4476 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4477    that are deemed "identical" for practical purposes.
4478
4479    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4480    types and that their number of enumerals is identical (in other
4481    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4482
4483 static int
4484 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4485 {
4486   int i;
4487
4488   /* The heuristic we use here is fairly conservative.  We consider
4489      that 2 enumerate types are identical if they have the same
4490      number of enumerals and that all enumerals have the same
4491      underlying value and name.  */
4492
4493   /* All enums in the type should have an identical underlying value.  */
4494   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4495     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4496       return 0;
4497
4498   /* All enumerals should also have the same name (modulo any numerical
4499      suffix).  */
4500   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4501     {
4502       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4503       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4504       int len_1 = strlen (name_1);
4505       int len_2 = strlen (name_2);
4506
4507       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4508       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4509       if (len_1 != len_2
4510           || strncmp (TYPE_FIELD_NAME (type1, i),
4511                       TYPE_FIELD_NAME (type2, i),
4512                       len_1) != 0)
4513         return 0;
4514     }
4515
4516   return 1;
4517 }
4518
4519 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4520    that are deemed "identical" for practical purposes.  Sometimes,
4521    enumerals are not strictly identical, but their types are so similar
4522    that they can be considered identical.
4523
4524    For instance, consider the following code:
4525
4526       type Color is (Black, Red, Green, Blue, White);
4527       type RGB_Color is new Color range Red .. Blue;
4528
4529    Type RGB_Color is a subrange of an implicit type which is a copy
4530    of type Color. If we call that implicit type RGB_ColorB ("B" is
4531    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4532    As a result, when an expression references any of the enumeral
4533    by name (Eg. "print green"), the expression is technically
4534    ambiguous and the user should be asked to disambiguate. But
4535    doing so would only hinder the user, since it wouldn't matter
4536    what choice he makes, the outcome would always be the same.
4537    So, for practical purposes, we consider them as the same.  */
4538
4539 static int
4540 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4541 {
4542   int i;
4543
4544   /* Before performing a thorough comparison check of each type,
4545      we perform a series of inexpensive checks.  We expect that these
4546      checks will quickly fail in the vast majority of cases, and thus
4547      help prevent the unnecessary use of a more expensive comparison.
4548      Said comparison also expects us to make some of these checks
4549      (see ada_identical_enum_types_p).  */
4550
4551   /* Quick check: All symbols should have an enum type.  */
4552   for (i = 0; i < nsyms; i++)
4553     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4554       return 0;
4555
4556   /* Quick check: They should all have the same value.  */
4557   for (i = 1; i < nsyms; i++)
4558     if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4559       return 0;
4560
4561   /* Quick check: They should all have the same number of enumerals.  */
4562   for (i = 1; i < nsyms; i++)
4563     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4564         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4565       return 0;
4566
4567   /* All the sanity checks passed, so we might have a set of
4568      identical enumeration types.  Perform a more complete
4569      comparison of the type of each symbol.  */
4570   for (i = 1; i < nsyms; i++)
4571     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4572                                      SYMBOL_TYPE (syms[0].sym)))
4573       return 0;
4574
4575   return 1;
4576 }
4577
4578 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4579    duplicate other symbols in the list (The only case I know of where
4580    this happens is when object files containing stabs-in-ecoff are
4581    linked with files containing ordinary ecoff debugging symbols (or no
4582    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4583    Returns the number of items in the modified list.  */
4584
4585 static int
4586 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4587 {
4588   int i, j;
4589
4590   /* We should never be called with less than 2 symbols, as there
4591      cannot be any extra symbol in that case.  But it's easy to
4592      handle, since we have nothing to do in that case.  */
4593   if (nsyms < 2)
4594     return nsyms;
4595
4596   i = 0;
4597   while (i < nsyms)
4598     {
4599       int remove_p = 0;
4600
4601       /* If two symbols have the same name and one of them is a stub type,
4602          the get rid of the stub.  */
4603
4604       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4605           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4606         {
4607           for (j = 0; j < nsyms; j++)
4608             {
4609               if (j != i
4610                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4611                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4612                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4613                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4614                 remove_p = 1;
4615             }
4616         }
4617
4618       /* Two symbols with the same name, same class and same address
4619          should be identical.  */
4620
4621       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4622           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4623           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4624         {
4625           for (j = 0; j < nsyms; j += 1)
4626             {
4627               if (i != j
4628                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4629                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4630                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4631                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4632                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4633                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4634                 remove_p = 1;
4635             }
4636         }
4637       
4638       if (remove_p)
4639         {
4640           for (j = i + 1; j < nsyms; j += 1)
4641             syms[j - 1] = syms[j];
4642           nsyms -= 1;
4643         }
4644
4645       i += 1;
4646     }
4647
4648   /* If all the remaining symbols are identical enumerals, then
4649      just keep the first one and discard the rest.
4650
4651      Unlike what we did previously, we do not discard any entry
4652      unless they are ALL identical.  This is because the symbol
4653      comparison is not a strict comparison, but rather a practical
4654      comparison.  If all symbols are considered identical, then
4655      we can just go ahead and use the first one and discard the rest.
4656      But if we cannot reduce the list to a single element, we have
4657      to ask the user to disambiguate anyways.  And if we have to
4658      present a multiple-choice menu, it's less confusing if the list
4659      isn't missing some choices that were identical and yet distinct.  */
4660   if (symbols_are_identical_enums (syms, nsyms))
4661     nsyms = 1;
4662
4663   return nsyms;
4664 }
4665
4666 /* Given a type that corresponds to a renaming entity, use the type name
4667    to extract the scope (package name or function name, fully qualified,
4668    and following the GNAT encoding convention) where this renaming has been
4669    defined.  The string returned needs to be deallocated after use.  */
4670
4671 static char *
4672 xget_renaming_scope (struct type *renaming_type)
4673 {
4674   /* The renaming types adhere to the following convention:
4675      <scope>__<rename>___<XR extension>.
4676      So, to extract the scope, we search for the "___XR" extension,
4677      and then backtrack until we find the first "__".  */
4678
4679   const char *name = type_name_no_tag (renaming_type);
4680   char *suffix = strstr (name, "___XR");
4681   char *last;
4682   int scope_len;
4683   char *scope;
4684
4685   /* Now, backtrack a bit until we find the first "__".  Start looking
4686      at suffix - 3, as the <rename> part is at least one character long.  */
4687
4688   for (last = suffix - 3; last > name; last--)
4689     if (last[0] == '_' && last[1] == '_')
4690       break;
4691
4692   /* Make a copy of scope and return it.  */
4693
4694   scope_len = last - name;
4695   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4696
4697   strncpy (scope, name, scope_len);
4698   scope[scope_len] = '\0';
4699
4700   return scope;
4701 }
4702
4703 /* Return nonzero if NAME corresponds to a package name.  */
4704
4705 static int
4706 is_package_name (const char *name)
4707 {
4708   /* Here, We take advantage of the fact that no symbols are generated
4709      for packages, while symbols are generated for each function.
4710      So the condition for NAME represent a package becomes equivalent
4711      to NAME not existing in our list of symbols.  There is only one
4712      small complication with library-level functions (see below).  */
4713
4714   char *fun_name;
4715
4716   /* If it is a function that has not been defined at library level,
4717      then we should be able to look it up in the symbols.  */
4718   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4719     return 0;
4720
4721   /* Library-level function names start with "_ada_".  See if function
4722      "_ada_" followed by NAME can be found.  */
4723
4724   /* Do a quick check that NAME does not contain "__", since library-level
4725      functions names cannot contain "__" in them.  */
4726   if (strstr (name, "__") != NULL)
4727     return 0;
4728
4729   fun_name = xstrprintf ("_ada_%s", name);
4730
4731   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4732 }
4733
4734 /* Return nonzero if SYM corresponds to a renaming entity that is
4735    not visible from FUNCTION_NAME.  */
4736
4737 static int
4738 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
4739 {
4740   char *scope;
4741   struct cleanup *old_chain;
4742
4743   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4744     return 0;
4745
4746   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4747   old_chain = make_cleanup (xfree, scope);
4748
4749   /* If the rename has been defined in a package, then it is visible.  */
4750   if (is_package_name (scope))
4751     {
4752       do_cleanups (old_chain);
4753       return 0;
4754     }
4755
4756   /* Check that the rename is in the current function scope by checking
4757      that its name starts with SCOPE.  */
4758
4759   /* If the function name starts with "_ada_", it means that it is
4760      a library-level function.  Strip this prefix before doing the
4761      comparison, as the encoding for the renaming does not contain
4762      this prefix.  */
4763   if (strncmp (function_name, "_ada_", 5) == 0)
4764     function_name += 5;
4765
4766   {
4767     int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
4768
4769     do_cleanups (old_chain);
4770     return is_invisible;
4771   }
4772 }
4773
4774 /* Remove entries from SYMS that corresponds to a renaming entity that
4775    is not visible from the function associated with CURRENT_BLOCK or
4776    that is superfluous due to the presence of more specific renaming
4777    information.  Places surviving symbols in the initial entries of
4778    SYMS and returns the number of surviving symbols.
4779    
4780    Rationale:
4781    First, in cases where an object renaming is implemented as a
4782    reference variable, GNAT may produce both the actual reference
4783    variable and the renaming encoding.  In this case, we discard the
4784    latter.
4785
4786    Second, GNAT emits a type following a specified encoding for each renaming
4787    entity.  Unfortunately, STABS currently does not support the definition
4788    of types that are local to a given lexical block, so all renamings types
4789    are emitted at library level.  As a consequence, if an application
4790    contains two renaming entities using the same name, and a user tries to
4791    print the value of one of these entities, the result of the ada symbol
4792    lookup will also contain the wrong renaming type.
4793
4794    This function partially covers for this limitation by attempting to
4795    remove from the SYMS list renaming symbols that should be visible
4796    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
4797    method with the current information available.  The implementation
4798    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
4799    
4800       - When the user tries to print a rename in a function while there
4801         is another rename entity defined in a package:  Normally, the
4802         rename in the function has precedence over the rename in the
4803         package, so the latter should be removed from the list.  This is
4804         currently not the case.
4805         
4806       - This function will incorrectly remove valid renames if
4807         the CURRENT_BLOCK corresponds to a function which symbol name
4808         has been changed by an "Export" pragma.  As a consequence,
4809         the user will be unable to print such rename entities.  */
4810
4811 static int
4812 remove_irrelevant_renamings (struct ada_symbol_info *syms,
4813                              int nsyms, const struct block *current_block)
4814 {
4815   struct symbol *current_function;
4816   const char *current_function_name;
4817   int i;
4818   int is_new_style_renaming;
4819
4820   /* If there is both a renaming foo___XR... encoded as a variable and
4821      a simple variable foo in the same block, discard the latter.
4822      First, zero out such symbols, then compress.  */
4823   is_new_style_renaming = 0;
4824   for (i = 0; i < nsyms; i += 1)
4825     {
4826       struct symbol *sym = syms[i].sym;
4827       const struct block *block = syms[i].block;
4828       const char *name;
4829       const char *suffix;
4830
4831       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4832         continue;
4833       name = SYMBOL_LINKAGE_NAME (sym);
4834       suffix = strstr (name, "___XR");
4835
4836       if (suffix != NULL)
4837         {
4838           int name_len = suffix - name;
4839           int j;
4840
4841           is_new_style_renaming = 1;
4842           for (j = 0; j < nsyms; j += 1)
4843             if (i != j && syms[j].sym != NULL
4844                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4845                             name_len) == 0
4846                 && block == syms[j].block)
4847               syms[j].sym = NULL;
4848         }
4849     }
4850   if (is_new_style_renaming)
4851     {
4852       int j, k;
4853
4854       for (j = k = 0; j < nsyms; j += 1)
4855         if (syms[j].sym != NULL)
4856             {
4857               syms[k] = syms[j];
4858               k += 1;
4859             }
4860       return k;
4861     }
4862
4863   /* Extract the function name associated to CURRENT_BLOCK.
4864      Abort if unable to do so.  */
4865
4866   if (current_block == NULL)
4867     return nsyms;
4868
4869   current_function = block_linkage_function (current_block);
4870   if (current_function == NULL)
4871     return nsyms;
4872
4873   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4874   if (current_function_name == NULL)
4875     return nsyms;
4876
4877   /* Check each of the symbols, and remove it from the list if it is
4878      a type corresponding to a renaming that is out of the scope of
4879      the current block.  */
4880
4881   i = 0;
4882   while (i < nsyms)
4883     {
4884       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4885           == ADA_OBJECT_RENAMING
4886           && old_renaming_is_invisible (syms[i].sym, current_function_name))
4887         {
4888           int j;
4889
4890           for (j = i + 1; j < nsyms; j += 1)
4891             syms[j - 1] = syms[j];
4892           nsyms -= 1;
4893         }
4894       else
4895         i += 1;
4896     }
4897
4898   return nsyms;
4899 }
4900
4901 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
4902    whose name and domain match NAME and DOMAIN respectively.
4903    If no match was found, then extend the search to "enclosing"
4904    routines (in other words, if we're inside a nested function,
4905    search the symbols defined inside the enclosing functions).
4906    If WILD_MATCH_P is nonzero, perform the naming matching in
4907    "wild" mode (see function "wild_match" for more info).
4908
4909    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
4910
4911 static void
4912 ada_add_local_symbols (struct obstack *obstackp, const char *name,
4913                        struct block *block, domain_enum domain,
4914                        int wild_match_p)
4915 {
4916   int block_depth = 0;
4917
4918   while (block != NULL)
4919     {
4920       block_depth += 1;
4921       ada_add_block_symbols (obstackp, block, name, domain, NULL,
4922                              wild_match_p);
4923
4924       /* If we found a non-function match, assume that's the one.  */
4925       if (is_nonfunction (defns_collected (obstackp, 0),
4926                           num_defns_collected (obstackp)))
4927         return;
4928
4929       block = BLOCK_SUPERBLOCK (block);
4930     }
4931
4932   /* If no luck so far, try to find NAME as a local symbol in some lexically
4933      enclosing subprogram.  */
4934   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
4935     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
4936 }
4937
4938 /* An object of this type is used as the user_data argument when
4939    calling the map_matching_symbols method.  */
4940
4941 struct match_data
4942 {
4943   struct objfile *objfile;
4944   struct obstack *obstackp;
4945   struct symbol *arg_sym;
4946   int found_sym;
4947 };
4948
4949 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
4950    to a list of symbols.  DATA0 is a pointer to a struct match_data *
4951    containing the obstack that collects the symbol list, the file that SYM
4952    must come from, a flag indicating whether a non-argument symbol has
4953    been found in the current block, and the last argument symbol
4954    passed in SYM within the current block (if any).  When SYM is null,
4955    marking the end of a block, the argument symbol is added if no
4956    other has been found.  */
4957
4958 static int
4959 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
4960 {
4961   struct match_data *data = (struct match_data *) data0;
4962   
4963   if (sym == NULL)
4964     {
4965       if (!data->found_sym && data->arg_sym != NULL) 
4966         add_defn_to_vec (data->obstackp,
4967                          fixup_symbol_section (data->arg_sym, data->objfile),
4968                          block);
4969       data->found_sym = 0;
4970       data->arg_sym = NULL;
4971     }
4972   else 
4973     {
4974       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
4975         return 0;
4976       else if (SYMBOL_IS_ARGUMENT (sym))
4977         data->arg_sym = sym;
4978       else
4979         {
4980           data->found_sym = 1;
4981           add_defn_to_vec (data->obstackp,
4982                            fixup_symbol_section (sym, data->objfile),
4983                            block);
4984         }
4985     }
4986   return 0;
4987 }
4988
4989 /* Implements compare_names, but only applying the comparision using
4990    the given CASING.  */
4991
4992 static int
4993 compare_names_with_case (const char *string1, const char *string2,
4994                          enum case_sensitivity casing)
4995 {
4996   while (*string1 != '\0' && *string2 != '\0')
4997     {
4998       char c1, c2;
4999
5000       if (isspace (*string1) || isspace (*string2))
5001         return strcmp_iw_ordered (string1, string2);
5002
5003       if (casing == case_sensitive_off)
5004         {
5005           c1 = tolower (*string1);
5006           c2 = tolower (*string2);
5007         }
5008       else
5009         {
5010           c1 = *string1;
5011           c2 = *string2;
5012         }
5013       if (c1 != c2)
5014         break;
5015
5016       string1 += 1;
5017       string2 += 1;
5018     }
5019
5020   switch (*string1)
5021     {
5022     case '(':
5023       return strcmp_iw_ordered (string1, string2);
5024     case '_':
5025       if (*string2 == '\0')
5026         {
5027           if (is_name_suffix (string1))
5028             return 0;
5029           else
5030             return 1;
5031         }
5032       /* FALLTHROUGH */
5033     default:
5034       if (*string2 == '(')
5035         return strcmp_iw_ordered (string1, string2);
5036       else
5037         {
5038           if (casing == case_sensitive_off)
5039             return tolower (*string1) - tolower (*string2);
5040           else
5041             return *string1 - *string2;
5042         }
5043     }
5044 }
5045
5046 /* Compare STRING1 to STRING2, with results as for strcmp.
5047    Compatible with strcmp_iw_ordered in that...
5048
5049        strcmp_iw_ordered (STRING1, STRING2) <= 0
5050
5051    ... implies...
5052
5053        compare_names (STRING1, STRING2) <= 0
5054
5055    (they may differ as to what symbols compare equal).  */
5056
5057 static int
5058 compare_names (const char *string1, const char *string2)
5059 {
5060   int result;
5061
5062   /* Similar to what strcmp_iw_ordered does, we need to perform
5063      a case-insensitive comparison first, and only resort to
5064      a second, case-sensitive, comparison if the first one was
5065      not sufficient to differentiate the two strings.  */
5066
5067   result = compare_names_with_case (string1, string2, case_sensitive_off);
5068   if (result == 0)
5069     result = compare_names_with_case (string1, string2, case_sensitive_on);
5070
5071   return result;
5072 }
5073
5074 /* Add to OBSTACKP all non-local symbols whose name and domain match
5075    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5076    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5077
5078 static void
5079 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5080                       domain_enum domain, int global,
5081                       int is_wild_match)
5082 {
5083   struct objfile *objfile;
5084   struct match_data data;
5085
5086   memset (&data, 0, sizeof data);
5087   data.obstackp = obstackp;
5088
5089   ALL_OBJFILES (objfile)
5090     {
5091       data.objfile = objfile;
5092
5093       if (is_wild_match)
5094         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5095                                                aux_add_nonlocal_symbols, &data,
5096                                                wild_match, NULL);
5097       else
5098         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5099                                                aux_add_nonlocal_symbols, &data,
5100                                                full_match, compare_names);
5101     }
5102
5103   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5104     {
5105       ALL_OBJFILES (objfile)
5106         {
5107           char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5108           strcpy (name1, "_ada_");
5109           strcpy (name1 + sizeof ("_ada_") - 1, name);
5110           data.objfile = objfile;
5111           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5112                                                  global,
5113                                                  aux_add_nonlocal_symbols,
5114                                                  &data,
5115                                                  full_match, compare_names);
5116         }
5117     }           
5118 }
5119
5120 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5121    non-zero, enclosing scope and in global scopes, returning the number of
5122    matches.
5123    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5124    indicating the symbols found and the blocks and symbol tables (if
5125    any) in which they were found.  This vector is transient---good only to
5126    the next call of ada_lookup_symbol_list.
5127
5128    When full_search is non-zero, any non-function/non-enumeral
5129    symbol match within the nest of blocks whose innermost member is BLOCK0,
5130    is the one match returned (no other matches in that or
5131    enclosing blocks is returned).  If there are any matches in or
5132    surrounding BLOCK0, then these alone are returned.
5133
5134    Names prefixed with "standard__" are handled specially: "standard__"
5135    is first stripped off, and only static and global symbols are searched.  */
5136
5137 static int
5138 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5139                                domain_enum namespace,
5140                                struct ada_symbol_info **results,
5141                                int full_search)
5142 {
5143   struct symbol *sym;
5144   struct block *block;
5145   const char *name;
5146   const int wild_match_p = should_use_wild_match (name0);
5147   int cacheIfUnique;
5148   int ndefns;
5149
5150   obstack_free (&symbol_list_obstack, NULL);
5151   obstack_init (&symbol_list_obstack);
5152
5153   cacheIfUnique = 0;
5154
5155   /* Search specified block and its superiors.  */
5156
5157   name = name0;
5158   block = (struct block *) block0;      /* FIXME: No cast ought to be
5159                                            needed, but adding const will
5160                                            have a cascade effect.  */
5161
5162   /* Special case: If the user specifies a symbol name inside package
5163      Standard, do a non-wild matching of the symbol name without
5164      the "standard__" prefix.  This was primarily introduced in order
5165      to allow the user to specifically access the standard exceptions
5166      using, for instance, Standard.Constraint_Error when Constraint_Error
5167      is ambiguous (due to the user defining its own Constraint_Error
5168      entity inside its program).  */
5169   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5170     {
5171       block = NULL;
5172       name = name0 + sizeof ("standard__") - 1;
5173     }
5174
5175   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5176
5177   if (block != NULL)
5178     {
5179       if (full_search)
5180         {
5181           ada_add_local_symbols (&symbol_list_obstack, name, block,
5182                                  namespace, wild_match_p);
5183         }
5184       else
5185         {
5186           /* In the !full_search case we're are being called by
5187              ada_iterate_over_symbols, and we don't want to search
5188              superblocks.  */
5189           ada_add_block_symbols (&symbol_list_obstack, block, name,
5190                                  namespace, NULL, wild_match_p);
5191         }
5192       if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5193         goto done;
5194     }
5195
5196   /* No non-global symbols found.  Check our cache to see if we have
5197      already performed this search before.  If we have, then return
5198      the same result.  */
5199
5200   cacheIfUnique = 1;
5201   if (lookup_cached_symbol (name0, namespace, &sym, &block))
5202     {
5203       if (sym != NULL)
5204         add_defn_to_vec (&symbol_list_obstack, sym, block);
5205       goto done;
5206     }
5207
5208   /* Search symbols from all global blocks.  */
5209  
5210   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5211                         wild_match_p);
5212
5213   /* Now add symbols from all per-file blocks if we've gotten no hits
5214      (not strictly correct, but perhaps better than an error).  */
5215
5216   if (num_defns_collected (&symbol_list_obstack) == 0)
5217     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5218                           wild_match_p);
5219
5220 done:
5221   ndefns = num_defns_collected (&symbol_list_obstack);
5222   *results = defns_collected (&symbol_list_obstack, 1);
5223
5224   ndefns = remove_extra_symbols (*results, ndefns);
5225
5226   if (ndefns == 0 && full_search)
5227     cache_symbol (name0, namespace, NULL, NULL);
5228
5229   if (ndefns == 1 && full_search && cacheIfUnique)
5230     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
5231
5232   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5233
5234   return ndefns;
5235 }
5236
5237 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5238    in global scopes, returning the number of matches, and setting *RESULTS
5239    to a vector of (SYM,BLOCK) tuples.
5240    See ada_lookup_symbol_list_worker for further details.  */
5241
5242 int
5243 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5244                         domain_enum domain, struct ada_symbol_info **results)
5245 {
5246   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5247 }
5248
5249 /* Implementation of the la_iterate_over_symbols method.  */
5250
5251 static void
5252 ada_iterate_over_symbols (const struct block *block,
5253                           const char *name, domain_enum domain,
5254                           symbol_found_callback_ftype *callback,
5255                           void *data)
5256 {
5257   int ndefs, i;
5258   struct ada_symbol_info *results;
5259
5260   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5261   for (i = 0; i < ndefs; ++i)
5262     {
5263       if (! (*callback) (results[i].sym, data))
5264         break;
5265     }
5266 }
5267
5268 /* If NAME is the name of an entity, return a string that should
5269    be used to look that entity up in Ada units.  This string should
5270    be deallocated after use using xfree.
5271
5272    NAME can have any form that the "break" or "print" commands might
5273    recognize.  In other words, it does not have to be the "natural"
5274    name, or the "encoded" name.  */
5275
5276 char *
5277 ada_name_for_lookup (const char *name)
5278 {
5279   char *canon;
5280   int nlen = strlen (name);
5281
5282   if (name[0] == '<' && name[nlen - 1] == '>')
5283     {
5284       canon = xmalloc (nlen - 1);
5285       memcpy (canon, name + 1, nlen - 2);
5286       canon[nlen - 2] = '\0';
5287     }
5288   else
5289     canon = xstrdup (ada_encode (ada_fold_name (name)));
5290   return canon;
5291 }
5292
5293 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5294    to 1, but choosing the first symbol found if there are multiple
5295    choices.
5296
5297    The result is stored in *INFO, which must be non-NULL.
5298    If no match is found, INFO->SYM is set to NULL.  */
5299
5300 void
5301 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5302                            domain_enum namespace,
5303                            struct ada_symbol_info *info)
5304 {
5305   struct ada_symbol_info *candidates;
5306   int n_candidates;
5307
5308   gdb_assert (info != NULL);
5309   memset (info, 0, sizeof (struct ada_symbol_info));
5310
5311   n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
5312   if (n_candidates == 0)
5313     return;
5314
5315   *info = candidates[0];
5316   info->sym = fixup_symbol_section (info->sym, NULL);
5317 }
5318
5319 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5320    scope and in global scopes, or NULL if none.  NAME is folded and
5321    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5322    choosing the first symbol if there are multiple choices.
5323    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5324
5325 struct symbol *
5326 ada_lookup_symbol (const char *name, const struct block *block0,
5327                    domain_enum namespace, int *is_a_field_of_this)
5328 {
5329   struct ada_symbol_info info;
5330
5331   if (is_a_field_of_this != NULL)
5332     *is_a_field_of_this = 0;
5333
5334   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5335                              block0, namespace, &info);
5336   return info.sym;
5337 }
5338
5339 static struct symbol *
5340 ada_lookup_symbol_nonlocal (const char *name,
5341                             const struct block *block,
5342                             const domain_enum domain)
5343 {
5344   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5345 }
5346
5347
5348 /* True iff STR is a possible encoded suffix of a normal Ada name
5349    that is to be ignored for matching purposes.  Suffixes of parallel
5350    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5351    are given by any of the regular expressions:
5352
5353    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5354    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5355    TKB              [subprogram suffix for task bodies]
5356    _E[0-9]+[bs]$    [protected object entry suffixes]
5357    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5358
5359    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5360    match is performed.  This sequence is used to differentiate homonyms,
5361    is an optional part of a valid name suffix.  */
5362
5363 static int
5364 is_name_suffix (const char *str)
5365 {
5366   int k;
5367   const char *matching;
5368   const int len = strlen (str);
5369
5370   /* Skip optional leading __[0-9]+.  */
5371
5372   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5373     {
5374       str += 3;
5375       while (isdigit (str[0]))
5376         str += 1;
5377     }
5378   
5379   /* [.$][0-9]+ */
5380
5381   if (str[0] == '.' || str[0] == '$')
5382     {
5383       matching = str + 1;
5384       while (isdigit (matching[0]))
5385         matching += 1;
5386       if (matching[0] == '\0')
5387         return 1;
5388     }
5389
5390   /* ___[0-9]+ */
5391
5392   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5393     {
5394       matching = str + 3;
5395       while (isdigit (matching[0]))
5396         matching += 1;
5397       if (matching[0] == '\0')
5398         return 1;
5399     }
5400
5401   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5402
5403   if (strcmp (str, "TKB") == 0)
5404     return 1;
5405
5406 #if 0
5407   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5408      with a N at the end.  Unfortunately, the compiler uses the same
5409      convention for other internal types it creates.  So treating
5410      all entity names that end with an "N" as a name suffix causes
5411      some regressions.  For instance, consider the case of an enumerated
5412      type.  To support the 'Image attribute, it creates an array whose
5413      name ends with N.
5414      Having a single character like this as a suffix carrying some
5415      information is a bit risky.  Perhaps we should change the encoding
5416      to be something like "_N" instead.  In the meantime, do not do
5417      the following check.  */
5418   /* Protected Object Subprograms */
5419   if (len == 1 && str [0] == 'N')
5420     return 1;
5421 #endif
5422
5423   /* _E[0-9]+[bs]$ */
5424   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5425     {
5426       matching = str + 3;
5427       while (isdigit (matching[0]))
5428         matching += 1;
5429       if ((matching[0] == 'b' || matching[0] == 's')
5430           && matching [1] == '\0')
5431         return 1;
5432     }
5433
5434   /* ??? We should not modify STR directly, as we are doing below.  This
5435      is fine in this case, but may become problematic later if we find
5436      that this alternative did not work, and want to try matching
5437      another one from the begining of STR.  Since we modified it, we
5438      won't be able to find the begining of the string anymore!  */
5439   if (str[0] == 'X')
5440     {
5441       str += 1;
5442       while (str[0] != '_' && str[0] != '\0')
5443         {
5444           if (str[0] != 'n' && str[0] != 'b')
5445             return 0;
5446           str += 1;
5447         }
5448     }
5449
5450   if (str[0] == '\000')
5451     return 1;
5452
5453   if (str[0] == '_')
5454     {
5455       if (str[1] != '_' || str[2] == '\000')
5456         return 0;
5457       if (str[2] == '_')
5458         {
5459           if (strcmp (str + 3, "JM") == 0)
5460             return 1;
5461           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5462              the LJM suffix in favor of the JM one.  But we will
5463              still accept LJM as a valid suffix for a reasonable
5464              amount of time, just to allow ourselves to debug programs
5465              compiled using an older version of GNAT.  */
5466           if (strcmp (str + 3, "LJM") == 0)
5467             return 1;
5468           if (str[3] != 'X')
5469             return 0;
5470           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5471               || str[4] == 'U' || str[4] == 'P')
5472             return 1;
5473           if (str[4] == 'R' && str[5] != 'T')
5474             return 1;
5475           return 0;
5476         }
5477       if (!isdigit (str[2]))
5478         return 0;
5479       for (k = 3; str[k] != '\0'; k += 1)
5480         if (!isdigit (str[k]) && str[k] != '_')
5481           return 0;
5482       return 1;
5483     }
5484   if (str[0] == '$' && isdigit (str[1]))
5485     {
5486       for (k = 2; str[k] != '\0'; k += 1)
5487         if (!isdigit (str[k]) && str[k] != '_')
5488           return 0;
5489       return 1;
5490     }
5491   return 0;
5492 }
5493
5494 /* Return non-zero if the string starting at NAME and ending before
5495    NAME_END contains no capital letters.  */
5496
5497 static int
5498 is_valid_name_for_wild_match (const char *name0)
5499 {
5500   const char *decoded_name = ada_decode (name0);
5501   int i;
5502
5503   /* If the decoded name starts with an angle bracket, it means that
5504      NAME0 does not follow the GNAT encoding format.  It should then
5505      not be allowed as a possible wild match.  */
5506   if (decoded_name[0] == '<')
5507     return 0;
5508
5509   for (i=0; decoded_name[i] != '\0'; i++)
5510     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5511       return 0;
5512
5513   return 1;
5514 }
5515
5516 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5517    that could start a simple name.  Assumes that *NAMEP points into
5518    the string beginning at NAME0.  */
5519
5520 static int
5521 advance_wild_match (const char **namep, const char *name0, int target0)
5522 {
5523   const char *name = *namep;
5524
5525   while (1)
5526     {
5527       int t0, t1;
5528
5529       t0 = *name;
5530       if (t0 == '_')
5531         {
5532           t1 = name[1];
5533           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5534             {
5535               name += 1;
5536               if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5537                 break;
5538               else
5539                 name += 1;
5540             }
5541           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5542                                  || name[2] == target0))
5543             {
5544               name += 2;
5545               break;
5546             }
5547           else
5548             return 0;
5549         }
5550       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5551         name += 1;
5552       else
5553         return 0;
5554     }
5555
5556   *namep = name;
5557   return 1;
5558 }
5559
5560 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5561    informational suffixes of NAME (i.e., for which is_name_suffix is
5562    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5563
5564 static int
5565 wild_match (const char *name, const char *patn)
5566 {
5567   const char *p;
5568   const char *name0 = name;
5569
5570   while (1)
5571     {
5572       const char *match = name;
5573
5574       if (*name == *patn)
5575         {
5576           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5577             if (*p != *name)
5578               break;
5579           if (*p == '\0' && is_name_suffix (name))
5580             return match != name0 && !is_valid_name_for_wild_match (name0);
5581
5582           if (name[-1] == '_')
5583             name -= 1;
5584         }
5585       if (!advance_wild_match (&name, name0, *patn))
5586         return 1;
5587     }
5588 }
5589
5590 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5591    informational suffix.  */
5592
5593 static int
5594 full_match (const char *sym_name, const char *search_name)
5595 {
5596   return !match_name (sym_name, search_name, 0);
5597 }
5598
5599
5600 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5601    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5602    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5603    OBJFILE is the section containing BLOCK.  */
5604
5605 static void
5606 ada_add_block_symbols (struct obstack *obstackp,
5607                        struct block *block, const char *name,
5608                        domain_enum domain, struct objfile *objfile,
5609                        int wild)
5610 {
5611   struct block_iterator iter;
5612   int name_len = strlen (name);
5613   /* A matching argument symbol, if any.  */
5614   struct symbol *arg_sym;
5615   /* Set true when we find a matching non-argument symbol.  */
5616   int found_sym;
5617   struct symbol *sym;
5618
5619   arg_sym = NULL;
5620   found_sym = 0;
5621   if (wild)
5622     {
5623       for (sym = block_iter_match_first (block, name, wild_match, &iter);
5624            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5625       {
5626         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5627                                    SYMBOL_DOMAIN (sym), domain)
5628             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5629           {
5630             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5631               continue;
5632             else if (SYMBOL_IS_ARGUMENT (sym))
5633               arg_sym = sym;
5634             else
5635               {
5636                 found_sym = 1;
5637                 add_defn_to_vec (obstackp,
5638                                  fixup_symbol_section (sym, objfile),
5639                                  block);
5640               }
5641           }
5642       }
5643     }
5644   else
5645     {
5646      for (sym = block_iter_match_first (block, name, full_match, &iter);
5647           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5648       {
5649         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5650                                    SYMBOL_DOMAIN (sym), domain))
5651           {
5652             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5653               {
5654                 if (SYMBOL_IS_ARGUMENT (sym))
5655                   arg_sym = sym;
5656                 else
5657                   {
5658                     found_sym = 1;
5659                     add_defn_to_vec (obstackp,
5660                                      fixup_symbol_section (sym, objfile),
5661                                      block);
5662                   }
5663               }
5664           }
5665       }
5666     }
5667
5668   if (!found_sym && arg_sym != NULL)
5669     {
5670       add_defn_to_vec (obstackp,
5671                        fixup_symbol_section (arg_sym, objfile),
5672                        block);
5673     }
5674
5675   if (!wild)
5676     {
5677       arg_sym = NULL;
5678       found_sym = 0;
5679
5680       ALL_BLOCK_SYMBOLS (block, iter, sym)
5681       {
5682         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5683                                    SYMBOL_DOMAIN (sym), domain))
5684           {
5685             int cmp;
5686
5687             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5688             if (cmp == 0)
5689               {
5690                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5691                 if (cmp == 0)
5692                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5693                                  name_len);
5694               }
5695
5696             if (cmp == 0
5697                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5698               {
5699                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5700                   {
5701                     if (SYMBOL_IS_ARGUMENT (sym))
5702                       arg_sym = sym;
5703                     else
5704                       {
5705                         found_sym = 1;
5706                         add_defn_to_vec (obstackp,
5707                                          fixup_symbol_section (sym, objfile),
5708                                          block);
5709                       }
5710                   }
5711               }
5712           }
5713       }
5714
5715       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5716          They aren't parameters, right?  */
5717       if (!found_sym && arg_sym != NULL)
5718         {
5719           add_defn_to_vec (obstackp,
5720                            fixup_symbol_section (arg_sym, objfile),
5721                            block);
5722         }
5723     }
5724 }
5725 \f
5726
5727                                 /* Symbol Completion */
5728
5729 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5730    name in a form that's appropriate for the completion.  The result
5731    does not need to be deallocated, but is only good until the next call.
5732
5733    TEXT_LEN is equal to the length of TEXT.
5734    Perform a wild match if WILD_MATCH_P is set.
5735    ENCODED_P should be set if TEXT represents the start of a symbol name
5736    in its encoded form.  */
5737
5738 static const char *
5739 symbol_completion_match (const char *sym_name,
5740                          const char *text, int text_len,
5741                          int wild_match_p, int encoded_p)
5742 {
5743   const int verbatim_match = (text[0] == '<');
5744   int match = 0;
5745
5746   if (verbatim_match)
5747     {
5748       /* Strip the leading angle bracket.  */
5749       text = text + 1;
5750       text_len--;
5751     }
5752
5753   /* First, test against the fully qualified name of the symbol.  */
5754
5755   if (strncmp (sym_name, text, text_len) == 0)
5756     match = 1;
5757
5758   if (match && !encoded_p)
5759     {
5760       /* One needed check before declaring a positive match is to verify
5761          that iff we are doing a verbatim match, the decoded version
5762          of the symbol name starts with '<'.  Otherwise, this symbol name
5763          is not a suitable completion.  */
5764       const char *sym_name_copy = sym_name;
5765       int has_angle_bracket;
5766
5767       sym_name = ada_decode (sym_name);
5768       has_angle_bracket = (sym_name[0] == '<');
5769       match = (has_angle_bracket == verbatim_match);
5770       sym_name = sym_name_copy;
5771     }
5772
5773   if (match && !verbatim_match)
5774     {
5775       /* When doing non-verbatim match, another check that needs to
5776          be done is to verify that the potentially matching symbol name
5777          does not include capital letters, because the ada-mode would
5778          not be able to understand these symbol names without the
5779          angle bracket notation.  */
5780       const char *tmp;
5781
5782       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5783       if (*tmp != '\0')
5784         match = 0;
5785     }
5786
5787   /* Second: Try wild matching...  */
5788
5789   if (!match && wild_match_p)
5790     {
5791       /* Since we are doing wild matching, this means that TEXT
5792          may represent an unqualified symbol name.  We therefore must
5793          also compare TEXT against the unqualified name of the symbol.  */
5794       sym_name = ada_unqualified_name (ada_decode (sym_name));
5795
5796       if (strncmp (sym_name, text, text_len) == 0)
5797         match = 1;
5798     }
5799
5800   /* Finally: If we found a mach, prepare the result to return.  */
5801
5802   if (!match)
5803     return NULL;
5804
5805   if (verbatim_match)
5806     sym_name = add_angle_brackets (sym_name);
5807
5808   if (!encoded_p)
5809     sym_name = ada_decode (sym_name);
5810
5811   return sym_name;
5812 }
5813
5814 /* A companion function to ada_make_symbol_completion_list().
5815    Check if SYM_NAME represents a symbol which name would be suitable
5816    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5817    it is appended at the end of the given string vector SV.
5818
5819    ORIG_TEXT is the string original string from the user command
5820    that needs to be completed.  WORD is the entire command on which
5821    completion should be performed.  These two parameters are used to
5822    determine which part of the symbol name should be added to the
5823    completion vector.
5824    if WILD_MATCH_P is set, then wild matching is performed.
5825    ENCODED_P should be set if TEXT represents a symbol name in its
5826    encoded formed (in which case the completion should also be
5827    encoded).  */
5828
5829 static void
5830 symbol_completion_add (VEC(char_ptr) **sv,
5831                        const char *sym_name,
5832                        const char *text, int text_len,
5833                        const char *orig_text, const char *word,
5834                        int wild_match_p, int encoded_p)
5835 {
5836   const char *match = symbol_completion_match (sym_name, text, text_len,
5837                                                wild_match_p, encoded_p);
5838   char *completion;
5839
5840   if (match == NULL)
5841     return;
5842
5843   /* We found a match, so add the appropriate completion to the given
5844      string vector.  */
5845
5846   if (word == orig_text)
5847     {
5848       completion = xmalloc (strlen (match) + 5);
5849       strcpy (completion, match);
5850     }
5851   else if (word > orig_text)
5852     {
5853       /* Return some portion of sym_name.  */
5854       completion = xmalloc (strlen (match) + 5);
5855       strcpy (completion, match + (word - orig_text));
5856     }
5857   else
5858     {
5859       /* Return some of ORIG_TEXT plus sym_name.  */
5860       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5861       strncpy (completion, word, orig_text - word);
5862       completion[orig_text - word] = '\0';
5863       strcat (completion, match);
5864     }
5865
5866   VEC_safe_push (char_ptr, *sv, completion);
5867 }
5868
5869 /* An object of this type is passed as the user_data argument to the
5870    expand_partial_symbol_names method.  */
5871 struct add_partial_datum
5872 {
5873   VEC(char_ptr) **completions;
5874   const char *text;
5875   int text_len;
5876   const char *text0;
5877   const char *word;
5878   int wild_match;
5879   int encoded;
5880 };
5881
5882 /* A callback for expand_partial_symbol_names.  */
5883 static int
5884 ada_expand_partial_symbol_name (const char *name, void *user_data)
5885 {
5886   struct add_partial_datum *data = user_data;
5887   
5888   return symbol_completion_match (name, data->text, data->text_len,
5889                                   data->wild_match, data->encoded) != NULL;
5890 }
5891
5892 /* Return a list of possible symbol names completing TEXT0.  WORD is
5893    the entire command on which completion is made.  */
5894
5895 static VEC (char_ptr) *
5896 ada_make_symbol_completion_list (const char *text0, const char *word,
5897                                  enum type_code code)
5898 {
5899   char *text;
5900   int text_len;
5901   int wild_match_p;
5902   int encoded_p;
5903   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
5904   struct symbol *sym;
5905   struct symtab *s;
5906   struct minimal_symbol *msymbol;
5907   struct objfile *objfile;
5908   struct block *b, *surrounding_static_block = 0;
5909   int i;
5910   struct block_iterator iter;
5911   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
5912
5913   gdb_assert (code == TYPE_CODE_UNDEF);
5914
5915   if (text0[0] == '<')
5916     {
5917       text = xstrdup (text0);
5918       make_cleanup (xfree, text);
5919       text_len = strlen (text);
5920       wild_match_p = 0;
5921       encoded_p = 1;
5922     }
5923   else
5924     {
5925       text = xstrdup (ada_encode (text0));
5926       make_cleanup (xfree, text);
5927       text_len = strlen (text);
5928       for (i = 0; i < text_len; i++)
5929         text[i] = tolower (text[i]);
5930
5931       encoded_p = (strstr (text0, "__") != NULL);
5932       /* If the name contains a ".", then the user is entering a fully
5933          qualified entity name, and the match must not be done in wild
5934          mode.  Similarly, if the user wants to complete what looks like
5935          an encoded name, the match must not be done in wild mode.  */
5936       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
5937     }
5938
5939   /* First, look at the partial symtab symbols.  */
5940   {
5941     struct add_partial_datum data;
5942
5943     data.completions = &completions;
5944     data.text = text;
5945     data.text_len = text_len;
5946     data.text0 = text0;
5947     data.word = word;
5948     data.wild_match = wild_match_p;
5949     data.encoded = encoded_p;
5950     expand_partial_symbol_names (ada_expand_partial_symbol_name, &data);
5951   }
5952
5953   /* At this point scan through the misc symbol vectors and add each
5954      symbol you find to the list.  Eventually we want to ignore
5955      anything that isn't a text symbol (everything else will be
5956      handled by the psymtab code above).  */
5957
5958   ALL_MSYMBOLS (objfile, msymbol)
5959   {
5960     QUIT;
5961     symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
5962                            text, text_len, text0, word, wild_match_p,
5963                            encoded_p);
5964   }
5965
5966   /* Search upwards from currently selected frame (so that we can
5967      complete on local vars.  */
5968
5969   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5970     {
5971       if (!BLOCK_SUPERBLOCK (b))
5972         surrounding_static_block = b;   /* For elmin of dups */
5973
5974       ALL_BLOCK_SYMBOLS (b, iter, sym)
5975       {
5976         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5977                                text, text_len, text0, word,
5978                                wild_match_p, encoded_p);
5979       }
5980     }
5981
5982   /* Go through the symtabs and check the externs and statics for
5983      symbols which match.  */
5984
5985   ALL_SYMTABS (objfile, s)
5986   {
5987     QUIT;
5988     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5989     ALL_BLOCK_SYMBOLS (b, iter, sym)
5990     {
5991       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5992                              text, text_len, text0, word,
5993                              wild_match_p, encoded_p);
5994     }
5995   }
5996
5997   ALL_SYMTABS (objfile, s)
5998   {
5999     QUIT;
6000     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
6001     /* Don't do this block twice.  */
6002     if (b == surrounding_static_block)
6003       continue;
6004     ALL_BLOCK_SYMBOLS (b, iter, sym)
6005     {
6006       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6007                              text, text_len, text0, word,
6008                              wild_match_p, encoded_p);
6009     }
6010   }
6011
6012   do_cleanups (old_chain);
6013   return completions;
6014 }
6015
6016                                 /* Field Access */
6017
6018 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6019    for tagged types.  */
6020
6021 static int
6022 ada_is_dispatch_table_ptr_type (struct type *type)
6023 {
6024   const char *name;
6025
6026   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6027     return 0;
6028
6029   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6030   if (name == NULL)
6031     return 0;
6032
6033   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6034 }
6035
6036 /* Return non-zero if TYPE is an interface tag.  */
6037
6038 static int
6039 ada_is_interface_tag (struct type *type)
6040 {
6041   const char *name = TYPE_NAME (type);
6042
6043   if (name == NULL)
6044     return 0;
6045
6046   return (strcmp (name, "ada__tags__interface_tag") == 0);
6047 }
6048
6049 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6050    to be invisible to users.  */
6051
6052 int
6053 ada_is_ignored_field (struct type *type, int field_num)
6054 {
6055   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6056     return 1;
6057
6058   /* Check the name of that field.  */
6059   {
6060     const char *name = TYPE_FIELD_NAME (type, field_num);
6061
6062     /* Anonymous field names should not be printed.
6063        brobecker/2007-02-20: I don't think this can actually happen
6064        but we don't want to print the value of annonymous fields anyway.  */
6065     if (name == NULL)
6066       return 1;
6067
6068     /* Normally, fields whose name start with an underscore ("_")
6069        are fields that have been internally generated by the compiler,
6070        and thus should not be printed.  The "_parent" field is special,
6071        however: This is a field internally generated by the compiler
6072        for tagged types, and it contains the components inherited from
6073        the parent type.  This field should not be printed as is, but
6074        should not be ignored either.  */
6075     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6076       return 1;
6077   }
6078
6079   /* If this is the dispatch table of a tagged type or an interface tag,
6080      then ignore.  */
6081   if (ada_is_tagged_type (type, 1)
6082       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6083           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6084     return 1;
6085
6086   /* Not a special field, so it should not be ignored.  */
6087   return 0;
6088 }
6089
6090 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6091    pointer or reference type whose ultimate target has a tag field.  */
6092
6093 int
6094 ada_is_tagged_type (struct type *type, int refok)
6095 {
6096   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6097 }
6098
6099 /* True iff TYPE represents the type of X'Tag */
6100
6101 int
6102 ada_is_tag_type (struct type *type)
6103 {
6104   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6105     return 0;
6106   else
6107     {
6108       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6109
6110       return (name != NULL
6111               && strcmp (name, "ada__tags__dispatch_table") == 0);
6112     }
6113 }
6114
6115 /* The type of the tag on VAL.  */
6116
6117 struct type *
6118 ada_tag_type (struct value *val)
6119 {
6120   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6121 }
6122
6123 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6124    retired at Ada 05).  */
6125
6126 static int
6127 is_ada95_tag (struct value *tag)
6128 {
6129   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6130 }
6131
6132 /* The value of the tag on VAL.  */
6133
6134 struct value *
6135 ada_value_tag (struct value *val)
6136 {
6137   return ada_value_struct_elt (val, "_tag", 0);
6138 }
6139
6140 /* The value of the tag on the object of type TYPE whose contents are
6141    saved at VALADDR, if it is non-null, or is at memory address
6142    ADDRESS.  */
6143
6144 static struct value *
6145 value_tag_from_contents_and_address (struct type *type,
6146                                      const gdb_byte *valaddr,
6147                                      CORE_ADDR address)
6148 {
6149   int tag_byte_offset;
6150   struct type *tag_type;
6151
6152   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6153                          NULL, NULL, NULL))
6154     {
6155       const gdb_byte *valaddr1 = ((valaddr == NULL)
6156                                   ? NULL
6157                                   : valaddr + tag_byte_offset);
6158       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6159
6160       return value_from_contents_and_address (tag_type, valaddr1, address1);
6161     }
6162   return NULL;
6163 }
6164
6165 static struct type *
6166 type_from_tag (struct value *tag)
6167 {
6168   const char *type_name = ada_tag_name (tag);
6169
6170   if (type_name != NULL)
6171     return ada_find_any_type (ada_encode (type_name));
6172   return NULL;
6173 }
6174
6175 /* Given a value OBJ of a tagged type, return a value of this
6176    type at the base address of the object.  The base address, as
6177    defined in Ada.Tags, it is the address of the primary tag of
6178    the object, and therefore where the field values of its full
6179    view can be fetched.  */
6180
6181 struct value *
6182 ada_tag_value_at_base_address (struct value *obj)
6183 {
6184   volatile struct gdb_exception e;
6185   struct value *val;
6186   LONGEST offset_to_top = 0;
6187   struct type *ptr_type, *obj_type;
6188   struct value *tag;
6189   CORE_ADDR base_address;
6190
6191   obj_type = value_type (obj);
6192
6193   /* It is the responsability of the caller to deref pointers.  */
6194
6195   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6196       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6197     return obj;
6198
6199   tag = ada_value_tag (obj);
6200   if (!tag)
6201     return obj;
6202
6203   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6204
6205   if (is_ada95_tag (tag))
6206     return obj;
6207
6208   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6209   ptr_type = lookup_pointer_type (ptr_type);
6210   val = value_cast (ptr_type, tag);
6211   if (!val)
6212     return obj;
6213
6214   /* It is perfectly possible that an exception be raised while
6215      trying to determine the base address, just like for the tag;
6216      see ada_tag_name for more details.  We do not print the error
6217      message for the same reason.  */
6218
6219   TRY_CATCH (e, RETURN_MASK_ERROR)
6220     {
6221       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6222     }
6223
6224   if (e.reason < 0)
6225     return obj;
6226
6227   /* If offset is null, nothing to do.  */
6228
6229   if (offset_to_top == 0)
6230     return obj;
6231
6232   /* -1 is a special case in Ada.Tags; however, what should be done
6233      is not quite clear from the documentation.  So do nothing for
6234      now.  */
6235
6236   if (offset_to_top == -1)
6237     return obj;
6238
6239   base_address = value_address (obj) - offset_to_top;
6240   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6241
6242   /* Make sure that we have a proper tag at the new address.
6243      Otherwise, offset_to_top is bogus (which can happen when
6244      the object is not initialized yet).  */
6245
6246   if (!tag)
6247     return obj;
6248
6249   obj_type = type_from_tag (tag);
6250
6251   if (!obj_type)
6252     return obj;
6253
6254   return value_from_contents_and_address (obj_type, NULL, base_address);
6255 }
6256
6257 /* Return the "ada__tags__type_specific_data" type.  */
6258
6259 static struct type *
6260 ada_get_tsd_type (struct inferior *inf)
6261 {
6262   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6263
6264   if (data->tsd_type == 0)
6265     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6266   return data->tsd_type;
6267 }
6268
6269 /* Return the TSD (type-specific data) associated to the given TAG.
6270    TAG is assumed to be the tag of a tagged-type entity.
6271
6272    May return NULL if we are unable to get the TSD.  */
6273
6274 static struct value *
6275 ada_get_tsd_from_tag (struct value *tag)
6276 {
6277   struct value *val;
6278   struct type *type;
6279
6280   /* First option: The TSD is simply stored as a field of our TAG.
6281      Only older versions of GNAT would use this format, but we have
6282      to test it first, because there are no visible markers for
6283      the current approach except the absence of that field.  */
6284
6285   val = ada_value_struct_elt (tag, "tsd", 1);
6286   if (val)
6287     return val;
6288
6289   /* Try the second representation for the dispatch table (in which
6290      there is no explicit 'tsd' field in the referent of the tag pointer,
6291      and instead the tsd pointer is stored just before the dispatch
6292      table.  */
6293
6294   type = ada_get_tsd_type (current_inferior());
6295   if (type == NULL)
6296     return NULL;
6297   type = lookup_pointer_type (lookup_pointer_type (type));
6298   val = value_cast (type, tag);
6299   if (val == NULL)
6300     return NULL;
6301   return value_ind (value_ptradd (val, -1));
6302 }
6303
6304 /* Given the TSD of a tag (type-specific data), return a string
6305    containing the name of the associated type.
6306
6307    The returned value is good until the next call.  May return NULL
6308    if we are unable to determine the tag name.  */
6309
6310 static char *
6311 ada_tag_name_from_tsd (struct value *tsd)
6312 {
6313   static char name[1024];
6314   char *p;
6315   struct value *val;
6316
6317   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6318   if (val == NULL)
6319     return NULL;
6320   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6321   for (p = name; *p != '\0'; p += 1)
6322     if (isalpha (*p))
6323       *p = tolower (*p);
6324   return name;
6325 }
6326
6327 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6328    a C string.
6329
6330    Return NULL if the TAG is not an Ada tag, or if we were unable to
6331    determine the name of that tag.  The result is good until the next
6332    call.  */
6333
6334 const char *
6335 ada_tag_name (struct value *tag)
6336 {
6337   volatile struct gdb_exception e;
6338   char *name = NULL;
6339
6340   if (!ada_is_tag_type (value_type (tag)))
6341     return NULL;
6342
6343   /* It is perfectly possible that an exception be raised while trying
6344      to determine the TAG's name, even under normal circumstances:
6345      The associated variable may be uninitialized or corrupted, for
6346      instance. We do not let any exception propagate past this point.
6347      instead we return NULL.
6348
6349      We also do not print the error message either (which often is very
6350      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6351      the caller print a more meaningful message if necessary.  */
6352   TRY_CATCH (e, RETURN_MASK_ERROR)
6353     {
6354       struct value *tsd = ada_get_tsd_from_tag (tag);
6355
6356       if (tsd != NULL)
6357         name = ada_tag_name_from_tsd (tsd);
6358     }
6359
6360   return name;
6361 }
6362
6363 /* The parent type of TYPE, or NULL if none.  */
6364
6365 struct type *
6366 ada_parent_type (struct type *type)
6367 {
6368   int i;
6369
6370   type = ada_check_typedef (type);
6371
6372   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6373     return NULL;
6374
6375   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6376     if (ada_is_parent_field (type, i))
6377       {
6378         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6379
6380         /* If the _parent field is a pointer, then dereference it.  */
6381         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6382           parent_type = TYPE_TARGET_TYPE (parent_type);
6383         /* If there is a parallel XVS type, get the actual base type.  */
6384         parent_type = ada_get_base_type (parent_type);
6385
6386         return ada_check_typedef (parent_type);
6387       }
6388
6389   return NULL;
6390 }
6391
6392 /* True iff field number FIELD_NUM of structure type TYPE contains the
6393    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6394    a structure type with at least FIELD_NUM+1 fields.  */
6395
6396 int
6397 ada_is_parent_field (struct type *type, int field_num)
6398 {
6399   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6400
6401   return (name != NULL
6402           && (strncmp (name, "PARENT", 6) == 0
6403               || strncmp (name, "_parent", 7) == 0));
6404 }
6405
6406 /* True iff field number FIELD_NUM of structure type TYPE is a
6407    transparent wrapper field (which should be silently traversed when doing
6408    field selection and flattened when printing).  Assumes TYPE is a
6409    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6410    structures.  */
6411
6412 int
6413 ada_is_wrapper_field (struct type *type, int field_num)
6414 {
6415   const char *name = TYPE_FIELD_NAME (type, field_num);
6416
6417   return (name != NULL
6418           && (strncmp (name, "PARENT", 6) == 0
6419               || strcmp (name, "REP") == 0
6420               || strncmp (name, "_parent", 7) == 0
6421               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6422 }
6423
6424 /* True iff field number FIELD_NUM of structure or union type TYPE
6425    is a variant wrapper.  Assumes TYPE is a structure type with at least
6426    FIELD_NUM+1 fields.  */
6427
6428 int
6429 ada_is_variant_part (struct type *type, int field_num)
6430 {
6431   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6432
6433   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6434           || (is_dynamic_field (type, field_num)
6435               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
6436                   == TYPE_CODE_UNION)));
6437 }
6438
6439 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6440    whose discriminants are contained in the record type OUTER_TYPE,
6441    returns the type of the controlling discriminant for the variant.
6442    May return NULL if the type could not be found.  */
6443
6444 struct type *
6445 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6446 {
6447   char *name = ada_variant_discrim_name (var_type);
6448
6449   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6450 }
6451
6452 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6453    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6454    represents a 'when others' clause; otherwise 0.  */
6455
6456 int
6457 ada_is_others_clause (struct type *type, int field_num)
6458 {
6459   const char *name = TYPE_FIELD_NAME (type, field_num);
6460
6461   return (name != NULL && name[0] == 'O');
6462 }
6463
6464 /* Assuming that TYPE0 is the type of the variant part of a record,
6465    returns the name of the discriminant controlling the variant.
6466    The value is valid until the next call to ada_variant_discrim_name.  */
6467
6468 char *
6469 ada_variant_discrim_name (struct type *type0)
6470 {
6471   static char *result = NULL;
6472   static size_t result_len = 0;
6473   struct type *type;
6474   const char *name;
6475   const char *discrim_end;
6476   const char *discrim_start;
6477
6478   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6479     type = TYPE_TARGET_TYPE (type0);
6480   else
6481     type = type0;
6482
6483   name = ada_type_name (type);
6484
6485   if (name == NULL || name[0] == '\000')
6486     return "";
6487
6488   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6489        discrim_end -= 1)
6490     {
6491       if (strncmp (discrim_end, "___XVN", 6) == 0)
6492         break;
6493     }
6494   if (discrim_end == name)
6495     return "";
6496
6497   for (discrim_start = discrim_end; discrim_start != name + 3;
6498        discrim_start -= 1)
6499     {
6500       if (discrim_start == name + 1)
6501         return "";
6502       if ((discrim_start > name + 3
6503            && strncmp (discrim_start - 3, "___", 3) == 0)
6504           || discrim_start[-1] == '.')
6505         break;
6506     }
6507
6508   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6509   strncpy (result, discrim_start, discrim_end - discrim_start);
6510   result[discrim_end - discrim_start] = '\0';
6511   return result;
6512 }
6513
6514 /* Scan STR for a subtype-encoded number, beginning at position K.
6515    Put the position of the character just past the number scanned in
6516    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6517    Return 1 if there was a valid number at the given position, and 0
6518    otherwise.  A "subtype-encoded" number consists of the absolute value
6519    in decimal, followed by the letter 'm' to indicate a negative number.
6520    Assumes 0m does not occur.  */
6521
6522 int
6523 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6524 {
6525   ULONGEST RU;
6526
6527   if (!isdigit (str[k]))
6528     return 0;
6529
6530   /* Do it the hard way so as not to make any assumption about
6531      the relationship of unsigned long (%lu scan format code) and
6532      LONGEST.  */
6533   RU = 0;
6534   while (isdigit (str[k]))
6535     {
6536       RU = RU * 10 + (str[k] - '0');
6537       k += 1;
6538     }
6539
6540   if (str[k] == 'm')
6541     {
6542       if (R != NULL)
6543         *R = (-(LONGEST) (RU - 1)) - 1;
6544       k += 1;
6545     }
6546   else if (R != NULL)
6547     *R = (LONGEST) RU;
6548
6549   /* NOTE on the above: Technically, C does not say what the results of
6550      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6551      number representable as a LONGEST (although either would probably work
6552      in most implementations).  When RU>0, the locution in the then branch
6553      above is always equivalent to the negative of RU.  */
6554
6555   if (new_k != NULL)
6556     *new_k = k;
6557   return 1;
6558 }
6559
6560 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6561    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6562    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6563
6564 int
6565 ada_in_variant (LONGEST val, struct type *type, int field_num)
6566 {
6567   const char *name = TYPE_FIELD_NAME (type, field_num);
6568   int p;
6569
6570   p = 0;
6571   while (1)
6572     {
6573       switch (name[p])
6574         {
6575         case '\0':
6576           return 0;
6577         case 'S':
6578           {
6579             LONGEST W;
6580
6581             if (!ada_scan_number (name, p + 1, &W, &p))
6582               return 0;
6583             if (val == W)
6584               return 1;
6585             break;
6586           }
6587         case 'R':
6588           {
6589             LONGEST L, U;
6590
6591             if (!ada_scan_number (name, p + 1, &L, &p)
6592                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6593               return 0;
6594             if (val >= L && val <= U)
6595               return 1;
6596             break;
6597           }
6598         case 'O':
6599           return 1;
6600         default:
6601           return 0;
6602         }
6603     }
6604 }
6605
6606 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6607
6608 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6609    ARG_TYPE, extract and return the value of one of its (non-static)
6610    fields.  FIELDNO says which field.   Differs from value_primitive_field
6611    only in that it can handle packed values of arbitrary type.  */
6612
6613 static struct value *
6614 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6615                            struct type *arg_type)
6616 {
6617   struct type *type;
6618
6619   arg_type = ada_check_typedef (arg_type);
6620   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6621
6622   /* Handle packed fields.  */
6623
6624   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6625     {
6626       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6627       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6628
6629       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6630                                              offset + bit_pos / 8,
6631                                              bit_pos % 8, bit_size, type);
6632     }
6633   else
6634     return value_primitive_field (arg1, offset, fieldno, arg_type);
6635 }
6636
6637 /* Find field with name NAME in object of type TYPE.  If found, 
6638    set the following for each argument that is non-null:
6639     - *FIELD_TYPE_P to the field's type; 
6640     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6641       an object of that type;
6642     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6643     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6644       0 otherwise;
6645    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6646    fields up to but not including the desired field, or by the total
6647    number of fields if not found.   A NULL value of NAME never
6648    matches; the function just counts visible fields in this case.
6649    
6650    Returns 1 if found, 0 otherwise.  */
6651
6652 static int
6653 find_struct_field (const char *name, struct type *type, int offset,
6654                    struct type **field_type_p,
6655                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6656                    int *index_p)
6657 {
6658   int i;
6659
6660   type = ada_check_typedef (type);
6661
6662   if (field_type_p != NULL)
6663     *field_type_p = NULL;
6664   if (byte_offset_p != NULL)
6665     *byte_offset_p = 0;
6666   if (bit_offset_p != NULL)
6667     *bit_offset_p = 0;
6668   if (bit_size_p != NULL)
6669     *bit_size_p = 0;
6670
6671   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6672     {
6673       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6674       int fld_offset = offset + bit_pos / 8;
6675       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6676
6677       if (t_field_name == NULL)
6678         continue;
6679
6680       else if (name != NULL && field_name_match (t_field_name, name))
6681         {
6682           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6683
6684           if (field_type_p != NULL)
6685             *field_type_p = TYPE_FIELD_TYPE (type, i);
6686           if (byte_offset_p != NULL)
6687             *byte_offset_p = fld_offset;
6688           if (bit_offset_p != NULL)
6689             *bit_offset_p = bit_pos % 8;
6690           if (bit_size_p != NULL)
6691             *bit_size_p = bit_size;
6692           return 1;
6693         }
6694       else if (ada_is_wrapper_field (type, i))
6695         {
6696           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6697                                  field_type_p, byte_offset_p, bit_offset_p,
6698                                  bit_size_p, index_p))
6699             return 1;
6700         }
6701       else if (ada_is_variant_part (type, i))
6702         {
6703           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6704              fixed type?? */
6705           int j;
6706           struct type *field_type
6707             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6708
6709           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6710             {
6711               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6712                                      fld_offset
6713                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6714                                      field_type_p, byte_offset_p,
6715                                      bit_offset_p, bit_size_p, index_p))
6716                 return 1;
6717             }
6718         }
6719       else if (index_p != NULL)
6720         *index_p += 1;
6721     }
6722   return 0;
6723 }
6724
6725 /* Number of user-visible fields in record type TYPE.  */
6726
6727 static int
6728 num_visible_fields (struct type *type)
6729 {
6730   int n;
6731
6732   n = 0;
6733   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6734   return n;
6735 }
6736
6737 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6738    and search in it assuming it has (class) type TYPE.
6739    If found, return value, else return NULL.
6740
6741    Searches recursively through wrapper fields (e.g., '_parent').  */
6742
6743 static struct value *
6744 ada_search_struct_field (char *name, struct value *arg, int offset,
6745                          struct type *type)
6746 {
6747   int i;
6748
6749   type = ada_check_typedef (type);
6750   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6751     {
6752       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6753
6754       if (t_field_name == NULL)
6755         continue;
6756
6757       else if (field_name_match (t_field_name, name))
6758         return ada_value_primitive_field (arg, offset, i, type);
6759
6760       else if (ada_is_wrapper_field (type, i))
6761         {
6762           struct value *v =     /* Do not let indent join lines here.  */
6763             ada_search_struct_field (name, arg,
6764                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
6765                                      TYPE_FIELD_TYPE (type, i));
6766
6767           if (v != NULL)
6768             return v;
6769         }
6770
6771       else if (ada_is_variant_part (type, i))
6772         {
6773           /* PNH: Do we ever get here?  See find_struct_field.  */
6774           int j;
6775           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
6776                                                                         i));
6777           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
6778
6779           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6780             {
6781               struct value *v = ada_search_struct_field /* Force line
6782                                                            break.  */
6783                 (name, arg,
6784                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
6785                  TYPE_FIELD_TYPE (field_type, j));
6786
6787               if (v != NULL)
6788                 return v;
6789             }
6790         }
6791     }
6792   return NULL;
6793 }
6794
6795 static struct value *ada_index_struct_field_1 (int *, struct value *,
6796                                                int, struct type *);
6797
6798
6799 /* Return field #INDEX in ARG, where the index is that returned by
6800  * find_struct_field through its INDEX_P argument.  Adjust the address
6801  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
6802  * If found, return value, else return NULL.  */
6803
6804 static struct value *
6805 ada_index_struct_field (int index, struct value *arg, int offset,
6806                         struct type *type)
6807 {
6808   return ada_index_struct_field_1 (&index, arg, offset, type);
6809 }
6810
6811
6812 /* Auxiliary function for ada_index_struct_field.  Like
6813  * ada_index_struct_field, but takes index from *INDEX_P and modifies
6814  * *INDEX_P.  */
6815
6816 static struct value *
6817 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6818                           struct type *type)
6819 {
6820   int i;
6821   type = ada_check_typedef (type);
6822
6823   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6824     {
6825       if (TYPE_FIELD_NAME (type, i) == NULL)
6826         continue;
6827       else if (ada_is_wrapper_field (type, i))
6828         {
6829           struct value *v =     /* Do not let indent join lines here.  */
6830             ada_index_struct_field_1 (index_p, arg,
6831                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
6832                                       TYPE_FIELD_TYPE (type, i));
6833
6834           if (v != NULL)
6835             return v;
6836         }
6837
6838       else if (ada_is_variant_part (type, i))
6839         {
6840           /* PNH: Do we ever get here?  See ada_search_struct_field,
6841              find_struct_field.  */
6842           error (_("Cannot assign this kind of variant record"));
6843         }
6844       else if (*index_p == 0)
6845         return ada_value_primitive_field (arg, offset, i, type);
6846       else
6847         *index_p -= 1;
6848     }
6849   return NULL;
6850 }
6851
6852 /* Given ARG, a value of type (pointer or reference to a)*
6853    structure/union, extract the component named NAME from the ultimate
6854    target structure/union and return it as a value with its
6855    appropriate type.
6856
6857    The routine searches for NAME among all members of the structure itself
6858    and (recursively) among all members of any wrapper members
6859    (e.g., '_parent').
6860
6861    If NO_ERR, then simply return NULL in case of error, rather than 
6862    calling error.  */
6863
6864 struct value *
6865 ada_value_struct_elt (struct value *arg, char *name, int no_err)
6866 {
6867   struct type *t, *t1;
6868   struct value *v;
6869
6870   v = NULL;
6871   t1 = t = ada_check_typedef (value_type (arg));
6872   if (TYPE_CODE (t) == TYPE_CODE_REF)
6873     {
6874       t1 = TYPE_TARGET_TYPE (t);
6875       if (t1 == NULL)
6876         goto BadValue;
6877       t1 = ada_check_typedef (t1);
6878       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6879         {
6880           arg = coerce_ref (arg);
6881           t = t1;
6882         }
6883     }
6884
6885   while (TYPE_CODE (t) == TYPE_CODE_PTR)
6886     {
6887       t1 = TYPE_TARGET_TYPE (t);
6888       if (t1 == NULL)
6889         goto BadValue;
6890       t1 = ada_check_typedef (t1);
6891       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6892         {
6893           arg = value_ind (arg);
6894           t = t1;
6895         }
6896       else
6897         break;
6898     }
6899
6900   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
6901     goto BadValue;
6902
6903   if (t1 == t)
6904     v = ada_search_struct_field (name, arg, 0, t);
6905   else
6906     {
6907       int bit_offset, bit_size, byte_offset;
6908       struct type *field_type;
6909       CORE_ADDR address;
6910
6911       if (TYPE_CODE (t) == TYPE_CODE_PTR)
6912         address = value_address (ada_value_ind (arg));
6913       else
6914         address = value_address (ada_coerce_ref (arg));
6915
6916       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
6917       if (find_struct_field (name, t1, 0,
6918                              &field_type, &byte_offset, &bit_offset,
6919                              &bit_size, NULL))
6920         {
6921           if (bit_size != 0)
6922             {
6923               if (TYPE_CODE (t) == TYPE_CODE_REF)
6924                 arg = ada_coerce_ref (arg);
6925               else
6926                 arg = ada_value_ind (arg);
6927               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6928                                                   bit_offset, bit_size,
6929                                                   field_type);
6930             }
6931           else
6932             v = value_at_lazy (field_type, address + byte_offset);
6933         }
6934     }
6935
6936   if (v != NULL || no_err)
6937     return v;
6938   else
6939     error (_("There is no member named %s."), name);
6940
6941  BadValue:
6942   if (no_err)
6943     return NULL;
6944   else
6945     error (_("Attempt to extract a component of "
6946              "a value that is not a record."));
6947 }
6948
6949 /* Given a type TYPE, look up the type of the component of type named NAME.
6950    If DISPP is non-null, add its byte displacement from the beginning of a
6951    structure (pointed to by a value) of type TYPE to *DISPP (does not
6952    work for packed fields).
6953
6954    Matches any field whose name has NAME as a prefix, possibly
6955    followed by "___".
6956
6957    TYPE can be either a struct or union.  If REFOK, TYPE may also 
6958    be a (pointer or reference)+ to a struct or union, and the
6959    ultimate target type will be searched.
6960
6961    Looks recursively into variant clauses and parent types.
6962
6963    If NOERR is nonzero, return NULL if NAME is not suitably defined or
6964    TYPE is not a type of the right kind.  */
6965
6966 static struct type *
6967 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6968                             int noerr, int *dispp)
6969 {
6970   int i;
6971
6972   if (name == NULL)
6973     goto BadName;
6974
6975   if (refok && type != NULL)
6976     while (1)
6977       {
6978         type = ada_check_typedef (type);
6979         if (TYPE_CODE (type) != TYPE_CODE_PTR
6980             && TYPE_CODE (type) != TYPE_CODE_REF)
6981           break;
6982         type = TYPE_TARGET_TYPE (type);
6983       }
6984
6985   if (type == NULL
6986       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6987           && TYPE_CODE (type) != TYPE_CODE_UNION))
6988     {
6989       if (noerr)
6990         return NULL;
6991       else
6992         {
6993           target_terminal_ours ();
6994           gdb_flush (gdb_stdout);
6995           if (type == NULL)
6996             error (_("Type (null) is not a structure or union type"));
6997           else
6998             {
6999               /* XXX: type_sprint */
7000               fprintf_unfiltered (gdb_stderr, _("Type "));
7001               type_print (type, "", gdb_stderr, -1);
7002               error (_(" is not a structure or union type"));
7003             }
7004         }
7005     }
7006
7007   type = to_static_fixed_type (type);
7008
7009   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7010     {
7011       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7012       struct type *t;
7013       int disp;
7014
7015       if (t_field_name == NULL)
7016         continue;
7017
7018       else if (field_name_match (t_field_name, name))
7019         {
7020           if (dispp != NULL)
7021             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7022           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7023         }
7024
7025       else if (ada_is_wrapper_field (type, i))
7026         {
7027           disp = 0;
7028           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7029                                           0, 1, &disp);
7030           if (t != NULL)
7031             {
7032               if (dispp != NULL)
7033                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7034               return t;
7035             }
7036         }
7037
7038       else if (ada_is_variant_part (type, i))
7039         {
7040           int j;
7041           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7042                                                                         i));
7043
7044           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7045             {
7046               /* FIXME pnh 2008/01/26: We check for a field that is
7047                  NOT wrapped in a struct, since the compiler sometimes
7048                  generates these for unchecked variant types.  Revisit
7049                  if the compiler changes this practice.  */
7050               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7051               disp = 0;
7052               if (v_field_name != NULL 
7053                   && field_name_match (v_field_name, name))
7054                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7055               else
7056                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7057                                                                  j),
7058                                                 name, 0, 1, &disp);
7059
7060               if (t != NULL)
7061                 {
7062                   if (dispp != NULL)
7063                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7064                   return t;
7065                 }
7066             }
7067         }
7068
7069     }
7070
7071 BadName:
7072   if (!noerr)
7073     {
7074       target_terminal_ours ();
7075       gdb_flush (gdb_stdout);
7076       if (name == NULL)
7077         {
7078           /* XXX: type_sprint */
7079           fprintf_unfiltered (gdb_stderr, _("Type "));
7080           type_print (type, "", gdb_stderr, -1);
7081           error (_(" has no component named <null>"));
7082         }
7083       else
7084         {
7085           /* XXX: type_sprint */
7086           fprintf_unfiltered (gdb_stderr, _("Type "));
7087           type_print (type, "", gdb_stderr, -1);
7088           error (_(" has no component named %s"), name);
7089         }
7090     }
7091
7092   return NULL;
7093 }
7094
7095 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7096    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7097    represents an unchecked union (that is, the variant part of a
7098    record that is named in an Unchecked_Union pragma).  */
7099
7100 static int
7101 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7102 {
7103   char *discrim_name = ada_variant_discrim_name (var_type);
7104
7105   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7106           == NULL);
7107 }
7108
7109
7110 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7111    within a value of type OUTER_TYPE that is stored in GDB at
7112    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7113    numbering from 0) is applicable.  Returns -1 if none are.  */
7114
7115 int
7116 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7117                            const gdb_byte *outer_valaddr)
7118 {
7119   int others_clause;
7120   int i;
7121   char *discrim_name = ada_variant_discrim_name (var_type);
7122   struct value *outer;
7123   struct value *discrim;
7124   LONGEST discrim_val;
7125
7126   outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
7127   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7128   if (discrim == NULL)
7129     return -1;
7130   discrim_val = value_as_long (discrim);
7131
7132   others_clause = -1;
7133   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7134     {
7135       if (ada_is_others_clause (var_type, i))
7136         others_clause = i;
7137       else if (ada_in_variant (discrim_val, var_type, i))
7138         return i;
7139     }
7140
7141   return others_clause;
7142 }
7143 \f
7144
7145
7146                                 /* Dynamic-Sized Records */
7147
7148 /* Strategy: The type ostensibly attached to a value with dynamic size
7149    (i.e., a size that is not statically recorded in the debugging
7150    data) does not accurately reflect the size or layout of the value.
7151    Our strategy is to convert these values to values with accurate,
7152    conventional types that are constructed on the fly.  */
7153
7154 /* There is a subtle and tricky problem here.  In general, we cannot
7155    determine the size of dynamic records without its data.  However,
7156    the 'struct value' data structure, which GDB uses to represent
7157    quantities in the inferior process (the target), requires the size
7158    of the type at the time of its allocation in order to reserve space
7159    for GDB's internal copy of the data.  That's why the
7160    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7161    rather than struct value*s.
7162
7163    However, GDB's internal history variables ($1, $2, etc.) are
7164    struct value*s containing internal copies of the data that are not, in
7165    general, the same as the data at their corresponding addresses in
7166    the target.  Fortunately, the types we give to these values are all
7167    conventional, fixed-size types (as per the strategy described
7168    above), so that we don't usually have to perform the
7169    'to_fixed_xxx_type' conversions to look at their values.
7170    Unfortunately, there is one exception: if one of the internal
7171    history variables is an array whose elements are unconstrained
7172    records, then we will need to create distinct fixed types for each
7173    element selected.  */
7174
7175 /* The upshot of all of this is that many routines take a (type, host
7176    address, target address) triple as arguments to represent a value.
7177    The host address, if non-null, is supposed to contain an internal
7178    copy of the relevant data; otherwise, the program is to consult the
7179    target at the target address.  */
7180
7181 /* Assuming that VAL0 represents a pointer value, the result of
7182    dereferencing it.  Differs from value_ind in its treatment of
7183    dynamic-sized types.  */
7184
7185 struct value *
7186 ada_value_ind (struct value *val0)
7187 {
7188   struct value *val = value_ind (val0);
7189
7190   if (ada_is_tagged_type (value_type (val), 0))
7191     val = ada_tag_value_at_base_address (val);
7192
7193   return ada_to_fixed_value (val);
7194 }
7195
7196 /* The value resulting from dereferencing any "reference to"
7197    qualifiers on VAL0.  */
7198
7199 static struct value *
7200 ada_coerce_ref (struct value *val0)
7201 {
7202   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7203     {
7204       struct value *val = val0;
7205
7206       val = coerce_ref (val);
7207
7208       if (ada_is_tagged_type (value_type (val), 0))
7209         val = ada_tag_value_at_base_address (val);
7210
7211       return ada_to_fixed_value (val);
7212     }
7213   else
7214     return val0;
7215 }
7216
7217 /* Return OFF rounded upward if necessary to a multiple of
7218    ALIGNMENT (a power of 2).  */
7219
7220 static unsigned int
7221 align_value (unsigned int off, unsigned int alignment)
7222 {
7223   return (off + alignment - 1) & ~(alignment - 1);
7224 }
7225
7226 /* Return the bit alignment required for field #F of template type TYPE.  */
7227
7228 static unsigned int
7229 field_alignment (struct type *type, int f)
7230 {
7231   const char *name = TYPE_FIELD_NAME (type, f);
7232   int len;
7233   int align_offset;
7234
7235   /* The field name should never be null, unless the debugging information
7236      is somehow malformed.  In this case, we assume the field does not
7237      require any alignment.  */
7238   if (name == NULL)
7239     return 1;
7240
7241   len = strlen (name);
7242
7243   if (!isdigit (name[len - 1]))
7244     return 1;
7245
7246   if (isdigit (name[len - 2]))
7247     align_offset = len - 2;
7248   else
7249     align_offset = len - 1;
7250
7251   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7252     return TARGET_CHAR_BIT;
7253
7254   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7255 }
7256
7257 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7258
7259 static struct symbol *
7260 ada_find_any_type_symbol (const char *name)
7261 {
7262   struct symbol *sym;
7263
7264   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7265   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7266     return sym;
7267
7268   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7269   return sym;
7270 }
7271
7272 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7273    solely for types defined by debug info, it will not search the GDB
7274    primitive types.  */
7275
7276 static struct type *
7277 ada_find_any_type (const char *name)
7278 {
7279   struct symbol *sym = ada_find_any_type_symbol (name);
7280
7281   if (sym != NULL)
7282     return SYMBOL_TYPE (sym);
7283
7284   return NULL;
7285 }
7286
7287 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7288    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7289    symbol, in which case it is returned.  Otherwise, this looks for
7290    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7291    Return symbol if found, and NULL otherwise.  */
7292
7293 struct symbol *
7294 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7295 {
7296   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7297   struct symbol *sym;
7298
7299   if (strstr (name, "___XR") != NULL)
7300      return name_sym;
7301
7302   sym = find_old_style_renaming_symbol (name, block);
7303
7304   if (sym != NULL)
7305     return sym;
7306
7307   /* Not right yet.  FIXME pnh 7/20/2007.  */
7308   sym = ada_find_any_type_symbol (name);
7309   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7310     return sym;
7311   else
7312     return NULL;
7313 }
7314
7315 static struct symbol *
7316 find_old_style_renaming_symbol (const char *name, const struct block *block)
7317 {
7318   const struct symbol *function_sym = block_linkage_function (block);
7319   char *rename;
7320
7321   if (function_sym != NULL)
7322     {
7323       /* If the symbol is defined inside a function, NAME is not fully
7324          qualified.  This means we need to prepend the function name
7325          as well as adding the ``___XR'' suffix to build the name of
7326          the associated renaming symbol.  */
7327       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7328       /* Function names sometimes contain suffixes used
7329          for instance to qualify nested subprograms.  When building
7330          the XR type name, we need to make sure that this suffix is
7331          not included.  So do not include any suffix in the function
7332          name length below.  */
7333       int function_name_len = ada_name_prefix_len (function_name);
7334       const int rename_len = function_name_len + 2      /*  "__" */
7335         + strlen (name) + 6 /* "___XR\0" */ ;
7336
7337       /* Strip the suffix if necessary.  */
7338       ada_remove_trailing_digits (function_name, &function_name_len);
7339       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7340       ada_remove_Xbn_suffix (function_name, &function_name_len);
7341
7342       /* Library-level functions are a special case, as GNAT adds
7343          a ``_ada_'' prefix to the function name to avoid namespace
7344          pollution.  However, the renaming symbols themselves do not
7345          have this prefix, so we need to skip this prefix if present.  */
7346       if (function_name_len > 5 /* "_ada_" */
7347           && strstr (function_name, "_ada_") == function_name)
7348         {
7349           function_name += 5;
7350           function_name_len -= 5;
7351         }
7352
7353       rename = (char *) alloca (rename_len * sizeof (char));
7354       strncpy (rename, function_name, function_name_len);
7355       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7356                  "__%s___XR", name);
7357     }
7358   else
7359     {
7360       const int rename_len = strlen (name) + 6;
7361
7362       rename = (char *) alloca (rename_len * sizeof (char));
7363       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7364     }
7365
7366   return ada_find_any_type_symbol (rename);
7367 }
7368
7369 /* Because of GNAT encoding conventions, several GDB symbols may match a
7370    given type name.  If the type denoted by TYPE0 is to be preferred to
7371    that of TYPE1 for purposes of type printing, return non-zero;
7372    otherwise return 0.  */
7373
7374 int
7375 ada_prefer_type (struct type *type0, struct type *type1)
7376 {
7377   if (type1 == NULL)
7378     return 1;
7379   else if (type0 == NULL)
7380     return 0;
7381   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7382     return 1;
7383   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7384     return 0;
7385   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7386     return 1;
7387   else if (ada_is_constrained_packed_array_type (type0))
7388     return 1;
7389   else if (ada_is_array_descriptor_type (type0)
7390            && !ada_is_array_descriptor_type (type1))
7391     return 1;
7392   else
7393     {
7394       const char *type0_name = type_name_no_tag (type0);
7395       const char *type1_name = type_name_no_tag (type1);
7396
7397       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7398           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7399         return 1;
7400     }
7401   return 0;
7402 }
7403
7404 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7405    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
7406
7407 const char *
7408 ada_type_name (struct type *type)
7409 {
7410   if (type == NULL)
7411     return NULL;
7412   else if (TYPE_NAME (type) != NULL)
7413     return TYPE_NAME (type);
7414   else
7415     return TYPE_TAG_NAME (type);
7416 }
7417
7418 /* Search the list of "descriptive" types associated to TYPE for a type
7419    whose name is NAME.  */
7420
7421 static struct type *
7422 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7423 {
7424   struct type *result;
7425
7426   /* If there no descriptive-type info, then there is no parallel type
7427      to be found.  */
7428   if (!HAVE_GNAT_AUX_INFO (type))
7429     return NULL;
7430
7431   result = TYPE_DESCRIPTIVE_TYPE (type);
7432   while (result != NULL)
7433     {
7434       const char *result_name = ada_type_name (result);
7435
7436       if (result_name == NULL)
7437         {
7438           warning (_("unexpected null name on descriptive type"));
7439           return NULL;
7440         }
7441
7442       /* If the names match, stop.  */
7443       if (strcmp (result_name, name) == 0)
7444         break;
7445
7446       /* Otherwise, look at the next item on the list, if any.  */
7447       if (HAVE_GNAT_AUX_INFO (result))
7448         result = TYPE_DESCRIPTIVE_TYPE (result);
7449       else
7450         result = NULL;
7451     }
7452
7453   /* If we didn't find a match, see whether this is a packed array.  With
7454      older compilers, the descriptive type information is either absent or
7455      irrelevant when it comes to packed arrays so the above lookup fails.
7456      Fall back to using a parallel lookup by name in this case.  */
7457   if (result == NULL && ada_is_constrained_packed_array_type (type))
7458     return ada_find_any_type (name);
7459
7460   return result;
7461 }
7462
7463 /* Find a parallel type to TYPE with the specified NAME, using the
7464    descriptive type taken from the debugging information, if available,
7465    and otherwise using the (slower) name-based method.  */
7466
7467 static struct type *
7468 ada_find_parallel_type_with_name (struct type *type, const char *name)
7469 {
7470   struct type *result = NULL;
7471
7472   if (HAVE_GNAT_AUX_INFO (type))
7473     result = find_parallel_type_by_descriptive_type (type, name);
7474   else
7475     result = ada_find_any_type (name);
7476
7477   return result;
7478 }
7479
7480 /* Same as above, but specify the name of the parallel type by appending
7481    SUFFIX to the name of TYPE.  */
7482
7483 struct type *
7484 ada_find_parallel_type (struct type *type, const char *suffix)
7485 {
7486   char *name;
7487   const char *typename = ada_type_name (type);
7488   int len;
7489
7490   if (typename == NULL)
7491     return NULL;
7492
7493   len = strlen (typename);
7494
7495   name = (char *) alloca (len + strlen (suffix) + 1);
7496
7497   strcpy (name, typename);
7498   strcpy (name + len, suffix);
7499
7500   return ada_find_parallel_type_with_name (type, name);
7501 }
7502
7503 /* If TYPE is a variable-size record type, return the corresponding template
7504    type describing its fields.  Otherwise, return NULL.  */
7505
7506 static struct type *
7507 dynamic_template_type (struct type *type)
7508 {
7509   type = ada_check_typedef (type);
7510
7511   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7512       || ada_type_name (type) == NULL)
7513     return NULL;
7514   else
7515     {
7516       int len = strlen (ada_type_name (type));
7517
7518       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7519         return type;
7520       else
7521         return ada_find_parallel_type (type, "___XVE");
7522     }
7523 }
7524
7525 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7526    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7527
7528 static int
7529 is_dynamic_field (struct type *templ_type, int field_num)
7530 {
7531   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7532
7533   return name != NULL
7534     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7535     && strstr (name, "___XVL") != NULL;
7536 }
7537
7538 /* The index of the variant field of TYPE, or -1 if TYPE does not
7539    represent a variant record type.  */
7540
7541 static int
7542 variant_field_index (struct type *type)
7543 {
7544   int f;
7545
7546   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7547     return -1;
7548
7549   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7550     {
7551       if (ada_is_variant_part (type, f))
7552         return f;
7553     }
7554   return -1;
7555 }
7556
7557 /* A record type with no fields.  */
7558
7559 static struct type *
7560 empty_record (struct type *template)
7561 {
7562   struct type *type = alloc_type_copy (template);
7563
7564   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7565   TYPE_NFIELDS (type) = 0;
7566   TYPE_FIELDS (type) = NULL;
7567   INIT_CPLUS_SPECIFIC (type);
7568   TYPE_NAME (type) = "<empty>";
7569   TYPE_TAG_NAME (type) = NULL;
7570   TYPE_LENGTH (type) = 0;
7571   return type;
7572 }
7573
7574 /* An ordinary record type (with fixed-length fields) that describes
7575    the value of type TYPE at VALADDR or ADDRESS (see comments at
7576    the beginning of this section) VAL according to GNAT conventions.
7577    DVAL0 should describe the (portion of a) record that contains any
7578    necessary discriminants.  It should be NULL if value_type (VAL) is
7579    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7580    variant field (unless unchecked) is replaced by a particular branch
7581    of the variant.
7582
7583    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7584    length are not statically known are discarded.  As a consequence,
7585    VALADDR, ADDRESS and DVAL0 are ignored.
7586
7587    NOTE: Limitations: For now, we assume that dynamic fields and
7588    variants occupy whole numbers of bytes.  However, they need not be
7589    byte-aligned.  */
7590
7591 struct type *
7592 ada_template_to_fixed_record_type_1 (struct type *type,
7593                                      const gdb_byte *valaddr,
7594                                      CORE_ADDR address, struct value *dval0,
7595                                      int keep_dynamic_fields)
7596 {
7597   struct value *mark = value_mark ();
7598   struct value *dval;
7599   struct type *rtype;
7600   int nfields, bit_len;
7601   int variant_field;
7602   long off;
7603   int fld_bit_len;
7604   int f;
7605
7606   /* Compute the number of fields in this record type that are going
7607      to be processed: unless keep_dynamic_fields, this includes only
7608      fields whose position and length are static will be processed.  */
7609   if (keep_dynamic_fields)
7610     nfields = TYPE_NFIELDS (type);
7611   else
7612     {
7613       nfields = 0;
7614       while (nfields < TYPE_NFIELDS (type)
7615              && !ada_is_variant_part (type, nfields)
7616              && !is_dynamic_field (type, nfields))
7617         nfields++;
7618     }
7619
7620   rtype = alloc_type_copy (type);
7621   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7622   INIT_CPLUS_SPECIFIC (rtype);
7623   TYPE_NFIELDS (rtype) = nfields;
7624   TYPE_FIELDS (rtype) = (struct field *)
7625     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7626   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7627   TYPE_NAME (rtype) = ada_type_name (type);
7628   TYPE_TAG_NAME (rtype) = NULL;
7629   TYPE_FIXED_INSTANCE (rtype) = 1;
7630
7631   off = 0;
7632   bit_len = 0;
7633   variant_field = -1;
7634
7635   for (f = 0; f < nfields; f += 1)
7636     {
7637       off = align_value (off, field_alignment (type, f))
7638         + TYPE_FIELD_BITPOS (type, f);
7639       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7640       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7641
7642       if (ada_is_variant_part (type, f))
7643         {
7644           variant_field = f;
7645           fld_bit_len = 0;
7646         }
7647       else if (is_dynamic_field (type, f))
7648         {
7649           const gdb_byte *field_valaddr = valaddr;
7650           CORE_ADDR field_address = address;
7651           struct type *field_type =
7652             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7653
7654           if (dval0 == NULL)
7655             {
7656               /* rtype's length is computed based on the run-time
7657                  value of discriminants.  If the discriminants are not
7658                  initialized, the type size may be completely bogus and
7659                  GDB may fail to allocate a value for it.  So check the
7660                  size first before creating the value.  */
7661               check_size (rtype);
7662               dval = value_from_contents_and_address (rtype, valaddr, address);
7663             }
7664           else
7665             dval = dval0;
7666
7667           /* If the type referenced by this field is an aligner type, we need
7668              to unwrap that aligner type, because its size might not be set.
7669              Keeping the aligner type would cause us to compute the wrong
7670              size for this field, impacting the offset of the all the fields
7671              that follow this one.  */
7672           if (ada_is_aligner_type (field_type))
7673             {
7674               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7675
7676               field_valaddr = cond_offset_host (field_valaddr, field_offset);
7677               field_address = cond_offset_target (field_address, field_offset);
7678               field_type = ada_aligned_type (field_type);
7679             }
7680
7681           field_valaddr = cond_offset_host (field_valaddr,
7682                                             off / TARGET_CHAR_BIT);
7683           field_address = cond_offset_target (field_address,
7684                                               off / TARGET_CHAR_BIT);
7685
7686           /* Get the fixed type of the field.  Note that, in this case,
7687              we do not want to get the real type out of the tag: if
7688              the current field is the parent part of a tagged record,
7689              we will get the tag of the object.  Clearly wrong: the real
7690              type of the parent is not the real type of the child.  We
7691              would end up in an infinite loop.  */
7692           field_type = ada_get_base_type (field_type);
7693           field_type = ada_to_fixed_type (field_type, field_valaddr,
7694                                           field_address, dval, 0);
7695           /* If the field size is already larger than the maximum
7696              object size, then the record itself will necessarily
7697              be larger than the maximum object size.  We need to make
7698              this check now, because the size might be so ridiculously
7699              large (due to an uninitialized variable in the inferior)
7700              that it would cause an overflow when adding it to the
7701              record size.  */
7702           check_size (field_type);
7703
7704           TYPE_FIELD_TYPE (rtype, f) = field_type;
7705           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7706           /* The multiplication can potentially overflow.  But because
7707              the field length has been size-checked just above, and
7708              assuming that the maximum size is a reasonable value,
7709              an overflow should not happen in practice.  So rather than
7710              adding overflow recovery code to this already complex code,
7711              we just assume that it's not going to happen.  */
7712           fld_bit_len =
7713             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7714         }
7715       else
7716         {
7717           /* Note: If this field's type is a typedef, it is important
7718              to preserve the typedef layer.
7719
7720              Otherwise, we might be transforming a typedef to a fat
7721              pointer (encoding a pointer to an unconstrained array),
7722              into a basic fat pointer (encoding an unconstrained
7723              array).  As both types are implemented using the same
7724              structure, the typedef is the only clue which allows us
7725              to distinguish between the two options.  Stripping it
7726              would prevent us from printing this field appropriately.  */
7727           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
7728           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7729           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7730             fld_bit_len =
7731               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7732           else
7733             {
7734               struct type *field_type = TYPE_FIELD_TYPE (type, f);
7735
7736               /* We need to be careful of typedefs when computing
7737                  the length of our field.  If this is a typedef,
7738                  get the length of the target type, not the length
7739                  of the typedef.  */
7740               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7741                 field_type = ada_typedef_target_type (field_type);
7742
7743               fld_bit_len =
7744                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7745             }
7746         }
7747       if (off + fld_bit_len > bit_len)
7748         bit_len = off + fld_bit_len;
7749       off += fld_bit_len;
7750       TYPE_LENGTH (rtype) =
7751         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7752     }
7753
7754   /* We handle the variant part, if any, at the end because of certain
7755      odd cases in which it is re-ordered so as NOT to be the last field of
7756      the record.  This can happen in the presence of representation
7757      clauses.  */
7758   if (variant_field >= 0)
7759     {
7760       struct type *branch_type;
7761
7762       off = TYPE_FIELD_BITPOS (rtype, variant_field);
7763
7764       if (dval0 == NULL)
7765         dval = value_from_contents_and_address (rtype, valaddr, address);
7766       else
7767         dval = dval0;
7768
7769       branch_type =
7770         to_fixed_variant_branch_type
7771         (TYPE_FIELD_TYPE (type, variant_field),
7772          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7773          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7774       if (branch_type == NULL)
7775         {
7776           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
7777             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7778           TYPE_NFIELDS (rtype) -= 1;
7779         }
7780       else
7781         {
7782           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7783           TYPE_FIELD_NAME (rtype, variant_field) = "S";
7784           fld_bit_len =
7785             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
7786             TARGET_CHAR_BIT;
7787           if (off + fld_bit_len > bit_len)
7788             bit_len = off + fld_bit_len;
7789           TYPE_LENGTH (rtype) =
7790             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7791         }
7792     }
7793
7794   /* According to exp_dbug.ads, the size of TYPE for variable-size records
7795      should contain the alignment of that record, which should be a strictly
7796      positive value.  If null or negative, then something is wrong, most
7797      probably in the debug info.  In that case, we don't round up the size
7798      of the resulting type.  If this record is not part of another structure,
7799      the current RTYPE length might be good enough for our purposes.  */
7800   if (TYPE_LENGTH (type) <= 0)
7801     {
7802       if (TYPE_NAME (rtype))
7803         warning (_("Invalid type size for `%s' detected: %d."),
7804                  TYPE_NAME (rtype), TYPE_LENGTH (type));
7805       else
7806         warning (_("Invalid type size for <unnamed> detected: %d."),
7807                  TYPE_LENGTH (type));
7808     }
7809   else
7810     {
7811       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
7812                                          TYPE_LENGTH (type));
7813     }
7814
7815   value_free_to_mark (mark);
7816   if (TYPE_LENGTH (rtype) > varsize_limit)
7817     error (_("record type with dynamic size is larger than varsize-limit"));
7818   return rtype;
7819 }
7820
7821 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7822    of 1.  */
7823
7824 static struct type *
7825 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
7826                                CORE_ADDR address, struct value *dval0)
7827 {
7828   return ada_template_to_fixed_record_type_1 (type, valaddr,
7829                                               address, dval0, 1);
7830 }
7831
7832 /* An ordinary record type in which ___XVL-convention fields and
7833    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7834    static approximations, containing all possible fields.  Uses
7835    no runtime values.  Useless for use in values, but that's OK,
7836    since the results are used only for type determinations.   Works on both
7837    structs and unions.  Representation note: to save space, we memorize
7838    the result of this function in the TYPE_TARGET_TYPE of the
7839    template type.  */
7840
7841 static struct type *
7842 template_to_static_fixed_type (struct type *type0)
7843 {
7844   struct type *type;
7845   int nfields;
7846   int f;
7847
7848   if (TYPE_TARGET_TYPE (type0) != NULL)
7849     return TYPE_TARGET_TYPE (type0);
7850
7851   nfields = TYPE_NFIELDS (type0);
7852   type = type0;
7853
7854   for (f = 0; f < nfields; f += 1)
7855     {
7856       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
7857       struct type *new_type;
7858
7859       if (is_dynamic_field (type0, f))
7860         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
7861       else
7862         new_type = static_unwrap_type (field_type);
7863       if (type == type0 && new_type != field_type)
7864         {
7865           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
7866           TYPE_CODE (type) = TYPE_CODE (type0);
7867           INIT_CPLUS_SPECIFIC (type);
7868           TYPE_NFIELDS (type) = nfields;
7869           TYPE_FIELDS (type) = (struct field *)
7870             TYPE_ALLOC (type, nfields * sizeof (struct field));
7871           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7872                   sizeof (struct field) * nfields);
7873           TYPE_NAME (type) = ada_type_name (type0);
7874           TYPE_TAG_NAME (type) = NULL;
7875           TYPE_FIXED_INSTANCE (type) = 1;
7876           TYPE_LENGTH (type) = 0;
7877         }
7878       TYPE_FIELD_TYPE (type, f) = new_type;
7879       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
7880     }
7881   return type;
7882 }
7883
7884 /* Given an object of type TYPE whose contents are at VALADDR and
7885    whose address in memory is ADDRESS, returns a revision of TYPE,
7886    which should be a non-dynamic-sized record, in which the variant
7887    part, if any, is replaced with the appropriate branch.  Looks
7888    for discriminant values in DVAL0, which can be NULL if the record
7889    contains the necessary discriminant values.  */
7890
7891 static struct type *
7892 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
7893                                    CORE_ADDR address, struct value *dval0)
7894 {
7895   struct value *mark = value_mark ();
7896   struct value *dval;
7897   struct type *rtype;
7898   struct type *branch_type;
7899   int nfields = TYPE_NFIELDS (type);
7900   int variant_field = variant_field_index (type);
7901
7902   if (variant_field == -1)
7903     return type;
7904
7905   if (dval0 == NULL)
7906     dval = value_from_contents_and_address (type, valaddr, address);
7907   else
7908     dval = dval0;
7909
7910   rtype = alloc_type_copy (type);
7911   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7912   INIT_CPLUS_SPECIFIC (rtype);
7913   TYPE_NFIELDS (rtype) = nfields;
7914   TYPE_FIELDS (rtype) =
7915     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7916   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
7917           sizeof (struct field) * nfields);
7918   TYPE_NAME (rtype) = ada_type_name (type);
7919   TYPE_TAG_NAME (rtype) = NULL;
7920   TYPE_FIXED_INSTANCE (rtype) = 1;
7921   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7922
7923   branch_type = to_fixed_variant_branch_type
7924     (TYPE_FIELD_TYPE (type, variant_field),
7925      cond_offset_host (valaddr,
7926                        TYPE_FIELD_BITPOS (type, variant_field)
7927                        / TARGET_CHAR_BIT),
7928      cond_offset_target (address,
7929                          TYPE_FIELD_BITPOS (type, variant_field)
7930                          / TARGET_CHAR_BIT), dval);
7931   if (branch_type == NULL)
7932     {
7933       int f;
7934
7935       for (f = variant_field + 1; f < nfields; f += 1)
7936         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7937       TYPE_NFIELDS (rtype) -= 1;
7938     }
7939   else
7940     {
7941       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7942       TYPE_FIELD_NAME (rtype, variant_field) = "S";
7943       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
7944       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
7945     }
7946   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7947
7948   value_free_to_mark (mark);
7949   return rtype;
7950 }
7951
7952 /* An ordinary record type (with fixed-length fields) that describes
7953    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7954    beginning of this section].   Any necessary discriminants' values
7955    should be in DVAL, a record value; it may be NULL if the object
7956    at ADDR itself contains any necessary discriminant values.
7957    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7958    values from the record are needed.  Except in the case that DVAL,
7959    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7960    unchecked) is replaced by a particular branch of the variant.
7961
7962    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7963    is questionable and may be removed.  It can arise during the
7964    processing of an unconstrained-array-of-record type where all the
7965    variant branches have exactly the same size.  This is because in
7966    such cases, the compiler does not bother to use the XVS convention
7967    when encoding the record.  I am currently dubious of this
7968    shortcut and suspect the compiler should be altered.  FIXME.  */
7969
7970 static struct type *
7971 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
7972                       CORE_ADDR address, struct value *dval)
7973 {
7974   struct type *templ_type;
7975
7976   if (TYPE_FIXED_INSTANCE (type0))
7977     return type0;
7978
7979   templ_type = dynamic_template_type (type0);
7980
7981   if (templ_type != NULL)
7982     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
7983   else if (variant_field_index (type0) >= 0)
7984     {
7985       if (dval == NULL && valaddr == NULL && address == 0)
7986         return type0;
7987       return to_record_with_fixed_variant_part (type0, valaddr, address,
7988                                                 dval);
7989     }
7990   else
7991     {
7992       TYPE_FIXED_INSTANCE (type0) = 1;
7993       return type0;
7994     }
7995
7996 }
7997
7998 /* An ordinary record type (with fixed-length fields) that describes
7999    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8000    union type.  Any necessary discriminants' values should be in DVAL,
8001    a record value.  That is, this routine selects the appropriate
8002    branch of the union at ADDR according to the discriminant value
8003    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8004    it represents a variant subject to a pragma Unchecked_Union.  */
8005
8006 static struct type *
8007 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8008                               CORE_ADDR address, struct value *dval)
8009 {
8010   int which;
8011   struct type *templ_type;
8012   struct type *var_type;
8013
8014   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8015     var_type = TYPE_TARGET_TYPE (var_type0);
8016   else
8017     var_type = var_type0;
8018
8019   templ_type = ada_find_parallel_type (var_type, "___XVU");
8020
8021   if (templ_type != NULL)
8022     var_type = templ_type;
8023
8024   if (is_unchecked_variant (var_type, value_type (dval)))
8025       return var_type0;
8026   which =
8027     ada_which_variant_applies (var_type,
8028                                value_type (dval), value_contents (dval));
8029
8030   if (which < 0)
8031     return empty_record (var_type);
8032   else if (is_dynamic_field (var_type, which))
8033     return to_fixed_record_type
8034       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8035        valaddr, address, dval);
8036   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8037     return
8038       to_fixed_record_type
8039       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8040   else
8041     return TYPE_FIELD_TYPE (var_type, which);
8042 }
8043
8044 /* Assuming that TYPE0 is an array type describing the type of a value
8045    at ADDR, and that DVAL describes a record containing any
8046    discriminants used in TYPE0, returns a type for the value that
8047    contains no dynamic components (that is, no components whose sizes
8048    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8049    true, gives an error message if the resulting type's size is over
8050    varsize_limit.  */
8051
8052 static struct type *
8053 to_fixed_array_type (struct type *type0, struct value *dval,
8054                      int ignore_too_big)
8055 {
8056   struct type *index_type_desc;
8057   struct type *result;
8058   int constrained_packed_array_p;
8059
8060   type0 = ada_check_typedef (type0);
8061   if (TYPE_FIXED_INSTANCE (type0))
8062     return type0;
8063
8064   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8065   if (constrained_packed_array_p)
8066     type0 = decode_constrained_packed_array_type (type0);
8067
8068   index_type_desc = ada_find_parallel_type (type0, "___XA");
8069   ada_fixup_array_indexes_type (index_type_desc);
8070   if (index_type_desc == NULL)
8071     {
8072       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8073
8074       /* NOTE: elt_type---the fixed version of elt_type0---should never
8075          depend on the contents of the array in properly constructed
8076          debugging data.  */
8077       /* Create a fixed version of the array element type.
8078          We're not providing the address of an element here,
8079          and thus the actual object value cannot be inspected to do
8080          the conversion.  This should not be a problem, since arrays of
8081          unconstrained objects are not allowed.  In particular, all
8082          the elements of an array of a tagged type should all be of
8083          the same type specified in the debugging info.  No need to
8084          consult the object tag.  */
8085       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8086
8087       /* Make sure we always create a new array type when dealing with
8088          packed array types, since we're going to fix-up the array
8089          type length and element bitsize a little further down.  */
8090       if (elt_type0 == elt_type && !constrained_packed_array_p)
8091         result = type0;
8092       else
8093         result = create_array_type (alloc_type_copy (type0),
8094                                     elt_type, TYPE_INDEX_TYPE (type0));
8095     }
8096   else
8097     {
8098       int i;
8099       struct type *elt_type0;
8100
8101       elt_type0 = type0;
8102       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8103         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8104
8105       /* NOTE: result---the fixed version of elt_type0---should never
8106          depend on the contents of the array in properly constructed
8107          debugging data.  */
8108       /* Create a fixed version of the array element type.
8109          We're not providing the address of an element here,
8110          and thus the actual object value cannot be inspected to do
8111          the conversion.  This should not be a problem, since arrays of
8112          unconstrained objects are not allowed.  In particular, all
8113          the elements of an array of a tagged type should all be of
8114          the same type specified in the debugging info.  No need to
8115          consult the object tag.  */
8116       result =
8117         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8118
8119       elt_type0 = type0;
8120       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8121         {
8122           struct type *range_type =
8123             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8124
8125           result = create_array_type (alloc_type_copy (elt_type0),
8126                                       result, range_type);
8127           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8128         }
8129       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8130         error (_("array type with dynamic size is larger than varsize-limit"));
8131     }
8132
8133   /* We want to preserve the type name.  This can be useful when
8134      trying to get the type name of a value that has already been
8135      printed (for instance, if the user did "print VAR; whatis $".  */
8136   TYPE_NAME (result) = TYPE_NAME (type0);
8137
8138   if (constrained_packed_array_p)
8139     {
8140       /* So far, the resulting type has been created as if the original
8141          type was a regular (non-packed) array type.  As a result, the
8142          bitsize of the array elements needs to be set again, and the array
8143          length needs to be recomputed based on that bitsize.  */
8144       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8145       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8146
8147       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8148       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8149       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8150         TYPE_LENGTH (result)++;
8151     }
8152
8153   TYPE_FIXED_INSTANCE (result) = 1;
8154   return result;
8155 }
8156
8157
8158 /* A standard type (containing no dynamically sized components)
8159    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8160    DVAL describes a record containing any discriminants used in TYPE0,
8161    and may be NULL if there are none, or if the object of type TYPE at
8162    ADDRESS or in VALADDR contains these discriminants.
8163    
8164    If CHECK_TAG is not null, in the case of tagged types, this function
8165    attempts to locate the object's tag and use it to compute the actual
8166    type.  However, when ADDRESS is null, we cannot use it to determine the
8167    location of the tag, and therefore compute the tagged type's actual type.
8168    So we return the tagged type without consulting the tag.  */
8169    
8170 static struct type *
8171 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8172                    CORE_ADDR address, struct value *dval, int check_tag)
8173 {
8174   type = ada_check_typedef (type);
8175   switch (TYPE_CODE (type))
8176     {
8177     default:
8178       return type;
8179     case TYPE_CODE_STRUCT:
8180       {
8181         struct type *static_type = to_static_fixed_type (type);
8182         struct type *fixed_record_type =
8183           to_fixed_record_type (type, valaddr, address, NULL);
8184
8185         /* If STATIC_TYPE is a tagged type and we know the object's address,
8186            then we can determine its tag, and compute the object's actual
8187            type from there.  Note that we have to use the fixed record
8188            type (the parent part of the record may have dynamic fields
8189            and the way the location of _tag is expressed may depend on
8190            them).  */
8191
8192         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8193           {
8194             struct value *tag =
8195               value_tag_from_contents_and_address
8196               (fixed_record_type,
8197                valaddr,
8198                address);
8199             struct type *real_type = type_from_tag (tag);
8200             struct value *obj =
8201               value_from_contents_and_address (fixed_record_type,
8202                                                valaddr,
8203                                                address);
8204             if (real_type != NULL)
8205               return to_fixed_record_type
8206                 (real_type, NULL,
8207                  value_address (ada_tag_value_at_base_address (obj)), NULL);
8208           }
8209
8210         /* Check to see if there is a parallel ___XVZ variable.
8211            If there is, then it provides the actual size of our type.  */
8212         else if (ada_type_name (fixed_record_type) != NULL)
8213           {
8214             const char *name = ada_type_name (fixed_record_type);
8215             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8216             int xvz_found = 0;
8217             LONGEST size;
8218
8219             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8220             size = get_int_var_value (xvz_name, &xvz_found);
8221             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8222               {
8223                 fixed_record_type = copy_type (fixed_record_type);
8224                 TYPE_LENGTH (fixed_record_type) = size;
8225
8226                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8227                    observed this when the debugging info is STABS, and
8228                    apparently it is something that is hard to fix.
8229
8230                    In practice, we don't need the actual type definition
8231                    at all, because the presence of the XVZ variable allows us
8232                    to assume that there must be a XVS type as well, which we
8233                    should be able to use later, when we need the actual type
8234                    definition.
8235
8236                    In the meantime, pretend that the "fixed" type we are
8237                    returning is NOT a stub, because this can cause trouble
8238                    when using this type to create new types targeting it.
8239                    Indeed, the associated creation routines often check
8240                    whether the target type is a stub and will try to replace
8241                    it, thus using a type with the wrong size.  This, in turn,
8242                    might cause the new type to have the wrong size too.
8243                    Consider the case of an array, for instance, where the size
8244                    of the array is computed from the number of elements in
8245                    our array multiplied by the size of its element.  */
8246                 TYPE_STUB (fixed_record_type) = 0;
8247               }
8248           }
8249         return fixed_record_type;
8250       }
8251     case TYPE_CODE_ARRAY:
8252       return to_fixed_array_type (type, dval, 1);
8253     case TYPE_CODE_UNION:
8254       if (dval == NULL)
8255         return type;
8256       else
8257         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8258     }
8259 }
8260
8261 /* The same as ada_to_fixed_type_1, except that it preserves the type
8262    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8263
8264    The typedef layer needs be preserved in order to differentiate between
8265    arrays and array pointers when both types are implemented using the same
8266    fat pointer.  In the array pointer case, the pointer is encoded as
8267    a typedef of the pointer type.  For instance, considering:
8268
8269           type String_Access is access String;
8270           S1 : String_Access := null;
8271
8272    To the debugger, S1 is defined as a typedef of type String.  But
8273    to the user, it is a pointer.  So if the user tries to print S1,
8274    we should not dereference the array, but print the array address
8275    instead.
8276
8277    If we didn't preserve the typedef layer, we would lose the fact that
8278    the type is to be presented as a pointer (needs de-reference before
8279    being printed).  And we would also use the source-level type name.  */
8280
8281 struct type *
8282 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8283                    CORE_ADDR address, struct value *dval, int check_tag)
8284
8285 {
8286   struct type *fixed_type =
8287     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8288
8289   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8290       then preserve the typedef layer.
8291
8292       Implementation note: We can only check the main-type portion of
8293       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8294       from TYPE now returns a type that has the same instance flags
8295       as TYPE.  For instance, if TYPE is a "typedef const", and its
8296       target type is a "struct", then the typedef elimination will return
8297       a "const" version of the target type.  See check_typedef for more
8298       details about how the typedef layer elimination is done.
8299
8300       brobecker/2010-11-19: It seems to me that the only case where it is
8301       useful to preserve the typedef layer is when dealing with fat pointers.
8302       Perhaps, we could add a check for that and preserve the typedef layer
8303       only in that situation.  But this seems unecessary so far, probably
8304       because we call check_typedef/ada_check_typedef pretty much everywhere.
8305       */
8306   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8307       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8308           == TYPE_MAIN_TYPE (fixed_type)))
8309     return type;
8310
8311   return fixed_type;
8312 }
8313
8314 /* A standard (static-sized) type corresponding as well as possible to
8315    TYPE0, but based on no runtime data.  */
8316
8317 static struct type *
8318 to_static_fixed_type (struct type *type0)
8319 {
8320   struct type *type;
8321
8322   if (type0 == NULL)
8323     return NULL;
8324
8325   if (TYPE_FIXED_INSTANCE (type0))
8326     return type0;
8327
8328   type0 = ada_check_typedef (type0);
8329
8330   switch (TYPE_CODE (type0))
8331     {
8332     default:
8333       return type0;
8334     case TYPE_CODE_STRUCT:
8335       type = dynamic_template_type (type0);
8336       if (type != NULL)
8337         return template_to_static_fixed_type (type);
8338       else
8339         return template_to_static_fixed_type (type0);
8340     case TYPE_CODE_UNION:
8341       type = ada_find_parallel_type (type0, "___XVU");
8342       if (type != NULL)
8343         return template_to_static_fixed_type (type);
8344       else
8345         return template_to_static_fixed_type (type0);
8346     }
8347 }
8348
8349 /* A static approximation of TYPE with all type wrappers removed.  */
8350
8351 static struct type *
8352 static_unwrap_type (struct type *type)
8353 {
8354   if (ada_is_aligner_type (type))
8355     {
8356       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8357       if (ada_type_name (type1) == NULL)
8358         TYPE_NAME (type1) = ada_type_name (type);
8359
8360       return static_unwrap_type (type1);
8361     }
8362   else
8363     {
8364       struct type *raw_real_type = ada_get_base_type (type);
8365
8366       if (raw_real_type == type)
8367         return type;
8368       else
8369         return to_static_fixed_type (raw_real_type);
8370     }
8371 }
8372
8373 /* In some cases, incomplete and private types require
8374    cross-references that are not resolved as records (for example,
8375       type Foo;
8376       type FooP is access Foo;
8377       V: FooP;
8378       type Foo is array ...;
8379    ).  In these cases, since there is no mechanism for producing
8380    cross-references to such types, we instead substitute for FooP a
8381    stub enumeration type that is nowhere resolved, and whose tag is
8382    the name of the actual type.  Call these types "non-record stubs".  */
8383
8384 /* A type equivalent to TYPE that is not a non-record stub, if one
8385    exists, otherwise TYPE.  */
8386
8387 struct type *
8388 ada_check_typedef (struct type *type)
8389 {
8390   if (type == NULL)
8391     return NULL;
8392
8393   /* If our type is a typedef type of a fat pointer, then we're done.
8394      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8395      what allows us to distinguish between fat pointers that represent
8396      array types, and fat pointers that represent array access types
8397      (in both cases, the compiler implements them as fat pointers).  */
8398   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8399       && is_thick_pntr (ada_typedef_target_type (type)))
8400     return type;
8401
8402   CHECK_TYPEDEF (type);
8403   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8404       || !TYPE_STUB (type)
8405       || TYPE_TAG_NAME (type) == NULL)
8406     return type;
8407   else
8408     {
8409       const char *name = TYPE_TAG_NAME (type);
8410       struct type *type1 = ada_find_any_type (name);
8411
8412       if (type1 == NULL)
8413         return type;
8414
8415       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8416          stubs pointing to arrays, as we don't create symbols for array
8417          types, only for the typedef-to-array types).  If that's the case,
8418          strip the typedef layer.  */
8419       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8420         type1 = ada_check_typedef (type1);
8421
8422       return type1;
8423     }
8424 }
8425
8426 /* A value representing the data at VALADDR/ADDRESS as described by
8427    type TYPE0, but with a standard (static-sized) type that correctly
8428    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8429    type, then return VAL0 [this feature is simply to avoid redundant
8430    creation of struct values].  */
8431
8432 static struct value *
8433 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8434                            struct value *val0)
8435 {
8436   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8437
8438   if (type == type0 && val0 != NULL)
8439     return val0;
8440   else
8441     return value_from_contents_and_address (type, 0, address);
8442 }
8443
8444 /* A value representing VAL, but with a standard (static-sized) type
8445    that correctly describes it.  Does not necessarily create a new
8446    value.  */
8447
8448 struct value *
8449 ada_to_fixed_value (struct value *val)
8450 {
8451   val = unwrap_value (val);
8452   val = ada_to_fixed_value_create (value_type (val),
8453                                       value_address (val),
8454                                       val);
8455   return val;
8456 }
8457 \f
8458
8459 /* Attributes */
8460
8461 /* Table mapping attribute numbers to names.
8462    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8463
8464 static const char *attribute_names[] = {
8465   "<?>",
8466
8467   "first",
8468   "last",
8469   "length",
8470   "image",
8471   "max",
8472   "min",
8473   "modulus",
8474   "pos",
8475   "size",
8476   "tag",
8477   "val",
8478   0
8479 };
8480
8481 const char *
8482 ada_attribute_name (enum exp_opcode n)
8483 {
8484   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8485     return attribute_names[n - OP_ATR_FIRST + 1];
8486   else
8487     return attribute_names[0];
8488 }
8489
8490 /* Evaluate the 'POS attribute applied to ARG.  */
8491
8492 static LONGEST
8493 pos_atr (struct value *arg)
8494 {
8495   struct value *val = coerce_ref (arg);
8496   struct type *type = value_type (val);
8497
8498   if (!discrete_type_p (type))
8499     error (_("'POS only defined on discrete types"));
8500
8501   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8502     {
8503       int i;
8504       LONGEST v = value_as_long (val);
8505
8506       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8507         {
8508           if (v == TYPE_FIELD_ENUMVAL (type, i))
8509             return i;
8510         }
8511       error (_("enumeration value is invalid: can't find 'POS"));
8512     }
8513   else
8514     return value_as_long (val);
8515 }
8516
8517 static struct value *
8518 value_pos_atr (struct type *type, struct value *arg)
8519 {
8520   return value_from_longest (type, pos_atr (arg));
8521 }
8522
8523 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8524
8525 static struct value *
8526 value_val_atr (struct type *type, struct value *arg)
8527 {
8528   if (!discrete_type_p (type))
8529     error (_("'VAL only defined on discrete types"));
8530   if (!integer_type_p (value_type (arg)))
8531     error (_("'VAL requires integral argument"));
8532
8533   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8534     {
8535       long pos = value_as_long (arg);
8536
8537       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8538         error (_("argument to 'VAL out of range"));
8539       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8540     }
8541   else
8542     return value_from_longest (type, value_as_long (arg));
8543 }
8544 \f
8545
8546                                 /* Evaluation */
8547
8548 /* True if TYPE appears to be an Ada character type.
8549    [At the moment, this is true only for Character and Wide_Character;
8550    It is a heuristic test that could stand improvement].  */
8551
8552 int
8553 ada_is_character_type (struct type *type)
8554 {
8555   const char *name;
8556
8557   /* If the type code says it's a character, then assume it really is,
8558      and don't check any further.  */
8559   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8560     return 1;
8561   
8562   /* Otherwise, assume it's a character type iff it is a discrete type
8563      with a known character type name.  */
8564   name = ada_type_name (type);
8565   return (name != NULL
8566           && (TYPE_CODE (type) == TYPE_CODE_INT
8567               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8568           && (strcmp (name, "character") == 0
8569               || strcmp (name, "wide_character") == 0
8570               || strcmp (name, "wide_wide_character") == 0
8571               || strcmp (name, "unsigned char") == 0));
8572 }
8573
8574 /* True if TYPE appears to be an Ada string type.  */
8575
8576 int
8577 ada_is_string_type (struct type *type)
8578 {
8579   type = ada_check_typedef (type);
8580   if (type != NULL
8581       && TYPE_CODE (type) != TYPE_CODE_PTR
8582       && (ada_is_simple_array_type (type)
8583           || ada_is_array_descriptor_type (type))
8584       && ada_array_arity (type) == 1)
8585     {
8586       struct type *elttype = ada_array_element_type (type, 1);
8587
8588       return ada_is_character_type (elttype);
8589     }
8590   else
8591     return 0;
8592 }
8593
8594 /* The compiler sometimes provides a parallel XVS type for a given
8595    PAD type.  Normally, it is safe to follow the PAD type directly,
8596    but older versions of the compiler have a bug that causes the offset
8597    of its "F" field to be wrong.  Following that field in that case
8598    would lead to incorrect results, but this can be worked around
8599    by ignoring the PAD type and using the associated XVS type instead.
8600
8601    Set to True if the debugger should trust the contents of PAD types.
8602    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8603 static int trust_pad_over_xvs = 1;
8604
8605 /* True if TYPE is a struct type introduced by the compiler to force the
8606    alignment of a value.  Such types have a single field with a
8607    distinctive name.  */
8608
8609 int
8610 ada_is_aligner_type (struct type *type)
8611 {
8612   type = ada_check_typedef (type);
8613
8614   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8615     return 0;
8616
8617   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8618           && TYPE_NFIELDS (type) == 1
8619           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8620 }
8621
8622 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8623    the parallel type.  */
8624
8625 struct type *
8626 ada_get_base_type (struct type *raw_type)
8627 {
8628   struct type *real_type_namer;
8629   struct type *raw_real_type;
8630
8631   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8632     return raw_type;
8633
8634   if (ada_is_aligner_type (raw_type))
8635     /* The encoding specifies that we should always use the aligner type.
8636        So, even if this aligner type has an associated XVS type, we should
8637        simply ignore it.
8638
8639        According to the compiler gurus, an XVS type parallel to an aligner
8640        type may exist because of a stabs limitation.  In stabs, aligner
8641        types are empty because the field has a variable-sized type, and
8642        thus cannot actually be used as an aligner type.  As a result,
8643        we need the associated parallel XVS type to decode the type.
8644        Since the policy in the compiler is to not change the internal
8645        representation based on the debugging info format, we sometimes
8646        end up having a redundant XVS type parallel to the aligner type.  */
8647     return raw_type;
8648
8649   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8650   if (real_type_namer == NULL
8651       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8652       || TYPE_NFIELDS (real_type_namer) != 1)
8653     return raw_type;
8654
8655   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8656     {
8657       /* This is an older encoding form where the base type needs to be
8658          looked up by name.  We prefer the newer enconding because it is
8659          more efficient.  */
8660       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8661       if (raw_real_type == NULL)
8662         return raw_type;
8663       else
8664         return raw_real_type;
8665     }
8666
8667   /* The field in our XVS type is a reference to the base type.  */
8668   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
8669 }
8670
8671 /* The type of value designated by TYPE, with all aligners removed.  */
8672
8673 struct type *
8674 ada_aligned_type (struct type *type)
8675 {
8676   if (ada_is_aligner_type (type))
8677     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8678   else
8679     return ada_get_base_type (type);
8680 }
8681
8682
8683 /* The address of the aligned value in an object at address VALADDR
8684    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
8685
8686 const gdb_byte *
8687 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
8688 {
8689   if (ada_is_aligner_type (type))
8690     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8691                                    valaddr +
8692                                    TYPE_FIELD_BITPOS (type,
8693                                                       0) / TARGET_CHAR_BIT);
8694   else
8695     return valaddr;
8696 }
8697
8698
8699
8700 /* The printed representation of an enumeration literal with encoded
8701    name NAME.  The value is good to the next call of ada_enum_name.  */
8702 const char *
8703 ada_enum_name (const char *name)
8704 {
8705   static char *result;
8706   static size_t result_len = 0;
8707   char *tmp;
8708
8709   /* First, unqualify the enumeration name:
8710      1. Search for the last '.' character.  If we find one, then skip
8711      all the preceding characters, the unqualified name starts
8712      right after that dot.
8713      2. Otherwise, we may be debugging on a target where the compiler
8714      translates dots into "__".  Search forward for double underscores,
8715      but stop searching when we hit an overloading suffix, which is
8716      of the form "__" followed by digits.  */
8717
8718   tmp = strrchr (name, '.');
8719   if (tmp != NULL)
8720     name = tmp + 1;
8721   else
8722     {
8723       while ((tmp = strstr (name, "__")) != NULL)
8724         {
8725           if (isdigit (tmp[2]))
8726             break;
8727           else
8728             name = tmp + 2;
8729         }
8730     }
8731
8732   if (name[0] == 'Q')
8733     {
8734       int v;
8735
8736       if (name[1] == 'U' || name[1] == 'W')
8737         {
8738           if (sscanf (name + 2, "%x", &v) != 1)
8739             return name;
8740         }
8741       else
8742         return name;
8743
8744       GROW_VECT (result, result_len, 16);
8745       if (isascii (v) && isprint (v))
8746         xsnprintf (result, result_len, "'%c'", v);
8747       else if (name[1] == 'U')
8748         xsnprintf (result, result_len, "[\"%02x\"]", v);
8749       else
8750         xsnprintf (result, result_len, "[\"%04x\"]", v);
8751
8752       return result;
8753     }
8754   else
8755     {
8756       tmp = strstr (name, "__");
8757       if (tmp == NULL)
8758         tmp = strstr (name, "$");
8759       if (tmp != NULL)
8760         {
8761           GROW_VECT (result, result_len, tmp - name + 1);
8762           strncpy (result, name, tmp - name);
8763           result[tmp - name] = '\0';
8764           return result;
8765         }
8766
8767       return name;
8768     }
8769 }
8770
8771 /* Evaluate the subexpression of EXP starting at *POS as for
8772    evaluate_type, updating *POS to point just past the evaluated
8773    expression.  */
8774
8775 static struct value *
8776 evaluate_subexp_type (struct expression *exp, int *pos)
8777 {
8778   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8779 }
8780
8781 /* If VAL is wrapped in an aligner or subtype wrapper, return the
8782    value it wraps.  */
8783
8784 static struct value *
8785 unwrap_value (struct value *val)
8786 {
8787   struct type *type = ada_check_typedef (value_type (val));
8788
8789   if (ada_is_aligner_type (type))
8790     {
8791       struct value *v = ada_value_struct_elt (val, "F", 0);
8792       struct type *val_type = ada_check_typedef (value_type (v));
8793
8794       if (ada_type_name (val_type) == NULL)
8795         TYPE_NAME (val_type) = ada_type_name (type);
8796
8797       return unwrap_value (v);
8798     }
8799   else
8800     {
8801       struct type *raw_real_type =
8802         ada_check_typedef (ada_get_base_type (type));
8803
8804       /* If there is no parallel XVS or XVE type, then the value is
8805          already unwrapped.  Return it without further modification.  */
8806       if ((type == raw_real_type)
8807           && ada_find_parallel_type (type, "___XVE") == NULL)
8808         return val;
8809
8810       return
8811         coerce_unspec_val_to_type
8812         (val, ada_to_fixed_type (raw_real_type, 0,
8813                                  value_address (val),
8814                                  NULL, 1));
8815     }
8816 }
8817
8818 static struct value *
8819 cast_to_fixed (struct type *type, struct value *arg)
8820 {
8821   LONGEST val;
8822
8823   if (type == value_type (arg))
8824     return arg;
8825   else if (ada_is_fixed_point_type (value_type (arg)))
8826     val = ada_float_to_fixed (type,
8827                               ada_fixed_to_float (value_type (arg),
8828                                                   value_as_long (arg)));
8829   else
8830     {
8831       DOUBLEST argd = value_as_double (arg);
8832
8833       val = ada_float_to_fixed (type, argd);
8834     }
8835
8836   return value_from_longest (type, val);
8837 }
8838
8839 static struct value *
8840 cast_from_fixed (struct type *type, struct value *arg)
8841 {
8842   DOUBLEST val = ada_fixed_to_float (value_type (arg),
8843                                      value_as_long (arg));
8844
8845   return value_from_double (type, val);
8846 }
8847
8848 /* Given two array types T1 and T2, return nonzero iff both arrays
8849    contain the same number of elements.  */
8850
8851 static int
8852 ada_same_array_size_p (struct type *t1, struct type *t2)
8853 {
8854   LONGEST lo1, hi1, lo2, hi2;
8855
8856   /* Get the array bounds in order to verify that the size of
8857      the two arrays match.  */
8858   if (!get_array_bounds (t1, &lo1, &hi1)
8859       || !get_array_bounds (t2, &lo2, &hi2))
8860     error (_("unable to determine array bounds"));
8861
8862   /* To make things easier for size comparison, normalize a bit
8863      the case of empty arrays by making sure that the difference
8864      between upper bound and lower bound is always -1.  */
8865   if (lo1 > hi1)
8866     hi1 = lo1 - 1;
8867   if (lo2 > hi2)
8868     hi2 = lo2 - 1;
8869
8870   return (hi1 - lo1 == hi2 - lo2);
8871 }
8872
8873 /* Assuming that VAL is an array of integrals, and TYPE represents
8874    an array with the same number of elements, but with wider integral
8875    elements, return an array "casted" to TYPE.  In practice, this
8876    means that the returned array is built by casting each element
8877    of the original array into TYPE's (wider) element type.  */
8878
8879 static struct value *
8880 ada_promote_array_of_integrals (struct type *type, struct value *val)
8881 {
8882   struct type *elt_type = TYPE_TARGET_TYPE (type);
8883   LONGEST lo, hi;
8884   struct value *res;
8885   LONGEST i;
8886
8887   /* Verify that both val and type are arrays of scalars, and
8888      that the size of val's elements is smaller than the size
8889      of type's element.  */
8890   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
8891   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
8892   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
8893   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
8894   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
8895               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
8896
8897   if (!get_array_bounds (type, &lo, &hi))
8898     error (_("unable to determine array bounds"));
8899
8900   res = allocate_value (type);
8901
8902   /* Promote each array element.  */
8903   for (i = 0; i < hi - lo + 1; i++)
8904     {
8905       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
8906
8907       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
8908               value_contents_all (elt), TYPE_LENGTH (elt_type));
8909     }
8910
8911   return res;
8912 }
8913
8914 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
8915    return the converted value.  */
8916
8917 static struct value *
8918 coerce_for_assign (struct type *type, struct value *val)
8919 {
8920   struct type *type2 = value_type (val);
8921
8922   if (type == type2)
8923     return val;
8924
8925   type2 = ada_check_typedef (type2);
8926   type = ada_check_typedef (type);
8927
8928   if (TYPE_CODE (type2) == TYPE_CODE_PTR
8929       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8930     {
8931       val = ada_value_ind (val);
8932       type2 = value_type (val);
8933     }
8934
8935   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
8936       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8937     {
8938       if (!ada_same_array_size_p (type, type2))
8939         error (_("cannot assign arrays of different length"));
8940
8941       if (is_integral_type (TYPE_TARGET_TYPE (type))
8942           && is_integral_type (TYPE_TARGET_TYPE (type2))
8943           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8944                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
8945         {
8946           /* Allow implicit promotion of the array elements to
8947              a wider type.  */
8948           return ada_promote_array_of_integrals (type, val);
8949         }
8950
8951       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8952           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
8953         error (_("Incompatible types in assignment"));
8954       deprecated_set_value_type (val, type);
8955     }
8956   return val;
8957 }
8958
8959 static struct value *
8960 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
8961 {
8962   struct value *val;
8963   struct type *type1, *type2;
8964   LONGEST v, v1, v2;
8965
8966   arg1 = coerce_ref (arg1);
8967   arg2 = coerce_ref (arg2);
8968   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
8969   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
8970
8971   if (TYPE_CODE (type1) != TYPE_CODE_INT
8972       || TYPE_CODE (type2) != TYPE_CODE_INT)
8973     return value_binop (arg1, arg2, op);
8974
8975   switch (op)
8976     {
8977     case BINOP_MOD:
8978     case BINOP_DIV:
8979     case BINOP_REM:
8980       break;
8981     default:
8982       return value_binop (arg1, arg2, op);
8983     }
8984
8985   v2 = value_as_long (arg2);
8986   if (v2 == 0)
8987     error (_("second operand of %s must not be zero."), op_string (op));
8988
8989   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
8990     return value_binop (arg1, arg2, op);
8991
8992   v1 = value_as_long (arg1);
8993   switch (op)
8994     {
8995     case BINOP_DIV:
8996       v = v1 / v2;
8997       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
8998         v += v > 0 ? -1 : 1;
8999       break;
9000     case BINOP_REM:
9001       v = v1 % v2;
9002       if (v * v1 < 0)
9003         v -= v2;
9004       break;
9005     default:
9006       /* Should not reach this point.  */
9007       v = 0;
9008     }
9009
9010   val = allocate_value (type1);
9011   store_unsigned_integer (value_contents_raw (val),
9012                           TYPE_LENGTH (value_type (val)),
9013                           gdbarch_byte_order (get_type_arch (type1)), v);
9014   return val;
9015 }
9016
9017 static int
9018 ada_value_equal (struct value *arg1, struct value *arg2)
9019 {
9020   if (ada_is_direct_array_type (value_type (arg1))
9021       || ada_is_direct_array_type (value_type (arg2)))
9022     {
9023       /* Automatically dereference any array reference before
9024          we attempt to perform the comparison.  */
9025       arg1 = ada_coerce_ref (arg1);
9026       arg2 = ada_coerce_ref (arg2);
9027       
9028       arg1 = ada_coerce_to_simple_array (arg1);
9029       arg2 = ada_coerce_to_simple_array (arg2);
9030       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9031           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9032         error (_("Attempt to compare array with non-array"));
9033       /* FIXME: The following works only for types whose
9034          representations use all bits (no padding or undefined bits)
9035          and do not have user-defined equality.  */
9036       return
9037         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9038         && memcmp (value_contents (arg1), value_contents (arg2),
9039                    TYPE_LENGTH (value_type (arg1))) == 0;
9040     }
9041   return value_equal (arg1, arg2);
9042 }
9043
9044 /* Total number of component associations in the aggregate starting at
9045    index PC in EXP.  Assumes that index PC is the start of an
9046    OP_AGGREGATE.  */
9047
9048 static int
9049 num_component_specs (struct expression *exp, int pc)
9050 {
9051   int n, m, i;
9052
9053   m = exp->elts[pc + 1].longconst;
9054   pc += 3;
9055   n = 0;
9056   for (i = 0; i < m; i += 1)
9057     {
9058       switch (exp->elts[pc].opcode) 
9059         {
9060         default:
9061           n += 1;
9062           break;
9063         case OP_CHOICES:
9064           n += exp->elts[pc + 1].longconst;
9065           break;
9066         }
9067       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9068     }
9069   return n;
9070 }
9071
9072 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9073    component of LHS (a simple array or a record), updating *POS past
9074    the expression, assuming that LHS is contained in CONTAINER.  Does
9075    not modify the inferior's memory, nor does it modify LHS (unless
9076    LHS == CONTAINER).  */
9077
9078 static void
9079 assign_component (struct value *container, struct value *lhs, LONGEST index,
9080                   struct expression *exp, int *pos)
9081 {
9082   struct value *mark = value_mark ();
9083   struct value *elt;
9084
9085   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9086     {
9087       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9088       struct value *index_val = value_from_longest (index_type, index);
9089
9090       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9091     }
9092   else
9093     {
9094       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9095       elt = ada_to_fixed_value (elt);
9096     }
9097
9098   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9099     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9100   else
9101     value_assign_to_component (container, elt, 
9102                                ada_evaluate_subexp (NULL, exp, pos, 
9103                                                     EVAL_NORMAL));
9104
9105   value_free_to_mark (mark);
9106 }
9107
9108 /* Assuming that LHS represents an lvalue having a record or array
9109    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9110    of that aggregate's value to LHS, advancing *POS past the
9111    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9112    lvalue containing LHS (possibly LHS itself).  Does not modify
9113    the inferior's memory, nor does it modify the contents of 
9114    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9115
9116 static struct value *
9117 assign_aggregate (struct value *container, 
9118                   struct value *lhs, struct expression *exp, 
9119                   int *pos, enum noside noside)
9120 {
9121   struct type *lhs_type;
9122   int n = exp->elts[*pos+1].longconst;
9123   LONGEST low_index, high_index;
9124   int num_specs;
9125   LONGEST *indices;
9126   int max_indices, num_indices;
9127   int i;
9128
9129   *pos += 3;
9130   if (noside != EVAL_NORMAL)
9131     {
9132       for (i = 0; i < n; i += 1)
9133         ada_evaluate_subexp (NULL, exp, pos, noside);
9134       return container;
9135     }
9136
9137   container = ada_coerce_ref (container);
9138   if (ada_is_direct_array_type (value_type (container)))
9139     container = ada_coerce_to_simple_array (container);
9140   lhs = ada_coerce_ref (lhs);
9141   if (!deprecated_value_modifiable (lhs))
9142     error (_("Left operand of assignment is not a modifiable lvalue."));
9143
9144   lhs_type = value_type (lhs);
9145   if (ada_is_direct_array_type (lhs_type))
9146     {
9147       lhs = ada_coerce_to_simple_array (lhs);
9148       lhs_type = value_type (lhs);
9149       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9150       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9151     }
9152   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9153     {
9154       low_index = 0;
9155       high_index = num_visible_fields (lhs_type) - 1;
9156     }
9157   else
9158     error (_("Left-hand side must be array or record."));
9159
9160   num_specs = num_component_specs (exp, *pos - 3);
9161   max_indices = 4 * num_specs + 4;
9162   indices = alloca (max_indices * sizeof (indices[0]));
9163   indices[0] = indices[1] = low_index - 1;
9164   indices[2] = indices[3] = high_index + 1;
9165   num_indices = 4;
9166
9167   for (i = 0; i < n; i += 1)
9168     {
9169       switch (exp->elts[*pos].opcode)
9170         {
9171           case OP_CHOICES:
9172             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9173                                            &num_indices, max_indices,
9174                                            low_index, high_index);
9175             break;
9176           case OP_POSITIONAL:
9177             aggregate_assign_positional (container, lhs, exp, pos, indices,
9178                                          &num_indices, max_indices,
9179                                          low_index, high_index);
9180             break;
9181           case OP_OTHERS:
9182             if (i != n-1)
9183               error (_("Misplaced 'others' clause"));
9184             aggregate_assign_others (container, lhs, exp, pos, indices, 
9185                                      num_indices, low_index, high_index);
9186             break;
9187           default:
9188             error (_("Internal error: bad aggregate clause"));
9189         }
9190     }
9191
9192   return container;
9193 }
9194               
9195 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9196    construct at *POS, updating *POS past the construct, given that
9197    the positions are relative to lower bound LOW, where HIGH is the 
9198    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9199    updating *NUM_INDICES as needed.  CONTAINER is as for
9200    assign_aggregate.  */
9201 static void
9202 aggregate_assign_positional (struct value *container,
9203                              struct value *lhs, struct expression *exp,
9204                              int *pos, LONGEST *indices, int *num_indices,
9205                              int max_indices, LONGEST low, LONGEST high) 
9206 {
9207   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9208   
9209   if (ind - 1 == high)
9210     warning (_("Extra components in aggregate ignored."));
9211   if (ind <= high)
9212     {
9213       add_component_interval (ind, ind, indices, num_indices, max_indices);
9214       *pos += 3;
9215       assign_component (container, lhs, ind, exp, pos);
9216     }
9217   else
9218     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9219 }
9220
9221 /* Assign into the components of LHS indexed by the OP_CHOICES
9222    construct at *POS, updating *POS past the construct, given that
9223    the allowable indices are LOW..HIGH.  Record the indices assigned
9224    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9225    needed.  CONTAINER is as for assign_aggregate.  */
9226 static void
9227 aggregate_assign_from_choices (struct value *container,
9228                                struct value *lhs, struct expression *exp,
9229                                int *pos, LONGEST *indices, int *num_indices,
9230                                int max_indices, LONGEST low, LONGEST high) 
9231 {
9232   int j;
9233   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9234   int choice_pos, expr_pc;
9235   int is_array = ada_is_direct_array_type (value_type (lhs));
9236
9237   choice_pos = *pos += 3;
9238
9239   for (j = 0; j < n_choices; j += 1)
9240     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9241   expr_pc = *pos;
9242   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9243   
9244   for (j = 0; j < n_choices; j += 1)
9245     {
9246       LONGEST lower, upper;
9247       enum exp_opcode op = exp->elts[choice_pos].opcode;
9248
9249       if (op == OP_DISCRETE_RANGE)
9250         {
9251           choice_pos += 1;
9252           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9253                                                       EVAL_NORMAL));
9254           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
9255                                                       EVAL_NORMAL));
9256         }
9257       else if (is_array)
9258         {
9259           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
9260                                                       EVAL_NORMAL));
9261           upper = lower;
9262         }
9263       else
9264         {
9265           int ind;
9266           const char *name;
9267
9268           switch (op)
9269             {
9270             case OP_NAME:
9271               name = &exp->elts[choice_pos + 2].string;
9272               break;
9273             case OP_VAR_VALUE:
9274               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9275               break;
9276             default:
9277               error (_("Invalid record component association."));
9278             }
9279           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9280           ind = 0;
9281           if (! find_struct_field (name, value_type (lhs), 0, 
9282                                    NULL, NULL, NULL, NULL, &ind))
9283             error (_("Unknown component name: %s."), name);
9284           lower = upper = ind;
9285         }
9286
9287       if (lower <= upper && (lower < low || upper > high))
9288         error (_("Index in component association out of bounds."));
9289
9290       add_component_interval (lower, upper, indices, num_indices,
9291                               max_indices);
9292       while (lower <= upper)
9293         {
9294           int pos1;
9295
9296           pos1 = expr_pc;
9297           assign_component (container, lhs, lower, exp, &pos1);
9298           lower += 1;
9299         }
9300     }
9301 }
9302
9303 /* Assign the value of the expression in the OP_OTHERS construct in
9304    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9305    have not been previously assigned.  The index intervals already assigned
9306    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
9307    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9308 static void
9309 aggregate_assign_others (struct value *container,
9310                          struct value *lhs, struct expression *exp,
9311                          int *pos, LONGEST *indices, int num_indices,
9312                          LONGEST low, LONGEST high) 
9313 {
9314   int i;
9315   int expr_pc = *pos + 1;
9316   
9317   for (i = 0; i < num_indices - 2; i += 2)
9318     {
9319       LONGEST ind;
9320
9321       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9322         {
9323           int localpos;
9324
9325           localpos = expr_pc;
9326           assign_component (container, lhs, ind, exp, &localpos);
9327         }
9328     }
9329   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9330 }
9331
9332 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
9333    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9334    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9335    MAX_SIZE.  The resulting intervals do not overlap.  */
9336 static void
9337 add_component_interval (LONGEST low, LONGEST high, 
9338                         LONGEST* indices, int *size, int max_size)
9339 {
9340   int i, j;
9341
9342   for (i = 0; i < *size; i += 2) {
9343     if (high >= indices[i] && low <= indices[i + 1])
9344       {
9345         int kh;
9346
9347         for (kh = i + 2; kh < *size; kh += 2)
9348           if (high < indices[kh])
9349             break;
9350         if (low < indices[i])
9351           indices[i] = low;
9352         indices[i + 1] = indices[kh - 1];
9353         if (high > indices[i + 1])
9354           indices[i + 1] = high;
9355         memcpy (indices + i + 2, indices + kh, *size - kh);
9356         *size -= kh - i - 2;
9357         return;
9358       }
9359     else if (high < indices[i])
9360       break;
9361   }
9362         
9363   if (*size == max_size)
9364     error (_("Internal error: miscounted aggregate components."));
9365   *size += 2;
9366   for (j = *size-1; j >= i+2; j -= 1)
9367     indices[j] = indices[j - 2];
9368   indices[i] = low;
9369   indices[i + 1] = high;
9370 }
9371
9372 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9373    is different.  */
9374
9375 static struct value *
9376 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9377 {
9378   if (type == ada_check_typedef (value_type (arg2)))
9379     return arg2;
9380
9381   if (ada_is_fixed_point_type (type))
9382     return (cast_to_fixed (type, arg2));
9383
9384   if (ada_is_fixed_point_type (value_type (arg2)))
9385     return cast_from_fixed (type, arg2);
9386
9387   return value_cast (type, arg2);
9388 }
9389
9390 /*  Evaluating Ada expressions, and printing their result.
9391     ------------------------------------------------------
9392
9393     1. Introduction:
9394     ----------------
9395
9396     We usually evaluate an Ada expression in order to print its value.
9397     We also evaluate an expression in order to print its type, which
9398     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9399     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9400     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9401     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9402     similar.
9403
9404     Evaluating expressions is a little more complicated for Ada entities
9405     than it is for entities in languages such as C.  The main reason for
9406     this is that Ada provides types whose definition might be dynamic.
9407     One example of such types is variant records.  Or another example
9408     would be an array whose bounds can only be known at run time.
9409
9410     The following description is a general guide as to what should be
9411     done (and what should NOT be done) in order to evaluate an expression
9412     involving such types, and when.  This does not cover how the semantic
9413     information is encoded by GNAT as this is covered separatly.  For the
9414     document used as the reference for the GNAT encoding, see exp_dbug.ads
9415     in the GNAT sources.
9416
9417     Ideally, we should embed each part of this description next to its
9418     associated code.  Unfortunately, the amount of code is so vast right
9419     now that it's hard to see whether the code handling a particular
9420     situation might be duplicated or not.  One day, when the code is
9421     cleaned up, this guide might become redundant with the comments
9422     inserted in the code, and we might want to remove it.
9423
9424     2. ``Fixing'' an Entity, the Simple Case:
9425     -----------------------------------------
9426
9427     When evaluating Ada expressions, the tricky issue is that they may
9428     reference entities whose type contents and size are not statically
9429     known.  Consider for instance a variant record:
9430
9431        type Rec (Empty : Boolean := True) is record
9432           case Empty is
9433              when True => null;
9434              when False => Value : Integer;
9435           end case;
9436        end record;
9437        Yes : Rec := (Empty => False, Value => 1);
9438        No  : Rec := (empty => True);
9439
9440     The size and contents of that record depends on the value of the
9441     descriminant (Rec.Empty).  At this point, neither the debugging
9442     information nor the associated type structure in GDB are able to
9443     express such dynamic types.  So what the debugger does is to create
9444     "fixed" versions of the type that applies to the specific object.
9445     We also informally refer to this opperation as "fixing" an object,
9446     which means creating its associated fixed type.
9447
9448     Example: when printing the value of variable "Yes" above, its fixed
9449     type would look like this:
9450
9451        type Rec is record
9452           Empty : Boolean;
9453           Value : Integer;
9454        end record;
9455
9456     On the other hand, if we printed the value of "No", its fixed type
9457     would become:
9458
9459        type Rec is record
9460           Empty : Boolean;
9461        end record;
9462
9463     Things become a little more complicated when trying to fix an entity
9464     with a dynamic type that directly contains another dynamic type,
9465     such as an array of variant records, for instance.  There are
9466     two possible cases: Arrays, and records.
9467
9468     3. ``Fixing'' Arrays:
9469     ---------------------
9470
9471     The type structure in GDB describes an array in terms of its bounds,
9472     and the type of its elements.  By design, all elements in the array
9473     have the same type and we cannot represent an array of variant elements
9474     using the current type structure in GDB.  When fixing an array,
9475     we cannot fix the array element, as we would potentially need one
9476     fixed type per element of the array.  As a result, the best we can do
9477     when fixing an array is to produce an array whose bounds and size
9478     are correct (allowing us to read it from memory), but without having
9479     touched its element type.  Fixing each element will be done later,
9480     when (if) necessary.
9481
9482     Arrays are a little simpler to handle than records, because the same
9483     amount of memory is allocated for each element of the array, even if
9484     the amount of space actually used by each element differs from element
9485     to element.  Consider for instance the following array of type Rec:
9486
9487        type Rec_Array is array (1 .. 2) of Rec;
9488
9489     The actual amount of memory occupied by each element might be different
9490     from element to element, depending on the value of their discriminant.
9491     But the amount of space reserved for each element in the array remains
9492     fixed regardless.  So we simply need to compute that size using
9493     the debugging information available, from which we can then determine
9494     the array size (we multiply the number of elements of the array by
9495     the size of each element).
9496
9497     The simplest case is when we have an array of a constrained element
9498     type. For instance, consider the following type declarations:
9499
9500         type Bounded_String (Max_Size : Integer) is
9501            Length : Integer;
9502            Buffer : String (1 .. Max_Size);
9503         end record;
9504         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9505
9506     In this case, the compiler describes the array as an array of
9507     variable-size elements (identified by its XVS suffix) for which
9508     the size can be read in the parallel XVZ variable.
9509
9510     In the case of an array of an unconstrained element type, the compiler
9511     wraps the array element inside a private PAD type.  This type should not
9512     be shown to the user, and must be "unwrap"'ed before printing.  Note
9513     that we also use the adjective "aligner" in our code to designate
9514     these wrapper types.
9515
9516     In some cases, the size allocated for each element is statically
9517     known.  In that case, the PAD type already has the correct size,
9518     and the array element should remain unfixed.
9519
9520     But there are cases when this size is not statically known.
9521     For instance, assuming that "Five" is an integer variable:
9522
9523         type Dynamic is array (1 .. Five) of Integer;
9524         type Wrapper (Has_Length : Boolean := False) is record
9525            Data : Dynamic;
9526            case Has_Length is
9527               when True => Length : Integer;
9528               when False => null;
9529            end case;
9530         end record;
9531         type Wrapper_Array is array (1 .. 2) of Wrapper;
9532
9533         Hello : Wrapper_Array := (others => (Has_Length => True,
9534                                              Data => (others => 17),
9535                                              Length => 1));
9536
9537
9538     The debugging info would describe variable Hello as being an
9539     array of a PAD type.  The size of that PAD type is not statically
9540     known, but can be determined using a parallel XVZ variable.
9541     In that case, a copy of the PAD type with the correct size should
9542     be used for the fixed array.
9543
9544     3. ``Fixing'' record type objects:
9545     ----------------------------------
9546
9547     Things are slightly different from arrays in the case of dynamic
9548     record types.  In this case, in order to compute the associated
9549     fixed type, we need to determine the size and offset of each of
9550     its components.  This, in turn, requires us to compute the fixed
9551     type of each of these components.
9552
9553     Consider for instance the example:
9554
9555         type Bounded_String (Max_Size : Natural) is record
9556            Str : String (1 .. Max_Size);
9557            Length : Natural;
9558         end record;
9559         My_String : Bounded_String (Max_Size => 10);
9560
9561     In that case, the position of field "Length" depends on the size
9562     of field Str, which itself depends on the value of the Max_Size
9563     discriminant.  In order to fix the type of variable My_String,
9564     we need to fix the type of field Str.  Therefore, fixing a variant
9565     record requires us to fix each of its components.
9566
9567     However, if a component does not have a dynamic size, the component
9568     should not be fixed.  In particular, fields that use a PAD type
9569     should not fixed.  Here is an example where this might happen
9570     (assuming type Rec above):
9571
9572        type Container (Big : Boolean) is record
9573           First : Rec;
9574           After : Integer;
9575           case Big is
9576              when True => Another : Integer;
9577              when False => null;
9578           end case;
9579        end record;
9580        My_Container : Container := (Big => False,
9581                                     First => (Empty => True),
9582                                     After => 42);
9583
9584     In that example, the compiler creates a PAD type for component First,
9585     whose size is constant, and then positions the component After just
9586     right after it.  The offset of component After is therefore constant
9587     in this case.
9588
9589     The debugger computes the position of each field based on an algorithm
9590     that uses, among other things, the actual position and size of the field
9591     preceding it.  Let's now imagine that the user is trying to print
9592     the value of My_Container.  If the type fixing was recursive, we would
9593     end up computing the offset of field After based on the size of the
9594     fixed version of field First.  And since in our example First has
9595     only one actual field, the size of the fixed type is actually smaller
9596     than the amount of space allocated to that field, and thus we would
9597     compute the wrong offset of field After.
9598
9599     To make things more complicated, we need to watch out for dynamic
9600     components of variant records (identified by the ___XVL suffix in
9601     the component name).  Even if the target type is a PAD type, the size
9602     of that type might not be statically known.  So the PAD type needs
9603     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9604     we might end up with the wrong size for our component.  This can be
9605     observed with the following type declarations:
9606
9607         type Octal is new Integer range 0 .. 7;
9608         type Octal_Array is array (Positive range <>) of Octal;
9609         pragma Pack (Octal_Array);
9610
9611         type Octal_Buffer (Size : Positive) is record
9612            Buffer : Octal_Array (1 .. Size);
9613            Length : Integer;
9614         end record;
9615
9616     In that case, Buffer is a PAD type whose size is unset and needs
9617     to be computed by fixing the unwrapped type.
9618
9619     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9620     ----------------------------------------------------------
9621
9622     Lastly, when should the sub-elements of an entity that remained unfixed
9623     thus far, be actually fixed?
9624
9625     The answer is: Only when referencing that element.  For instance
9626     when selecting one component of a record, this specific component
9627     should be fixed at that point in time.  Or when printing the value
9628     of a record, each component should be fixed before its value gets
9629     printed.  Similarly for arrays, the element of the array should be
9630     fixed when printing each element of the array, or when extracting
9631     one element out of that array.  On the other hand, fixing should
9632     not be performed on the elements when taking a slice of an array!
9633
9634     Note that one of the side-effects of miscomputing the offset and
9635     size of each field is that we end up also miscomputing the size
9636     of the containing type.  This can have adverse results when computing
9637     the value of an entity.  GDB fetches the value of an entity based
9638     on the size of its type, and thus a wrong size causes GDB to fetch
9639     the wrong amount of memory.  In the case where the computed size is
9640     too small, GDB fetches too little data to print the value of our
9641     entiry.  Results in this case as unpredicatble, as we usually read
9642     past the buffer containing the data =:-o.  */
9643
9644 /* Implement the evaluate_exp routine in the exp_descriptor structure
9645    for the Ada language.  */
9646
9647 static struct value *
9648 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9649                      int *pos, enum noside noside)
9650 {
9651   enum exp_opcode op;
9652   int tem;
9653   int pc;
9654   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9655   struct type *type;
9656   int nargs, oplen;
9657   struct value **argvec;
9658
9659   pc = *pos;
9660   *pos += 1;
9661   op = exp->elts[pc].opcode;
9662
9663   switch (op)
9664     {
9665     default:
9666       *pos -= 1;
9667       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9668
9669       if (noside == EVAL_NORMAL)
9670         arg1 = unwrap_value (arg1);
9671
9672       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9673          then we need to perform the conversion manually, because
9674          evaluate_subexp_standard doesn't do it.  This conversion is
9675          necessary in Ada because the different kinds of float/fixed
9676          types in Ada have different representations.
9677
9678          Similarly, we need to perform the conversion from OP_LONG
9679          ourselves.  */
9680       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9681         arg1 = ada_value_cast (expect_type, arg1, noside);
9682
9683       return arg1;
9684
9685     case OP_STRING:
9686       {
9687         struct value *result;
9688
9689         *pos -= 1;
9690         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9691         /* The result type will have code OP_STRING, bashed there from 
9692            OP_ARRAY.  Bash it back.  */
9693         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9694           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
9695         return result;
9696       }
9697
9698     case UNOP_CAST:
9699       (*pos) += 2;
9700       type = exp->elts[pc + 1].type;
9701       arg1 = evaluate_subexp (type, exp, pos, noside);
9702       if (noside == EVAL_SKIP)
9703         goto nosideret;
9704       arg1 = ada_value_cast (type, arg1, noside);
9705       return arg1;
9706
9707     case UNOP_QUAL:
9708       (*pos) += 2;
9709       type = exp->elts[pc + 1].type;
9710       return ada_evaluate_subexp (type, exp, pos, noside);
9711
9712     case BINOP_ASSIGN:
9713       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9714       if (exp->elts[*pos].opcode == OP_AGGREGATE)
9715         {
9716           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9717           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9718             return arg1;
9719           return ada_value_assign (arg1, arg1);
9720         }
9721       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9722          except if the lhs of our assignment is a convenience variable.
9723          In the case of assigning to a convenience variable, the lhs
9724          should be exactly the result of the evaluation of the rhs.  */
9725       type = value_type (arg1);
9726       if (VALUE_LVAL (arg1) == lval_internalvar)
9727          type = NULL;
9728       arg2 = evaluate_subexp (type, exp, pos, noside);
9729       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9730         return arg1;
9731       if (ada_is_fixed_point_type (value_type (arg1)))
9732         arg2 = cast_to_fixed (value_type (arg1), arg2);
9733       else if (ada_is_fixed_point_type (value_type (arg2)))
9734         error
9735           (_("Fixed-point values must be assigned to fixed-point variables"));
9736       else
9737         arg2 = coerce_for_assign (value_type (arg1), arg2);
9738       return ada_value_assign (arg1, arg2);
9739
9740     case BINOP_ADD:
9741       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9742       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9743       if (noside == EVAL_SKIP)
9744         goto nosideret;
9745       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9746         return (value_from_longest
9747                  (value_type (arg1),
9748                   value_as_long (arg1) + value_as_long (arg2)));
9749       if ((ada_is_fixed_point_type (value_type (arg1))
9750            || ada_is_fixed_point_type (value_type (arg2)))
9751           && value_type (arg1) != value_type (arg2))
9752         error (_("Operands of fixed-point addition must have the same type"));
9753       /* Do the addition, and cast the result to the type of the first
9754          argument.  We cannot cast the result to a reference type, so if
9755          ARG1 is a reference type, find its underlying type.  */
9756       type = value_type (arg1);
9757       while (TYPE_CODE (type) == TYPE_CODE_REF)
9758         type = TYPE_TARGET_TYPE (type);
9759       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9760       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
9761
9762     case BINOP_SUB:
9763       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9764       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9765       if (noside == EVAL_SKIP)
9766         goto nosideret;
9767       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9768         return (value_from_longest
9769                  (value_type (arg1),
9770                   value_as_long (arg1) - value_as_long (arg2)));
9771       if ((ada_is_fixed_point_type (value_type (arg1))
9772            || ada_is_fixed_point_type (value_type (arg2)))
9773           && value_type (arg1) != value_type (arg2))
9774         error (_("Operands of fixed-point subtraction "
9775                  "must have the same type"));
9776       /* Do the substraction, and cast the result to the type of the first
9777          argument.  We cannot cast the result to a reference type, so if
9778          ARG1 is a reference type, find its underlying type.  */
9779       type = value_type (arg1);
9780       while (TYPE_CODE (type) == TYPE_CODE_REF)
9781         type = TYPE_TARGET_TYPE (type);
9782       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9783       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
9784
9785     case BINOP_MUL:
9786     case BINOP_DIV:
9787     case BINOP_REM:
9788     case BINOP_MOD:
9789       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9790       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9791       if (noside == EVAL_SKIP)
9792         goto nosideret;
9793       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9794         {
9795           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9796           return value_zero (value_type (arg1), not_lval);
9797         }
9798       else
9799         {
9800           type = builtin_type (exp->gdbarch)->builtin_double;
9801           if (ada_is_fixed_point_type (value_type (arg1)))
9802             arg1 = cast_from_fixed (type, arg1);
9803           if (ada_is_fixed_point_type (value_type (arg2)))
9804             arg2 = cast_from_fixed (type, arg2);
9805           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9806           return ada_value_binop (arg1, arg2, op);
9807         }
9808
9809     case BINOP_EQUAL:
9810     case BINOP_NOTEQUAL:
9811       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9812       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
9813       if (noside == EVAL_SKIP)
9814         goto nosideret;
9815       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9816         tem = 0;
9817       else
9818         {
9819           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9820           tem = ada_value_equal (arg1, arg2);
9821         }
9822       if (op == BINOP_NOTEQUAL)
9823         tem = !tem;
9824       type = language_bool_type (exp->language_defn, exp->gdbarch);
9825       return value_from_longest (type, (LONGEST) tem);
9826
9827     case UNOP_NEG:
9828       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9829       if (noside == EVAL_SKIP)
9830         goto nosideret;
9831       else if (ada_is_fixed_point_type (value_type (arg1)))
9832         return value_cast (value_type (arg1), value_neg (arg1));
9833       else
9834         {
9835           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9836           return value_neg (arg1);
9837         }
9838
9839     case BINOP_LOGICAL_AND:
9840     case BINOP_LOGICAL_OR:
9841     case UNOP_LOGICAL_NOT:
9842       {
9843         struct value *val;
9844
9845         *pos -= 1;
9846         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
9847         type = language_bool_type (exp->language_defn, exp->gdbarch);
9848         return value_cast (type, val);
9849       }
9850
9851     case BINOP_BITWISE_AND:
9852     case BINOP_BITWISE_IOR:
9853     case BINOP_BITWISE_XOR:
9854       {
9855         struct value *val;
9856
9857         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9858         *pos = pc;
9859         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
9860
9861         return value_cast (value_type (arg1), val);
9862       }
9863
9864     case OP_VAR_VALUE:
9865       *pos -= 1;
9866
9867       if (noside == EVAL_SKIP)
9868         {
9869           *pos += 4;
9870           goto nosideret;
9871         }
9872       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
9873         /* Only encountered when an unresolved symbol occurs in a
9874            context other than a function call, in which case, it is
9875            invalid.  */
9876         error (_("Unexpected unresolved symbol, %s, during evaluation"),
9877                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
9878       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9879         {
9880           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
9881           /* Check to see if this is a tagged type.  We also need to handle
9882              the case where the type is a reference to a tagged type, but
9883              we have to be careful to exclude pointers to tagged types.
9884              The latter should be shown as usual (as a pointer), whereas
9885              a reference should mostly be transparent to the user.  */
9886           if (ada_is_tagged_type (type, 0)
9887               || (TYPE_CODE(type) == TYPE_CODE_REF
9888                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
9889           {
9890             /* Tagged types are a little special in the fact that the real
9891                type is dynamic and can only be determined by inspecting the
9892                object's tag.  This means that we need to get the object's
9893                value first (EVAL_NORMAL) and then extract the actual object
9894                type from its tag.
9895
9896                Note that we cannot skip the final step where we extract
9897                the object type from its tag, because the EVAL_NORMAL phase
9898                results in dynamic components being resolved into fixed ones.
9899                This can cause problems when trying to print the type
9900                description of tagged types whose parent has a dynamic size:
9901                We use the type name of the "_parent" component in order
9902                to print the name of the ancestor type in the type description.
9903                If that component had a dynamic size, the resolution into
9904                a fixed type would result in the loss of that type name,
9905                thus preventing us from printing the name of the ancestor
9906                type in the type description.  */
9907             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
9908
9909             if (TYPE_CODE (type) != TYPE_CODE_REF)
9910               {
9911                 struct type *actual_type;
9912
9913                 actual_type = type_from_tag (ada_value_tag (arg1));
9914                 if (actual_type == NULL)
9915                   /* If, for some reason, we were unable to determine
9916                      the actual type from the tag, then use the static
9917                      approximation that we just computed as a fallback.
9918                      This can happen if the debugging information is
9919                      incomplete, for instance.  */
9920                   actual_type = type;
9921                 return value_zero (actual_type, not_lval);
9922               }
9923             else
9924               {
9925                 /* In the case of a ref, ada_coerce_ref takes care
9926                    of determining the actual type.  But the evaluation
9927                    should return a ref as it should be valid to ask
9928                    for its address; so rebuild a ref after coerce.  */
9929                 arg1 = ada_coerce_ref (arg1);
9930                 return value_ref (arg1);
9931               }
9932           }
9933
9934           *pos += 4;
9935           return value_zero
9936             (to_static_fixed_type
9937              (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
9938              not_lval);
9939         }
9940       else
9941         {
9942           arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9943           return ada_to_fixed_value (arg1);
9944         }
9945
9946     case OP_FUNCALL:
9947       (*pos) += 2;
9948
9949       /* Allocate arg vector, including space for the function to be
9950          called in argvec[0] and a terminating NULL.  */
9951       nargs = longest_to_int (exp->elts[pc + 1].longconst);
9952       argvec =
9953         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
9954
9955       if (exp->elts[*pos].opcode == OP_VAR_VALUE
9956           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
9957         error (_("Unexpected unresolved symbol, %s, during evaluation"),
9958                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
9959       else
9960         {
9961           for (tem = 0; tem <= nargs; tem += 1)
9962             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9963           argvec[tem] = 0;
9964
9965           if (noside == EVAL_SKIP)
9966             goto nosideret;
9967         }
9968
9969       if (ada_is_constrained_packed_array_type
9970           (desc_base_type (value_type (argvec[0]))))
9971         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
9972       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
9973                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
9974         /* This is a packed array that has already been fixed, and
9975            therefore already coerced to a simple array.  Nothing further
9976            to do.  */
9977         ;
9978       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
9979                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
9980                    && VALUE_LVAL (argvec[0]) == lval_memory))
9981         argvec[0] = value_addr (argvec[0]);
9982
9983       type = ada_check_typedef (value_type (argvec[0]));
9984
9985       /* Ada allows us to implicitly dereference arrays when subscripting
9986          them.  So, if this is an array typedef (encoding use for array
9987          access types encoded as fat pointers), strip it now.  */
9988       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
9989         type = ada_typedef_target_type (type);
9990
9991       if (TYPE_CODE (type) == TYPE_CODE_PTR)
9992         {
9993           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
9994             {
9995             case TYPE_CODE_FUNC:
9996               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
9997               break;
9998             case TYPE_CODE_ARRAY:
9999               break;
10000             case TYPE_CODE_STRUCT:
10001               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10002                 argvec[0] = ada_value_ind (argvec[0]);
10003               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10004               break;
10005             default:
10006               error (_("cannot subscript or call something of type `%s'"),
10007                      ada_type_name (value_type (argvec[0])));
10008               break;
10009             }
10010         }
10011
10012       switch (TYPE_CODE (type))
10013         {
10014         case TYPE_CODE_FUNC:
10015           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10016             {
10017               struct type *rtype = TYPE_TARGET_TYPE (type);
10018
10019               if (TYPE_GNU_IFUNC (type))
10020                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10021               return allocate_value (rtype);
10022             }
10023           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10024         case TYPE_CODE_INTERNAL_FUNCTION:
10025           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10026             /* We don't know anything about what the internal
10027                function might return, but we have to return
10028                something.  */
10029             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10030                                not_lval);
10031           else
10032             return call_internal_function (exp->gdbarch, exp->language_defn,
10033                                            argvec[0], nargs, argvec + 1);
10034
10035         case TYPE_CODE_STRUCT:
10036           {
10037             int arity;
10038
10039             arity = ada_array_arity (type);
10040             type = ada_array_element_type (type, nargs);
10041             if (type == NULL)
10042               error (_("cannot subscript or call a record"));
10043             if (arity != nargs)
10044               error (_("wrong number of subscripts; expecting %d"), arity);
10045             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10046               return value_zero (ada_aligned_type (type), lval_memory);
10047             return
10048               unwrap_value (ada_value_subscript
10049                             (argvec[0], nargs, argvec + 1));
10050           }
10051         case TYPE_CODE_ARRAY:
10052           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10053             {
10054               type = ada_array_element_type (type, nargs);
10055               if (type == NULL)
10056                 error (_("element type of array unknown"));
10057               else
10058                 return value_zero (ada_aligned_type (type), lval_memory);
10059             }
10060           return
10061             unwrap_value (ada_value_subscript
10062                           (ada_coerce_to_simple_array (argvec[0]),
10063                            nargs, argvec + 1));
10064         case TYPE_CODE_PTR:     /* Pointer to array */
10065           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10066           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10067             {
10068               type = ada_array_element_type (type, nargs);
10069               if (type == NULL)
10070                 error (_("element type of array unknown"));
10071               else
10072                 return value_zero (ada_aligned_type (type), lval_memory);
10073             }
10074           return
10075             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
10076                                                    nargs, argvec + 1));
10077
10078         default:
10079           error (_("Attempt to index or call something other than an "
10080                    "array or function"));
10081         }
10082
10083     case TERNOP_SLICE:
10084       {
10085         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10086         struct value *low_bound_val =
10087           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10088         struct value *high_bound_val =
10089           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10090         LONGEST low_bound;
10091         LONGEST high_bound;
10092
10093         low_bound_val = coerce_ref (low_bound_val);
10094         high_bound_val = coerce_ref (high_bound_val);
10095         low_bound = pos_atr (low_bound_val);
10096         high_bound = pos_atr (high_bound_val);
10097
10098         if (noside == EVAL_SKIP)
10099           goto nosideret;
10100
10101         /* If this is a reference to an aligner type, then remove all
10102            the aligners.  */
10103         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10104             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10105           TYPE_TARGET_TYPE (value_type (array)) =
10106             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10107
10108         if (ada_is_constrained_packed_array_type (value_type (array)))
10109           error (_("cannot slice a packed array"));
10110
10111         /* If this is a reference to an array or an array lvalue,
10112            convert to a pointer.  */
10113         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10114             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10115                 && VALUE_LVAL (array) == lval_memory))
10116           array = value_addr (array);
10117
10118         if (noside == EVAL_AVOID_SIDE_EFFECTS
10119             && ada_is_array_descriptor_type (ada_check_typedef
10120                                              (value_type (array))))
10121           return empty_array (ada_type_of_array (array, 0), low_bound);
10122
10123         array = ada_coerce_to_simple_array_ptr (array);
10124
10125         /* If we have more than one level of pointer indirection,
10126            dereference the value until we get only one level.  */
10127         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10128                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10129                      == TYPE_CODE_PTR))
10130           array = value_ind (array);
10131
10132         /* Make sure we really do have an array type before going further,
10133            to avoid a SEGV when trying to get the index type or the target
10134            type later down the road if the debug info generated by
10135            the compiler is incorrect or incomplete.  */
10136         if (!ada_is_simple_array_type (value_type (array)))
10137           error (_("cannot take slice of non-array"));
10138
10139         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10140             == TYPE_CODE_PTR)
10141           {
10142             struct type *type0 = ada_check_typedef (value_type (array));
10143
10144             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10145               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10146             else
10147               {
10148                 struct type *arr_type0 =
10149                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10150
10151                 return ada_value_slice_from_ptr (array, arr_type0,
10152                                                  longest_to_int (low_bound),
10153                                                  longest_to_int (high_bound));
10154               }
10155           }
10156         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10157           return array;
10158         else if (high_bound < low_bound)
10159           return empty_array (value_type (array), low_bound);
10160         else
10161           return ada_value_slice (array, longest_to_int (low_bound),
10162                                   longest_to_int (high_bound));
10163       }
10164
10165     case UNOP_IN_RANGE:
10166       (*pos) += 2;
10167       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10168       type = check_typedef (exp->elts[pc + 1].type);
10169
10170       if (noside == EVAL_SKIP)
10171         goto nosideret;
10172
10173       switch (TYPE_CODE (type))
10174         {
10175         default:
10176           lim_warning (_("Membership test incompletely implemented; "
10177                          "always returns true"));
10178           type = language_bool_type (exp->language_defn, exp->gdbarch);
10179           return value_from_longest (type, (LONGEST) 1);
10180
10181         case TYPE_CODE_RANGE:
10182           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10183           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10184           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10185           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10186           type = language_bool_type (exp->language_defn, exp->gdbarch);
10187           return
10188             value_from_longest (type,
10189                                 (value_less (arg1, arg3)
10190                                  || value_equal (arg1, arg3))
10191                                 && (value_less (arg2, arg1)
10192                                     || value_equal (arg2, arg1)));
10193         }
10194
10195     case BINOP_IN_BOUNDS:
10196       (*pos) += 2;
10197       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10198       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10199
10200       if (noside == EVAL_SKIP)
10201         goto nosideret;
10202
10203       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10204         {
10205           type = language_bool_type (exp->language_defn, exp->gdbarch);
10206           return value_zero (type, not_lval);
10207         }
10208
10209       tem = longest_to_int (exp->elts[pc + 1].longconst);
10210
10211       type = ada_index_type (value_type (arg2), tem, "range");
10212       if (!type)
10213         type = value_type (arg1);
10214
10215       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10216       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10217
10218       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10219       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10220       type = language_bool_type (exp->language_defn, exp->gdbarch);
10221       return
10222         value_from_longest (type,
10223                             (value_less (arg1, arg3)
10224                              || value_equal (arg1, arg3))
10225                             && (value_less (arg2, arg1)
10226                                 || value_equal (arg2, arg1)));
10227
10228     case TERNOP_IN_RANGE:
10229       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10230       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10231       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10232
10233       if (noside == EVAL_SKIP)
10234         goto nosideret;
10235
10236       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10237       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10238       type = language_bool_type (exp->language_defn, exp->gdbarch);
10239       return
10240         value_from_longest (type,
10241                             (value_less (arg1, arg3)
10242                              || value_equal (arg1, arg3))
10243                             && (value_less (arg2, arg1)
10244                                 || value_equal (arg2, arg1)));
10245
10246     case OP_ATR_FIRST:
10247     case OP_ATR_LAST:
10248     case OP_ATR_LENGTH:
10249       {
10250         struct type *type_arg;
10251
10252         if (exp->elts[*pos].opcode == OP_TYPE)
10253           {
10254             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10255             arg1 = NULL;
10256             type_arg = check_typedef (exp->elts[pc + 2].type);
10257           }
10258         else
10259           {
10260             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10261             type_arg = NULL;
10262           }
10263
10264         if (exp->elts[*pos].opcode != OP_LONG)
10265           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10266         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10267         *pos += 4;
10268
10269         if (noside == EVAL_SKIP)
10270           goto nosideret;
10271
10272         if (type_arg == NULL)
10273           {
10274             arg1 = ada_coerce_ref (arg1);
10275
10276             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10277               arg1 = ada_coerce_to_simple_array (arg1);
10278
10279             type = ada_index_type (value_type (arg1), tem,
10280                                    ada_attribute_name (op));
10281             if (type == NULL)
10282               type = builtin_type (exp->gdbarch)->builtin_int;
10283
10284             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10285               return allocate_value (type);
10286
10287             switch (op)
10288               {
10289               default:          /* Should never happen.  */
10290                 error (_("unexpected attribute encountered"));
10291               case OP_ATR_FIRST:
10292                 return value_from_longest
10293                         (type, ada_array_bound (arg1, tem, 0));
10294               case OP_ATR_LAST:
10295                 return value_from_longest
10296                         (type, ada_array_bound (arg1, tem, 1));
10297               case OP_ATR_LENGTH:
10298                 return value_from_longest
10299                         (type, ada_array_length (arg1, tem));
10300               }
10301           }
10302         else if (discrete_type_p (type_arg))
10303           {
10304             struct type *range_type;
10305             const char *name = ada_type_name (type_arg);
10306
10307             range_type = NULL;
10308             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10309               range_type = to_fixed_range_type (type_arg, NULL);
10310             if (range_type == NULL)
10311               range_type = type_arg;
10312             switch (op)
10313               {
10314               default:
10315                 error (_("unexpected attribute encountered"));
10316               case OP_ATR_FIRST:
10317                 return value_from_longest 
10318                   (range_type, ada_discrete_type_low_bound (range_type));
10319               case OP_ATR_LAST:
10320                 return value_from_longest
10321                   (range_type, ada_discrete_type_high_bound (range_type));
10322               case OP_ATR_LENGTH:
10323                 error (_("the 'length attribute applies only to array types"));
10324               }
10325           }
10326         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10327           error (_("unimplemented type attribute"));
10328         else
10329           {
10330             LONGEST low, high;
10331
10332             if (ada_is_constrained_packed_array_type (type_arg))
10333               type_arg = decode_constrained_packed_array_type (type_arg);
10334
10335             type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10336             if (type == NULL)
10337               type = builtin_type (exp->gdbarch)->builtin_int;
10338
10339             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10340               return allocate_value (type);
10341
10342             switch (op)
10343               {
10344               default:
10345                 error (_("unexpected attribute encountered"));
10346               case OP_ATR_FIRST:
10347                 low = ada_array_bound_from_type (type_arg, tem, 0);
10348                 return value_from_longest (type, low);
10349               case OP_ATR_LAST:
10350                 high = ada_array_bound_from_type (type_arg, tem, 1);
10351                 return value_from_longest (type, high);
10352               case OP_ATR_LENGTH:
10353                 low = ada_array_bound_from_type (type_arg, tem, 0);
10354                 high = ada_array_bound_from_type (type_arg, tem, 1);
10355                 return value_from_longest (type, high - low + 1);
10356               }
10357           }
10358       }
10359
10360     case OP_ATR_TAG:
10361       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10362       if (noside == EVAL_SKIP)
10363         goto nosideret;
10364
10365       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10366         return value_zero (ada_tag_type (arg1), not_lval);
10367
10368       return ada_value_tag (arg1);
10369
10370     case OP_ATR_MIN:
10371     case OP_ATR_MAX:
10372       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10373       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10374       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10375       if (noside == EVAL_SKIP)
10376         goto nosideret;
10377       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10378         return value_zero (value_type (arg1), not_lval);
10379       else
10380         {
10381           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10382           return value_binop (arg1, arg2,
10383                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10384         }
10385
10386     case OP_ATR_MODULUS:
10387       {
10388         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10389
10390         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10391         if (noside == EVAL_SKIP)
10392           goto nosideret;
10393
10394         if (!ada_is_modular_type (type_arg))
10395           error (_("'modulus must be applied to modular type"));
10396
10397         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10398                                    ada_modulus (type_arg));
10399       }
10400
10401
10402     case OP_ATR_POS:
10403       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10404       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10405       if (noside == EVAL_SKIP)
10406         goto nosideret;
10407       type = builtin_type (exp->gdbarch)->builtin_int;
10408       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10409         return value_zero (type, not_lval);
10410       else
10411         return value_pos_atr (type, arg1);
10412
10413     case OP_ATR_SIZE:
10414       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10415       type = value_type (arg1);
10416
10417       /* If the argument is a reference, then dereference its type, since
10418          the user is really asking for the size of the actual object,
10419          not the size of the pointer.  */
10420       if (TYPE_CODE (type) == TYPE_CODE_REF)
10421         type = TYPE_TARGET_TYPE (type);
10422
10423       if (noside == EVAL_SKIP)
10424         goto nosideret;
10425       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10426         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10427       else
10428         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10429                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10430
10431     case OP_ATR_VAL:
10432       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10433       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10434       type = exp->elts[pc + 2].type;
10435       if (noside == EVAL_SKIP)
10436         goto nosideret;
10437       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10438         return value_zero (type, not_lval);
10439       else
10440         return value_val_atr (type, arg1);
10441
10442     case BINOP_EXP:
10443       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10444       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10445       if (noside == EVAL_SKIP)
10446         goto nosideret;
10447       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10448         return value_zero (value_type (arg1), not_lval);
10449       else
10450         {
10451           /* For integer exponentiation operations,
10452              only promote the first argument.  */
10453           if (is_integral_type (value_type (arg2)))
10454             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10455           else
10456             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10457
10458           return value_binop (arg1, arg2, op);
10459         }
10460
10461     case UNOP_PLUS:
10462       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10463       if (noside == EVAL_SKIP)
10464         goto nosideret;
10465       else
10466         return arg1;
10467
10468     case UNOP_ABS:
10469       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10470       if (noside == EVAL_SKIP)
10471         goto nosideret;
10472       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10473       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10474         return value_neg (arg1);
10475       else
10476         return arg1;
10477
10478     case UNOP_IND:
10479       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10480       if (noside == EVAL_SKIP)
10481         goto nosideret;
10482       type = ada_check_typedef (value_type (arg1));
10483       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10484         {
10485           if (ada_is_array_descriptor_type (type))
10486             /* GDB allows dereferencing GNAT array descriptors.  */
10487             {
10488               struct type *arrType = ada_type_of_array (arg1, 0);
10489
10490               if (arrType == NULL)
10491                 error (_("Attempt to dereference null array pointer."));
10492               return value_at_lazy (arrType, 0);
10493             }
10494           else if (TYPE_CODE (type) == TYPE_CODE_PTR
10495                    || TYPE_CODE (type) == TYPE_CODE_REF
10496                    /* In C you can dereference an array to get the 1st elt.  */
10497                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10498             {
10499               type = to_static_fixed_type
10500                 (ada_aligned_type
10501                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10502               check_size (type);
10503               return value_zero (type, lval_memory);
10504             }
10505           else if (TYPE_CODE (type) == TYPE_CODE_INT)
10506             {
10507               /* GDB allows dereferencing an int.  */
10508               if (expect_type == NULL)
10509                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10510                                    lval_memory);
10511               else
10512                 {
10513                   expect_type = 
10514                     to_static_fixed_type (ada_aligned_type (expect_type));
10515                   return value_zero (expect_type, lval_memory);
10516                 }
10517             }
10518           else
10519             error (_("Attempt to take contents of a non-pointer value."));
10520         }
10521       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
10522       type = ada_check_typedef (value_type (arg1));
10523
10524       if (TYPE_CODE (type) == TYPE_CODE_INT)
10525           /* GDB allows dereferencing an int.  If we were given
10526              the expect_type, then use that as the target type.
10527              Otherwise, assume that the target type is an int.  */
10528         {
10529           if (expect_type != NULL)
10530             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10531                                               arg1));
10532           else
10533             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10534                                   (CORE_ADDR) value_as_address (arg1));
10535         }
10536
10537       if (ada_is_array_descriptor_type (type))
10538         /* GDB allows dereferencing GNAT array descriptors.  */
10539         return ada_coerce_to_simple_array (arg1);
10540       else
10541         return ada_value_ind (arg1);
10542
10543     case STRUCTOP_STRUCT:
10544       tem = longest_to_int (exp->elts[pc + 1].longconst);
10545       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10546       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10547       if (noside == EVAL_SKIP)
10548         goto nosideret;
10549       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10550         {
10551           struct type *type1 = value_type (arg1);
10552
10553           if (ada_is_tagged_type (type1, 1))
10554             {
10555               type = ada_lookup_struct_elt_type (type1,
10556                                                  &exp->elts[pc + 2].string,
10557                                                  1, 1, NULL);
10558               if (type == NULL)
10559                 /* In this case, we assume that the field COULD exist
10560                    in some extension of the type.  Return an object of 
10561                    "type" void, which will match any formal 
10562                    (see ada_type_match).  */
10563                 return value_zero (builtin_type (exp->gdbarch)->builtin_void,
10564                                    lval_memory);
10565             }
10566           else
10567             type =
10568               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10569                                           0, NULL);
10570
10571           return value_zero (ada_aligned_type (type), lval_memory);
10572         }
10573       else
10574         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10575         arg1 = unwrap_value (arg1);
10576         return ada_to_fixed_value (arg1);
10577
10578     case OP_TYPE:
10579       /* The value is not supposed to be used.  This is here to make it
10580          easier to accommodate expressions that contain types.  */
10581       (*pos) += 2;
10582       if (noside == EVAL_SKIP)
10583         goto nosideret;
10584       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10585         return allocate_value (exp->elts[pc + 1].type);
10586       else
10587         error (_("Attempt to use a type name as an expression"));
10588
10589     case OP_AGGREGATE:
10590     case OP_CHOICES:
10591     case OP_OTHERS:
10592     case OP_DISCRETE_RANGE:
10593     case OP_POSITIONAL:
10594     case OP_NAME:
10595       if (noside == EVAL_NORMAL)
10596         switch (op) 
10597           {
10598           case OP_NAME:
10599             error (_("Undefined name, ambiguous name, or renaming used in "
10600                      "component association: %s."), &exp->elts[pc+2].string);
10601           case OP_AGGREGATE:
10602             error (_("Aggregates only allowed on the right of an assignment"));
10603           default:
10604             internal_error (__FILE__, __LINE__,
10605                             _("aggregate apparently mangled"));
10606           }
10607
10608       ada_forward_operator_length (exp, pc, &oplen, &nargs);
10609       *pos += oplen - 1;
10610       for (tem = 0; tem < nargs; tem += 1) 
10611         ada_evaluate_subexp (NULL, exp, pos, noside);
10612       goto nosideret;
10613     }
10614
10615 nosideret:
10616   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
10617 }
10618 \f
10619
10620                                 /* Fixed point */
10621
10622 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
10623    type name that encodes the 'small and 'delta information.
10624    Otherwise, return NULL.  */
10625
10626 static const char *
10627 fixed_type_info (struct type *type)
10628 {
10629   const char *name = ada_type_name (type);
10630   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10631
10632   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10633     {
10634       const char *tail = strstr (name, "___XF_");
10635
10636       if (tail == NULL)
10637         return NULL;
10638       else
10639         return tail + 5;
10640     }
10641   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10642     return fixed_type_info (TYPE_TARGET_TYPE (type));
10643   else
10644     return NULL;
10645 }
10646
10647 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
10648
10649 int
10650 ada_is_fixed_point_type (struct type *type)
10651 {
10652   return fixed_type_info (type) != NULL;
10653 }
10654
10655 /* Return non-zero iff TYPE represents a System.Address type.  */
10656
10657 int
10658 ada_is_system_address_type (struct type *type)
10659 {
10660   return (TYPE_NAME (type)
10661           && strcmp (TYPE_NAME (type), "system__address") == 0);
10662 }
10663
10664 /* Assuming that TYPE is the representation of an Ada fixed-point
10665    type, return its delta, or -1 if the type is malformed and the
10666    delta cannot be determined.  */
10667
10668 DOUBLEST
10669 ada_delta (struct type *type)
10670 {
10671   const char *encoding = fixed_type_info (type);
10672   DOUBLEST num, den;
10673
10674   /* Strictly speaking, num and den are encoded as integer.  However,
10675      they may not fit into a long, and they will have to be converted
10676      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10677   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10678               &num, &den) < 2)
10679     return -1.0;
10680   else
10681     return num / den;
10682 }
10683
10684 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
10685    factor ('SMALL value) associated with the type.  */
10686
10687 static DOUBLEST
10688 scaling_factor (struct type *type)
10689 {
10690   const char *encoding = fixed_type_info (type);
10691   DOUBLEST num0, den0, num1, den1;
10692   int n;
10693
10694   /* Strictly speaking, num's and den's are encoded as integer.  However,
10695      they may not fit into a long, and they will have to be converted
10696      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10697   n = sscanf (encoding,
10698               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
10699               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10700               &num0, &den0, &num1, &den1);
10701
10702   if (n < 2)
10703     return 1.0;
10704   else if (n == 4)
10705     return num1 / den1;
10706   else
10707     return num0 / den0;
10708 }
10709
10710
10711 /* Assuming that X is the representation of a value of fixed-point
10712    type TYPE, return its floating-point equivalent.  */
10713
10714 DOUBLEST
10715 ada_fixed_to_float (struct type *type, LONGEST x)
10716 {
10717   return (DOUBLEST) x *scaling_factor (type);
10718 }
10719
10720 /* The representation of a fixed-point value of type TYPE
10721    corresponding to the value X.  */
10722
10723 LONGEST
10724 ada_float_to_fixed (struct type *type, DOUBLEST x)
10725 {
10726   return (LONGEST) (x / scaling_factor (type) + 0.5);
10727 }
10728
10729 \f
10730
10731                                 /* Range types */
10732
10733 /* Scan STR beginning at position K for a discriminant name, and
10734    return the value of that discriminant field of DVAL in *PX.  If
10735    PNEW_K is not null, put the position of the character beyond the
10736    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
10737    not alter *PX and *PNEW_K if unsuccessful.  */
10738
10739 static int
10740 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
10741                     int *pnew_k)
10742 {
10743   static char *bound_buffer = NULL;
10744   static size_t bound_buffer_len = 0;
10745   char *bound;
10746   char *pend;
10747   struct value *bound_val;
10748
10749   if (dval == NULL || str == NULL || str[k] == '\0')
10750     return 0;
10751
10752   pend = strstr (str + k, "__");
10753   if (pend == NULL)
10754     {
10755       bound = str + k;
10756       k += strlen (bound);
10757     }
10758   else
10759     {
10760       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
10761       bound = bound_buffer;
10762       strncpy (bound_buffer, str + k, pend - (str + k));
10763       bound[pend - (str + k)] = '\0';
10764       k = pend - str;
10765     }
10766
10767   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
10768   if (bound_val == NULL)
10769     return 0;
10770
10771   *px = value_as_long (bound_val);
10772   if (pnew_k != NULL)
10773     *pnew_k = k;
10774   return 1;
10775 }
10776
10777 /* Value of variable named NAME in the current environment.  If
10778    no such variable found, then if ERR_MSG is null, returns 0, and
10779    otherwise causes an error with message ERR_MSG.  */
10780
10781 static struct value *
10782 get_var_value (char *name, char *err_msg)
10783 {
10784   struct ada_symbol_info *syms;
10785   int nsyms;
10786
10787   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
10788                                   &syms);
10789
10790   if (nsyms != 1)
10791     {
10792       if (err_msg == NULL)
10793         return 0;
10794       else
10795         error (("%s"), err_msg);
10796     }
10797
10798   return value_of_variable (syms[0].sym, syms[0].block);
10799 }
10800
10801 /* Value of integer variable named NAME in the current environment.  If
10802    no such variable found, returns 0, and sets *FLAG to 0.  If
10803    successful, sets *FLAG to 1.  */
10804
10805 LONGEST
10806 get_int_var_value (char *name, int *flag)
10807 {
10808   struct value *var_val = get_var_value (name, 0);
10809
10810   if (var_val == 0)
10811     {
10812       if (flag != NULL)
10813         *flag = 0;
10814       return 0;
10815     }
10816   else
10817     {
10818       if (flag != NULL)
10819         *flag = 1;
10820       return value_as_long (var_val);
10821     }
10822 }
10823
10824
10825 /* Return a range type whose base type is that of the range type named
10826    NAME in the current environment, and whose bounds are calculated
10827    from NAME according to the GNAT range encoding conventions.
10828    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
10829    corresponding range type from debug information; fall back to using it
10830    if symbol lookup fails.  If a new type must be created, allocate it
10831    like ORIG_TYPE was.  The bounds information, in general, is encoded
10832    in NAME, the base type given in the named range type.  */
10833
10834 static struct type *
10835 to_fixed_range_type (struct type *raw_type, struct value *dval)
10836 {
10837   const char *name;
10838   struct type *base_type;
10839   char *subtype_info;
10840
10841   gdb_assert (raw_type != NULL);
10842   gdb_assert (TYPE_NAME (raw_type) != NULL);
10843
10844   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
10845     base_type = TYPE_TARGET_TYPE (raw_type);
10846   else
10847     base_type = raw_type;
10848
10849   name = TYPE_NAME (raw_type);
10850   subtype_info = strstr (name, "___XD");
10851   if (subtype_info == NULL)
10852     {
10853       LONGEST L = ada_discrete_type_low_bound (raw_type);
10854       LONGEST U = ada_discrete_type_high_bound (raw_type);
10855
10856       if (L < INT_MIN || U > INT_MAX)
10857         return raw_type;
10858       else
10859         return create_range_type (alloc_type_copy (raw_type), raw_type,
10860                                   ada_discrete_type_low_bound (raw_type),
10861                                   ada_discrete_type_high_bound (raw_type));
10862     }
10863   else
10864     {
10865       static char *name_buf = NULL;
10866       static size_t name_len = 0;
10867       int prefix_len = subtype_info - name;
10868       LONGEST L, U;
10869       struct type *type;
10870       char *bounds_str;
10871       int n;
10872
10873       GROW_VECT (name_buf, name_len, prefix_len + 5);
10874       strncpy (name_buf, name, prefix_len);
10875       name_buf[prefix_len] = '\0';
10876
10877       subtype_info += 5;
10878       bounds_str = strchr (subtype_info, '_');
10879       n = 1;
10880
10881       if (*subtype_info == 'L')
10882         {
10883           if (!ada_scan_number (bounds_str, n, &L, &n)
10884               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
10885             return raw_type;
10886           if (bounds_str[n] == '_')
10887             n += 2;
10888           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
10889             n += 1;
10890           subtype_info += 1;
10891         }
10892       else
10893         {
10894           int ok;
10895
10896           strcpy (name_buf + prefix_len, "___L");
10897           L = get_int_var_value (name_buf, &ok);
10898           if (!ok)
10899             {
10900               lim_warning (_("Unknown lower bound, using 1."));
10901               L = 1;
10902             }
10903         }
10904
10905       if (*subtype_info == 'U')
10906         {
10907           if (!ada_scan_number (bounds_str, n, &U, &n)
10908               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
10909             return raw_type;
10910         }
10911       else
10912         {
10913           int ok;
10914
10915           strcpy (name_buf + prefix_len, "___U");
10916           U = get_int_var_value (name_buf, &ok);
10917           if (!ok)
10918             {
10919               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
10920               U = L;
10921             }
10922         }
10923
10924       type = create_range_type (alloc_type_copy (raw_type), base_type, L, U);
10925       TYPE_NAME (type) = name;
10926       return type;
10927     }
10928 }
10929
10930 /* True iff NAME is the name of a range type.  */
10931
10932 int
10933 ada_is_range_type_name (const char *name)
10934 {
10935   return (name != NULL && strstr (name, "___XD"));
10936 }
10937 \f
10938
10939                                 /* Modular types */
10940
10941 /* True iff TYPE is an Ada modular type.  */
10942
10943 int
10944 ada_is_modular_type (struct type *type)
10945 {
10946   struct type *subranged_type = get_base_type (type);
10947
10948   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
10949           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
10950           && TYPE_UNSIGNED (subranged_type));
10951 }
10952
10953 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
10954
10955 ULONGEST
10956 ada_modulus (struct type *type)
10957 {
10958   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
10959 }
10960 \f
10961
10962 /* Ada exception catchpoint support:
10963    ---------------------------------
10964
10965    We support 3 kinds of exception catchpoints:
10966      . catchpoints on Ada exceptions
10967      . catchpoints on unhandled Ada exceptions
10968      . catchpoints on failed assertions
10969
10970    Exceptions raised during failed assertions, or unhandled exceptions
10971    could perfectly be caught with the general catchpoint on Ada exceptions.
10972    However, we can easily differentiate these two special cases, and having
10973    the option to distinguish these two cases from the rest can be useful
10974    to zero-in on certain situations.
10975
10976    Exception catchpoints are a specialized form of breakpoint,
10977    since they rely on inserting breakpoints inside known routines
10978    of the GNAT runtime.  The implementation therefore uses a standard
10979    breakpoint structure of the BP_BREAKPOINT type, but with its own set
10980    of breakpoint_ops.
10981
10982    Support in the runtime for exception catchpoints have been changed
10983    a few times already, and these changes affect the implementation
10984    of these catchpoints.  In order to be able to support several
10985    variants of the runtime, we use a sniffer that will determine
10986    the runtime variant used by the program being debugged.  */
10987
10988 /* Ada's standard exceptions.  */
10989
10990 static char *standard_exc[] = {
10991   "constraint_error",
10992   "program_error",
10993   "storage_error",
10994   "tasking_error"
10995 };
10996
10997 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
10998
10999 /* A structure that describes how to support exception catchpoints
11000    for a given executable.  */
11001
11002 struct exception_support_info
11003 {
11004    /* The name of the symbol to break on in order to insert
11005       a catchpoint on exceptions.  */
11006    const char *catch_exception_sym;
11007
11008    /* The name of the symbol to break on in order to insert
11009       a catchpoint on unhandled exceptions.  */
11010    const char *catch_exception_unhandled_sym;
11011
11012    /* The name of the symbol to break on in order to insert
11013       a catchpoint on failed assertions.  */
11014    const char *catch_assert_sym;
11015
11016    /* Assuming that the inferior just triggered an unhandled exception
11017       catchpoint, this function is responsible for returning the address
11018       in inferior memory where the name of that exception is stored.
11019       Return zero if the address could not be computed.  */
11020    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11021 };
11022
11023 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11024 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11025
11026 /* The following exception support info structure describes how to
11027    implement exception catchpoints with the latest version of the
11028    Ada runtime (as of 2007-03-06).  */
11029
11030 static const struct exception_support_info default_exception_support_info =
11031 {
11032   "__gnat_debug_raise_exception", /* catch_exception_sym */
11033   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11034   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11035   ada_unhandled_exception_name_addr
11036 };
11037
11038 /* The following exception support info structure describes how to
11039    implement exception catchpoints with a slightly older version
11040    of the Ada runtime.  */
11041
11042 static const struct exception_support_info exception_support_info_fallback =
11043 {
11044   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11045   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11046   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11047   ada_unhandled_exception_name_addr_from_raise
11048 };
11049
11050 /* Return nonzero if we can detect the exception support routines
11051    described in EINFO.
11052
11053    This function errors out if an abnormal situation is detected
11054    (for instance, if we find the exception support routines, but
11055    that support is found to be incomplete).  */
11056
11057 static int
11058 ada_has_this_exception_support (const struct exception_support_info *einfo)
11059 {
11060   struct symbol *sym;
11061
11062   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11063      that should be compiled with debugging information.  As a result, we
11064      expect to find that symbol in the symtabs.  */
11065
11066   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11067   if (sym == NULL)
11068     {
11069       /* Perhaps we did not find our symbol because the Ada runtime was
11070          compiled without debugging info, or simply stripped of it.
11071          It happens on some GNU/Linux distributions for instance, where
11072          users have to install a separate debug package in order to get
11073          the runtime's debugging info.  In that situation, let the user
11074          know why we cannot insert an Ada exception catchpoint.
11075
11076          Note: Just for the purpose of inserting our Ada exception
11077          catchpoint, we could rely purely on the associated minimal symbol.
11078          But we would be operating in degraded mode anyway, since we are
11079          still lacking the debugging info needed later on to extract
11080          the name of the exception being raised (this name is printed in
11081          the catchpoint message, and is also used when trying to catch
11082          a specific exception).  We do not handle this case for now.  */
11083       struct minimal_symbol *msym
11084         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11085
11086       if (msym && MSYMBOL_TYPE (msym) != mst_solib_trampoline)
11087         error (_("Your Ada runtime appears to be missing some debugging "
11088                  "information.\nCannot insert Ada exception catchpoint "
11089                  "in this configuration."));
11090
11091       return 0;
11092     }
11093
11094   /* Make sure that the symbol we found corresponds to a function.  */
11095
11096   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11097     error (_("Symbol \"%s\" is not a function (class = %d)"),
11098            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11099
11100   return 1;
11101 }
11102
11103 /* Inspect the Ada runtime and determine which exception info structure
11104    should be used to provide support for exception catchpoints.
11105
11106    This function will always set the per-inferior exception_info,
11107    or raise an error.  */
11108
11109 static void
11110 ada_exception_support_info_sniffer (void)
11111 {
11112   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11113
11114   /* If the exception info is already known, then no need to recompute it.  */
11115   if (data->exception_info != NULL)
11116     return;
11117
11118   /* Check the latest (default) exception support info.  */
11119   if (ada_has_this_exception_support (&default_exception_support_info))
11120     {
11121       data->exception_info = &default_exception_support_info;
11122       return;
11123     }
11124
11125   /* Try our fallback exception suport info.  */
11126   if (ada_has_this_exception_support (&exception_support_info_fallback))
11127     {
11128       data->exception_info = &exception_support_info_fallback;
11129       return;
11130     }
11131
11132   /* Sometimes, it is normal for us to not be able to find the routine
11133      we are looking for.  This happens when the program is linked with
11134      the shared version of the GNAT runtime, and the program has not been
11135      started yet.  Inform the user of these two possible causes if
11136      applicable.  */
11137
11138   if (ada_update_initial_language (language_unknown) != language_ada)
11139     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11140
11141   /* If the symbol does not exist, then check that the program is
11142      already started, to make sure that shared libraries have been
11143      loaded.  If it is not started, this may mean that the symbol is
11144      in a shared library.  */
11145
11146   if (ptid_get_pid (inferior_ptid) == 0)
11147     error (_("Unable to insert catchpoint. Try to start the program first."));
11148
11149   /* At this point, we know that we are debugging an Ada program and
11150      that the inferior has been started, but we still are not able to
11151      find the run-time symbols.  That can mean that we are in
11152      configurable run time mode, or that a-except as been optimized
11153      out by the linker...  In any case, at this point it is not worth
11154      supporting this feature.  */
11155
11156   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11157 }
11158
11159 /* True iff FRAME is very likely to be that of a function that is
11160    part of the runtime system.  This is all very heuristic, but is
11161    intended to be used as advice as to what frames are uninteresting
11162    to most users.  */
11163
11164 static int
11165 is_known_support_routine (struct frame_info *frame)
11166 {
11167   struct symtab_and_line sal;
11168   char *func_name;
11169   enum language func_lang;
11170   int i;
11171   const char *fullname;
11172
11173   /* If this code does not have any debugging information (no symtab),
11174      This cannot be any user code.  */
11175
11176   find_frame_sal (frame, &sal);
11177   if (sal.symtab == NULL)
11178     return 1;
11179
11180   /* If there is a symtab, but the associated source file cannot be
11181      located, then assume this is not user code:  Selecting a frame
11182      for which we cannot display the code would not be very helpful
11183      for the user.  This should also take care of case such as VxWorks
11184      where the kernel has some debugging info provided for a few units.  */
11185
11186   fullname = symtab_to_fullname (sal.symtab);
11187   if (access (fullname, R_OK) != 0)
11188     return 1;
11189
11190   /* Check the unit filename againt the Ada runtime file naming.
11191      We also check the name of the objfile against the name of some
11192      known system libraries that sometimes come with debugging info
11193      too.  */
11194
11195   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11196     {
11197       re_comp (known_runtime_file_name_patterns[i]);
11198       if (re_exec (lbasename (sal.symtab->filename)))
11199         return 1;
11200       if (sal.symtab->objfile != NULL
11201           && re_exec (objfile_name (sal.symtab->objfile)))
11202         return 1;
11203     }
11204
11205   /* Check whether the function is a GNAT-generated entity.  */
11206
11207   find_frame_funname (frame, &func_name, &func_lang, NULL);
11208   if (func_name == NULL)
11209     return 1;
11210
11211   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11212     {
11213       re_comp (known_auxiliary_function_name_patterns[i]);
11214       if (re_exec (func_name))
11215         {
11216           xfree (func_name);
11217           return 1;
11218         }
11219     }
11220
11221   xfree (func_name);
11222   return 0;
11223 }
11224
11225 /* Find the first frame that contains debugging information and that is not
11226    part of the Ada run-time, starting from FI and moving upward.  */
11227
11228 void
11229 ada_find_printable_frame (struct frame_info *fi)
11230 {
11231   for (; fi != NULL; fi = get_prev_frame (fi))
11232     {
11233       if (!is_known_support_routine (fi))
11234         {
11235           select_frame (fi);
11236           break;
11237         }
11238     }
11239
11240 }
11241
11242 /* Assuming that the inferior just triggered an unhandled exception
11243    catchpoint, return the address in inferior memory where the name
11244    of the exception is stored.
11245    
11246    Return zero if the address could not be computed.  */
11247
11248 static CORE_ADDR
11249 ada_unhandled_exception_name_addr (void)
11250 {
11251   return parse_and_eval_address ("e.full_name");
11252 }
11253
11254 /* Same as ada_unhandled_exception_name_addr, except that this function
11255    should be used when the inferior uses an older version of the runtime,
11256    where the exception name needs to be extracted from a specific frame
11257    several frames up in the callstack.  */
11258
11259 static CORE_ADDR
11260 ada_unhandled_exception_name_addr_from_raise (void)
11261 {
11262   int frame_level;
11263   struct frame_info *fi;
11264   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11265   struct cleanup *old_chain;
11266
11267   /* To determine the name of this exception, we need to select
11268      the frame corresponding to RAISE_SYM_NAME.  This frame is
11269      at least 3 levels up, so we simply skip the first 3 frames
11270      without checking the name of their associated function.  */
11271   fi = get_current_frame ();
11272   for (frame_level = 0; frame_level < 3; frame_level += 1)
11273     if (fi != NULL)
11274       fi = get_prev_frame (fi); 
11275
11276   old_chain = make_cleanup (null_cleanup, NULL);
11277   while (fi != NULL)
11278     {
11279       char *func_name;
11280       enum language func_lang;
11281
11282       find_frame_funname (fi, &func_name, &func_lang, NULL);
11283       if (func_name != NULL)
11284         {
11285           make_cleanup (xfree, func_name);
11286
11287           if (strcmp (func_name,
11288                       data->exception_info->catch_exception_sym) == 0)
11289             break; /* We found the frame we were looking for...  */
11290           fi = get_prev_frame (fi);
11291         }
11292     }
11293   do_cleanups (old_chain);
11294
11295   if (fi == NULL)
11296     return 0;
11297
11298   select_frame (fi);
11299   return parse_and_eval_address ("id.full_name");
11300 }
11301
11302 /* Assuming the inferior just triggered an Ada exception catchpoint
11303    (of any type), return the address in inferior memory where the name
11304    of the exception is stored, if applicable.
11305
11306    Return zero if the address could not be computed, or if not relevant.  */
11307
11308 static CORE_ADDR
11309 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11310                            struct breakpoint *b)
11311 {
11312   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11313
11314   switch (ex)
11315     {
11316       case ada_catch_exception:
11317         return (parse_and_eval_address ("e.full_name"));
11318         break;
11319
11320       case ada_catch_exception_unhandled:
11321         return data->exception_info->unhandled_exception_name_addr ();
11322         break;
11323       
11324       case ada_catch_assert:
11325         return 0;  /* Exception name is not relevant in this case.  */
11326         break;
11327
11328       default:
11329         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11330         break;
11331     }
11332
11333   return 0; /* Should never be reached.  */
11334 }
11335
11336 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11337    any error that ada_exception_name_addr_1 might cause to be thrown.
11338    When an error is intercepted, a warning with the error message is printed,
11339    and zero is returned.  */
11340
11341 static CORE_ADDR
11342 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11343                          struct breakpoint *b)
11344 {
11345   volatile struct gdb_exception e;
11346   CORE_ADDR result = 0;
11347
11348   TRY_CATCH (e, RETURN_MASK_ERROR)
11349     {
11350       result = ada_exception_name_addr_1 (ex, b);
11351     }
11352
11353   if (e.reason < 0)
11354     {
11355       warning (_("failed to get exception name: %s"), e.message);
11356       return 0;
11357     }
11358
11359   return result;
11360 }
11361
11362 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11363
11364 /* Ada catchpoints.
11365
11366    In the case of catchpoints on Ada exceptions, the catchpoint will
11367    stop the target on every exception the program throws.  When a user
11368    specifies the name of a specific exception, we translate this
11369    request into a condition expression (in text form), and then parse
11370    it into an expression stored in each of the catchpoint's locations.
11371    We then use this condition to check whether the exception that was
11372    raised is the one the user is interested in.  If not, then the
11373    target is resumed again.  We store the name of the requested
11374    exception, in order to be able to re-set the condition expression
11375    when symbols change.  */
11376
11377 /* An instance of this type is used to represent an Ada catchpoint
11378    breakpoint location.  It includes a "struct bp_location" as a kind
11379    of base class; users downcast to "struct bp_location *" when
11380    needed.  */
11381
11382 struct ada_catchpoint_location
11383 {
11384   /* The base class.  */
11385   struct bp_location base;
11386
11387   /* The condition that checks whether the exception that was raised
11388      is the specific exception the user specified on catchpoint
11389      creation.  */
11390   struct expression *excep_cond_expr;
11391 };
11392
11393 /* Implement the DTOR method in the bp_location_ops structure for all
11394    Ada exception catchpoint kinds.  */
11395
11396 static void
11397 ada_catchpoint_location_dtor (struct bp_location *bl)
11398 {
11399   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11400
11401   xfree (al->excep_cond_expr);
11402 }
11403
11404 /* The vtable to be used in Ada catchpoint locations.  */
11405
11406 static const struct bp_location_ops ada_catchpoint_location_ops =
11407 {
11408   ada_catchpoint_location_dtor
11409 };
11410
11411 /* An instance of this type is used to represent an Ada catchpoint.
11412    It includes a "struct breakpoint" as a kind of base class; users
11413    downcast to "struct breakpoint *" when needed.  */
11414
11415 struct ada_catchpoint
11416 {
11417   /* The base class.  */
11418   struct breakpoint base;
11419
11420   /* The name of the specific exception the user specified.  */
11421   char *excep_string;
11422 };
11423
11424 /* Parse the exception condition string in the context of each of the
11425    catchpoint's locations, and store them for later evaluation.  */
11426
11427 static void
11428 create_excep_cond_exprs (struct ada_catchpoint *c)
11429 {
11430   struct cleanup *old_chain;
11431   struct bp_location *bl;
11432   char *cond_string;
11433
11434   /* Nothing to do if there's no specific exception to catch.  */
11435   if (c->excep_string == NULL)
11436     return;
11437
11438   /* Same if there are no locations... */
11439   if (c->base.loc == NULL)
11440     return;
11441
11442   /* Compute the condition expression in text form, from the specific
11443      expection we want to catch.  */
11444   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11445   old_chain = make_cleanup (xfree, cond_string);
11446
11447   /* Iterate over all the catchpoint's locations, and parse an
11448      expression for each.  */
11449   for (bl = c->base.loc; bl != NULL; bl = bl->next)
11450     {
11451       struct ada_catchpoint_location *ada_loc
11452         = (struct ada_catchpoint_location *) bl;
11453       struct expression *exp = NULL;
11454
11455       if (!bl->shlib_disabled)
11456         {
11457           volatile struct gdb_exception e;
11458           const char *s;
11459
11460           s = cond_string;
11461           TRY_CATCH (e, RETURN_MASK_ERROR)
11462             {
11463               exp = parse_exp_1 (&s, bl->address,
11464                                  block_for_pc (bl->address), 0);
11465             }
11466           if (e.reason < 0)
11467             {
11468               warning (_("failed to reevaluate internal exception condition "
11469                          "for catchpoint %d: %s"),
11470                        c->base.number, e.message);
11471               /* There is a bug in GCC on sparc-solaris when building with
11472                  optimization which causes EXP to change unexpectedly
11473                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11474                  The problem should be fixed starting with GCC 4.9.
11475                  In the meantime, work around it by forcing EXP back
11476                  to NULL.  */
11477               exp = NULL;
11478             }
11479         }
11480
11481       ada_loc->excep_cond_expr = exp;
11482     }
11483
11484   do_cleanups (old_chain);
11485 }
11486
11487 /* Implement the DTOR method in the breakpoint_ops structure for all
11488    exception catchpoint kinds.  */
11489
11490 static void
11491 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11492 {
11493   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11494
11495   xfree (c->excep_string);
11496
11497   bkpt_breakpoint_ops.dtor (b);
11498 }
11499
11500 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11501    structure for all exception catchpoint kinds.  */
11502
11503 static struct bp_location *
11504 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
11505                              struct breakpoint *self)
11506 {
11507   struct ada_catchpoint_location *loc;
11508
11509   loc = XNEW (struct ada_catchpoint_location);
11510   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11511   loc->excep_cond_expr = NULL;
11512   return &loc->base;
11513 }
11514
11515 /* Implement the RE_SET method in the breakpoint_ops structure for all
11516    exception catchpoint kinds.  */
11517
11518 static void
11519 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11520 {
11521   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11522
11523   /* Call the base class's method.  This updates the catchpoint's
11524      locations.  */
11525   bkpt_breakpoint_ops.re_set (b);
11526
11527   /* Reparse the exception conditional expressions.  One for each
11528      location.  */
11529   create_excep_cond_exprs (c);
11530 }
11531
11532 /* Returns true if we should stop for this breakpoint hit.  If the
11533    user specified a specific exception, we only want to cause a stop
11534    if the program thrown that exception.  */
11535
11536 static int
11537 should_stop_exception (const struct bp_location *bl)
11538 {
11539   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11540   const struct ada_catchpoint_location *ada_loc
11541     = (const struct ada_catchpoint_location *) bl;
11542   volatile struct gdb_exception ex;
11543   int stop;
11544
11545   /* With no specific exception, should always stop.  */
11546   if (c->excep_string == NULL)
11547     return 1;
11548
11549   if (ada_loc->excep_cond_expr == NULL)
11550     {
11551       /* We will have a NULL expression if back when we were creating
11552          the expressions, this location's had failed to parse.  */
11553       return 1;
11554     }
11555
11556   stop = 1;
11557   TRY_CATCH (ex, RETURN_MASK_ALL)
11558     {
11559       struct value *mark;
11560
11561       mark = value_mark ();
11562       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11563       value_free_to_mark (mark);
11564     }
11565   if (ex.reason < 0)
11566     exception_fprintf (gdb_stderr, ex,
11567                        _("Error in testing exception condition:\n"));
11568   return stop;
11569 }
11570
11571 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
11572    for all exception catchpoint kinds.  */
11573
11574 static void
11575 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11576 {
11577   bs->stop = should_stop_exception (bs->bp_location_at);
11578 }
11579
11580 /* Implement the PRINT_IT method in the breakpoint_ops structure
11581    for all exception catchpoint kinds.  */
11582
11583 static enum print_stop_action
11584 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11585 {
11586   struct ui_out *uiout = current_uiout;
11587   struct breakpoint *b = bs->breakpoint_at;
11588
11589   annotate_catchpoint (b->number);
11590
11591   if (ui_out_is_mi_like_p (uiout))
11592     {
11593       ui_out_field_string (uiout, "reason",
11594                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11595       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11596     }
11597
11598   ui_out_text (uiout,
11599                b->disposition == disp_del ? "\nTemporary catchpoint "
11600                                           : "\nCatchpoint ");
11601   ui_out_field_int (uiout, "bkptno", b->number);
11602   ui_out_text (uiout, ", ");
11603
11604   switch (ex)
11605     {
11606       case ada_catch_exception:
11607       case ada_catch_exception_unhandled:
11608         {
11609           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11610           char exception_name[256];
11611
11612           if (addr != 0)
11613             {
11614               read_memory (addr, (gdb_byte *) exception_name,
11615                            sizeof (exception_name) - 1);
11616               exception_name [sizeof (exception_name) - 1] = '\0';
11617             }
11618           else
11619             {
11620               /* For some reason, we were unable to read the exception
11621                  name.  This could happen if the Runtime was compiled
11622                  without debugging info, for instance.  In that case,
11623                  just replace the exception name by the generic string
11624                  "exception" - it will read as "an exception" in the
11625                  notification we are about to print.  */
11626               memcpy (exception_name, "exception", sizeof ("exception"));
11627             }
11628           /* In the case of unhandled exception breakpoints, we print
11629              the exception name as "unhandled EXCEPTION_NAME", to make
11630              it clearer to the user which kind of catchpoint just got
11631              hit.  We used ui_out_text to make sure that this extra
11632              info does not pollute the exception name in the MI case.  */
11633           if (ex == ada_catch_exception_unhandled)
11634             ui_out_text (uiout, "unhandled ");
11635           ui_out_field_string (uiout, "exception-name", exception_name);
11636         }
11637         break;
11638       case ada_catch_assert:
11639         /* In this case, the name of the exception is not really
11640            important.  Just print "failed assertion" to make it clearer
11641            that his program just hit an assertion-failure catchpoint.
11642            We used ui_out_text because this info does not belong in
11643            the MI output.  */
11644         ui_out_text (uiout, "failed assertion");
11645         break;
11646     }
11647   ui_out_text (uiout, " at ");
11648   ada_find_printable_frame (get_current_frame ());
11649
11650   return PRINT_SRC_AND_LOC;
11651 }
11652
11653 /* Implement the PRINT_ONE method in the breakpoint_ops structure
11654    for all exception catchpoint kinds.  */
11655
11656 static void
11657 print_one_exception (enum ada_exception_catchpoint_kind ex,
11658                      struct breakpoint *b, struct bp_location **last_loc)
11659
11660   struct ui_out *uiout = current_uiout;
11661   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11662   struct value_print_options opts;
11663
11664   get_user_print_options (&opts);
11665   if (opts.addressprint)
11666     {
11667       annotate_field (4);
11668       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
11669     }
11670
11671   annotate_field (5);
11672   *last_loc = b->loc;
11673   switch (ex)
11674     {
11675       case ada_catch_exception:
11676         if (c->excep_string != NULL)
11677           {
11678             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11679
11680             ui_out_field_string (uiout, "what", msg);
11681             xfree (msg);
11682           }
11683         else
11684           ui_out_field_string (uiout, "what", "all Ada exceptions");
11685         
11686         break;
11687
11688       case ada_catch_exception_unhandled:
11689         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
11690         break;
11691       
11692       case ada_catch_assert:
11693         ui_out_field_string (uiout, "what", "failed Ada assertions");
11694         break;
11695
11696       default:
11697         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11698         break;
11699     }
11700 }
11701
11702 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
11703    for all exception catchpoint kinds.  */
11704
11705 static void
11706 print_mention_exception (enum ada_exception_catchpoint_kind ex,
11707                          struct breakpoint *b)
11708 {
11709   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11710   struct ui_out *uiout = current_uiout;
11711
11712   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
11713                                                  : _("Catchpoint "));
11714   ui_out_field_int (uiout, "bkptno", b->number);
11715   ui_out_text (uiout, ": ");
11716
11717   switch (ex)
11718     {
11719       case ada_catch_exception:
11720         if (c->excep_string != NULL)
11721           {
11722             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11723             struct cleanup *old_chain = make_cleanup (xfree, info);
11724
11725             ui_out_text (uiout, info);
11726             do_cleanups (old_chain);
11727           }
11728         else
11729           ui_out_text (uiout, _("all Ada exceptions"));
11730         break;
11731
11732       case ada_catch_exception_unhandled:
11733         ui_out_text (uiout, _("unhandled Ada exceptions"));
11734         break;
11735       
11736       case ada_catch_assert:
11737         ui_out_text (uiout, _("failed Ada assertions"));
11738         break;
11739
11740       default:
11741         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11742         break;
11743     }
11744 }
11745
11746 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
11747    for all exception catchpoint kinds.  */
11748
11749 static void
11750 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
11751                           struct breakpoint *b, struct ui_file *fp)
11752 {
11753   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11754
11755   switch (ex)
11756     {
11757       case ada_catch_exception:
11758         fprintf_filtered (fp, "catch exception");
11759         if (c->excep_string != NULL)
11760           fprintf_filtered (fp, " %s", c->excep_string);
11761         break;
11762
11763       case ada_catch_exception_unhandled:
11764         fprintf_filtered (fp, "catch exception unhandled");
11765         break;
11766
11767       case ada_catch_assert:
11768         fprintf_filtered (fp, "catch assert");
11769         break;
11770
11771       default:
11772         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11773     }
11774   print_recreate_thread (b, fp);
11775 }
11776
11777 /* Virtual table for "catch exception" breakpoints.  */
11778
11779 static void
11780 dtor_catch_exception (struct breakpoint *b)
11781 {
11782   dtor_exception (ada_catch_exception, b);
11783 }
11784
11785 static struct bp_location *
11786 allocate_location_catch_exception (struct breakpoint *self)
11787 {
11788   return allocate_location_exception (ada_catch_exception, self);
11789 }
11790
11791 static void
11792 re_set_catch_exception (struct breakpoint *b)
11793 {
11794   re_set_exception (ada_catch_exception, b);
11795 }
11796
11797 static void
11798 check_status_catch_exception (bpstat bs)
11799 {
11800   check_status_exception (ada_catch_exception, bs);
11801 }
11802
11803 static enum print_stop_action
11804 print_it_catch_exception (bpstat bs)
11805 {
11806   return print_it_exception (ada_catch_exception, bs);
11807 }
11808
11809 static void
11810 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
11811 {
11812   print_one_exception (ada_catch_exception, b, last_loc);
11813 }
11814
11815 static void
11816 print_mention_catch_exception (struct breakpoint *b)
11817 {
11818   print_mention_exception (ada_catch_exception, b);
11819 }
11820
11821 static void
11822 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
11823 {
11824   print_recreate_exception (ada_catch_exception, b, fp);
11825 }
11826
11827 static struct breakpoint_ops catch_exception_breakpoint_ops;
11828
11829 /* Virtual table for "catch exception unhandled" breakpoints.  */
11830
11831 static void
11832 dtor_catch_exception_unhandled (struct breakpoint *b)
11833 {
11834   dtor_exception (ada_catch_exception_unhandled, b);
11835 }
11836
11837 static struct bp_location *
11838 allocate_location_catch_exception_unhandled (struct breakpoint *self)
11839 {
11840   return allocate_location_exception (ada_catch_exception_unhandled, self);
11841 }
11842
11843 static void
11844 re_set_catch_exception_unhandled (struct breakpoint *b)
11845 {
11846   re_set_exception (ada_catch_exception_unhandled, b);
11847 }
11848
11849 static void
11850 check_status_catch_exception_unhandled (bpstat bs)
11851 {
11852   check_status_exception (ada_catch_exception_unhandled, bs);
11853 }
11854
11855 static enum print_stop_action
11856 print_it_catch_exception_unhandled (bpstat bs)
11857 {
11858   return print_it_exception (ada_catch_exception_unhandled, bs);
11859 }
11860
11861 static void
11862 print_one_catch_exception_unhandled (struct breakpoint *b,
11863                                      struct bp_location **last_loc)
11864 {
11865   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
11866 }
11867
11868 static void
11869 print_mention_catch_exception_unhandled (struct breakpoint *b)
11870 {
11871   print_mention_exception (ada_catch_exception_unhandled, b);
11872 }
11873
11874 static void
11875 print_recreate_catch_exception_unhandled (struct breakpoint *b,
11876                                           struct ui_file *fp)
11877 {
11878   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
11879 }
11880
11881 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
11882
11883 /* Virtual table for "catch assert" breakpoints.  */
11884
11885 static void
11886 dtor_catch_assert (struct breakpoint *b)
11887 {
11888   dtor_exception (ada_catch_assert, b);
11889 }
11890
11891 static struct bp_location *
11892 allocate_location_catch_assert (struct breakpoint *self)
11893 {
11894   return allocate_location_exception (ada_catch_assert, self);
11895 }
11896
11897 static void
11898 re_set_catch_assert (struct breakpoint *b)
11899 {
11900   re_set_exception (ada_catch_assert, b);
11901 }
11902
11903 static void
11904 check_status_catch_assert (bpstat bs)
11905 {
11906   check_status_exception (ada_catch_assert, bs);
11907 }
11908
11909 static enum print_stop_action
11910 print_it_catch_assert (bpstat bs)
11911 {
11912   return print_it_exception (ada_catch_assert, bs);
11913 }
11914
11915 static void
11916 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
11917 {
11918   print_one_exception (ada_catch_assert, b, last_loc);
11919 }
11920
11921 static void
11922 print_mention_catch_assert (struct breakpoint *b)
11923 {
11924   print_mention_exception (ada_catch_assert, b);
11925 }
11926
11927 static void
11928 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
11929 {
11930   print_recreate_exception (ada_catch_assert, b, fp);
11931 }
11932
11933 static struct breakpoint_ops catch_assert_breakpoint_ops;
11934
11935 /* Return a newly allocated copy of the first space-separated token
11936    in ARGSP, and then adjust ARGSP to point immediately after that
11937    token.
11938
11939    Return NULL if ARGPS does not contain any more tokens.  */
11940
11941 static char *
11942 ada_get_next_arg (char **argsp)
11943 {
11944   char *args = *argsp;
11945   char *end;
11946   char *result;
11947
11948   args = skip_spaces (args);
11949   if (args[0] == '\0')
11950     return NULL; /* No more arguments.  */
11951   
11952   /* Find the end of the current argument.  */
11953
11954   end = skip_to_space (args);
11955
11956   /* Adjust ARGSP to point to the start of the next argument.  */
11957
11958   *argsp = end;
11959
11960   /* Make a copy of the current argument and return it.  */
11961
11962   result = xmalloc (end - args + 1);
11963   strncpy (result, args, end - args);
11964   result[end - args] = '\0';
11965   
11966   return result;
11967 }
11968
11969 /* Split the arguments specified in a "catch exception" command.  
11970    Set EX to the appropriate catchpoint type.
11971    Set EXCEP_STRING to the name of the specific exception if
11972    specified by the user.
11973    If a condition is found at the end of the arguments, the condition
11974    expression is stored in COND_STRING (memory must be deallocated
11975    after use).  Otherwise COND_STRING is set to NULL.  */
11976
11977 static void
11978 catch_ada_exception_command_split (char *args,
11979                                    enum ada_exception_catchpoint_kind *ex,
11980                                    char **excep_string,
11981                                    char **cond_string)
11982 {
11983   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
11984   char *exception_name;
11985   char *cond = NULL;
11986
11987   exception_name = ada_get_next_arg (&args);
11988   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
11989     {
11990       /* This is not an exception name; this is the start of a condition
11991          expression for a catchpoint on all exceptions.  So, "un-get"
11992          this token, and set exception_name to NULL.  */
11993       xfree (exception_name);
11994       exception_name = NULL;
11995       args -= 2;
11996     }
11997   make_cleanup (xfree, exception_name);
11998
11999   /* Check to see if we have a condition.  */
12000
12001   args = skip_spaces (args);
12002   if (strncmp (args, "if", 2) == 0
12003       && (isspace (args[2]) || args[2] == '\0'))
12004     {
12005       args += 2;
12006       args = skip_spaces (args);
12007
12008       if (args[0] == '\0')
12009         error (_("Condition missing after `if' keyword"));
12010       cond = xstrdup (args);
12011       make_cleanup (xfree, cond);
12012
12013       args += strlen (args);
12014     }
12015
12016   /* Check that we do not have any more arguments.  Anything else
12017      is unexpected.  */
12018
12019   if (args[0] != '\0')
12020     error (_("Junk at end of expression"));
12021
12022   discard_cleanups (old_chain);
12023
12024   if (exception_name == NULL)
12025     {
12026       /* Catch all exceptions.  */
12027       *ex = ada_catch_exception;
12028       *excep_string = NULL;
12029     }
12030   else if (strcmp (exception_name, "unhandled") == 0)
12031     {
12032       /* Catch unhandled exceptions.  */
12033       *ex = ada_catch_exception_unhandled;
12034       *excep_string = NULL;
12035     }
12036   else
12037     {
12038       /* Catch a specific exception.  */
12039       *ex = ada_catch_exception;
12040       *excep_string = exception_name;
12041     }
12042   *cond_string = cond;
12043 }
12044
12045 /* Return the name of the symbol on which we should break in order to
12046    implement a catchpoint of the EX kind.  */
12047
12048 static const char *
12049 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12050 {
12051   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12052
12053   gdb_assert (data->exception_info != NULL);
12054
12055   switch (ex)
12056     {
12057       case ada_catch_exception:
12058         return (data->exception_info->catch_exception_sym);
12059         break;
12060       case ada_catch_exception_unhandled:
12061         return (data->exception_info->catch_exception_unhandled_sym);
12062         break;
12063       case ada_catch_assert:
12064         return (data->exception_info->catch_assert_sym);
12065         break;
12066       default:
12067         internal_error (__FILE__, __LINE__,
12068                         _("unexpected catchpoint kind (%d)"), ex);
12069     }
12070 }
12071
12072 /* Return the breakpoint ops "virtual table" used for catchpoints
12073    of the EX kind.  */
12074
12075 static const struct breakpoint_ops *
12076 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12077 {
12078   switch (ex)
12079     {
12080       case ada_catch_exception:
12081         return (&catch_exception_breakpoint_ops);
12082         break;
12083       case ada_catch_exception_unhandled:
12084         return (&catch_exception_unhandled_breakpoint_ops);
12085         break;
12086       case ada_catch_assert:
12087         return (&catch_assert_breakpoint_ops);
12088         break;
12089       default:
12090         internal_error (__FILE__, __LINE__,
12091                         _("unexpected catchpoint kind (%d)"), ex);
12092     }
12093 }
12094
12095 /* Return the condition that will be used to match the current exception
12096    being raised with the exception that the user wants to catch.  This
12097    assumes that this condition is used when the inferior just triggered
12098    an exception catchpoint.
12099    
12100    The string returned is a newly allocated string that needs to be
12101    deallocated later.  */
12102
12103 static char *
12104 ada_exception_catchpoint_cond_string (const char *excep_string)
12105 {
12106   int i;
12107
12108   /* The standard exceptions are a special case.  They are defined in
12109      runtime units that have been compiled without debugging info; if
12110      EXCEP_STRING is the not-fully-qualified name of a standard
12111      exception (e.g. "constraint_error") then, during the evaluation
12112      of the condition expression, the symbol lookup on this name would
12113      *not* return this standard exception.  The catchpoint condition
12114      may then be set only on user-defined exceptions which have the
12115      same not-fully-qualified name (e.g. my_package.constraint_error).
12116
12117      To avoid this unexcepted behavior, these standard exceptions are
12118      systematically prefixed by "standard".  This means that "catch
12119      exception constraint_error" is rewritten into "catch exception
12120      standard.constraint_error".
12121
12122      If an exception named contraint_error is defined in another package of
12123      the inferior program, then the only way to specify this exception as a
12124      breakpoint condition is to use its fully-qualified named:
12125      e.g. my_package.constraint_error.  */
12126
12127   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12128     {
12129       if (strcmp (standard_exc [i], excep_string) == 0)
12130         {
12131           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12132                              excep_string);
12133         }
12134     }
12135   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12136 }
12137
12138 /* Return the symtab_and_line that should be used to insert an exception
12139    catchpoint of the TYPE kind.
12140
12141    EXCEP_STRING should contain the name of a specific exception that
12142    the catchpoint should catch, or NULL otherwise.
12143
12144    ADDR_STRING returns the name of the function where the real
12145    breakpoint that implements the catchpoints is set, depending on the
12146    type of catchpoint we need to create.  */
12147
12148 static struct symtab_and_line
12149 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12150                    char **addr_string, const struct breakpoint_ops **ops)
12151 {
12152   const char *sym_name;
12153   struct symbol *sym;
12154
12155   /* First, find out which exception support info to use.  */
12156   ada_exception_support_info_sniffer ();
12157
12158   /* Then lookup the function on which we will break in order to catch
12159      the Ada exceptions requested by the user.  */
12160   sym_name = ada_exception_sym_name (ex);
12161   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12162
12163   /* We can assume that SYM is not NULL at this stage.  If the symbol
12164      did not exist, ada_exception_support_info_sniffer would have
12165      raised an exception.
12166
12167      Also, ada_exception_support_info_sniffer should have already
12168      verified that SYM is a function symbol.  */
12169   gdb_assert (sym != NULL);
12170   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12171
12172   /* Set ADDR_STRING.  */
12173   *addr_string = xstrdup (sym_name);
12174
12175   /* Set OPS.  */
12176   *ops = ada_exception_breakpoint_ops (ex);
12177
12178   return find_function_start_sal (sym, 1);
12179 }
12180
12181 /* Create an Ada exception catchpoint.
12182
12183    EX_KIND is the kind of exception catchpoint to be created.
12184
12185    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12186    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12187    of the exception to which this catchpoint applies.  When not NULL,
12188    the string must be allocated on the heap, and its deallocation
12189    is no longer the responsibility of the caller.
12190
12191    COND_STRING, if not NULL, is the catchpoint condition.  This string
12192    must be allocated on the heap, and its deallocation is no longer
12193    the responsibility of the caller.
12194
12195    TEMPFLAG, if nonzero, means that the underlying breakpoint
12196    should be temporary.
12197
12198    FROM_TTY is the usual argument passed to all commands implementations.  */
12199
12200 void
12201 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12202                                  enum ada_exception_catchpoint_kind ex_kind,
12203                                  char *excep_string,
12204                                  char *cond_string,
12205                                  int tempflag,
12206                                  int disabled,
12207                                  int from_tty)
12208 {
12209   struct ada_catchpoint *c;
12210   char *addr_string = NULL;
12211   const struct breakpoint_ops *ops = NULL;
12212   struct symtab_and_line sal
12213     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12214
12215   c = XNEW (struct ada_catchpoint);
12216   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12217                                  ops, tempflag, disabled, from_tty);
12218   c->excep_string = excep_string;
12219   create_excep_cond_exprs (c);
12220   if (cond_string != NULL)
12221     set_breakpoint_condition (&c->base, cond_string, from_tty);
12222   install_breakpoint (0, &c->base, 1);
12223 }
12224
12225 /* Implement the "catch exception" command.  */
12226
12227 static void
12228 catch_ada_exception_command (char *arg, int from_tty,
12229                              struct cmd_list_element *command)
12230 {
12231   struct gdbarch *gdbarch = get_current_arch ();
12232   int tempflag;
12233   enum ada_exception_catchpoint_kind ex_kind;
12234   char *excep_string = NULL;
12235   char *cond_string = NULL;
12236
12237   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12238
12239   if (!arg)
12240     arg = "";
12241   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12242                                      &cond_string);
12243   create_ada_exception_catchpoint (gdbarch, ex_kind,
12244                                    excep_string, cond_string,
12245                                    tempflag, 1 /* enabled */,
12246                                    from_tty);
12247 }
12248
12249 /* Split the arguments specified in a "catch assert" command.
12250
12251    ARGS contains the command's arguments (or the empty string if
12252    no arguments were passed).
12253
12254    If ARGS contains a condition, set COND_STRING to that condition
12255    (the memory needs to be deallocated after use).  */
12256
12257 static void
12258 catch_ada_assert_command_split (char *args, char **cond_string)
12259 {
12260   args = skip_spaces (args);
12261
12262   /* Check whether a condition was provided.  */
12263   if (strncmp (args, "if", 2) == 0
12264       && (isspace (args[2]) || args[2] == '\0'))
12265     {
12266       args += 2;
12267       args = skip_spaces (args);
12268       if (args[0] == '\0')
12269         error (_("condition missing after `if' keyword"));
12270       *cond_string = xstrdup (args);
12271     }
12272
12273   /* Otherwise, there should be no other argument at the end of
12274      the command.  */
12275   else if (args[0] != '\0')
12276     error (_("Junk at end of arguments."));
12277 }
12278
12279 /* Implement the "catch assert" command.  */
12280
12281 static void
12282 catch_assert_command (char *arg, int from_tty,
12283                       struct cmd_list_element *command)
12284 {
12285   struct gdbarch *gdbarch = get_current_arch ();
12286   int tempflag;
12287   char *cond_string = NULL;
12288
12289   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12290
12291   if (!arg)
12292     arg = "";
12293   catch_ada_assert_command_split (arg, &cond_string);
12294   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12295                                    NULL, cond_string,
12296                                    tempflag, 1 /* enabled */,
12297                                    from_tty);
12298 }
12299
12300 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12301
12302 static int
12303 ada_is_exception_sym (struct symbol *sym)
12304 {
12305   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12306
12307   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12308           && SYMBOL_CLASS (sym) != LOC_BLOCK
12309           && SYMBOL_CLASS (sym) != LOC_CONST
12310           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12311           && type_name != NULL && strcmp (type_name, "exception") == 0);
12312 }
12313
12314 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12315    Ada exception object.  This matches all exceptions except the ones
12316    defined by the Ada language.  */
12317
12318 static int
12319 ada_is_non_standard_exception_sym (struct symbol *sym)
12320 {
12321   int i;
12322
12323   if (!ada_is_exception_sym (sym))
12324     return 0;
12325
12326   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12327     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12328       return 0;  /* A standard exception.  */
12329
12330   /* Numeric_Error is also a standard exception, so exclude it.
12331      See the STANDARD_EXC description for more details as to why
12332      this exception is not listed in that array.  */
12333   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12334     return 0;
12335
12336   return 1;
12337 }
12338
12339 /* A helper function for qsort, comparing two struct ada_exc_info
12340    objects.
12341
12342    The comparison is determined first by exception name, and then
12343    by exception address.  */
12344
12345 static int
12346 compare_ada_exception_info (const void *a, const void *b)
12347 {
12348   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12349   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12350   int result;
12351
12352   result = strcmp (exc_a->name, exc_b->name);
12353   if (result != 0)
12354     return result;
12355
12356   if (exc_a->addr < exc_b->addr)
12357     return -1;
12358   if (exc_a->addr > exc_b->addr)
12359     return 1;
12360
12361   return 0;
12362 }
12363
12364 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12365    routine, but keeping the first SKIP elements untouched.
12366
12367    All duplicates are also removed.  */
12368
12369 static void
12370 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12371                                       int skip)
12372 {
12373   struct ada_exc_info *to_sort
12374     = VEC_address (ada_exc_info, *exceptions) + skip;
12375   int to_sort_len
12376     = VEC_length (ada_exc_info, *exceptions) - skip;
12377   int i, j;
12378
12379   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12380          compare_ada_exception_info);
12381
12382   for (i = 1, j = 1; i < to_sort_len; i++)
12383     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12384       to_sort[j++] = to_sort[i];
12385   to_sort_len = j;
12386   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12387 }
12388
12389 /* A function intended as the "name_matcher" callback in the struct
12390    quick_symbol_functions' expand_symtabs_matching method.
12391
12392    SEARCH_NAME is the symbol's search name.
12393
12394    If USER_DATA is not NULL, it is a pointer to a regext_t object
12395    used to match the symbol (by natural name).  Otherwise, when USER_DATA
12396    is null, no filtering is performed, and all symbols are a positive
12397    match.  */
12398
12399 static int
12400 ada_exc_search_name_matches (const char *search_name, void *user_data)
12401 {
12402   regex_t *preg = user_data;
12403
12404   if (preg == NULL)
12405     return 1;
12406
12407   /* In Ada, the symbol "search name" is a linkage name, whereas
12408      the regular expression used to do the matching refers to
12409      the natural name.  So match against the decoded name.  */
12410   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12411 }
12412
12413 /* Add all exceptions defined by the Ada standard whose name match
12414    a regular expression.
12415
12416    If PREG is not NULL, then this regexp_t object is used to
12417    perform the symbol name matching.  Otherwise, no name-based
12418    filtering is performed.
12419
12420    EXCEPTIONS is a vector of exceptions to which matching exceptions
12421    gets pushed.  */
12422
12423 static void
12424 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12425 {
12426   int i;
12427
12428   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12429     {
12430       if (preg == NULL
12431           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12432         {
12433           struct bound_minimal_symbol msymbol
12434             = ada_lookup_simple_minsym (standard_exc[i]);
12435
12436           if (msymbol.minsym != NULL)
12437             {
12438               struct ada_exc_info info
12439                 = {standard_exc[i], SYMBOL_VALUE_ADDRESS (msymbol.minsym)};
12440
12441               VEC_safe_push (ada_exc_info, *exceptions, &info);
12442             }
12443         }
12444     }
12445 }
12446
12447 /* Add all Ada exceptions defined locally and accessible from the given
12448    FRAME.
12449
12450    If PREG is not NULL, then this regexp_t object is used to
12451    perform the symbol name matching.  Otherwise, no name-based
12452    filtering is performed.
12453
12454    EXCEPTIONS is a vector of exceptions to which matching exceptions
12455    gets pushed.  */
12456
12457 static void
12458 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12459                                VEC(ada_exc_info) **exceptions)
12460 {
12461   struct block *block = get_frame_block (frame, 0);
12462
12463   while (block != 0)
12464     {
12465       struct block_iterator iter;
12466       struct symbol *sym;
12467
12468       ALL_BLOCK_SYMBOLS (block, iter, sym)
12469         {
12470           switch (SYMBOL_CLASS (sym))
12471             {
12472             case LOC_TYPEDEF:
12473             case LOC_BLOCK:
12474             case LOC_CONST:
12475               break;
12476             default:
12477               if (ada_is_exception_sym (sym))
12478                 {
12479                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12480                                               SYMBOL_VALUE_ADDRESS (sym)};
12481
12482                   VEC_safe_push (ada_exc_info, *exceptions, &info);
12483                 }
12484             }
12485         }
12486       if (BLOCK_FUNCTION (block) != NULL)
12487         break;
12488       block = BLOCK_SUPERBLOCK (block);
12489     }
12490 }
12491
12492 /* Add all exceptions defined globally whose name name match
12493    a regular expression, excluding standard exceptions.
12494
12495    The reason we exclude standard exceptions is that they need
12496    to be handled separately: Standard exceptions are defined inside
12497    a runtime unit which is normally not compiled with debugging info,
12498    and thus usually do not show up in our symbol search.  However,
12499    if the unit was in fact built with debugging info, we need to
12500    exclude them because they would duplicate the entry we found
12501    during the special loop that specifically searches for those
12502    standard exceptions.
12503
12504    If PREG is not NULL, then this regexp_t object is used to
12505    perform the symbol name matching.  Otherwise, no name-based
12506    filtering is performed.
12507
12508    EXCEPTIONS is a vector of exceptions to which matching exceptions
12509    gets pushed.  */
12510
12511 static void
12512 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12513 {
12514   struct objfile *objfile;
12515   struct symtab *s;
12516
12517   ALL_OBJFILES (objfile)
12518     if (objfile->sf)
12519       objfile->sf->qf->expand_symtabs_matching
12520         (objfile, NULL, ada_exc_search_name_matches,
12521          VARIABLES_DOMAIN, preg);
12522
12523   ALL_PRIMARY_SYMTABS (objfile, s)
12524     {
12525       struct blockvector *bv = BLOCKVECTOR (s);
12526       int i;
12527
12528       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12529         {
12530           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12531           struct block_iterator iter;
12532           struct symbol *sym;
12533
12534           ALL_BLOCK_SYMBOLS (b, iter, sym)
12535             if (ada_is_non_standard_exception_sym (sym)
12536                 && (preg == NULL
12537                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12538                                 0, NULL, 0) == 0))
12539               {
12540                 struct ada_exc_info info
12541                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12542
12543                 VEC_safe_push (ada_exc_info, *exceptions, &info);
12544               }
12545         }
12546     }
12547 }
12548
12549 /* Implements ada_exceptions_list with the regular expression passed
12550    as a regex_t, rather than a string.
12551
12552    If not NULL, PREG is used to filter out exceptions whose names
12553    do not match.  Otherwise, all exceptions are listed.  */
12554
12555 static VEC(ada_exc_info) *
12556 ada_exceptions_list_1 (regex_t *preg)
12557 {
12558   VEC(ada_exc_info) *result = NULL;
12559   struct cleanup *old_chain
12560     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12561   int prev_len;
12562
12563   /* First, list the known standard exceptions.  These exceptions
12564      need to be handled separately, as they are usually defined in
12565      runtime units that have been compiled without debugging info.  */
12566
12567   ada_add_standard_exceptions (preg, &result);
12568
12569   /* Next, find all exceptions whose scope is local and accessible
12570      from the currently selected frame.  */
12571
12572   if (has_stack_frames ())
12573     {
12574       prev_len = VEC_length (ada_exc_info, result);
12575       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12576                                      &result);
12577       if (VEC_length (ada_exc_info, result) > prev_len)
12578         sort_remove_dups_ada_exceptions_list (&result, prev_len);
12579     }
12580
12581   /* Add all exceptions whose scope is global.  */
12582
12583   prev_len = VEC_length (ada_exc_info, result);
12584   ada_add_global_exceptions (preg, &result);
12585   if (VEC_length (ada_exc_info, result) > prev_len)
12586     sort_remove_dups_ada_exceptions_list (&result, prev_len);
12587
12588   discard_cleanups (old_chain);
12589   return result;
12590 }
12591
12592 /* Return a vector of ada_exc_info.
12593
12594    If REGEXP is NULL, all exceptions are included in the result.
12595    Otherwise, it should contain a valid regular expression,
12596    and only the exceptions whose names match that regular expression
12597    are included in the result.
12598
12599    The exceptions are sorted in the following order:
12600      - Standard exceptions (defined by the Ada language), in
12601        alphabetical order;
12602      - Exceptions only visible from the current frame, in
12603        alphabetical order;
12604      - Exceptions whose scope is global, in alphabetical order.  */
12605
12606 VEC(ada_exc_info) *
12607 ada_exceptions_list (const char *regexp)
12608 {
12609   VEC(ada_exc_info) *result = NULL;
12610   struct cleanup *old_chain = NULL;
12611   regex_t reg;
12612
12613   if (regexp != NULL)
12614     old_chain = compile_rx_or_error (&reg, regexp,
12615                                      _("invalid regular expression"));
12616
12617   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12618
12619   if (old_chain != NULL)
12620     do_cleanups (old_chain);
12621   return result;
12622 }
12623
12624 /* Implement the "info exceptions" command.  */
12625
12626 static void
12627 info_exceptions_command (char *regexp, int from_tty)
12628 {
12629   VEC(ada_exc_info) *exceptions;
12630   struct cleanup *cleanup;
12631   struct gdbarch *gdbarch = get_current_arch ();
12632   int ix;
12633   struct ada_exc_info *info;
12634
12635   exceptions = ada_exceptions_list (regexp);
12636   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12637
12638   if (regexp != NULL)
12639     printf_filtered
12640       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12641   else
12642     printf_filtered (_("All defined Ada exceptions:\n"));
12643
12644   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12645     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12646
12647   do_cleanups (cleanup);
12648 }
12649
12650                                 /* Operators */
12651 /* Information about operators given special treatment in functions
12652    below.  */
12653 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
12654
12655 #define ADA_OPERATORS \
12656     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12657     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12658     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12659     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12660     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12661     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12662     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12663     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12664     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12665     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12666     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12667     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12668     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
12669     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
12670     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
12671     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
12672     OP_DEFN (OP_OTHERS, 1, 1, 0) \
12673     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
12674     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
12675
12676 static void
12677 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
12678                      int *argsp)
12679 {
12680   switch (exp->elts[pc - 1].opcode)
12681     {
12682     default:
12683       operator_length_standard (exp, pc, oplenp, argsp);
12684       break;
12685
12686 #define OP_DEFN(op, len, args, binop) \
12687     case op: *oplenp = len; *argsp = args; break;
12688       ADA_OPERATORS;
12689 #undef OP_DEFN
12690
12691     case OP_AGGREGATE:
12692       *oplenp = 3;
12693       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
12694       break;
12695
12696     case OP_CHOICES:
12697       *oplenp = 3;
12698       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
12699       break;
12700     }
12701 }
12702
12703 /* Implementation of the exp_descriptor method operator_check.  */
12704
12705 static int
12706 ada_operator_check (struct expression *exp, int pos,
12707                     int (*objfile_func) (struct objfile *objfile, void *data),
12708                     void *data)
12709 {
12710   const union exp_element *const elts = exp->elts;
12711   struct type *type = NULL;
12712
12713   switch (elts[pos].opcode)
12714     {
12715       case UNOP_IN_RANGE:
12716       case UNOP_QUAL:
12717         type = elts[pos + 1].type;
12718         break;
12719
12720       default:
12721         return operator_check_standard (exp, pos, objfile_func, data);
12722     }
12723
12724   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
12725
12726   if (type && TYPE_OBJFILE (type)
12727       && (*objfile_func) (TYPE_OBJFILE (type), data))
12728     return 1;
12729
12730   return 0;
12731 }
12732
12733 static char *
12734 ada_op_name (enum exp_opcode opcode)
12735 {
12736   switch (opcode)
12737     {
12738     default:
12739       return op_name_standard (opcode);
12740
12741 #define OP_DEFN(op, len, args, binop) case op: return #op;
12742       ADA_OPERATORS;
12743 #undef OP_DEFN
12744
12745     case OP_AGGREGATE:
12746       return "OP_AGGREGATE";
12747     case OP_CHOICES:
12748       return "OP_CHOICES";
12749     case OP_NAME:
12750       return "OP_NAME";
12751     }
12752 }
12753
12754 /* As for operator_length, but assumes PC is pointing at the first
12755    element of the operator, and gives meaningful results only for the 
12756    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
12757
12758 static void
12759 ada_forward_operator_length (struct expression *exp, int pc,
12760                              int *oplenp, int *argsp)
12761 {
12762   switch (exp->elts[pc].opcode)
12763     {
12764     default:
12765       *oplenp = *argsp = 0;
12766       break;
12767
12768 #define OP_DEFN(op, len, args, binop) \
12769     case op: *oplenp = len; *argsp = args; break;
12770       ADA_OPERATORS;
12771 #undef OP_DEFN
12772
12773     case OP_AGGREGATE:
12774       *oplenp = 3;
12775       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
12776       break;
12777
12778     case OP_CHOICES:
12779       *oplenp = 3;
12780       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
12781       break;
12782
12783     case OP_STRING:
12784     case OP_NAME:
12785       {
12786         int len = longest_to_int (exp->elts[pc + 1].longconst);
12787
12788         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
12789         *argsp = 0;
12790         break;
12791       }
12792     }
12793 }
12794
12795 static int
12796 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
12797 {
12798   enum exp_opcode op = exp->elts[elt].opcode;
12799   int oplen, nargs;
12800   int pc = elt;
12801   int i;
12802
12803   ada_forward_operator_length (exp, elt, &oplen, &nargs);
12804
12805   switch (op)
12806     {
12807       /* Ada attributes ('Foo).  */
12808     case OP_ATR_FIRST:
12809     case OP_ATR_LAST:
12810     case OP_ATR_LENGTH:
12811     case OP_ATR_IMAGE:
12812     case OP_ATR_MAX:
12813     case OP_ATR_MIN:
12814     case OP_ATR_MODULUS:
12815     case OP_ATR_POS:
12816     case OP_ATR_SIZE:
12817     case OP_ATR_TAG:
12818     case OP_ATR_VAL:
12819       break;
12820
12821     case UNOP_IN_RANGE:
12822     case UNOP_QUAL:
12823       /* XXX: gdb_sprint_host_address, type_sprint */
12824       fprintf_filtered (stream, _("Type @"));
12825       gdb_print_host_address (exp->elts[pc + 1].type, stream);
12826       fprintf_filtered (stream, " (");
12827       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
12828       fprintf_filtered (stream, ")");
12829       break;
12830     case BINOP_IN_BOUNDS:
12831       fprintf_filtered (stream, " (%d)",
12832                         longest_to_int (exp->elts[pc + 2].longconst));
12833       break;
12834     case TERNOP_IN_RANGE:
12835       break;
12836
12837     case OP_AGGREGATE:
12838     case OP_OTHERS:
12839     case OP_DISCRETE_RANGE:
12840     case OP_POSITIONAL:
12841     case OP_CHOICES:
12842       break;
12843
12844     case OP_NAME:
12845     case OP_STRING:
12846       {
12847         char *name = &exp->elts[elt + 2].string;
12848         int len = longest_to_int (exp->elts[elt + 1].longconst);
12849
12850         fprintf_filtered (stream, "Text: `%.*s'", len, name);
12851         break;
12852       }
12853
12854     default:
12855       return dump_subexp_body_standard (exp, stream, elt);
12856     }
12857
12858   elt += oplen;
12859   for (i = 0; i < nargs; i += 1)
12860     elt = dump_subexp (exp, stream, elt);
12861
12862   return elt;
12863 }
12864
12865 /* The Ada extension of print_subexp (q.v.).  */
12866
12867 static void
12868 ada_print_subexp (struct expression *exp, int *pos,
12869                   struct ui_file *stream, enum precedence prec)
12870 {
12871   int oplen, nargs, i;
12872   int pc = *pos;
12873   enum exp_opcode op = exp->elts[pc].opcode;
12874
12875   ada_forward_operator_length (exp, pc, &oplen, &nargs);
12876
12877   *pos += oplen;
12878   switch (op)
12879     {
12880     default:
12881       *pos -= oplen;
12882       print_subexp_standard (exp, pos, stream, prec);
12883       return;
12884
12885     case OP_VAR_VALUE:
12886       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
12887       return;
12888
12889     case BINOP_IN_BOUNDS:
12890       /* XXX: sprint_subexp */
12891       print_subexp (exp, pos, stream, PREC_SUFFIX);
12892       fputs_filtered (" in ", stream);
12893       print_subexp (exp, pos, stream, PREC_SUFFIX);
12894       fputs_filtered ("'range", stream);
12895       if (exp->elts[pc + 1].longconst > 1)
12896         fprintf_filtered (stream, "(%ld)",
12897                           (long) exp->elts[pc + 1].longconst);
12898       return;
12899
12900     case TERNOP_IN_RANGE:
12901       if (prec >= PREC_EQUAL)
12902         fputs_filtered ("(", stream);
12903       /* XXX: sprint_subexp */
12904       print_subexp (exp, pos, stream, PREC_SUFFIX);
12905       fputs_filtered (" in ", stream);
12906       print_subexp (exp, pos, stream, PREC_EQUAL);
12907       fputs_filtered (" .. ", stream);
12908       print_subexp (exp, pos, stream, PREC_EQUAL);
12909       if (prec >= PREC_EQUAL)
12910         fputs_filtered (")", stream);
12911       return;
12912
12913     case OP_ATR_FIRST:
12914     case OP_ATR_LAST:
12915     case OP_ATR_LENGTH:
12916     case OP_ATR_IMAGE:
12917     case OP_ATR_MAX:
12918     case OP_ATR_MIN:
12919     case OP_ATR_MODULUS:
12920     case OP_ATR_POS:
12921     case OP_ATR_SIZE:
12922     case OP_ATR_TAG:
12923     case OP_ATR_VAL:
12924       if (exp->elts[*pos].opcode == OP_TYPE)
12925         {
12926           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
12927             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
12928                            &type_print_raw_options);
12929           *pos += 3;
12930         }
12931       else
12932         print_subexp (exp, pos, stream, PREC_SUFFIX);
12933       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
12934       if (nargs > 1)
12935         {
12936           int tem;
12937
12938           for (tem = 1; tem < nargs; tem += 1)
12939             {
12940               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
12941               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
12942             }
12943           fputs_filtered (")", stream);
12944         }
12945       return;
12946
12947     case UNOP_QUAL:
12948       type_print (exp->elts[pc + 1].type, "", stream, 0);
12949       fputs_filtered ("'(", stream);
12950       print_subexp (exp, pos, stream, PREC_PREFIX);
12951       fputs_filtered (")", stream);
12952       return;
12953
12954     case UNOP_IN_RANGE:
12955       /* XXX: sprint_subexp */
12956       print_subexp (exp, pos, stream, PREC_SUFFIX);
12957       fputs_filtered (" in ", stream);
12958       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
12959                      &type_print_raw_options);
12960       return;
12961
12962     case OP_DISCRETE_RANGE:
12963       print_subexp (exp, pos, stream, PREC_SUFFIX);
12964       fputs_filtered ("..", stream);
12965       print_subexp (exp, pos, stream, PREC_SUFFIX);
12966       return;
12967
12968     case OP_OTHERS:
12969       fputs_filtered ("others => ", stream);
12970       print_subexp (exp, pos, stream, PREC_SUFFIX);
12971       return;
12972
12973     case OP_CHOICES:
12974       for (i = 0; i < nargs-1; i += 1)
12975         {
12976           if (i > 0)
12977             fputs_filtered ("|", stream);
12978           print_subexp (exp, pos, stream, PREC_SUFFIX);
12979         }
12980       fputs_filtered (" => ", stream);
12981       print_subexp (exp, pos, stream, PREC_SUFFIX);
12982       return;
12983       
12984     case OP_POSITIONAL:
12985       print_subexp (exp, pos, stream, PREC_SUFFIX);
12986       return;
12987
12988     case OP_AGGREGATE:
12989       fputs_filtered ("(", stream);
12990       for (i = 0; i < nargs; i += 1)
12991         {
12992           if (i > 0)
12993             fputs_filtered (", ", stream);
12994           print_subexp (exp, pos, stream, PREC_SUFFIX);
12995         }
12996       fputs_filtered (")", stream);
12997       return;
12998     }
12999 }
13000
13001 /* Table mapping opcodes into strings for printing operators
13002    and precedences of the operators.  */
13003
13004 static const struct op_print ada_op_print_tab[] = {
13005   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13006   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13007   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13008   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13009   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13010   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13011   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13012   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13013   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13014   {">=", BINOP_GEQ, PREC_ORDER, 0},
13015   {">", BINOP_GTR, PREC_ORDER, 0},
13016   {"<", BINOP_LESS, PREC_ORDER, 0},
13017   {">>", BINOP_RSH, PREC_SHIFT, 0},
13018   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13019   {"+", BINOP_ADD, PREC_ADD, 0},
13020   {"-", BINOP_SUB, PREC_ADD, 0},
13021   {"&", BINOP_CONCAT, PREC_ADD, 0},
13022   {"*", BINOP_MUL, PREC_MUL, 0},
13023   {"/", BINOP_DIV, PREC_MUL, 0},
13024   {"rem", BINOP_REM, PREC_MUL, 0},
13025   {"mod", BINOP_MOD, PREC_MUL, 0},
13026   {"**", BINOP_EXP, PREC_REPEAT, 0},
13027   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13028   {"-", UNOP_NEG, PREC_PREFIX, 0},
13029   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13030   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13031   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13032   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13033   {".all", UNOP_IND, PREC_SUFFIX, 1},
13034   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13035   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13036   {NULL, 0, 0, 0}
13037 };
13038 \f
13039 enum ada_primitive_types {
13040   ada_primitive_type_int,
13041   ada_primitive_type_long,
13042   ada_primitive_type_short,
13043   ada_primitive_type_char,
13044   ada_primitive_type_float,
13045   ada_primitive_type_double,
13046   ada_primitive_type_void,
13047   ada_primitive_type_long_long,
13048   ada_primitive_type_long_double,
13049   ada_primitive_type_natural,
13050   ada_primitive_type_positive,
13051   ada_primitive_type_system_address,
13052   nr_ada_primitive_types
13053 };
13054
13055 static void
13056 ada_language_arch_info (struct gdbarch *gdbarch,
13057                         struct language_arch_info *lai)
13058 {
13059   const struct builtin_type *builtin = builtin_type (gdbarch);
13060
13061   lai->primitive_type_vector
13062     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13063                               struct type *);
13064
13065   lai->primitive_type_vector [ada_primitive_type_int]
13066     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13067                          0, "integer");
13068   lai->primitive_type_vector [ada_primitive_type_long]
13069     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13070                          0, "long_integer");
13071   lai->primitive_type_vector [ada_primitive_type_short]
13072     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13073                          0, "short_integer");
13074   lai->string_char_type
13075     = lai->primitive_type_vector [ada_primitive_type_char]
13076     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13077   lai->primitive_type_vector [ada_primitive_type_float]
13078     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13079                        "float", NULL);
13080   lai->primitive_type_vector [ada_primitive_type_double]
13081     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13082                        "long_float", NULL);
13083   lai->primitive_type_vector [ada_primitive_type_long_long]
13084     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13085                          0, "long_long_integer");
13086   lai->primitive_type_vector [ada_primitive_type_long_double]
13087     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13088                        "long_long_float", NULL);
13089   lai->primitive_type_vector [ada_primitive_type_natural]
13090     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13091                          0, "natural");
13092   lai->primitive_type_vector [ada_primitive_type_positive]
13093     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13094                          0, "positive");
13095   lai->primitive_type_vector [ada_primitive_type_void]
13096     = builtin->builtin_void;
13097
13098   lai->primitive_type_vector [ada_primitive_type_system_address]
13099     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13100   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13101     = "system__address";
13102
13103   lai->bool_type_symbol = NULL;
13104   lai->bool_type_default = builtin->builtin_bool;
13105 }
13106 \f
13107                                 /* Language vector */
13108
13109 /* Not really used, but needed in the ada_language_defn.  */
13110
13111 static void
13112 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13113 {
13114   ada_emit_char (c, type, stream, quoter, 1);
13115 }
13116
13117 static int
13118 parse (void)
13119 {
13120   warnings_issued = 0;
13121   return ada_parse ();
13122 }
13123
13124 static const struct exp_descriptor ada_exp_descriptor = {
13125   ada_print_subexp,
13126   ada_operator_length,
13127   ada_operator_check,
13128   ada_op_name,
13129   ada_dump_subexp_body,
13130   ada_evaluate_subexp
13131 };
13132
13133 /* Implement the "la_get_symbol_name_cmp" language_defn method
13134    for Ada.  */
13135
13136 static symbol_name_cmp_ftype
13137 ada_get_symbol_name_cmp (const char *lookup_name)
13138 {
13139   if (should_use_wild_match (lookup_name))
13140     return wild_match;
13141   else
13142     return compare_names;
13143 }
13144
13145 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13146
13147 static struct value *
13148 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13149 {
13150   struct block *frame_block = NULL;
13151   struct symbol *renaming_sym = NULL;
13152
13153   /* The only case where default_read_var_value is not sufficient
13154      is when VAR is a renaming...  */
13155   if (frame)
13156     frame_block = get_frame_block (frame, NULL);
13157   if (frame_block)
13158     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13159   if (renaming_sym != NULL)
13160     return ada_read_renaming_var_value (renaming_sym, frame_block);
13161
13162   /* This is a typical case where we expect the default_read_var_value
13163      function to work.  */
13164   return default_read_var_value (var, frame);
13165 }
13166
13167 const struct language_defn ada_language_defn = {
13168   "ada",                        /* Language name */
13169   "Ada",
13170   language_ada,
13171   range_check_off,
13172   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13173                                    that's not quite what this means.  */
13174   array_row_major,
13175   macro_expansion_no,
13176   &ada_exp_descriptor,
13177   parse,
13178   ada_error,
13179   resolve,
13180   ada_printchar,                /* Print a character constant */
13181   ada_printstr,                 /* Function to print string constant */
13182   emit_char,                    /* Function to print single char (not used) */
13183   ada_print_type,               /* Print a type using appropriate syntax */
13184   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13185   ada_val_print,                /* Print a value using appropriate syntax */
13186   ada_value_print,              /* Print a top-level value */
13187   ada_read_var_value,           /* la_read_var_value */
13188   NULL,                         /* Language specific skip_trampoline */
13189   NULL,                         /* name_of_this */
13190   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13191   basic_lookup_transparent_type,        /* lookup_transparent_type */
13192   ada_la_decode,                /* Language specific symbol demangler */
13193   NULL,                         /* Language specific
13194                                    class_name_from_physname */
13195   ada_op_print_tab,             /* expression operators for printing */
13196   0,                            /* c-style arrays */
13197   1,                            /* String lower bound */
13198   ada_get_gdb_completer_word_break_characters,
13199   ada_make_symbol_completion_list,
13200   ada_language_arch_info,
13201   ada_print_array_index,
13202   default_pass_by_reference,
13203   c_get_string,
13204   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
13205   ada_iterate_over_symbols,
13206   &ada_varobj_ops,
13207   LANG_MAGIC
13208 };
13209
13210 /* Provide a prototype to silence -Wmissing-prototypes.  */
13211 extern initialize_file_ftype _initialize_ada_language;
13212
13213 /* Command-list for the "set/show ada" prefix command.  */
13214 static struct cmd_list_element *set_ada_list;
13215 static struct cmd_list_element *show_ada_list;
13216
13217 /* Implement the "set ada" prefix command.  */
13218
13219 static void
13220 set_ada_command (char *arg, int from_tty)
13221 {
13222   printf_unfiltered (_(\
13223 "\"set ada\" must be followed by the name of a setting.\n"));
13224   help_list (set_ada_list, "set ada ", -1, gdb_stdout);
13225 }
13226
13227 /* Implement the "show ada" prefix command.  */
13228
13229 static void
13230 show_ada_command (char *args, int from_tty)
13231 {
13232   cmd_show_list (show_ada_list, from_tty, "");
13233 }
13234
13235 static void
13236 initialize_ada_catchpoint_ops (void)
13237 {
13238   struct breakpoint_ops *ops;
13239
13240   initialize_breakpoint_ops ();
13241
13242   ops = &catch_exception_breakpoint_ops;
13243   *ops = bkpt_breakpoint_ops;
13244   ops->dtor = dtor_catch_exception;
13245   ops->allocate_location = allocate_location_catch_exception;
13246   ops->re_set = re_set_catch_exception;
13247   ops->check_status = check_status_catch_exception;
13248   ops->print_it = print_it_catch_exception;
13249   ops->print_one = print_one_catch_exception;
13250   ops->print_mention = print_mention_catch_exception;
13251   ops->print_recreate = print_recreate_catch_exception;
13252
13253   ops = &catch_exception_unhandled_breakpoint_ops;
13254   *ops = bkpt_breakpoint_ops;
13255   ops->dtor = dtor_catch_exception_unhandled;
13256   ops->allocate_location = allocate_location_catch_exception_unhandled;
13257   ops->re_set = re_set_catch_exception_unhandled;
13258   ops->check_status = check_status_catch_exception_unhandled;
13259   ops->print_it = print_it_catch_exception_unhandled;
13260   ops->print_one = print_one_catch_exception_unhandled;
13261   ops->print_mention = print_mention_catch_exception_unhandled;
13262   ops->print_recreate = print_recreate_catch_exception_unhandled;
13263
13264   ops = &catch_assert_breakpoint_ops;
13265   *ops = bkpt_breakpoint_ops;
13266   ops->dtor = dtor_catch_assert;
13267   ops->allocate_location = allocate_location_catch_assert;
13268   ops->re_set = re_set_catch_assert;
13269   ops->check_status = check_status_catch_assert;
13270   ops->print_it = print_it_catch_assert;
13271   ops->print_one = print_one_catch_assert;
13272   ops->print_mention = print_mention_catch_assert;
13273   ops->print_recreate = print_recreate_catch_assert;
13274 }
13275
13276 void
13277 _initialize_ada_language (void)
13278 {
13279   add_language (&ada_language_defn);
13280
13281   initialize_ada_catchpoint_ops ();
13282
13283   add_prefix_cmd ("ada", no_class, set_ada_command,
13284                   _("Prefix command for changing Ada-specfic settings"),
13285                   &set_ada_list, "set ada ", 0, &setlist);
13286
13287   add_prefix_cmd ("ada", no_class, show_ada_command,
13288                   _("Generic command for showing Ada-specific settings."),
13289                   &show_ada_list, "show ada ", 0, &showlist);
13290
13291   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13292                            &trust_pad_over_xvs, _("\
13293 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13294 Show whether an optimization trusting PAD types over XVS types is activated"),
13295                            _("\
13296 This is related to the encoding used by the GNAT compiler.  The debugger\n\
13297 should normally trust the contents of PAD types, but certain older versions\n\
13298 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13299 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
13300 work around this bug.  It is always safe to turn this option \"off\", but\n\
13301 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13302 this option to \"off\" unless necessary."),
13303                             NULL, NULL, &set_ada_list, &show_ada_list);
13304
13305   add_catch_command ("exception", _("\
13306 Catch Ada exceptions, when raised.\n\
13307 With an argument, catch only exceptions with the given name."),
13308                      catch_ada_exception_command,
13309                      NULL,
13310                      CATCH_PERMANENT,
13311                      CATCH_TEMPORARY);
13312   add_catch_command ("assert", _("\
13313 Catch failed Ada assertions, when raised.\n\
13314 With an argument, catch only exceptions with the given name."),
13315                      catch_assert_command,
13316                      NULL,
13317                      CATCH_PERMANENT,
13318                      CATCH_TEMPORARY);
13319
13320   varsize_limit = 65536;
13321
13322   add_info ("exceptions", info_exceptions_command,
13323             _("\
13324 List all Ada exception names.\n\
13325 If a regular expression is passed as an argument, only those matching\n\
13326 the regular expression are listed."));
13327
13328   obstack_init (&symbol_list_obstack);
13329
13330   decoded_names_store = htab_create_alloc
13331     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13332      NULL, xcalloc, xfree);
13333
13334   /* Setup per-inferior data.  */
13335   observer_attach_inferior_exit (ada_inferior_exit);
13336   ada_inferior_data
13337     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13338 }