OSDN Git Service

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