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