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