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