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