NEWS: Remove empty line.
[external/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3    Copyright (C) 1992-2016 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20
21 #include "defs.h"
22 #include <ctype.h>
23 #include "demangle.h"
24 #include "gdb_regex.h"
25 #include "frame.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "gdbcmd.h"
29 #include "expression.h"
30 #include "parser-defs.h"
31 #include "language.h"
32 #include "varobj.h"
33 #include "c-lang.h"
34 #include "inferior.h"
35 #include "symfile.h"
36 #include "objfiles.h"
37 #include "breakpoint.h"
38 #include "gdbcore.h"
39 #include "hashtab.h"
40 #include "gdb_obstack.h"
41 #include "ada-lang.h"
42 #include "completer.h"
43 #include <sys/stat.h>
44 #include "ui-out.h"
45 #include "block.h"
46 #include "infcall.h"
47 #include "dictionary.h"
48 #include "annotate.h"
49 #include "valprint.h"
50 #include "source.h"
51 #include "observer.h"
52 #include "vec.h"
53 #include "stack.h"
54 #include "gdb_vecs.h"
55 #include "typeprint.h"
56 #include "namespace.h"
57
58 #include "psymtab.h"
59 #include "value.h"
60 #include "mi/mi-common.h"
61 #include "arch-utils.h"
62 #include "cli/cli-utils.h"
63
64 /* Define whether or not the C operator '/' truncates towards zero for
65    differently signed operands (truncation direction is undefined in C).
66    Copied from valarith.c.  */
67
68 #ifndef TRUNCATION_TOWARDS_ZERO
69 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
70 #endif
71
72 static struct type *desc_base_type (struct type *);
73
74 static struct type *desc_bounds_type (struct type *);
75
76 static struct value *desc_bounds (struct value *);
77
78 static int fat_pntr_bounds_bitpos (struct type *);
79
80 static int fat_pntr_bounds_bitsize (struct type *);
81
82 static struct type *desc_data_target_type (struct type *);
83
84 static struct value *desc_data (struct value *);
85
86 static int fat_pntr_data_bitpos (struct type *);
87
88 static int fat_pntr_data_bitsize (struct type *);
89
90 static struct value *desc_one_bound (struct value *, int, int);
91
92 static int desc_bound_bitpos (struct type *, int, int);
93
94 static int desc_bound_bitsize (struct type *, int, int);
95
96 static struct type *desc_index_type (struct type *, int);
97
98 static int desc_arity (struct type *);
99
100 static int ada_type_match (struct type *, struct type *, int);
101
102 static int ada_args_match (struct symbol *, struct value **, int);
103
104 static int full_match (const char *, const char *);
105
106 static struct value *make_array_descriptor (struct type *, struct value *);
107
108 static void ada_add_block_symbols (struct obstack *,
109                                    const struct block *, const char *,
110                                    domain_enum, struct objfile *, int);
111
112 static void ada_add_all_symbols (struct obstack *, const struct block *,
113                                  const char *, domain_enum, int, int *);
114
115 static int is_nonfunction (struct block_symbol *, int);
116
117 static void add_defn_to_vec (struct obstack *, struct symbol *,
118                              const struct block *);
119
120 static int num_defns_collected (struct obstack *);
121
122 static struct block_symbol *defns_collected (struct obstack *, int);
123
124 static struct value *resolve_subexp (struct expression **, int *, int,
125                                      struct type *);
126
127 static void replace_operator_with_call (struct expression **, int, int, int,
128                                         struct symbol *, const struct block *);
129
130 static int possible_user_operator_p (enum exp_opcode, struct value **);
131
132 static char *ada_op_name (enum exp_opcode);
133
134 static const char *ada_decoded_op_name (enum exp_opcode);
135
136 static int numeric_type_p (struct type *);
137
138 static int integer_type_p (struct type *);
139
140 static int scalar_type_p (struct type *);
141
142 static int discrete_type_p (struct type *);
143
144 static enum ada_renaming_category parse_old_style_renaming (struct type *,
145                                                             const char **,
146                                                             int *,
147                                                             const char **);
148
149 static struct symbol *find_old_style_renaming_symbol (const char *,
150                                                       const struct block *);
151
152 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
153                                                 int, int, int *);
154
155 static struct value *evaluate_subexp_type (struct expression *, int *);
156
157 static struct type *ada_find_parallel_type_with_name (struct type *,
158                                                       const char *);
159
160 static int is_dynamic_field (struct type *, int);
161
162 static struct type *to_fixed_variant_branch_type (struct type *,
163                                                   const gdb_byte *,
164                                                   CORE_ADDR, struct value *);
165
166 static struct type *to_fixed_array_type (struct type *, struct value *, int);
167
168 static struct type *to_fixed_range_type (struct type *, struct value *);
169
170 static struct type *to_static_fixed_type (struct type *);
171 static struct type *static_unwrap_type (struct type *type);
172
173 static struct value *unwrap_value (struct value *);
174
175 static struct type *constrained_packed_array_type (struct type *, long *);
176
177 static struct type *decode_constrained_packed_array_type (struct type *);
178
179 static long decode_packed_array_bitsize (struct type *);
180
181 static struct value *decode_constrained_packed_array (struct value *);
182
183 static int ada_is_packed_array_type  (struct type *);
184
185 static int ada_is_unconstrained_packed_array_type (struct type *);
186
187 static struct value *value_subscript_packed (struct value *, int,
188                                              struct value **);
189
190 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
191
192 static struct value *coerce_unspec_val_to_type (struct value *,
193                                                 struct type *);
194
195 static struct value *get_var_value (char *, char *);
196
197 static int lesseq_defined_than (struct symbol *, struct symbol *);
198
199 static int equiv_types (struct type *, struct type *);
200
201 static int is_name_suffix (const char *);
202
203 static int advance_wild_match (const char **, const char *, int);
204
205 static int wild_match (const char *, const char *);
206
207 static struct value *ada_coerce_ref (struct value *);
208
209 static LONGEST pos_atr (struct value *);
210
211 static struct value *value_pos_atr (struct type *, struct value *);
212
213 static struct value *value_val_atr (struct type *, struct value *);
214
215 static struct symbol *standard_lookup (const char *, const struct block *,
216                                        domain_enum);
217
218 static struct value *ada_search_struct_field (const char *, struct value *, int,
219                                               struct type *);
220
221 static struct value *ada_value_primitive_field (struct value *, int, int,
222                                                 struct type *);
223
224 static int find_struct_field (const char *, struct type *, int,
225                               struct type **, int *, int *, int *, int *);
226
227 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
228                                                 struct value *);
229
230 static int ada_resolve_function (struct block_symbol *, int,
231                                  struct value **, int, const char *,
232                                  struct type *);
233
234 static int ada_is_direct_array_type (struct type *);
235
236 static void ada_language_arch_info (struct gdbarch *,
237                                     struct language_arch_info *);
238
239 static struct value *ada_index_struct_field (int, struct value *, int,
240                                              struct type *);
241
242 static struct value *assign_aggregate (struct value *, struct value *, 
243                                        struct expression *,
244                                        int *, enum noside);
245
246 static void aggregate_assign_from_choices (struct value *, struct value *, 
247                                            struct expression *,
248                                            int *, LONGEST *, int *,
249                                            int, LONGEST, LONGEST);
250
251 static void aggregate_assign_positional (struct value *, struct value *,
252                                          struct expression *,
253                                          int *, LONGEST *, int *, int,
254                                          LONGEST, LONGEST);
255
256
257 static void aggregate_assign_others (struct value *, struct value *,
258                                      struct expression *,
259                                      int *, LONGEST *, int, LONGEST, LONGEST);
260
261
262 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
263
264
265 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
266                                           int *, enum noside);
267
268 static void ada_forward_operator_length (struct expression *, int, int *,
269                                          int *);
270
271 static struct type *ada_find_any_type (const char *name);
272 \f
273
274 /* The result of a symbol lookup to be stored in our symbol cache.  */
275
276 struct cache_entry
277 {
278   /* The name used to perform the lookup.  */
279   const char *name;
280   /* The namespace used during the lookup.  */
281   domain_enum domain;
282   /* The symbol returned by the lookup, or NULL if no matching symbol
283      was found.  */
284   struct symbol *sym;
285   /* The block where the symbol was found, or NULL if no matching
286      symbol was found.  */
287   const struct block *block;
288   /* A pointer to the next entry with the same hash.  */
289   struct cache_entry *next;
290 };
291
292 /* The Ada symbol cache, used to store the result of Ada-mode symbol
293    lookups in the course of executing the user's commands.
294
295    The cache is implemented using a simple, fixed-sized hash.
296    The size is fixed on the grounds that there are not likely to be
297    all that many symbols looked up during any given session, regardless
298    of the size of the symbol table.  If we decide to go to a resizable
299    table, let's just use the stuff from libiberty instead.  */
300
301 #define HASH_SIZE 1009
302
303 struct ada_symbol_cache
304 {
305   /* An obstack used to store the entries in our cache.  */
306   struct obstack cache_space;
307
308   /* The root of the hash table used to implement our symbol cache.  */
309   struct cache_entry *root[HASH_SIZE];
310 };
311
312 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
313
314 /* Maximum-sized dynamic type.  */
315 static unsigned int varsize_limit;
316
317 /* FIXME: brobecker/2003-09-17: No longer a const because it is
318    returned by a function that does not return a const char *.  */
319 static char *ada_completer_word_break_characters =
320 #ifdef VMS
321   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
322 #else
323   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
324 #endif
325
326 /* The name of the symbol to use to get the name of the main subprogram.  */
327 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
328   = "__gnat_ada_main_program_name";
329
330 /* Limit on the number of warnings to raise per expression evaluation.  */
331 static int warning_limit = 2;
332
333 /* Number of warning messages issued; reset to 0 by cleanups after
334    expression evaluation.  */
335 static int warnings_issued = 0;
336
337 static const char *known_runtime_file_name_patterns[] = {
338   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
339 };
340
341 static const char *known_auxiliary_function_name_patterns[] = {
342   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
343 };
344
345 /* Space for allocating results of ada_lookup_symbol_list.  */
346 static struct obstack symbol_list_obstack;
347
348 /* Maintenance-related settings for this module.  */
349
350 static struct cmd_list_element *maint_set_ada_cmdlist;
351 static struct cmd_list_element *maint_show_ada_cmdlist;
352
353 /* Implement the "maintenance set ada" (prefix) command.  */
354
355 static void
356 maint_set_ada_cmd (char *args, int from_tty)
357 {
358   help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
359              gdb_stdout);
360 }
361
362 /* Implement the "maintenance show ada" (prefix) command.  */
363
364 static void
365 maint_show_ada_cmd (char *args, int from_tty)
366 {
367   cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
368 }
369
370 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
371
372 static int ada_ignore_descriptive_types_p = 0;
373
374                         /* Inferior-specific data.  */
375
376 /* Per-inferior data for this module.  */
377
378 struct ada_inferior_data
379 {
380   /* The ada__tags__type_specific_data type, which is used when decoding
381      tagged types.  With older versions of GNAT, this type was directly
382      accessible through a component ("tsd") in the object tag.  But this
383      is no longer the case, so we cache it for each inferior.  */
384   struct type *tsd_type;
385
386   /* The exception_support_info data.  This data is used to determine
387      how to implement support for Ada exception catchpoints in a given
388      inferior.  */
389   const struct exception_support_info *exception_info;
390 };
391
392 /* Our key to this module's inferior data.  */
393 static const struct inferior_data *ada_inferior_data;
394
395 /* A cleanup routine for our inferior data.  */
396 static void
397 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
398 {
399   struct ada_inferior_data *data;
400
401   data = (struct ada_inferior_data *) inferior_data (inf, ada_inferior_data);
402   if (data != NULL)
403     xfree (data);
404 }
405
406 /* Return our inferior data for the given inferior (INF).
407
408    This function always returns a valid pointer to an allocated
409    ada_inferior_data structure.  If INF's inferior data has not
410    been previously set, this functions creates a new one with all
411    fields set to zero, sets INF's inferior to it, and then returns
412    a pointer to that newly allocated ada_inferior_data.  */
413
414 static struct ada_inferior_data *
415 get_ada_inferior_data (struct inferior *inf)
416 {
417   struct ada_inferior_data *data;
418
419   data = (struct ada_inferior_data *) inferior_data (inf, ada_inferior_data);
420   if (data == NULL)
421     {
422       data = XCNEW (struct ada_inferior_data);
423       set_inferior_data (inf, ada_inferior_data, data);
424     }
425
426   return data;
427 }
428
429 /* Perform all necessary cleanups regarding our module's inferior data
430    that is required after the inferior INF just exited.  */
431
432 static void
433 ada_inferior_exit (struct inferior *inf)
434 {
435   ada_inferior_data_cleanup (inf, NULL);
436   set_inferior_data (inf, ada_inferior_data, NULL);
437 }
438
439
440                         /* program-space-specific data.  */
441
442 /* This module's per-program-space data.  */
443 struct ada_pspace_data
444 {
445   /* The Ada symbol cache.  */
446   struct ada_symbol_cache *sym_cache;
447 };
448
449 /* Key to our per-program-space data.  */
450 static const struct program_space_data *ada_pspace_data_handle;
451
452 /* Return this module's data for the given program space (PSPACE).
453    If not is found, add a zero'ed one now.
454
455    This function always returns a valid object.  */
456
457 static struct ada_pspace_data *
458 get_ada_pspace_data (struct program_space *pspace)
459 {
460   struct ada_pspace_data *data;
461
462   data = ((struct ada_pspace_data *)
463           program_space_data (pspace, ada_pspace_data_handle));
464   if (data == NULL)
465     {
466       data = XCNEW (struct ada_pspace_data);
467       set_program_space_data (pspace, ada_pspace_data_handle, data);
468     }
469
470   return data;
471 }
472
473 /* The cleanup callback for this module's per-program-space data.  */
474
475 static void
476 ada_pspace_data_cleanup (struct program_space *pspace, void *data)
477 {
478   struct ada_pspace_data *pspace_data = (struct ada_pspace_data *) data;
479
480   if (pspace_data->sym_cache != NULL)
481     ada_free_symbol_cache (pspace_data->sym_cache);
482   xfree (pspace_data);
483 }
484
485                         /* Utilities */
486
487 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
488    all typedef layers have been peeled.  Otherwise, return TYPE.
489
490    Normally, we really expect a typedef type to only have 1 typedef layer.
491    In other words, we really expect the target type of a typedef type to be
492    a non-typedef type.  This is particularly true for Ada units, because
493    the language does not have a typedef vs not-typedef distinction.
494    In that respect, the Ada compiler has been trying to eliminate as many
495    typedef definitions in the debugging information, since they generally
496    do not bring any extra information (we still use typedef under certain
497    circumstances related mostly to the GNAT encoding).
498
499    Unfortunately, we have seen situations where the debugging information
500    generated by the compiler leads to such multiple typedef layers.  For
501    instance, consider the following example with stabs:
502
503      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
504      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
505
506    This is an error in the debugging information which causes type
507    pck__float_array___XUP to be defined twice, and the second time,
508    it is defined as a typedef of a typedef.
509
510    This is on the fringe of legality as far as debugging information is
511    concerned, and certainly unexpected.  But it is easy to handle these
512    situations correctly, so we can afford to be lenient in this case.  */
513
514 static struct type *
515 ada_typedef_target_type (struct type *type)
516 {
517   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
518     type = TYPE_TARGET_TYPE (type);
519   return type;
520 }
521
522 /* Given DECODED_NAME a string holding a symbol name in its
523    decoded form (ie using the Ada dotted notation), returns
524    its unqualified name.  */
525
526 static const char *
527 ada_unqualified_name (const char *decoded_name)
528 {
529   const char *result;
530   
531   /* If the decoded name starts with '<', it means that the encoded
532      name does not follow standard naming conventions, and thus that
533      it is not your typical Ada symbol name.  Trying to unqualify it
534      is therefore pointless and possibly erroneous.  */
535   if (decoded_name[0] == '<')
536     return decoded_name;
537
538   result = strrchr (decoded_name, '.');
539   if (result != NULL)
540     result++;                   /* Skip the dot...  */
541   else
542     result = decoded_name;
543
544   return result;
545 }
546
547 /* Return a string starting with '<', followed by STR, and '>'.
548    The result is good until the next call.  */
549
550 static char *
551 add_angle_brackets (const char *str)
552 {
553   static char *result = NULL;
554
555   xfree (result);
556   result = xstrprintf ("<%s>", str);
557   return result;
558 }
559
560 static char *
561 ada_get_gdb_completer_word_break_characters (void)
562 {
563   return ada_completer_word_break_characters;
564 }
565
566 /* Print an array element index using the Ada syntax.  */
567
568 static void
569 ada_print_array_index (struct value *index_value, struct ui_file *stream,
570                        const struct value_print_options *options)
571 {
572   LA_VALUE_PRINT (index_value, stream, options);
573   fprintf_filtered (stream, " => ");
574 }
575
576 /* Assuming VECT points to an array of *SIZE objects of size
577    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
578    updating *SIZE as necessary and returning the (new) array.  */
579
580 void *
581 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
582 {
583   if (*size < min_size)
584     {
585       *size *= 2;
586       if (*size < min_size)
587         *size = min_size;
588       vect = xrealloc (vect, *size * element_size);
589     }
590   return vect;
591 }
592
593 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
594    suffix of FIELD_NAME beginning "___".  */
595
596 static int
597 field_name_match (const char *field_name, const char *target)
598 {
599   int len = strlen (target);
600
601   return
602     (strncmp (field_name, target, len) == 0
603      && (field_name[len] == '\0'
604          || (startswith (field_name + len, "___")
605              && strcmp (field_name + strlen (field_name) - 6,
606                         "___XVN") != 0)));
607 }
608
609
610 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
611    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
612    and return its index.  This function also handles fields whose name
613    have ___ suffixes because the compiler sometimes alters their name
614    by adding such a suffix to represent fields with certain constraints.
615    If the field could not be found, return a negative number if
616    MAYBE_MISSING is set.  Otherwise raise an error.  */
617
618 int
619 ada_get_field_index (const struct type *type, const char *field_name,
620                      int maybe_missing)
621 {
622   int fieldno;
623   struct type *struct_type = check_typedef ((struct type *) type);
624
625   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
626     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
627       return fieldno;
628
629   if (!maybe_missing)
630     error (_("Unable to find field %s in struct %s.  Aborting"),
631            field_name, TYPE_NAME (struct_type));
632
633   return -1;
634 }
635
636 /* The length of the prefix of NAME prior to any "___" suffix.  */
637
638 int
639 ada_name_prefix_len (const char *name)
640 {
641   if (name == NULL)
642     return 0;
643   else
644     {
645       const char *p = strstr (name, "___");
646
647       if (p == NULL)
648         return strlen (name);
649       else
650         return p - name;
651     }
652 }
653
654 /* Return non-zero if SUFFIX is a suffix of STR.
655    Return zero if STR is null.  */
656
657 static int
658 is_suffix (const char *str, const char *suffix)
659 {
660   int len1, len2;
661
662   if (str == NULL)
663     return 0;
664   len1 = strlen (str);
665   len2 = strlen (suffix);
666   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
667 }
668
669 /* The contents of value VAL, treated as a value of type TYPE.  The
670    result is an lval in memory if VAL is.  */
671
672 static struct value *
673 coerce_unspec_val_to_type (struct value *val, struct type *type)
674 {
675   type = ada_check_typedef (type);
676   if (value_type (val) == type)
677     return val;
678   else
679     {
680       struct value *result;
681
682       /* Make sure that the object size is not unreasonable before
683          trying to allocate some memory for it.  */
684       ada_ensure_varsize_limit (type);
685
686       if (value_lazy (val)
687           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
688         result = allocate_value_lazy (type);
689       else
690         {
691           result = allocate_value (type);
692           value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
693         }
694       set_value_component_location (result, val);
695       set_value_bitsize (result, value_bitsize (val));
696       set_value_bitpos (result, value_bitpos (val));
697       set_value_address (result, value_address (val));
698       return result;
699     }
700 }
701
702 static const gdb_byte *
703 cond_offset_host (const gdb_byte *valaddr, long offset)
704 {
705   if (valaddr == NULL)
706     return NULL;
707   else
708     return valaddr + offset;
709 }
710
711 static CORE_ADDR
712 cond_offset_target (CORE_ADDR address, long offset)
713 {
714   if (address == 0)
715     return 0;
716   else
717     return address + offset;
718 }
719
720 /* Issue a warning (as for the definition of warning in utils.c, but
721    with exactly one argument rather than ...), unless the limit on the
722    number of warnings has passed during the evaluation of the current
723    expression.  */
724
725 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
726    provided by "complaint".  */
727 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
728
729 static void
730 lim_warning (const char *format, ...)
731 {
732   va_list args;
733
734   va_start (args, format);
735   warnings_issued += 1;
736   if (warnings_issued <= warning_limit)
737     vwarning (format, args);
738
739   va_end (args);
740 }
741
742 /* Issue an error if the size of an object of type T is unreasonable,
743    i.e. if it would be a bad idea to allocate a value of this type in
744    GDB.  */
745
746 void
747 ada_ensure_varsize_limit (const struct type *type)
748 {
749   if (TYPE_LENGTH (type) > varsize_limit)
750     error (_("object size is larger than varsize-limit"));
751 }
752
753 /* Maximum value of a SIZE-byte signed integer type.  */
754 static LONGEST
755 max_of_size (int size)
756 {
757   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
758
759   return top_bit | (top_bit - 1);
760 }
761
762 /* Minimum value of a SIZE-byte signed integer type.  */
763 static LONGEST
764 min_of_size (int size)
765 {
766   return -max_of_size (size) - 1;
767 }
768
769 /* Maximum value of a SIZE-byte unsigned integer type.  */
770 static ULONGEST
771 umax_of_size (int size)
772 {
773   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
774
775   return top_bit | (top_bit - 1);
776 }
777
778 /* Maximum value of integral type T, as a signed quantity.  */
779 static LONGEST
780 max_of_type (struct type *t)
781 {
782   if (TYPE_UNSIGNED (t))
783     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
784   else
785     return max_of_size (TYPE_LENGTH (t));
786 }
787
788 /* Minimum value of integral type T, as a signed quantity.  */
789 static LONGEST
790 min_of_type (struct type *t)
791 {
792   if (TYPE_UNSIGNED (t)) 
793     return 0;
794   else
795     return min_of_size (TYPE_LENGTH (t));
796 }
797
798 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
799 LONGEST
800 ada_discrete_type_high_bound (struct type *type)
801 {
802   type = resolve_dynamic_type (type, NULL, 0);
803   switch (TYPE_CODE (type))
804     {
805     case TYPE_CODE_RANGE:
806       return TYPE_HIGH_BOUND (type);
807     case TYPE_CODE_ENUM:
808       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
809     case TYPE_CODE_BOOL:
810       return 1;
811     case TYPE_CODE_CHAR:
812     case TYPE_CODE_INT:
813       return max_of_type (type);
814     default:
815       error (_("Unexpected type in ada_discrete_type_high_bound."));
816     }
817 }
818
819 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
820 LONGEST
821 ada_discrete_type_low_bound (struct type *type)
822 {
823   type = resolve_dynamic_type (type, NULL, 0);
824   switch (TYPE_CODE (type))
825     {
826     case TYPE_CODE_RANGE:
827       return TYPE_LOW_BOUND (type);
828     case TYPE_CODE_ENUM:
829       return TYPE_FIELD_ENUMVAL (type, 0);
830     case TYPE_CODE_BOOL:
831       return 0;
832     case TYPE_CODE_CHAR:
833     case TYPE_CODE_INT:
834       return min_of_type (type);
835     default:
836       error (_("Unexpected type in ada_discrete_type_low_bound."));
837     }
838 }
839
840 /* The identity on non-range types.  For range types, the underlying
841    non-range scalar type.  */
842
843 static struct type *
844 get_base_type (struct type *type)
845 {
846   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
847     {
848       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
849         return type;
850       type = TYPE_TARGET_TYPE (type);
851     }
852   return type;
853 }
854
855 /* Return a decoded version of the given VALUE.  This means returning
856    a value whose type is obtained by applying all the GNAT-specific
857    encondings, making the resulting type a static but standard description
858    of the initial type.  */
859
860 struct value *
861 ada_get_decoded_value (struct value *value)
862 {
863   struct type *type = ada_check_typedef (value_type (value));
864
865   if (ada_is_array_descriptor_type (type)
866       || (ada_is_constrained_packed_array_type (type)
867           && TYPE_CODE (type) != TYPE_CODE_PTR))
868     {
869       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
870         value = ada_coerce_to_simple_array_ptr (value);
871       else
872         value = ada_coerce_to_simple_array (value);
873     }
874   else
875     value = ada_to_fixed_value (value);
876
877   return value;
878 }
879
880 /* Same as ada_get_decoded_value, but with the given TYPE.
881    Because there is no associated actual value for this type,
882    the resulting type might be a best-effort approximation in
883    the case of dynamic types.  */
884
885 struct type *
886 ada_get_decoded_type (struct type *type)
887 {
888   type = to_static_fixed_type (type);
889   if (ada_is_constrained_packed_array_type (type))
890     type = ada_coerce_to_simple_array_type (type);
891   return type;
892 }
893
894 \f
895
896                                 /* Language Selection */
897
898 /* If the main program is in Ada, return language_ada, otherwise return LANG
899    (the main program is in Ada iif the adainit symbol is found).  */
900
901 enum language
902 ada_update_initial_language (enum language lang)
903 {
904   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
905                              (struct objfile *) NULL).minsym != NULL)
906     return language_ada;
907
908   return lang;
909 }
910
911 /* If the main procedure is written in Ada, then return its name.
912    The result is good until the next call.  Return NULL if the main
913    procedure doesn't appear to be in Ada.  */
914
915 char *
916 ada_main_name (void)
917 {
918   struct bound_minimal_symbol msym;
919   static char *main_program_name = NULL;
920
921   /* For Ada, the name of the main procedure is stored in a specific
922      string constant, generated by the binder.  Look for that symbol,
923      extract its address, and then read that string.  If we didn't find
924      that string, then most probably the main procedure is not written
925      in Ada.  */
926   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
927
928   if (msym.minsym != NULL)
929     {
930       CORE_ADDR main_program_name_addr;
931       int err_code;
932
933       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
934       if (main_program_name_addr == 0)
935         error (_("Invalid address for Ada main program name."));
936
937       xfree (main_program_name);
938       target_read_string (main_program_name_addr, &main_program_name,
939                           1024, &err_code);
940
941       if (err_code != 0)
942         return NULL;
943       return main_program_name;
944     }
945
946   /* The main procedure doesn't seem to be in Ada.  */
947   return NULL;
948 }
949 \f
950                                 /* Symbols */
951
952 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
953    of NULLs.  */
954
955 const struct ada_opname_map ada_opname_table[] = {
956   {"Oadd", "\"+\"", BINOP_ADD},
957   {"Osubtract", "\"-\"", BINOP_SUB},
958   {"Omultiply", "\"*\"", BINOP_MUL},
959   {"Odivide", "\"/\"", BINOP_DIV},
960   {"Omod", "\"mod\"", BINOP_MOD},
961   {"Orem", "\"rem\"", BINOP_REM},
962   {"Oexpon", "\"**\"", BINOP_EXP},
963   {"Olt", "\"<\"", BINOP_LESS},
964   {"Ole", "\"<=\"", BINOP_LEQ},
965   {"Ogt", "\">\"", BINOP_GTR},
966   {"Oge", "\">=\"", BINOP_GEQ},
967   {"Oeq", "\"=\"", BINOP_EQUAL},
968   {"One", "\"/=\"", BINOP_NOTEQUAL},
969   {"Oand", "\"and\"", BINOP_BITWISE_AND},
970   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
971   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
972   {"Oconcat", "\"&\"", BINOP_CONCAT},
973   {"Oabs", "\"abs\"", UNOP_ABS},
974   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
975   {"Oadd", "\"+\"", UNOP_PLUS},
976   {"Osubtract", "\"-\"", UNOP_NEG},
977   {NULL, NULL}
978 };
979
980 /* The "encoded" form of DECODED, according to GNAT conventions.
981    The result is valid until the next call to ada_encode.  */
982
983 char *
984 ada_encode (const char *decoded)
985 {
986   static char *encoding_buffer = NULL;
987   static size_t encoding_buffer_size = 0;
988   const char *p;
989   int k;
990
991   if (decoded == NULL)
992     return NULL;
993
994   GROW_VECT (encoding_buffer, encoding_buffer_size,
995              2 * strlen (decoded) + 10);
996
997   k = 0;
998   for (p = decoded; *p != '\0'; p += 1)
999     {
1000       if (*p == '.')
1001         {
1002           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
1003           k += 2;
1004         }
1005       else if (*p == '"')
1006         {
1007           const struct ada_opname_map *mapping;
1008
1009           for (mapping = ada_opname_table;
1010                mapping->encoded != NULL
1011                && !startswith (p, mapping->decoded); mapping += 1)
1012             ;
1013           if (mapping->encoded == NULL)
1014             error (_("invalid Ada operator name: %s"), p);
1015           strcpy (encoding_buffer + k, mapping->encoded);
1016           k += strlen (mapping->encoded);
1017           break;
1018         }
1019       else
1020         {
1021           encoding_buffer[k] = *p;
1022           k += 1;
1023         }
1024     }
1025
1026   encoding_buffer[k] = '\0';
1027   return encoding_buffer;
1028 }
1029
1030 /* Return NAME folded to lower case, or, if surrounded by single
1031    quotes, unfolded, but with the quotes stripped away.  Result good
1032    to next call.  */
1033
1034 char *
1035 ada_fold_name (const char *name)
1036 {
1037   static char *fold_buffer = NULL;
1038   static size_t fold_buffer_size = 0;
1039
1040   int len = strlen (name);
1041   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1042
1043   if (name[0] == '\'')
1044     {
1045       strncpy (fold_buffer, name + 1, len - 2);
1046       fold_buffer[len - 2] = '\000';
1047     }
1048   else
1049     {
1050       int i;
1051
1052       for (i = 0; i <= len; i += 1)
1053         fold_buffer[i] = tolower (name[i]);
1054     }
1055
1056   return fold_buffer;
1057 }
1058
1059 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1060
1061 static int
1062 is_lower_alphanum (const char c)
1063 {
1064   return (isdigit (c) || (isalpha (c) && islower (c)));
1065 }
1066
1067 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1068    This function saves in LEN the length of that same symbol name but
1069    without either of these suffixes:
1070      . .{DIGIT}+
1071      . ${DIGIT}+
1072      . ___{DIGIT}+
1073      . __{DIGIT}+.
1074
1075    These are suffixes introduced by the compiler for entities such as
1076    nested subprogram for instance, in order to avoid name clashes.
1077    They do not serve any purpose for the debugger.  */
1078
1079 static void
1080 ada_remove_trailing_digits (const char *encoded, int *len)
1081 {
1082   if (*len > 1 && isdigit (encoded[*len - 1]))
1083     {
1084       int i = *len - 2;
1085
1086       while (i > 0 && isdigit (encoded[i]))
1087         i--;
1088       if (i >= 0 && encoded[i] == '.')
1089         *len = i;
1090       else if (i >= 0 && encoded[i] == '$')
1091         *len = i;
1092       else if (i >= 2 && startswith (encoded + i - 2, "___"))
1093         *len = i - 2;
1094       else if (i >= 1 && startswith (encoded + i - 1, "__"))
1095         *len = i - 1;
1096     }
1097 }
1098
1099 /* Remove the suffix introduced by the compiler for protected object
1100    subprograms.  */
1101
1102 static void
1103 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1104 {
1105   /* Remove trailing N.  */
1106
1107   /* Protected entry subprograms are broken into two
1108      separate subprograms: The first one is unprotected, and has
1109      a 'N' suffix; the second is the protected version, and has
1110      the 'P' suffix.  The second calls the first one after handling
1111      the protection.  Since the P subprograms are internally generated,
1112      we leave these names undecoded, giving the user a clue that this
1113      entity is internal.  */
1114
1115   if (*len > 1
1116       && encoded[*len - 1] == 'N'
1117       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1118     *len = *len - 1;
1119 }
1120
1121 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1122
1123 static void
1124 ada_remove_Xbn_suffix (const char *encoded, int *len)
1125 {
1126   int i = *len - 1;
1127
1128   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1129     i--;
1130
1131   if (encoded[i] != 'X')
1132     return;
1133
1134   if (i == 0)
1135     return;
1136
1137   if (isalnum (encoded[i-1]))
1138     *len = i;
1139 }
1140
1141 /* If ENCODED follows the GNAT entity encoding conventions, then return
1142    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1143    replaced by ENCODED.
1144
1145    The resulting string is valid until the next call of ada_decode.
1146    If the string is unchanged by decoding, the original string pointer
1147    is returned.  */
1148
1149 const char *
1150 ada_decode (const char *encoded)
1151 {
1152   int i, j;
1153   int len0;
1154   const char *p;
1155   char *decoded;
1156   int at_start_name;
1157   static char *decoding_buffer = NULL;
1158   static size_t decoding_buffer_size = 0;
1159
1160   /* The name of the Ada main procedure starts with "_ada_".
1161      This prefix is not part of the decoded name, so skip this part
1162      if we see this prefix.  */
1163   if (startswith (encoded, "_ada_"))
1164     encoded += 5;
1165
1166   /* If the name starts with '_', then it is not a properly encoded
1167      name, so do not attempt to decode it.  Similarly, if the name
1168      starts with '<', the name should not be decoded.  */
1169   if (encoded[0] == '_' || encoded[0] == '<')
1170     goto Suppress;
1171
1172   len0 = strlen (encoded);
1173
1174   ada_remove_trailing_digits (encoded, &len0);
1175   ada_remove_po_subprogram_suffix (encoded, &len0);
1176
1177   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1178      the suffix is located before the current "end" of ENCODED.  We want
1179      to avoid re-matching parts of ENCODED that have previously been
1180      marked as discarded (by decrementing LEN0).  */
1181   p = strstr (encoded, "___");
1182   if (p != NULL && p - encoded < len0 - 3)
1183     {
1184       if (p[3] == 'X')
1185         len0 = p - encoded;
1186       else
1187         goto Suppress;
1188     }
1189
1190   /* Remove any trailing TKB suffix.  It tells us that this symbol
1191      is for the body of a task, but that information does not actually
1192      appear in the decoded name.  */
1193
1194   if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
1195     len0 -= 3;
1196
1197   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1198      from the TKB suffix because it is used for non-anonymous task
1199      bodies.  */
1200
1201   if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
1202     len0 -= 2;
1203
1204   /* Remove trailing "B" suffixes.  */
1205   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1206
1207   if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
1208     len0 -= 1;
1209
1210   /* Make decoded big enough for possible expansion by operator name.  */
1211
1212   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1213   decoded = decoding_buffer;
1214
1215   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1216
1217   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1218     {
1219       i = len0 - 2;
1220       while ((i >= 0 && isdigit (encoded[i]))
1221              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1222         i -= 1;
1223       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1224         len0 = i - 1;
1225       else if (encoded[i] == '$')
1226         len0 = i;
1227     }
1228
1229   /* The first few characters that are not alphabetic are not part
1230      of any encoding we use, so we can copy them over verbatim.  */
1231
1232   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1233     decoded[j] = encoded[i];
1234
1235   at_start_name = 1;
1236   while (i < len0)
1237     {
1238       /* Is this a symbol function?  */
1239       if (at_start_name && encoded[i] == 'O')
1240         {
1241           int k;
1242
1243           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1244             {
1245               int op_len = strlen (ada_opname_table[k].encoded);
1246               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1247                             op_len - 1) == 0)
1248                   && !isalnum (encoded[i + op_len]))
1249                 {
1250                   strcpy (decoded + j, ada_opname_table[k].decoded);
1251                   at_start_name = 0;
1252                   i += op_len;
1253                   j += strlen (ada_opname_table[k].decoded);
1254                   break;
1255                 }
1256             }
1257           if (ada_opname_table[k].encoded != NULL)
1258             continue;
1259         }
1260       at_start_name = 0;
1261
1262       /* Replace "TK__" with "__", which will eventually be translated
1263          into "." (just below).  */
1264
1265       if (i < len0 - 4 && startswith (encoded + i, "TK__"))
1266         i += 2;
1267
1268       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1269          be translated into "." (just below).  These are internal names
1270          generated for anonymous blocks inside which our symbol is nested.  */
1271
1272       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1273           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1274           && isdigit (encoded [i+4]))
1275         {
1276           int k = i + 5;
1277           
1278           while (k < len0 && isdigit (encoded[k]))
1279             k++;  /* Skip any extra digit.  */
1280
1281           /* Double-check that the "__B_{DIGITS}+" sequence we found
1282              is indeed followed by "__".  */
1283           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1284             i = k;
1285         }
1286
1287       /* Remove _E{DIGITS}+[sb] */
1288
1289       /* Just as for protected object subprograms, there are 2 categories
1290          of subprograms created by the compiler for each entry.  The first
1291          one implements the actual entry code, and has a suffix following
1292          the convention above; the second one implements the barrier and
1293          uses the same convention as above, except that the 'E' is replaced
1294          by a 'B'.
1295
1296          Just as above, we do not decode the name of barrier functions
1297          to give the user a clue that the code he is debugging has been
1298          internally generated.  */
1299
1300       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1301           && isdigit (encoded[i+2]))
1302         {
1303           int k = i + 3;
1304
1305           while (k < len0 && isdigit (encoded[k]))
1306             k++;
1307
1308           if (k < len0
1309               && (encoded[k] == 'b' || encoded[k] == 's'))
1310             {
1311               k++;
1312               /* Just as an extra precaution, make sure that if this
1313                  suffix is followed by anything else, it is a '_'.
1314                  Otherwise, we matched this sequence by accident.  */
1315               if (k == len0
1316                   || (k < len0 && encoded[k] == '_'))
1317                 i = k;
1318             }
1319         }
1320
1321       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1322          the GNAT front-end in protected object subprograms.  */
1323
1324       if (i < len0 + 3
1325           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1326         {
1327           /* Backtrack a bit up until we reach either the begining of
1328              the encoded name, or "__".  Make sure that we only find
1329              digits or lowercase characters.  */
1330           const char *ptr = encoded + i - 1;
1331
1332           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1333             ptr--;
1334           if (ptr < encoded
1335               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1336             i++;
1337         }
1338
1339       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1340         {
1341           /* This is a X[bn]* sequence not separated from the previous
1342              part of the name with a non-alpha-numeric character (in other
1343              words, immediately following an alpha-numeric character), then
1344              verify that it is placed at the end of the encoded name.  If
1345              not, then the encoding is not valid and we should abort the
1346              decoding.  Otherwise, just skip it, it is used in body-nested
1347              package names.  */
1348           do
1349             i += 1;
1350           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1351           if (i < len0)
1352             goto Suppress;
1353         }
1354       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1355         {
1356          /* Replace '__' by '.'.  */
1357           decoded[j] = '.';
1358           at_start_name = 1;
1359           i += 2;
1360           j += 1;
1361         }
1362       else
1363         {
1364           /* It's a character part of the decoded name, so just copy it
1365              over.  */
1366           decoded[j] = encoded[i];
1367           i += 1;
1368           j += 1;
1369         }
1370     }
1371   decoded[j] = '\000';
1372
1373   /* Decoded names should never contain any uppercase character.
1374      Double-check this, and abort the decoding if we find one.  */
1375
1376   for (i = 0; decoded[i] != '\0'; i += 1)
1377     if (isupper (decoded[i]) || decoded[i] == ' ')
1378       goto Suppress;
1379
1380   if (strcmp (decoded, encoded) == 0)
1381     return encoded;
1382   else
1383     return decoded;
1384
1385 Suppress:
1386   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1387   decoded = decoding_buffer;
1388   if (encoded[0] == '<')
1389     strcpy (decoded, encoded);
1390   else
1391     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1392   return decoded;
1393
1394 }
1395
1396 /* Table for keeping permanent unique copies of decoded names.  Once
1397    allocated, names in this table are never released.  While this is a
1398    storage leak, it should not be significant unless there are massive
1399    changes in the set of decoded names in successive versions of a 
1400    symbol table loaded during a single session.  */
1401 static struct htab *decoded_names_store;
1402
1403 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1404    in the language-specific part of GSYMBOL, if it has not been
1405    previously computed.  Tries to save the decoded name in the same
1406    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1407    in any case, the decoded symbol has a lifetime at least that of
1408    GSYMBOL).
1409    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1410    const, but nevertheless modified to a semantically equivalent form
1411    when a decoded name is cached in it.  */
1412
1413 const char *
1414 ada_decode_symbol (const struct general_symbol_info *arg)
1415 {
1416   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1417   const char **resultp =
1418     &gsymbol->language_specific.demangled_name;
1419
1420   if (!gsymbol->ada_mangled)
1421     {
1422       const char *decoded = ada_decode (gsymbol->name);
1423       struct obstack *obstack = gsymbol->language_specific.obstack;
1424
1425       gsymbol->ada_mangled = 1;
1426
1427       if (obstack != NULL)
1428         *resultp
1429           = (const char *) obstack_copy0 (obstack, decoded, strlen (decoded));
1430       else
1431         {
1432           /* Sometimes, we can't find a corresponding objfile, in
1433              which case, we put the result on the heap.  Since we only
1434              decode when needed, we hope this usually does not cause a
1435              significant memory leak (FIXME).  */
1436
1437           char **slot = (char **) htab_find_slot (decoded_names_store,
1438                                                   decoded, INSERT);
1439
1440           if (*slot == NULL)
1441             *slot = xstrdup (decoded);
1442           *resultp = *slot;
1443         }
1444     }
1445
1446   return *resultp;
1447 }
1448
1449 static char *
1450 ada_la_decode (const char *encoded, int options)
1451 {
1452   return xstrdup (ada_decode (encoded));
1453 }
1454
1455 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1456    suffixes that encode debugging information or leading _ada_ on
1457    SYM_NAME (see is_name_suffix commentary for the debugging
1458    information that is ignored).  If WILD, then NAME need only match a
1459    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1460    either argument is NULL.  */
1461
1462 static int
1463 match_name (const char *sym_name, const char *name, int wild)
1464 {
1465   if (sym_name == NULL || name == NULL)
1466     return 0;
1467   else if (wild)
1468     return wild_match (sym_name, name) == 0;
1469   else
1470     {
1471       int len_name = strlen (name);
1472
1473       return (strncmp (sym_name, name, len_name) == 0
1474               && is_name_suffix (sym_name + len_name))
1475         || (startswith (sym_name, "_ada_")
1476             && strncmp (sym_name + 5, name, len_name) == 0
1477             && is_name_suffix (sym_name + len_name + 5));
1478     }
1479 }
1480 \f
1481
1482                                 /* Arrays */
1483
1484 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1485    generated by the GNAT compiler to describe the index type used
1486    for each dimension of an array, check whether it follows the latest
1487    known encoding.  If not, fix it up to conform to the latest encoding.
1488    Otherwise, do nothing.  This function also does nothing if
1489    INDEX_DESC_TYPE is NULL.
1490
1491    The GNAT encoding used to describle the array index type evolved a bit.
1492    Initially, the information would be provided through the name of each
1493    field of the structure type only, while the type of these fields was
1494    described as unspecified and irrelevant.  The debugger was then expected
1495    to perform a global type lookup using the name of that field in order
1496    to get access to the full index type description.  Because these global
1497    lookups can be very expensive, the encoding was later enhanced to make
1498    the global lookup unnecessary by defining the field type as being
1499    the full index type description.
1500
1501    The purpose of this routine is to allow us to support older versions
1502    of the compiler by detecting the use of the older encoding, and by
1503    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1504    we essentially replace each field's meaningless type by the associated
1505    index subtype).  */
1506
1507 void
1508 ada_fixup_array_indexes_type (struct type *index_desc_type)
1509 {
1510   int i;
1511
1512   if (index_desc_type == NULL)
1513     return;
1514   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1515
1516   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1517      to check one field only, no need to check them all).  If not, return
1518      now.
1519
1520      If our INDEX_DESC_TYPE was generated using the older encoding,
1521      the field type should be a meaningless integer type whose name
1522      is not equal to the field name.  */
1523   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1524       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1525                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1526     return;
1527
1528   /* Fixup each field of INDEX_DESC_TYPE.  */
1529   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1530    {
1531      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1532      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1533
1534      if (raw_type)
1535        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1536    }
1537 }
1538
1539 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1540
1541 static char *bound_name[] = {
1542   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1543   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1544 };
1545
1546 /* Maximum number of array dimensions we are prepared to handle.  */
1547
1548 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1549
1550
1551 /* The desc_* routines return primitive portions of array descriptors
1552    (fat pointers).  */
1553
1554 /* The descriptor or array type, if any, indicated by TYPE; removes
1555    level of indirection, if needed.  */
1556
1557 static struct type *
1558 desc_base_type (struct type *type)
1559 {
1560   if (type == NULL)
1561     return NULL;
1562   type = ada_check_typedef (type);
1563   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1564     type = ada_typedef_target_type (type);
1565
1566   if (type != NULL
1567       && (TYPE_CODE (type) == TYPE_CODE_PTR
1568           || TYPE_CODE (type) == TYPE_CODE_REF))
1569     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1570   else
1571     return type;
1572 }
1573
1574 /* True iff TYPE indicates a "thin" array pointer type.  */
1575
1576 static int
1577 is_thin_pntr (struct type *type)
1578 {
1579   return
1580     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1581     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1582 }
1583
1584 /* The descriptor type for thin pointer type TYPE.  */
1585
1586 static struct type *
1587 thin_descriptor_type (struct type *type)
1588 {
1589   struct type *base_type = desc_base_type (type);
1590
1591   if (base_type == NULL)
1592     return NULL;
1593   if (is_suffix (ada_type_name (base_type), "___XVE"))
1594     return base_type;
1595   else
1596     {
1597       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1598
1599       if (alt_type == NULL)
1600         return base_type;
1601       else
1602         return alt_type;
1603     }
1604 }
1605
1606 /* A pointer to the array data for thin-pointer value VAL.  */
1607
1608 static struct value *
1609 thin_data_pntr (struct value *val)
1610 {
1611   struct type *type = ada_check_typedef (value_type (val));
1612   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1613
1614   data_type = lookup_pointer_type (data_type);
1615
1616   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1617     return value_cast (data_type, value_copy (val));
1618   else
1619     return value_from_longest (data_type, value_address (val));
1620 }
1621
1622 /* True iff TYPE indicates a "thick" array pointer type.  */
1623
1624 static int
1625 is_thick_pntr (struct type *type)
1626 {
1627   type = desc_base_type (type);
1628   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1629           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1630 }
1631
1632 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1633    pointer to one, the type of its bounds data; otherwise, NULL.  */
1634
1635 static struct type *
1636 desc_bounds_type (struct type *type)
1637 {
1638   struct type *r;
1639
1640   type = desc_base_type (type);
1641
1642   if (type == NULL)
1643     return NULL;
1644   else if (is_thin_pntr (type))
1645     {
1646       type = thin_descriptor_type (type);
1647       if (type == NULL)
1648         return NULL;
1649       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1650       if (r != NULL)
1651         return ada_check_typedef (r);
1652     }
1653   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1654     {
1655       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1656       if (r != NULL)
1657         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1658     }
1659   return NULL;
1660 }
1661
1662 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1663    one, a pointer to its bounds data.   Otherwise NULL.  */
1664
1665 static struct value *
1666 desc_bounds (struct value *arr)
1667 {
1668   struct type *type = ada_check_typedef (value_type (arr));
1669
1670   if (is_thin_pntr (type))
1671     {
1672       struct type *bounds_type =
1673         desc_bounds_type (thin_descriptor_type (type));
1674       LONGEST addr;
1675
1676       if (bounds_type == NULL)
1677         error (_("Bad GNAT array descriptor"));
1678
1679       /* NOTE: The following calculation is not really kosher, but
1680          since desc_type is an XVE-encoded type (and shouldn't be),
1681          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1682       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1683         addr = value_as_long (arr);
1684       else
1685         addr = value_address (arr);
1686
1687       return
1688         value_from_longest (lookup_pointer_type (bounds_type),
1689                             addr - TYPE_LENGTH (bounds_type));
1690     }
1691
1692   else if (is_thick_pntr (type))
1693     {
1694       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1695                                                _("Bad GNAT array descriptor"));
1696       struct type *p_bounds_type = value_type (p_bounds);
1697
1698       if (p_bounds_type
1699           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1700         {
1701           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1702
1703           if (TYPE_STUB (target_type))
1704             p_bounds = value_cast (lookup_pointer_type
1705                                    (ada_check_typedef (target_type)),
1706                                    p_bounds);
1707         }
1708       else
1709         error (_("Bad GNAT array descriptor"));
1710
1711       return p_bounds;
1712     }
1713   else
1714     return NULL;
1715 }
1716
1717 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1718    position of the field containing the address of the bounds data.  */
1719
1720 static int
1721 fat_pntr_bounds_bitpos (struct type *type)
1722 {
1723   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1724 }
1725
1726 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1727    size of the field containing the address of the bounds data.  */
1728
1729 static int
1730 fat_pntr_bounds_bitsize (struct type *type)
1731 {
1732   type = desc_base_type (type);
1733
1734   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1735     return TYPE_FIELD_BITSIZE (type, 1);
1736   else
1737     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1738 }
1739
1740 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1741    pointer to one, the type of its array data (a array-with-no-bounds type);
1742    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1743    data.  */
1744
1745 static struct type *
1746 desc_data_target_type (struct type *type)
1747 {
1748   type = desc_base_type (type);
1749
1750   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1751   if (is_thin_pntr (type))
1752     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1753   else if (is_thick_pntr (type))
1754     {
1755       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1756
1757       if (data_type
1758           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1759         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1760     }
1761
1762   return NULL;
1763 }
1764
1765 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1766    its array data.  */
1767
1768 static struct value *
1769 desc_data (struct value *arr)
1770 {
1771   struct type *type = value_type (arr);
1772
1773   if (is_thin_pntr (type))
1774     return thin_data_pntr (arr);
1775   else if (is_thick_pntr (type))
1776     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1777                              _("Bad GNAT array descriptor"));
1778   else
1779     return NULL;
1780 }
1781
1782
1783 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1784    position of the field containing the address of the data.  */
1785
1786 static int
1787 fat_pntr_data_bitpos (struct type *type)
1788 {
1789   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1790 }
1791
1792 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1793    size of the field containing the address of the data.  */
1794
1795 static int
1796 fat_pntr_data_bitsize (struct type *type)
1797 {
1798   type = desc_base_type (type);
1799
1800   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1801     return TYPE_FIELD_BITSIZE (type, 0);
1802   else
1803     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1804 }
1805
1806 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1807    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1808    bound, if WHICH is 1.  The first bound is I=1.  */
1809
1810 static struct value *
1811 desc_one_bound (struct value *bounds, int i, int which)
1812 {
1813   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1814                            _("Bad GNAT array descriptor bounds"));
1815 }
1816
1817 /* If BOUNDS is an array-bounds structure type, return the bit position
1818    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1819    bound, if WHICH is 1.  The first bound is I=1.  */
1820
1821 static int
1822 desc_bound_bitpos (struct type *type, int i, int which)
1823 {
1824   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1825 }
1826
1827 /* If BOUNDS is an array-bounds structure type, return the bit field size
1828    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1829    bound, if WHICH is 1.  The first bound is I=1.  */
1830
1831 static int
1832 desc_bound_bitsize (struct type *type, int i, int which)
1833 {
1834   type = desc_base_type (type);
1835
1836   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1837     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1838   else
1839     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1840 }
1841
1842 /* If TYPE is the type of an array-bounds structure, the type of its
1843    Ith bound (numbering from 1).  Otherwise, NULL.  */
1844
1845 static struct type *
1846 desc_index_type (struct type *type, int i)
1847 {
1848   type = desc_base_type (type);
1849
1850   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1851     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1852   else
1853     return NULL;
1854 }
1855
1856 /* The number of index positions in the array-bounds type TYPE.
1857    Return 0 if TYPE is NULL.  */
1858
1859 static int
1860 desc_arity (struct type *type)
1861 {
1862   type = desc_base_type (type);
1863
1864   if (type != NULL)
1865     return TYPE_NFIELDS (type) / 2;
1866   return 0;
1867 }
1868
1869 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1870    an array descriptor type (representing an unconstrained array
1871    type).  */
1872
1873 static int
1874 ada_is_direct_array_type (struct type *type)
1875 {
1876   if (type == NULL)
1877     return 0;
1878   type = ada_check_typedef (type);
1879   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1880           || ada_is_array_descriptor_type (type));
1881 }
1882
1883 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1884  * to one.  */
1885
1886 static int
1887 ada_is_array_type (struct type *type)
1888 {
1889   while (type != NULL 
1890          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1891              || TYPE_CODE (type) == TYPE_CODE_REF))
1892     type = TYPE_TARGET_TYPE (type);
1893   return ada_is_direct_array_type (type);
1894 }
1895
1896 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1897
1898 int
1899 ada_is_simple_array_type (struct type *type)
1900 {
1901   if (type == NULL)
1902     return 0;
1903   type = ada_check_typedef (type);
1904   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1905           || (TYPE_CODE (type) == TYPE_CODE_PTR
1906               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1907                  == TYPE_CODE_ARRAY));
1908 }
1909
1910 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1911
1912 int
1913 ada_is_array_descriptor_type (struct type *type)
1914 {
1915   struct type *data_type = desc_data_target_type (type);
1916
1917   if (type == NULL)
1918     return 0;
1919   type = ada_check_typedef (type);
1920   return (data_type != NULL
1921           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1922           && desc_arity (desc_bounds_type (type)) > 0);
1923 }
1924
1925 /* Non-zero iff type is a partially mal-formed GNAT array
1926    descriptor.  FIXME: This is to compensate for some problems with
1927    debugging output from GNAT.  Re-examine periodically to see if it
1928    is still needed.  */
1929
1930 int
1931 ada_is_bogus_array_descriptor (struct type *type)
1932 {
1933   return
1934     type != NULL
1935     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1936     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1937         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1938     && !ada_is_array_descriptor_type (type);
1939 }
1940
1941
1942 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1943    (fat pointer) returns the type of the array data described---specifically,
1944    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1945    in from the descriptor; otherwise, they are left unspecified.  If
1946    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1947    returns NULL.  The result is simply the type of ARR if ARR is not
1948    a descriptor.  */
1949 struct type *
1950 ada_type_of_array (struct value *arr, int bounds)
1951 {
1952   if (ada_is_constrained_packed_array_type (value_type (arr)))
1953     return decode_constrained_packed_array_type (value_type (arr));
1954
1955   if (!ada_is_array_descriptor_type (value_type (arr)))
1956     return value_type (arr);
1957
1958   if (!bounds)
1959     {
1960       struct type *array_type =
1961         ada_check_typedef (desc_data_target_type (value_type (arr)));
1962
1963       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1964         TYPE_FIELD_BITSIZE (array_type, 0) =
1965           decode_packed_array_bitsize (value_type (arr));
1966       
1967       return array_type;
1968     }
1969   else
1970     {
1971       struct type *elt_type;
1972       int arity;
1973       struct value *descriptor;
1974
1975       elt_type = ada_array_element_type (value_type (arr), -1);
1976       arity = ada_array_arity (value_type (arr));
1977
1978       if (elt_type == NULL || arity == 0)
1979         return ada_check_typedef (value_type (arr));
1980
1981       descriptor = desc_bounds (arr);
1982       if (value_as_long (descriptor) == 0)
1983         return NULL;
1984       while (arity > 0)
1985         {
1986           struct type *range_type = alloc_type_copy (value_type (arr));
1987           struct type *array_type = alloc_type_copy (value_type (arr));
1988           struct value *low = desc_one_bound (descriptor, arity, 0);
1989           struct value *high = desc_one_bound (descriptor, arity, 1);
1990
1991           arity -= 1;
1992           create_static_range_type (range_type, value_type (low),
1993                                     longest_to_int (value_as_long (low)),
1994                                     longest_to_int (value_as_long (high)));
1995           elt_type = create_array_type (array_type, elt_type, range_type);
1996
1997           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1998             {
1999               /* We need to store the element packed bitsize, as well as
2000                  recompute the array size, because it was previously
2001                  computed based on the unpacked element size.  */
2002               LONGEST lo = value_as_long (low);
2003               LONGEST hi = value_as_long (high);
2004
2005               TYPE_FIELD_BITSIZE (elt_type, 0) =
2006                 decode_packed_array_bitsize (value_type (arr));
2007               /* If the array has no element, then the size is already
2008                  zero, and does not need to be recomputed.  */
2009               if (lo < hi)
2010                 {
2011                   int array_bitsize =
2012                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2013
2014                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2015                 }
2016             }
2017         }
2018
2019       return lookup_pointer_type (elt_type);
2020     }
2021 }
2022
2023 /* If ARR does not represent an array, returns ARR unchanged.
2024    Otherwise, returns either a standard GDB array with bounds set
2025    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2026    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2027
2028 struct value *
2029 ada_coerce_to_simple_array_ptr (struct value *arr)
2030 {
2031   if (ada_is_array_descriptor_type (value_type (arr)))
2032     {
2033       struct type *arrType = ada_type_of_array (arr, 1);
2034
2035       if (arrType == NULL)
2036         return NULL;
2037       return value_cast (arrType, value_copy (desc_data (arr)));
2038     }
2039   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2040     return decode_constrained_packed_array (arr);
2041   else
2042     return arr;
2043 }
2044
2045 /* If ARR does not represent an array, returns ARR unchanged.
2046    Otherwise, returns a standard GDB array describing ARR (which may
2047    be ARR itself if it already is in the proper form).  */
2048
2049 struct value *
2050 ada_coerce_to_simple_array (struct value *arr)
2051 {
2052   if (ada_is_array_descriptor_type (value_type (arr)))
2053     {
2054       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2055
2056       if (arrVal == NULL)
2057         error (_("Bounds unavailable for null array pointer."));
2058       ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
2059       return value_ind (arrVal);
2060     }
2061   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2062     return decode_constrained_packed_array (arr);
2063   else
2064     return arr;
2065 }
2066
2067 /* If TYPE represents a GNAT array type, return it translated to an
2068    ordinary GDB array type (possibly with BITSIZE fields indicating
2069    packing).  For other types, is the identity.  */
2070
2071 struct type *
2072 ada_coerce_to_simple_array_type (struct type *type)
2073 {
2074   if (ada_is_constrained_packed_array_type (type))
2075     return decode_constrained_packed_array_type (type);
2076
2077   if (ada_is_array_descriptor_type (type))
2078     return ada_check_typedef (desc_data_target_type (type));
2079
2080   return type;
2081 }
2082
2083 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2084
2085 static int
2086 ada_is_packed_array_type  (struct type *type)
2087 {
2088   if (type == NULL)
2089     return 0;
2090   type = desc_base_type (type);
2091   type = ada_check_typedef (type);
2092   return
2093     ada_type_name (type) != NULL
2094     && strstr (ada_type_name (type), "___XP") != NULL;
2095 }
2096
2097 /* Non-zero iff TYPE represents a standard GNAT constrained
2098    packed-array type.  */
2099
2100 int
2101 ada_is_constrained_packed_array_type (struct type *type)
2102 {
2103   return ada_is_packed_array_type (type)
2104     && !ada_is_array_descriptor_type (type);
2105 }
2106
2107 /* Non-zero iff TYPE represents an array descriptor for a
2108    unconstrained packed-array type.  */
2109
2110 static int
2111 ada_is_unconstrained_packed_array_type (struct type *type)
2112 {
2113   return ada_is_packed_array_type (type)
2114     && ada_is_array_descriptor_type (type);
2115 }
2116
2117 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2118    return the size of its elements in bits.  */
2119
2120 static long
2121 decode_packed_array_bitsize (struct type *type)
2122 {
2123   const char *raw_name;
2124   const char *tail;
2125   long bits;
2126
2127   /* Access to arrays implemented as fat pointers are encoded as a typedef
2128      of the fat pointer type.  We need the name of the fat pointer type
2129      to do the decoding, so strip the typedef layer.  */
2130   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2131     type = ada_typedef_target_type (type);
2132
2133   raw_name = ada_type_name (ada_check_typedef (type));
2134   if (!raw_name)
2135     raw_name = ada_type_name (desc_base_type (type));
2136
2137   if (!raw_name)
2138     return 0;
2139
2140   tail = strstr (raw_name, "___XP");
2141   gdb_assert (tail != NULL);
2142
2143   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2144     {
2145       lim_warning
2146         (_("could not understand bit size information on packed array"));
2147       return 0;
2148     }
2149
2150   return bits;
2151 }
2152
2153 /* Given that TYPE is a standard GDB array type with all bounds filled
2154    in, and that the element size of its ultimate scalar constituents
2155    (that is, either its elements, or, if it is an array of arrays, its
2156    elements' elements, etc.) is *ELT_BITS, return an identical type,
2157    but with the bit sizes of its elements (and those of any
2158    constituent arrays) recorded in the BITSIZE components of its
2159    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2160    in bits.
2161
2162    Note that, for arrays whose index type has an XA encoding where
2163    a bound references a record discriminant, getting that discriminant,
2164    and therefore the actual value of that bound, is not possible
2165    because none of the given parameters gives us access to the record.
2166    This function assumes that it is OK in the context where it is being
2167    used to return an array whose bounds are still dynamic and where
2168    the length is arbitrary.  */
2169
2170 static struct type *
2171 constrained_packed_array_type (struct type *type, long *elt_bits)
2172 {
2173   struct type *new_elt_type;
2174   struct type *new_type;
2175   struct type *index_type_desc;
2176   struct type *index_type;
2177   LONGEST low_bound, high_bound;
2178
2179   type = ada_check_typedef (type);
2180   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2181     return type;
2182
2183   index_type_desc = ada_find_parallel_type (type, "___XA");
2184   if (index_type_desc)
2185     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2186                                       NULL);
2187   else
2188     index_type = TYPE_INDEX_TYPE (type);
2189
2190   new_type = alloc_type_copy (type);
2191   new_elt_type =
2192     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2193                                    elt_bits);
2194   create_array_type (new_type, new_elt_type, index_type);
2195   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2196   TYPE_NAME (new_type) = ada_type_name (type);
2197
2198   if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2199        && is_dynamic_type (check_typedef (index_type)))
2200       || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2201     low_bound = high_bound = 0;
2202   if (high_bound < low_bound)
2203     *elt_bits = TYPE_LENGTH (new_type) = 0;
2204   else
2205     {
2206       *elt_bits *= (high_bound - low_bound + 1);
2207       TYPE_LENGTH (new_type) =
2208         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2209     }
2210
2211   TYPE_FIXED_INSTANCE (new_type) = 1;
2212   return new_type;
2213 }
2214
2215 /* The array type encoded by TYPE, where
2216    ada_is_constrained_packed_array_type (TYPE).  */
2217
2218 static struct type *
2219 decode_constrained_packed_array_type (struct type *type)
2220 {
2221   const char *raw_name = ada_type_name (ada_check_typedef (type));
2222   char *name;
2223   const char *tail;
2224   struct type *shadow_type;
2225   long bits;
2226
2227   if (!raw_name)
2228     raw_name = ada_type_name (desc_base_type (type));
2229
2230   if (!raw_name)
2231     return NULL;
2232
2233   name = (char *) alloca (strlen (raw_name) + 1);
2234   tail = strstr (raw_name, "___XP");
2235   type = desc_base_type (type);
2236
2237   memcpy (name, raw_name, tail - raw_name);
2238   name[tail - raw_name] = '\000';
2239
2240   shadow_type = ada_find_parallel_type_with_name (type, name);
2241
2242   if (shadow_type == NULL)
2243     {
2244       lim_warning (_("could not find bounds information on packed array"));
2245       return NULL;
2246     }
2247   shadow_type = check_typedef (shadow_type);
2248
2249   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2250     {
2251       lim_warning (_("could not understand bounds "
2252                      "information on packed array"));
2253       return NULL;
2254     }
2255
2256   bits = decode_packed_array_bitsize (type);
2257   return constrained_packed_array_type (shadow_type, &bits);
2258 }
2259
2260 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2261    array, returns a simple array that denotes that array.  Its type is a
2262    standard GDB array type except that the BITSIZEs of the array
2263    target types are set to the number of bits in each element, and the
2264    type length is set appropriately.  */
2265
2266 static struct value *
2267 decode_constrained_packed_array (struct value *arr)
2268 {
2269   struct type *type;
2270
2271   /* If our value is a pointer, then dereference it. Likewise if
2272      the value is a reference.  Make sure that this operation does not
2273      cause the target type to be fixed, as this would indirectly cause
2274      this array to be decoded.  The rest of the routine assumes that
2275      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2276      and "value_ind" routines to perform the dereferencing, as opposed
2277      to using "ada_coerce_ref" or "ada_value_ind".  */
2278   arr = coerce_ref (arr);
2279   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2280     arr = value_ind (arr);
2281
2282   type = decode_constrained_packed_array_type (value_type (arr));
2283   if (type == NULL)
2284     {
2285       error (_("can't unpack array"));
2286       return NULL;
2287     }
2288
2289   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2290       && ada_is_modular_type (value_type (arr)))
2291     {
2292        /* This is a (right-justified) modular type representing a packed
2293          array with no wrapper.  In order to interpret the value through
2294          the (left-justified) packed array type we just built, we must
2295          first left-justify it.  */
2296       int bit_size, bit_pos;
2297       ULONGEST mod;
2298
2299       mod = ada_modulus (value_type (arr)) - 1;
2300       bit_size = 0;
2301       while (mod > 0)
2302         {
2303           bit_size += 1;
2304           mod >>= 1;
2305         }
2306       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2307       arr = ada_value_primitive_packed_val (arr, NULL,
2308                                             bit_pos / HOST_CHAR_BIT,
2309                                             bit_pos % HOST_CHAR_BIT,
2310                                             bit_size,
2311                                             type);
2312     }
2313
2314   return coerce_unspec_val_to_type (arr, type);
2315 }
2316
2317
2318 /* The value of the element of packed array ARR at the ARITY indices
2319    given in IND.   ARR must be a simple array.  */
2320
2321 static struct value *
2322 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2323 {
2324   int i;
2325   int bits, elt_off, bit_off;
2326   long elt_total_bit_offset;
2327   struct type *elt_type;
2328   struct value *v;
2329
2330   bits = 0;
2331   elt_total_bit_offset = 0;
2332   elt_type = ada_check_typedef (value_type (arr));
2333   for (i = 0; i < arity; i += 1)
2334     {
2335       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2336           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2337         error
2338           (_("attempt to do packed indexing of "
2339              "something other than a packed array"));
2340       else
2341         {
2342           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2343           LONGEST lowerbound, upperbound;
2344           LONGEST idx;
2345
2346           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2347             {
2348               lim_warning (_("don't know bounds of array"));
2349               lowerbound = upperbound = 0;
2350             }
2351
2352           idx = pos_atr (ind[i]);
2353           if (idx < lowerbound || idx > upperbound)
2354             lim_warning (_("packed array index %ld out of bounds"),
2355                          (long) idx);
2356           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2357           elt_total_bit_offset += (idx - lowerbound) * bits;
2358           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2359         }
2360     }
2361   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2362   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2363
2364   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2365                                       bits, elt_type);
2366   return v;
2367 }
2368
2369 /* Non-zero iff TYPE includes negative integer values.  */
2370
2371 static int
2372 has_negatives (struct type *type)
2373 {
2374   switch (TYPE_CODE (type))
2375     {
2376     default:
2377       return 0;
2378     case TYPE_CODE_INT:
2379       return !TYPE_UNSIGNED (type);
2380     case TYPE_CODE_RANGE:
2381       return TYPE_LOW_BOUND (type) < 0;
2382     }
2383 }
2384
2385 /* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
2386    unpack that data into UNPACKED.  UNPACKED_LEN is the size in bytes of
2387    the unpacked buffer.
2388
2389    The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2390    enough to contain at least BIT_OFFSET bits.  If not, an error is raised.
2391
2392    IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2393    zero otherwise.
2394
2395    IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
2396
2397    IS_SCALAR is nonzero if the data corresponds to a signed type.  */
2398
2399 static void
2400 ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2401                           gdb_byte *unpacked, int unpacked_len,
2402                           int is_big_endian, int is_signed_type,
2403                           int is_scalar)
2404 {
2405   int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2406   int src_idx;                  /* Index into the source area */
2407   int src_bytes_left;           /* Number of source bytes left to process.  */
2408   int srcBitsLeft;              /* Number of source bits left to move */
2409   int unusedLS;                 /* Number of bits in next significant
2410                                    byte of source that are unused */
2411
2412   int unpacked_idx;             /* Index into the unpacked buffer */
2413   int unpacked_bytes_left;      /* Number of bytes left to set in unpacked.  */
2414
2415   unsigned long accum;          /* Staging area for bits being transferred */
2416   int accumSize;                /* Number of meaningful bits in accum */
2417   unsigned char sign;
2418
2419   /* Transmit bytes from least to most significant; delta is the direction
2420      the indices move.  */
2421   int delta = is_big_endian ? -1 : 1;
2422
2423   /* Make sure that unpacked is large enough to receive the BIT_SIZE
2424      bits from SRC.  .*/
2425   if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2426     error (_("Cannot unpack %d bits into buffer of %d bytes"),
2427            bit_size, unpacked_len);
2428
2429   srcBitsLeft = bit_size;
2430   src_bytes_left = src_len;
2431   unpacked_bytes_left = unpacked_len;
2432   sign = 0;
2433
2434   if (is_big_endian)
2435     {
2436       src_idx = src_len - 1;
2437       if (is_signed_type
2438           && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2439         sign = ~0;
2440
2441       unusedLS =
2442         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2443         % HOST_CHAR_BIT;
2444
2445       if (is_scalar)
2446         {
2447           accumSize = 0;
2448           unpacked_idx = unpacked_len - 1;
2449         }
2450       else
2451         {
2452           /* Non-scalar values must be aligned at a byte boundary...  */
2453           accumSize =
2454             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2455           /* ... And are placed at the beginning (most-significant) bytes
2456              of the target.  */
2457           unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2458           unpacked_bytes_left = unpacked_idx + 1;
2459         }
2460     }
2461   else
2462     {
2463       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2464
2465       src_idx = unpacked_idx = 0;
2466       unusedLS = bit_offset;
2467       accumSize = 0;
2468
2469       if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
2470         sign = ~0;
2471     }
2472
2473   accum = 0;
2474   while (src_bytes_left > 0)
2475     {
2476       /* Mask for removing bits of the next source byte that are not
2477          part of the value.  */
2478       unsigned int unusedMSMask =
2479         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2480         1;
2481       /* Sign-extend bits for this byte.  */
2482       unsigned int signMask = sign & ~unusedMSMask;
2483
2484       accum |=
2485         (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2486       accumSize += HOST_CHAR_BIT - unusedLS;
2487       if (accumSize >= HOST_CHAR_BIT)
2488         {
2489           unpacked[unpacked_idx] = accum & ~(~0L << HOST_CHAR_BIT);
2490           accumSize -= HOST_CHAR_BIT;
2491           accum >>= HOST_CHAR_BIT;
2492           unpacked_bytes_left -= 1;
2493           unpacked_idx += delta;
2494         }
2495       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2496       unusedLS = 0;
2497       src_bytes_left -= 1;
2498       src_idx += delta;
2499     }
2500   while (unpacked_bytes_left > 0)
2501     {
2502       accum |= sign << accumSize;
2503       unpacked[unpacked_idx] = accum & ~(~0L << HOST_CHAR_BIT);
2504       accumSize -= HOST_CHAR_BIT;
2505       if (accumSize < 0)
2506         accumSize = 0;
2507       accum >>= HOST_CHAR_BIT;
2508       unpacked_bytes_left -= 1;
2509       unpacked_idx += delta;
2510     }
2511 }
2512
2513 /* Create a new value of type TYPE from the contents of OBJ starting
2514    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2515    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2516    assigning through the result will set the field fetched from.
2517    VALADDR is ignored unless OBJ is NULL, in which case,
2518    VALADDR+OFFSET must address the start of storage containing the 
2519    packed value.  The value returned  in this case is never an lval.
2520    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2521
2522 struct value *
2523 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2524                                 long offset, int bit_offset, int bit_size,
2525                                 struct type *type)
2526 {
2527   struct value *v;
2528   const gdb_byte *src;                /* First byte containing data to unpack */
2529   gdb_byte *unpacked;
2530   const int is_scalar = is_scalar_type (type);
2531   const int is_big_endian = gdbarch_bits_big_endian (get_type_arch (type));
2532   gdb_byte *staging = NULL;
2533   int staging_len = 0;
2534   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
2535
2536   type = ada_check_typedef (type);
2537
2538   if (obj == NULL)
2539     src = valaddr + offset;
2540   else
2541     src = value_contents (obj) + offset;
2542
2543   if (is_dynamic_type (type))
2544     {
2545       /* The length of TYPE might by dynamic, so we need to resolve
2546          TYPE in order to know its actual size, which we then use
2547          to create the contents buffer of the value we return.
2548          The difficulty is that the data containing our object is
2549          packed, and therefore maybe not at a byte boundary.  So, what
2550          we do, is unpack the data into a byte-aligned buffer, and then
2551          use that buffer as our object's value for resolving the type.  */
2552       staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2553       staging = (gdb_byte *) malloc (staging_len);
2554       make_cleanup (xfree, staging);
2555
2556       ada_unpack_from_contents (src, bit_offset, bit_size,
2557                                 staging, staging_len,
2558                                 is_big_endian, has_negatives (type),
2559                                 is_scalar);
2560       type = resolve_dynamic_type (type, staging, 0);
2561       if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2562         {
2563           /* This happens when the length of the object is dynamic,
2564              and is actually smaller than the space reserved for it.
2565              For instance, in an array of variant records, the bit_size
2566              we're given is the array stride, which is constant and
2567              normally equal to the maximum size of its element.
2568              But, in reality, each element only actually spans a portion
2569              of that stride.  */
2570           bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2571         }
2572     }
2573
2574   if (obj == NULL)
2575     {
2576       v = allocate_value (type);
2577       src = valaddr + offset;
2578     }
2579   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2580     {
2581       int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2582       gdb_byte *buf;
2583
2584       v = value_at (type, value_address (obj) + offset);
2585       buf = (gdb_byte *) alloca (src_len);
2586       read_memory (value_address (v), buf, src_len);
2587       src = buf;
2588     }
2589   else
2590     {
2591       v = allocate_value (type);
2592       src = value_contents (obj) + offset;
2593     }
2594
2595   if (obj != NULL)
2596     {
2597       long new_offset = offset;
2598
2599       set_value_component_location (v, obj);
2600       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2601       set_value_bitsize (v, bit_size);
2602       if (value_bitpos (v) >= HOST_CHAR_BIT)
2603         {
2604           ++new_offset;
2605           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2606         }
2607       set_value_offset (v, new_offset);
2608
2609       /* Also set the parent value.  This is needed when trying to
2610          assign a new value (in inferior memory).  */
2611       set_value_parent (v, obj);
2612     }
2613   else
2614     set_value_bitsize (v, bit_size);
2615   unpacked = value_contents_writeable (v);
2616
2617   if (bit_size == 0)
2618     {
2619       memset (unpacked, 0, TYPE_LENGTH (type));
2620       do_cleanups (old_chain);
2621       return v;
2622     }
2623
2624   if (staging != NULL && staging_len == TYPE_LENGTH (type))
2625     {
2626       /* Small short-cut: If we've unpacked the data into a buffer
2627          of the same size as TYPE's length, then we can reuse that,
2628          instead of doing the unpacking again.  */
2629       memcpy (unpacked, staging, staging_len);
2630     }
2631   else
2632     ada_unpack_from_contents (src, bit_offset, bit_size,
2633                               unpacked, TYPE_LENGTH (type),
2634                               is_big_endian, has_negatives (type), is_scalar);
2635
2636   do_cleanups (old_chain);
2637   return v;
2638 }
2639
2640 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2641    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2642    not overlap.  */
2643 static void
2644 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2645            int src_offset, int n, int bits_big_endian_p)
2646 {
2647   unsigned int accum, mask;
2648   int accum_bits, chunk_size;
2649
2650   target += targ_offset / HOST_CHAR_BIT;
2651   targ_offset %= HOST_CHAR_BIT;
2652   source += src_offset / HOST_CHAR_BIT;
2653   src_offset %= HOST_CHAR_BIT;
2654   if (bits_big_endian_p)
2655     {
2656       accum = (unsigned char) *source;
2657       source += 1;
2658       accum_bits = HOST_CHAR_BIT - src_offset;
2659
2660       while (n > 0)
2661         {
2662           int unused_right;
2663
2664           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2665           accum_bits += HOST_CHAR_BIT;
2666           source += 1;
2667           chunk_size = HOST_CHAR_BIT - targ_offset;
2668           if (chunk_size > n)
2669             chunk_size = n;
2670           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2671           mask = ((1 << chunk_size) - 1) << unused_right;
2672           *target =
2673             (*target & ~mask)
2674             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2675           n -= chunk_size;
2676           accum_bits -= chunk_size;
2677           target += 1;
2678           targ_offset = 0;
2679         }
2680     }
2681   else
2682     {
2683       accum = (unsigned char) *source >> src_offset;
2684       source += 1;
2685       accum_bits = HOST_CHAR_BIT - src_offset;
2686
2687       while (n > 0)
2688         {
2689           accum = accum + ((unsigned char) *source << accum_bits);
2690           accum_bits += HOST_CHAR_BIT;
2691           source += 1;
2692           chunk_size = HOST_CHAR_BIT - targ_offset;
2693           if (chunk_size > n)
2694             chunk_size = n;
2695           mask = ((1 << chunk_size) - 1) << targ_offset;
2696           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2697           n -= chunk_size;
2698           accum_bits -= chunk_size;
2699           accum >>= chunk_size;
2700           target += 1;
2701           targ_offset = 0;
2702         }
2703     }
2704 }
2705
2706 /* Store the contents of FROMVAL into the location of TOVAL.
2707    Return a new value with the location of TOVAL and contents of
2708    FROMVAL.   Handles assignment into packed fields that have
2709    floating-point or non-scalar types.  */
2710
2711 static struct value *
2712 ada_value_assign (struct value *toval, struct value *fromval)
2713 {
2714   struct type *type = value_type (toval);
2715   int bits = value_bitsize (toval);
2716
2717   toval = ada_coerce_ref (toval);
2718   fromval = ada_coerce_ref (fromval);
2719
2720   if (ada_is_direct_array_type (value_type (toval)))
2721     toval = ada_coerce_to_simple_array (toval);
2722   if (ada_is_direct_array_type (value_type (fromval)))
2723     fromval = ada_coerce_to_simple_array (fromval);
2724
2725   if (!deprecated_value_modifiable (toval))
2726     error (_("Left operand of assignment is not a modifiable lvalue."));
2727
2728   if (VALUE_LVAL (toval) == lval_memory
2729       && bits > 0
2730       && (TYPE_CODE (type) == TYPE_CODE_FLT
2731           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2732     {
2733       int len = (value_bitpos (toval)
2734                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2735       int from_size;
2736       gdb_byte *buffer = (gdb_byte *) alloca (len);
2737       struct value *val;
2738       CORE_ADDR to_addr = value_address (toval);
2739
2740       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2741         fromval = value_cast (type, fromval);
2742
2743       read_memory (to_addr, buffer, len);
2744       from_size = value_bitsize (fromval);
2745       if (from_size == 0)
2746         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2747       if (gdbarch_bits_big_endian (get_type_arch (type)))
2748         move_bits (buffer, value_bitpos (toval),
2749                    value_contents (fromval), from_size - bits, bits, 1);
2750       else
2751         move_bits (buffer, value_bitpos (toval),
2752                    value_contents (fromval), 0, bits, 0);
2753       write_memory_with_notification (to_addr, buffer, len);
2754
2755       val = value_copy (toval);
2756       memcpy (value_contents_raw (val), value_contents (fromval),
2757               TYPE_LENGTH (type));
2758       deprecated_set_value_type (val, type);
2759
2760       return val;
2761     }
2762
2763   return value_assign (toval, fromval);
2764 }
2765
2766
2767 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2768    CONTAINER, assign the contents of VAL to COMPONENTS's place in
2769    CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not
2770    COMPONENT, and not the inferior's memory.  The current contents
2771    of COMPONENT are ignored.
2772
2773    Although not part of the initial design, this function also works
2774    when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2775    had a null address, and COMPONENT had an address which is equal to
2776    its offset inside CONTAINER.  */
2777
2778 static void
2779 value_assign_to_component (struct value *container, struct value *component,
2780                            struct value *val)
2781 {
2782   LONGEST offset_in_container =
2783     (LONGEST)  (value_address (component) - value_address (container));
2784   int bit_offset_in_container =
2785     value_bitpos (component) - value_bitpos (container);
2786   int bits;
2787
2788   val = value_cast (value_type (component), val);
2789
2790   if (value_bitsize (component) == 0)
2791     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2792   else
2793     bits = value_bitsize (component);
2794
2795   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2796     move_bits (value_contents_writeable (container) + offset_in_container,
2797                value_bitpos (container) + bit_offset_in_container,
2798                value_contents (val),
2799                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2800                bits, 1);
2801   else
2802     move_bits (value_contents_writeable (container) + offset_in_container,
2803                value_bitpos (container) + bit_offset_in_container,
2804                value_contents (val), 0, bits, 0);
2805 }
2806
2807 /* The value of the element of array ARR at the ARITY indices given in IND.
2808    ARR may be either a simple array, GNAT array descriptor, or pointer
2809    thereto.  */
2810
2811 struct value *
2812 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2813 {
2814   int k;
2815   struct value *elt;
2816   struct type *elt_type;
2817
2818   elt = ada_coerce_to_simple_array (arr);
2819
2820   elt_type = ada_check_typedef (value_type (elt));
2821   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2822       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2823     return value_subscript_packed (elt, arity, ind);
2824
2825   for (k = 0; k < arity; k += 1)
2826     {
2827       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2828         error (_("too many subscripts (%d expected)"), k);
2829       elt = value_subscript (elt, pos_atr (ind[k]));
2830     }
2831   return elt;
2832 }
2833
2834 /* Assuming ARR is a pointer to a GDB array, the value of the element
2835    of *ARR at the ARITY indices given in IND.
2836    Does not read the entire array into memory.
2837
2838    Note: Unlike what one would expect, this function is used instead of
2839    ada_value_subscript for basically all non-packed array types.  The reason
2840    for this is that a side effect of doing our own pointer arithmetics instead
2841    of relying on value_subscript is that there is no implicit typedef peeling.
2842    This is important for arrays of array accesses, where it allows us to
2843    preserve the fact that the array's element is an array access, where the
2844    access part os encoded in a typedef layer.  */
2845
2846 static struct value *
2847 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2848 {
2849   int k;
2850   struct value *array_ind = ada_value_ind (arr);
2851   struct type *type
2852     = check_typedef (value_enclosing_type (array_ind));
2853
2854   if (TYPE_CODE (type) == TYPE_CODE_ARRAY
2855       && TYPE_FIELD_BITSIZE (type, 0) > 0)
2856     return value_subscript_packed (array_ind, arity, ind);
2857
2858   for (k = 0; k < arity; k += 1)
2859     {
2860       LONGEST lwb, upb;
2861       struct value *lwb_value;
2862
2863       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2864         error (_("too many subscripts (%d expected)"), k);
2865       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2866                         value_copy (arr));
2867       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2868       lwb_value = value_from_longest (value_type(ind[k]), lwb);
2869       arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value));
2870       type = TYPE_TARGET_TYPE (type);
2871     }
2872
2873   return value_ind (arr);
2874 }
2875
2876 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2877    actual type of ARRAY_PTR is ignored), returns the Ada slice of
2878    HIGH'Pos-LOW'Pos+1 elements starting at index LOW.  The lower bound of
2879    this array is LOW, as per Ada rules.  */
2880 static struct value *
2881 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2882                           int low, int high)
2883 {
2884   struct type *type0 = ada_check_typedef (type);
2885   struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
2886   struct type *index_type
2887     = create_static_range_type (NULL, base_index_type, low, high);
2888   struct type *slice_type =
2889     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2890   int base_low =  ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
2891   LONGEST base_low_pos, low_pos;
2892   CORE_ADDR base;
2893
2894   if (!discrete_position (base_index_type, low, &low_pos)
2895       || !discrete_position (base_index_type, base_low, &base_low_pos))
2896     {
2897       warning (_("unable to get positions in slice, use bounds instead"));
2898       low_pos = low;
2899       base_low_pos = base_low;
2900     }
2901
2902   base = value_as_address (array_ptr)
2903     + ((low_pos - base_low_pos)
2904        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2905   return value_at_lazy (slice_type, base);
2906 }
2907
2908
2909 static struct value *
2910 ada_value_slice (struct value *array, int low, int high)
2911 {
2912   struct type *type = ada_check_typedef (value_type (array));
2913   struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2914   struct type *index_type
2915     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2916   struct type *slice_type =
2917     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2918   LONGEST low_pos, high_pos;
2919
2920   if (!discrete_position (base_index_type, low, &low_pos)
2921       || !discrete_position (base_index_type, high, &high_pos))
2922     {
2923       warning (_("unable to get positions in slice, use bounds instead"));
2924       low_pos = low;
2925       high_pos = high;
2926     }
2927
2928   return value_cast (slice_type,
2929                      value_slice (array, low, high_pos - low_pos + 1));
2930 }
2931
2932 /* If type is a record type in the form of a standard GNAT array
2933    descriptor, returns the number of dimensions for type.  If arr is a
2934    simple array, returns the number of "array of"s that prefix its
2935    type designation.  Otherwise, returns 0.  */
2936
2937 int
2938 ada_array_arity (struct type *type)
2939 {
2940   int arity;
2941
2942   if (type == NULL)
2943     return 0;
2944
2945   type = desc_base_type (type);
2946
2947   arity = 0;
2948   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2949     return desc_arity (desc_bounds_type (type));
2950   else
2951     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2952       {
2953         arity += 1;
2954         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2955       }
2956
2957   return arity;
2958 }
2959
2960 /* If TYPE is a record type in the form of a standard GNAT array
2961    descriptor or a simple array type, returns the element type for
2962    TYPE after indexing by NINDICES indices, or by all indices if
2963    NINDICES is -1.  Otherwise, returns NULL.  */
2964
2965 struct type *
2966 ada_array_element_type (struct type *type, int nindices)
2967 {
2968   type = desc_base_type (type);
2969
2970   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2971     {
2972       int k;
2973       struct type *p_array_type;
2974
2975       p_array_type = desc_data_target_type (type);
2976
2977       k = ada_array_arity (type);
2978       if (k == 0)
2979         return NULL;
2980
2981       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2982       if (nindices >= 0 && k > nindices)
2983         k = nindices;
2984       while (k > 0 && p_array_type != NULL)
2985         {
2986           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2987           k -= 1;
2988         }
2989       return p_array_type;
2990     }
2991   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2992     {
2993       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2994         {
2995           type = TYPE_TARGET_TYPE (type);
2996           nindices -= 1;
2997         }
2998       return type;
2999     }
3000
3001   return NULL;
3002 }
3003
3004 /* The type of nth index in arrays of given type (n numbering from 1).
3005    Does not examine memory.  Throws an error if N is invalid or TYPE
3006    is not an array type.  NAME is the name of the Ada attribute being
3007    evaluated ('range, 'first, 'last, or 'length); it is used in building
3008    the error message.  */
3009
3010 static struct type *
3011 ada_index_type (struct type *type, int n, const char *name)
3012 {
3013   struct type *result_type;
3014
3015   type = desc_base_type (type);
3016
3017   if (n < 0 || n > ada_array_arity (type))
3018     error (_("invalid dimension number to '%s"), name);
3019
3020   if (ada_is_simple_array_type (type))
3021     {
3022       int i;
3023
3024       for (i = 1; i < n; i += 1)
3025         type = TYPE_TARGET_TYPE (type);
3026       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
3027       /* FIXME: The stabs type r(0,0);bound;bound in an array type
3028          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
3029          perhaps stabsread.c would make more sense.  */
3030       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
3031         result_type = NULL;
3032     }
3033   else
3034     {
3035       result_type = desc_index_type (desc_bounds_type (type), n);
3036       if (result_type == NULL)
3037         error (_("attempt to take bound of something that is not an array"));
3038     }
3039
3040   return result_type;
3041 }
3042
3043 /* Given that arr is an array type, returns the lower bound of the
3044    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
3045    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
3046    array-descriptor type.  It works for other arrays with bounds supplied
3047    by run-time quantities other than discriminants.  */
3048
3049 static LONGEST
3050 ada_array_bound_from_type (struct type *arr_type, int n, int which)
3051 {
3052   struct type *type, *index_type_desc, *index_type;
3053   int i;
3054
3055   gdb_assert (which == 0 || which == 1);
3056
3057   if (ada_is_constrained_packed_array_type (arr_type))
3058     arr_type = decode_constrained_packed_array_type (arr_type);
3059
3060   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
3061     return (LONGEST) - which;
3062
3063   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
3064     type = TYPE_TARGET_TYPE (arr_type);
3065   else
3066     type = arr_type;
3067
3068   if (TYPE_FIXED_INSTANCE (type))
3069     {
3070       /* The array has already been fixed, so we do not need to
3071          check the parallel ___XA type again.  That encoding has
3072          already been applied, so ignore it now.  */
3073       index_type_desc = NULL;
3074     }
3075   else
3076     {
3077       index_type_desc = ada_find_parallel_type (type, "___XA");
3078       ada_fixup_array_indexes_type (index_type_desc);
3079     }
3080
3081   if (index_type_desc != NULL)
3082     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
3083                                       NULL);
3084   else
3085     {
3086       struct type *elt_type = check_typedef (type);
3087
3088       for (i = 1; i < n; i++)
3089         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
3090
3091       index_type = TYPE_INDEX_TYPE (elt_type);
3092     }
3093
3094   return
3095     (LONGEST) (which == 0
3096                ? ada_discrete_type_low_bound (index_type)
3097                : ada_discrete_type_high_bound (index_type));
3098 }
3099
3100 /* Given that arr is an array value, returns the lower bound of the
3101    nth index (numbering from 1) if WHICH is 0, and the upper bound if
3102    WHICH is 1.  This routine will also work for arrays with bounds
3103    supplied by run-time quantities other than discriminants.  */
3104
3105 static LONGEST
3106 ada_array_bound (struct value *arr, int n, int which)
3107 {
3108   struct type *arr_type;
3109
3110   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3111     arr = value_ind (arr);
3112   arr_type = value_enclosing_type (arr);
3113
3114   if (ada_is_constrained_packed_array_type (arr_type))
3115     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
3116   else if (ada_is_simple_array_type (arr_type))
3117     return ada_array_bound_from_type (arr_type, n, which);
3118   else
3119     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
3120 }
3121
3122 /* Given that arr is an array value, returns the length of the
3123    nth index.  This routine will also work for arrays with bounds
3124    supplied by run-time quantities other than discriminants.
3125    Does not work for arrays indexed by enumeration types with representation
3126    clauses at the moment.  */
3127
3128 static LONGEST
3129 ada_array_length (struct value *arr, int n)
3130 {
3131   struct type *arr_type, *index_type;
3132   int low, high;
3133
3134   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3135     arr = value_ind (arr);
3136   arr_type = value_enclosing_type (arr);
3137
3138   if (ada_is_constrained_packed_array_type (arr_type))
3139     return ada_array_length (decode_constrained_packed_array (arr), n);
3140
3141   if (ada_is_simple_array_type (arr_type))
3142     {
3143       low = ada_array_bound_from_type (arr_type, n, 0);
3144       high = ada_array_bound_from_type (arr_type, n, 1);
3145     }
3146   else
3147     {
3148       low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3149       high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3150     }
3151
3152   arr_type = check_typedef (arr_type);
3153   index_type = TYPE_INDEX_TYPE (arr_type);
3154   if (index_type != NULL)
3155     {
3156       struct type *base_type;
3157       if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
3158         base_type = TYPE_TARGET_TYPE (index_type);
3159       else
3160         base_type = index_type;
3161
3162       low = pos_atr (value_from_longest (base_type, low));
3163       high = pos_atr (value_from_longest (base_type, high));
3164     }
3165   return high - low + 1;
3166 }
3167
3168 /* An empty array whose type is that of ARR_TYPE (an array type),
3169    with bounds LOW to LOW-1.  */
3170
3171 static struct value *
3172 empty_array (struct type *arr_type, int low)
3173 {
3174   struct type *arr_type0 = ada_check_typedef (arr_type);
3175   struct type *index_type
3176     = create_static_range_type
3177         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
3178   struct type *elt_type = ada_array_element_type (arr_type0, 1);
3179
3180   return allocate_value (create_array_type (NULL, elt_type, index_type));
3181 }
3182 \f
3183
3184                                 /* Name resolution */
3185
3186 /* The "decoded" name for the user-definable Ada operator corresponding
3187    to OP.  */
3188
3189 static const char *
3190 ada_decoded_op_name (enum exp_opcode op)
3191 {
3192   int i;
3193
3194   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3195     {
3196       if (ada_opname_table[i].op == op)
3197         return ada_opname_table[i].decoded;
3198     }
3199   error (_("Could not find operator name for opcode"));
3200 }
3201
3202
3203 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3204    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3205    undefined namespace) and converts operators that are
3206    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3207    non-null, it provides a preferred result type [at the moment, only
3208    type void has any effect---causing procedures to be preferred over
3209    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3210    return type is preferred.  May change (expand) *EXP.  */
3211
3212 static void
3213 resolve (struct expression **expp, int void_context_p)
3214 {
3215   struct type *context_type = NULL;
3216   int pc = 0;
3217
3218   if (void_context_p)
3219     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3220
3221   resolve_subexp (expp, &pc, 1, context_type);
3222 }
3223
3224 /* Resolve the operator of the subexpression beginning at
3225    position *POS of *EXPP.  "Resolving" consists of replacing
3226    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3227    with their resolutions, replacing built-in operators with
3228    function calls to user-defined operators, where appropriate, and,
3229    when DEPROCEDURE_P is non-zero, converting function-valued variables
3230    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3231    are as in ada_resolve, above.  */
3232
3233 static struct value *
3234 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3235                 struct type *context_type)
3236 {
3237   int pc = *pos;
3238   int i;
3239   struct expression *exp;       /* Convenience: == *expp.  */
3240   enum exp_opcode op = (*expp)->elts[pc].opcode;
3241   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3242   int nargs;                    /* Number of operands.  */
3243   int oplen;
3244
3245   argvec = NULL;
3246   nargs = 0;
3247   exp = *expp;
3248
3249   /* Pass one: resolve operands, saving their types and updating *pos,
3250      if needed.  */
3251   switch (op)
3252     {
3253     case OP_FUNCALL:
3254       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3255           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3256         *pos += 7;
3257       else
3258         {
3259           *pos += 3;
3260           resolve_subexp (expp, pos, 0, NULL);
3261         }
3262       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3263       break;
3264
3265     case UNOP_ADDR:
3266       *pos += 1;
3267       resolve_subexp (expp, pos, 0, NULL);
3268       break;
3269
3270     case UNOP_QUAL:
3271       *pos += 3;
3272       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3273       break;
3274
3275     case OP_ATR_MODULUS:
3276     case OP_ATR_SIZE:
3277     case OP_ATR_TAG:
3278     case OP_ATR_FIRST:
3279     case OP_ATR_LAST:
3280     case OP_ATR_LENGTH:
3281     case OP_ATR_POS:
3282     case OP_ATR_VAL:
3283     case OP_ATR_MIN:
3284     case OP_ATR_MAX:
3285     case TERNOP_IN_RANGE:
3286     case BINOP_IN_BOUNDS:
3287     case UNOP_IN_RANGE:
3288     case OP_AGGREGATE:
3289     case OP_OTHERS:
3290     case OP_CHOICES:
3291     case OP_POSITIONAL:
3292     case OP_DISCRETE_RANGE:
3293     case OP_NAME:
3294       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3295       *pos += oplen;
3296       break;
3297
3298     case BINOP_ASSIGN:
3299       {
3300         struct value *arg1;
3301
3302         *pos += 1;
3303         arg1 = resolve_subexp (expp, pos, 0, NULL);
3304         if (arg1 == NULL)
3305           resolve_subexp (expp, pos, 1, NULL);
3306         else
3307           resolve_subexp (expp, pos, 1, value_type (arg1));
3308         break;
3309       }
3310
3311     case UNOP_CAST:
3312       *pos += 3;
3313       nargs = 1;
3314       break;
3315
3316     case BINOP_ADD:
3317     case BINOP_SUB:
3318     case BINOP_MUL:
3319     case BINOP_DIV:
3320     case BINOP_REM:
3321     case BINOP_MOD:
3322     case BINOP_EXP:
3323     case BINOP_CONCAT:
3324     case BINOP_LOGICAL_AND:
3325     case BINOP_LOGICAL_OR:
3326     case BINOP_BITWISE_AND:
3327     case BINOP_BITWISE_IOR:
3328     case BINOP_BITWISE_XOR:
3329
3330     case BINOP_EQUAL:
3331     case BINOP_NOTEQUAL:
3332     case BINOP_LESS:
3333     case BINOP_GTR:
3334     case BINOP_LEQ:
3335     case BINOP_GEQ:
3336
3337     case BINOP_REPEAT:
3338     case BINOP_SUBSCRIPT:
3339     case BINOP_COMMA:
3340       *pos += 1;
3341       nargs = 2;
3342       break;
3343
3344     case UNOP_NEG:
3345     case UNOP_PLUS:
3346     case UNOP_LOGICAL_NOT:
3347     case UNOP_ABS:
3348     case UNOP_IND:
3349       *pos += 1;
3350       nargs = 1;
3351       break;
3352
3353     case OP_LONG:
3354     case OP_DOUBLE:
3355     case OP_VAR_VALUE:
3356       *pos += 4;
3357       break;
3358
3359     case OP_TYPE:
3360     case OP_BOOL:
3361     case OP_LAST:
3362     case OP_INTERNALVAR:
3363       *pos += 3;
3364       break;
3365
3366     case UNOP_MEMVAL:
3367       *pos += 3;
3368       nargs = 1;
3369       break;
3370
3371     case OP_REGISTER:
3372       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3373       break;
3374
3375     case STRUCTOP_STRUCT:
3376       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3377       nargs = 1;
3378       break;
3379
3380     case TERNOP_SLICE:
3381       *pos += 1;
3382       nargs = 3;
3383       break;
3384
3385     case OP_STRING:
3386       break;
3387
3388     default:
3389       error (_("Unexpected operator during name resolution"));
3390     }
3391
3392   argvec = XALLOCAVEC (struct value *, nargs + 1);
3393   for (i = 0; i < nargs; i += 1)
3394     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3395   argvec[i] = NULL;
3396   exp = *expp;
3397
3398   /* Pass two: perform any resolution on principal operator.  */
3399   switch (op)
3400     {
3401     default:
3402       break;
3403
3404     case OP_VAR_VALUE:
3405       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3406         {
3407           struct block_symbol *candidates;
3408           int n_candidates;
3409
3410           n_candidates =
3411             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3412                                     (exp->elts[pc + 2].symbol),
3413                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3414                                     &candidates);
3415
3416           if (n_candidates > 1)
3417             {
3418               /* Types tend to get re-introduced locally, so if there
3419                  are any local symbols that are not types, first filter
3420                  out all types.  */
3421               int j;
3422               for (j = 0; j < n_candidates; j += 1)
3423                 switch (SYMBOL_CLASS (candidates[j].symbol))
3424                   {
3425                   case LOC_REGISTER:
3426                   case LOC_ARG:
3427                   case LOC_REF_ARG:
3428                   case LOC_REGPARM_ADDR:
3429                   case LOC_LOCAL:
3430                   case LOC_COMPUTED:
3431                     goto FoundNonType;
3432                   default:
3433                     break;
3434                   }
3435             FoundNonType:
3436               if (j < n_candidates)
3437                 {
3438                   j = 0;
3439                   while (j < n_candidates)
3440                     {
3441                       if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
3442                         {
3443                           candidates[j] = candidates[n_candidates - 1];
3444                           n_candidates -= 1;
3445                         }
3446                       else
3447                         j += 1;
3448                     }
3449                 }
3450             }
3451
3452           if (n_candidates == 0)
3453             error (_("No definition found for %s"),
3454                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3455           else if (n_candidates == 1)
3456             i = 0;
3457           else if (deprocedure_p
3458                    && !is_nonfunction (candidates, n_candidates))
3459             {
3460               i = ada_resolve_function
3461                 (candidates, n_candidates, NULL, 0,
3462                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3463                  context_type);
3464               if (i < 0)
3465                 error (_("Could not find a match for %s"),
3466                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3467             }
3468           else
3469             {
3470               printf_filtered (_("Multiple matches for %s\n"),
3471                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3472               user_select_syms (candidates, n_candidates, 1);
3473               i = 0;
3474             }
3475
3476           exp->elts[pc + 1].block = candidates[i].block;
3477           exp->elts[pc + 2].symbol = candidates[i].symbol;
3478           if (innermost_block == NULL
3479               || contained_in (candidates[i].block, innermost_block))
3480             innermost_block = candidates[i].block;
3481         }
3482
3483       if (deprocedure_p
3484           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3485               == TYPE_CODE_FUNC))
3486         {
3487           replace_operator_with_call (expp, pc, 0, 0,
3488                                       exp->elts[pc + 2].symbol,
3489                                       exp->elts[pc + 1].block);
3490           exp = *expp;
3491         }
3492       break;
3493
3494     case OP_FUNCALL:
3495       {
3496         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3497             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3498           {
3499             struct block_symbol *candidates;
3500             int n_candidates;
3501
3502             n_candidates =
3503               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3504                                       (exp->elts[pc + 5].symbol),
3505                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3506                                       &candidates);
3507             if (n_candidates == 1)
3508               i = 0;
3509             else
3510               {
3511                 i = ada_resolve_function
3512                   (candidates, n_candidates,
3513                    argvec, nargs,
3514                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3515                    context_type);
3516                 if (i < 0)
3517                   error (_("Could not find a match for %s"),
3518                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3519               }
3520
3521             exp->elts[pc + 4].block = candidates[i].block;
3522             exp->elts[pc + 5].symbol = candidates[i].symbol;
3523             if (innermost_block == NULL
3524                 || contained_in (candidates[i].block, innermost_block))
3525               innermost_block = candidates[i].block;
3526           }
3527       }
3528       break;
3529     case BINOP_ADD:
3530     case BINOP_SUB:
3531     case BINOP_MUL:
3532     case BINOP_DIV:
3533     case BINOP_REM:
3534     case BINOP_MOD:
3535     case BINOP_CONCAT:
3536     case BINOP_BITWISE_AND:
3537     case BINOP_BITWISE_IOR:
3538     case BINOP_BITWISE_XOR:
3539     case BINOP_EQUAL:
3540     case BINOP_NOTEQUAL:
3541     case BINOP_LESS:
3542     case BINOP_GTR:
3543     case BINOP_LEQ:
3544     case BINOP_GEQ:
3545     case BINOP_EXP:
3546     case UNOP_NEG:
3547     case UNOP_PLUS:
3548     case UNOP_LOGICAL_NOT:
3549     case UNOP_ABS:
3550       if (possible_user_operator_p (op, argvec))
3551         {
3552           struct block_symbol *candidates;
3553           int n_candidates;
3554
3555           n_candidates =
3556             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3557                                     (struct block *) NULL, VAR_DOMAIN,
3558                                     &candidates);
3559           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3560                                     ada_decoded_op_name (op), NULL);
3561           if (i < 0)
3562             break;
3563
3564           replace_operator_with_call (expp, pc, nargs, 1,
3565                                       candidates[i].symbol,
3566                                       candidates[i].block);
3567           exp = *expp;
3568         }
3569       break;
3570
3571     case OP_TYPE:
3572     case OP_REGISTER:
3573       return NULL;
3574     }
3575
3576   *pos = pc;
3577   return evaluate_subexp_type (exp, pos);
3578 }
3579
3580 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3581    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3582    a non-pointer.  */
3583 /* The term "match" here is rather loose.  The match is heuristic and
3584    liberal.  */
3585
3586 static int
3587 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3588 {
3589   ftype = ada_check_typedef (ftype);
3590   atype = ada_check_typedef (atype);
3591
3592   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3593     ftype = TYPE_TARGET_TYPE (ftype);
3594   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3595     atype = TYPE_TARGET_TYPE (atype);
3596
3597   switch (TYPE_CODE (ftype))
3598     {
3599     default:
3600       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3601     case TYPE_CODE_PTR:
3602       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3603         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3604                                TYPE_TARGET_TYPE (atype), 0);
3605       else
3606         return (may_deref
3607                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3608     case TYPE_CODE_INT:
3609     case TYPE_CODE_ENUM:
3610     case TYPE_CODE_RANGE:
3611       switch (TYPE_CODE (atype))
3612         {
3613         case TYPE_CODE_INT:
3614         case TYPE_CODE_ENUM:
3615         case TYPE_CODE_RANGE:
3616           return 1;
3617         default:
3618           return 0;
3619         }
3620
3621     case TYPE_CODE_ARRAY:
3622       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3623               || ada_is_array_descriptor_type (atype));
3624
3625     case TYPE_CODE_STRUCT:
3626       if (ada_is_array_descriptor_type (ftype))
3627         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3628                 || ada_is_array_descriptor_type (atype));
3629       else
3630         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3631                 && !ada_is_array_descriptor_type (atype));
3632
3633     case TYPE_CODE_UNION:
3634     case TYPE_CODE_FLT:
3635       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3636     }
3637 }
3638
3639 /* Return non-zero if the formals of FUNC "sufficiently match" the
3640    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3641    may also be an enumeral, in which case it is treated as a 0-
3642    argument function.  */
3643
3644 static int
3645 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3646 {
3647   int i;
3648   struct type *func_type = SYMBOL_TYPE (func);
3649
3650   if (SYMBOL_CLASS (func) == LOC_CONST
3651       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3652     return (n_actuals == 0);
3653   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3654     return 0;
3655
3656   if (TYPE_NFIELDS (func_type) != n_actuals)
3657     return 0;
3658
3659   for (i = 0; i < n_actuals; i += 1)
3660     {
3661       if (actuals[i] == NULL)
3662         return 0;
3663       else
3664         {
3665           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3666                                                                    i));
3667           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3668
3669           if (!ada_type_match (ftype, atype, 1))
3670             return 0;
3671         }
3672     }
3673   return 1;
3674 }
3675
3676 /* False iff function type FUNC_TYPE definitely does not produce a value
3677    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3678    FUNC_TYPE is not a valid function type with a non-null return type
3679    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3680
3681 static int
3682 return_match (struct type *func_type, struct type *context_type)
3683 {
3684   struct type *return_type;
3685
3686   if (func_type == NULL)
3687     return 1;
3688
3689   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3690     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3691   else
3692     return_type = get_base_type (func_type);
3693   if (return_type == NULL)
3694     return 1;
3695
3696   context_type = get_base_type (context_type);
3697
3698   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3699     return context_type == NULL || return_type == context_type;
3700   else if (context_type == NULL)
3701     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3702   else
3703     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3704 }
3705
3706
3707 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3708    function (if any) that matches the types of the NARGS arguments in
3709    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3710    that returns that type, then eliminate matches that don't.  If
3711    CONTEXT_TYPE is void and there is at least one match that does not
3712    return void, eliminate all matches that do.
3713
3714    Asks the user if there is more than one match remaining.  Returns -1
3715    if there is no such symbol or none is selected.  NAME is used
3716    solely for messages.  May re-arrange and modify SYMS in
3717    the process; the index returned is for the modified vector.  */
3718
3719 static int
3720 ada_resolve_function (struct block_symbol syms[],
3721                       int nsyms, struct value **args, int nargs,
3722                       const char *name, struct type *context_type)
3723 {
3724   int fallback;
3725   int k;
3726   int m;                        /* Number of hits */
3727
3728   m = 0;
3729   /* In the first pass of the loop, we only accept functions matching
3730      context_type.  If none are found, we add a second pass of the loop
3731      where every function is accepted.  */
3732   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3733     {
3734       for (k = 0; k < nsyms; k += 1)
3735         {
3736           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
3737
3738           if (ada_args_match (syms[k].symbol, args, nargs)
3739               && (fallback || return_match (type, context_type)))
3740             {
3741               syms[m] = syms[k];
3742               m += 1;
3743             }
3744         }
3745     }
3746
3747   /* If we got multiple matches, ask the user which one to use.  Don't do this
3748      interactive thing during completion, though, as the purpose of the
3749      completion is providing a list of all possible matches.  Prompting the
3750      user to filter it down would be completely unexpected in this case.  */
3751   if (m == 0)
3752     return -1;
3753   else if (m > 1 && !parse_completion)
3754     {
3755       printf_filtered (_("Multiple matches for %s\n"), name);
3756       user_select_syms (syms, m, 1);
3757       return 0;
3758     }
3759   return 0;
3760 }
3761
3762 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3763    in a listing of choices during disambiguation (see sort_choices, below).
3764    The idea is that overloadings of a subprogram name from the
3765    same package should sort in their source order.  We settle for ordering
3766    such symbols by their trailing number (__N  or $N).  */
3767
3768 static int
3769 encoded_ordered_before (const char *N0, const char *N1)
3770 {
3771   if (N1 == NULL)
3772     return 0;
3773   else if (N0 == NULL)
3774     return 1;
3775   else
3776     {
3777       int k0, k1;
3778
3779       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3780         ;
3781       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3782         ;
3783       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3784           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3785         {
3786           int n0, n1;
3787
3788           n0 = k0;
3789           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3790             n0 -= 1;
3791           n1 = k1;
3792           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3793             n1 -= 1;
3794           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3795             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3796         }
3797       return (strcmp (N0, N1) < 0);
3798     }
3799 }
3800
3801 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3802    encoded names.  */
3803
3804 static void
3805 sort_choices (struct block_symbol syms[], int nsyms)
3806 {
3807   int i;
3808
3809   for (i = 1; i < nsyms; i += 1)
3810     {
3811       struct block_symbol sym = syms[i];
3812       int j;
3813
3814       for (j = i - 1; j >= 0; j -= 1)
3815         {
3816           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].symbol),
3817                                       SYMBOL_LINKAGE_NAME (sym.symbol)))
3818             break;
3819           syms[j + 1] = syms[j];
3820         }
3821       syms[j + 1] = sym;
3822     }
3823 }
3824
3825 /* Whether GDB should display formals and return types for functions in the
3826    overloads selection menu.  */
3827 static int print_signatures = 1;
3828
3829 /* Print the signature for SYM on STREAM according to the FLAGS options.  For
3830    all but functions, the signature is just the name of the symbol.  For
3831    functions, this is the name of the function, the list of types for formals
3832    and the return type (if any).  */
3833
3834 static void
3835 ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3836                             const struct type_print_options *flags)
3837 {
3838   struct type *type = SYMBOL_TYPE (sym);
3839
3840   fprintf_filtered (stream, "%s", SYMBOL_PRINT_NAME (sym));
3841   if (!print_signatures
3842       || type == NULL
3843       || TYPE_CODE (type) != TYPE_CODE_FUNC)
3844     return;
3845
3846   if (TYPE_NFIELDS (type) > 0)
3847     {
3848       int i;
3849
3850       fprintf_filtered (stream, " (");
3851       for (i = 0; i < TYPE_NFIELDS (type); ++i)
3852         {
3853           if (i > 0)
3854             fprintf_filtered (stream, "; ");
3855           ada_print_type (TYPE_FIELD_TYPE (type, i), NULL, stream, -1, 0,
3856                           flags);
3857         }
3858       fprintf_filtered (stream, ")");
3859     }
3860   if (TYPE_TARGET_TYPE (type) != NULL
3861       && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
3862     {
3863       fprintf_filtered (stream, " return ");
3864       ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3865     }
3866 }
3867
3868 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3869    by asking the user (if necessary), returning the number selected, 
3870    and setting the first elements of SYMS items.  Error if no symbols
3871    selected.  */
3872
3873 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3874    to be re-integrated one of these days.  */
3875
3876 int
3877 user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
3878 {
3879   int i;
3880   int *chosen = XALLOCAVEC (int , nsyms);
3881   int n_chosen;
3882   int first_choice = (max_results == 1) ? 1 : 2;
3883   const char *select_mode = multiple_symbols_select_mode ();
3884
3885   if (max_results < 1)
3886     error (_("Request to select 0 symbols!"));
3887   if (nsyms <= 1)
3888     return nsyms;
3889
3890   if (select_mode == multiple_symbols_cancel)
3891     error (_("\
3892 canceled because the command is ambiguous\n\
3893 See set/show multiple-symbol."));
3894   
3895   /* If select_mode is "all", then return all possible symbols.
3896      Only do that if more than one symbol can be selected, of course.
3897      Otherwise, display the menu as usual.  */
3898   if (select_mode == multiple_symbols_all && max_results > 1)
3899     return nsyms;
3900
3901   printf_unfiltered (_("[0] cancel\n"));
3902   if (max_results > 1)
3903     printf_unfiltered (_("[1] all\n"));
3904
3905   sort_choices (syms, nsyms);
3906
3907   for (i = 0; i < nsyms; i += 1)
3908     {
3909       if (syms[i].symbol == NULL)
3910         continue;
3911
3912       if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
3913         {
3914           struct symtab_and_line sal =
3915             find_function_start_sal (syms[i].symbol, 1);
3916
3917           printf_unfiltered ("[%d] ", i + first_choice);
3918           ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3919                                       &type_print_raw_options);
3920           if (sal.symtab == NULL)
3921             printf_unfiltered (_(" at <no source file available>:%d\n"),
3922                                sal.line);
3923           else
3924             printf_unfiltered (_(" at %s:%d\n"),
3925                                symtab_to_filename_for_display (sal.symtab),
3926                                sal.line);
3927           continue;
3928         }
3929       else
3930         {
3931           int is_enumeral =
3932             (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3933              && SYMBOL_TYPE (syms[i].symbol) != NULL
3934              && TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) == TYPE_CODE_ENUM);
3935           struct symtab *symtab = NULL;
3936
3937           if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3938             symtab = symbol_symtab (syms[i].symbol);
3939
3940           if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
3941             {
3942               printf_unfiltered ("[%d] ", i + first_choice);
3943               ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3944                                           &type_print_raw_options);
3945               printf_unfiltered (_(" at %s:%d\n"),
3946                                  symtab_to_filename_for_display (symtab),
3947                                  SYMBOL_LINE (syms[i].symbol));
3948             }
3949           else if (is_enumeral
3950                    && TYPE_NAME (SYMBOL_TYPE (syms[i].symbol)) != NULL)
3951             {
3952               printf_unfiltered (("[%d] "), i + first_choice);
3953               ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3954                               gdb_stdout, -1, 0, &type_print_raw_options);
3955               printf_unfiltered (_("'(%s) (enumeral)\n"),
3956                                  SYMBOL_PRINT_NAME (syms[i].symbol));
3957             }
3958           else
3959             {
3960               printf_unfiltered ("[%d] ", i + first_choice);
3961               ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3962                                           &type_print_raw_options);
3963
3964               if (symtab != NULL)
3965                 printf_unfiltered (is_enumeral
3966                                    ? _(" in %s (enumeral)\n")
3967                                    : _(" at %s:?\n"),
3968                                    symtab_to_filename_for_display (symtab));
3969               else
3970                 printf_unfiltered (is_enumeral
3971                                    ? _(" (enumeral)\n")
3972                                    : _(" at ?\n"));
3973             }
3974         }
3975     }
3976
3977   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3978                              "overload-choice");
3979
3980   for (i = 0; i < n_chosen; i += 1)
3981     syms[i] = syms[chosen[i]];
3982
3983   return n_chosen;
3984 }
3985
3986 /* Read and validate a set of numeric choices from the user in the
3987    range 0 .. N_CHOICES-1.  Place the results in increasing
3988    order in CHOICES[0 .. N-1], and return N.
3989
3990    The user types choices as a sequence of numbers on one line
3991    separated by blanks, encoding them as follows:
3992
3993      + A choice of 0 means to cancel the selection, throwing an error.
3994      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3995      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3996
3997    The user is not allowed to choose more than MAX_RESULTS values.
3998
3999    ANNOTATION_SUFFIX, if present, is used to annotate the input
4000    prompts (for use with the -f switch).  */
4001
4002 int
4003 get_selections (int *choices, int n_choices, int max_results,
4004                 int is_all_choice, char *annotation_suffix)
4005 {
4006   char *args;
4007   char *prompt;
4008   int n_chosen;
4009   int first_choice = is_all_choice ? 2 : 1;
4010
4011   prompt = getenv ("PS2");
4012   if (prompt == NULL)
4013     prompt = "> ";
4014
4015   args = command_line_input (prompt, 0, annotation_suffix);
4016
4017   if (args == NULL)
4018     error_no_arg (_("one or more choice numbers"));
4019
4020   n_chosen = 0;
4021
4022   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
4023      order, as given in args.  Choices are validated.  */
4024   while (1)
4025     {
4026       char *args2;
4027       int choice, j;
4028
4029       args = skip_spaces (args);
4030       if (*args == '\0' && n_chosen == 0)
4031         error_no_arg (_("one or more choice numbers"));
4032       else if (*args == '\0')
4033         break;
4034
4035       choice = strtol (args, &args2, 10);
4036       if (args == args2 || choice < 0
4037           || choice > n_choices + first_choice - 1)
4038         error (_("Argument must be choice number"));
4039       args = args2;
4040
4041       if (choice == 0)
4042         error (_("cancelled"));
4043
4044       if (choice < first_choice)
4045         {
4046           n_chosen = n_choices;
4047           for (j = 0; j < n_choices; j += 1)
4048             choices[j] = j;
4049           break;
4050         }
4051       choice -= first_choice;
4052
4053       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4054         {
4055         }
4056
4057       if (j < 0 || choice != choices[j])
4058         {
4059           int k;
4060
4061           for (k = n_chosen - 1; k > j; k -= 1)
4062             choices[k + 1] = choices[k];
4063           choices[j + 1] = choice;
4064           n_chosen += 1;
4065         }
4066     }
4067
4068   if (n_chosen > max_results)
4069     error (_("Select no more than %d of the above"), max_results);
4070
4071   return n_chosen;
4072 }
4073
4074 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
4075    on the function identified by SYM and BLOCK, and taking NARGS
4076    arguments.  Update *EXPP as needed to hold more space.  */
4077
4078 static void
4079 replace_operator_with_call (struct expression **expp, int pc, int nargs,
4080                             int oplen, struct symbol *sym,
4081                             const struct block *block)
4082 {
4083   /* A new expression, with 6 more elements (3 for funcall, 4 for function
4084      symbol, -oplen for operator being replaced).  */
4085   struct expression *newexp = (struct expression *)
4086     xzalloc (sizeof (struct expression)
4087              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
4088   struct expression *exp = *expp;
4089
4090   newexp->nelts = exp->nelts + 7 - oplen;
4091   newexp->language_defn = exp->language_defn;
4092   newexp->gdbarch = exp->gdbarch;
4093   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
4094   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4095           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
4096
4097   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
4098   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
4099
4100   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
4101   newexp->elts[pc + 4].block = block;
4102   newexp->elts[pc + 5].symbol = sym;
4103
4104   *expp = newexp;
4105   xfree (exp);
4106 }
4107
4108 /* Type-class predicates */
4109
4110 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
4111    or FLOAT).  */
4112
4113 static int
4114 numeric_type_p (struct type *type)
4115 {
4116   if (type == NULL)
4117     return 0;
4118   else
4119     {
4120       switch (TYPE_CODE (type))
4121         {
4122         case TYPE_CODE_INT:
4123         case TYPE_CODE_FLT:
4124           return 1;
4125         case TYPE_CODE_RANGE:
4126           return (type == TYPE_TARGET_TYPE (type)
4127                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
4128         default:
4129           return 0;
4130         }
4131     }
4132 }
4133
4134 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
4135
4136 static int
4137 integer_type_p (struct type *type)
4138 {
4139   if (type == NULL)
4140     return 0;
4141   else
4142     {
4143       switch (TYPE_CODE (type))
4144         {
4145         case TYPE_CODE_INT:
4146           return 1;
4147         case TYPE_CODE_RANGE:
4148           return (type == TYPE_TARGET_TYPE (type)
4149                   || integer_type_p (TYPE_TARGET_TYPE (type)));
4150         default:
4151           return 0;
4152         }
4153     }
4154 }
4155
4156 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
4157
4158 static int
4159 scalar_type_p (struct type *type)
4160 {
4161   if (type == NULL)
4162     return 0;
4163   else
4164     {
4165       switch (TYPE_CODE (type))
4166         {
4167         case TYPE_CODE_INT:
4168         case TYPE_CODE_RANGE:
4169         case TYPE_CODE_ENUM:
4170         case TYPE_CODE_FLT:
4171           return 1;
4172         default:
4173           return 0;
4174         }
4175     }
4176 }
4177
4178 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
4179
4180 static int
4181 discrete_type_p (struct type *type)
4182 {
4183   if (type == NULL)
4184     return 0;
4185   else
4186     {
4187       switch (TYPE_CODE (type))
4188         {
4189         case TYPE_CODE_INT:
4190         case TYPE_CODE_RANGE:
4191         case TYPE_CODE_ENUM:
4192         case TYPE_CODE_BOOL:
4193           return 1;
4194         default:
4195           return 0;
4196         }
4197     }
4198 }
4199
4200 /* Returns non-zero if OP with operands in the vector ARGS could be
4201    a user-defined function.  Errs on the side of pre-defined operators
4202    (i.e., result 0).  */
4203
4204 static int
4205 possible_user_operator_p (enum exp_opcode op, struct value *args[])
4206 {
4207   struct type *type0 =
4208     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
4209   struct type *type1 =
4210     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
4211
4212   if (type0 == NULL)
4213     return 0;
4214
4215   switch (op)
4216     {
4217     default:
4218       return 0;
4219
4220     case BINOP_ADD:
4221     case BINOP_SUB:
4222     case BINOP_MUL:
4223     case BINOP_DIV:
4224       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
4225
4226     case BINOP_REM:
4227     case BINOP_MOD:
4228     case BINOP_BITWISE_AND:
4229     case BINOP_BITWISE_IOR:
4230     case BINOP_BITWISE_XOR:
4231       return (!(integer_type_p (type0) && integer_type_p (type1)));
4232
4233     case BINOP_EQUAL:
4234     case BINOP_NOTEQUAL:
4235     case BINOP_LESS:
4236     case BINOP_GTR:
4237     case BINOP_LEQ:
4238     case BINOP_GEQ:
4239       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4240
4241     case BINOP_CONCAT:
4242       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4243
4244     case BINOP_EXP:
4245       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4246
4247     case UNOP_NEG:
4248     case UNOP_PLUS:
4249     case UNOP_LOGICAL_NOT:
4250     case UNOP_ABS:
4251       return (!numeric_type_p (type0));
4252
4253     }
4254 }
4255 \f
4256                                 /* Renaming */
4257
4258 /* NOTES: 
4259
4260    1. In the following, we assume that a renaming type's name may
4261       have an ___XD suffix.  It would be nice if this went away at some
4262       point.
4263    2. We handle both the (old) purely type-based representation of 
4264       renamings and the (new) variable-based encoding.  At some point,
4265       it is devoutly to be hoped that the former goes away 
4266       (FIXME: hilfinger-2007-07-09).
4267    3. Subprogram renamings are not implemented, although the XRS
4268       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4269
4270 /* If SYM encodes a renaming, 
4271
4272        <renaming> renames <renamed entity>,
4273
4274    sets *LEN to the length of the renamed entity's name,
4275    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4276    the string describing the subcomponent selected from the renamed
4277    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4278    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4279    are undefined).  Otherwise, returns a value indicating the category
4280    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4281    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4282    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4283    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4284    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4285    may be NULL, in which case they are not assigned.
4286
4287    [Currently, however, GCC does not generate subprogram renamings.]  */
4288
4289 enum ada_renaming_category
4290 ada_parse_renaming (struct symbol *sym,
4291                     const char **renamed_entity, int *len, 
4292                     const char **renaming_expr)
4293 {
4294   enum ada_renaming_category kind;
4295   const char *info;
4296   const char *suffix;
4297
4298   if (sym == NULL)
4299     return ADA_NOT_RENAMING;
4300   switch (SYMBOL_CLASS (sym)) 
4301     {
4302     default:
4303       return ADA_NOT_RENAMING;
4304     case LOC_TYPEDEF:
4305       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4306                                        renamed_entity, len, renaming_expr);
4307     case LOC_LOCAL:
4308     case LOC_STATIC:
4309     case LOC_COMPUTED:
4310     case LOC_OPTIMIZED_OUT:
4311       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4312       if (info == NULL)
4313         return ADA_NOT_RENAMING;
4314       switch (info[5])
4315         {
4316         case '_':
4317           kind = ADA_OBJECT_RENAMING;
4318           info += 6;
4319           break;
4320         case 'E':
4321           kind = ADA_EXCEPTION_RENAMING;
4322           info += 7;
4323           break;
4324         case 'P':
4325           kind = ADA_PACKAGE_RENAMING;
4326           info += 7;
4327           break;
4328         case 'S':
4329           kind = ADA_SUBPROGRAM_RENAMING;
4330           info += 7;
4331           break;
4332         default:
4333           return ADA_NOT_RENAMING;
4334         }
4335     }
4336
4337   if (renamed_entity != NULL)
4338     *renamed_entity = info;
4339   suffix = strstr (info, "___XE");
4340   if (suffix == NULL || suffix == info)
4341     return ADA_NOT_RENAMING;
4342   if (len != NULL)
4343     *len = strlen (info) - strlen (suffix);
4344   suffix += 5;
4345   if (renaming_expr != NULL)
4346     *renaming_expr = suffix;
4347   return kind;
4348 }
4349
4350 /* Assuming TYPE encodes a renaming according to the old encoding in
4351    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4352    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4353    ADA_NOT_RENAMING otherwise.  */
4354 static enum ada_renaming_category
4355 parse_old_style_renaming (struct type *type,
4356                           const char **renamed_entity, int *len, 
4357                           const char **renaming_expr)
4358 {
4359   enum ada_renaming_category kind;
4360   const char *name;
4361   const char *info;
4362   const char *suffix;
4363
4364   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4365       || TYPE_NFIELDS (type) != 1)
4366     return ADA_NOT_RENAMING;
4367
4368   name = type_name_no_tag (type);
4369   if (name == NULL)
4370     return ADA_NOT_RENAMING;
4371   
4372   name = strstr (name, "___XR");
4373   if (name == NULL)
4374     return ADA_NOT_RENAMING;
4375   switch (name[5])
4376     {
4377     case '\0':
4378     case '_':
4379       kind = ADA_OBJECT_RENAMING;
4380       break;
4381     case 'E':
4382       kind = ADA_EXCEPTION_RENAMING;
4383       break;
4384     case 'P':
4385       kind = ADA_PACKAGE_RENAMING;
4386       break;
4387     case 'S':
4388       kind = ADA_SUBPROGRAM_RENAMING;
4389       break;
4390     default:
4391       return ADA_NOT_RENAMING;
4392     }
4393
4394   info = TYPE_FIELD_NAME (type, 0);
4395   if (info == NULL)
4396     return ADA_NOT_RENAMING;
4397   if (renamed_entity != NULL)
4398     *renamed_entity = info;
4399   suffix = strstr (info, "___XE");
4400   if (renaming_expr != NULL)
4401     *renaming_expr = suffix + 5;
4402   if (suffix == NULL || suffix == info)
4403     return ADA_NOT_RENAMING;
4404   if (len != NULL)
4405     *len = suffix - info;
4406   return kind;
4407 }
4408
4409 /* Compute the value of the given RENAMING_SYM, which is expected to
4410    be a symbol encoding a renaming expression.  BLOCK is the block
4411    used to evaluate the renaming.  */
4412
4413 static struct value *
4414 ada_read_renaming_var_value (struct symbol *renaming_sym,
4415                              const struct block *block)
4416 {
4417   const char *sym_name;
4418   struct expression *expr;
4419   struct value *value;
4420   struct cleanup *old_chain = NULL;
4421
4422   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4423   expr = parse_exp_1 (&sym_name, 0, block, 0);
4424   old_chain = make_cleanup (free_current_contents, &expr);
4425   value = evaluate_expression (expr);
4426
4427   do_cleanups (old_chain);
4428   return value;
4429 }
4430 \f
4431
4432                                 /* Evaluation: Function Calls */
4433
4434 /* Return an lvalue containing the value VAL.  This is the identity on
4435    lvalues, and otherwise has the side-effect of allocating memory
4436    in the inferior where a copy of the value contents is copied.  */
4437
4438 static struct value *
4439 ensure_lval (struct value *val)
4440 {
4441   if (VALUE_LVAL (val) == not_lval
4442       || VALUE_LVAL (val) == lval_internalvar)
4443     {
4444       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4445       const CORE_ADDR addr =
4446         value_as_long (value_allocate_space_in_inferior (len));
4447
4448       set_value_address (val, addr);
4449       VALUE_LVAL (val) = lval_memory;
4450       write_memory (addr, value_contents (val), len);
4451     }
4452
4453   return val;
4454 }
4455
4456 /* Return the value ACTUAL, converted to be an appropriate value for a
4457    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4458    allocating any necessary descriptors (fat pointers), or copies of
4459    values not residing in memory, updating it as needed.  */
4460
4461 struct value *
4462 ada_convert_actual (struct value *actual, struct type *formal_type0)
4463 {
4464   struct type *actual_type = ada_check_typedef (value_type (actual));
4465   struct type *formal_type = ada_check_typedef (formal_type0);
4466   struct type *formal_target =
4467     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4468     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4469   struct type *actual_target =
4470     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4471     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4472
4473   if (ada_is_array_descriptor_type (formal_target)
4474       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4475     return make_array_descriptor (formal_type, actual);
4476   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4477            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4478     {
4479       struct value *result;
4480
4481       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4482           && ada_is_array_descriptor_type (actual_target))
4483         result = desc_data (actual);
4484       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4485         {
4486           if (VALUE_LVAL (actual) != lval_memory)
4487             {
4488               struct value *val;
4489
4490               actual_type = ada_check_typedef (value_type (actual));
4491               val = allocate_value (actual_type);
4492               memcpy ((char *) value_contents_raw (val),
4493                       (char *) value_contents (actual),
4494                       TYPE_LENGTH (actual_type));
4495               actual = ensure_lval (val);
4496             }
4497           result = value_addr (actual);
4498         }
4499       else
4500         return actual;
4501       return value_cast_pointers (formal_type, result, 0);
4502     }
4503   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4504     return ada_value_ind (actual);
4505   else if (ada_is_aligner_type (formal_type))
4506     {
4507       /* We need to turn this parameter into an aligner type
4508          as well.  */
4509       struct value *aligner = allocate_value (formal_type);
4510       struct value *component = ada_value_struct_elt (aligner, "F", 0);
4511
4512       value_assign_to_component (aligner, component, actual);
4513       return aligner;
4514     }
4515
4516   return actual;
4517 }
4518
4519 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4520    type TYPE.  This is usually an inefficient no-op except on some targets
4521    (such as AVR) where the representation of a pointer and an address
4522    differs.  */
4523
4524 static CORE_ADDR
4525 value_pointer (struct value *value, struct type *type)
4526 {
4527   struct gdbarch *gdbarch = get_type_arch (type);
4528   unsigned len = TYPE_LENGTH (type);
4529   gdb_byte *buf = (gdb_byte *) alloca (len);
4530   CORE_ADDR addr;
4531
4532   addr = value_address (value);
4533   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4534   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4535   return addr;
4536 }
4537
4538
4539 /* Push a descriptor of type TYPE for array value ARR on the stack at
4540    *SP, updating *SP to reflect the new descriptor.  Return either
4541    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4542    to-descriptor type rather than a descriptor type), a struct value *
4543    representing a pointer to this descriptor.  */
4544
4545 static struct value *
4546 make_array_descriptor (struct type *type, struct value *arr)
4547 {
4548   struct type *bounds_type = desc_bounds_type (type);
4549   struct type *desc_type = desc_base_type (type);
4550   struct value *descriptor = allocate_value (desc_type);
4551   struct value *bounds = allocate_value (bounds_type);
4552   int i;
4553
4554   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4555        i > 0; i -= 1)
4556     {
4557       modify_field (value_type (bounds), value_contents_writeable (bounds),
4558                     ada_array_bound (arr, i, 0),
4559                     desc_bound_bitpos (bounds_type, i, 0),
4560                     desc_bound_bitsize (bounds_type, i, 0));
4561       modify_field (value_type (bounds), value_contents_writeable (bounds),
4562                     ada_array_bound (arr, i, 1),
4563                     desc_bound_bitpos (bounds_type, i, 1),
4564                     desc_bound_bitsize (bounds_type, i, 1));
4565     }
4566
4567   bounds = ensure_lval (bounds);
4568
4569   modify_field (value_type (descriptor),
4570                 value_contents_writeable (descriptor),
4571                 value_pointer (ensure_lval (arr),
4572                                TYPE_FIELD_TYPE (desc_type, 0)),
4573                 fat_pntr_data_bitpos (desc_type),
4574                 fat_pntr_data_bitsize (desc_type));
4575
4576   modify_field (value_type (descriptor),
4577                 value_contents_writeable (descriptor),
4578                 value_pointer (bounds,
4579                                TYPE_FIELD_TYPE (desc_type, 1)),
4580                 fat_pntr_bounds_bitpos (desc_type),
4581                 fat_pntr_bounds_bitsize (desc_type));
4582
4583   descriptor = ensure_lval (descriptor);
4584
4585   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4586     return value_addr (descriptor);
4587   else
4588     return descriptor;
4589 }
4590 \f
4591                                 /* Symbol Cache Module */
4592
4593 /* Performance measurements made as of 2010-01-15 indicate that
4594    this cache does bring some noticeable improvements.  Depending
4595    on the type of entity being printed, the cache can make it as much
4596    as an order of magnitude faster than without it.
4597
4598    The descriptive type DWARF extension has significantly reduced
4599    the need for this cache, at least when DWARF is being used.  However,
4600    even in this case, some expensive name-based symbol searches are still
4601    sometimes necessary - to find an XVZ variable, mostly.  */
4602
4603 /* Initialize the contents of SYM_CACHE.  */
4604
4605 static void
4606 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4607 {
4608   obstack_init (&sym_cache->cache_space);
4609   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4610 }
4611
4612 /* Free the memory used by SYM_CACHE.  */
4613
4614 static void
4615 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4616 {
4617   obstack_free (&sym_cache->cache_space, NULL);
4618   xfree (sym_cache);
4619 }
4620
4621 /* Return the symbol cache associated to the given program space PSPACE.
4622    If not allocated for this PSPACE yet, allocate and initialize one.  */
4623
4624 static struct ada_symbol_cache *
4625 ada_get_symbol_cache (struct program_space *pspace)
4626 {
4627   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4628
4629   if (pspace_data->sym_cache == NULL)
4630     {
4631       pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4632       ada_init_symbol_cache (pspace_data->sym_cache);
4633     }
4634
4635   return pspace_data->sym_cache;
4636 }
4637
4638 /* Clear all entries from the symbol cache.  */
4639
4640 static void
4641 ada_clear_symbol_cache (void)
4642 {
4643   struct ada_symbol_cache *sym_cache
4644     = ada_get_symbol_cache (current_program_space);
4645
4646   obstack_free (&sym_cache->cache_space, NULL);
4647   ada_init_symbol_cache (sym_cache);
4648 }
4649
4650 /* Search our cache for an entry matching NAME and DOMAIN.
4651    Return it if found, or NULL otherwise.  */
4652
4653 static struct cache_entry **
4654 find_entry (const char *name, domain_enum domain)
4655 {
4656   struct ada_symbol_cache *sym_cache
4657     = ada_get_symbol_cache (current_program_space);
4658   int h = msymbol_hash (name) % HASH_SIZE;
4659   struct cache_entry **e;
4660
4661   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4662     {
4663       if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
4664         return e;
4665     }
4666   return NULL;
4667 }
4668
4669 /* Search the symbol cache for an entry matching NAME and DOMAIN.
4670    Return 1 if found, 0 otherwise.
4671
4672    If an entry was found and SYM is not NULL, set *SYM to the entry's
4673    SYM.  Same principle for BLOCK if not NULL.  */
4674
4675 static int
4676 lookup_cached_symbol (const char *name, domain_enum domain,
4677                       struct symbol **sym, const struct block **block)
4678 {
4679   struct cache_entry **e = find_entry (name, domain);
4680
4681   if (e == NULL)
4682     return 0;
4683   if (sym != NULL)
4684     *sym = (*e)->sym;
4685   if (block != NULL)
4686     *block = (*e)->block;
4687   return 1;
4688 }
4689
4690 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4691    in domain DOMAIN, save this result in our symbol cache.  */
4692
4693 static void
4694 cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
4695               const struct block *block)
4696 {
4697   struct ada_symbol_cache *sym_cache
4698     = ada_get_symbol_cache (current_program_space);
4699   int h;
4700   char *copy;
4701   struct cache_entry *e;
4702
4703   /* Symbols for builtin types don't have a block.
4704      For now don't cache such symbols.  */
4705   if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4706     return;
4707
4708   /* If the symbol is a local symbol, then do not cache it, as a search
4709      for that symbol depends on the context.  To determine whether
4710      the symbol is local or not, we check the block where we found it
4711      against the global and static blocks of its associated symtab.  */
4712   if (sym
4713       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4714                             GLOBAL_BLOCK) != block
4715       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4716                             STATIC_BLOCK) != block)
4717     return;
4718
4719   h = msymbol_hash (name) % HASH_SIZE;
4720   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4721                                             sizeof (*e));
4722   e->next = sym_cache->root[h];
4723   sym_cache->root[h] = e;
4724   e->name = copy
4725     = (char *) obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4726   strcpy (copy, name);
4727   e->sym = sym;
4728   e->domain = domain;
4729   e->block = block;
4730 }
4731 \f
4732                                 /* Symbol Lookup */
4733
4734 /* Return nonzero if wild matching should be used when searching for
4735    all symbols matching LOOKUP_NAME.
4736
4737    LOOKUP_NAME is expected to be a symbol name after transformation
4738    for Ada lookups (see ada_name_for_lookup).  */
4739
4740 static int
4741 should_use_wild_match (const char *lookup_name)
4742 {
4743   return (strstr (lookup_name, "__") == NULL);
4744 }
4745
4746 /* Return the result of a standard (literal, C-like) lookup of NAME in
4747    given DOMAIN, visible from lexical block BLOCK.  */
4748
4749 static struct symbol *
4750 standard_lookup (const char *name, const struct block *block,
4751                  domain_enum domain)
4752 {
4753   /* Initialize it just to avoid a GCC false warning.  */
4754   struct block_symbol sym = {NULL, NULL};
4755
4756   if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4757     return sym.symbol;
4758   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4759   cache_symbol (name, domain, sym.symbol, sym.block);
4760   return sym.symbol;
4761 }
4762
4763
4764 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4765    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4766    since they contend in overloading in the same way.  */
4767 static int
4768 is_nonfunction (struct block_symbol syms[], int n)
4769 {
4770   int i;
4771
4772   for (i = 0; i < n; i += 1)
4773     if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_FUNC
4774         && (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM
4775             || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
4776       return 1;
4777
4778   return 0;
4779 }
4780
4781 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4782    struct types.  Otherwise, they may not.  */
4783
4784 static int
4785 equiv_types (struct type *type0, struct type *type1)
4786 {
4787   if (type0 == type1)
4788     return 1;
4789   if (type0 == NULL || type1 == NULL
4790       || TYPE_CODE (type0) != TYPE_CODE (type1))
4791     return 0;
4792   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4793        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4794       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4795       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4796     return 1;
4797
4798   return 0;
4799 }
4800
4801 /* True iff SYM0 represents the same entity as SYM1, or one that is
4802    no more defined than that of SYM1.  */
4803
4804 static int
4805 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4806 {
4807   if (sym0 == sym1)
4808     return 1;
4809   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4810       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4811     return 0;
4812
4813   switch (SYMBOL_CLASS (sym0))
4814     {
4815     case LOC_UNDEF:
4816       return 1;
4817     case LOC_TYPEDEF:
4818       {
4819         struct type *type0 = SYMBOL_TYPE (sym0);
4820         struct type *type1 = SYMBOL_TYPE (sym1);
4821         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4822         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4823         int len0 = strlen (name0);
4824
4825         return
4826           TYPE_CODE (type0) == TYPE_CODE (type1)
4827           && (equiv_types (type0, type1)
4828               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4829                   && startswith (name1 + len0, "___XV")));
4830       }
4831     case LOC_CONST:
4832       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4833         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4834     default:
4835       return 0;
4836     }
4837 }
4838
4839 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
4840    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4841
4842 static void
4843 add_defn_to_vec (struct obstack *obstackp,
4844                  struct symbol *sym,
4845                  const struct block *block)
4846 {
4847   int i;
4848   struct block_symbol *prevDefns = defns_collected (obstackp, 0);
4849
4850   /* Do not try to complete stub types, as the debugger is probably
4851      already scanning all symbols matching a certain name at the
4852      time when this function is called.  Trying to replace the stub
4853      type by its associated full type will cause us to restart a scan
4854      which may lead to an infinite recursion.  Instead, the client
4855      collecting the matching symbols will end up collecting several
4856      matches, with at least one of them complete.  It can then filter
4857      out the stub ones if needed.  */
4858
4859   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4860     {
4861       if (lesseq_defined_than (sym, prevDefns[i].symbol))
4862         return;
4863       else if (lesseq_defined_than (prevDefns[i].symbol, sym))
4864         {
4865           prevDefns[i].symbol = sym;
4866           prevDefns[i].block = block;
4867           return;
4868         }
4869     }
4870
4871   {
4872     struct block_symbol info;
4873
4874     info.symbol = sym;
4875     info.block = block;
4876     obstack_grow (obstackp, &info, sizeof (struct block_symbol));
4877   }
4878 }
4879
4880 /* Number of block_symbol structures currently collected in current vector in
4881    OBSTACKP.  */
4882
4883 static int
4884 num_defns_collected (struct obstack *obstackp)
4885 {
4886   return obstack_object_size (obstackp) / sizeof (struct block_symbol);
4887 }
4888
4889 /* Vector of block_symbol structures currently collected in current vector in
4890    OBSTACKP.  If FINISH, close off the vector and return its final address.  */
4891
4892 static struct block_symbol *
4893 defns_collected (struct obstack *obstackp, int finish)
4894 {
4895   if (finish)
4896     return (struct block_symbol *) obstack_finish (obstackp);
4897   else
4898     return (struct block_symbol *) obstack_base (obstackp);
4899 }
4900
4901 /* Return a bound minimal symbol matching NAME according to Ada
4902    decoding rules.  Returns an invalid symbol if there is no such
4903    minimal symbol.  Names prefixed with "standard__" are handled
4904    specially: "standard__" is first stripped off, and only static and
4905    global symbols are searched.  */
4906
4907 struct bound_minimal_symbol
4908 ada_lookup_simple_minsym (const char *name)
4909 {
4910   struct bound_minimal_symbol result;
4911   struct objfile *objfile;
4912   struct minimal_symbol *msymbol;
4913   const int wild_match_p = should_use_wild_match (name);
4914
4915   memset (&result, 0, sizeof (result));
4916
4917   /* Special case: If the user specifies a symbol name inside package
4918      Standard, do a non-wild matching of the symbol name without
4919      the "standard__" prefix.  This was primarily introduced in order
4920      to allow the user to specifically access the standard exceptions
4921      using, for instance, Standard.Constraint_Error when Constraint_Error
4922      is ambiguous (due to the user defining its own Constraint_Error
4923      entity inside its program).  */
4924   if (startswith (name, "standard__"))
4925     name += sizeof ("standard__") - 1;
4926
4927   ALL_MSYMBOLS (objfile, msymbol)
4928   {
4929     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4930         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4931       {
4932         result.minsym = msymbol;
4933         result.objfile = objfile;
4934         break;
4935       }
4936   }
4937
4938   return result;
4939 }
4940
4941 /* For all subprograms that statically enclose the subprogram of the
4942    selected frame, add symbols matching identifier NAME in DOMAIN
4943    and their blocks to the list of data in OBSTACKP, as for
4944    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4945    with a wildcard prefix.  */
4946
4947 static void
4948 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4949                                   const char *name, domain_enum domain,
4950                                   int wild_match_p)
4951 {
4952 }
4953
4954 /* True if TYPE is definitely an artificial type supplied to a symbol
4955    for which no debugging information was given in the symbol file.  */
4956
4957 static int
4958 is_nondebugging_type (struct type *type)
4959 {
4960   const char *name = ada_type_name (type);
4961
4962   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4963 }
4964
4965 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4966    that are deemed "identical" for practical purposes.
4967
4968    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4969    types and that their number of enumerals is identical (in other
4970    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4971
4972 static int
4973 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4974 {
4975   int i;
4976
4977   /* The heuristic we use here is fairly conservative.  We consider
4978      that 2 enumerate types are identical if they have the same
4979      number of enumerals and that all enumerals have the same
4980      underlying value and name.  */
4981
4982   /* All enums in the type should have an identical underlying value.  */
4983   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4984     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4985       return 0;
4986
4987   /* All enumerals should also have the same name (modulo any numerical
4988      suffix).  */
4989   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4990     {
4991       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4992       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4993       int len_1 = strlen (name_1);
4994       int len_2 = strlen (name_2);
4995
4996       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4997       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4998       if (len_1 != len_2
4999           || strncmp (TYPE_FIELD_NAME (type1, i),
5000                       TYPE_FIELD_NAME (type2, i),
5001                       len_1) != 0)
5002         return 0;
5003     }
5004
5005   return 1;
5006 }
5007
5008 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
5009    that are deemed "identical" for practical purposes.  Sometimes,
5010    enumerals are not strictly identical, but their types are so similar
5011    that they can be considered identical.
5012
5013    For instance, consider the following code:
5014
5015       type Color is (Black, Red, Green, Blue, White);
5016       type RGB_Color is new Color range Red .. Blue;
5017
5018    Type RGB_Color is a subrange of an implicit type which is a copy
5019    of type Color. If we call that implicit type RGB_ColorB ("B" is
5020    for "Base Type"), then type RGB_ColorB is a copy of type Color.
5021    As a result, when an expression references any of the enumeral
5022    by name (Eg. "print green"), the expression is technically
5023    ambiguous and the user should be asked to disambiguate. But
5024    doing so would only hinder the user, since it wouldn't matter
5025    what choice he makes, the outcome would always be the same.
5026    So, for practical purposes, we consider them as the same.  */
5027
5028 static int
5029 symbols_are_identical_enums (struct block_symbol *syms, int nsyms)
5030 {
5031   int i;
5032
5033   /* Before performing a thorough comparison check of each type,
5034      we perform a series of inexpensive checks.  We expect that these
5035      checks will quickly fail in the vast majority of cases, and thus
5036      help prevent the unnecessary use of a more expensive comparison.
5037      Said comparison also expects us to make some of these checks
5038      (see ada_identical_enum_types_p).  */
5039
5040   /* Quick check: All symbols should have an enum type.  */
5041   for (i = 0; i < nsyms; i++)
5042     if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM)
5043       return 0;
5044
5045   /* Quick check: They should all have the same value.  */
5046   for (i = 1; i < nsyms; i++)
5047     if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
5048       return 0;
5049
5050   /* Quick check: They should all have the same number of enumerals.  */
5051   for (i = 1; i < nsyms; i++)
5052     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].symbol))
5053         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].symbol)))
5054       return 0;
5055
5056   /* All the sanity checks passed, so we might have a set of
5057      identical enumeration types.  Perform a more complete
5058      comparison of the type of each symbol.  */
5059   for (i = 1; i < nsyms; i++)
5060     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
5061                                      SYMBOL_TYPE (syms[0].symbol)))
5062       return 0;
5063
5064   return 1;
5065 }
5066
5067 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
5068    duplicate other symbols in the list (The only case I know of where
5069    this happens is when object files containing stabs-in-ecoff are
5070    linked with files containing ordinary ecoff debugging symbols (or no
5071    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
5072    Returns the number of items in the modified list.  */
5073
5074 static int
5075 remove_extra_symbols (struct block_symbol *syms, int nsyms)
5076 {
5077   int i, j;
5078
5079   /* We should never be called with less than 2 symbols, as there
5080      cannot be any extra symbol in that case.  But it's easy to
5081      handle, since we have nothing to do in that case.  */
5082   if (nsyms < 2)
5083     return nsyms;
5084
5085   i = 0;
5086   while (i < nsyms)
5087     {
5088       int remove_p = 0;
5089
5090       /* If two symbols have the same name and one of them is a stub type,
5091          the get rid of the stub.  */
5092
5093       if (TYPE_STUB (SYMBOL_TYPE (syms[i].symbol))
5094           && SYMBOL_LINKAGE_NAME (syms[i].symbol) != NULL)
5095         {
5096           for (j = 0; j < nsyms; j++)
5097             {
5098               if (j != i
5099                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].symbol))
5100                   && SYMBOL_LINKAGE_NAME (syms[j].symbol) != NULL
5101                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].symbol),
5102                              SYMBOL_LINKAGE_NAME (syms[j].symbol)) == 0)
5103                 remove_p = 1;
5104             }
5105         }
5106
5107       /* Two symbols with the same name, same class and same address
5108          should be identical.  */
5109
5110       else if (SYMBOL_LINKAGE_NAME (syms[i].symbol) != NULL
5111           && SYMBOL_CLASS (syms[i].symbol) == LOC_STATIC
5112           && is_nondebugging_type (SYMBOL_TYPE (syms[i].symbol)))
5113         {
5114           for (j = 0; j < nsyms; j += 1)
5115             {
5116               if (i != j
5117                   && SYMBOL_LINKAGE_NAME (syms[j].symbol) != NULL
5118                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].symbol),
5119                              SYMBOL_LINKAGE_NAME (syms[j].symbol)) == 0
5120                   && SYMBOL_CLASS (syms[i].symbol)
5121                        == SYMBOL_CLASS (syms[j].symbol)
5122                   && SYMBOL_VALUE_ADDRESS (syms[i].symbol)
5123                   == SYMBOL_VALUE_ADDRESS (syms[j].symbol))
5124                 remove_p = 1;
5125             }
5126         }
5127       
5128       if (remove_p)
5129         {
5130           for (j = i + 1; j < nsyms; j += 1)
5131             syms[j - 1] = syms[j];
5132           nsyms -= 1;
5133         }
5134
5135       i += 1;
5136     }
5137
5138   /* If all the remaining symbols are identical enumerals, then
5139      just keep the first one and discard the rest.
5140
5141      Unlike what we did previously, we do not discard any entry
5142      unless they are ALL identical.  This is because the symbol
5143      comparison is not a strict comparison, but rather a practical
5144      comparison.  If all symbols are considered identical, then
5145      we can just go ahead and use the first one and discard the rest.
5146      But if we cannot reduce the list to a single element, we have
5147      to ask the user to disambiguate anyways.  And if we have to
5148      present a multiple-choice menu, it's less confusing if the list
5149      isn't missing some choices that were identical and yet distinct.  */
5150   if (symbols_are_identical_enums (syms, nsyms))
5151     nsyms = 1;
5152
5153   return nsyms;
5154 }
5155
5156 /* Given a type that corresponds to a renaming entity, use the type name
5157    to extract the scope (package name or function name, fully qualified,
5158    and following the GNAT encoding convention) where this renaming has been
5159    defined.  The string returned needs to be deallocated after use.  */
5160
5161 static char *
5162 xget_renaming_scope (struct type *renaming_type)
5163 {
5164   /* The renaming types adhere to the following convention:
5165      <scope>__<rename>___<XR extension>.
5166      So, to extract the scope, we search for the "___XR" extension,
5167      and then backtrack until we find the first "__".  */
5168
5169   const char *name = type_name_no_tag (renaming_type);
5170   const char *suffix = strstr (name, "___XR");
5171   const char *last;
5172   int scope_len;
5173   char *scope;
5174
5175   /* Now, backtrack a bit until we find the first "__".  Start looking
5176      at suffix - 3, as the <rename> part is at least one character long.  */
5177
5178   for (last = suffix - 3; last > name; last--)
5179     if (last[0] == '_' && last[1] == '_')
5180       break;
5181
5182   /* Make a copy of scope and return it.  */
5183
5184   scope_len = last - name;
5185   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
5186
5187   strncpy (scope, name, scope_len);
5188   scope[scope_len] = '\0';
5189
5190   return scope;
5191 }
5192
5193 /* Return nonzero if NAME corresponds to a package name.  */
5194
5195 static int
5196 is_package_name (const char *name)
5197 {
5198   /* Here, We take advantage of the fact that no symbols are generated
5199      for packages, while symbols are generated for each function.
5200      So the condition for NAME represent a package becomes equivalent
5201      to NAME not existing in our list of symbols.  There is only one
5202      small complication with library-level functions (see below).  */
5203
5204   char *fun_name;
5205
5206   /* If it is a function that has not been defined at library level,
5207      then we should be able to look it up in the symbols.  */
5208   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5209     return 0;
5210
5211   /* Library-level function names start with "_ada_".  See if function
5212      "_ada_" followed by NAME can be found.  */
5213
5214   /* Do a quick check that NAME does not contain "__", since library-level
5215      functions names cannot contain "__" in them.  */
5216   if (strstr (name, "__") != NULL)
5217     return 0;
5218
5219   fun_name = xstrprintf ("_ada_%s", name);
5220
5221   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
5222 }
5223
5224 /* Return nonzero if SYM corresponds to a renaming entity that is
5225    not visible from FUNCTION_NAME.  */
5226
5227 static int
5228 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
5229 {
5230   char *scope;
5231   struct cleanup *old_chain;
5232
5233   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5234     return 0;
5235
5236   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
5237   old_chain = make_cleanup (xfree, scope);
5238
5239   /* If the rename has been defined in a package, then it is visible.  */
5240   if (is_package_name (scope))
5241     {
5242       do_cleanups (old_chain);
5243       return 0;
5244     }
5245
5246   /* Check that the rename is in the current function scope by checking
5247      that its name starts with SCOPE.  */
5248
5249   /* If the function name starts with "_ada_", it means that it is
5250      a library-level function.  Strip this prefix before doing the
5251      comparison, as the encoding for the renaming does not contain
5252      this prefix.  */
5253   if (startswith (function_name, "_ada_"))
5254     function_name += 5;
5255
5256   {
5257     int is_invisible = !startswith (function_name, scope);
5258
5259     do_cleanups (old_chain);
5260     return is_invisible;
5261   }
5262 }
5263
5264 /* Remove entries from SYMS that corresponds to a renaming entity that
5265    is not visible from the function associated with CURRENT_BLOCK or
5266    that is superfluous due to the presence of more specific renaming
5267    information.  Places surviving symbols in the initial entries of
5268    SYMS and returns the number of surviving symbols.
5269    
5270    Rationale:
5271    First, in cases where an object renaming is implemented as a
5272    reference variable, GNAT may produce both the actual reference
5273    variable and the renaming encoding.  In this case, we discard the
5274    latter.
5275
5276    Second, GNAT emits a type following a specified encoding for each renaming
5277    entity.  Unfortunately, STABS currently does not support the definition
5278    of types that are local to a given lexical block, so all renamings types
5279    are emitted at library level.  As a consequence, if an application
5280    contains two renaming entities using the same name, and a user tries to
5281    print the value of one of these entities, the result of the ada symbol
5282    lookup will also contain the wrong renaming type.
5283
5284    This function partially covers for this limitation by attempting to
5285    remove from the SYMS list renaming symbols that should be visible
5286    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5287    method with the current information available.  The implementation
5288    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5289    
5290       - When the user tries to print a rename in a function while there
5291         is another rename entity defined in a package:  Normally, the
5292         rename in the function has precedence over the rename in the
5293         package, so the latter should be removed from the list.  This is
5294         currently not the case.
5295         
5296       - This function will incorrectly remove valid renames if
5297         the CURRENT_BLOCK corresponds to a function which symbol name
5298         has been changed by an "Export" pragma.  As a consequence,
5299         the user will be unable to print such rename entities.  */
5300
5301 static int
5302 remove_irrelevant_renamings (struct block_symbol *syms,
5303                              int nsyms, const struct block *current_block)
5304 {
5305   struct symbol *current_function;
5306   const char *current_function_name;
5307   int i;
5308   int is_new_style_renaming;
5309
5310   /* If there is both a renaming foo___XR... encoded as a variable and
5311      a simple variable foo in the same block, discard the latter.
5312      First, zero out such symbols, then compress.  */
5313   is_new_style_renaming = 0;
5314   for (i = 0; i < nsyms; i += 1)
5315     {
5316       struct symbol *sym = syms[i].symbol;
5317       const struct block *block = syms[i].block;
5318       const char *name;
5319       const char *suffix;
5320
5321       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5322         continue;
5323       name = SYMBOL_LINKAGE_NAME (sym);
5324       suffix = strstr (name, "___XR");
5325
5326       if (suffix != NULL)
5327         {
5328           int name_len = suffix - name;
5329           int j;
5330
5331           is_new_style_renaming = 1;
5332           for (j = 0; j < nsyms; j += 1)
5333             if (i != j && syms[j].symbol != NULL
5334                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].symbol),
5335                             name_len) == 0
5336                 && block == syms[j].block)
5337               syms[j].symbol = NULL;
5338         }
5339     }
5340   if (is_new_style_renaming)
5341     {
5342       int j, k;
5343
5344       for (j = k = 0; j < nsyms; j += 1)
5345         if (syms[j].symbol != NULL)
5346             {
5347               syms[k] = syms[j];
5348               k += 1;
5349             }
5350       return k;
5351     }
5352
5353   /* Extract the function name associated to CURRENT_BLOCK.
5354      Abort if unable to do so.  */
5355
5356   if (current_block == NULL)
5357     return nsyms;
5358
5359   current_function = block_linkage_function (current_block);
5360   if (current_function == NULL)
5361     return nsyms;
5362
5363   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5364   if (current_function_name == NULL)
5365     return nsyms;
5366
5367   /* Check each of the symbols, and remove it from the list if it is
5368      a type corresponding to a renaming that is out of the scope of
5369      the current block.  */
5370
5371   i = 0;
5372   while (i < nsyms)
5373     {
5374       if (ada_parse_renaming (syms[i].symbol, NULL, NULL, NULL)
5375           == ADA_OBJECT_RENAMING
5376           && old_renaming_is_invisible (syms[i].symbol, current_function_name))
5377         {
5378           int j;
5379
5380           for (j = i + 1; j < nsyms; j += 1)
5381             syms[j - 1] = syms[j];
5382           nsyms -= 1;
5383         }
5384       else
5385         i += 1;
5386     }
5387
5388   return nsyms;
5389 }
5390
5391 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5392    whose name and domain match NAME and DOMAIN respectively.
5393    If no match was found, then extend the search to "enclosing"
5394    routines (in other words, if we're inside a nested function,
5395    search the symbols defined inside the enclosing functions).
5396    If WILD_MATCH_P is nonzero, perform the naming matching in
5397    "wild" mode (see function "wild_match" for more info).
5398
5399    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5400
5401 static void
5402 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5403                        const struct block *block, domain_enum domain,
5404                        int wild_match_p)
5405 {
5406   int block_depth = 0;
5407
5408   while (block != NULL)
5409     {
5410       block_depth += 1;
5411       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5412                              wild_match_p);
5413
5414       /* If we found a non-function match, assume that's the one.  */
5415       if (is_nonfunction (defns_collected (obstackp, 0),
5416                           num_defns_collected (obstackp)))
5417         return;
5418
5419       block = BLOCK_SUPERBLOCK (block);
5420     }
5421
5422   /* If no luck so far, try to find NAME as a local symbol in some lexically
5423      enclosing subprogram.  */
5424   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5425     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5426 }
5427
5428 /* An object of this type is used as the user_data argument when
5429    calling the map_matching_symbols method.  */
5430
5431 struct match_data
5432 {
5433   struct objfile *objfile;
5434   struct obstack *obstackp;
5435   struct symbol *arg_sym;
5436   int found_sym;
5437 };
5438
5439 /* A callback for add_nonlocal_symbols that adds SYM, found in BLOCK,
5440    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5441    containing the obstack that collects the symbol list, the file that SYM
5442    must come from, a flag indicating whether a non-argument symbol has
5443    been found in the current block, and the last argument symbol
5444    passed in SYM within the current block (if any).  When SYM is null,
5445    marking the end of a block, the argument symbol is added if no
5446    other has been found.  */
5447
5448 static int
5449 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5450 {
5451   struct match_data *data = (struct match_data *) data0;
5452   
5453   if (sym == NULL)
5454     {
5455       if (!data->found_sym && data->arg_sym != NULL) 
5456         add_defn_to_vec (data->obstackp,
5457                          fixup_symbol_section (data->arg_sym, data->objfile),
5458                          block);
5459       data->found_sym = 0;
5460       data->arg_sym = NULL;
5461     }
5462   else 
5463     {
5464       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5465         return 0;
5466       else if (SYMBOL_IS_ARGUMENT (sym))
5467         data->arg_sym = sym;
5468       else
5469         {
5470           data->found_sym = 1;
5471           add_defn_to_vec (data->obstackp,
5472                            fixup_symbol_section (sym, data->objfile),
5473                            block);
5474         }
5475     }
5476   return 0;
5477 }
5478
5479 /* Helper for add_nonlocal_symbols.  Find symbols in DOMAIN which are targetted
5480    by renamings matching NAME in BLOCK.  Add these symbols to OBSTACKP.  If
5481    WILD_MATCH_P is nonzero, perform the naming matching in "wild" mode (see
5482    function "wild_match" for more information).  Return whether we found such
5483    symbols.  */
5484
5485 static int
5486 ada_add_block_renamings (struct obstack *obstackp,
5487                          const struct block *block,
5488                          const char *name,
5489                          domain_enum domain,
5490                          int wild_match_p)
5491 {
5492   struct using_direct *renaming;
5493   int defns_mark = num_defns_collected (obstackp);
5494
5495   for (renaming = block_using (block);
5496        renaming != NULL;
5497        renaming = renaming->next)
5498     {
5499       const char *r_name;
5500       int name_match;
5501
5502       /* Avoid infinite recursions: skip this renaming if we are actually
5503          already traversing it.
5504
5505          Currently, symbol lookup in Ada don't use the namespace machinery from
5506          C++/Fortran support: skip namespace imports that use them.  */
5507       if (renaming->searched
5508           || (renaming->import_src != NULL
5509               && renaming->import_src[0] != '\0')
5510           || (renaming->import_dest != NULL
5511               && renaming->import_dest[0] != '\0'))
5512         continue;
5513       renaming->searched = 1;
5514
5515       /* TODO: here, we perform another name-based symbol lookup, which can
5516          pull its own multiple overloads.  In theory, we should be able to do
5517          better in this case since, in DWARF, DW_AT_import is a DIE reference,
5518          not a simple name.  But in order to do this, we would need to enhance
5519          the DWARF reader to associate a symbol to this renaming, instead of a
5520          name.  So, for now, we do something simpler: re-use the C++/Fortran
5521          namespace machinery.  */
5522       r_name = (renaming->alias != NULL
5523                 ? renaming->alias
5524                 : renaming->declaration);
5525       name_match
5526         = wild_match_p ? wild_match (r_name, name) : strcmp (r_name, name);
5527       if (name_match == 0)
5528         ada_add_all_symbols (obstackp, block, renaming->declaration, domain,
5529                              1, NULL);
5530       renaming->searched = 0;
5531     }
5532   return num_defns_collected (obstackp) != defns_mark;
5533 }
5534
5535 /* Implements compare_names, but only applying the comparision using
5536    the given CASING.  */
5537
5538 static int
5539 compare_names_with_case (const char *string1, const char *string2,
5540                          enum case_sensitivity casing)
5541 {
5542   while (*string1 != '\0' && *string2 != '\0')
5543     {
5544       char c1, c2;
5545
5546       if (isspace (*string1) || isspace (*string2))
5547         return strcmp_iw_ordered (string1, string2);
5548
5549       if (casing == case_sensitive_off)
5550         {
5551           c1 = tolower (*string1);
5552           c2 = tolower (*string2);
5553         }
5554       else
5555         {
5556           c1 = *string1;
5557           c2 = *string2;
5558         }
5559       if (c1 != c2)
5560         break;
5561
5562       string1 += 1;
5563       string2 += 1;
5564     }
5565
5566   switch (*string1)
5567     {
5568     case '(':
5569       return strcmp_iw_ordered (string1, string2);
5570     case '_':
5571       if (*string2 == '\0')
5572         {
5573           if (is_name_suffix (string1))
5574             return 0;
5575           else
5576             return 1;
5577         }
5578       /* FALLTHROUGH */
5579     default:
5580       if (*string2 == '(')
5581         return strcmp_iw_ordered (string1, string2);
5582       else
5583         {
5584           if (casing == case_sensitive_off)
5585             return tolower (*string1) - tolower (*string2);
5586           else
5587             return *string1 - *string2;
5588         }
5589     }
5590 }
5591
5592 /* Compare STRING1 to STRING2, with results as for strcmp.
5593    Compatible with strcmp_iw_ordered in that...
5594
5595        strcmp_iw_ordered (STRING1, STRING2) <= 0
5596
5597    ... implies...
5598
5599        compare_names (STRING1, STRING2) <= 0
5600
5601    (they may differ as to what symbols compare equal).  */
5602
5603 static int
5604 compare_names (const char *string1, const char *string2)
5605 {
5606   int result;
5607
5608   /* Similar to what strcmp_iw_ordered does, we need to perform
5609      a case-insensitive comparison first, and only resort to
5610      a second, case-sensitive, comparison if the first one was
5611      not sufficient to differentiate the two strings.  */
5612
5613   result = compare_names_with_case (string1, string2, case_sensitive_off);
5614   if (result == 0)
5615     result = compare_names_with_case (string1, string2, case_sensitive_on);
5616
5617   return result;
5618 }
5619
5620 /* Add to OBSTACKP all non-local symbols whose name and domain match
5621    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5622    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5623
5624 static void
5625 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5626                       domain_enum domain, int global,
5627                       int is_wild_match)
5628 {
5629   struct objfile *objfile;
5630   struct compunit_symtab *cu;
5631   struct match_data data;
5632
5633   memset (&data, 0, sizeof data);
5634   data.obstackp = obstackp;
5635
5636   ALL_OBJFILES (objfile)
5637     {
5638       data.objfile = objfile;
5639
5640       if (is_wild_match)
5641         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5642                                                aux_add_nonlocal_symbols, &data,
5643                                                wild_match, NULL);
5644       else
5645         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5646                                                aux_add_nonlocal_symbols, &data,
5647                                                full_match, compare_names);
5648
5649       ALL_OBJFILE_COMPUNITS (objfile, cu)
5650         {
5651           const struct block *global_block
5652             = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5653
5654           if (ada_add_block_renamings (obstackp, global_block , name, domain,
5655                                        is_wild_match))
5656             data.found_sym = 1;
5657         }
5658     }
5659
5660   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5661     {
5662       ALL_OBJFILES (objfile)
5663         {
5664           char *name1 = (char *) alloca (strlen (name) + sizeof ("_ada_"));
5665           strcpy (name1, "_ada_");
5666           strcpy (name1 + sizeof ("_ada_") - 1, name);
5667           data.objfile = objfile;
5668           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5669                                                  global,
5670                                                  aux_add_nonlocal_symbols,
5671                                                  &data,
5672                                                  full_match, compare_names);
5673         }
5674     }           
5675 }
5676
5677 /* Find symbols in DOMAIN matching NAME, in BLOCK and, if FULL_SEARCH is
5678    non-zero, enclosing scope and in global scopes, returning the number of
5679    matches.  Add these to OBSTACKP.
5680
5681    When FULL_SEARCH is non-zero, any non-function/non-enumeral
5682    symbol match within the nest of blocks whose innermost member is BLOCK,
5683    is the one match returned (no other matches in that or
5684    enclosing blocks is returned).  If there are any matches in or
5685    surrounding BLOCK, then these alone are returned.
5686
5687    Names prefixed with "standard__" are handled specially: "standard__"
5688    is first stripped off, and only static and global symbols are searched.
5689
5690    If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5691    to lookup global symbols.  */
5692
5693 static void
5694 ada_add_all_symbols (struct obstack *obstackp,
5695                      const struct block *block,
5696                      const char *name,
5697                      domain_enum domain,
5698                      int full_search,
5699                      int *made_global_lookup_p)
5700 {
5701   struct symbol *sym;
5702   const int wild_match_p = should_use_wild_match (name);
5703
5704   if (made_global_lookup_p)
5705     *made_global_lookup_p = 0;
5706
5707   /* Special case: If the user specifies a symbol name inside package
5708      Standard, do a non-wild matching of the symbol name without
5709      the "standard__" prefix.  This was primarily introduced in order
5710      to allow the user to specifically access the standard exceptions
5711      using, for instance, Standard.Constraint_Error when Constraint_Error
5712      is ambiguous (due to the user defining its own Constraint_Error
5713      entity inside its program).  */
5714   if (startswith (name, "standard__"))
5715     {
5716       block = NULL;
5717       name = name + sizeof ("standard__") - 1;
5718     }
5719
5720   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5721
5722   if (block != NULL)
5723     {
5724       if (full_search)
5725         ada_add_local_symbols (obstackp, name, block, domain, wild_match_p);
5726       else
5727         {
5728           /* In the !full_search case we're are being called by
5729              ada_iterate_over_symbols, and we don't want to search
5730              superblocks.  */
5731           ada_add_block_symbols (obstackp, block, name, domain, NULL,
5732                                  wild_match_p);
5733         }
5734       if (num_defns_collected (obstackp) > 0 || !full_search)
5735         return;
5736     }
5737
5738   /* No non-global symbols found.  Check our cache to see if we have
5739      already performed this search before.  If we have, then return
5740      the same result.  */
5741
5742   if (lookup_cached_symbol (name, domain, &sym, &block))
5743     {
5744       if (sym != NULL)
5745         add_defn_to_vec (obstackp, sym, block);
5746       return;
5747     }
5748
5749   if (made_global_lookup_p)
5750     *made_global_lookup_p = 1;
5751
5752   /* Search symbols from all global blocks.  */
5753  
5754   add_nonlocal_symbols (obstackp, name, domain, 1, wild_match_p);
5755
5756   /* Now add symbols from all per-file blocks if we've gotten no hits
5757      (not strictly correct, but perhaps better than an error).  */
5758
5759   if (num_defns_collected (obstackp) == 0)
5760     add_nonlocal_symbols (obstackp, name, domain, 0, wild_match_p);
5761 }
5762
5763 /* Find symbols in DOMAIN matching NAME, in BLOCK and, if full_search is
5764    non-zero, enclosing scope and in global scopes, returning the number of
5765    matches.
5766    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5767    indicating the symbols found and the blocks and symbol tables (if
5768    any) in which they were found.  This vector is transient---good only to
5769    the next call of ada_lookup_symbol_list.
5770
5771    When full_search is non-zero, any non-function/non-enumeral
5772    symbol match within the nest of blocks whose innermost member is BLOCK,
5773    is the one match returned (no other matches in that or
5774    enclosing blocks is returned).  If there are any matches in or
5775    surrounding BLOCK, then these alone are returned.
5776
5777    Names prefixed with "standard__" are handled specially: "standard__"
5778    is first stripped off, and only static and global symbols are searched.  */
5779
5780 static int
5781 ada_lookup_symbol_list_worker (const char *name, const struct block *block,
5782                                domain_enum domain,
5783                                struct block_symbol **results,
5784                                int full_search)
5785 {
5786   const int wild_match_p = should_use_wild_match (name);
5787   int syms_from_global_search;
5788   int ndefns;
5789
5790   obstack_free (&symbol_list_obstack, NULL);
5791   obstack_init (&symbol_list_obstack);
5792   ada_add_all_symbols (&symbol_list_obstack, block, name, domain,
5793                        full_search, &syms_from_global_search);
5794
5795   ndefns = num_defns_collected (&symbol_list_obstack);
5796   *results = defns_collected (&symbol_list_obstack, 1);
5797
5798   ndefns = remove_extra_symbols (*results, ndefns);
5799
5800   if (ndefns == 0 && full_search && syms_from_global_search)
5801     cache_symbol (name, domain, NULL, NULL);
5802
5803   if (ndefns == 1 && full_search && syms_from_global_search)
5804     cache_symbol (name, domain, (*results)[0].symbol, (*results)[0].block);
5805
5806   ndefns = remove_irrelevant_renamings (*results, ndefns, block);
5807   return ndefns;
5808 }
5809
5810 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5811    in global scopes, returning the number of matches, and setting *RESULTS
5812    to a vector of (SYM,BLOCK) tuples.
5813    See ada_lookup_symbol_list_worker for further details.  */
5814
5815 int
5816 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5817                         domain_enum domain, struct block_symbol **results)
5818 {
5819   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5820 }
5821
5822 /* Implementation of the la_iterate_over_symbols method.  */
5823
5824 static void
5825 ada_iterate_over_symbols (const struct block *block,
5826                           const char *name, domain_enum domain,
5827                           symbol_found_callback_ftype *callback,
5828                           void *data)
5829 {
5830   int ndefs, i;
5831   struct block_symbol *results;
5832
5833   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5834   for (i = 0; i < ndefs; ++i)
5835     {
5836       if (! (*callback) (results[i].symbol, data))
5837         break;
5838     }
5839 }
5840
5841 /* If NAME is the name of an entity, return a string that should
5842    be used to look that entity up in Ada units.  This string should
5843    be deallocated after use using xfree.
5844
5845    NAME can have any form that the "break" or "print" commands might
5846    recognize.  In other words, it does not have to be the "natural"
5847    name, or the "encoded" name.  */
5848
5849 char *
5850 ada_name_for_lookup (const char *name)
5851 {
5852   char *canon;
5853   int nlen = strlen (name);
5854
5855   if (name[0] == '<' && name[nlen - 1] == '>')
5856     {
5857       canon = (char *) xmalloc (nlen - 1);
5858       memcpy (canon, name + 1, nlen - 2);
5859       canon[nlen - 2] = '\0';
5860     }
5861   else
5862     canon = xstrdup (ada_encode (ada_fold_name (name)));
5863   return canon;
5864 }
5865
5866 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5867    to 1, but choosing the first symbol found if there are multiple
5868    choices.
5869
5870    The result is stored in *INFO, which must be non-NULL.
5871    If no match is found, INFO->SYM is set to NULL.  */
5872
5873 void
5874 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5875                            domain_enum domain,
5876                            struct block_symbol *info)
5877 {
5878   struct block_symbol *candidates;
5879   int n_candidates;
5880
5881   gdb_assert (info != NULL);
5882   memset (info, 0, sizeof (struct block_symbol));
5883
5884   n_candidates = ada_lookup_symbol_list (name, block, domain, &candidates);
5885   if (n_candidates == 0)
5886     return;
5887
5888   *info = candidates[0];
5889   info->symbol = fixup_symbol_section (info->symbol, NULL);
5890 }
5891
5892 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5893    scope and in global scopes, or NULL if none.  NAME is folded and
5894    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5895    choosing the first symbol if there are multiple choices.
5896    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5897
5898 struct block_symbol
5899 ada_lookup_symbol (const char *name, const struct block *block0,
5900                    domain_enum domain, int *is_a_field_of_this)
5901 {
5902   struct block_symbol info;
5903
5904   if (is_a_field_of_this != NULL)
5905     *is_a_field_of_this = 0;
5906
5907   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5908                              block0, domain, &info);
5909   return info;
5910 }
5911
5912 static struct block_symbol
5913 ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5914                             const char *name,
5915                             const struct block *block,
5916                             const domain_enum domain)
5917 {
5918   struct block_symbol sym;
5919
5920   sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5921   if (sym.symbol != NULL)
5922     return sym;
5923
5924   /* If we haven't found a match at this point, try the primitive
5925      types.  In other languages, this search is performed before
5926      searching for global symbols in order to short-circuit that
5927      global-symbol search if it happens that the name corresponds
5928      to a primitive type.  But we cannot do the same in Ada, because
5929      it is perfectly legitimate for a program to declare a type which
5930      has the same name as a standard type.  If looking up a type in
5931      that situation, we have traditionally ignored the primitive type
5932      in favor of user-defined types.  This is why, unlike most other
5933      languages, we search the primitive types this late and only after
5934      having searched the global symbols without success.  */
5935
5936   if (domain == VAR_DOMAIN)
5937     {
5938       struct gdbarch *gdbarch;
5939
5940       if (block == NULL)
5941         gdbarch = target_gdbarch ();
5942       else
5943         gdbarch = block_gdbarch (block);
5944       sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5945       if (sym.symbol != NULL)
5946         return sym;
5947     }
5948
5949   return (struct block_symbol) {NULL, NULL};
5950 }
5951
5952
5953 /* True iff STR is a possible encoded suffix of a normal Ada name
5954    that is to be ignored for matching purposes.  Suffixes of parallel
5955    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5956    are given by any of the regular expressions:
5957
5958    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5959    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5960    TKB              [subprogram suffix for task bodies]
5961    _E[0-9]+[bs]$    [protected object entry suffixes]
5962    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5963
5964    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5965    match is performed.  This sequence is used to differentiate homonyms,
5966    is an optional part of a valid name suffix.  */
5967
5968 static int
5969 is_name_suffix (const char *str)
5970 {
5971   int k;
5972   const char *matching;
5973   const int len = strlen (str);
5974
5975   /* Skip optional leading __[0-9]+.  */
5976
5977   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5978     {
5979       str += 3;
5980       while (isdigit (str[0]))
5981         str += 1;
5982     }
5983   
5984   /* [.$][0-9]+ */
5985
5986   if (str[0] == '.' || str[0] == '$')
5987     {
5988       matching = str + 1;
5989       while (isdigit (matching[0]))
5990         matching += 1;
5991       if (matching[0] == '\0')
5992         return 1;
5993     }
5994
5995   /* ___[0-9]+ */
5996
5997   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5998     {
5999       matching = str + 3;
6000       while (isdigit (matching[0]))
6001         matching += 1;
6002       if (matching[0] == '\0')
6003         return 1;
6004     }
6005
6006   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
6007
6008   if (strcmp (str, "TKB") == 0)
6009     return 1;
6010
6011 #if 0
6012   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
6013      with a N at the end.  Unfortunately, the compiler uses the same
6014      convention for other internal types it creates.  So treating
6015      all entity names that end with an "N" as a name suffix causes
6016      some regressions.  For instance, consider the case of an enumerated
6017      type.  To support the 'Image attribute, it creates an array whose
6018      name ends with N.
6019      Having a single character like this as a suffix carrying some
6020      information is a bit risky.  Perhaps we should change the encoding
6021      to be something like "_N" instead.  In the meantime, do not do
6022      the following check.  */
6023   /* Protected Object Subprograms */
6024   if (len == 1 && str [0] == 'N')
6025     return 1;
6026 #endif
6027
6028   /* _E[0-9]+[bs]$ */
6029   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
6030     {
6031       matching = str + 3;
6032       while (isdigit (matching[0]))
6033         matching += 1;
6034       if ((matching[0] == 'b' || matching[0] == 's')
6035           && matching [1] == '\0')
6036         return 1;
6037     }
6038
6039   /* ??? We should not modify STR directly, as we are doing below.  This
6040      is fine in this case, but may become problematic later if we find
6041      that this alternative did not work, and want to try matching
6042      another one from the begining of STR.  Since we modified it, we
6043      won't be able to find the begining of the string anymore!  */
6044   if (str[0] == 'X')
6045     {
6046       str += 1;
6047       while (str[0] != '_' && str[0] != '\0')
6048         {
6049           if (str[0] != 'n' && str[0] != 'b')
6050             return 0;
6051           str += 1;
6052         }
6053     }
6054
6055   if (str[0] == '\000')
6056     return 1;
6057
6058   if (str[0] == '_')
6059     {
6060       if (str[1] != '_' || str[2] == '\000')
6061         return 0;
6062       if (str[2] == '_')
6063         {
6064           if (strcmp (str + 3, "JM") == 0)
6065             return 1;
6066           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
6067              the LJM suffix in favor of the JM one.  But we will
6068              still accept LJM as a valid suffix for a reasonable
6069              amount of time, just to allow ourselves to debug programs
6070              compiled using an older version of GNAT.  */
6071           if (strcmp (str + 3, "LJM") == 0)
6072             return 1;
6073           if (str[3] != 'X')
6074             return 0;
6075           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
6076               || str[4] == 'U' || str[4] == 'P')
6077             return 1;
6078           if (str[4] == 'R' && str[5] != 'T')
6079             return 1;
6080           return 0;
6081         }
6082       if (!isdigit (str[2]))
6083         return 0;
6084       for (k = 3; str[k] != '\0'; k += 1)
6085         if (!isdigit (str[k]) && str[k] != '_')
6086           return 0;
6087       return 1;
6088     }
6089   if (str[0] == '$' && isdigit (str[1]))
6090     {
6091       for (k = 2; str[k] != '\0'; k += 1)
6092         if (!isdigit (str[k]) && str[k] != '_')
6093           return 0;
6094       return 1;
6095     }
6096   return 0;
6097 }
6098
6099 /* Return non-zero if the string starting at NAME and ending before
6100    NAME_END contains no capital letters.  */
6101
6102 static int
6103 is_valid_name_for_wild_match (const char *name0)
6104 {
6105   const char *decoded_name = ada_decode (name0);
6106   int i;
6107
6108   /* If the decoded name starts with an angle bracket, it means that
6109      NAME0 does not follow the GNAT encoding format.  It should then
6110      not be allowed as a possible wild match.  */
6111   if (decoded_name[0] == '<')
6112     return 0;
6113
6114   for (i=0; decoded_name[i] != '\0'; i++)
6115     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
6116       return 0;
6117
6118   return 1;
6119 }
6120
6121 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
6122    that could start a simple name.  Assumes that *NAMEP points into
6123    the string beginning at NAME0.  */
6124
6125 static int
6126 advance_wild_match (const char **namep, const char *name0, int target0)
6127 {
6128   const char *name = *namep;
6129
6130   while (1)
6131     {
6132       int t0, t1;
6133
6134       t0 = *name;
6135       if (t0 == '_')
6136         {
6137           t1 = name[1];
6138           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
6139             {
6140               name += 1;
6141               if (name == name0 + 5 && startswith (name0, "_ada"))
6142                 break;
6143               else
6144                 name += 1;
6145             }
6146           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
6147                                  || name[2] == target0))
6148             {
6149               name += 2;
6150               break;
6151             }
6152           else
6153             return 0;
6154         }
6155       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
6156         name += 1;
6157       else
6158         return 0;
6159     }
6160
6161   *namep = name;
6162   return 1;
6163 }
6164
6165 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
6166    informational suffixes of NAME (i.e., for which is_name_suffix is
6167    true).  Assumes that PATN is a lower-cased Ada simple name.  */
6168
6169 static int
6170 wild_match (const char *name, const char *patn)
6171 {
6172   const char *p;
6173   const char *name0 = name;
6174
6175   while (1)
6176     {
6177       const char *match = name;
6178
6179       if (*name == *patn)
6180         {
6181           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6182             if (*p != *name)
6183               break;
6184           if (*p == '\0' && is_name_suffix (name))
6185             return match != name0 && !is_valid_name_for_wild_match (name0);
6186
6187           if (name[-1] == '_')
6188             name -= 1;
6189         }
6190       if (!advance_wild_match (&name, name0, *patn))
6191         return 1;
6192     }
6193 }
6194
6195 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
6196    informational suffix.  */
6197
6198 static int
6199 full_match (const char *sym_name, const char *search_name)
6200 {
6201   return !match_name (sym_name, search_name, 0);
6202 }
6203
6204
6205 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
6206    vector *defn_symbols, updating the list of symbols in OBSTACKP 
6207    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
6208    OBJFILE is the section containing BLOCK.  */
6209
6210 static void
6211 ada_add_block_symbols (struct obstack *obstackp,
6212                        const struct block *block, const char *name,
6213                        domain_enum domain, struct objfile *objfile,
6214                        int wild)
6215 {
6216   struct block_iterator iter;
6217   int name_len = strlen (name);
6218   /* A matching argument symbol, if any.  */
6219   struct symbol *arg_sym;
6220   /* Set true when we find a matching non-argument symbol.  */
6221   int found_sym;
6222   struct symbol *sym;
6223
6224   arg_sym = NULL;
6225   found_sym = 0;
6226   if (wild)
6227     {
6228       for (sym = block_iter_match_first (block, name, wild_match, &iter);
6229            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
6230       {
6231         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6232                                    SYMBOL_DOMAIN (sym), domain)
6233             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
6234           {
6235             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
6236               continue;
6237             else if (SYMBOL_IS_ARGUMENT (sym))
6238               arg_sym = sym;
6239             else
6240               {
6241                 found_sym = 1;
6242                 add_defn_to_vec (obstackp,
6243                                  fixup_symbol_section (sym, objfile),
6244                                  block);
6245               }
6246           }
6247       }
6248     }
6249   else
6250     {
6251      for (sym = block_iter_match_first (block, name, full_match, &iter);
6252           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
6253       {
6254         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6255                                    SYMBOL_DOMAIN (sym), domain))
6256           {
6257             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6258               {
6259                 if (SYMBOL_IS_ARGUMENT (sym))
6260                   arg_sym = sym;
6261                 else
6262                   {
6263                     found_sym = 1;
6264                     add_defn_to_vec (obstackp,
6265                                      fixup_symbol_section (sym, objfile),
6266                                      block);
6267                   }
6268               }
6269           }
6270       }
6271     }
6272
6273   /* Handle renamings.  */
6274
6275   if (ada_add_block_renamings (obstackp, block, name, domain, wild))
6276     found_sym = 1;
6277
6278   if (!found_sym && arg_sym != NULL)
6279     {
6280       add_defn_to_vec (obstackp,
6281                        fixup_symbol_section (arg_sym, objfile),
6282                        block);
6283     }
6284
6285   if (!wild)
6286     {
6287       arg_sym = NULL;
6288       found_sym = 0;
6289
6290       ALL_BLOCK_SYMBOLS (block, iter, sym)
6291       {
6292         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6293                                    SYMBOL_DOMAIN (sym), domain))
6294           {
6295             int cmp;
6296
6297             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
6298             if (cmp == 0)
6299               {
6300                 cmp = !startswith (SYMBOL_LINKAGE_NAME (sym), "_ada_");
6301                 if (cmp == 0)
6302                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
6303                                  name_len);
6304               }
6305
6306             if (cmp == 0
6307                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
6308               {
6309                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6310                   {
6311                     if (SYMBOL_IS_ARGUMENT (sym))
6312                       arg_sym = sym;
6313                     else
6314                       {
6315                         found_sym = 1;
6316                         add_defn_to_vec (obstackp,
6317                                          fixup_symbol_section (sym, objfile),
6318                                          block);
6319                       }
6320                   }
6321               }
6322           }
6323       }
6324
6325       /* NOTE: This really shouldn't be needed for _ada_ symbols.
6326          They aren't parameters, right?  */
6327       if (!found_sym && arg_sym != NULL)
6328         {
6329           add_defn_to_vec (obstackp,
6330                            fixup_symbol_section (arg_sym, objfile),
6331                            block);
6332         }
6333     }
6334 }
6335 \f
6336
6337                                 /* Symbol Completion */
6338
6339 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
6340    name in a form that's appropriate for the completion.  The result
6341    does not need to be deallocated, but is only good until the next call.
6342
6343    TEXT_LEN is equal to the length of TEXT.
6344    Perform a wild match if WILD_MATCH_P is set.
6345    ENCODED_P should be set if TEXT represents the start of a symbol name
6346    in its encoded form.  */
6347
6348 static const char *
6349 symbol_completion_match (const char *sym_name,
6350                          const char *text, int text_len,
6351                          int wild_match_p, int encoded_p)
6352 {
6353   const int verbatim_match = (text[0] == '<');
6354   int match = 0;
6355
6356   if (verbatim_match)
6357     {
6358       /* Strip the leading angle bracket.  */
6359       text = text + 1;
6360       text_len--;
6361     }
6362
6363   /* First, test against the fully qualified name of the symbol.  */
6364
6365   if (strncmp (sym_name, text, text_len) == 0)
6366     match = 1;
6367
6368   if (match && !encoded_p)
6369     {
6370       /* One needed check before declaring a positive match is to verify
6371          that iff we are doing a verbatim match, the decoded version
6372          of the symbol name starts with '<'.  Otherwise, this symbol name
6373          is not a suitable completion.  */
6374       const char *sym_name_copy = sym_name;
6375       int has_angle_bracket;
6376
6377       sym_name = ada_decode (sym_name);
6378       has_angle_bracket = (sym_name[0] == '<');
6379       match = (has_angle_bracket == verbatim_match);
6380       sym_name = sym_name_copy;
6381     }
6382
6383   if (match && !verbatim_match)
6384     {
6385       /* When doing non-verbatim match, another check that needs to
6386          be done is to verify that the potentially matching symbol name
6387          does not include capital letters, because the ada-mode would
6388          not be able to understand these symbol names without the
6389          angle bracket notation.  */
6390       const char *tmp;
6391
6392       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6393       if (*tmp != '\0')
6394         match = 0;
6395     }
6396
6397   /* Second: Try wild matching...  */
6398
6399   if (!match && wild_match_p)
6400     {
6401       /* Since we are doing wild matching, this means that TEXT
6402          may represent an unqualified symbol name.  We therefore must
6403          also compare TEXT against the unqualified name of the symbol.  */
6404       sym_name = ada_unqualified_name (ada_decode (sym_name));
6405
6406       if (strncmp (sym_name, text, text_len) == 0)
6407         match = 1;
6408     }
6409
6410   /* Finally: If we found a mach, prepare the result to return.  */
6411
6412   if (!match)
6413     return NULL;
6414
6415   if (verbatim_match)
6416     sym_name = add_angle_brackets (sym_name);
6417
6418   if (!encoded_p)
6419     sym_name = ada_decode (sym_name);
6420
6421   return sym_name;
6422 }
6423
6424 /* A companion function to ada_make_symbol_completion_list().
6425    Check if SYM_NAME represents a symbol which name would be suitable
6426    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6427    it is appended at the end of the given string vector SV.
6428
6429    ORIG_TEXT is the string original string from the user command
6430    that needs to be completed.  WORD is the entire command on which
6431    completion should be performed.  These two parameters are used to
6432    determine which part of the symbol name should be added to the
6433    completion vector.
6434    if WILD_MATCH_P is set, then wild matching is performed.
6435    ENCODED_P should be set if TEXT represents a symbol name in its
6436    encoded formed (in which case the completion should also be
6437    encoded).  */
6438
6439 static void
6440 symbol_completion_add (VEC(char_ptr) **sv,
6441                        const char *sym_name,
6442                        const char *text, int text_len,
6443                        const char *orig_text, const char *word,
6444                        int wild_match_p, int encoded_p)
6445 {
6446   const char *match = symbol_completion_match (sym_name, text, text_len,
6447                                                wild_match_p, encoded_p);
6448   char *completion;
6449
6450   if (match == NULL)
6451     return;
6452
6453   /* We found a match, so add the appropriate completion to the given
6454      string vector.  */
6455
6456   if (word == orig_text)
6457     {
6458       completion = (char *) xmalloc (strlen (match) + 5);
6459       strcpy (completion, match);
6460     }
6461   else if (word > orig_text)
6462     {
6463       /* Return some portion of sym_name.  */
6464       completion = (char *) xmalloc (strlen (match) + 5);
6465       strcpy (completion, match + (word - orig_text));
6466     }
6467   else
6468     {
6469       /* Return some of ORIG_TEXT plus sym_name.  */
6470       completion = (char *) xmalloc (strlen (match) + (orig_text - word) + 5);
6471       strncpy (completion, word, orig_text - word);
6472       completion[orig_text - word] = '\0';
6473       strcat (completion, match);
6474     }
6475
6476   VEC_safe_push (char_ptr, *sv, completion);
6477 }
6478
6479 /* An object of this type is passed as the user_data argument to the
6480    expand_symtabs_matching method.  */
6481 struct add_partial_datum
6482 {
6483   VEC(char_ptr) **completions;
6484   const char *text;
6485   int text_len;
6486   const char *text0;
6487   const char *word;
6488   int wild_match;
6489   int encoded;
6490 };
6491
6492 /* A callback for expand_symtabs_matching.  */
6493
6494 static int
6495 ada_complete_symbol_matcher (const char *name, void *user_data)
6496 {
6497   struct add_partial_datum *data = (struct add_partial_datum *) user_data;
6498   
6499   return symbol_completion_match (name, data->text, data->text_len,
6500                                   data->wild_match, data->encoded) != NULL;
6501 }
6502
6503 /* Return a list of possible symbol names completing TEXT0.  WORD is
6504    the entire command on which completion is made.  */
6505
6506 static VEC (char_ptr) *
6507 ada_make_symbol_completion_list (const char *text0, const char *word,
6508                                  enum type_code code)
6509 {
6510   char *text;
6511   int text_len;
6512   int wild_match_p;
6513   int encoded_p;
6514   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6515   struct symbol *sym;
6516   struct compunit_symtab *s;
6517   struct minimal_symbol *msymbol;
6518   struct objfile *objfile;
6519   const struct block *b, *surrounding_static_block = 0;
6520   int i;
6521   struct block_iterator iter;
6522   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6523
6524   gdb_assert (code == TYPE_CODE_UNDEF);
6525
6526   if (text0[0] == '<')
6527     {
6528       text = xstrdup (text0);
6529       make_cleanup (xfree, text);
6530       text_len = strlen (text);
6531       wild_match_p = 0;
6532       encoded_p = 1;
6533     }
6534   else
6535     {
6536       text = xstrdup (ada_encode (text0));
6537       make_cleanup (xfree, text);
6538       text_len = strlen (text);
6539       for (i = 0; i < text_len; i++)
6540         text[i] = tolower (text[i]);
6541
6542       encoded_p = (strstr (text0, "__") != NULL);
6543       /* If the name contains a ".", then the user is entering a fully
6544          qualified entity name, and the match must not be done in wild
6545          mode.  Similarly, if the user wants to complete what looks like
6546          an encoded name, the match must not be done in wild mode.  */
6547       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6548     }
6549
6550   /* First, look at the partial symtab symbols.  */
6551   {
6552     struct add_partial_datum data;
6553
6554     data.completions = &completions;
6555     data.text = text;
6556     data.text_len = text_len;
6557     data.text0 = text0;
6558     data.word = word;
6559     data.wild_match = wild_match_p;
6560     data.encoded = encoded_p;
6561     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, NULL,
6562                              ALL_DOMAIN, &data);
6563   }
6564
6565   /* At this point scan through the misc symbol vectors and add each
6566      symbol you find to the list.  Eventually we want to ignore
6567      anything that isn't a text symbol (everything else will be
6568      handled by the psymtab code above).  */
6569
6570   ALL_MSYMBOLS (objfile, msymbol)
6571   {
6572     QUIT;
6573     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6574                            text, text_len, text0, word, wild_match_p,
6575                            encoded_p);
6576   }
6577
6578   /* Search upwards from currently selected frame (so that we can
6579      complete on local vars.  */
6580
6581   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6582     {
6583       if (!BLOCK_SUPERBLOCK (b))
6584         surrounding_static_block = b;   /* For elmin of dups */
6585
6586       ALL_BLOCK_SYMBOLS (b, iter, sym)
6587       {
6588         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6589                                text, text_len, text0, word,
6590                                wild_match_p, encoded_p);
6591       }
6592     }
6593
6594   /* Go through the symtabs and check the externs and statics for
6595      symbols which match.  */
6596
6597   ALL_COMPUNITS (objfile, s)
6598   {
6599     QUIT;
6600     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
6601     ALL_BLOCK_SYMBOLS (b, iter, sym)
6602     {
6603       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6604                              text, text_len, text0, word,
6605                              wild_match_p, encoded_p);
6606     }
6607   }
6608
6609   ALL_COMPUNITS (objfile, s)
6610   {
6611     QUIT;
6612     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
6613     /* Don't do this block twice.  */
6614     if (b == surrounding_static_block)
6615       continue;
6616     ALL_BLOCK_SYMBOLS (b, iter, sym)
6617     {
6618       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6619                              text, text_len, text0, word,
6620                              wild_match_p, encoded_p);
6621     }
6622   }
6623
6624   do_cleanups (old_chain);
6625   return completions;
6626 }
6627
6628                                 /* Field Access */
6629
6630 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6631    for tagged types.  */
6632
6633 static int
6634 ada_is_dispatch_table_ptr_type (struct type *type)
6635 {
6636   const char *name;
6637
6638   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6639     return 0;
6640
6641   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6642   if (name == NULL)
6643     return 0;
6644
6645   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6646 }
6647
6648 /* Return non-zero if TYPE is an interface tag.  */
6649
6650 static int
6651 ada_is_interface_tag (struct type *type)
6652 {
6653   const char *name = TYPE_NAME (type);
6654
6655   if (name == NULL)
6656     return 0;
6657
6658   return (strcmp (name, "ada__tags__interface_tag") == 0);
6659 }
6660
6661 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6662    to be invisible to users.  */
6663
6664 int
6665 ada_is_ignored_field (struct type *type, int field_num)
6666 {
6667   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6668     return 1;
6669
6670   /* Check the name of that field.  */
6671   {
6672     const char *name = TYPE_FIELD_NAME (type, field_num);
6673
6674     /* Anonymous field names should not be printed.
6675        brobecker/2007-02-20: I don't think this can actually happen
6676        but we don't want to print the value of annonymous fields anyway.  */
6677     if (name == NULL)
6678       return 1;
6679
6680     /* Normally, fields whose name start with an underscore ("_")
6681        are fields that have been internally generated by the compiler,
6682        and thus should not be printed.  The "_parent" field is special,
6683        however: This is a field internally generated by the compiler
6684        for tagged types, and it contains the components inherited from
6685        the parent type.  This field should not be printed as is, but
6686        should not be ignored either.  */
6687     if (name[0] == '_' && !startswith (name, "_parent"))
6688       return 1;
6689   }
6690
6691   /* If this is the dispatch table of a tagged type or an interface tag,
6692      then ignore.  */
6693   if (ada_is_tagged_type (type, 1)
6694       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6695           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6696     return 1;
6697
6698   /* Not a special field, so it should not be ignored.  */
6699   return 0;
6700 }
6701
6702 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6703    pointer or reference type whose ultimate target has a tag field.  */
6704
6705 int
6706 ada_is_tagged_type (struct type *type, int refok)
6707 {
6708   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6709 }
6710
6711 /* True iff TYPE represents the type of X'Tag */
6712
6713 int
6714 ada_is_tag_type (struct type *type)
6715 {
6716   type = ada_check_typedef (type);
6717
6718   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6719     return 0;
6720   else
6721     {
6722       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6723
6724       return (name != NULL
6725               && strcmp (name, "ada__tags__dispatch_table") == 0);
6726     }
6727 }
6728
6729 /* The type of the tag on VAL.  */
6730
6731 struct type *
6732 ada_tag_type (struct value *val)
6733 {
6734   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6735 }
6736
6737 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6738    retired at Ada 05).  */
6739
6740 static int
6741 is_ada95_tag (struct value *tag)
6742 {
6743   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6744 }
6745
6746 /* The value of the tag on VAL.  */
6747
6748 struct value *
6749 ada_value_tag (struct value *val)
6750 {
6751   return ada_value_struct_elt (val, "_tag", 0);
6752 }
6753
6754 /* The value of the tag on the object of type TYPE whose contents are
6755    saved at VALADDR, if it is non-null, or is at memory address
6756    ADDRESS.  */
6757
6758 static struct value *
6759 value_tag_from_contents_and_address (struct type *type,
6760                                      const gdb_byte *valaddr,
6761                                      CORE_ADDR address)
6762 {
6763   int tag_byte_offset;
6764   struct type *tag_type;
6765
6766   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6767                          NULL, NULL, NULL))
6768     {
6769       const gdb_byte *valaddr1 = ((valaddr == NULL)
6770                                   ? NULL
6771                                   : valaddr + tag_byte_offset);
6772       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6773
6774       return value_from_contents_and_address (tag_type, valaddr1, address1);
6775     }
6776   return NULL;
6777 }
6778
6779 static struct type *
6780 type_from_tag (struct value *tag)
6781 {
6782   const char *type_name = ada_tag_name (tag);
6783
6784   if (type_name != NULL)
6785     return ada_find_any_type (ada_encode (type_name));
6786   return NULL;
6787 }
6788
6789 /* Given a value OBJ of a tagged type, return a value of this
6790    type at the base address of the object.  The base address, as
6791    defined in Ada.Tags, it is the address of the primary tag of
6792    the object, and therefore where the field values of its full
6793    view can be fetched.  */
6794
6795 struct value *
6796 ada_tag_value_at_base_address (struct value *obj)
6797 {
6798   struct value *val;
6799   LONGEST offset_to_top = 0;
6800   struct type *ptr_type, *obj_type;
6801   struct value *tag;
6802   CORE_ADDR base_address;
6803
6804   obj_type = value_type (obj);
6805
6806   /* It is the responsability of the caller to deref pointers.  */
6807
6808   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6809       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6810     return obj;
6811
6812   tag = ada_value_tag (obj);
6813   if (!tag)
6814     return obj;
6815
6816   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6817
6818   if (is_ada95_tag (tag))
6819     return obj;
6820
6821   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6822   ptr_type = lookup_pointer_type (ptr_type);
6823   val = value_cast (ptr_type, tag);
6824   if (!val)
6825     return obj;
6826
6827   /* It is perfectly possible that an exception be raised while
6828      trying to determine the base address, just like for the tag;
6829      see ada_tag_name for more details.  We do not print the error
6830      message for the same reason.  */
6831
6832   TRY
6833     {
6834       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6835     }
6836
6837   CATCH (e, RETURN_MASK_ERROR)
6838     {
6839       return obj;
6840     }
6841   END_CATCH
6842
6843   /* If offset is null, nothing to do.  */
6844
6845   if (offset_to_top == 0)
6846     return obj;
6847
6848   /* -1 is a special case in Ada.Tags; however, what should be done
6849      is not quite clear from the documentation.  So do nothing for
6850      now.  */
6851
6852   if (offset_to_top == -1)
6853     return obj;
6854
6855   base_address = value_address (obj) - offset_to_top;
6856   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6857
6858   /* Make sure that we have a proper tag at the new address.
6859      Otherwise, offset_to_top is bogus (which can happen when
6860      the object is not initialized yet).  */
6861
6862   if (!tag)
6863     return obj;
6864
6865   obj_type = type_from_tag (tag);
6866
6867   if (!obj_type)
6868     return obj;
6869
6870   return value_from_contents_and_address (obj_type, NULL, base_address);
6871 }
6872
6873 /* Return the "ada__tags__type_specific_data" type.  */
6874
6875 static struct type *
6876 ada_get_tsd_type (struct inferior *inf)
6877 {
6878   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6879
6880   if (data->tsd_type == 0)
6881     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6882   return data->tsd_type;
6883 }
6884
6885 /* Return the TSD (type-specific data) associated to the given TAG.
6886    TAG is assumed to be the tag of a tagged-type entity.
6887
6888    May return NULL if we are unable to get the TSD.  */
6889
6890 static struct value *
6891 ada_get_tsd_from_tag (struct value *tag)
6892 {
6893   struct value *val;
6894   struct type *type;
6895
6896   /* First option: The TSD is simply stored as a field of our TAG.
6897      Only older versions of GNAT would use this format, but we have
6898      to test it first, because there are no visible markers for
6899      the current approach except the absence of that field.  */
6900
6901   val = ada_value_struct_elt (tag, "tsd", 1);
6902   if (val)
6903     return val;
6904
6905   /* Try the second representation for the dispatch table (in which
6906      there is no explicit 'tsd' field in the referent of the tag pointer,
6907      and instead the tsd pointer is stored just before the dispatch
6908      table.  */
6909
6910   type = ada_get_tsd_type (current_inferior());
6911   if (type == NULL)
6912     return NULL;
6913   type = lookup_pointer_type (lookup_pointer_type (type));
6914   val = value_cast (type, tag);
6915   if (val == NULL)
6916     return NULL;
6917   return value_ind (value_ptradd (val, -1));
6918 }
6919
6920 /* Given the TSD of a tag (type-specific data), return a string
6921    containing the name of the associated type.
6922
6923    The returned value is good until the next call.  May return NULL
6924    if we are unable to determine the tag name.  */
6925
6926 static char *
6927 ada_tag_name_from_tsd (struct value *tsd)
6928 {
6929   static char name[1024];
6930   char *p;
6931   struct value *val;
6932
6933   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6934   if (val == NULL)
6935     return NULL;
6936   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6937   for (p = name; *p != '\0'; p += 1)
6938     if (isalpha (*p))
6939       *p = tolower (*p);
6940   return name;
6941 }
6942
6943 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6944    a C string.
6945
6946    Return NULL if the TAG is not an Ada tag, or if we were unable to
6947    determine the name of that tag.  The result is good until the next
6948    call.  */
6949
6950 const char *
6951 ada_tag_name (struct value *tag)
6952 {
6953   char *name = NULL;
6954
6955   if (!ada_is_tag_type (value_type (tag)))
6956     return NULL;
6957
6958   /* It is perfectly possible that an exception be raised while trying
6959      to determine the TAG's name, even under normal circumstances:
6960      The associated variable may be uninitialized or corrupted, for
6961      instance. We do not let any exception propagate past this point.
6962      instead we return NULL.
6963
6964      We also do not print the error message either (which often is very
6965      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6966      the caller print a more meaningful message if necessary.  */
6967   TRY
6968     {
6969       struct value *tsd = ada_get_tsd_from_tag (tag);
6970
6971       if (tsd != NULL)
6972         name = ada_tag_name_from_tsd (tsd);
6973     }
6974   CATCH (e, RETURN_MASK_ERROR)
6975     {
6976     }
6977   END_CATCH
6978
6979   return name;
6980 }
6981
6982 /* The parent type of TYPE, or NULL if none.  */
6983
6984 struct type *
6985 ada_parent_type (struct type *type)
6986 {
6987   int i;
6988
6989   type = ada_check_typedef (type);
6990
6991   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6992     return NULL;
6993
6994   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6995     if (ada_is_parent_field (type, i))
6996       {
6997         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6998
6999         /* If the _parent field is a pointer, then dereference it.  */
7000         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
7001           parent_type = TYPE_TARGET_TYPE (parent_type);
7002         /* If there is a parallel XVS type, get the actual base type.  */
7003         parent_type = ada_get_base_type (parent_type);
7004
7005         return ada_check_typedef (parent_type);
7006       }
7007
7008   return NULL;
7009 }
7010
7011 /* True iff field number FIELD_NUM of structure type TYPE contains the
7012    parent-type (inherited) fields of a derived type.  Assumes TYPE is
7013    a structure type with at least FIELD_NUM+1 fields.  */
7014
7015 int
7016 ada_is_parent_field (struct type *type, int field_num)
7017 {
7018   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
7019
7020   return (name != NULL
7021           && (startswith (name, "PARENT")
7022               || startswith (name, "_parent")));
7023 }
7024
7025 /* True iff field number FIELD_NUM of structure type TYPE is a
7026    transparent wrapper field (which should be silently traversed when doing
7027    field selection and flattened when printing).  Assumes TYPE is a
7028    structure type with at least FIELD_NUM+1 fields.  Such fields are always
7029    structures.  */
7030
7031 int
7032 ada_is_wrapper_field (struct type *type, int field_num)
7033 {
7034   const char *name = TYPE_FIELD_NAME (type, field_num);
7035
7036   if (name != NULL && strcmp (name, "RETVAL") == 0)
7037     {
7038       /* This happens in functions with "out" or "in out" parameters
7039          which are passed by copy.  For such functions, GNAT describes
7040          the function's return type as being a struct where the return
7041          value is in a field called RETVAL, and where the other "out"
7042          or "in out" parameters are fields of that struct.  This is not
7043          a wrapper.  */
7044       return 0;
7045     }
7046
7047   return (name != NULL
7048           && (startswith (name, "PARENT")
7049               || strcmp (name, "REP") == 0
7050               || startswith (name, "_parent")
7051               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
7052 }
7053
7054 /* True iff field number FIELD_NUM of structure or union type TYPE
7055    is a variant wrapper.  Assumes TYPE is a structure type with at least
7056    FIELD_NUM+1 fields.  */
7057
7058 int
7059 ada_is_variant_part (struct type *type, int field_num)
7060 {
7061   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
7062
7063   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
7064           || (is_dynamic_field (type, field_num)
7065               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
7066                   == TYPE_CODE_UNION)));
7067 }
7068
7069 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
7070    whose discriminants are contained in the record type OUTER_TYPE,
7071    returns the type of the controlling discriminant for the variant.
7072    May return NULL if the type could not be found.  */
7073
7074 struct type *
7075 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
7076 {
7077   char *name = ada_variant_discrim_name (var_type);
7078
7079   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
7080 }
7081
7082 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
7083    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
7084    represents a 'when others' clause; otherwise 0.  */
7085
7086 int
7087 ada_is_others_clause (struct type *type, int field_num)
7088 {
7089   const char *name = TYPE_FIELD_NAME (type, field_num);
7090
7091   return (name != NULL && name[0] == 'O');
7092 }
7093
7094 /* Assuming that TYPE0 is the type of the variant part of a record,
7095    returns the name of the discriminant controlling the variant.
7096    The value is valid until the next call to ada_variant_discrim_name.  */
7097
7098 char *
7099 ada_variant_discrim_name (struct type *type0)
7100 {
7101   static char *result = NULL;
7102   static size_t result_len = 0;
7103   struct type *type;
7104   const char *name;
7105   const char *discrim_end;
7106   const char *discrim_start;
7107
7108   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
7109     type = TYPE_TARGET_TYPE (type0);
7110   else
7111     type = type0;
7112
7113   name = ada_type_name (type);
7114
7115   if (name == NULL || name[0] == '\000')
7116     return "";
7117
7118   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
7119        discrim_end -= 1)
7120     {
7121       if (startswith (discrim_end, "___XVN"))
7122         break;
7123     }
7124   if (discrim_end == name)
7125     return "";
7126
7127   for (discrim_start = discrim_end; discrim_start != name + 3;
7128        discrim_start -= 1)
7129     {
7130       if (discrim_start == name + 1)
7131         return "";
7132       if ((discrim_start > name + 3
7133            && startswith (discrim_start - 3, "___"))
7134           || discrim_start[-1] == '.')
7135         break;
7136     }
7137
7138   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
7139   strncpy (result, discrim_start, discrim_end - discrim_start);
7140   result[discrim_end - discrim_start] = '\0';
7141   return result;
7142 }
7143
7144 /* Scan STR for a subtype-encoded number, beginning at position K.
7145    Put the position of the character just past the number scanned in
7146    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
7147    Return 1 if there was a valid number at the given position, and 0
7148    otherwise.  A "subtype-encoded" number consists of the absolute value
7149    in decimal, followed by the letter 'm' to indicate a negative number.
7150    Assumes 0m does not occur.  */
7151
7152 int
7153 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
7154 {
7155   ULONGEST RU;
7156
7157   if (!isdigit (str[k]))
7158     return 0;
7159
7160   /* Do it the hard way so as not to make any assumption about
7161      the relationship of unsigned long (%lu scan format code) and
7162      LONGEST.  */
7163   RU = 0;
7164   while (isdigit (str[k]))
7165     {
7166       RU = RU * 10 + (str[k] - '0');
7167       k += 1;
7168     }
7169
7170   if (str[k] == 'm')
7171     {
7172       if (R != NULL)
7173         *R = (-(LONGEST) (RU - 1)) - 1;
7174       k += 1;
7175     }
7176   else if (R != NULL)
7177     *R = (LONGEST) RU;
7178
7179   /* NOTE on the above: Technically, C does not say what the results of
7180      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
7181      number representable as a LONGEST (although either would probably work
7182      in most implementations).  When RU>0, the locution in the then branch
7183      above is always equivalent to the negative of RU.  */
7184
7185   if (new_k != NULL)
7186     *new_k = k;
7187   return 1;
7188 }
7189
7190 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
7191    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
7192    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
7193
7194 int
7195 ada_in_variant (LONGEST val, struct type *type, int field_num)
7196 {
7197   const char *name = TYPE_FIELD_NAME (type, field_num);
7198   int p;
7199
7200   p = 0;
7201   while (1)
7202     {
7203       switch (name[p])
7204         {
7205         case '\0':
7206           return 0;
7207         case 'S':
7208           {
7209             LONGEST W;
7210
7211             if (!ada_scan_number (name, p + 1, &W, &p))
7212               return 0;
7213             if (val == W)
7214               return 1;
7215             break;
7216           }
7217         case 'R':
7218           {
7219             LONGEST L, U;
7220
7221             if (!ada_scan_number (name, p + 1, &L, &p)
7222                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
7223               return 0;
7224             if (val >= L && val <= U)
7225               return 1;
7226             break;
7227           }
7228         case 'O':
7229           return 1;
7230         default:
7231           return 0;
7232         }
7233     }
7234 }
7235
7236 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
7237
7238 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
7239    ARG_TYPE, extract and return the value of one of its (non-static)
7240    fields.  FIELDNO says which field.   Differs from value_primitive_field
7241    only in that it can handle packed values of arbitrary type.  */
7242
7243 static struct value *
7244 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
7245                            struct type *arg_type)
7246 {
7247   struct type *type;
7248
7249   arg_type = ada_check_typedef (arg_type);
7250   type = TYPE_FIELD_TYPE (arg_type, fieldno);
7251
7252   /* Handle packed fields.  */
7253
7254   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
7255     {
7256       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
7257       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
7258
7259       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
7260                                              offset + bit_pos / 8,
7261                                              bit_pos % 8, bit_size, type);
7262     }
7263   else
7264     return value_primitive_field (arg1, offset, fieldno, arg_type);
7265 }
7266
7267 /* Find field with name NAME in object of type TYPE.  If found, 
7268    set the following for each argument that is non-null:
7269     - *FIELD_TYPE_P to the field's type; 
7270     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
7271       an object of that type;
7272     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
7273     - *BIT_SIZE_P to its size in bits if the field is packed, and 
7274       0 otherwise;
7275    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
7276    fields up to but not including the desired field, or by the total
7277    number of fields if not found.   A NULL value of NAME never
7278    matches; the function just counts visible fields in this case.
7279    
7280    Returns 1 if found, 0 otherwise.  */
7281
7282 static int
7283 find_struct_field (const char *name, struct type *type, int offset,
7284                    struct type **field_type_p,
7285                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
7286                    int *index_p)
7287 {
7288   int i;
7289
7290   type = ada_check_typedef (type);
7291
7292   if (field_type_p != NULL)
7293     *field_type_p = NULL;
7294   if (byte_offset_p != NULL)
7295     *byte_offset_p = 0;
7296   if (bit_offset_p != NULL)
7297     *bit_offset_p = 0;
7298   if (bit_size_p != NULL)
7299     *bit_size_p = 0;
7300
7301   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7302     {
7303       int bit_pos = TYPE_FIELD_BITPOS (type, i);
7304       int fld_offset = offset + bit_pos / 8;
7305       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7306
7307       if (t_field_name == NULL)
7308         continue;
7309
7310       else if (name != NULL && field_name_match (t_field_name, name))
7311         {
7312           int bit_size = TYPE_FIELD_BITSIZE (type, i);
7313
7314           if (field_type_p != NULL)
7315             *field_type_p = TYPE_FIELD_TYPE (type, i);
7316           if (byte_offset_p != NULL)
7317             *byte_offset_p = fld_offset;
7318           if (bit_offset_p != NULL)
7319             *bit_offset_p = bit_pos % 8;
7320           if (bit_size_p != NULL)
7321             *bit_size_p = bit_size;
7322           return 1;
7323         }
7324       else if (ada_is_wrapper_field (type, i))
7325         {
7326           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7327                                  field_type_p, byte_offset_p, bit_offset_p,
7328                                  bit_size_p, index_p))
7329             return 1;
7330         }
7331       else if (ada_is_variant_part (type, i))
7332         {
7333           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
7334              fixed type?? */
7335           int j;
7336           struct type *field_type
7337             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7338
7339           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7340             {
7341               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7342                                      fld_offset
7343                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
7344                                      field_type_p, byte_offset_p,
7345                                      bit_offset_p, bit_size_p, index_p))
7346                 return 1;
7347             }
7348         }
7349       else if (index_p != NULL)
7350         *index_p += 1;
7351     }
7352   return 0;
7353 }
7354
7355 /* Number of user-visible fields in record type TYPE.  */
7356
7357 static int
7358 num_visible_fields (struct type *type)
7359 {
7360   int n;
7361
7362   n = 0;
7363   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7364   return n;
7365 }
7366
7367 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
7368    and search in it assuming it has (class) type TYPE.
7369    If found, return value, else return NULL.
7370
7371    Searches recursively through wrapper fields (e.g., '_parent').  */
7372
7373 static struct value *
7374 ada_search_struct_field (const char *name, struct value *arg, int offset,
7375                          struct type *type)
7376 {
7377   int i;
7378
7379   type = ada_check_typedef (type);
7380   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7381     {
7382       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7383
7384       if (t_field_name == NULL)
7385         continue;
7386
7387       else if (field_name_match (t_field_name, name))
7388         return ada_value_primitive_field (arg, offset, i, type);
7389
7390       else if (ada_is_wrapper_field (type, i))
7391         {
7392           struct value *v =     /* Do not let indent join lines here.  */
7393             ada_search_struct_field (name, arg,
7394                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7395                                      TYPE_FIELD_TYPE (type, i));
7396
7397           if (v != NULL)
7398             return v;
7399         }
7400
7401       else if (ada_is_variant_part (type, i))
7402         {
7403           /* PNH: Do we ever get here?  See find_struct_field.  */
7404           int j;
7405           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7406                                                                         i));
7407           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7408
7409           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7410             {
7411               struct value *v = ada_search_struct_field /* Force line
7412                                                            break.  */
7413                 (name, arg,
7414                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7415                  TYPE_FIELD_TYPE (field_type, j));
7416
7417               if (v != NULL)
7418                 return v;
7419             }
7420         }
7421     }
7422   return NULL;
7423 }
7424
7425 static struct value *ada_index_struct_field_1 (int *, struct value *,
7426                                                int, struct type *);
7427
7428
7429 /* Return field #INDEX in ARG, where the index is that returned by
7430  * find_struct_field through its INDEX_P argument.  Adjust the address
7431  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7432  * If found, return value, else return NULL.  */
7433
7434 static struct value *
7435 ada_index_struct_field (int index, struct value *arg, int offset,
7436                         struct type *type)
7437 {
7438   return ada_index_struct_field_1 (&index, arg, offset, type);
7439 }
7440
7441
7442 /* Auxiliary function for ada_index_struct_field.  Like
7443  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7444  * *INDEX_P.  */
7445
7446 static struct value *
7447 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7448                           struct type *type)
7449 {
7450   int i;
7451   type = ada_check_typedef (type);
7452
7453   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7454     {
7455       if (TYPE_FIELD_NAME (type, i) == NULL)
7456         continue;
7457       else if (ada_is_wrapper_field (type, i))
7458         {
7459           struct value *v =     /* Do not let indent join lines here.  */
7460             ada_index_struct_field_1 (index_p, arg,
7461                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7462                                       TYPE_FIELD_TYPE (type, i));
7463
7464           if (v != NULL)
7465             return v;
7466         }
7467
7468       else if (ada_is_variant_part (type, i))
7469         {
7470           /* PNH: Do we ever get here?  See ada_search_struct_field,
7471              find_struct_field.  */
7472           error (_("Cannot assign this kind of variant record"));
7473         }
7474       else if (*index_p == 0)
7475         return ada_value_primitive_field (arg, offset, i, type);
7476       else
7477         *index_p -= 1;
7478     }
7479   return NULL;
7480 }
7481
7482 /* Given ARG, a value of type (pointer or reference to a)*
7483    structure/union, extract the component named NAME from the ultimate
7484    target structure/union and return it as a value with its
7485    appropriate type.
7486
7487    The routine searches for NAME among all members of the structure itself
7488    and (recursively) among all members of any wrapper members
7489    (e.g., '_parent').
7490
7491    If NO_ERR, then simply return NULL in case of error, rather than 
7492    calling error.  */
7493
7494 struct value *
7495 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7496 {
7497   struct type *t, *t1;
7498   struct value *v;
7499
7500   v = NULL;
7501   t1 = t = ada_check_typedef (value_type (arg));
7502   if (TYPE_CODE (t) == TYPE_CODE_REF)
7503     {
7504       t1 = TYPE_TARGET_TYPE (t);
7505       if (t1 == NULL)
7506         goto BadValue;
7507       t1 = ada_check_typedef (t1);
7508       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7509         {
7510           arg = coerce_ref (arg);
7511           t = t1;
7512         }
7513     }
7514
7515   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7516     {
7517       t1 = TYPE_TARGET_TYPE (t);
7518       if (t1 == NULL)
7519         goto BadValue;
7520       t1 = ada_check_typedef (t1);
7521       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7522         {
7523           arg = value_ind (arg);
7524           t = t1;
7525         }
7526       else
7527         break;
7528     }
7529
7530   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7531     goto BadValue;
7532
7533   if (t1 == t)
7534     v = ada_search_struct_field (name, arg, 0, t);
7535   else
7536     {
7537       int bit_offset, bit_size, byte_offset;
7538       struct type *field_type;
7539       CORE_ADDR address;
7540
7541       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7542         address = value_address (ada_value_ind (arg));
7543       else
7544         address = value_address (ada_coerce_ref (arg));
7545
7546       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7547       if (find_struct_field (name, t1, 0,
7548                              &field_type, &byte_offset, &bit_offset,
7549                              &bit_size, NULL))
7550         {
7551           if (bit_size != 0)
7552             {
7553               if (TYPE_CODE (t) == TYPE_CODE_REF)
7554                 arg = ada_coerce_ref (arg);
7555               else
7556                 arg = ada_value_ind (arg);
7557               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7558                                                   bit_offset, bit_size,
7559                                                   field_type);
7560             }
7561           else
7562             v = value_at_lazy (field_type, address + byte_offset);
7563         }
7564     }
7565
7566   if (v != NULL || no_err)
7567     return v;
7568   else
7569     error (_("There is no member named %s."), name);
7570
7571  BadValue:
7572   if (no_err)
7573     return NULL;
7574   else
7575     error (_("Attempt to extract a component of "
7576              "a value that is not a record."));
7577 }
7578
7579 /* Return a string representation of type TYPE.  Caller must free
7580    result.  */
7581
7582 static char *
7583 type_as_string (struct type *type)
7584 {
7585   struct ui_file *tmp_stream = mem_fileopen ();
7586   struct cleanup *old_chain;
7587   char *str;
7588
7589   tmp_stream = mem_fileopen ();
7590   old_chain = make_cleanup_ui_file_delete (tmp_stream);
7591
7592   type_print (type, "", tmp_stream, -1);
7593   str = ui_file_xstrdup (tmp_stream, NULL);
7594
7595   do_cleanups (old_chain);
7596   return str;
7597 }
7598
7599 /* Return a string representation of type TYPE, and install a cleanup
7600    that releases it.  */
7601
7602 static char *
7603 type_as_string_and_cleanup (struct type *type)
7604 {
7605   char *str;
7606
7607   str = type_as_string (type);
7608   make_cleanup (xfree, str);
7609   return str;
7610 }
7611
7612 /* Given a type TYPE, look up the type of the component of type named NAME.
7613    If DISPP is non-null, add its byte displacement from the beginning of a
7614    structure (pointed to by a value) of type TYPE to *DISPP (does not
7615    work for packed fields).
7616
7617    Matches any field whose name has NAME as a prefix, possibly
7618    followed by "___".
7619
7620    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7621    be a (pointer or reference)+ to a struct or union, and the
7622    ultimate target type will be searched.
7623
7624    Looks recursively into variant clauses and parent types.
7625
7626    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7627    TYPE is not a type of the right kind.  */
7628
7629 static struct type *
7630 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7631                             int noerr, int *dispp)
7632 {
7633   int i;
7634
7635   if (name == NULL)
7636     goto BadName;
7637
7638   if (refok && type != NULL)
7639     while (1)
7640       {
7641         type = ada_check_typedef (type);
7642         if (TYPE_CODE (type) != TYPE_CODE_PTR
7643             && TYPE_CODE (type) != TYPE_CODE_REF)
7644           break;
7645         type = TYPE_TARGET_TYPE (type);
7646       }
7647
7648   if (type == NULL
7649       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7650           && TYPE_CODE (type) != TYPE_CODE_UNION))
7651     {
7652       const char *type_str;
7653
7654       if (noerr)
7655         return NULL;
7656
7657       type_str = (type != NULL
7658                   ? type_as_string_and_cleanup (type)
7659                   : _("(null)"));
7660       error (_("Type %s is not a structure or union type"), type_str);
7661     }
7662
7663   type = to_static_fixed_type (type);
7664
7665   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7666     {
7667       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7668       struct type *t;
7669       int disp;
7670
7671       if (t_field_name == NULL)
7672         continue;
7673
7674       else if (field_name_match (t_field_name, name))
7675         {
7676           if (dispp != NULL)
7677             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7678           return TYPE_FIELD_TYPE (type, i);
7679         }
7680
7681       else if (ada_is_wrapper_field (type, i))
7682         {
7683           disp = 0;
7684           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7685                                           0, 1, &disp);
7686           if (t != NULL)
7687             {
7688               if (dispp != NULL)
7689                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7690               return t;
7691             }
7692         }
7693
7694       else if (ada_is_variant_part (type, i))
7695         {
7696           int j;
7697           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7698                                                                         i));
7699
7700           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7701             {
7702               /* FIXME pnh 2008/01/26: We check for a field that is
7703                  NOT wrapped in a struct, since the compiler sometimes
7704                  generates these for unchecked variant types.  Revisit
7705                  if the compiler changes this practice.  */
7706               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7707               disp = 0;
7708               if (v_field_name != NULL 
7709                   && field_name_match (v_field_name, name))
7710                 t = TYPE_FIELD_TYPE (field_type, j);
7711               else
7712                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7713                                                                  j),
7714                                                 name, 0, 1, &disp);
7715
7716               if (t != NULL)
7717                 {
7718                   if (dispp != NULL)
7719                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7720                   return t;
7721                 }
7722             }
7723         }
7724
7725     }
7726
7727 BadName:
7728   if (!noerr)
7729     {
7730       const char *name_str = name != NULL ? name : _("<null>");
7731
7732       error (_("Type %s has no component named %s"),
7733              type_as_string_and_cleanup (type), name_str);
7734     }
7735
7736   return NULL;
7737 }
7738
7739 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7740    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7741    represents an unchecked union (that is, the variant part of a
7742    record that is named in an Unchecked_Union pragma).  */
7743
7744 static int
7745 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7746 {
7747   char *discrim_name = ada_variant_discrim_name (var_type);
7748
7749   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7750           == NULL);
7751 }
7752
7753
7754 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7755    within a value of type OUTER_TYPE that is stored in GDB at
7756    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7757    numbering from 0) is applicable.  Returns -1 if none are.  */
7758
7759 int
7760 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7761                            const gdb_byte *outer_valaddr)
7762 {
7763   int others_clause;
7764   int i;
7765   char *discrim_name = ada_variant_discrim_name (var_type);
7766   struct value *outer;
7767   struct value *discrim;
7768   LONGEST discrim_val;
7769
7770   /* Using plain value_from_contents_and_address here causes problems
7771      because we will end up trying to resolve a type that is currently
7772      being constructed.  */
7773   outer = value_from_contents_and_address_unresolved (outer_type,
7774                                                       outer_valaddr, 0);
7775   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7776   if (discrim == NULL)
7777     return -1;
7778   discrim_val = value_as_long (discrim);
7779
7780   others_clause = -1;
7781   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7782     {
7783       if (ada_is_others_clause (var_type, i))
7784         others_clause = i;
7785       else if (ada_in_variant (discrim_val, var_type, i))
7786         return i;
7787     }
7788
7789   return others_clause;
7790 }
7791 \f
7792
7793
7794                                 /* Dynamic-Sized Records */
7795
7796 /* Strategy: The type ostensibly attached to a value with dynamic size
7797    (i.e., a size that is not statically recorded in the debugging
7798    data) does not accurately reflect the size or layout of the value.
7799    Our strategy is to convert these values to values with accurate,
7800    conventional types that are constructed on the fly.  */
7801
7802 /* There is a subtle and tricky problem here.  In general, we cannot
7803    determine the size of dynamic records without its data.  However,
7804    the 'struct value' data structure, which GDB uses to represent
7805    quantities in the inferior process (the target), requires the size
7806    of the type at the time of its allocation in order to reserve space
7807    for GDB's internal copy of the data.  That's why the
7808    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7809    rather than struct value*s.
7810
7811    However, GDB's internal history variables ($1, $2, etc.) are
7812    struct value*s containing internal copies of the data that are not, in
7813    general, the same as the data at their corresponding addresses in
7814    the target.  Fortunately, the types we give to these values are all
7815    conventional, fixed-size types (as per the strategy described
7816    above), so that we don't usually have to perform the
7817    'to_fixed_xxx_type' conversions to look at their values.
7818    Unfortunately, there is one exception: if one of the internal
7819    history variables is an array whose elements are unconstrained
7820    records, then we will need to create distinct fixed types for each
7821    element selected.  */
7822
7823 /* The upshot of all of this is that many routines take a (type, host
7824    address, target address) triple as arguments to represent a value.
7825    The host address, if non-null, is supposed to contain an internal
7826    copy of the relevant data; otherwise, the program is to consult the
7827    target at the target address.  */
7828
7829 /* Assuming that VAL0 represents a pointer value, the result of
7830    dereferencing it.  Differs from value_ind in its treatment of
7831    dynamic-sized types.  */
7832
7833 struct value *
7834 ada_value_ind (struct value *val0)
7835 {
7836   struct value *val = value_ind (val0);
7837
7838   if (ada_is_tagged_type (value_type (val), 0))
7839     val = ada_tag_value_at_base_address (val);
7840
7841   return ada_to_fixed_value (val);
7842 }
7843
7844 /* The value resulting from dereferencing any "reference to"
7845    qualifiers on VAL0.  */
7846
7847 static struct value *
7848 ada_coerce_ref (struct value *val0)
7849 {
7850   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7851     {
7852       struct value *val = val0;
7853
7854       val = coerce_ref (val);
7855
7856       if (ada_is_tagged_type (value_type (val), 0))
7857         val = ada_tag_value_at_base_address (val);
7858
7859       return ada_to_fixed_value (val);
7860     }
7861   else
7862     return val0;
7863 }
7864
7865 /* Return OFF rounded upward if necessary to a multiple of
7866    ALIGNMENT (a power of 2).  */
7867
7868 static unsigned int
7869 align_value (unsigned int off, unsigned int alignment)
7870 {
7871   return (off + alignment - 1) & ~(alignment - 1);
7872 }
7873
7874 /* Return the bit alignment required for field #F of template type TYPE.  */
7875
7876 static unsigned int
7877 field_alignment (struct type *type, int f)
7878 {
7879   const char *name = TYPE_FIELD_NAME (type, f);
7880   int len;
7881   int align_offset;
7882
7883   /* The field name should never be null, unless the debugging information
7884      is somehow malformed.  In this case, we assume the field does not
7885      require any alignment.  */
7886   if (name == NULL)
7887     return 1;
7888
7889   len = strlen (name);
7890
7891   if (!isdigit (name[len - 1]))
7892     return 1;
7893
7894   if (isdigit (name[len - 2]))
7895     align_offset = len - 2;
7896   else
7897     align_offset = len - 1;
7898
7899   if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
7900     return TARGET_CHAR_BIT;
7901
7902   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7903 }
7904
7905 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7906
7907 static struct symbol *
7908 ada_find_any_type_symbol (const char *name)
7909 {
7910   struct symbol *sym;
7911
7912   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7913   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7914     return sym;
7915
7916   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7917   return sym;
7918 }
7919
7920 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7921    solely for types defined by debug info, it will not search the GDB
7922    primitive types.  */
7923
7924 static struct type *
7925 ada_find_any_type (const char *name)
7926 {
7927   struct symbol *sym = ada_find_any_type_symbol (name);
7928
7929   if (sym != NULL)
7930     return SYMBOL_TYPE (sym);
7931
7932   return NULL;
7933 }
7934
7935 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7936    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7937    symbol, in which case it is returned.  Otherwise, this looks for
7938    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7939    Return symbol if found, and NULL otherwise.  */
7940
7941 struct symbol *
7942 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7943 {
7944   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7945   struct symbol *sym;
7946
7947   if (strstr (name, "___XR") != NULL)
7948      return name_sym;
7949
7950   sym = find_old_style_renaming_symbol (name, block);
7951
7952   if (sym != NULL)
7953     return sym;
7954
7955   /* Not right yet.  FIXME pnh 7/20/2007.  */
7956   sym = ada_find_any_type_symbol (name);
7957   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7958     return sym;
7959   else
7960     return NULL;
7961 }
7962
7963 static struct symbol *
7964 find_old_style_renaming_symbol (const char *name, const struct block *block)
7965 {
7966   const struct symbol *function_sym = block_linkage_function (block);
7967   char *rename;
7968
7969   if (function_sym != NULL)
7970     {
7971       /* If the symbol is defined inside a function, NAME is not fully
7972          qualified.  This means we need to prepend the function name
7973          as well as adding the ``___XR'' suffix to build the name of
7974          the associated renaming symbol.  */
7975       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7976       /* Function names sometimes contain suffixes used
7977          for instance to qualify nested subprograms.  When building
7978          the XR type name, we need to make sure that this suffix is
7979          not included.  So do not include any suffix in the function
7980          name length below.  */
7981       int function_name_len = ada_name_prefix_len (function_name);
7982       const int rename_len = function_name_len + 2      /*  "__" */
7983         + strlen (name) + 6 /* "___XR\0" */ ;
7984
7985       /* Strip the suffix if necessary.  */
7986       ada_remove_trailing_digits (function_name, &function_name_len);
7987       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7988       ada_remove_Xbn_suffix (function_name, &function_name_len);
7989
7990       /* Library-level functions are a special case, as GNAT adds
7991          a ``_ada_'' prefix to the function name to avoid namespace
7992          pollution.  However, the renaming symbols themselves do not
7993          have this prefix, so we need to skip this prefix if present.  */
7994       if (function_name_len > 5 /* "_ada_" */
7995           && strstr (function_name, "_ada_") == function_name)
7996         {
7997           function_name += 5;
7998           function_name_len -= 5;
7999         }
8000
8001       rename = (char *) alloca (rename_len * sizeof (char));
8002       strncpy (rename, function_name, function_name_len);
8003       xsnprintf (rename + function_name_len, rename_len - function_name_len,
8004                  "__%s___XR", name);
8005     }
8006   else
8007     {
8008       const int rename_len = strlen (name) + 6;
8009
8010       rename = (char *) alloca (rename_len * sizeof (char));
8011       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
8012     }
8013
8014   return ada_find_any_type_symbol (rename);
8015 }
8016
8017 /* Because of GNAT encoding conventions, several GDB symbols may match a
8018    given type name.  If the type denoted by TYPE0 is to be preferred to
8019    that of TYPE1 for purposes of type printing, return non-zero;
8020    otherwise return 0.  */
8021
8022 int
8023 ada_prefer_type (struct type *type0, struct type *type1)
8024 {
8025   if (type1 == NULL)
8026     return 1;
8027   else if (type0 == NULL)
8028     return 0;
8029   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
8030     return 1;
8031   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
8032     return 0;
8033   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
8034     return 1;
8035   else if (ada_is_constrained_packed_array_type (type0))
8036     return 1;
8037   else if (ada_is_array_descriptor_type (type0)
8038            && !ada_is_array_descriptor_type (type1))
8039     return 1;
8040   else
8041     {
8042       const char *type0_name = type_name_no_tag (type0);
8043       const char *type1_name = type_name_no_tag (type1);
8044
8045       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
8046           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
8047         return 1;
8048     }
8049   return 0;
8050 }
8051
8052 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
8053    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
8054
8055 const char *
8056 ada_type_name (struct type *type)
8057 {
8058   if (type == NULL)
8059     return NULL;
8060   else if (TYPE_NAME (type) != NULL)
8061     return TYPE_NAME (type);
8062   else
8063     return TYPE_TAG_NAME (type);
8064 }
8065
8066 /* Search the list of "descriptive" types associated to TYPE for a type
8067    whose name is NAME.  */
8068
8069 static struct type *
8070 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
8071 {
8072   struct type *result, *tmp;
8073
8074   if (ada_ignore_descriptive_types_p)
8075     return NULL;
8076
8077   /* If there no descriptive-type info, then there is no parallel type
8078      to be found.  */
8079   if (!HAVE_GNAT_AUX_INFO (type))
8080     return NULL;
8081
8082   result = TYPE_DESCRIPTIVE_TYPE (type);
8083   while (result != NULL)
8084     {
8085       const char *result_name = ada_type_name (result);
8086
8087       if (result_name == NULL)
8088         {
8089           warning (_("unexpected null name on descriptive type"));
8090           return NULL;
8091         }
8092
8093       /* If the names match, stop.  */
8094       if (strcmp (result_name, name) == 0)
8095         break;
8096
8097       /* Otherwise, look at the next item on the list, if any.  */
8098       if (HAVE_GNAT_AUX_INFO (result))
8099         tmp = TYPE_DESCRIPTIVE_TYPE (result);
8100       else
8101         tmp = NULL;
8102
8103       /* If not found either, try after having resolved the typedef.  */
8104       if (tmp != NULL)
8105         result = tmp;
8106       else
8107         {
8108           result = check_typedef (result);
8109           if (HAVE_GNAT_AUX_INFO (result))
8110             result = TYPE_DESCRIPTIVE_TYPE (result);
8111           else
8112             result = NULL;
8113         }
8114     }
8115
8116   /* If we didn't find a match, see whether this is a packed array.  With
8117      older compilers, the descriptive type information is either absent or
8118      irrelevant when it comes to packed arrays so the above lookup fails.
8119      Fall back to using a parallel lookup by name in this case.  */
8120   if (result == NULL && ada_is_constrained_packed_array_type (type))
8121     return ada_find_any_type (name);
8122
8123   return result;
8124 }
8125
8126 /* Find a parallel type to TYPE with the specified NAME, using the
8127    descriptive type taken from the debugging information, if available,
8128    and otherwise using the (slower) name-based method.  */
8129
8130 static struct type *
8131 ada_find_parallel_type_with_name (struct type *type, const char *name)
8132 {
8133   struct type *result = NULL;
8134
8135   if (HAVE_GNAT_AUX_INFO (type))
8136     result = find_parallel_type_by_descriptive_type (type, name);
8137   else
8138     result = ada_find_any_type (name);
8139
8140   return result;
8141 }
8142
8143 /* Same as above, but specify the name of the parallel type by appending
8144    SUFFIX to the name of TYPE.  */
8145
8146 struct type *
8147 ada_find_parallel_type (struct type *type, const char *suffix)
8148 {
8149   char *name;
8150   const char *type_name = ada_type_name (type);
8151   int len;
8152
8153   if (type_name == NULL)
8154     return NULL;
8155
8156   len = strlen (type_name);
8157
8158   name = (char *) alloca (len + strlen (suffix) + 1);
8159
8160   strcpy (name, type_name);
8161   strcpy (name + len, suffix);
8162
8163   return ada_find_parallel_type_with_name (type, name);
8164 }
8165
8166 /* If TYPE is a variable-size record type, return the corresponding template
8167    type describing its fields.  Otherwise, return NULL.  */
8168
8169 static struct type *
8170 dynamic_template_type (struct type *type)
8171 {
8172   type = ada_check_typedef (type);
8173
8174   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
8175       || ada_type_name (type) == NULL)
8176     return NULL;
8177   else
8178     {
8179       int len = strlen (ada_type_name (type));
8180
8181       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
8182         return type;
8183       else
8184         return ada_find_parallel_type (type, "___XVE");
8185     }
8186 }
8187
8188 /* Assuming that TEMPL_TYPE is a union or struct type, returns
8189    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
8190
8191 static int
8192 is_dynamic_field (struct type *templ_type, int field_num)
8193 {
8194   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
8195
8196   return name != NULL
8197     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
8198     && strstr (name, "___XVL") != NULL;
8199 }
8200
8201 /* The index of the variant field of TYPE, or -1 if TYPE does not
8202    represent a variant record type.  */
8203
8204 static int
8205 variant_field_index (struct type *type)
8206 {
8207   int f;
8208
8209   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
8210     return -1;
8211
8212   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
8213     {
8214       if (ada_is_variant_part (type, f))
8215         return f;
8216     }
8217   return -1;
8218 }
8219
8220 /* A record type with no fields.  */
8221
8222 static struct type *
8223 empty_record (struct type *templ)
8224 {
8225   struct type *type = alloc_type_copy (templ);
8226
8227   TYPE_CODE (type) = TYPE_CODE_STRUCT;
8228   TYPE_NFIELDS (type) = 0;
8229   TYPE_FIELDS (type) = NULL;
8230   INIT_CPLUS_SPECIFIC (type);
8231   TYPE_NAME (type) = "<empty>";
8232   TYPE_TAG_NAME (type) = NULL;
8233   TYPE_LENGTH (type) = 0;
8234   return type;
8235 }
8236
8237 /* An ordinary record type (with fixed-length fields) that describes
8238    the value of type TYPE at VALADDR or ADDRESS (see comments at
8239    the beginning of this section) VAL according to GNAT conventions.
8240    DVAL0 should describe the (portion of a) record that contains any
8241    necessary discriminants.  It should be NULL if value_type (VAL) is
8242    an outer-level type (i.e., as opposed to a branch of a variant.)  A
8243    variant field (unless unchecked) is replaced by a particular branch
8244    of the variant.
8245
8246    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
8247    length are not statically known are discarded.  As a consequence,
8248    VALADDR, ADDRESS and DVAL0 are ignored.
8249
8250    NOTE: Limitations: For now, we assume that dynamic fields and
8251    variants occupy whole numbers of bytes.  However, they need not be
8252    byte-aligned.  */
8253
8254 struct type *
8255 ada_template_to_fixed_record_type_1 (struct type *type,
8256                                      const gdb_byte *valaddr,
8257                                      CORE_ADDR address, struct value *dval0,
8258                                      int keep_dynamic_fields)
8259 {
8260   struct value *mark = value_mark ();
8261   struct value *dval;
8262   struct type *rtype;
8263   int nfields, bit_len;
8264   int variant_field;
8265   long off;
8266   int fld_bit_len;
8267   int f;
8268
8269   /* Compute the number of fields in this record type that are going
8270      to be processed: unless keep_dynamic_fields, this includes only
8271      fields whose position and length are static will be processed.  */
8272   if (keep_dynamic_fields)
8273     nfields = TYPE_NFIELDS (type);
8274   else
8275     {
8276       nfields = 0;
8277       while (nfields < TYPE_NFIELDS (type)
8278              && !ada_is_variant_part (type, nfields)
8279              && !is_dynamic_field (type, nfields))
8280         nfields++;
8281     }
8282
8283   rtype = alloc_type_copy (type);
8284   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8285   INIT_CPLUS_SPECIFIC (rtype);
8286   TYPE_NFIELDS (rtype) = nfields;
8287   TYPE_FIELDS (rtype) = (struct field *)
8288     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8289   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
8290   TYPE_NAME (rtype) = ada_type_name (type);
8291   TYPE_TAG_NAME (rtype) = NULL;
8292   TYPE_FIXED_INSTANCE (rtype) = 1;
8293
8294   off = 0;
8295   bit_len = 0;
8296   variant_field = -1;
8297
8298   for (f = 0; f < nfields; f += 1)
8299     {
8300       off = align_value (off, field_alignment (type, f))
8301         + TYPE_FIELD_BITPOS (type, f);
8302       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
8303       TYPE_FIELD_BITSIZE (rtype, f) = 0;
8304
8305       if (ada_is_variant_part (type, f))
8306         {
8307           variant_field = f;
8308           fld_bit_len = 0;
8309         }
8310       else if (is_dynamic_field (type, f))
8311         {
8312           const gdb_byte *field_valaddr = valaddr;
8313           CORE_ADDR field_address = address;
8314           struct type *field_type =
8315             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
8316
8317           if (dval0 == NULL)
8318             {
8319               /* rtype's length is computed based on the run-time
8320                  value of discriminants.  If the discriminants are not
8321                  initialized, the type size may be completely bogus and
8322                  GDB may fail to allocate a value for it.  So check the
8323                  size first before creating the value.  */
8324               ada_ensure_varsize_limit (rtype);
8325               /* Using plain value_from_contents_and_address here
8326                  causes problems because we will end up trying to
8327                  resolve a type that is currently being
8328                  constructed.  */
8329               dval = value_from_contents_and_address_unresolved (rtype,
8330                                                                  valaddr,
8331                                                                  address);
8332               rtype = value_type (dval);
8333             }
8334           else
8335             dval = dval0;
8336
8337           /* If the type referenced by this field is an aligner type, we need
8338              to unwrap that aligner type, because its size might not be set.
8339              Keeping the aligner type would cause us to compute the wrong
8340              size for this field, impacting the offset of the all the fields
8341              that follow this one.  */
8342           if (ada_is_aligner_type (field_type))
8343             {
8344               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8345
8346               field_valaddr = cond_offset_host (field_valaddr, field_offset);
8347               field_address = cond_offset_target (field_address, field_offset);
8348               field_type = ada_aligned_type (field_type);
8349             }
8350
8351           field_valaddr = cond_offset_host (field_valaddr,
8352                                             off / TARGET_CHAR_BIT);
8353           field_address = cond_offset_target (field_address,
8354                                               off / TARGET_CHAR_BIT);
8355
8356           /* Get the fixed type of the field.  Note that, in this case,
8357              we do not want to get the real type out of the tag: if
8358              the current field is the parent part of a tagged record,
8359              we will get the tag of the object.  Clearly wrong: the real
8360              type of the parent is not the real type of the child.  We
8361              would end up in an infinite loop.  */
8362           field_type = ada_get_base_type (field_type);
8363           field_type = ada_to_fixed_type (field_type, field_valaddr,
8364                                           field_address, dval, 0);
8365           /* If the field size is already larger than the maximum
8366              object size, then the record itself will necessarily
8367              be larger than the maximum object size.  We need to make
8368              this check now, because the size might be so ridiculously
8369              large (due to an uninitialized variable in the inferior)
8370              that it would cause an overflow when adding it to the
8371              record size.  */
8372           ada_ensure_varsize_limit (field_type);
8373
8374           TYPE_FIELD_TYPE (rtype, f) = field_type;
8375           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8376           /* The multiplication can potentially overflow.  But because
8377              the field length has been size-checked just above, and
8378              assuming that the maximum size is a reasonable value,
8379              an overflow should not happen in practice.  So rather than
8380              adding overflow recovery code to this already complex code,
8381              we just assume that it's not going to happen.  */
8382           fld_bit_len =
8383             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8384         }
8385       else
8386         {
8387           /* Note: If this field's type is a typedef, it is important
8388              to preserve the typedef layer.
8389
8390              Otherwise, we might be transforming a typedef to a fat
8391              pointer (encoding a pointer to an unconstrained array),
8392              into a basic fat pointer (encoding an unconstrained
8393              array).  As both types are implemented using the same
8394              structure, the typedef is the only clue which allows us
8395              to distinguish between the two options.  Stripping it
8396              would prevent us from printing this field appropriately.  */
8397           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
8398           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8399           if (TYPE_FIELD_BITSIZE (type, f) > 0)
8400             fld_bit_len =
8401               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8402           else
8403             {
8404               struct type *field_type = TYPE_FIELD_TYPE (type, f);
8405
8406               /* We need to be careful of typedefs when computing
8407                  the length of our field.  If this is a typedef,
8408                  get the length of the target type, not the length
8409                  of the typedef.  */
8410               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8411                 field_type = ada_typedef_target_type (field_type);
8412
8413               fld_bit_len =
8414                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8415             }
8416         }
8417       if (off + fld_bit_len > bit_len)
8418         bit_len = off + fld_bit_len;
8419       off += fld_bit_len;
8420       TYPE_LENGTH (rtype) =
8421         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8422     }
8423
8424   /* We handle the variant part, if any, at the end because of certain
8425      odd cases in which it is re-ordered so as NOT to be the last field of
8426      the record.  This can happen in the presence of representation
8427      clauses.  */
8428   if (variant_field >= 0)
8429     {
8430       struct type *branch_type;
8431
8432       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8433
8434       if (dval0 == NULL)
8435         {
8436           /* Using plain value_from_contents_and_address here causes
8437              problems because we will end up trying to resolve a type
8438              that is currently being constructed.  */
8439           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8440                                                              address);
8441           rtype = value_type (dval);
8442         }
8443       else
8444         dval = dval0;
8445
8446       branch_type =
8447         to_fixed_variant_branch_type
8448         (TYPE_FIELD_TYPE (type, variant_field),
8449          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8450          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8451       if (branch_type == NULL)
8452         {
8453           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8454             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8455           TYPE_NFIELDS (rtype) -= 1;
8456         }
8457       else
8458         {
8459           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8460           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8461           fld_bit_len =
8462             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8463             TARGET_CHAR_BIT;
8464           if (off + fld_bit_len > bit_len)
8465             bit_len = off + fld_bit_len;
8466           TYPE_LENGTH (rtype) =
8467             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8468         }
8469     }
8470
8471   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8472      should contain the alignment of that record, which should be a strictly
8473      positive value.  If null or negative, then something is wrong, most
8474      probably in the debug info.  In that case, we don't round up the size
8475      of the resulting type.  If this record is not part of another structure,
8476      the current RTYPE length might be good enough for our purposes.  */
8477   if (TYPE_LENGTH (type) <= 0)
8478     {
8479       if (TYPE_NAME (rtype))
8480         warning (_("Invalid type size for `%s' detected: %d."),
8481                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8482       else
8483         warning (_("Invalid type size for <unnamed> detected: %d."),
8484                  TYPE_LENGTH (type));
8485     }
8486   else
8487     {
8488       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8489                                          TYPE_LENGTH (type));
8490     }
8491
8492   value_free_to_mark (mark);
8493   if (TYPE_LENGTH (rtype) > varsize_limit)
8494     error (_("record type with dynamic size is larger than varsize-limit"));
8495   return rtype;
8496 }
8497
8498 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8499    of 1.  */
8500
8501 static struct type *
8502 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8503                                CORE_ADDR address, struct value *dval0)
8504 {
8505   return ada_template_to_fixed_record_type_1 (type, valaddr,
8506                                               address, dval0, 1);
8507 }
8508
8509 /* An ordinary record type in which ___XVL-convention fields and
8510    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8511    static approximations, containing all possible fields.  Uses
8512    no runtime values.  Useless for use in values, but that's OK,
8513    since the results are used only for type determinations.   Works on both
8514    structs and unions.  Representation note: to save space, we memorize
8515    the result of this function in the TYPE_TARGET_TYPE of the
8516    template type.  */
8517
8518 static struct type *
8519 template_to_static_fixed_type (struct type *type0)
8520 {
8521   struct type *type;
8522   int nfields;
8523   int f;
8524
8525   /* No need no do anything if the input type is already fixed.  */
8526   if (TYPE_FIXED_INSTANCE (type0))
8527     return type0;
8528
8529   /* Likewise if we already have computed the static approximation.  */
8530   if (TYPE_TARGET_TYPE (type0) != NULL)
8531     return TYPE_TARGET_TYPE (type0);
8532
8533   /* Don't clone TYPE0 until we are sure we are going to need a copy.  */
8534   type = type0;
8535   nfields = TYPE_NFIELDS (type0);
8536
8537   /* Whether or not we cloned TYPE0, cache the result so that we don't do
8538      recompute all over next time.  */
8539   TYPE_TARGET_TYPE (type0) = type;
8540
8541   for (f = 0; f < nfields; f += 1)
8542     {
8543       struct type *field_type = TYPE_FIELD_TYPE (type0, f);
8544       struct type *new_type;
8545
8546       if (is_dynamic_field (type0, f))
8547         {
8548           field_type = ada_check_typedef (field_type);
8549           new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8550         }
8551       else
8552         new_type = static_unwrap_type (field_type);
8553
8554       if (new_type != field_type)
8555         {
8556           /* Clone TYPE0 only the first time we get a new field type.  */
8557           if (type == type0)
8558             {
8559               TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8560               TYPE_CODE (type) = TYPE_CODE (type0);
8561               INIT_CPLUS_SPECIFIC (type);
8562               TYPE_NFIELDS (type) = nfields;
8563               TYPE_FIELDS (type) = (struct field *)
8564                 TYPE_ALLOC (type, nfields * sizeof (struct field));
8565               memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8566                       sizeof (struct field) * nfields);
8567               TYPE_NAME (type) = ada_type_name (type0);
8568               TYPE_TAG_NAME (type) = NULL;
8569               TYPE_FIXED_INSTANCE (type) = 1;
8570               TYPE_LENGTH (type) = 0;
8571             }
8572           TYPE_FIELD_TYPE (type, f) = new_type;
8573           TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8574         }
8575     }
8576
8577   return type;
8578 }
8579
8580 /* Given an object of type TYPE whose contents are at VALADDR and
8581    whose address in memory is ADDRESS, returns a revision of TYPE,
8582    which should be a non-dynamic-sized record, in which the variant
8583    part, if any, is replaced with the appropriate branch.  Looks
8584    for discriminant values in DVAL0, which can be NULL if the record
8585    contains the necessary discriminant values.  */
8586
8587 static struct type *
8588 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8589                                    CORE_ADDR address, struct value *dval0)
8590 {
8591   struct value *mark = value_mark ();
8592   struct value *dval;
8593   struct type *rtype;
8594   struct type *branch_type;
8595   int nfields = TYPE_NFIELDS (type);
8596   int variant_field = variant_field_index (type);
8597
8598   if (variant_field == -1)
8599     return type;
8600
8601   if (dval0 == NULL)
8602     {
8603       dval = value_from_contents_and_address (type, valaddr, address);
8604       type = value_type (dval);
8605     }
8606   else
8607     dval = dval0;
8608
8609   rtype = alloc_type_copy (type);
8610   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8611   INIT_CPLUS_SPECIFIC (rtype);
8612   TYPE_NFIELDS (rtype) = nfields;
8613   TYPE_FIELDS (rtype) =
8614     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8615   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8616           sizeof (struct field) * nfields);
8617   TYPE_NAME (rtype) = ada_type_name (type);
8618   TYPE_TAG_NAME (rtype) = NULL;
8619   TYPE_FIXED_INSTANCE (rtype) = 1;
8620   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8621
8622   branch_type = to_fixed_variant_branch_type
8623     (TYPE_FIELD_TYPE (type, variant_field),
8624      cond_offset_host (valaddr,
8625                        TYPE_FIELD_BITPOS (type, variant_field)
8626                        / TARGET_CHAR_BIT),
8627      cond_offset_target (address,
8628                          TYPE_FIELD_BITPOS (type, variant_field)
8629                          / TARGET_CHAR_BIT), dval);
8630   if (branch_type == NULL)
8631     {
8632       int f;
8633
8634       for (f = variant_field + 1; f < nfields; f += 1)
8635         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8636       TYPE_NFIELDS (rtype) -= 1;
8637     }
8638   else
8639     {
8640       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8641       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8642       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8643       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8644     }
8645   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8646
8647   value_free_to_mark (mark);
8648   return rtype;
8649 }
8650
8651 /* An ordinary record type (with fixed-length fields) that describes
8652    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8653    beginning of this section].   Any necessary discriminants' values
8654    should be in DVAL, a record value; it may be NULL if the object
8655    at ADDR itself contains any necessary discriminant values.
8656    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8657    values from the record are needed.  Except in the case that DVAL,
8658    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8659    unchecked) is replaced by a particular branch of the variant.
8660
8661    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8662    is questionable and may be removed.  It can arise during the
8663    processing of an unconstrained-array-of-record type where all the
8664    variant branches have exactly the same size.  This is because in
8665    such cases, the compiler does not bother to use the XVS convention
8666    when encoding the record.  I am currently dubious of this
8667    shortcut and suspect the compiler should be altered.  FIXME.  */
8668
8669 static struct type *
8670 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8671                       CORE_ADDR address, struct value *dval)
8672 {
8673   struct type *templ_type;
8674
8675   if (TYPE_FIXED_INSTANCE (type0))
8676     return type0;
8677
8678   templ_type = dynamic_template_type (type0);
8679
8680   if (templ_type != NULL)
8681     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8682   else if (variant_field_index (type0) >= 0)
8683     {
8684       if (dval == NULL && valaddr == NULL && address == 0)
8685         return type0;
8686       return to_record_with_fixed_variant_part (type0, valaddr, address,
8687                                                 dval);
8688     }
8689   else
8690     {
8691       TYPE_FIXED_INSTANCE (type0) = 1;
8692       return type0;
8693     }
8694
8695 }
8696
8697 /* An ordinary record type (with fixed-length fields) that describes
8698    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8699    union type.  Any necessary discriminants' values should be in DVAL,
8700    a record value.  That is, this routine selects the appropriate
8701    branch of the union at ADDR according to the discriminant value
8702    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8703    it represents a variant subject to a pragma Unchecked_Union.  */
8704
8705 static struct type *
8706 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8707                               CORE_ADDR address, struct value *dval)
8708 {
8709   int which;
8710   struct type *templ_type;
8711   struct type *var_type;
8712
8713   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8714     var_type = TYPE_TARGET_TYPE (var_type0);
8715   else
8716     var_type = var_type0;
8717
8718   templ_type = ada_find_parallel_type (var_type, "___XVU");
8719
8720   if (templ_type != NULL)
8721     var_type = templ_type;
8722
8723   if (is_unchecked_variant (var_type, value_type (dval)))
8724       return var_type0;
8725   which =
8726     ada_which_variant_applies (var_type,
8727                                value_type (dval), value_contents (dval));
8728
8729   if (which < 0)
8730     return empty_record (var_type);
8731   else if (is_dynamic_field (var_type, which))
8732     return to_fixed_record_type
8733       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8734        valaddr, address, dval);
8735   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8736     return
8737       to_fixed_record_type
8738       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8739   else
8740     return TYPE_FIELD_TYPE (var_type, which);
8741 }
8742
8743 /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8744    ENCODING_TYPE, a type following the GNAT conventions for discrete
8745    type encodings, only carries redundant information.  */
8746
8747 static int
8748 ada_is_redundant_range_encoding (struct type *range_type,
8749                                  struct type *encoding_type)
8750 {
8751   struct type *fixed_range_type;
8752   const char *bounds_str;
8753   int n;
8754   LONGEST lo, hi;
8755
8756   gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8757
8758   if (TYPE_CODE (get_base_type (range_type))
8759       != TYPE_CODE (get_base_type (encoding_type)))
8760     {
8761       /* The compiler probably used a simple base type to describe
8762          the range type instead of the range's actual base type,
8763          expecting us to get the real base type from the encoding
8764          anyway.  In this situation, the encoding cannot be ignored
8765          as redundant.  */
8766       return 0;
8767     }
8768
8769   if (is_dynamic_type (range_type))
8770     return 0;
8771
8772   if (TYPE_NAME (encoding_type) == NULL)
8773     return 0;
8774
8775   bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8776   if (bounds_str == NULL)
8777     return 0;
8778
8779   n = 8; /* Skip "___XDLU_".  */
8780   if (!ada_scan_number (bounds_str, n, &lo, &n))
8781     return 0;
8782   if (TYPE_LOW_BOUND (range_type) != lo)
8783     return 0;
8784
8785   n += 2; /* Skip the "__" separator between the two bounds.  */
8786   if (!ada_scan_number (bounds_str, n, &hi, &n))
8787     return 0;
8788   if (TYPE_HIGH_BOUND (range_type) != hi)
8789     return 0;
8790
8791   return 1;
8792 }
8793
8794 /* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8795    a type following the GNAT encoding for describing array type
8796    indices, only carries redundant information.  */
8797
8798 static int
8799 ada_is_redundant_index_type_desc (struct type *array_type,
8800                                   struct type *desc_type)
8801 {
8802   struct type *this_layer = check_typedef (array_type);
8803   int i;
8804
8805   for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8806     {
8807       if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8808                                             TYPE_FIELD_TYPE (desc_type, i)))
8809         return 0;
8810       this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8811     }
8812
8813   return 1;
8814 }
8815
8816 /* Assuming that TYPE0 is an array type describing the type of a value
8817    at ADDR, and that DVAL describes a record containing any
8818    discriminants used in TYPE0, returns a type for the value that
8819    contains no dynamic components (that is, no components whose sizes
8820    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8821    true, gives an error message if the resulting type's size is over
8822    varsize_limit.  */
8823
8824 static struct type *
8825 to_fixed_array_type (struct type *type0, struct value *dval,
8826                      int ignore_too_big)
8827 {
8828   struct type *index_type_desc;
8829   struct type *result;
8830   int constrained_packed_array_p;
8831   static const char *xa_suffix = "___XA";
8832
8833   type0 = ada_check_typedef (type0);
8834   if (TYPE_FIXED_INSTANCE (type0))
8835     return type0;
8836
8837   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8838   if (constrained_packed_array_p)
8839     type0 = decode_constrained_packed_array_type (type0);
8840
8841   index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8842
8843   /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8844      encoding suffixed with 'P' may still be generated.  If so,
8845      it should be used to find the XA type.  */
8846
8847   if (index_type_desc == NULL)
8848     {
8849       const char *type_name = ada_type_name (type0);
8850
8851       if (type_name != NULL)
8852         {
8853           const int len = strlen (type_name);
8854           char *name = (char *) alloca (len + strlen (xa_suffix));
8855
8856           if (type_name[len - 1] == 'P')
8857             {
8858               strcpy (name, type_name);
8859               strcpy (name + len - 1, xa_suffix);
8860               index_type_desc = ada_find_parallel_type_with_name (type0, name);
8861             }
8862         }
8863     }
8864
8865   ada_fixup_array_indexes_type (index_type_desc);
8866   if (index_type_desc != NULL
8867       && ada_is_redundant_index_type_desc (type0, index_type_desc))
8868     {
8869       /* Ignore this ___XA parallel type, as it does not bring any
8870          useful information.  This allows us to avoid creating fixed
8871          versions of the array's index types, which would be identical
8872          to the original ones.  This, in turn, can also help avoid
8873          the creation of fixed versions of the array itself.  */
8874       index_type_desc = NULL;
8875     }
8876
8877   if (index_type_desc == NULL)
8878     {
8879       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8880
8881       /* NOTE: elt_type---the fixed version of elt_type0---should never
8882          depend on the contents of the array in properly constructed
8883          debugging data.  */
8884       /* Create a fixed version of the array element type.
8885          We're not providing the address of an element here,
8886          and thus the actual object value cannot be inspected to do
8887          the conversion.  This should not be a problem, since arrays of
8888          unconstrained objects are not allowed.  In particular, all
8889          the elements of an array of a tagged type should all be of
8890          the same type specified in the debugging info.  No need to
8891          consult the object tag.  */
8892       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8893
8894       /* Make sure we always create a new array type when dealing with
8895          packed array types, since we're going to fix-up the array
8896          type length and element bitsize a little further down.  */
8897       if (elt_type0 == elt_type && !constrained_packed_array_p)
8898         result = type0;
8899       else
8900         result = create_array_type (alloc_type_copy (type0),
8901                                     elt_type, TYPE_INDEX_TYPE (type0));
8902     }
8903   else
8904     {
8905       int i;
8906       struct type *elt_type0;
8907
8908       elt_type0 = type0;
8909       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8910         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8911
8912       /* NOTE: result---the fixed version of elt_type0---should never
8913          depend on the contents of the array in properly constructed
8914          debugging data.  */
8915       /* Create a fixed version of the array element type.
8916          We're not providing the address of an element here,
8917          and thus the actual object value cannot be inspected to do
8918          the conversion.  This should not be a problem, since arrays of
8919          unconstrained objects are not allowed.  In particular, all
8920          the elements of an array of a tagged type should all be of
8921          the same type specified in the debugging info.  No need to
8922          consult the object tag.  */
8923       result =
8924         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8925
8926       elt_type0 = type0;
8927       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8928         {
8929           struct type *range_type =
8930             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8931
8932           result = create_array_type (alloc_type_copy (elt_type0),
8933                                       result, range_type);
8934           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8935         }
8936       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8937         error (_("array type with dynamic size is larger than varsize-limit"));
8938     }
8939
8940   /* We want to preserve the type name.  This can be useful when
8941      trying to get the type name of a value that has already been
8942      printed (for instance, if the user did "print VAR; whatis $".  */
8943   TYPE_NAME (result) = TYPE_NAME (type0);
8944
8945   if (constrained_packed_array_p)
8946     {
8947       /* So far, the resulting type has been created as if the original
8948          type was a regular (non-packed) array type.  As a result, the
8949          bitsize of the array elements needs to be set again, and the array
8950          length needs to be recomputed based on that bitsize.  */
8951       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8952       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8953
8954       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8955       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8956       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8957         TYPE_LENGTH (result)++;
8958     }
8959
8960   TYPE_FIXED_INSTANCE (result) = 1;
8961   return result;
8962 }
8963
8964
8965 /* A standard type (containing no dynamically sized components)
8966    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8967    DVAL describes a record containing any discriminants used in TYPE0,
8968    and may be NULL if there are none, or if the object of type TYPE at
8969    ADDRESS or in VALADDR contains these discriminants.
8970    
8971    If CHECK_TAG is not null, in the case of tagged types, this function
8972    attempts to locate the object's tag and use it to compute the actual
8973    type.  However, when ADDRESS is null, we cannot use it to determine the
8974    location of the tag, and therefore compute the tagged type's actual type.
8975    So we return the tagged type without consulting the tag.  */
8976    
8977 static struct type *
8978 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8979                    CORE_ADDR address, struct value *dval, int check_tag)
8980 {
8981   type = ada_check_typedef (type);
8982   switch (TYPE_CODE (type))
8983     {
8984     default:
8985       return type;
8986     case TYPE_CODE_STRUCT:
8987       {
8988         struct type *static_type = to_static_fixed_type (type);
8989         struct type *fixed_record_type =
8990           to_fixed_record_type (type, valaddr, address, NULL);
8991
8992         /* If STATIC_TYPE is a tagged type and we know the object's address,
8993            then we can determine its tag, and compute the object's actual
8994            type from there.  Note that we have to use the fixed record
8995            type (the parent part of the record may have dynamic fields
8996            and the way the location of _tag is expressed may depend on
8997            them).  */
8998
8999         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
9000           {
9001             struct value *tag =
9002               value_tag_from_contents_and_address
9003               (fixed_record_type,
9004                valaddr,
9005                address);
9006             struct type *real_type = type_from_tag (tag);
9007             struct value *obj =
9008               value_from_contents_and_address (fixed_record_type,
9009                                                valaddr,
9010                                                address);
9011             fixed_record_type = value_type (obj);
9012             if (real_type != NULL)
9013               return to_fixed_record_type
9014                 (real_type, NULL,
9015                  value_address (ada_tag_value_at_base_address (obj)), NULL);
9016           }
9017
9018         /* Check to see if there is a parallel ___XVZ variable.
9019            If there is, then it provides the actual size of our type.  */
9020         else if (ada_type_name (fixed_record_type) != NULL)
9021           {
9022             const char *name = ada_type_name (fixed_record_type);
9023             char *xvz_name
9024               = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
9025             int xvz_found = 0;
9026             LONGEST size;
9027
9028             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
9029             size = get_int_var_value (xvz_name, &xvz_found);
9030             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
9031               {
9032                 fixed_record_type = copy_type (fixed_record_type);
9033                 TYPE_LENGTH (fixed_record_type) = size;
9034
9035                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
9036                    observed this when the debugging info is STABS, and
9037                    apparently it is something that is hard to fix.
9038
9039                    In practice, we don't need the actual type definition
9040                    at all, because the presence of the XVZ variable allows us
9041                    to assume that there must be a XVS type as well, which we
9042                    should be able to use later, when we need the actual type
9043                    definition.
9044
9045                    In the meantime, pretend that the "fixed" type we are
9046                    returning is NOT a stub, because this can cause trouble
9047                    when using this type to create new types targeting it.
9048                    Indeed, the associated creation routines often check
9049                    whether the target type is a stub and will try to replace
9050                    it, thus using a type with the wrong size.  This, in turn,
9051                    might cause the new type to have the wrong size too.
9052                    Consider the case of an array, for instance, where the size
9053                    of the array is computed from the number of elements in
9054                    our array multiplied by the size of its element.  */
9055                 TYPE_STUB (fixed_record_type) = 0;
9056               }
9057           }
9058         return fixed_record_type;
9059       }
9060     case TYPE_CODE_ARRAY:
9061       return to_fixed_array_type (type, dval, 1);
9062     case TYPE_CODE_UNION:
9063       if (dval == NULL)
9064         return type;
9065       else
9066         return to_fixed_variant_branch_type (type, valaddr, address, dval);
9067     }
9068 }
9069
9070 /* The same as ada_to_fixed_type_1, except that it preserves the type
9071    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
9072
9073    The typedef layer needs be preserved in order to differentiate between
9074    arrays and array pointers when both types are implemented using the same
9075    fat pointer.  In the array pointer case, the pointer is encoded as
9076    a typedef of the pointer type.  For instance, considering:
9077
9078           type String_Access is access String;
9079           S1 : String_Access := null;
9080
9081    To the debugger, S1 is defined as a typedef of type String.  But
9082    to the user, it is a pointer.  So if the user tries to print S1,
9083    we should not dereference the array, but print the array address
9084    instead.
9085
9086    If we didn't preserve the typedef layer, we would lose the fact that
9087    the type is to be presented as a pointer (needs de-reference before
9088    being printed).  And we would also use the source-level type name.  */
9089
9090 struct type *
9091 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
9092                    CORE_ADDR address, struct value *dval, int check_tag)
9093
9094 {
9095   struct type *fixed_type =
9096     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
9097
9098   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
9099       then preserve the typedef layer.
9100
9101       Implementation note: We can only check the main-type portion of
9102       the TYPE and FIXED_TYPE, because eliminating the typedef layer
9103       from TYPE now returns a type that has the same instance flags
9104       as TYPE.  For instance, if TYPE is a "typedef const", and its
9105       target type is a "struct", then the typedef elimination will return
9106       a "const" version of the target type.  See check_typedef for more
9107       details about how the typedef layer elimination is done.
9108
9109       brobecker/2010-11-19: It seems to me that the only case where it is
9110       useful to preserve the typedef layer is when dealing with fat pointers.
9111       Perhaps, we could add a check for that and preserve the typedef layer
9112       only in that situation.  But this seems unecessary so far, probably
9113       because we call check_typedef/ada_check_typedef pretty much everywhere.
9114       */
9115   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
9116       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
9117           == TYPE_MAIN_TYPE (fixed_type)))
9118     return type;
9119
9120   return fixed_type;
9121 }
9122
9123 /* A standard (static-sized) type corresponding as well as possible to
9124    TYPE0, but based on no runtime data.  */
9125
9126 static struct type *
9127 to_static_fixed_type (struct type *type0)
9128 {
9129   struct type *type;
9130
9131   if (type0 == NULL)
9132     return NULL;
9133
9134   if (TYPE_FIXED_INSTANCE (type0))
9135     return type0;
9136
9137   type0 = ada_check_typedef (type0);
9138
9139   switch (TYPE_CODE (type0))
9140     {
9141     default:
9142       return type0;
9143     case TYPE_CODE_STRUCT:
9144       type = dynamic_template_type (type0);
9145       if (type != NULL)
9146         return template_to_static_fixed_type (type);
9147       else
9148         return template_to_static_fixed_type (type0);
9149     case TYPE_CODE_UNION:
9150       type = ada_find_parallel_type (type0, "___XVU");
9151       if (type != NULL)
9152         return template_to_static_fixed_type (type);
9153       else
9154         return template_to_static_fixed_type (type0);
9155     }
9156 }
9157
9158 /* A static approximation of TYPE with all type wrappers removed.  */
9159
9160 static struct type *
9161 static_unwrap_type (struct type *type)
9162 {
9163   if (ada_is_aligner_type (type))
9164     {
9165       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
9166       if (ada_type_name (type1) == NULL)
9167         TYPE_NAME (type1) = ada_type_name (type);
9168
9169       return static_unwrap_type (type1);
9170     }
9171   else
9172     {
9173       struct type *raw_real_type = ada_get_base_type (type);
9174
9175       if (raw_real_type == type)
9176         return type;
9177       else
9178         return to_static_fixed_type (raw_real_type);
9179     }
9180 }
9181
9182 /* In some cases, incomplete and private types require
9183    cross-references that are not resolved as records (for example,
9184       type Foo;
9185       type FooP is access Foo;
9186       V: FooP;
9187       type Foo is array ...;
9188    ).  In these cases, since there is no mechanism for producing
9189    cross-references to such types, we instead substitute for FooP a
9190    stub enumeration type that is nowhere resolved, and whose tag is
9191    the name of the actual type.  Call these types "non-record stubs".  */
9192
9193 /* A type equivalent to TYPE that is not a non-record stub, if one
9194    exists, otherwise TYPE.  */
9195
9196 struct type *
9197 ada_check_typedef (struct type *type)
9198 {
9199   if (type == NULL)
9200     return NULL;
9201
9202   /* If our type is a typedef type of a fat pointer, then we're done.
9203      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
9204      what allows us to distinguish between fat pointers that represent
9205      array types, and fat pointers that represent array access types
9206      (in both cases, the compiler implements them as fat pointers).  */
9207   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
9208       && is_thick_pntr (ada_typedef_target_type (type)))
9209     return type;
9210
9211   type = check_typedef (type);
9212   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
9213       || !TYPE_STUB (type)
9214       || TYPE_TAG_NAME (type) == NULL)
9215     return type;
9216   else
9217     {
9218       const char *name = TYPE_TAG_NAME (type);
9219       struct type *type1 = ada_find_any_type (name);
9220
9221       if (type1 == NULL)
9222         return type;
9223
9224       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
9225          stubs pointing to arrays, as we don't create symbols for array
9226          types, only for the typedef-to-array types).  If that's the case,
9227          strip the typedef layer.  */
9228       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
9229         type1 = ada_check_typedef (type1);
9230
9231       return type1;
9232     }
9233 }
9234
9235 /* A value representing the data at VALADDR/ADDRESS as described by
9236    type TYPE0, but with a standard (static-sized) type that correctly
9237    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
9238    type, then return VAL0 [this feature is simply to avoid redundant
9239    creation of struct values].  */
9240
9241 static struct value *
9242 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
9243                            struct value *val0)
9244 {
9245   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
9246
9247   if (type == type0 && val0 != NULL)
9248     return val0;
9249   else
9250     return value_from_contents_and_address (type, 0, address);
9251 }
9252
9253 /* A value representing VAL, but with a standard (static-sized) type
9254    that correctly describes it.  Does not necessarily create a new
9255    value.  */
9256
9257 struct value *
9258 ada_to_fixed_value (struct value *val)
9259 {
9260   val = unwrap_value (val);
9261   val = ada_to_fixed_value_create (value_type (val),
9262                                       value_address (val),
9263                                       val);
9264   return val;
9265 }
9266 \f
9267
9268 /* Attributes */
9269
9270 /* Table mapping attribute numbers to names.
9271    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
9272
9273 static const char *attribute_names[] = {
9274   "<?>",
9275
9276   "first",
9277   "last",
9278   "length",
9279   "image",
9280   "max",
9281   "min",
9282   "modulus",
9283   "pos",
9284   "size",
9285   "tag",
9286   "val",
9287   0
9288 };
9289
9290 const char *
9291 ada_attribute_name (enum exp_opcode n)
9292 {
9293   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
9294     return attribute_names[n - OP_ATR_FIRST + 1];
9295   else
9296     return attribute_names[0];
9297 }
9298
9299 /* Evaluate the 'POS attribute applied to ARG.  */
9300
9301 static LONGEST
9302 pos_atr (struct value *arg)
9303 {
9304   struct value *val = coerce_ref (arg);
9305   struct type *type = value_type (val);
9306   LONGEST result;
9307
9308   if (!discrete_type_p (type))
9309     error (_("'POS only defined on discrete types"));
9310
9311   if (!discrete_position (type, value_as_long (val), &result))
9312     error (_("enumeration value is invalid: can't find 'POS"));
9313
9314   return result;
9315 }
9316
9317 static struct value *
9318 value_pos_atr (struct type *type, struct value *arg)
9319 {
9320   return value_from_longest (type, pos_atr (arg));
9321 }
9322
9323 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
9324
9325 static struct value *
9326 value_val_atr (struct type *type, struct value *arg)
9327 {
9328   if (!discrete_type_p (type))
9329     error (_("'VAL only defined on discrete types"));
9330   if (!integer_type_p (value_type (arg)))
9331     error (_("'VAL requires integral argument"));
9332
9333   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
9334     {
9335       long pos = value_as_long (arg);
9336
9337       if (pos < 0 || pos >= TYPE_NFIELDS (type))
9338         error (_("argument to 'VAL out of range"));
9339       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
9340     }
9341   else
9342     return value_from_longest (type, value_as_long (arg));
9343 }
9344 \f
9345
9346                                 /* Evaluation */
9347
9348 /* True if TYPE appears to be an Ada character type.
9349    [At the moment, this is true only for Character and Wide_Character;
9350    It is a heuristic test that could stand improvement].  */
9351
9352 int
9353 ada_is_character_type (struct type *type)
9354 {
9355   const char *name;
9356
9357   /* If the type code says it's a character, then assume it really is,
9358      and don't check any further.  */
9359   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
9360     return 1;
9361   
9362   /* Otherwise, assume it's a character type iff it is a discrete type
9363      with a known character type name.  */
9364   name = ada_type_name (type);
9365   return (name != NULL
9366           && (TYPE_CODE (type) == TYPE_CODE_INT
9367               || TYPE_CODE (type) == TYPE_CODE_RANGE)
9368           && (strcmp (name, "character") == 0
9369               || strcmp (name, "wide_character") == 0
9370               || strcmp (name, "wide_wide_character") == 0
9371               || strcmp (name, "unsigned char") == 0));
9372 }
9373
9374 /* True if TYPE appears to be an Ada string type.  */
9375
9376 int
9377 ada_is_string_type (struct type *type)
9378 {
9379   type = ada_check_typedef (type);
9380   if (type != NULL
9381       && TYPE_CODE (type) != TYPE_CODE_PTR
9382       && (ada_is_simple_array_type (type)
9383           || ada_is_array_descriptor_type (type))
9384       && ada_array_arity (type) == 1)
9385     {
9386       struct type *elttype = ada_array_element_type (type, 1);
9387
9388       return ada_is_character_type (elttype);
9389     }
9390   else
9391     return 0;
9392 }
9393
9394 /* The compiler sometimes provides a parallel XVS type for a given
9395    PAD type.  Normally, it is safe to follow the PAD type directly,
9396    but older versions of the compiler have a bug that causes the offset
9397    of its "F" field to be wrong.  Following that field in that case
9398    would lead to incorrect results, but this can be worked around
9399    by ignoring the PAD type and using the associated XVS type instead.
9400
9401    Set to True if the debugger should trust the contents of PAD types.
9402    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
9403 static int trust_pad_over_xvs = 1;
9404
9405 /* True if TYPE is a struct type introduced by the compiler to force the
9406    alignment of a value.  Such types have a single field with a
9407    distinctive name.  */
9408
9409 int
9410 ada_is_aligner_type (struct type *type)
9411 {
9412   type = ada_check_typedef (type);
9413
9414   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
9415     return 0;
9416
9417   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
9418           && TYPE_NFIELDS (type) == 1
9419           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
9420 }
9421
9422 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
9423    the parallel type.  */
9424
9425 struct type *
9426 ada_get_base_type (struct type *raw_type)
9427 {
9428   struct type *real_type_namer;
9429   struct type *raw_real_type;
9430
9431   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9432     return raw_type;
9433
9434   if (ada_is_aligner_type (raw_type))
9435     /* The encoding specifies that we should always use the aligner type.
9436        So, even if this aligner type has an associated XVS type, we should
9437        simply ignore it.
9438
9439        According to the compiler gurus, an XVS type parallel to an aligner
9440        type may exist because of a stabs limitation.  In stabs, aligner
9441        types are empty because the field has a variable-sized type, and
9442        thus cannot actually be used as an aligner type.  As a result,
9443        we need the associated parallel XVS type to decode the type.
9444        Since the policy in the compiler is to not change the internal
9445        representation based on the debugging info format, we sometimes
9446        end up having a redundant XVS type parallel to the aligner type.  */
9447     return raw_type;
9448
9449   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
9450   if (real_type_namer == NULL
9451       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9452       || TYPE_NFIELDS (real_type_namer) != 1)
9453     return raw_type;
9454
9455   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9456     {
9457       /* This is an older encoding form where the base type needs to be
9458          looked up by name.  We prefer the newer enconding because it is
9459          more efficient.  */
9460       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9461       if (raw_real_type == NULL)
9462         return raw_type;
9463       else
9464         return raw_real_type;
9465     }
9466
9467   /* The field in our XVS type is a reference to the base type.  */
9468   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
9469 }
9470
9471 /* The type of value designated by TYPE, with all aligners removed.  */
9472
9473 struct type *
9474 ada_aligned_type (struct type *type)
9475 {
9476   if (ada_is_aligner_type (type))
9477     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9478   else
9479     return ada_get_base_type (type);
9480 }
9481
9482
9483 /* The address of the aligned value in an object at address VALADDR
9484    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
9485
9486 const gdb_byte *
9487 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
9488 {
9489   if (ada_is_aligner_type (type))
9490     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
9491                                    valaddr +
9492                                    TYPE_FIELD_BITPOS (type,
9493                                                       0) / TARGET_CHAR_BIT);
9494   else
9495     return valaddr;
9496 }
9497
9498
9499
9500 /* The printed representation of an enumeration literal with encoded
9501    name NAME.  The value is good to the next call of ada_enum_name.  */
9502 const char *
9503 ada_enum_name (const char *name)
9504 {
9505   static char *result;
9506   static size_t result_len = 0;
9507   const char *tmp;
9508
9509   /* First, unqualify the enumeration name:
9510      1. Search for the last '.' character.  If we find one, then skip
9511      all the preceding characters, the unqualified name starts
9512      right after that dot.
9513      2. Otherwise, we may be debugging on a target where the compiler
9514      translates dots into "__".  Search forward for double underscores,
9515      but stop searching when we hit an overloading suffix, which is
9516      of the form "__" followed by digits.  */
9517
9518   tmp = strrchr (name, '.');
9519   if (tmp != NULL)
9520     name = tmp + 1;
9521   else
9522     {
9523       while ((tmp = strstr (name, "__")) != NULL)
9524         {
9525           if (isdigit (tmp[2]))
9526             break;
9527           else
9528             name = tmp + 2;
9529         }
9530     }
9531
9532   if (name[0] == 'Q')
9533     {
9534       int v;
9535
9536       if (name[1] == 'U' || name[1] == 'W')
9537         {
9538           if (sscanf (name + 2, "%x", &v) != 1)
9539             return name;
9540         }
9541       else
9542         return name;
9543
9544       GROW_VECT (result, result_len, 16);
9545       if (isascii (v) && isprint (v))
9546         xsnprintf (result, result_len, "'%c'", v);
9547       else if (name[1] == 'U')
9548         xsnprintf (result, result_len, "[\"%02x\"]", v);
9549       else
9550         xsnprintf (result, result_len, "[\"%04x\"]", v);
9551
9552       return result;
9553     }
9554   else
9555     {
9556       tmp = strstr (name, "__");
9557       if (tmp == NULL)
9558         tmp = strstr (name, "$");
9559       if (tmp != NULL)
9560         {
9561           GROW_VECT (result, result_len, tmp - name + 1);
9562           strncpy (result, name, tmp - name);
9563           result[tmp - name] = '\0';
9564           return result;
9565         }
9566
9567       return name;
9568     }
9569 }
9570
9571 /* Evaluate the subexpression of EXP starting at *POS as for
9572    evaluate_type, updating *POS to point just past the evaluated
9573    expression.  */
9574
9575 static struct value *
9576 evaluate_subexp_type (struct expression *exp, int *pos)
9577 {
9578   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9579 }
9580
9581 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9582    value it wraps.  */
9583
9584 static struct value *
9585 unwrap_value (struct value *val)
9586 {
9587   struct type *type = ada_check_typedef (value_type (val));
9588
9589   if (ada_is_aligner_type (type))
9590     {
9591       struct value *v = ada_value_struct_elt (val, "F", 0);
9592       struct type *val_type = ada_check_typedef (value_type (v));
9593
9594       if (ada_type_name (val_type) == NULL)
9595         TYPE_NAME (val_type) = ada_type_name (type);
9596
9597       return unwrap_value (v);
9598     }
9599   else
9600     {
9601       struct type *raw_real_type =
9602         ada_check_typedef (ada_get_base_type (type));
9603
9604       /* If there is no parallel XVS or XVE type, then the value is
9605          already unwrapped.  Return it without further modification.  */
9606       if ((type == raw_real_type)
9607           && ada_find_parallel_type (type, "___XVE") == NULL)
9608         return val;
9609
9610       return
9611         coerce_unspec_val_to_type
9612         (val, ada_to_fixed_type (raw_real_type, 0,
9613                                  value_address (val),
9614                                  NULL, 1));
9615     }
9616 }
9617
9618 static struct value *
9619 cast_to_fixed (struct type *type, struct value *arg)
9620 {
9621   LONGEST val;
9622
9623   if (type == value_type (arg))
9624     return arg;
9625   else if (ada_is_fixed_point_type (value_type (arg)))
9626     val = ada_float_to_fixed (type,
9627                               ada_fixed_to_float (value_type (arg),
9628                                                   value_as_long (arg)));
9629   else
9630     {
9631       DOUBLEST argd = value_as_double (arg);
9632
9633       val = ada_float_to_fixed (type, argd);
9634     }
9635
9636   return value_from_longest (type, val);
9637 }
9638
9639 static struct value *
9640 cast_from_fixed (struct type *type, struct value *arg)
9641 {
9642   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9643                                      value_as_long (arg));
9644
9645   return value_from_double (type, val);
9646 }
9647
9648 /* Given two array types T1 and T2, return nonzero iff both arrays
9649    contain the same number of elements.  */
9650
9651 static int
9652 ada_same_array_size_p (struct type *t1, struct type *t2)
9653 {
9654   LONGEST lo1, hi1, lo2, hi2;
9655
9656   /* Get the array bounds in order to verify that the size of
9657      the two arrays match.  */
9658   if (!get_array_bounds (t1, &lo1, &hi1)
9659       || !get_array_bounds (t2, &lo2, &hi2))
9660     error (_("unable to determine array bounds"));
9661
9662   /* To make things easier for size comparison, normalize a bit
9663      the case of empty arrays by making sure that the difference
9664      between upper bound and lower bound is always -1.  */
9665   if (lo1 > hi1)
9666     hi1 = lo1 - 1;
9667   if (lo2 > hi2)
9668     hi2 = lo2 - 1;
9669
9670   return (hi1 - lo1 == hi2 - lo2);
9671 }
9672
9673 /* Assuming that VAL is an array of integrals, and TYPE represents
9674    an array with the same number of elements, but with wider integral
9675    elements, return an array "casted" to TYPE.  In practice, this
9676    means that the returned array is built by casting each element
9677    of the original array into TYPE's (wider) element type.  */
9678
9679 static struct value *
9680 ada_promote_array_of_integrals (struct type *type, struct value *val)
9681 {
9682   struct type *elt_type = TYPE_TARGET_TYPE (type);
9683   LONGEST lo, hi;
9684   struct value *res;
9685   LONGEST i;
9686
9687   /* Verify that both val and type are arrays of scalars, and
9688      that the size of val's elements is smaller than the size
9689      of type's element.  */
9690   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9691   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9692   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9693   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9694   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9695               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9696
9697   if (!get_array_bounds (type, &lo, &hi))
9698     error (_("unable to determine array bounds"));
9699
9700   res = allocate_value (type);
9701
9702   /* Promote each array element.  */
9703   for (i = 0; i < hi - lo + 1; i++)
9704     {
9705       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9706
9707       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9708               value_contents_all (elt), TYPE_LENGTH (elt_type));
9709     }
9710
9711   return res;
9712 }
9713
9714 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9715    return the converted value.  */
9716
9717 static struct value *
9718 coerce_for_assign (struct type *type, struct value *val)
9719 {
9720   struct type *type2 = value_type (val);
9721
9722   if (type == type2)
9723     return val;
9724
9725   type2 = ada_check_typedef (type2);
9726   type = ada_check_typedef (type);
9727
9728   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9729       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9730     {
9731       val = ada_value_ind (val);
9732       type2 = value_type (val);
9733     }
9734
9735   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9736       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9737     {
9738       if (!ada_same_array_size_p (type, type2))
9739         error (_("cannot assign arrays of different length"));
9740
9741       if (is_integral_type (TYPE_TARGET_TYPE (type))
9742           && is_integral_type (TYPE_TARGET_TYPE (type2))
9743           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9744                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9745         {
9746           /* Allow implicit promotion of the array elements to
9747              a wider type.  */
9748           return ada_promote_array_of_integrals (type, val);
9749         }
9750
9751       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9752           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9753         error (_("Incompatible types in assignment"));
9754       deprecated_set_value_type (val, type);
9755     }
9756   return val;
9757 }
9758
9759 static struct value *
9760 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9761 {
9762   struct value *val;
9763   struct type *type1, *type2;
9764   LONGEST v, v1, v2;
9765
9766   arg1 = coerce_ref (arg1);
9767   arg2 = coerce_ref (arg2);
9768   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9769   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9770
9771   if (TYPE_CODE (type1) != TYPE_CODE_INT
9772       || TYPE_CODE (type2) != TYPE_CODE_INT)
9773     return value_binop (arg1, arg2, op);
9774
9775   switch (op)
9776     {
9777     case BINOP_MOD:
9778     case BINOP_DIV:
9779     case BINOP_REM:
9780       break;
9781     default:
9782       return value_binop (arg1, arg2, op);
9783     }
9784
9785   v2 = value_as_long (arg2);
9786   if (v2 == 0)
9787     error (_("second operand of %s must not be zero."), op_string (op));
9788
9789   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9790     return value_binop (arg1, arg2, op);
9791
9792   v1 = value_as_long (arg1);
9793   switch (op)
9794     {
9795     case BINOP_DIV:
9796       v = v1 / v2;
9797       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9798         v += v > 0 ? -1 : 1;
9799       break;
9800     case BINOP_REM:
9801       v = v1 % v2;
9802       if (v * v1 < 0)
9803         v -= v2;
9804       break;
9805     default:
9806       /* Should not reach this point.  */
9807       v = 0;
9808     }
9809
9810   val = allocate_value (type1);
9811   store_unsigned_integer (value_contents_raw (val),
9812                           TYPE_LENGTH (value_type (val)),
9813                           gdbarch_byte_order (get_type_arch (type1)), v);
9814   return val;
9815 }
9816
9817 static int
9818 ada_value_equal (struct value *arg1, struct value *arg2)
9819 {
9820   if (ada_is_direct_array_type (value_type (arg1))
9821       || ada_is_direct_array_type (value_type (arg2)))
9822     {
9823       /* Automatically dereference any array reference before
9824          we attempt to perform the comparison.  */
9825       arg1 = ada_coerce_ref (arg1);
9826       arg2 = ada_coerce_ref (arg2);
9827       
9828       arg1 = ada_coerce_to_simple_array (arg1);
9829       arg2 = ada_coerce_to_simple_array (arg2);
9830       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9831           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9832         error (_("Attempt to compare array with non-array"));
9833       /* FIXME: The following works only for types whose
9834          representations use all bits (no padding or undefined bits)
9835          and do not have user-defined equality.  */
9836       return
9837         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9838         && memcmp (value_contents (arg1), value_contents (arg2),
9839                    TYPE_LENGTH (value_type (arg1))) == 0;
9840     }
9841   return value_equal (arg1, arg2);
9842 }
9843
9844 /* Total number of component associations in the aggregate starting at
9845    index PC in EXP.  Assumes that index PC is the start of an
9846    OP_AGGREGATE.  */
9847
9848 static int
9849 num_component_specs (struct expression *exp, int pc)
9850 {
9851   int n, m, i;
9852
9853   m = exp->elts[pc + 1].longconst;
9854   pc += 3;
9855   n = 0;
9856   for (i = 0; i < m; i += 1)
9857     {
9858       switch (exp->elts[pc].opcode) 
9859         {
9860         default:
9861           n += 1;
9862           break;
9863         case OP_CHOICES:
9864           n += exp->elts[pc + 1].longconst;
9865           break;
9866         }
9867       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9868     }
9869   return n;
9870 }
9871
9872 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9873    component of LHS (a simple array or a record), updating *POS past
9874    the expression, assuming that LHS is contained in CONTAINER.  Does
9875    not modify the inferior's memory, nor does it modify LHS (unless
9876    LHS == CONTAINER).  */
9877
9878 static void
9879 assign_component (struct value *container, struct value *lhs, LONGEST index,
9880                   struct expression *exp, int *pos)
9881 {
9882   struct value *mark = value_mark ();
9883   struct value *elt;
9884
9885   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9886     {
9887       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9888       struct value *index_val = value_from_longest (index_type, index);
9889
9890       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9891     }
9892   else
9893     {
9894       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9895       elt = ada_to_fixed_value (elt);
9896     }
9897
9898   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9899     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9900   else
9901     value_assign_to_component (container, elt, 
9902                                ada_evaluate_subexp (NULL, exp, pos, 
9903                                                     EVAL_NORMAL));
9904
9905   value_free_to_mark (mark);
9906 }
9907
9908 /* Assuming that LHS represents an lvalue having a record or array
9909    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9910    of that aggregate's value to LHS, advancing *POS past the
9911    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9912    lvalue containing LHS (possibly LHS itself).  Does not modify
9913    the inferior's memory, nor does it modify the contents of 
9914    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9915
9916 static struct value *
9917 assign_aggregate (struct value *container, 
9918                   struct value *lhs, struct expression *exp, 
9919                   int *pos, enum noside noside)
9920 {
9921   struct type *lhs_type;
9922   int n = exp->elts[*pos+1].longconst;
9923   LONGEST low_index, high_index;
9924   int num_specs;
9925   LONGEST *indices;
9926   int max_indices, num_indices;
9927   int i;
9928
9929   *pos += 3;
9930   if (noside != EVAL_NORMAL)
9931     {
9932       for (i = 0; i < n; i += 1)
9933         ada_evaluate_subexp (NULL, exp, pos, noside);
9934       return container;
9935     }
9936
9937   container = ada_coerce_ref (container);
9938   if (ada_is_direct_array_type (value_type (container)))
9939     container = ada_coerce_to_simple_array (container);
9940   lhs = ada_coerce_ref (lhs);
9941   if (!deprecated_value_modifiable (lhs))
9942     error (_("Left operand of assignment is not a modifiable lvalue."));
9943
9944   lhs_type = value_type (lhs);
9945   if (ada_is_direct_array_type (lhs_type))
9946     {
9947       lhs = ada_coerce_to_simple_array (lhs);
9948       lhs_type = value_type (lhs);
9949       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9950       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9951     }
9952   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9953     {
9954       low_index = 0;
9955       high_index = num_visible_fields (lhs_type) - 1;
9956     }
9957   else
9958     error (_("Left-hand side must be array or record."));
9959
9960   num_specs = num_component_specs (exp, *pos - 3);
9961   max_indices = 4 * num_specs + 4;
9962   indices = XALLOCAVEC (LONGEST, max_indices);
9963   indices[0] = indices[1] = low_index - 1;
9964   indices[2] = indices[3] = high_index + 1;
9965   num_indices = 4;
9966
9967   for (i = 0; i < n; i += 1)
9968     {
9969       switch (exp->elts[*pos].opcode)
9970         {
9971           case OP_CHOICES:
9972             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9973                                            &num_indices, max_indices,
9974                                            low_index, high_index);
9975             break;
9976           case OP_POSITIONAL:
9977             aggregate_assign_positional (container, lhs, exp, pos, indices,
9978                                          &num_indices, max_indices,
9979                                          low_index, high_index);
9980             break;
9981           case OP_OTHERS:
9982             if (i != n-1)
9983               error (_("Misplaced 'others' clause"));
9984             aggregate_assign_others (container, lhs, exp, pos, indices, 
9985                                      num_indices, low_index, high_index);
9986             break;
9987           default:
9988             error (_("Internal error: bad aggregate clause"));
9989         }
9990     }
9991
9992   return container;
9993 }
9994               
9995 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9996    construct at *POS, updating *POS past the construct, given that
9997    the positions are relative to lower bound LOW, where HIGH is the 
9998    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9999    updating *NUM_INDICES as needed.  CONTAINER is as for
10000    assign_aggregate.  */
10001 static void
10002 aggregate_assign_positional (struct value *container,
10003                              struct value *lhs, struct expression *exp,
10004                              int *pos, LONGEST *indices, int *num_indices,
10005                              int max_indices, LONGEST low, LONGEST high) 
10006 {
10007   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
10008   
10009   if (ind - 1 == high)
10010     warning (_("Extra components in aggregate ignored."));
10011   if (ind <= high)
10012     {
10013       add_component_interval (ind, ind, indices, num_indices, max_indices);
10014       *pos += 3;
10015       assign_component (container, lhs, ind, exp, pos);
10016     }
10017   else
10018     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10019 }
10020
10021 /* Assign into the components of LHS indexed by the OP_CHOICES
10022    construct at *POS, updating *POS past the construct, given that
10023    the allowable indices are LOW..HIGH.  Record the indices assigned
10024    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
10025    needed.  CONTAINER is as for assign_aggregate.  */
10026 static void
10027 aggregate_assign_from_choices (struct value *container,
10028                                struct value *lhs, struct expression *exp,
10029                                int *pos, LONGEST *indices, int *num_indices,
10030                                int max_indices, LONGEST low, LONGEST high) 
10031 {
10032   int j;
10033   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
10034   int choice_pos, expr_pc;
10035   int is_array = ada_is_direct_array_type (value_type (lhs));
10036
10037   choice_pos = *pos += 3;
10038
10039   for (j = 0; j < n_choices; j += 1)
10040     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10041   expr_pc = *pos;
10042   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10043   
10044   for (j = 0; j < n_choices; j += 1)
10045     {
10046       LONGEST lower, upper;
10047       enum exp_opcode op = exp->elts[choice_pos].opcode;
10048
10049       if (op == OP_DISCRETE_RANGE)
10050         {
10051           choice_pos += 1;
10052           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
10053                                                       EVAL_NORMAL));
10054           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
10055                                                       EVAL_NORMAL));
10056         }
10057       else if (is_array)
10058         {
10059           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
10060                                                       EVAL_NORMAL));
10061           upper = lower;
10062         }
10063       else
10064         {
10065           int ind;
10066           const char *name;
10067
10068           switch (op)
10069             {
10070             case OP_NAME:
10071               name = &exp->elts[choice_pos + 2].string;
10072               break;
10073             case OP_VAR_VALUE:
10074               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
10075               break;
10076             default:
10077               error (_("Invalid record component association."));
10078             }
10079           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
10080           ind = 0;
10081           if (! find_struct_field (name, value_type (lhs), 0, 
10082                                    NULL, NULL, NULL, NULL, &ind))
10083             error (_("Unknown component name: %s."), name);
10084           lower = upper = ind;
10085         }
10086
10087       if (lower <= upper && (lower < low || upper > high))
10088         error (_("Index in component association out of bounds."));
10089
10090       add_component_interval (lower, upper, indices, num_indices,
10091                               max_indices);
10092       while (lower <= upper)
10093         {
10094           int pos1;
10095
10096           pos1 = expr_pc;
10097           assign_component (container, lhs, lower, exp, &pos1);
10098           lower += 1;
10099         }
10100     }
10101 }
10102
10103 /* Assign the value of the expression in the OP_OTHERS construct in
10104    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
10105    have not been previously assigned.  The index intervals already assigned
10106    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
10107    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
10108 static void
10109 aggregate_assign_others (struct value *container,
10110                          struct value *lhs, struct expression *exp,
10111                          int *pos, LONGEST *indices, int num_indices,
10112                          LONGEST low, LONGEST high) 
10113 {
10114   int i;
10115   int expr_pc = *pos + 1;
10116   
10117   for (i = 0; i < num_indices - 2; i += 2)
10118     {
10119       LONGEST ind;
10120
10121       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
10122         {
10123           int localpos;
10124
10125           localpos = expr_pc;
10126           assign_component (container, lhs, ind, exp, &localpos);
10127         }
10128     }
10129   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10130 }
10131
10132 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
10133    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
10134    modifying *SIZE as needed.  It is an error if *SIZE exceeds
10135    MAX_SIZE.  The resulting intervals do not overlap.  */
10136 static void
10137 add_component_interval (LONGEST low, LONGEST high, 
10138                         LONGEST* indices, int *size, int max_size)
10139 {
10140   int i, j;
10141
10142   for (i = 0; i < *size; i += 2) {
10143     if (high >= indices[i] && low <= indices[i + 1])
10144       {
10145         int kh;
10146
10147         for (kh = i + 2; kh < *size; kh += 2)
10148           if (high < indices[kh])
10149             break;
10150         if (low < indices[i])
10151           indices[i] = low;
10152         indices[i + 1] = indices[kh - 1];
10153         if (high > indices[i + 1])
10154           indices[i + 1] = high;
10155         memcpy (indices + i + 2, indices + kh, *size - kh);
10156         *size -= kh - i - 2;
10157         return;
10158       }
10159     else if (high < indices[i])
10160       break;
10161   }
10162         
10163   if (*size == max_size)
10164     error (_("Internal error: miscounted aggregate components."));
10165   *size += 2;
10166   for (j = *size-1; j >= i+2; j -= 1)
10167     indices[j] = indices[j - 2];
10168   indices[i] = low;
10169   indices[i + 1] = high;
10170 }
10171
10172 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
10173    is different.  */
10174
10175 static struct value *
10176 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
10177 {
10178   if (type == ada_check_typedef (value_type (arg2)))
10179     return arg2;
10180
10181   if (ada_is_fixed_point_type (type))
10182     return (cast_to_fixed (type, arg2));
10183
10184   if (ada_is_fixed_point_type (value_type (arg2)))
10185     return cast_from_fixed (type, arg2);
10186
10187   return value_cast (type, arg2);
10188 }
10189
10190 /*  Evaluating Ada expressions, and printing their result.
10191     ------------------------------------------------------
10192
10193     1. Introduction:
10194     ----------------
10195
10196     We usually evaluate an Ada expression in order to print its value.
10197     We also evaluate an expression in order to print its type, which
10198     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
10199     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
10200     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
10201     the evaluation compared to the EVAL_NORMAL, but is otherwise very
10202     similar.
10203
10204     Evaluating expressions is a little more complicated for Ada entities
10205     than it is for entities in languages such as C.  The main reason for
10206     this is that Ada provides types whose definition might be dynamic.
10207     One example of such types is variant records.  Or another example
10208     would be an array whose bounds can only be known at run time.
10209
10210     The following description is a general guide as to what should be
10211     done (and what should NOT be done) in order to evaluate an expression
10212     involving such types, and when.  This does not cover how the semantic
10213     information is encoded by GNAT as this is covered separatly.  For the
10214     document used as the reference for the GNAT encoding, see exp_dbug.ads
10215     in the GNAT sources.
10216
10217     Ideally, we should embed each part of this description next to its
10218     associated code.  Unfortunately, the amount of code is so vast right
10219     now that it's hard to see whether the code handling a particular
10220     situation might be duplicated or not.  One day, when the code is
10221     cleaned up, this guide might become redundant with the comments
10222     inserted in the code, and we might want to remove it.
10223
10224     2. ``Fixing'' an Entity, the Simple Case:
10225     -----------------------------------------
10226
10227     When evaluating Ada expressions, the tricky issue is that they may
10228     reference entities whose type contents and size are not statically
10229     known.  Consider for instance a variant record:
10230
10231        type Rec (Empty : Boolean := True) is record
10232           case Empty is
10233              when True => null;
10234              when False => Value : Integer;
10235           end case;
10236        end record;
10237        Yes : Rec := (Empty => False, Value => 1);
10238        No  : Rec := (empty => True);
10239
10240     The size and contents of that record depends on the value of the
10241     descriminant (Rec.Empty).  At this point, neither the debugging
10242     information nor the associated type structure in GDB are able to
10243     express such dynamic types.  So what the debugger does is to create
10244     "fixed" versions of the type that applies to the specific object.
10245     We also informally refer to this opperation as "fixing" an object,
10246     which means creating its associated fixed type.
10247
10248     Example: when printing the value of variable "Yes" above, its fixed
10249     type would look like this:
10250
10251        type Rec is record
10252           Empty : Boolean;
10253           Value : Integer;
10254        end record;
10255
10256     On the other hand, if we printed the value of "No", its fixed type
10257     would become:
10258
10259        type Rec is record
10260           Empty : Boolean;
10261        end record;
10262
10263     Things become a little more complicated when trying to fix an entity
10264     with a dynamic type that directly contains another dynamic type,
10265     such as an array of variant records, for instance.  There are
10266     two possible cases: Arrays, and records.
10267
10268     3. ``Fixing'' Arrays:
10269     ---------------------
10270
10271     The type structure in GDB describes an array in terms of its bounds,
10272     and the type of its elements.  By design, all elements in the array
10273     have the same type and we cannot represent an array of variant elements
10274     using the current type structure in GDB.  When fixing an array,
10275     we cannot fix the array element, as we would potentially need one
10276     fixed type per element of the array.  As a result, the best we can do
10277     when fixing an array is to produce an array whose bounds and size
10278     are correct (allowing us to read it from memory), but without having
10279     touched its element type.  Fixing each element will be done later,
10280     when (if) necessary.
10281
10282     Arrays are a little simpler to handle than records, because the same
10283     amount of memory is allocated for each element of the array, even if
10284     the amount of space actually used by each element differs from element
10285     to element.  Consider for instance the following array of type Rec:
10286
10287        type Rec_Array is array (1 .. 2) of Rec;
10288
10289     The actual amount of memory occupied by each element might be different
10290     from element to element, depending on the value of their discriminant.
10291     But the amount of space reserved for each element in the array remains
10292     fixed regardless.  So we simply need to compute that size using
10293     the debugging information available, from which we can then determine
10294     the array size (we multiply the number of elements of the array by
10295     the size of each element).
10296
10297     The simplest case is when we have an array of a constrained element
10298     type. For instance, consider the following type declarations:
10299
10300         type Bounded_String (Max_Size : Integer) is
10301            Length : Integer;
10302            Buffer : String (1 .. Max_Size);
10303         end record;
10304         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
10305
10306     In this case, the compiler describes the array as an array of
10307     variable-size elements (identified by its XVS suffix) for which
10308     the size can be read in the parallel XVZ variable.
10309
10310     In the case of an array of an unconstrained element type, the compiler
10311     wraps the array element inside a private PAD type.  This type should not
10312     be shown to the user, and must be "unwrap"'ed before printing.  Note
10313     that we also use the adjective "aligner" in our code to designate
10314     these wrapper types.
10315
10316     In some cases, the size allocated for each element is statically
10317     known.  In that case, the PAD type already has the correct size,
10318     and the array element should remain unfixed.
10319
10320     But there are cases when this size is not statically known.
10321     For instance, assuming that "Five" is an integer variable:
10322
10323         type Dynamic is array (1 .. Five) of Integer;
10324         type Wrapper (Has_Length : Boolean := False) is record
10325            Data : Dynamic;
10326            case Has_Length is
10327               when True => Length : Integer;
10328               when False => null;
10329            end case;
10330         end record;
10331         type Wrapper_Array is array (1 .. 2) of Wrapper;
10332
10333         Hello : Wrapper_Array := (others => (Has_Length => True,
10334                                              Data => (others => 17),
10335                                              Length => 1));
10336
10337
10338     The debugging info would describe variable Hello as being an
10339     array of a PAD type.  The size of that PAD type is not statically
10340     known, but can be determined using a parallel XVZ variable.
10341     In that case, a copy of the PAD type with the correct size should
10342     be used for the fixed array.
10343
10344     3. ``Fixing'' record type objects:
10345     ----------------------------------
10346
10347     Things are slightly different from arrays in the case of dynamic
10348     record types.  In this case, in order to compute the associated
10349     fixed type, we need to determine the size and offset of each of
10350     its components.  This, in turn, requires us to compute the fixed
10351     type of each of these components.
10352
10353     Consider for instance the example:
10354
10355         type Bounded_String (Max_Size : Natural) is record
10356            Str : String (1 .. Max_Size);
10357            Length : Natural;
10358         end record;
10359         My_String : Bounded_String (Max_Size => 10);
10360
10361     In that case, the position of field "Length" depends on the size
10362     of field Str, which itself depends on the value of the Max_Size
10363     discriminant.  In order to fix the type of variable My_String,
10364     we need to fix the type of field Str.  Therefore, fixing a variant
10365     record requires us to fix each of its components.
10366
10367     However, if a component does not have a dynamic size, the component
10368     should not be fixed.  In particular, fields that use a PAD type
10369     should not fixed.  Here is an example where this might happen
10370     (assuming type Rec above):
10371
10372        type Container (Big : Boolean) is record
10373           First : Rec;
10374           After : Integer;
10375           case Big is
10376              when True => Another : Integer;
10377              when False => null;
10378           end case;
10379        end record;
10380        My_Container : Container := (Big => False,
10381                                     First => (Empty => True),
10382                                     After => 42);
10383
10384     In that example, the compiler creates a PAD type for component First,
10385     whose size is constant, and then positions the component After just
10386     right after it.  The offset of component After is therefore constant
10387     in this case.
10388
10389     The debugger computes the position of each field based on an algorithm
10390     that uses, among other things, the actual position and size of the field
10391     preceding it.  Let's now imagine that the user is trying to print
10392     the value of My_Container.  If the type fixing was recursive, we would
10393     end up computing the offset of field After based on the size of the
10394     fixed version of field First.  And since in our example First has
10395     only one actual field, the size of the fixed type is actually smaller
10396     than the amount of space allocated to that field, and thus we would
10397     compute the wrong offset of field After.
10398
10399     To make things more complicated, we need to watch out for dynamic
10400     components of variant records (identified by the ___XVL suffix in
10401     the component name).  Even if the target type is a PAD type, the size
10402     of that type might not be statically known.  So the PAD type needs
10403     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
10404     we might end up with the wrong size for our component.  This can be
10405     observed with the following type declarations:
10406
10407         type Octal is new Integer range 0 .. 7;
10408         type Octal_Array is array (Positive range <>) of Octal;
10409         pragma Pack (Octal_Array);
10410
10411         type Octal_Buffer (Size : Positive) is record
10412            Buffer : Octal_Array (1 .. Size);
10413            Length : Integer;
10414         end record;
10415
10416     In that case, Buffer is a PAD type whose size is unset and needs
10417     to be computed by fixing the unwrapped type.
10418
10419     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10420     ----------------------------------------------------------
10421
10422     Lastly, when should the sub-elements of an entity that remained unfixed
10423     thus far, be actually fixed?
10424
10425     The answer is: Only when referencing that element.  For instance
10426     when selecting one component of a record, this specific component
10427     should be fixed at that point in time.  Or when printing the value
10428     of a record, each component should be fixed before its value gets
10429     printed.  Similarly for arrays, the element of the array should be
10430     fixed when printing each element of the array, or when extracting
10431     one element out of that array.  On the other hand, fixing should
10432     not be performed on the elements when taking a slice of an array!
10433
10434     Note that one of the side-effects of miscomputing the offset and
10435     size of each field is that we end up also miscomputing the size
10436     of the containing type.  This can have adverse results when computing
10437     the value of an entity.  GDB fetches the value of an entity based
10438     on the size of its type, and thus a wrong size causes GDB to fetch
10439     the wrong amount of memory.  In the case where the computed size is
10440     too small, GDB fetches too little data to print the value of our
10441     entiry.  Results in this case as unpredicatble, as we usually read
10442     past the buffer containing the data =:-o.  */
10443
10444 /* Implement the evaluate_exp routine in the exp_descriptor structure
10445    for the Ada language.  */
10446
10447 static struct value *
10448 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
10449                      int *pos, enum noside noside)
10450 {
10451   enum exp_opcode op;
10452   int tem;
10453   int pc;
10454   int preeval_pos;
10455   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10456   struct type *type;
10457   int nargs, oplen;
10458   struct value **argvec;
10459
10460   pc = *pos;
10461   *pos += 1;
10462   op = exp->elts[pc].opcode;
10463
10464   switch (op)
10465     {
10466     default:
10467       *pos -= 1;
10468       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10469
10470       if (noside == EVAL_NORMAL)
10471         arg1 = unwrap_value (arg1);
10472
10473       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10474          then we need to perform the conversion manually, because
10475          evaluate_subexp_standard doesn't do it.  This conversion is
10476          necessary in Ada because the different kinds of float/fixed
10477          types in Ada have different representations.
10478
10479          Similarly, we need to perform the conversion from OP_LONG
10480          ourselves.  */
10481       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10482         arg1 = ada_value_cast (expect_type, arg1, noside);
10483
10484       return arg1;
10485
10486     case OP_STRING:
10487       {
10488         struct value *result;
10489
10490         *pos -= 1;
10491         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10492         /* The result type will have code OP_STRING, bashed there from 
10493            OP_ARRAY.  Bash it back.  */
10494         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10495           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
10496         return result;
10497       }
10498
10499     case UNOP_CAST:
10500       (*pos) += 2;
10501       type = exp->elts[pc + 1].type;
10502       arg1 = evaluate_subexp (type, exp, pos, noside);
10503       if (noside == EVAL_SKIP)
10504         goto nosideret;
10505       arg1 = ada_value_cast (type, arg1, noside);
10506       return arg1;
10507
10508     case UNOP_QUAL:
10509       (*pos) += 2;
10510       type = exp->elts[pc + 1].type;
10511       return ada_evaluate_subexp (type, exp, pos, noside);
10512
10513     case BINOP_ASSIGN:
10514       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10515       if (exp->elts[*pos].opcode == OP_AGGREGATE)
10516         {
10517           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10518           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10519             return arg1;
10520           return ada_value_assign (arg1, arg1);
10521         }
10522       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10523          except if the lhs of our assignment is a convenience variable.
10524          In the case of assigning to a convenience variable, the lhs
10525          should be exactly the result of the evaluation of the rhs.  */
10526       type = value_type (arg1);
10527       if (VALUE_LVAL (arg1) == lval_internalvar)
10528          type = NULL;
10529       arg2 = evaluate_subexp (type, exp, pos, noside);
10530       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10531         return arg1;
10532       if (ada_is_fixed_point_type (value_type (arg1)))
10533         arg2 = cast_to_fixed (value_type (arg1), arg2);
10534       else if (ada_is_fixed_point_type (value_type (arg2)))
10535         error
10536           (_("Fixed-point values must be assigned to fixed-point variables"));
10537       else
10538         arg2 = coerce_for_assign (value_type (arg1), arg2);
10539       return ada_value_assign (arg1, arg2);
10540
10541     case BINOP_ADD:
10542       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10543       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10544       if (noside == EVAL_SKIP)
10545         goto nosideret;
10546       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10547         return (value_from_longest
10548                  (value_type (arg1),
10549                   value_as_long (arg1) + value_as_long (arg2)));
10550       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10551         return (value_from_longest
10552                  (value_type (arg2),
10553                   value_as_long (arg1) + value_as_long (arg2)));
10554       if ((ada_is_fixed_point_type (value_type (arg1))
10555            || ada_is_fixed_point_type (value_type (arg2)))
10556           && value_type (arg1) != value_type (arg2))
10557         error (_("Operands of fixed-point addition must have the same type"));
10558       /* Do the addition, and cast the result to the type of the first
10559          argument.  We cannot cast the result to a reference type, so if
10560          ARG1 is a reference type, find its underlying type.  */
10561       type = value_type (arg1);
10562       while (TYPE_CODE (type) == TYPE_CODE_REF)
10563         type = TYPE_TARGET_TYPE (type);
10564       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10565       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10566
10567     case BINOP_SUB:
10568       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10569       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10570       if (noside == EVAL_SKIP)
10571         goto nosideret;
10572       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10573         return (value_from_longest
10574                  (value_type (arg1),
10575                   value_as_long (arg1) - value_as_long (arg2)));
10576       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10577         return (value_from_longest
10578                  (value_type (arg2),
10579                   value_as_long (arg1) - value_as_long (arg2)));
10580       if ((ada_is_fixed_point_type (value_type (arg1))
10581            || ada_is_fixed_point_type (value_type (arg2)))
10582           && value_type (arg1) != value_type (arg2))
10583         error (_("Operands of fixed-point subtraction "
10584                  "must have the same type"));
10585       /* Do the substraction, and cast the result to the type of the first
10586          argument.  We cannot cast the result to a reference type, so if
10587          ARG1 is a reference type, find its underlying type.  */
10588       type = value_type (arg1);
10589       while (TYPE_CODE (type) == TYPE_CODE_REF)
10590         type = TYPE_TARGET_TYPE (type);
10591       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10592       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10593
10594     case BINOP_MUL:
10595     case BINOP_DIV:
10596     case BINOP_REM:
10597     case BINOP_MOD:
10598       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10599       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10600       if (noside == EVAL_SKIP)
10601         goto nosideret;
10602       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10603         {
10604           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10605           return value_zero (value_type (arg1), not_lval);
10606         }
10607       else
10608         {
10609           type = builtin_type (exp->gdbarch)->builtin_double;
10610           if (ada_is_fixed_point_type (value_type (arg1)))
10611             arg1 = cast_from_fixed (type, arg1);
10612           if (ada_is_fixed_point_type (value_type (arg2)))
10613             arg2 = cast_from_fixed (type, arg2);
10614           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10615           return ada_value_binop (arg1, arg2, op);
10616         }
10617
10618     case BINOP_EQUAL:
10619     case BINOP_NOTEQUAL:
10620       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10621       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10622       if (noside == EVAL_SKIP)
10623         goto nosideret;
10624       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10625         tem = 0;
10626       else
10627         {
10628           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10629           tem = ada_value_equal (arg1, arg2);
10630         }
10631       if (op == BINOP_NOTEQUAL)
10632         tem = !tem;
10633       type = language_bool_type (exp->language_defn, exp->gdbarch);
10634       return value_from_longest (type, (LONGEST) tem);
10635
10636     case UNOP_NEG:
10637       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10638       if (noside == EVAL_SKIP)
10639         goto nosideret;
10640       else if (ada_is_fixed_point_type (value_type (arg1)))
10641         return value_cast (value_type (arg1), value_neg (arg1));
10642       else
10643         {
10644           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10645           return value_neg (arg1);
10646         }
10647
10648     case BINOP_LOGICAL_AND:
10649     case BINOP_LOGICAL_OR:
10650     case UNOP_LOGICAL_NOT:
10651       {
10652         struct value *val;
10653
10654         *pos -= 1;
10655         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10656         type = language_bool_type (exp->language_defn, exp->gdbarch);
10657         return value_cast (type, val);
10658       }
10659
10660     case BINOP_BITWISE_AND:
10661     case BINOP_BITWISE_IOR:
10662     case BINOP_BITWISE_XOR:
10663       {
10664         struct value *val;
10665
10666         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10667         *pos = pc;
10668         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10669
10670         return value_cast (value_type (arg1), val);
10671       }
10672
10673     case OP_VAR_VALUE:
10674       *pos -= 1;
10675
10676       if (noside == EVAL_SKIP)
10677         {
10678           *pos += 4;
10679           goto nosideret;
10680         }
10681
10682       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10683         /* Only encountered when an unresolved symbol occurs in a
10684            context other than a function call, in which case, it is
10685            invalid.  */
10686         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10687                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10688
10689       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10690         {
10691           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10692           /* Check to see if this is a tagged type.  We also need to handle
10693              the case where the type is a reference to a tagged type, but
10694              we have to be careful to exclude pointers to tagged types.
10695              The latter should be shown as usual (as a pointer), whereas
10696              a reference should mostly be transparent to the user.  */
10697           if (ada_is_tagged_type (type, 0)
10698               || (TYPE_CODE (type) == TYPE_CODE_REF
10699                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10700             {
10701               /* Tagged types are a little special in the fact that the real
10702                  type is dynamic and can only be determined by inspecting the
10703                  object's tag.  This means that we need to get the object's
10704                  value first (EVAL_NORMAL) and then extract the actual object
10705                  type from its tag.
10706
10707                  Note that we cannot skip the final step where we extract
10708                  the object type from its tag, because the EVAL_NORMAL phase
10709                  results in dynamic components being resolved into fixed ones.
10710                  This can cause problems when trying to print the type
10711                  description of tagged types whose parent has a dynamic size:
10712                  We use the type name of the "_parent" component in order
10713                  to print the name of the ancestor type in the type description.
10714                  If that component had a dynamic size, the resolution into
10715                  a fixed type would result in the loss of that type name,
10716                  thus preventing us from printing the name of the ancestor
10717                  type in the type description.  */
10718               arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10719
10720               if (TYPE_CODE (type) != TYPE_CODE_REF)
10721                 {
10722                   struct type *actual_type;
10723
10724                   actual_type = type_from_tag (ada_value_tag (arg1));
10725                   if (actual_type == NULL)
10726                     /* If, for some reason, we were unable to determine
10727                        the actual type from the tag, then use the static
10728                        approximation that we just computed as a fallback.
10729                        This can happen if the debugging information is
10730                        incomplete, for instance.  */
10731                     actual_type = type;
10732                   return value_zero (actual_type, not_lval);
10733                 }
10734               else
10735                 {
10736                   /* In the case of a ref, ada_coerce_ref takes care
10737                      of determining the actual type.  But the evaluation
10738                      should return a ref as it should be valid to ask
10739                      for its address; so rebuild a ref after coerce.  */
10740                   arg1 = ada_coerce_ref (arg1);
10741                   return value_ref (arg1);
10742                 }
10743             }
10744
10745           /* Records and unions for which GNAT encodings have been
10746              generated need to be statically fixed as well.
10747              Otherwise, non-static fixing produces a type where
10748              all dynamic properties are removed, which prevents "ptype"
10749              from being able to completely describe the type.
10750              For instance, a case statement in a variant record would be
10751              replaced by the relevant components based on the actual
10752              value of the discriminants.  */
10753           if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10754                && dynamic_template_type (type) != NULL)
10755               || (TYPE_CODE (type) == TYPE_CODE_UNION
10756                   && ada_find_parallel_type (type, "___XVU") != NULL))
10757             {
10758               *pos += 4;
10759               return value_zero (to_static_fixed_type (type), not_lval);
10760             }
10761         }
10762
10763       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10764       return ada_to_fixed_value (arg1);
10765
10766     case OP_FUNCALL:
10767       (*pos) += 2;
10768
10769       /* Allocate arg vector, including space for the function to be
10770          called in argvec[0] and a terminating NULL.  */
10771       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10772       argvec = XALLOCAVEC (struct value *, nargs + 2);
10773
10774       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10775           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10776         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10777                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10778       else
10779         {
10780           for (tem = 0; tem <= nargs; tem += 1)
10781             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10782           argvec[tem] = 0;
10783
10784           if (noside == EVAL_SKIP)
10785             goto nosideret;
10786         }
10787
10788       if (ada_is_constrained_packed_array_type
10789           (desc_base_type (value_type (argvec[0]))))
10790         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10791       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10792                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10793         /* This is a packed array that has already been fixed, and
10794            therefore already coerced to a simple array.  Nothing further
10795            to do.  */
10796         ;
10797       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF)
10798         {
10799           /* Make sure we dereference references so that all the code below
10800              feels like it's really handling the referenced value.  Wrapping
10801              types (for alignment) may be there, so make sure we strip them as
10802              well.  */
10803           argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10804         }
10805       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10806                && VALUE_LVAL (argvec[0]) == lval_memory)
10807         argvec[0] = value_addr (argvec[0]);
10808
10809       type = ada_check_typedef (value_type (argvec[0]));
10810
10811       /* Ada allows us to implicitly dereference arrays when subscripting
10812          them.  So, if this is an array typedef (encoding use for array
10813          access types encoded as fat pointers), strip it now.  */
10814       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10815         type = ada_typedef_target_type (type);
10816
10817       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10818         {
10819           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10820             {
10821             case TYPE_CODE_FUNC:
10822               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10823               break;
10824             case TYPE_CODE_ARRAY:
10825               break;
10826             case TYPE_CODE_STRUCT:
10827               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10828                 argvec[0] = ada_value_ind (argvec[0]);
10829               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10830               break;
10831             default:
10832               error (_("cannot subscript or call something of type `%s'"),
10833                      ada_type_name (value_type (argvec[0])));
10834               break;
10835             }
10836         }
10837
10838       switch (TYPE_CODE (type))
10839         {
10840         case TYPE_CODE_FUNC:
10841           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10842             {
10843               struct type *rtype = TYPE_TARGET_TYPE (type);
10844
10845               if (TYPE_GNU_IFUNC (type))
10846                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10847               return allocate_value (rtype);
10848             }
10849           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10850         case TYPE_CODE_INTERNAL_FUNCTION:
10851           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10852             /* We don't know anything about what the internal
10853                function might return, but we have to return
10854                something.  */
10855             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10856                                not_lval);
10857           else
10858             return call_internal_function (exp->gdbarch, exp->language_defn,
10859                                            argvec[0], nargs, argvec + 1);
10860
10861         case TYPE_CODE_STRUCT:
10862           {
10863             int arity;
10864
10865             arity = ada_array_arity (type);
10866             type = ada_array_element_type (type, nargs);
10867             if (type == NULL)
10868               error (_("cannot subscript or call a record"));
10869             if (arity != nargs)
10870               error (_("wrong number of subscripts; expecting %d"), arity);
10871             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10872               return value_zero (ada_aligned_type (type), lval_memory);
10873             return
10874               unwrap_value (ada_value_subscript
10875                             (argvec[0], nargs, argvec + 1));
10876           }
10877         case TYPE_CODE_ARRAY:
10878           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10879             {
10880               type = ada_array_element_type (type, nargs);
10881               if (type == NULL)
10882                 error (_("element type of array unknown"));
10883               else
10884                 return value_zero (ada_aligned_type (type), lval_memory);
10885             }
10886           return
10887             unwrap_value (ada_value_subscript
10888                           (ada_coerce_to_simple_array (argvec[0]),
10889                            nargs, argvec + 1));
10890         case TYPE_CODE_PTR:     /* Pointer to array */
10891           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10892             {
10893               type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10894               type = ada_array_element_type (type, nargs);
10895               if (type == NULL)
10896                 error (_("element type of array unknown"));
10897               else
10898                 return value_zero (ada_aligned_type (type), lval_memory);
10899             }
10900           return
10901             unwrap_value (ada_value_ptr_subscript (argvec[0],
10902                                                    nargs, argvec + 1));
10903
10904         default:
10905           error (_("Attempt to index or call something other than an "
10906                    "array or function"));
10907         }
10908
10909     case TERNOP_SLICE:
10910       {
10911         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10912         struct value *low_bound_val =
10913           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10914         struct value *high_bound_val =
10915           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10916         LONGEST low_bound;
10917         LONGEST high_bound;
10918
10919         low_bound_val = coerce_ref (low_bound_val);
10920         high_bound_val = coerce_ref (high_bound_val);
10921         low_bound = value_as_long (low_bound_val);
10922         high_bound = value_as_long (high_bound_val);
10923
10924         if (noside == EVAL_SKIP)
10925           goto nosideret;
10926
10927         /* If this is a reference to an aligner type, then remove all
10928            the aligners.  */
10929         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10930             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10931           TYPE_TARGET_TYPE (value_type (array)) =
10932             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10933
10934         if (ada_is_constrained_packed_array_type (value_type (array)))
10935           error (_("cannot slice a packed array"));
10936
10937         /* If this is a reference to an array or an array lvalue,
10938            convert to a pointer.  */
10939         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10940             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10941                 && VALUE_LVAL (array) == lval_memory))
10942           array = value_addr (array);
10943
10944         if (noside == EVAL_AVOID_SIDE_EFFECTS
10945             && ada_is_array_descriptor_type (ada_check_typedef
10946                                              (value_type (array))))
10947           return empty_array (ada_type_of_array (array, 0), low_bound);
10948
10949         array = ada_coerce_to_simple_array_ptr (array);
10950
10951         /* If we have more than one level of pointer indirection,
10952            dereference the value until we get only one level.  */
10953         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10954                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10955                      == TYPE_CODE_PTR))
10956           array = value_ind (array);
10957
10958         /* Make sure we really do have an array type before going further,
10959            to avoid a SEGV when trying to get the index type or the target
10960            type later down the road if the debug info generated by
10961            the compiler is incorrect or incomplete.  */
10962         if (!ada_is_simple_array_type (value_type (array)))
10963           error (_("cannot take slice of non-array"));
10964
10965         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10966             == TYPE_CODE_PTR)
10967           {
10968             struct type *type0 = ada_check_typedef (value_type (array));
10969
10970             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10971               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10972             else
10973               {
10974                 struct type *arr_type0 =
10975                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10976
10977                 return ada_value_slice_from_ptr (array, arr_type0,
10978                                                  longest_to_int (low_bound),
10979                                                  longest_to_int (high_bound));
10980               }
10981           }
10982         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10983           return array;
10984         else if (high_bound < low_bound)
10985           return empty_array (value_type (array), low_bound);
10986         else
10987           return ada_value_slice (array, longest_to_int (low_bound),
10988                                   longest_to_int (high_bound));
10989       }
10990
10991     case UNOP_IN_RANGE:
10992       (*pos) += 2;
10993       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10994       type = check_typedef (exp->elts[pc + 1].type);
10995
10996       if (noside == EVAL_SKIP)
10997         goto nosideret;
10998
10999       switch (TYPE_CODE (type))
11000         {
11001         default:
11002           lim_warning (_("Membership test incompletely implemented; "
11003                          "always returns true"));
11004           type = language_bool_type (exp->language_defn, exp->gdbarch);
11005           return value_from_longest (type, (LONGEST) 1);
11006
11007         case TYPE_CODE_RANGE:
11008           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
11009           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
11010           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11011           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
11012           type = language_bool_type (exp->language_defn, exp->gdbarch);
11013           return
11014             value_from_longest (type,
11015                                 (value_less (arg1, arg3)
11016                                  || value_equal (arg1, arg3))
11017                                 && (value_less (arg2, arg1)
11018                                     || value_equal (arg2, arg1)));
11019         }
11020
11021     case BINOP_IN_BOUNDS:
11022       (*pos) += 2;
11023       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11024       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11025
11026       if (noside == EVAL_SKIP)
11027         goto nosideret;
11028
11029       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11030         {
11031           type = language_bool_type (exp->language_defn, exp->gdbarch);
11032           return value_zero (type, not_lval);
11033         }
11034
11035       tem = longest_to_int (exp->elts[pc + 1].longconst);
11036
11037       type = ada_index_type (value_type (arg2), tem, "range");
11038       if (!type)
11039         type = value_type (arg1);
11040
11041       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
11042       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
11043
11044       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11045       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
11046       type = language_bool_type (exp->language_defn, exp->gdbarch);
11047       return
11048         value_from_longest (type,
11049                             (value_less (arg1, arg3)
11050                              || value_equal (arg1, arg3))
11051                             && (value_less (arg2, arg1)
11052                                 || value_equal (arg2, arg1)));
11053
11054     case TERNOP_IN_RANGE:
11055       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11056       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11057       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11058
11059       if (noside == EVAL_SKIP)
11060         goto nosideret;
11061
11062       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11063       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
11064       type = language_bool_type (exp->language_defn, exp->gdbarch);
11065       return
11066         value_from_longest (type,
11067                             (value_less (arg1, arg3)
11068                              || value_equal (arg1, arg3))
11069                             && (value_less (arg2, arg1)
11070                                 || value_equal (arg2, arg1)));
11071
11072     case OP_ATR_FIRST:
11073     case OP_ATR_LAST:
11074     case OP_ATR_LENGTH:
11075       {
11076         struct type *type_arg;
11077
11078         if (exp->elts[*pos].opcode == OP_TYPE)
11079           {
11080             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11081             arg1 = NULL;
11082             type_arg = check_typedef (exp->elts[pc + 2].type);
11083           }
11084         else
11085           {
11086             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11087             type_arg = NULL;
11088           }
11089
11090         if (exp->elts[*pos].opcode != OP_LONG)
11091           error (_("Invalid operand to '%s"), ada_attribute_name (op));
11092         tem = longest_to_int (exp->elts[*pos + 2].longconst);
11093         *pos += 4;
11094
11095         if (noside == EVAL_SKIP)
11096           goto nosideret;
11097
11098         if (type_arg == NULL)
11099           {
11100             arg1 = ada_coerce_ref (arg1);
11101
11102             if (ada_is_constrained_packed_array_type (value_type (arg1)))
11103               arg1 = ada_coerce_to_simple_array (arg1);
11104
11105             if (op == OP_ATR_LENGTH)
11106               type = builtin_type (exp->gdbarch)->builtin_int;
11107             else
11108               {
11109                 type = ada_index_type (value_type (arg1), tem,
11110                                        ada_attribute_name (op));
11111                 if (type == NULL)
11112                   type = builtin_type (exp->gdbarch)->builtin_int;
11113               }
11114
11115             if (noside == EVAL_AVOID_SIDE_EFFECTS)
11116               return allocate_value (type);
11117
11118             switch (op)
11119               {
11120               default:          /* Should never happen.  */
11121                 error (_("unexpected attribute encountered"));
11122               case OP_ATR_FIRST:
11123                 return value_from_longest
11124                         (type, ada_array_bound (arg1, tem, 0));
11125               case OP_ATR_LAST:
11126                 return value_from_longest
11127                         (type, ada_array_bound (arg1, tem, 1));
11128               case OP_ATR_LENGTH:
11129                 return value_from_longest
11130                         (type, ada_array_length (arg1, tem));
11131               }
11132           }
11133         else if (discrete_type_p (type_arg))
11134           {
11135             struct type *range_type;
11136             const char *name = ada_type_name (type_arg);
11137
11138             range_type = NULL;
11139             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
11140               range_type = to_fixed_range_type (type_arg, NULL);
11141             if (range_type == NULL)
11142               range_type = type_arg;
11143             switch (op)
11144               {
11145               default:
11146                 error (_("unexpected attribute encountered"));
11147               case OP_ATR_FIRST:
11148                 return value_from_longest 
11149                   (range_type, ada_discrete_type_low_bound (range_type));
11150               case OP_ATR_LAST:
11151                 return value_from_longest
11152                   (range_type, ada_discrete_type_high_bound (range_type));
11153               case OP_ATR_LENGTH:
11154                 error (_("the 'length attribute applies only to array types"));
11155               }
11156           }
11157         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
11158           error (_("unimplemented type attribute"));
11159         else
11160           {
11161             LONGEST low, high;
11162
11163             if (ada_is_constrained_packed_array_type (type_arg))
11164               type_arg = decode_constrained_packed_array_type (type_arg);
11165
11166             if (op == OP_ATR_LENGTH)
11167               type = builtin_type (exp->gdbarch)->builtin_int;
11168             else
11169               {
11170                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
11171                 if (type == NULL)
11172                   type = builtin_type (exp->gdbarch)->builtin_int;
11173               }
11174
11175             if (noside == EVAL_AVOID_SIDE_EFFECTS)
11176               return allocate_value (type);
11177
11178             switch (op)
11179               {
11180               default:
11181                 error (_("unexpected attribute encountered"));
11182               case OP_ATR_FIRST:
11183                 low = ada_array_bound_from_type (type_arg, tem, 0);
11184                 return value_from_longest (type, low);
11185               case OP_ATR_LAST:
11186                 high = ada_array_bound_from_type (type_arg, tem, 1);
11187                 return value_from_longest (type, high);
11188               case OP_ATR_LENGTH:
11189                 low = ada_array_bound_from_type (type_arg, tem, 0);
11190                 high = ada_array_bound_from_type (type_arg, tem, 1);
11191                 return value_from_longest (type, high - low + 1);
11192               }
11193           }
11194       }
11195
11196     case OP_ATR_TAG:
11197       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11198       if (noside == EVAL_SKIP)
11199         goto nosideret;
11200
11201       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11202         return value_zero (ada_tag_type (arg1), not_lval);
11203
11204       return ada_value_tag (arg1);
11205
11206     case OP_ATR_MIN:
11207     case OP_ATR_MAX:
11208       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11209       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11210       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11211       if (noside == EVAL_SKIP)
11212         goto nosideret;
11213       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11214         return value_zero (value_type (arg1), not_lval);
11215       else
11216         {
11217           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11218           return value_binop (arg1, arg2,
11219                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
11220         }
11221
11222     case OP_ATR_MODULUS:
11223       {
11224         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
11225
11226         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11227         if (noside == EVAL_SKIP)
11228           goto nosideret;
11229
11230         if (!ada_is_modular_type (type_arg))
11231           error (_("'modulus must be applied to modular type"));
11232
11233         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11234                                    ada_modulus (type_arg));
11235       }
11236
11237
11238     case OP_ATR_POS:
11239       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11240       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11241       if (noside == EVAL_SKIP)
11242         goto nosideret;
11243       type = builtin_type (exp->gdbarch)->builtin_int;
11244       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11245         return value_zero (type, not_lval);
11246       else
11247         return value_pos_atr (type, arg1);
11248
11249     case OP_ATR_SIZE:
11250       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11251       type = value_type (arg1);
11252
11253       /* If the argument is a reference, then dereference its type, since
11254          the user is really asking for the size of the actual object,
11255          not the size of the pointer.  */
11256       if (TYPE_CODE (type) == TYPE_CODE_REF)
11257         type = TYPE_TARGET_TYPE (type);
11258
11259       if (noside == EVAL_SKIP)
11260         goto nosideret;
11261       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11262         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
11263       else
11264         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
11265                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
11266
11267     case OP_ATR_VAL:
11268       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11269       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11270       type = exp->elts[pc + 2].type;
11271       if (noside == EVAL_SKIP)
11272         goto nosideret;
11273       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11274         return value_zero (type, not_lval);
11275       else
11276         return value_val_atr (type, arg1);
11277
11278     case BINOP_EXP:
11279       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11280       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11281       if (noside == EVAL_SKIP)
11282         goto nosideret;
11283       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11284         return value_zero (value_type (arg1), not_lval);
11285       else
11286         {
11287           /* For integer exponentiation operations,
11288              only promote the first argument.  */
11289           if (is_integral_type (value_type (arg2)))
11290             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11291           else
11292             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11293
11294           return value_binop (arg1, arg2, op);
11295         }
11296
11297     case UNOP_PLUS:
11298       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11299       if (noside == EVAL_SKIP)
11300         goto nosideret;
11301       else
11302         return arg1;
11303
11304     case UNOP_ABS:
11305       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11306       if (noside == EVAL_SKIP)
11307         goto nosideret;
11308       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11309       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
11310         return value_neg (arg1);
11311       else
11312         return arg1;
11313
11314     case UNOP_IND:
11315       preeval_pos = *pos;
11316       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11317       if (noside == EVAL_SKIP)
11318         goto nosideret;
11319       type = ada_check_typedef (value_type (arg1));
11320       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11321         {
11322           if (ada_is_array_descriptor_type (type))
11323             /* GDB allows dereferencing GNAT array descriptors.  */
11324             {
11325               struct type *arrType = ada_type_of_array (arg1, 0);
11326
11327               if (arrType == NULL)
11328                 error (_("Attempt to dereference null array pointer."));
11329               return value_at_lazy (arrType, 0);
11330             }
11331           else if (TYPE_CODE (type) == TYPE_CODE_PTR
11332                    || TYPE_CODE (type) == TYPE_CODE_REF
11333                    /* In C you can dereference an array to get the 1st elt.  */
11334                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
11335             {
11336             /* As mentioned in the OP_VAR_VALUE case, tagged types can
11337                only be determined by inspecting the object's tag.
11338                This means that we need to evaluate completely the
11339                expression in order to get its type.  */
11340
11341               if ((TYPE_CODE (type) == TYPE_CODE_REF
11342                    || TYPE_CODE (type) == TYPE_CODE_PTR)
11343                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11344                 {
11345                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11346                                           EVAL_NORMAL);
11347                   type = value_type (ada_value_ind (arg1));
11348                 }
11349               else
11350                 {
11351                   type = to_static_fixed_type
11352                     (ada_aligned_type
11353                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11354                 }
11355               ada_ensure_varsize_limit (type);
11356               return value_zero (type, lval_memory);
11357             }
11358           else if (TYPE_CODE (type) == TYPE_CODE_INT)
11359             {
11360               /* GDB allows dereferencing an int.  */
11361               if (expect_type == NULL)
11362                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11363                                    lval_memory);
11364               else
11365                 {
11366                   expect_type = 
11367                     to_static_fixed_type (ada_aligned_type (expect_type));
11368                   return value_zero (expect_type, lval_memory);
11369                 }
11370             }
11371           else
11372             error (_("Attempt to take contents of a non-pointer value."));
11373         }
11374       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
11375       type = ada_check_typedef (value_type (arg1));
11376
11377       if (TYPE_CODE (type) == TYPE_CODE_INT)
11378           /* GDB allows dereferencing an int.  If we were given
11379              the expect_type, then use that as the target type.
11380              Otherwise, assume that the target type is an int.  */
11381         {
11382           if (expect_type != NULL)
11383             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11384                                               arg1));
11385           else
11386             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11387                                   (CORE_ADDR) value_as_address (arg1));
11388         }
11389
11390       if (ada_is_array_descriptor_type (type))
11391         /* GDB allows dereferencing GNAT array descriptors.  */
11392         return ada_coerce_to_simple_array (arg1);
11393       else
11394         return ada_value_ind (arg1);
11395
11396     case STRUCTOP_STRUCT:
11397       tem = longest_to_int (exp->elts[pc + 1].longconst);
11398       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
11399       preeval_pos = *pos;
11400       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11401       if (noside == EVAL_SKIP)
11402         goto nosideret;
11403       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11404         {
11405           struct type *type1 = value_type (arg1);
11406
11407           if (ada_is_tagged_type (type1, 1))
11408             {
11409               type = ada_lookup_struct_elt_type (type1,
11410                                                  &exp->elts[pc + 2].string,
11411                                                  1, 1, NULL);
11412
11413               /* If the field is not found, check if it exists in the
11414                  extension of this object's type. This means that we
11415                  need to evaluate completely the expression.  */
11416
11417               if (type == NULL)
11418                 {
11419                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11420                                           EVAL_NORMAL);
11421                   arg1 = ada_value_struct_elt (arg1,
11422                                                &exp->elts[pc + 2].string,
11423                                                0);
11424                   arg1 = unwrap_value (arg1);
11425                   type = value_type (ada_to_fixed_value (arg1));
11426                 }
11427             }
11428           else
11429             type =
11430               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11431                                           0, NULL);
11432
11433           return value_zero (ada_aligned_type (type), lval_memory);
11434         }
11435       else
11436         {
11437           arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11438           arg1 = unwrap_value (arg1);
11439           return ada_to_fixed_value (arg1);
11440         }
11441
11442     case OP_TYPE:
11443       /* The value is not supposed to be used.  This is here to make it
11444          easier to accommodate expressions that contain types.  */
11445       (*pos) += 2;
11446       if (noside == EVAL_SKIP)
11447         goto nosideret;
11448       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11449         return allocate_value (exp->elts[pc + 1].type);
11450       else
11451         error (_("Attempt to use a type name as an expression"));
11452
11453     case OP_AGGREGATE:
11454     case OP_CHOICES:
11455     case OP_OTHERS:
11456     case OP_DISCRETE_RANGE:
11457     case OP_POSITIONAL:
11458     case OP_NAME:
11459       if (noside == EVAL_NORMAL)
11460         switch (op) 
11461           {
11462           case OP_NAME:
11463             error (_("Undefined name, ambiguous name, or renaming used in "
11464                      "component association: %s."), &exp->elts[pc+2].string);
11465           case OP_AGGREGATE:
11466             error (_("Aggregates only allowed on the right of an assignment"));
11467           default:
11468             internal_error (__FILE__, __LINE__,
11469                             _("aggregate apparently mangled"));
11470           }
11471
11472       ada_forward_operator_length (exp, pc, &oplen, &nargs);
11473       *pos += oplen - 1;
11474       for (tem = 0; tem < nargs; tem += 1) 
11475         ada_evaluate_subexp (NULL, exp, pos, noside);
11476       goto nosideret;
11477     }
11478
11479 nosideret:
11480   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
11481 }
11482 \f
11483
11484                                 /* Fixed point */
11485
11486 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
11487    type name that encodes the 'small and 'delta information.
11488    Otherwise, return NULL.  */
11489
11490 static const char *
11491 fixed_type_info (struct type *type)
11492 {
11493   const char *name = ada_type_name (type);
11494   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11495
11496   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11497     {
11498       const char *tail = strstr (name, "___XF_");
11499
11500       if (tail == NULL)
11501         return NULL;
11502       else
11503         return tail + 5;
11504     }
11505   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11506     return fixed_type_info (TYPE_TARGET_TYPE (type));
11507   else
11508     return NULL;
11509 }
11510
11511 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
11512
11513 int
11514 ada_is_fixed_point_type (struct type *type)
11515 {
11516   return fixed_type_info (type) != NULL;
11517 }
11518
11519 /* Return non-zero iff TYPE represents a System.Address type.  */
11520
11521 int
11522 ada_is_system_address_type (struct type *type)
11523 {
11524   return (TYPE_NAME (type)
11525           && strcmp (TYPE_NAME (type), "system__address") == 0);
11526 }
11527
11528 /* Assuming that TYPE is the representation of an Ada fixed-point
11529    type, return its delta, or -1 if the type is malformed and the
11530    delta cannot be determined.  */
11531
11532 DOUBLEST
11533 ada_delta (struct type *type)
11534 {
11535   const char *encoding = fixed_type_info (type);
11536   DOUBLEST num, den;
11537
11538   /* Strictly speaking, num and den are encoded as integer.  However,
11539      they may not fit into a long, and they will have to be converted
11540      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11541   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11542               &num, &den) < 2)
11543     return -1.0;
11544   else
11545     return num / den;
11546 }
11547
11548 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
11549    factor ('SMALL value) associated with the type.  */
11550
11551 static DOUBLEST
11552 scaling_factor (struct type *type)
11553 {
11554   const char *encoding = fixed_type_info (type);
11555   DOUBLEST num0, den0, num1, den1;
11556   int n;
11557
11558   /* Strictly speaking, num's and den's are encoded as integer.  However,
11559      they may not fit into a long, and they will have to be converted
11560      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11561   n = sscanf (encoding,
11562               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11563               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11564               &num0, &den0, &num1, &den1);
11565
11566   if (n < 2)
11567     return 1.0;
11568   else if (n == 4)
11569     return num1 / den1;
11570   else
11571     return num0 / den0;
11572 }
11573
11574
11575 /* Assuming that X is the representation of a value of fixed-point
11576    type TYPE, return its floating-point equivalent.  */
11577
11578 DOUBLEST
11579 ada_fixed_to_float (struct type *type, LONGEST x)
11580 {
11581   return (DOUBLEST) x *scaling_factor (type);
11582 }
11583
11584 /* The representation of a fixed-point value of type TYPE
11585    corresponding to the value X.  */
11586
11587 LONGEST
11588 ada_float_to_fixed (struct type *type, DOUBLEST x)
11589 {
11590   return (LONGEST) (x / scaling_factor (type) + 0.5);
11591 }
11592
11593 \f
11594
11595                                 /* Range types */
11596
11597 /* Scan STR beginning at position K for a discriminant name, and
11598    return the value of that discriminant field of DVAL in *PX.  If
11599    PNEW_K is not null, put the position of the character beyond the
11600    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11601    not alter *PX and *PNEW_K if unsuccessful.  */
11602
11603 static int
11604 scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
11605                     int *pnew_k)
11606 {
11607   static char *bound_buffer = NULL;
11608   static size_t bound_buffer_len = 0;
11609   const char *pstart, *pend, *bound;
11610   struct value *bound_val;
11611
11612   if (dval == NULL || str == NULL || str[k] == '\0')
11613     return 0;
11614
11615   pstart = str + k;
11616   pend = strstr (pstart, "__");
11617   if (pend == NULL)
11618     {
11619       bound = pstart;
11620       k += strlen (bound);
11621     }
11622   else
11623     {
11624       int len = pend - pstart;
11625
11626       /* Strip __ and beyond.  */
11627       GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
11628       strncpy (bound_buffer, pstart, len);
11629       bound_buffer[len] = '\0';
11630
11631       bound = bound_buffer;
11632       k = pend - str;
11633     }
11634
11635   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11636   if (bound_val == NULL)
11637     return 0;
11638
11639   *px = value_as_long (bound_val);
11640   if (pnew_k != NULL)
11641     *pnew_k = k;
11642   return 1;
11643 }
11644
11645 /* Value of variable named NAME in the current environment.  If
11646    no such variable found, then if ERR_MSG is null, returns 0, and
11647    otherwise causes an error with message ERR_MSG.  */
11648
11649 static struct value *
11650 get_var_value (char *name, char *err_msg)
11651 {
11652   struct block_symbol *syms;
11653   int nsyms;
11654
11655   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11656                                   &syms);
11657
11658   if (nsyms != 1)
11659     {
11660       if (err_msg == NULL)
11661         return 0;
11662       else
11663         error (("%s"), err_msg);
11664     }
11665
11666   return value_of_variable (syms[0].symbol, syms[0].block);
11667 }
11668
11669 /* Value of integer variable named NAME in the current environment.  If
11670    no such variable found, returns 0, and sets *FLAG to 0.  If
11671    successful, sets *FLAG to 1.  */
11672
11673 LONGEST
11674 get_int_var_value (char *name, int *flag)
11675 {
11676   struct value *var_val = get_var_value (name, 0);
11677
11678   if (var_val == 0)
11679     {
11680       if (flag != NULL)
11681         *flag = 0;
11682       return 0;
11683     }
11684   else
11685     {
11686       if (flag != NULL)
11687         *flag = 1;
11688       return value_as_long (var_val);
11689     }
11690 }
11691
11692
11693 /* Return a range type whose base type is that of the range type named
11694    NAME in the current environment, and whose bounds are calculated
11695    from NAME according to the GNAT range encoding conventions.
11696    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11697    corresponding range type from debug information; fall back to using it
11698    if symbol lookup fails.  If a new type must be created, allocate it
11699    like ORIG_TYPE was.  The bounds information, in general, is encoded
11700    in NAME, the base type given in the named range type.  */
11701
11702 static struct type *
11703 to_fixed_range_type (struct type *raw_type, struct value *dval)
11704 {
11705   const char *name;
11706   struct type *base_type;
11707   const char *subtype_info;
11708
11709   gdb_assert (raw_type != NULL);
11710   gdb_assert (TYPE_NAME (raw_type) != NULL);
11711
11712   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11713     base_type = TYPE_TARGET_TYPE (raw_type);
11714   else
11715     base_type = raw_type;
11716
11717   name = TYPE_NAME (raw_type);
11718   subtype_info = strstr (name, "___XD");
11719   if (subtype_info == NULL)
11720     {
11721       LONGEST L = ada_discrete_type_low_bound (raw_type);
11722       LONGEST U = ada_discrete_type_high_bound (raw_type);
11723
11724       if (L < INT_MIN || U > INT_MAX)
11725         return raw_type;
11726       else
11727         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11728                                          L, U);
11729     }
11730   else
11731     {
11732       static char *name_buf = NULL;
11733       static size_t name_len = 0;
11734       int prefix_len = subtype_info - name;
11735       LONGEST L, U;
11736       struct type *type;
11737       const char *bounds_str;
11738       int n;
11739
11740       GROW_VECT (name_buf, name_len, prefix_len + 5);
11741       strncpy (name_buf, name, prefix_len);
11742       name_buf[prefix_len] = '\0';
11743
11744       subtype_info += 5;
11745       bounds_str = strchr (subtype_info, '_');
11746       n = 1;
11747
11748       if (*subtype_info == 'L')
11749         {
11750           if (!ada_scan_number (bounds_str, n, &L, &n)
11751               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11752             return raw_type;
11753           if (bounds_str[n] == '_')
11754             n += 2;
11755           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11756             n += 1;
11757           subtype_info += 1;
11758         }
11759       else
11760         {
11761           int ok;
11762
11763           strcpy (name_buf + prefix_len, "___L");
11764           L = get_int_var_value (name_buf, &ok);
11765           if (!ok)
11766             {
11767               lim_warning (_("Unknown lower bound, using 1."));
11768               L = 1;
11769             }
11770         }
11771
11772       if (*subtype_info == 'U')
11773         {
11774           if (!ada_scan_number (bounds_str, n, &U, &n)
11775               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11776             return raw_type;
11777         }
11778       else
11779         {
11780           int ok;
11781
11782           strcpy (name_buf + prefix_len, "___U");
11783           U = get_int_var_value (name_buf, &ok);
11784           if (!ok)
11785             {
11786               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11787               U = L;
11788             }
11789         }
11790
11791       type = create_static_range_type (alloc_type_copy (raw_type),
11792                                        base_type, L, U);
11793       TYPE_NAME (type) = name;
11794       return type;
11795     }
11796 }
11797
11798 /* True iff NAME is the name of a range type.  */
11799
11800 int
11801 ada_is_range_type_name (const char *name)
11802 {
11803   return (name != NULL && strstr (name, "___XD"));
11804 }
11805 \f
11806
11807                                 /* Modular types */
11808
11809 /* True iff TYPE is an Ada modular type.  */
11810
11811 int
11812 ada_is_modular_type (struct type *type)
11813 {
11814   struct type *subranged_type = get_base_type (type);
11815
11816   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11817           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11818           && TYPE_UNSIGNED (subranged_type));
11819 }
11820
11821 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11822
11823 ULONGEST
11824 ada_modulus (struct type *type)
11825 {
11826   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11827 }
11828 \f
11829
11830 /* Ada exception catchpoint support:
11831    ---------------------------------
11832
11833    We support 3 kinds of exception catchpoints:
11834      . catchpoints on Ada exceptions
11835      . catchpoints on unhandled Ada exceptions
11836      . catchpoints on failed assertions
11837
11838    Exceptions raised during failed assertions, or unhandled exceptions
11839    could perfectly be caught with the general catchpoint on Ada exceptions.
11840    However, we can easily differentiate these two special cases, and having
11841    the option to distinguish these two cases from the rest can be useful
11842    to zero-in on certain situations.
11843
11844    Exception catchpoints are a specialized form of breakpoint,
11845    since they rely on inserting breakpoints inside known routines
11846    of the GNAT runtime.  The implementation therefore uses a standard
11847    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11848    of breakpoint_ops.
11849
11850    Support in the runtime for exception catchpoints have been changed
11851    a few times already, and these changes affect the implementation
11852    of these catchpoints.  In order to be able to support several
11853    variants of the runtime, we use a sniffer that will determine
11854    the runtime variant used by the program being debugged.  */
11855
11856 /* Ada's standard exceptions.
11857
11858    The Ada 83 standard also defined Numeric_Error.  But there so many
11859    situations where it was unclear from the Ada 83 Reference Manual
11860    (RM) whether Constraint_Error or Numeric_Error should be raised,
11861    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11862    Interpretation saying that anytime the RM says that Numeric_Error
11863    should be raised, the implementation may raise Constraint_Error.
11864    Ada 95 went one step further and pretty much removed Numeric_Error
11865    from the list of standard exceptions (it made it a renaming of
11866    Constraint_Error, to help preserve compatibility when compiling
11867    an Ada83 compiler). As such, we do not include Numeric_Error from
11868    this list of standard exceptions.  */
11869
11870 static char *standard_exc[] = {
11871   "constraint_error",
11872   "program_error",
11873   "storage_error",
11874   "tasking_error"
11875 };
11876
11877 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11878
11879 /* A structure that describes how to support exception catchpoints
11880    for a given executable.  */
11881
11882 struct exception_support_info
11883 {
11884    /* The name of the symbol to break on in order to insert
11885       a catchpoint on exceptions.  */
11886    const char *catch_exception_sym;
11887
11888    /* The name of the symbol to break on in order to insert
11889       a catchpoint on unhandled exceptions.  */
11890    const char *catch_exception_unhandled_sym;
11891
11892    /* The name of the symbol to break on in order to insert
11893       a catchpoint on failed assertions.  */
11894    const char *catch_assert_sym;
11895
11896    /* Assuming that the inferior just triggered an unhandled exception
11897       catchpoint, this function is responsible for returning the address
11898       in inferior memory where the name of that exception is stored.
11899       Return zero if the address could not be computed.  */
11900    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11901 };
11902
11903 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11904 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11905
11906 /* The following exception support info structure describes how to
11907    implement exception catchpoints with the latest version of the
11908    Ada runtime (as of 2007-03-06).  */
11909
11910 static const struct exception_support_info default_exception_support_info =
11911 {
11912   "__gnat_debug_raise_exception", /* catch_exception_sym */
11913   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11914   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11915   ada_unhandled_exception_name_addr
11916 };
11917
11918 /* The following exception support info structure describes how to
11919    implement exception catchpoints with a slightly older version
11920    of the Ada runtime.  */
11921
11922 static const struct exception_support_info exception_support_info_fallback =
11923 {
11924   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11925   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11926   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11927   ada_unhandled_exception_name_addr_from_raise
11928 };
11929
11930 /* Return nonzero if we can detect the exception support routines
11931    described in EINFO.
11932
11933    This function errors out if an abnormal situation is detected
11934    (for instance, if we find the exception support routines, but
11935    that support is found to be incomplete).  */
11936
11937 static int
11938 ada_has_this_exception_support (const struct exception_support_info *einfo)
11939 {
11940   struct symbol *sym;
11941
11942   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11943      that should be compiled with debugging information.  As a result, we
11944      expect to find that symbol in the symtabs.  */
11945
11946   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11947   if (sym == NULL)
11948     {
11949       /* Perhaps we did not find our symbol because the Ada runtime was
11950          compiled without debugging info, or simply stripped of it.
11951          It happens on some GNU/Linux distributions for instance, where
11952          users have to install a separate debug package in order to get
11953          the runtime's debugging info.  In that situation, let the user
11954          know why we cannot insert an Ada exception catchpoint.
11955
11956          Note: Just for the purpose of inserting our Ada exception
11957          catchpoint, we could rely purely on the associated minimal symbol.
11958          But we would be operating in degraded mode anyway, since we are
11959          still lacking the debugging info needed later on to extract
11960          the name of the exception being raised (this name is printed in
11961          the catchpoint message, and is also used when trying to catch
11962          a specific exception).  We do not handle this case for now.  */
11963       struct bound_minimal_symbol msym
11964         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11965
11966       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11967         error (_("Your Ada runtime appears to be missing some debugging "
11968                  "information.\nCannot insert Ada exception catchpoint "
11969                  "in this configuration."));
11970
11971       return 0;
11972     }
11973
11974   /* Make sure that the symbol we found corresponds to a function.  */
11975
11976   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11977     error (_("Symbol \"%s\" is not a function (class = %d)"),
11978            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11979
11980   return 1;
11981 }
11982
11983 /* Inspect the Ada runtime and determine which exception info structure
11984    should be used to provide support for exception catchpoints.
11985
11986    This function will always set the per-inferior exception_info,
11987    or raise an error.  */
11988
11989 static void
11990 ada_exception_support_info_sniffer (void)
11991 {
11992   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11993
11994   /* If the exception info is already known, then no need to recompute it.  */
11995   if (data->exception_info != NULL)
11996     return;
11997
11998   /* Check the latest (default) exception support info.  */
11999   if (ada_has_this_exception_support (&default_exception_support_info))
12000     {
12001       data->exception_info = &default_exception_support_info;
12002       return;
12003     }
12004
12005   /* Try our fallback exception suport info.  */
12006   if (ada_has_this_exception_support (&exception_support_info_fallback))
12007     {
12008       data->exception_info = &exception_support_info_fallback;
12009       return;
12010     }
12011
12012   /* Sometimes, it is normal for us to not be able to find the routine
12013      we are looking for.  This happens when the program is linked with
12014      the shared version of the GNAT runtime, and the program has not been
12015      started yet.  Inform the user of these two possible causes if
12016      applicable.  */
12017
12018   if (ada_update_initial_language (language_unknown) != language_ada)
12019     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
12020
12021   /* If the symbol does not exist, then check that the program is
12022      already started, to make sure that shared libraries have been
12023      loaded.  If it is not started, this may mean that the symbol is
12024      in a shared library.  */
12025
12026   if (ptid_get_pid (inferior_ptid) == 0)
12027     error (_("Unable to insert catchpoint. Try to start the program first."));
12028
12029   /* At this point, we know that we are debugging an Ada program and
12030      that the inferior has been started, but we still are not able to
12031      find the run-time symbols.  That can mean that we are in
12032      configurable run time mode, or that a-except as been optimized
12033      out by the linker...  In any case, at this point it is not worth
12034      supporting this feature.  */
12035
12036   error (_("Cannot insert Ada exception catchpoints in this configuration."));
12037 }
12038
12039 /* True iff FRAME is very likely to be that of a function that is
12040    part of the runtime system.  This is all very heuristic, but is
12041    intended to be used as advice as to what frames are uninteresting
12042    to most users.  */
12043
12044 static int
12045 is_known_support_routine (struct frame_info *frame)
12046 {
12047   struct symtab_and_line sal;
12048   char *func_name;
12049   enum language func_lang;
12050   int i;
12051   const char *fullname;
12052
12053   /* If this code does not have any debugging information (no symtab),
12054      This cannot be any user code.  */
12055
12056   find_frame_sal (frame, &sal);
12057   if (sal.symtab == NULL)
12058     return 1;
12059
12060   /* If there is a symtab, but the associated source file cannot be
12061      located, then assume this is not user code:  Selecting a frame
12062      for which we cannot display the code would not be very helpful
12063      for the user.  This should also take care of case such as VxWorks
12064      where the kernel has some debugging info provided for a few units.  */
12065
12066   fullname = symtab_to_fullname (sal.symtab);
12067   if (access (fullname, R_OK) != 0)
12068     return 1;
12069
12070   /* Check the unit filename againt the Ada runtime file naming.
12071      We also check the name of the objfile against the name of some
12072      known system libraries that sometimes come with debugging info
12073      too.  */
12074
12075   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
12076     {
12077       re_comp (known_runtime_file_name_patterns[i]);
12078       if (re_exec (lbasename (sal.symtab->filename)))
12079         return 1;
12080       if (SYMTAB_OBJFILE (sal.symtab) != NULL
12081           && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
12082         return 1;
12083     }
12084
12085   /* Check whether the function is a GNAT-generated entity.  */
12086
12087   find_frame_funname (frame, &func_name, &func_lang, NULL);
12088   if (func_name == NULL)
12089     return 1;
12090
12091   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
12092     {
12093       re_comp (known_auxiliary_function_name_patterns[i]);
12094       if (re_exec (func_name))
12095         {
12096           xfree (func_name);
12097           return 1;
12098         }
12099     }
12100
12101   xfree (func_name);
12102   return 0;
12103 }
12104
12105 /* Find the first frame that contains debugging information and that is not
12106    part of the Ada run-time, starting from FI and moving upward.  */
12107
12108 void
12109 ada_find_printable_frame (struct frame_info *fi)
12110 {
12111   for (; fi != NULL; fi = get_prev_frame (fi))
12112     {
12113       if (!is_known_support_routine (fi))
12114         {
12115           select_frame (fi);
12116           break;
12117         }
12118     }
12119
12120 }
12121
12122 /* Assuming that the inferior just triggered an unhandled exception
12123    catchpoint, return the address in inferior memory where the name
12124    of the exception is stored.
12125    
12126    Return zero if the address could not be computed.  */
12127
12128 static CORE_ADDR
12129 ada_unhandled_exception_name_addr (void)
12130 {
12131   return parse_and_eval_address ("e.full_name");
12132 }
12133
12134 /* Same as ada_unhandled_exception_name_addr, except that this function
12135    should be used when the inferior uses an older version of the runtime,
12136    where the exception name needs to be extracted from a specific frame
12137    several frames up in the callstack.  */
12138
12139 static CORE_ADDR
12140 ada_unhandled_exception_name_addr_from_raise (void)
12141 {
12142   int frame_level;
12143   struct frame_info *fi;
12144   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12145   struct cleanup *old_chain;
12146
12147   /* To determine the name of this exception, we need to select
12148      the frame corresponding to RAISE_SYM_NAME.  This frame is
12149      at least 3 levels up, so we simply skip the first 3 frames
12150      without checking the name of their associated function.  */
12151   fi = get_current_frame ();
12152   for (frame_level = 0; frame_level < 3; frame_level += 1)
12153     if (fi != NULL)
12154       fi = get_prev_frame (fi); 
12155
12156   old_chain = make_cleanup (null_cleanup, NULL);
12157   while (fi != NULL)
12158     {
12159       char *func_name;
12160       enum language func_lang;
12161
12162       find_frame_funname (fi, &func_name, &func_lang, NULL);
12163       if (func_name != NULL)
12164         {
12165           make_cleanup (xfree, func_name);
12166
12167           if (strcmp (func_name,
12168                       data->exception_info->catch_exception_sym) == 0)
12169             break; /* We found the frame we were looking for...  */
12170           fi = get_prev_frame (fi);
12171         }
12172     }
12173   do_cleanups (old_chain);
12174
12175   if (fi == NULL)
12176     return 0;
12177
12178   select_frame (fi);
12179   return parse_and_eval_address ("id.full_name");
12180 }
12181
12182 /* Assuming the inferior just triggered an Ada exception catchpoint
12183    (of any type), return the address in inferior memory where the name
12184    of the exception is stored, if applicable.
12185
12186    Return zero if the address could not be computed, or if not relevant.  */
12187
12188 static CORE_ADDR
12189 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
12190                            struct breakpoint *b)
12191 {
12192   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12193
12194   switch (ex)
12195     {
12196       case ada_catch_exception:
12197         return (parse_and_eval_address ("e.full_name"));
12198         break;
12199
12200       case ada_catch_exception_unhandled:
12201         return data->exception_info->unhandled_exception_name_addr ();
12202         break;
12203       
12204       case ada_catch_assert:
12205         return 0;  /* Exception name is not relevant in this case.  */
12206         break;
12207
12208       default:
12209         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12210         break;
12211     }
12212
12213   return 0; /* Should never be reached.  */
12214 }
12215
12216 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
12217    any error that ada_exception_name_addr_1 might cause to be thrown.
12218    When an error is intercepted, a warning with the error message is printed,
12219    and zero is returned.  */
12220
12221 static CORE_ADDR
12222 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
12223                          struct breakpoint *b)
12224 {
12225   CORE_ADDR result = 0;
12226
12227   TRY
12228     {
12229       result = ada_exception_name_addr_1 (ex, b);
12230     }
12231
12232   CATCH (e, RETURN_MASK_ERROR)
12233     {
12234       warning (_("failed to get exception name: %s"), e.message);
12235       return 0;
12236     }
12237   END_CATCH
12238
12239   return result;
12240 }
12241
12242 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
12243
12244 /* Ada catchpoints.
12245
12246    In the case of catchpoints on Ada exceptions, the catchpoint will
12247    stop the target on every exception the program throws.  When a user
12248    specifies the name of a specific exception, we translate this
12249    request into a condition expression (in text form), and then parse
12250    it into an expression stored in each of the catchpoint's locations.
12251    We then use this condition to check whether the exception that was
12252    raised is the one the user is interested in.  If not, then the
12253    target is resumed again.  We store the name of the requested
12254    exception, in order to be able to re-set the condition expression
12255    when symbols change.  */
12256
12257 /* An instance of this type is used to represent an Ada catchpoint
12258    breakpoint location.  It includes a "struct bp_location" as a kind
12259    of base class; users downcast to "struct bp_location *" when
12260    needed.  */
12261
12262 struct ada_catchpoint_location
12263 {
12264   /* The base class.  */
12265   struct bp_location base;
12266
12267   /* The condition that checks whether the exception that was raised
12268      is the specific exception the user specified on catchpoint
12269      creation.  */
12270   struct expression *excep_cond_expr;
12271 };
12272
12273 /* Implement the DTOR method in the bp_location_ops structure for all
12274    Ada exception catchpoint kinds.  */
12275
12276 static void
12277 ada_catchpoint_location_dtor (struct bp_location *bl)
12278 {
12279   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
12280
12281   xfree (al->excep_cond_expr);
12282 }
12283
12284 /* The vtable to be used in Ada catchpoint locations.  */
12285
12286 static const struct bp_location_ops ada_catchpoint_location_ops =
12287 {
12288   ada_catchpoint_location_dtor
12289 };
12290
12291 /* An instance of this type is used to represent an Ada catchpoint.
12292    It includes a "struct breakpoint" as a kind of base class; users
12293    downcast to "struct breakpoint *" when needed.  */
12294
12295 struct ada_catchpoint
12296 {
12297   /* The base class.  */
12298   struct breakpoint base;
12299
12300   /* The name of the specific exception the user specified.  */
12301   char *excep_string;
12302 };
12303
12304 /* Parse the exception condition string in the context of each of the
12305    catchpoint's locations, and store them for later evaluation.  */
12306
12307 static void
12308 create_excep_cond_exprs (struct ada_catchpoint *c)
12309 {
12310   struct cleanup *old_chain;
12311   struct bp_location *bl;
12312   char *cond_string;
12313
12314   /* Nothing to do if there's no specific exception to catch.  */
12315   if (c->excep_string == NULL)
12316     return;
12317
12318   /* Same if there are no locations... */
12319   if (c->base.loc == NULL)
12320     return;
12321
12322   /* Compute the condition expression in text form, from the specific
12323      expection we want to catch.  */
12324   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
12325   old_chain = make_cleanup (xfree, cond_string);
12326
12327   /* Iterate over all the catchpoint's locations, and parse an
12328      expression for each.  */
12329   for (bl = c->base.loc; bl != NULL; bl = bl->next)
12330     {
12331       struct ada_catchpoint_location *ada_loc
12332         = (struct ada_catchpoint_location *) bl;
12333       struct expression *exp = NULL;
12334
12335       if (!bl->shlib_disabled)
12336         {
12337           const char *s;
12338
12339           s = cond_string;
12340           TRY
12341             {
12342               exp = parse_exp_1 (&s, bl->address,
12343                                  block_for_pc (bl->address), 0);
12344             }
12345           CATCH (e, RETURN_MASK_ERROR)
12346             {
12347               warning (_("failed to reevaluate internal exception condition "
12348                          "for catchpoint %d: %s"),
12349                        c->base.number, e.message);
12350               /* There is a bug in GCC on sparc-solaris when building with
12351                  optimization which causes EXP to change unexpectedly
12352                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
12353                  The problem should be fixed starting with GCC 4.9.
12354                  In the meantime, work around it by forcing EXP back
12355                  to NULL.  */
12356               exp = NULL;
12357             }
12358           END_CATCH
12359         }
12360
12361       ada_loc->excep_cond_expr = exp;
12362     }
12363
12364   do_cleanups (old_chain);
12365 }
12366
12367 /* Implement the DTOR method in the breakpoint_ops structure for all
12368    exception catchpoint kinds.  */
12369
12370 static void
12371 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
12372 {
12373   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12374
12375   xfree (c->excep_string);
12376
12377   bkpt_breakpoint_ops.dtor (b);
12378 }
12379
12380 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12381    structure for all exception catchpoint kinds.  */
12382
12383 static struct bp_location *
12384 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
12385                              struct breakpoint *self)
12386 {
12387   struct ada_catchpoint_location *loc;
12388
12389   loc = XNEW (struct ada_catchpoint_location);
12390   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
12391   loc->excep_cond_expr = NULL;
12392   return &loc->base;
12393 }
12394
12395 /* Implement the RE_SET method in the breakpoint_ops structure for all
12396    exception catchpoint kinds.  */
12397
12398 static void
12399 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
12400 {
12401   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12402
12403   /* Call the base class's method.  This updates the catchpoint's
12404      locations.  */
12405   bkpt_breakpoint_ops.re_set (b);
12406
12407   /* Reparse the exception conditional expressions.  One for each
12408      location.  */
12409   create_excep_cond_exprs (c);
12410 }
12411
12412 /* Returns true if we should stop for this breakpoint hit.  If the
12413    user specified a specific exception, we only want to cause a stop
12414    if the program thrown that exception.  */
12415
12416 static int
12417 should_stop_exception (const struct bp_location *bl)
12418 {
12419   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12420   const struct ada_catchpoint_location *ada_loc
12421     = (const struct ada_catchpoint_location *) bl;
12422   int stop;
12423
12424   /* With no specific exception, should always stop.  */
12425   if (c->excep_string == NULL)
12426     return 1;
12427
12428   if (ada_loc->excep_cond_expr == NULL)
12429     {
12430       /* We will have a NULL expression if back when we were creating
12431          the expressions, this location's had failed to parse.  */
12432       return 1;
12433     }
12434
12435   stop = 1;
12436   TRY
12437     {
12438       struct value *mark;
12439
12440       mark = value_mark ();
12441       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
12442       value_free_to_mark (mark);
12443     }
12444   CATCH (ex, RETURN_MASK_ALL)
12445     {
12446       exception_fprintf (gdb_stderr, ex,
12447                          _("Error in testing exception condition:\n"));
12448     }
12449   END_CATCH
12450
12451   return stop;
12452 }
12453
12454 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
12455    for all exception catchpoint kinds.  */
12456
12457 static void
12458 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12459 {
12460   bs->stop = should_stop_exception (bs->bp_location_at);
12461 }
12462
12463 /* Implement the PRINT_IT method in the breakpoint_ops structure
12464    for all exception catchpoint kinds.  */
12465
12466 static enum print_stop_action
12467 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12468 {
12469   struct ui_out *uiout = current_uiout;
12470   struct breakpoint *b = bs->breakpoint_at;
12471
12472   annotate_catchpoint (b->number);
12473
12474   if (ui_out_is_mi_like_p (uiout))
12475     {
12476       ui_out_field_string (uiout, "reason",
12477                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12478       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
12479     }
12480
12481   ui_out_text (uiout,
12482                b->disposition == disp_del ? "\nTemporary catchpoint "
12483                                           : "\nCatchpoint ");
12484   ui_out_field_int (uiout, "bkptno", b->number);
12485   ui_out_text (uiout, ", ");
12486
12487   switch (ex)
12488     {
12489       case ada_catch_exception:
12490       case ada_catch_exception_unhandled:
12491         {
12492           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12493           char exception_name[256];
12494
12495           if (addr != 0)
12496             {
12497               read_memory (addr, (gdb_byte *) exception_name,
12498                            sizeof (exception_name) - 1);
12499               exception_name [sizeof (exception_name) - 1] = '\0';
12500             }
12501           else
12502             {
12503               /* For some reason, we were unable to read the exception
12504                  name.  This could happen if the Runtime was compiled
12505                  without debugging info, for instance.  In that case,
12506                  just replace the exception name by the generic string
12507                  "exception" - it will read as "an exception" in the
12508                  notification we are about to print.  */
12509               memcpy (exception_name, "exception", sizeof ("exception"));
12510             }
12511           /* In the case of unhandled exception breakpoints, we print
12512              the exception name as "unhandled EXCEPTION_NAME", to make
12513              it clearer to the user which kind of catchpoint just got
12514              hit.  We used ui_out_text to make sure that this extra
12515              info does not pollute the exception name in the MI case.  */
12516           if (ex == ada_catch_exception_unhandled)
12517             ui_out_text (uiout, "unhandled ");
12518           ui_out_field_string (uiout, "exception-name", exception_name);
12519         }
12520         break;
12521       case ada_catch_assert:
12522         /* In this case, the name of the exception is not really
12523            important.  Just print "failed assertion" to make it clearer
12524            that his program just hit an assertion-failure catchpoint.
12525            We used ui_out_text because this info does not belong in
12526            the MI output.  */
12527         ui_out_text (uiout, "failed assertion");
12528         break;
12529     }
12530   ui_out_text (uiout, " at ");
12531   ada_find_printable_frame (get_current_frame ());
12532
12533   return PRINT_SRC_AND_LOC;
12534 }
12535
12536 /* Implement the PRINT_ONE method in the breakpoint_ops structure
12537    for all exception catchpoint kinds.  */
12538
12539 static void
12540 print_one_exception (enum ada_exception_catchpoint_kind ex,
12541                      struct breakpoint *b, struct bp_location **last_loc)
12542
12543   struct ui_out *uiout = current_uiout;
12544   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12545   struct value_print_options opts;
12546
12547   get_user_print_options (&opts);
12548   if (opts.addressprint)
12549     {
12550       annotate_field (4);
12551       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
12552     }
12553
12554   annotate_field (5);
12555   *last_loc = b->loc;
12556   switch (ex)
12557     {
12558       case ada_catch_exception:
12559         if (c->excep_string != NULL)
12560           {
12561             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12562
12563             ui_out_field_string (uiout, "what", msg);
12564             xfree (msg);
12565           }
12566         else
12567           ui_out_field_string (uiout, "what", "all Ada exceptions");
12568         
12569         break;
12570
12571       case ada_catch_exception_unhandled:
12572         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12573         break;
12574       
12575       case ada_catch_assert:
12576         ui_out_field_string (uiout, "what", "failed Ada assertions");
12577         break;
12578
12579       default:
12580         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12581         break;
12582     }
12583 }
12584
12585 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12586    for all exception catchpoint kinds.  */
12587
12588 static void
12589 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12590                          struct breakpoint *b)
12591 {
12592   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12593   struct ui_out *uiout = current_uiout;
12594
12595   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12596                                                  : _("Catchpoint "));
12597   ui_out_field_int (uiout, "bkptno", b->number);
12598   ui_out_text (uiout, ": ");
12599
12600   switch (ex)
12601     {
12602       case ada_catch_exception:
12603         if (c->excep_string != NULL)
12604           {
12605             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12606             struct cleanup *old_chain = make_cleanup (xfree, info);
12607
12608             ui_out_text (uiout, info);
12609             do_cleanups (old_chain);
12610           }
12611         else
12612           ui_out_text (uiout, _("all Ada exceptions"));
12613         break;
12614
12615       case ada_catch_exception_unhandled:
12616         ui_out_text (uiout, _("unhandled Ada exceptions"));
12617         break;
12618       
12619       case ada_catch_assert:
12620         ui_out_text (uiout, _("failed Ada assertions"));
12621         break;
12622
12623       default:
12624         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12625         break;
12626     }
12627 }
12628
12629 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12630    for all exception catchpoint kinds.  */
12631
12632 static void
12633 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12634                           struct breakpoint *b, struct ui_file *fp)
12635 {
12636   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12637
12638   switch (ex)
12639     {
12640       case ada_catch_exception:
12641         fprintf_filtered (fp, "catch exception");
12642         if (c->excep_string != NULL)
12643           fprintf_filtered (fp, " %s", c->excep_string);
12644         break;
12645
12646       case ada_catch_exception_unhandled:
12647         fprintf_filtered (fp, "catch exception unhandled");
12648         break;
12649
12650       case ada_catch_assert:
12651         fprintf_filtered (fp, "catch assert");
12652         break;
12653
12654       default:
12655         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12656     }
12657   print_recreate_thread (b, fp);
12658 }
12659
12660 /* Virtual table for "catch exception" breakpoints.  */
12661
12662 static void
12663 dtor_catch_exception (struct breakpoint *b)
12664 {
12665   dtor_exception (ada_catch_exception, b);
12666 }
12667
12668 static struct bp_location *
12669 allocate_location_catch_exception (struct breakpoint *self)
12670 {
12671   return allocate_location_exception (ada_catch_exception, self);
12672 }
12673
12674 static void
12675 re_set_catch_exception (struct breakpoint *b)
12676 {
12677   re_set_exception (ada_catch_exception, b);
12678 }
12679
12680 static void
12681 check_status_catch_exception (bpstat bs)
12682 {
12683   check_status_exception (ada_catch_exception, bs);
12684 }
12685
12686 static enum print_stop_action
12687 print_it_catch_exception (bpstat bs)
12688 {
12689   return print_it_exception (ada_catch_exception, bs);
12690 }
12691
12692 static void
12693 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12694 {
12695   print_one_exception (ada_catch_exception, b, last_loc);
12696 }
12697
12698 static void
12699 print_mention_catch_exception (struct breakpoint *b)
12700 {
12701   print_mention_exception (ada_catch_exception, b);
12702 }
12703
12704 static void
12705 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12706 {
12707   print_recreate_exception (ada_catch_exception, b, fp);
12708 }
12709
12710 static struct breakpoint_ops catch_exception_breakpoint_ops;
12711
12712 /* Virtual table for "catch exception unhandled" breakpoints.  */
12713
12714 static void
12715 dtor_catch_exception_unhandled (struct breakpoint *b)
12716 {
12717   dtor_exception (ada_catch_exception_unhandled, b);
12718 }
12719
12720 static struct bp_location *
12721 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12722 {
12723   return allocate_location_exception (ada_catch_exception_unhandled, self);
12724 }
12725
12726 static void
12727 re_set_catch_exception_unhandled (struct breakpoint *b)
12728 {
12729   re_set_exception (ada_catch_exception_unhandled, b);
12730 }
12731
12732 static void
12733 check_status_catch_exception_unhandled (bpstat bs)
12734 {
12735   check_status_exception (ada_catch_exception_unhandled, bs);
12736 }
12737
12738 static enum print_stop_action
12739 print_it_catch_exception_unhandled (bpstat bs)
12740 {
12741   return print_it_exception (ada_catch_exception_unhandled, bs);
12742 }
12743
12744 static void
12745 print_one_catch_exception_unhandled (struct breakpoint *b,
12746                                      struct bp_location **last_loc)
12747 {
12748   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12749 }
12750
12751 static void
12752 print_mention_catch_exception_unhandled (struct breakpoint *b)
12753 {
12754   print_mention_exception (ada_catch_exception_unhandled, b);
12755 }
12756
12757 static void
12758 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12759                                           struct ui_file *fp)
12760 {
12761   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12762 }
12763
12764 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12765
12766 /* Virtual table for "catch assert" breakpoints.  */
12767
12768 static void
12769 dtor_catch_assert (struct breakpoint *b)
12770 {
12771   dtor_exception (ada_catch_assert, b);
12772 }
12773
12774 static struct bp_location *
12775 allocate_location_catch_assert (struct breakpoint *self)
12776 {
12777   return allocate_location_exception (ada_catch_assert, self);
12778 }
12779
12780 static void
12781 re_set_catch_assert (struct breakpoint *b)
12782 {
12783   re_set_exception (ada_catch_assert, b);
12784 }
12785
12786 static void
12787 check_status_catch_assert (bpstat bs)
12788 {
12789   check_status_exception (ada_catch_assert, bs);
12790 }
12791
12792 static enum print_stop_action
12793 print_it_catch_assert (bpstat bs)
12794 {
12795   return print_it_exception (ada_catch_assert, bs);
12796 }
12797
12798 static void
12799 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12800 {
12801   print_one_exception (ada_catch_assert, b, last_loc);
12802 }
12803
12804 static void
12805 print_mention_catch_assert (struct breakpoint *b)
12806 {
12807   print_mention_exception (ada_catch_assert, b);
12808 }
12809
12810 static void
12811 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12812 {
12813   print_recreate_exception (ada_catch_assert, b, fp);
12814 }
12815
12816 static struct breakpoint_ops catch_assert_breakpoint_ops;
12817
12818 /* Return a newly allocated copy of the first space-separated token
12819    in ARGSP, and then adjust ARGSP to point immediately after that
12820    token.
12821
12822    Return NULL if ARGPS does not contain any more tokens.  */
12823
12824 static char *
12825 ada_get_next_arg (char **argsp)
12826 {
12827   char *args = *argsp;
12828   char *end;
12829   char *result;
12830
12831   args = skip_spaces (args);
12832   if (args[0] == '\0')
12833     return NULL; /* No more arguments.  */
12834   
12835   /* Find the end of the current argument.  */
12836
12837   end = skip_to_space (args);
12838
12839   /* Adjust ARGSP to point to the start of the next argument.  */
12840
12841   *argsp = end;
12842
12843   /* Make a copy of the current argument and return it.  */
12844
12845   result = (char *) xmalloc (end - args + 1);
12846   strncpy (result, args, end - args);
12847   result[end - args] = '\0';
12848   
12849   return result;
12850 }
12851
12852 /* Split the arguments specified in a "catch exception" command.  
12853    Set EX to the appropriate catchpoint type.
12854    Set EXCEP_STRING to the name of the specific exception if
12855    specified by the user.
12856    If a condition is found at the end of the arguments, the condition
12857    expression is stored in COND_STRING (memory must be deallocated
12858    after use).  Otherwise COND_STRING is set to NULL.  */
12859
12860 static void
12861 catch_ada_exception_command_split (char *args,
12862                                    enum ada_exception_catchpoint_kind *ex,
12863                                    char **excep_string,
12864                                    char **cond_string)
12865 {
12866   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12867   char *exception_name;
12868   char *cond = NULL;
12869
12870   exception_name = ada_get_next_arg (&args);
12871   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12872     {
12873       /* This is not an exception name; this is the start of a condition
12874          expression for a catchpoint on all exceptions.  So, "un-get"
12875          this token, and set exception_name to NULL.  */
12876       xfree (exception_name);
12877       exception_name = NULL;
12878       args -= 2;
12879     }
12880   make_cleanup (xfree, exception_name);
12881
12882   /* Check to see if we have a condition.  */
12883
12884   args = skip_spaces (args);
12885   if (startswith (args, "if")
12886       && (isspace (args[2]) || args[2] == '\0'))
12887     {
12888       args += 2;
12889       args = skip_spaces (args);
12890
12891       if (args[0] == '\0')
12892         error (_("Condition missing after `if' keyword"));
12893       cond = xstrdup (args);
12894       make_cleanup (xfree, cond);
12895
12896       args += strlen (args);
12897     }
12898
12899   /* Check that we do not have any more arguments.  Anything else
12900      is unexpected.  */
12901
12902   if (args[0] != '\0')
12903     error (_("Junk at end of expression"));
12904
12905   discard_cleanups (old_chain);
12906
12907   if (exception_name == NULL)
12908     {
12909       /* Catch all exceptions.  */
12910       *ex = ada_catch_exception;
12911       *excep_string = NULL;
12912     }
12913   else if (strcmp (exception_name, "unhandled") == 0)
12914     {
12915       /* Catch unhandled exceptions.  */
12916       *ex = ada_catch_exception_unhandled;
12917       *excep_string = NULL;
12918     }
12919   else
12920     {
12921       /* Catch a specific exception.  */
12922       *ex = ada_catch_exception;
12923       *excep_string = exception_name;
12924     }
12925   *cond_string = cond;
12926 }
12927
12928 /* Return the name of the symbol on which we should break in order to
12929    implement a catchpoint of the EX kind.  */
12930
12931 static const char *
12932 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12933 {
12934   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12935
12936   gdb_assert (data->exception_info != NULL);
12937
12938   switch (ex)
12939     {
12940       case ada_catch_exception:
12941         return (data->exception_info->catch_exception_sym);
12942         break;
12943       case ada_catch_exception_unhandled:
12944         return (data->exception_info->catch_exception_unhandled_sym);
12945         break;
12946       case ada_catch_assert:
12947         return (data->exception_info->catch_assert_sym);
12948         break;
12949       default:
12950         internal_error (__FILE__, __LINE__,
12951                         _("unexpected catchpoint kind (%d)"), ex);
12952     }
12953 }
12954
12955 /* Return the breakpoint ops "virtual table" used for catchpoints
12956    of the EX kind.  */
12957
12958 static const struct breakpoint_ops *
12959 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12960 {
12961   switch (ex)
12962     {
12963       case ada_catch_exception:
12964         return (&catch_exception_breakpoint_ops);
12965         break;
12966       case ada_catch_exception_unhandled:
12967         return (&catch_exception_unhandled_breakpoint_ops);
12968         break;
12969       case ada_catch_assert:
12970         return (&catch_assert_breakpoint_ops);
12971         break;
12972       default:
12973         internal_error (__FILE__, __LINE__,
12974                         _("unexpected catchpoint kind (%d)"), ex);
12975     }
12976 }
12977
12978 /* Return the condition that will be used to match the current exception
12979    being raised with the exception that the user wants to catch.  This
12980    assumes that this condition is used when the inferior just triggered
12981    an exception catchpoint.
12982    
12983    The string returned is a newly allocated string that needs to be
12984    deallocated later.  */
12985
12986 static char *
12987 ada_exception_catchpoint_cond_string (const char *excep_string)
12988 {
12989   int i;
12990
12991   /* The standard exceptions are a special case.  They are defined in
12992      runtime units that have been compiled without debugging info; if
12993      EXCEP_STRING is the not-fully-qualified name of a standard
12994      exception (e.g. "constraint_error") then, during the evaluation
12995      of the condition expression, the symbol lookup on this name would
12996      *not* return this standard exception.  The catchpoint condition
12997      may then be set only on user-defined exceptions which have the
12998      same not-fully-qualified name (e.g. my_package.constraint_error).
12999
13000      To avoid this unexcepted behavior, these standard exceptions are
13001      systematically prefixed by "standard".  This means that "catch
13002      exception constraint_error" is rewritten into "catch exception
13003      standard.constraint_error".
13004
13005      If an exception named contraint_error is defined in another package of
13006      the inferior program, then the only way to specify this exception as a
13007      breakpoint condition is to use its fully-qualified named:
13008      e.g. my_package.constraint_error.  */
13009
13010   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
13011     {
13012       if (strcmp (standard_exc [i], excep_string) == 0)
13013         {
13014           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
13015                              excep_string);
13016         }
13017     }
13018   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
13019 }
13020
13021 /* Return the symtab_and_line that should be used to insert an exception
13022    catchpoint of the TYPE kind.
13023
13024    EXCEP_STRING should contain the name of a specific exception that
13025    the catchpoint should catch, or NULL otherwise.
13026
13027    ADDR_STRING returns the name of the function where the real
13028    breakpoint that implements the catchpoints is set, depending on the
13029    type of catchpoint we need to create.  */
13030
13031 static struct symtab_and_line
13032 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
13033                    char **addr_string, const struct breakpoint_ops **ops)
13034 {
13035   const char *sym_name;
13036   struct symbol *sym;
13037
13038   /* First, find out which exception support info to use.  */
13039   ada_exception_support_info_sniffer ();
13040
13041   /* Then lookup the function on which we will break in order to catch
13042      the Ada exceptions requested by the user.  */
13043   sym_name = ada_exception_sym_name (ex);
13044   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
13045
13046   /* We can assume that SYM is not NULL at this stage.  If the symbol
13047      did not exist, ada_exception_support_info_sniffer would have
13048      raised an exception.
13049
13050      Also, ada_exception_support_info_sniffer should have already
13051      verified that SYM is a function symbol.  */
13052   gdb_assert (sym != NULL);
13053   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
13054
13055   /* Set ADDR_STRING.  */
13056   *addr_string = xstrdup (sym_name);
13057
13058   /* Set OPS.  */
13059   *ops = ada_exception_breakpoint_ops (ex);
13060
13061   return find_function_start_sal (sym, 1);
13062 }
13063
13064 /* Create an Ada exception catchpoint.
13065
13066    EX_KIND is the kind of exception catchpoint to be created.
13067
13068    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
13069    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
13070    of the exception to which this catchpoint applies.  When not NULL,
13071    the string must be allocated on the heap, and its deallocation
13072    is no longer the responsibility of the caller.
13073
13074    COND_STRING, if not NULL, is the catchpoint condition.  This string
13075    must be allocated on the heap, and its deallocation is no longer
13076    the responsibility of the caller.
13077
13078    TEMPFLAG, if nonzero, means that the underlying breakpoint
13079    should be temporary.
13080
13081    FROM_TTY is the usual argument passed to all commands implementations.  */
13082
13083 void
13084 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
13085                                  enum ada_exception_catchpoint_kind ex_kind,
13086                                  char *excep_string,
13087                                  char *cond_string,
13088                                  int tempflag,
13089                                  int disabled,
13090                                  int from_tty)
13091 {
13092   struct ada_catchpoint *c;
13093   char *addr_string = NULL;
13094   const struct breakpoint_ops *ops = NULL;
13095   struct symtab_and_line sal
13096     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
13097
13098   c = XNEW (struct ada_catchpoint);
13099   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
13100                                  ops, tempflag, disabled, from_tty);
13101   c->excep_string = excep_string;
13102   create_excep_cond_exprs (c);
13103   if (cond_string != NULL)
13104     set_breakpoint_condition (&c->base, cond_string, from_tty);
13105   install_breakpoint (0, &c->base, 1);
13106 }
13107
13108 /* Implement the "catch exception" command.  */
13109
13110 static void
13111 catch_ada_exception_command (char *arg, int from_tty,
13112                              struct cmd_list_element *command)
13113 {
13114   struct gdbarch *gdbarch = get_current_arch ();
13115   int tempflag;
13116   enum ada_exception_catchpoint_kind ex_kind;
13117   char *excep_string = NULL;
13118   char *cond_string = NULL;
13119
13120   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13121
13122   if (!arg)
13123     arg = "";
13124   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
13125                                      &cond_string);
13126   create_ada_exception_catchpoint (gdbarch, ex_kind,
13127                                    excep_string, cond_string,
13128                                    tempflag, 1 /* enabled */,
13129                                    from_tty);
13130 }
13131
13132 /* Split the arguments specified in a "catch assert" command.
13133
13134    ARGS contains the command's arguments (or the empty string if
13135    no arguments were passed).
13136
13137    If ARGS contains a condition, set COND_STRING to that condition
13138    (the memory needs to be deallocated after use).  */
13139
13140 static void
13141 catch_ada_assert_command_split (char *args, char **cond_string)
13142 {
13143   args = skip_spaces (args);
13144
13145   /* Check whether a condition was provided.  */
13146   if (startswith (args, "if")
13147       && (isspace (args[2]) || args[2] == '\0'))
13148     {
13149       args += 2;
13150       args = skip_spaces (args);
13151       if (args[0] == '\0')
13152         error (_("condition missing after `if' keyword"));
13153       *cond_string = xstrdup (args);
13154     }
13155
13156   /* Otherwise, there should be no other argument at the end of
13157      the command.  */
13158   else if (args[0] != '\0')
13159     error (_("Junk at end of arguments."));
13160 }
13161
13162 /* Implement the "catch assert" command.  */
13163
13164 static void
13165 catch_assert_command (char *arg, int from_tty,
13166                       struct cmd_list_element *command)
13167 {
13168   struct gdbarch *gdbarch = get_current_arch ();
13169   int tempflag;
13170   char *cond_string = NULL;
13171
13172   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13173
13174   if (!arg)
13175     arg = "";
13176   catch_ada_assert_command_split (arg, &cond_string);
13177   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
13178                                    NULL, cond_string,
13179                                    tempflag, 1 /* enabled */,
13180                                    from_tty);
13181 }
13182
13183 /* Return non-zero if the symbol SYM is an Ada exception object.  */
13184
13185 static int
13186 ada_is_exception_sym (struct symbol *sym)
13187 {
13188   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
13189
13190   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
13191           && SYMBOL_CLASS (sym) != LOC_BLOCK
13192           && SYMBOL_CLASS (sym) != LOC_CONST
13193           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
13194           && type_name != NULL && strcmp (type_name, "exception") == 0);
13195 }
13196
13197 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
13198    Ada exception object.  This matches all exceptions except the ones
13199    defined by the Ada language.  */
13200
13201 static int
13202 ada_is_non_standard_exception_sym (struct symbol *sym)
13203 {
13204   int i;
13205
13206   if (!ada_is_exception_sym (sym))
13207     return 0;
13208
13209   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13210     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
13211       return 0;  /* A standard exception.  */
13212
13213   /* Numeric_Error is also a standard exception, so exclude it.
13214      See the STANDARD_EXC description for more details as to why
13215      this exception is not listed in that array.  */
13216   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
13217     return 0;
13218
13219   return 1;
13220 }
13221
13222 /* A helper function for qsort, comparing two struct ada_exc_info
13223    objects.
13224
13225    The comparison is determined first by exception name, and then
13226    by exception address.  */
13227
13228 static int
13229 compare_ada_exception_info (const void *a, const void *b)
13230 {
13231   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
13232   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
13233   int result;
13234
13235   result = strcmp (exc_a->name, exc_b->name);
13236   if (result != 0)
13237     return result;
13238
13239   if (exc_a->addr < exc_b->addr)
13240     return -1;
13241   if (exc_a->addr > exc_b->addr)
13242     return 1;
13243
13244   return 0;
13245 }
13246
13247 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
13248    routine, but keeping the first SKIP elements untouched.
13249
13250    All duplicates are also removed.  */
13251
13252 static void
13253 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
13254                                       int skip)
13255 {
13256   struct ada_exc_info *to_sort
13257     = VEC_address (ada_exc_info, *exceptions) + skip;
13258   int to_sort_len
13259     = VEC_length (ada_exc_info, *exceptions) - skip;
13260   int i, j;
13261
13262   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
13263          compare_ada_exception_info);
13264
13265   for (i = 1, j = 1; i < to_sort_len; i++)
13266     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
13267       to_sort[j++] = to_sort[i];
13268   to_sort_len = j;
13269   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
13270 }
13271
13272 /* A function intended as the "name_matcher" callback in the struct
13273    quick_symbol_functions' expand_symtabs_matching method.
13274
13275    SEARCH_NAME is the symbol's search name.
13276
13277    If USER_DATA is not NULL, it is a pointer to a regext_t object
13278    used to match the symbol (by natural name).  Otherwise, when USER_DATA
13279    is null, no filtering is performed, and all symbols are a positive
13280    match.  */
13281
13282 static int
13283 ada_exc_search_name_matches (const char *search_name, void *user_data)
13284 {
13285   regex_t *preg = (regex_t *) user_data;
13286
13287   if (preg == NULL)
13288     return 1;
13289
13290   /* In Ada, the symbol "search name" is a linkage name, whereas
13291      the regular expression used to do the matching refers to
13292      the natural name.  So match against the decoded name.  */
13293   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
13294 }
13295
13296 /* Add all exceptions defined by the Ada standard whose name match
13297    a regular expression.
13298
13299    If PREG is not NULL, then this regexp_t object is used to
13300    perform the symbol name matching.  Otherwise, no name-based
13301    filtering is performed.
13302
13303    EXCEPTIONS is a vector of exceptions to which matching exceptions
13304    gets pushed.  */
13305
13306 static void
13307 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13308 {
13309   int i;
13310
13311   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13312     {
13313       if (preg == NULL
13314           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
13315         {
13316           struct bound_minimal_symbol msymbol
13317             = ada_lookup_simple_minsym (standard_exc[i]);
13318
13319           if (msymbol.minsym != NULL)
13320             {
13321               struct ada_exc_info info
13322                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
13323
13324               VEC_safe_push (ada_exc_info, *exceptions, &info);
13325             }
13326         }
13327     }
13328 }
13329
13330 /* Add all Ada exceptions defined locally and accessible from the given
13331    FRAME.
13332
13333    If PREG is not NULL, then this regexp_t object is used to
13334    perform the symbol name matching.  Otherwise, no name-based
13335    filtering is performed.
13336
13337    EXCEPTIONS is a vector of exceptions to which matching exceptions
13338    gets pushed.  */
13339
13340 static void
13341 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
13342                                VEC(ada_exc_info) **exceptions)
13343 {
13344   const struct block *block = get_frame_block (frame, 0);
13345
13346   while (block != 0)
13347     {
13348       struct block_iterator iter;
13349       struct symbol *sym;
13350
13351       ALL_BLOCK_SYMBOLS (block, iter, sym)
13352         {
13353           switch (SYMBOL_CLASS (sym))
13354             {
13355             case LOC_TYPEDEF:
13356             case LOC_BLOCK:
13357             case LOC_CONST:
13358               break;
13359             default:
13360               if (ada_is_exception_sym (sym))
13361                 {
13362                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
13363                                               SYMBOL_VALUE_ADDRESS (sym)};
13364
13365                   VEC_safe_push (ada_exc_info, *exceptions, &info);
13366                 }
13367             }
13368         }
13369       if (BLOCK_FUNCTION (block) != NULL)
13370         break;
13371       block = BLOCK_SUPERBLOCK (block);
13372     }
13373 }
13374
13375 /* Add all exceptions defined globally whose name name match
13376    a regular expression, excluding standard exceptions.
13377
13378    The reason we exclude standard exceptions is that they need
13379    to be handled separately: Standard exceptions are defined inside
13380    a runtime unit which is normally not compiled with debugging info,
13381    and thus usually do not show up in our symbol search.  However,
13382    if the unit was in fact built with debugging info, we need to
13383    exclude them because they would duplicate the entry we found
13384    during the special loop that specifically searches for those
13385    standard exceptions.
13386
13387    If PREG is not NULL, then this regexp_t object is used to
13388    perform the symbol name matching.  Otherwise, no name-based
13389    filtering is performed.
13390
13391    EXCEPTIONS is a vector of exceptions to which matching exceptions
13392    gets pushed.  */
13393
13394 static void
13395 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13396 {
13397   struct objfile *objfile;
13398   struct compunit_symtab *s;
13399
13400   expand_symtabs_matching (NULL, ada_exc_search_name_matches, NULL,
13401                            VARIABLES_DOMAIN, preg);
13402
13403   ALL_COMPUNITS (objfile, s)
13404     {
13405       const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13406       int i;
13407
13408       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13409         {
13410           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13411           struct block_iterator iter;
13412           struct symbol *sym;
13413
13414           ALL_BLOCK_SYMBOLS (b, iter, sym)
13415             if (ada_is_non_standard_exception_sym (sym)
13416                 && (preg == NULL
13417                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
13418                                 0, NULL, 0) == 0))
13419               {
13420                 struct ada_exc_info info
13421                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13422
13423                 VEC_safe_push (ada_exc_info, *exceptions, &info);
13424               }
13425         }
13426     }
13427 }
13428
13429 /* Implements ada_exceptions_list with the regular expression passed
13430    as a regex_t, rather than a string.
13431
13432    If not NULL, PREG is used to filter out exceptions whose names
13433    do not match.  Otherwise, all exceptions are listed.  */
13434
13435 static VEC(ada_exc_info) *
13436 ada_exceptions_list_1 (regex_t *preg)
13437 {
13438   VEC(ada_exc_info) *result = NULL;
13439   struct cleanup *old_chain
13440     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13441   int prev_len;
13442
13443   /* First, list the known standard exceptions.  These exceptions
13444      need to be handled separately, as they are usually defined in
13445      runtime units that have been compiled without debugging info.  */
13446
13447   ada_add_standard_exceptions (preg, &result);
13448
13449   /* Next, find all exceptions whose scope is local and accessible
13450      from the currently selected frame.  */
13451
13452   if (has_stack_frames ())
13453     {
13454       prev_len = VEC_length (ada_exc_info, result);
13455       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13456                                      &result);
13457       if (VEC_length (ada_exc_info, result) > prev_len)
13458         sort_remove_dups_ada_exceptions_list (&result, prev_len);
13459     }
13460
13461   /* Add all exceptions whose scope is global.  */
13462
13463   prev_len = VEC_length (ada_exc_info, result);
13464   ada_add_global_exceptions (preg, &result);
13465   if (VEC_length (ada_exc_info, result) > prev_len)
13466     sort_remove_dups_ada_exceptions_list (&result, prev_len);
13467
13468   discard_cleanups (old_chain);
13469   return result;
13470 }
13471
13472 /* Return a vector of ada_exc_info.
13473
13474    If REGEXP is NULL, all exceptions are included in the result.
13475    Otherwise, it should contain a valid regular expression,
13476    and only the exceptions whose names match that regular expression
13477    are included in the result.
13478
13479    The exceptions are sorted in the following order:
13480      - Standard exceptions (defined by the Ada language), in
13481        alphabetical order;
13482      - Exceptions only visible from the current frame, in
13483        alphabetical order;
13484      - Exceptions whose scope is global, in alphabetical order.  */
13485
13486 VEC(ada_exc_info) *
13487 ada_exceptions_list (const char *regexp)
13488 {
13489   VEC(ada_exc_info) *result = NULL;
13490   struct cleanup *old_chain = NULL;
13491   regex_t reg;
13492
13493   if (regexp != NULL)
13494     old_chain = compile_rx_or_error (&reg, regexp,
13495                                      _("invalid regular expression"));
13496
13497   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
13498
13499   if (old_chain != NULL)
13500     do_cleanups (old_chain);
13501   return result;
13502 }
13503
13504 /* Implement the "info exceptions" command.  */
13505
13506 static void
13507 info_exceptions_command (char *regexp, int from_tty)
13508 {
13509   VEC(ada_exc_info) *exceptions;
13510   struct cleanup *cleanup;
13511   struct gdbarch *gdbarch = get_current_arch ();
13512   int ix;
13513   struct ada_exc_info *info;
13514
13515   exceptions = ada_exceptions_list (regexp);
13516   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13517
13518   if (regexp != NULL)
13519     printf_filtered
13520       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13521   else
13522     printf_filtered (_("All defined Ada exceptions:\n"));
13523
13524   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13525     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13526
13527   do_cleanups (cleanup);
13528 }
13529
13530                                 /* Operators */
13531 /* Information about operators given special treatment in functions
13532    below.  */
13533 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
13534
13535 #define ADA_OPERATORS \
13536     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13537     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13538     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13539     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13540     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13541     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13542     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13543     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13544     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13545     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13546     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13547     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13548     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13549     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13550     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
13551     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13552     OP_DEFN (OP_OTHERS, 1, 1, 0) \
13553     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13554     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
13555
13556 static void
13557 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13558                      int *argsp)
13559 {
13560   switch (exp->elts[pc - 1].opcode)
13561     {
13562     default:
13563       operator_length_standard (exp, pc, oplenp, argsp);
13564       break;
13565
13566 #define OP_DEFN(op, len, args, binop) \
13567     case op: *oplenp = len; *argsp = args; break;
13568       ADA_OPERATORS;
13569 #undef OP_DEFN
13570
13571     case OP_AGGREGATE:
13572       *oplenp = 3;
13573       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13574       break;
13575
13576     case OP_CHOICES:
13577       *oplenp = 3;
13578       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13579       break;
13580     }
13581 }
13582
13583 /* Implementation of the exp_descriptor method operator_check.  */
13584
13585 static int
13586 ada_operator_check (struct expression *exp, int pos,
13587                     int (*objfile_func) (struct objfile *objfile, void *data),
13588                     void *data)
13589 {
13590   const union exp_element *const elts = exp->elts;
13591   struct type *type = NULL;
13592
13593   switch (elts[pos].opcode)
13594     {
13595       case UNOP_IN_RANGE:
13596       case UNOP_QUAL:
13597         type = elts[pos + 1].type;
13598         break;
13599
13600       default:
13601         return operator_check_standard (exp, pos, objfile_func, data);
13602     }
13603
13604   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13605
13606   if (type && TYPE_OBJFILE (type)
13607       && (*objfile_func) (TYPE_OBJFILE (type), data))
13608     return 1;
13609
13610   return 0;
13611 }
13612
13613 static char *
13614 ada_op_name (enum exp_opcode opcode)
13615 {
13616   switch (opcode)
13617     {
13618     default:
13619       return op_name_standard (opcode);
13620
13621 #define OP_DEFN(op, len, args, binop) case op: return #op;
13622       ADA_OPERATORS;
13623 #undef OP_DEFN
13624
13625     case OP_AGGREGATE:
13626       return "OP_AGGREGATE";
13627     case OP_CHOICES:
13628       return "OP_CHOICES";
13629     case OP_NAME:
13630       return "OP_NAME";
13631     }
13632 }
13633
13634 /* As for operator_length, but assumes PC is pointing at the first
13635    element of the operator, and gives meaningful results only for the 
13636    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13637
13638 static void
13639 ada_forward_operator_length (struct expression *exp, int pc,
13640                              int *oplenp, int *argsp)
13641 {
13642   switch (exp->elts[pc].opcode)
13643     {
13644     default:
13645       *oplenp = *argsp = 0;
13646       break;
13647
13648 #define OP_DEFN(op, len, args, binop) \
13649     case op: *oplenp = len; *argsp = args; break;
13650       ADA_OPERATORS;
13651 #undef OP_DEFN
13652
13653     case OP_AGGREGATE:
13654       *oplenp = 3;
13655       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13656       break;
13657
13658     case OP_CHOICES:
13659       *oplenp = 3;
13660       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13661       break;
13662
13663     case OP_STRING:
13664     case OP_NAME:
13665       {
13666         int len = longest_to_int (exp->elts[pc + 1].longconst);
13667
13668         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13669         *argsp = 0;
13670         break;
13671       }
13672     }
13673 }
13674
13675 static int
13676 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13677 {
13678   enum exp_opcode op = exp->elts[elt].opcode;
13679   int oplen, nargs;
13680   int pc = elt;
13681   int i;
13682
13683   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13684
13685   switch (op)
13686     {
13687       /* Ada attributes ('Foo).  */
13688     case OP_ATR_FIRST:
13689     case OP_ATR_LAST:
13690     case OP_ATR_LENGTH:
13691     case OP_ATR_IMAGE:
13692     case OP_ATR_MAX:
13693     case OP_ATR_MIN:
13694     case OP_ATR_MODULUS:
13695     case OP_ATR_POS:
13696     case OP_ATR_SIZE:
13697     case OP_ATR_TAG:
13698     case OP_ATR_VAL:
13699       break;
13700
13701     case UNOP_IN_RANGE:
13702     case UNOP_QUAL:
13703       /* XXX: gdb_sprint_host_address, type_sprint */
13704       fprintf_filtered (stream, _("Type @"));
13705       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13706       fprintf_filtered (stream, " (");
13707       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13708       fprintf_filtered (stream, ")");
13709       break;
13710     case BINOP_IN_BOUNDS:
13711       fprintf_filtered (stream, " (%d)",
13712                         longest_to_int (exp->elts[pc + 2].longconst));
13713       break;
13714     case TERNOP_IN_RANGE:
13715       break;
13716
13717     case OP_AGGREGATE:
13718     case OP_OTHERS:
13719     case OP_DISCRETE_RANGE:
13720     case OP_POSITIONAL:
13721     case OP_CHOICES:
13722       break;
13723
13724     case OP_NAME:
13725     case OP_STRING:
13726       {
13727         char *name = &exp->elts[elt + 2].string;
13728         int len = longest_to_int (exp->elts[elt + 1].longconst);
13729
13730         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13731         break;
13732       }
13733
13734     default:
13735       return dump_subexp_body_standard (exp, stream, elt);
13736     }
13737
13738   elt += oplen;
13739   for (i = 0; i < nargs; i += 1)
13740     elt = dump_subexp (exp, stream, elt);
13741
13742   return elt;
13743 }
13744
13745 /* The Ada extension of print_subexp (q.v.).  */
13746
13747 static void
13748 ada_print_subexp (struct expression *exp, int *pos,
13749                   struct ui_file *stream, enum precedence prec)
13750 {
13751   int oplen, nargs, i;
13752   int pc = *pos;
13753   enum exp_opcode op = exp->elts[pc].opcode;
13754
13755   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13756
13757   *pos += oplen;
13758   switch (op)
13759     {
13760     default:
13761       *pos -= oplen;
13762       print_subexp_standard (exp, pos, stream, prec);
13763       return;
13764
13765     case OP_VAR_VALUE:
13766       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13767       return;
13768
13769     case BINOP_IN_BOUNDS:
13770       /* XXX: sprint_subexp */
13771       print_subexp (exp, pos, stream, PREC_SUFFIX);
13772       fputs_filtered (" in ", stream);
13773       print_subexp (exp, pos, stream, PREC_SUFFIX);
13774       fputs_filtered ("'range", stream);
13775       if (exp->elts[pc + 1].longconst > 1)
13776         fprintf_filtered (stream, "(%ld)",
13777                           (long) exp->elts[pc + 1].longconst);
13778       return;
13779
13780     case TERNOP_IN_RANGE:
13781       if (prec >= PREC_EQUAL)
13782         fputs_filtered ("(", stream);
13783       /* XXX: sprint_subexp */
13784       print_subexp (exp, pos, stream, PREC_SUFFIX);
13785       fputs_filtered (" in ", stream);
13786       print_subexp (exp, pos, stream, PREC_EQUAL);
13787       fputs_filtered (" .. ", stream);
13788       print_subexp (exp, pos, stream, PREC_EQUAL);
13789       if (prec >= PREC_EQUAL)
13790         fputs_filtered (")", stream);
13791       return;
13792
13793     case OP_ATR_FIRST:
13794     case OP_ATR_LAST:
13795     case OP_ATR_LENGTH:
13796     case OP_ATR_IMAGE:
13797     case OP_ATR_MAX:
13798     case OP_ATR_MIN:
13799     case OP_ATR_MODULUS:
13800     case OP_ATR_POS:
13801     case OP_ATR_SIZE:
13802     case OP_ATR_TAG:
13803     case OP_ATR_VAL:
13804       if (exp->elts[*pos].opcode == OP_TYPE)
13805         {
13806           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13807             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13808                            &type_print_raw_options);
13809           *pos += 3;
13810         }
13811       else
13812         print_subexp (exp, pos, stream, PREC_SUFFIX);
13813       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13814       if (nargs > 1)
13815         {
13816           int tem;
13817
13818           for (tem = 1; tem < nargs; tem += 1)
13819             {
13820               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13821               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13822             }
13823           fputs_filtered (")", stream);
13824         }
13825       return;
13826
13827     case UNOP_QUAL:
13828       type_print (exp->elts[pc + 1].type, "", stream, 0);
13829       fputs_filtered ("'(", stream);
13830       print_subexp (exp, pos, stream, PREC_PREFIX);
13831       fputs_filtered (")", stream);
13832       return;
13833
13834     case UNOP_IN_RANGE:
13835       /* XXX: sprint_subexp */
13836       print_subexp (exp, pos, stream, PREC_SUFFIX);
13837       fputs_filtered (" in ", stream);
13838       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13839                      &type_print_raw_options);
13840       return;
13841
13842     case OP_DISCRETE_RANGE:
13843       print_subexp (exp, pos, stream, PREC_SUFFIX);
13844       fputs_filtered ("..", stream);
13845       print_subexp (exp, pos, stream, PREC_SUFFIX);
13846       return;
13847
13848     case OP_OTHERS:
13849       fputs_filtered ("others => ", stream);
13850       print_subexp (exp, pos, stream, PREC_SUFFIX);
13851       return;
13852
13853     case OP_CHOICES:
13854       for (i = 0; i < nargs-1; i += 1)
13855         {
13856           if (i > 0)
13857             fputs_filtered ("|", stream);
13858           print_subexp (exp, pos, stream, PREC_SUFFIX);
13859         }
13860       fputs_filtered (" => ", stream);
13861       print_subexp (exp, pos, stream, PREC_SUFFIX);
13862       return;
13863       
13864     case OP_POSITIONAL:
13865       print_subexp (exp, pos, stream, PREC_SUFFIX);
13866       return;
13867
13868     case OP_AGGREGATE:
13869       fputs_filtered ("(", stream);
13870       for (i = 0; i < nargs; i += 1)
13871         {
13872           if (i > 0)
13873             fputs_filtered (", ", stream);
13874           print_subexp (exp, pos, stream, PREC_SUFFIX);
13875         }
13876       fputs_filtered (")", stream);
13877       return;
13878     }
13879 }
13880
13881 /* Table mapping opcodes into strings for printing operators
13882    and precedences of the operators.  */
13883
13884 static const struct op_print ada_op_print_tab[] = {
13885   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13886   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13887   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13888   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13889   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13890   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13891   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13892   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13893   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13894   {">=", BINOP_GEQ, PREC_ORDER, 0},
13895   {">", BINOP_GTR, PREC_ORDER, 0},
13896   {"<", BINOP_LESS, PREC_ORDER, 0},
13897   {">>", BINOP_RSH, PREC_SHIFT, 0},
13898   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13899   {"+", BINOP_ADD, PREC_ADD, 0},
13900   {"-", BINOP_SUB, PREC_ADD, 0},
13901   {"&", BINOP_CONCAT, PREC_ADD, 0},
13902   {"*", BINOP_MUL, PREC_MUL, 0},
13903   {"/", BINOP_DIV, PREC_MUL, 0},
13904   {"rem", BINOP_REM, PREC_MUL, 0},
13905   {"mod", BINOP_MOD, PREC_MUL, 0},
13906   {"**", BINOP_EXP, PREC_REPEAT, 0},
13907   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13908   {"-", UNOP_NEG, PREC_PREFIX, 0},
13909   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13910   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13911   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13912   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13913   {".all", UNOP_IND, PREC_SUFFIX, 1},
13914   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13915   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13916   {NULL, OP_NULL, PREC_SUFFIX, 0}
13917 };
13918 \f
13919 enum ada_primitive_types {
13920   ada_primitive_type_int,
13921   ada_primitive_type_long,
13922   ada_primitive_type_short,
13923   ada_primitive_type_char,
13924   ada_primitive_type_float,
13925   ada_primitive_type_double,
13926   ada_primitive_type_void,
13927   ada_primitive_type_long_long,
13928   ada_primitive_type_long_double,
13929   ada_primitive_type_natural,
13930   ada_primitive_type_positive,
13931   ada_primitive_type_system_address,
13932   nr_ada_primitive_types
13933 };
13934
13935 static void
13936 ada_language_arch_info (struct gdbarch *gdbarch,
13937                         struct language_arch_info *lai)
13938 {
13939   const struct builtin_type *builtin = builtin_type (gdbarch);
13940
13941   lai->primitive_type_vector
13942     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13943                               struct type *);
13944
13945   lai->primitive_type_vector [ada_primitive_type_int]
13946     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13947                          0, "integer");
13948   lai->primitive_type_vector [ada_primitive_type_long]
13949     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13950                          0, "long_integer");
13951   lai->primitive_type_vector [ada_primitive_type_short]
13952     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13953                          0, "short_integer");
13954   lai->string_char_type
13955     = lai->primitive_type_vector [ada_primitive_type_char]
13956     = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13957   lai->primitive_type_vector [ada_primitive_type_float]
13958     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13959                        "float", NULL);
13960   lai->primitive_type_vector [ada_primitive_type_double]
13961     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13962                        "long_float", NULL);
13963   lai->primitive_type_vector [ada_primitive_type_long_long]
13964     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13965                          0, "long_long_integer");
13966   lai->primitive_type_vector [ada_primitive_type_long_double]
13967     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13968                        "long_long_float", NULL);
13969   lai->primitive_type_vector [ada_primitive_type_natural]
13970     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13971                          0, "natural");
13972   lai->primitive_type_vector [ada_primitive_type_positive]
13973     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13974                          0, "positive");
13975   lai->primitive_type_vector [ada_primitive_type_void]
13976     = builtin->builtin_void;
13977
13978   lai->primitive_type_vector [ada_primitive_type_system_address]
13979     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13980   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13981     = "system__address";
13982
13983   lai->bool_type_symbol = NULL;
13984   lai->bool_type_default = builtin->builtin_bool;
13985 }
13986 \f
13987                                 /* Language vector */
13988
13989 /* Not really used, but needed in the ada_language_defn.  */
13990
13991 static void
13992 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13993 {
13994   ada_emit_char (c, type, stream, quoter, 1);
13995 }
13996
13997 static int
13998 parse (struct parser_state *ps)
13999 {
14000   warnings_issued = 0;
14001   return ada_parse (ps);
14002 }
14003
14004 static const struct exp_descriptor ada_exp_descriptor = {
14005   ada_print_subexp,
14006   ada_operator_length,
14007   ada_operator_check,
14008   ada_op_name,
14009   ada_dump_subexp_body,
14010   ada_evaluate_subexp
14011 };
14012
14013 /* Implement the "la_get_symbol_name_cmp" language_defn method
14014    for Ada.  */
14015
14016 static symbol_name_cmp_ftype
14017 ada_get_symbol_name_cmp (const char *lookup_name)
14018 {
14019   if (should_use_wild_match (lookup_name))
14020     return wild_match;
14021   else
14022     return compare_names;
14023 }
14024
14025 /* Implement the "la_read_var_value" language_defn method for Ada.  */
14026
14027 static struct value *
14028 ada_read_var_value (struct symbol *var, const struct block *var_block,
14029                     struct frame_info *frame)
14030 {
14031   const struct block *frame_block = NULL;
14032   struct symbol *renaming_sym = NULL;
14033
14034   /* The only case where default_read_var_value is not sufficient
14035      is when VAR is a renaming...  */
14036   if (frame)
14037     frame_block = get_frame_block (frame, NULL);
14038   if (frame_block)
14039     renaming_sym = ada_find_renaming_symbol (var, frame_block);
14040   if (renaming_sym != NULL)
14041     return ada_read_renaming_var_value (renaming_sym, frame_block);
14042
14043   /* This is a typical case where we expect the default_read_var_value
14044      function to work.  */
14045   return default_read_var_value (var, var_block, frame);
14046 }
14047
14048 const struct language_defn ada_language_defn = {
14049   "ada",                        /* Language name */
14050   "Ada",
14051   language_ada,
14052   range_check_off,
14053   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
14054                                    that's not quite what this means.  */
14055   array_row_major,
14056   macro_expansion_no,
14057   &ada_exp_descriptor,
14058   parse,
14059   ada_yyerror,
14060   resolve,
14061   ada_printchar,                /* Print a character constant */
14062   ada_printstr,                 /* Function to print string constant */
14063   emit_char,                    /* Function to print single char (not used) */
14064   ada_print_type,               /* Print a type using appropriate syntax */
14065   ada_print_typedef,            /* Print a typedef using appropriate syntax */
14066   ada_val_print,                /* Print a value using appropriate syntax */
14067   ada_value_print,              /* Print a top-level value */
14068   ada_read_var_value,           /* la_read_var_value */
14069   NULL,                         /* Language specific skip_trampoline */
14070   NULL,                         /* name_of_this */
14071   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
14072   basic_lookup_transparent_type,        /* lookup_transparent_type */
14073   ada_la_decode,                /* Language specific symbol demangler */
14074   NULL,                         /* Language specific
14075                                    class_name_from_physname */
14076   ada_op_print_tab,             /* expression operators for printing */
14077   0,                            /* c-style arrays */
14078   1,                            /* String lower bound */
14079   ada_get_gdb_completer_word_break_characters,
14080   ada_make_symbol_completion_list,
14081   ada_language_arch_info,
14082   ada_print_array_index,
14083   default_pass_by_reference,
14084   c_get_string,
14085   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
14086   ada_iterate_over_symbols,
14087   &ada_varobj_ops,
14088   NULL,
14089   NULL,
14090   LANG_MAGIC
14091 };
14092
14093 /* Provide a prototype to silence -Wmissing-prototypes.  */
14094 extern initialize_file_ftype _initialize_ada_language;
14095
14096 /* Command-list for the "set/show ada" prefix command.  */
14097 static struct cmd_list_element *set_ada_list;
14098 static struct cmd_list_element *show_ada_list;
14099
14100 /* Implement the "set ada" prefix command.  */
14101
14102 static void
14103 set_ada_command (char *arg, int from_tty)
14104 {
14105   printf_unfiltered (_(\
14106 "\"set ada\" must be followed by the name of a setting.\n"));
14107   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
14108 }
14109
14110 /* Implement the "show ada" prefix command.  */
14111
14112 static void
14113 show_ada_command (char *args, int from_tty)
14114 {
14115   cmd_show_list (show_ada_list, from_tty, "");
14116 }
14117
14118 static void
14119 initialize_ada_catchpoint_ops (void)
14120 {
14121   struct breakpoint_ops *ops;
14122
14123   initialize_breakpoint_ops ();
14124
14125   ops = &catch_exception_breakpoint_ops;
14126   *ops = bkpt_breakpoint_ops;
14127   ops->dtor = dtor_catch_exception;
14128   ops->allocate_location = allocate_location_catch_exception;
14129   ops->re_set = re_set_catch_exception;
14130   ops->check_status = check_status_catch_exception;
14131   ops->print_it = print_it_catch_exception;
14132   ops->print_one = print_one_catch_exception;
14133   ops->print_mention = print_mention_catch_exception;
14134   ops->print_recreate = print_recreate_catch_exception;
14135
14136   ops = &catch_exception_unhandled_breakpoint_ops;
14137   *ops = bkpt_breakpoint_ops;
14138   ops->dtor = dtor_catch_exception_unhandled;
14139   ops->allocate_location = allocate_location_catch_exception_unhandled;
14140   ops->re_set = re_set_catch_exception_unhandled;
14141   ops->check_status = check_status_catch_exception_unhandled;
14142   ops->print_it = print_it_catch_exception_unhandled;
14143   ops->print_one = print_one_catch_exception_unhandled;
14144   ops->print_mention = print_mention_catch_exception_unhandled;
14145   ops->print_recreate = print_recreate_catch_exception_unhandled;
14146
14147   ops = &catch_assert_breakpoint_ops;
14148   *ops = bkpt_breakpoint_ops;
14149   ops->dtor = dtor_catch_assert;
14150   ops->allocate_location = allocate_location_catch_assert;
14151   ops->re_set = re_set_catch_assert;
14152   ops->check_status = check_status_catch_assert;
14153   ops->print_it = print_it_catch_assert;
14154   ops->print_one = print_one_catch_assert;
14155   ops->print_mention = print_mention_catch_assert;
14156   ops->print_recreate = print_recreate_catch_assert;
14157 }
14158
14159 /* This module's 'new_objfile' observer.  */
14160
14161 static void
14162 ada_new_objfile_observer (struct objfile *objfile)
14163 {
14164   ada_clear_symbol_cache ();
14165 }
14166
14167 /* This module's 'free_objfile' observer.  */
14168
14169 static void
14170 ada_free_objfile_observer (struct objfile *objfile)
14171 {
14172   ada_clear_symbol_cache ();
14173 }
14174
14175 void
14176 _initialize_ada_language (void)
14177 {
14178   add_language (&ada_language_defn);
14179
14180   initialize_ada_catchpoint_ops ();
14181
14182   add_prefix_cmd ("ada", no_class, set_ada_command,
14183                   _("Prefix command for changing Ada-specfic settings"),
14184                   &set_ada_list, "set ada ", 0, &setlist);
14185
14186   add_prefix_cmd ("ada", no_class, show_ada_command,
14187                   _("Generic command for showing Ada-specific settings."),
14188                   &show_ada_list, "show ada ", 0, &showlist);
14189
14190   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14191                            &trust_pad_over_xvs, _("\
14192 Enable or disable an optimization trusting PAD types over XVS types"), _("\
14193 Show whether an optimization trusting PAD types over XVS types is activated"),
14194                            _("\
14195 This is related to the encoding used by the GNAT compiler.  The debugger\n\
14196 should normally trust the contents of PAD types, but certain older versions\n\
14197 of GNAT have a bug that sometimes causes the information in the PAD type\n\
14198 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
14199 work around this bug.  It is always safe to turn this option \"off\", but\n\
14200 this incurs a slight performance penalty, so it is recommended to NOT change\n\
14201 this option to \"off\" unless necessary."),
14202                             NULL, NULL, &set_ada_list, &show_ada_list);
14203
14204   add_setshow_boolean_cmd ("print-signatures", class_vars,
14205                            &print_signatures, _("\
14206 Enable or disable the output of formal and return types for functions in the \
14207 overloads selection menu"), _("\
14208 Show whether the output of formal and return types for functions in the \
14209 overloads selection menu is activated"),
14210                            NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14211
14212   add_catch_command ("exception", _("\
14213 Catch Ada exceptions, when raised.\n\
14214 With an argument, catch only exceptions with the given name."),
14215                      catch_ada_exception_command,
14216                      NULL,
14217                      CATCH_PERMANENT,
14218                      CATCH_TEMPORARY);
14219   add_catch_command ("assert", _("\
14220 Catch failed Ada assertions, when raised.\n\
14221 With an argument, catch only exceptions with the given name."),
14222                      catch_assert_command,
14223                      NULL,
14224                      CATCH_PERMANENT,
14225                      CATCH_TEMPORARY);
14226
14227   varsize_limit = 65536;
14228
14229   add_info ("exceptions", info_exceptions_command,
14230             _("\
14231 List all Ada exception names.\n\
14232 If a regular expression is passed as an argument, only those matching\n\
14233 the regular expression are listed."));
14234
14235   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
14236                   _("Set Ada maintenance-related variables."),
14237                   &maint_set_ada_cmdlist, "maintenance set ada ",
14238                   0/*allow-unknown*/, &maintenance_set_cmdlist);
14239
14240   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
14241                   _("Show Ada maintenance-related variables"),
14242                   &maint_show_ada_cmdlist, "maintenance show ada ",
14243                   0/*allow-unknown*/, &maintenance_show_cmdlist);
14244
14245   add_setshow_boolean_cmd
14246     ("ignore-descriptive-types", class_maintenance,
14247      &ada_ignore_descriptive_types_p,
14248      _("Set whether descriptive types generated by GNAT should be ignored."),
14249      _("Show whether descriptive types generated by GNAT should be ignored."),
14250      _("\
14251 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14252 DWARF attribute."),
14253      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14254
14255   obstack_init (&symbol_list_obstack);
14256
14257   decoded_names_store = htab_create_alloc
14258     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
14259      NULL, xcalloc, xfree);
14260
14261   /* The ada-lang observers.  */
14262   observer_attach_new_objfile (ada_new_objfile_observer);
14263   observer_attach_free_objfile (ada_free_objfile_observer);
14264   observer_attach_inferior_exit (ada_inferior_exit);
14265
14266   /* Setup various context-specific data.  */
14267   ada_inferior_data
14268     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
14269   ada_pspace_data_handle
14270     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14271 }