handle VLA in a struct or union
[external/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3    Copyright (C) 1992-2014 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 <stdio.h>
23 #include <string.h>
24 #include <ctype.h>
25 #include <stdarg.h>
26 #include "demangle.h"
27 #include "gdb_regex.h"
28 #include "frame.h"
29 #include "symtab.h"
30 #include "gdbtypes.h"
31 #include "gdbcmd.h"
32 #include "expression.h"
33 #include "parser-defs.h"
34 #include "language.h"
35 #include "varobj.h"
36 #include "c-lang.h"
37 #include "inferior.h"
38 #include "symfile.h"
39 #include "objfiles.h"
40 #include "breakpoint.h"
41 #include "gdbcore.h"
42 #include "hashtab.h"
43 #include "gdb_obstack.h"
44 #include "ada-lang.h"
45 #include "completer.h"
46 #include <sys/stat.h>
47 #include "ui-out.h"
48 #include "block.h"
49 #include "infcall.h"
50 #include "dictionary.h"
51 #include "exceptions.h"
52 #include "annotate.h"
53 #include "valprint.h"
54 #include "source.h"
55 #include "observer.h"
56 #include "vec.h"
57 #include "stack.h"
58 #include "gdb_vecs.h"
59 #include "typeprint.h"
60
61 #include "psymtab.h"
62 #include "value.h"
63 #include "mi/mi-common.h"
64 #include "arch-utils.h"
65 #include "cli/cli-utils.h"
66
67 /* Define whether or not the C operator '/' truncates towards zero for
68    differently signed operands (truncation direction is undefined in C).
69    Copied from valarith.c.  */
70
71 #ifndef TRUNCATION_TOWARDS_ZERO
72 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
73 #endif
74
75 static struct type *desc_base_type (struct type *);
76
77 static struct type *desc_bounds_type (struct type *);
78
79 static struct value *desc_bounds (struct value *);
80
81 static int fat_pntr_bounds_bitpos (struct type *);
82
83 static int fat_pntr_bounds_bitsize (struct type *);
84
85 static struct type *desc_data_target_type (struct type *);
86
87 static struct value *desc_data (struct value *);
88
89 static int fat_pntr_data_bitpos (struct type *);
90
91 static int fat_pntr_data_bitsize (struct type *);
92
93 static struct value *desc_one_bound (struct value *, int, int);
94
95 static int desc_bound_bitpos (struct type *, int, int);
96
97 static int desc_bound_bitsize (struct type *, int, int);
98
99 static struct type *desc_index_type (struct type *, int);
100
101 static int desc_arity (struct type *);
102
103 static int ada_type_match (struct type *, struct type *, int);
104
105 static int ada_args_match (struct symbol *, struct value **, int);
106
107 static int full_match (const char *, const char *);
108
109 static struct value *make_array_descriptor (struct type *, struct value *);
110
111 static void ada_add_block_symbols (struct obstack *,
112                                    const struct block *, const char *,
113                                    domain_enum, struct objfile *, int);
114
115 static int is_nonfunction (struct ada_symbol_info *, int);
116
117 static void add_defn_to_vec (struct obstack *, struct symbol *,
118                              const struct block *);
119
120 static int num_defns_collected (struct obstack *);
121
122 static struct ada_symbol_info *defns_collected (struct obstack *, int);
123
124 static struct value *resolve_subexp (struct expression **, int *, int,
125                                      struct type *);
126
127 static void replace_operator_with_call (struct expression **, int, int, int,
128                                         struct symbol *, 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 (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 ada_symbol_info *, int,
231                                  struct value **, int, const char *,
232                                  struct type *);
233
234 static int ada_is_direct_array_type (struct type *);
235
236 static void ada_language_arch_info (struct gdbarch *,
237                                     struct language_arch_info *);
238
239 static void check_size (const struct type *);
240
241 static struct value *ada_index_struct_field (int, struct value *, int,
242                                              struct type *);
243
244 static struct value *assign_aggregate (struct value *, struct value *, 
245                                        struct expression *,
246                                        int *, enum noside);
247
248 static void aggregate_assign_from_choices (struct value *, struct value *, 
249                                            struct expression *,
250                                            int *, LONGEST *, int *,
251                                            int, LONGEST, LONGEST);
252
253 static void aggregate_assign_positional (struct value *, struct value *,
254                                          struct expression *,
255                                          int *, LONGEST *, int *, int,
256                                          LONGEST, LONGEST);
257
258
259 static void aggregate_assign_others (struct value *, struct value *,
260                                      struct expression *,
261                                      int *, LONGEST *, int, LONGEST, LONGEST);
262
263
264 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
265
266
267 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
268                                           int *, enum noside);
269
270 static void ada_forward_operator_length (struct expression *, int, int *,
271                                          int *);
272
273 static struct type *ada_find_any_type (const char *name);
274 \f
275
276 /* The result of a symbol lookup to be stored in our symbol cache.  */
277
278 struct cache_entry
279 {
280   /* The name used to perform the lookup.  */
281   const char *name;
282   /* The namespace used during the lookup.  */
283   domain_enum namespace;
284   /* The symbol returned by the lookup, or NULL if no matching symbol
285      was found.  */
286   struct symbol *sym;
287   /* The block where the symbol was found, or NULL if no matching
288      symbol was found.  */
289   const struct block *block;
290   /* A pointer to the next entry with the same hash.  */
291   struct cache_entry *next;
292 };
293
294 /* The Ada symbol cache, used to store the result of Ada-mode symbol
295    lookups in the course of executing the user's commands.
296
297    The cache is implemented using a simple, fixed-sized hash.
298    The size is fixed on the grounds that there are not likely to be
299    all that many symbols looked up during any given session, regardless
300    of the size of the symbol table.  If we decide to go to a resizable
301    table, let's just use the stuff from libiberty instead.  */
302
303 #define HASH_SIZE 1009
304
305 struct ada_symbol_cache
306 {
307   /* An obstack used to store the entries in our cache.  */
308   struct obstack cache_space;
309
310   /* The root of the hash table used to implement our symbol cache.  */
311   struct cache_entry *root[HASH_SIZE];
312 };
313
314 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
315
316 /* Maximum-sized dynamic type.  */
317 static unsigned int varsize_limit;
318
319 /* FIXME: brobecker/2003-09-17: No longer a const because it is
320    returned by a function that does not return a const char *.  */
321 static char *ada_completer_word_break_characters =
322 #ifdef VMS
323   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
324 #else
325   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
326 #endif
327
328 /* The name of the symbol to use to get the name of the main subprogram.  */
329 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
330   = "__gnat_ada_main_program_name";
331
332 /* Limit on the number of warnings to raise per expression evaluation.  */
333 static int warning_limit = 2;
334
335 /* Number of warning messages issued; reset to 0 by cleanups after
336    expression evaluation.  */
337 static int warnings_issued = 0;
338
339 static const char *known_runtime_file_name_patterns[] = {
340   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
341 };
342
343 static const char *known_auxiliary_function_name_patterns[] = {
344   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
345 };
346
347 /* Space for allocating results of ada_lookup_symbol_list.  */
348 static struct obstack symbol_list_obstack;
349
350 /* Maintenance-related settings for this module.  */
351
352 static struct cmd_list_element *maint_set_ada_cmdlist;
353 static struct cmd_list_element *maint_show_ada_cmdlist;
354
355 /* Implement the "maintenance set ada" (prefix) command.  */
356
357 static void
358 maint_set_ada_cmd (char *args, int from_tty)
359 {
360   help_list (maint_set_ada_cmdlist, "maintenance set ada ", -1, gdb_stdout);
361 }
362
363 /* Implement the "maintenance show ada" (prefix) command.  */
364
365 static void
366 maint_show_ada_cmd (char *args, int from_tty)
367 {
368   cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
369 }
370
371 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
372
373 static int ada_ignore_descriptive_types_p = 0;
374
375                         /* Inferior-specific data.  */
376
377 /* Per-inferior data for this module.  */
378
379 struct ada_inferior_data
380 {
381   /* The ada__tags__type_specific_data type, which is used when decoding
382      tagged types.  With older versions of GNAT, this type was directly
383      accessible through a component ("tsd") in the object tag.  But this
384      is no longer the case, so we cache it for each inferior.  */
385   struct type *tsd_type;
386
387   /* The exception_support_info data.  This data is used to determine
388      how to implement support for Ada exception catchpoints in a given
389      inferior.  */
390   const struct exception_support_info *exception_info;
391 };
392
393 /* Our key to this module's inferior data.  */
394 static const struct inferior_data *ada_inferior_data;
395
396 /* A cleanup routine for our inferior data.  */
397 static void
398 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
399 {
400   struct ada_inferior_data *data;
401
402   data = inferior_data (inf, ada_inferior_data);
403   if (data != NULL)
404     xfree (data);
405 }
406
407 /* Return our inferior data for the given inferior (INF).
408
409    This function always returns a valid pointer to an allocated
410    ada_inferior_data structure.  If INF's inferior data has not
411    been previously set, this functions creates a new one with all
412    fields set to zero, sets INF's inferior to it, and then returns
413    a pointer to that newly allocated ada_inferior_data.  */
414
415 static struct ada_inferior_data *
416 get_ada_inferior_data (struct inferior *inf)
417 {
418   struct ada_inferior_data *data;
419
420   data = inferior_data (inf, ada_inferior_data);
421   if (data == NULL)
422     {
423       data = XCNEW (struct ada_inferior_data);
424       set_inferior_data (inf, ada_inferior_data, data);
425     }
426
427   return data;
428 }
429
430 /* Perform all necessary cleanups regarding our module's inferior data
431    that is required after the inferior INF just exited.  */
432
433 static void
434 ada_inferior_exit (struct inferior *inf)
435 {
436   ada_inferior_data_cleanup (inf, NULL);
437   set_inferior_data (inf, ada_inferior_data, NULL);
438 }
439
440
441                         /* program-space-specific data.  */
442
443 /* This module's per-program-space data.  */
444 struct ada_pspace_data
445 {
446   /* The Ada symbol cache.  */
447   struct ada_symbol_cache *sym_cache;
448 };
449
450 /* Key to our per-program-space data.  */
451 static const struct program_space_data *ada_pspace_data_handle;
452
453 /* Return this module's data for the given program space (PSPACE).
454    If not is found, add a zero'ed one now.
455
456    This function always returns a valid object.  */
457
458 static struct ada_pspace_data *
459 get_ada_pspace_data (struct program_space *pspace)
460 {
461   struct ada_pspace_data *data;
462
463   data = 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 = 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 = strrchr (decoded_name, '.');
530
531   if (result != NULL)
532     result++;                   /* Skip the dot...  */
533   else
534     result = decoded_name;
535
536   return result;
537 }
538
539 /* Return a string starting with '<', followed by STR, and '>'.
540    The result is good until the next call.  */
541
542 static char *
543 add_angle_brackets (const char *str)
544 {
545   static char *result = NULL;
546
547   xfree (result);
548   result = xstrprintf ("<%s>", str);
549   return result;
550 }
551
552 static char *
553 ada_get_gdb_completer_word_break_characters (void)
554 {
555   return ada_completer_word_break_characters;
556 }
557
558 /* Print an array element index using the Ada syntax.  */
559
560 static void
561 ada_print_array_index (struct value *index_value, struct ui_file *stream,
562                        const struct value_print_options *options)
563 {
564   LA_VALUE_PRINT (index_value, stream, options);
565   fprintf_filtered (stream, " => ");
566 }
567
568 /* Assuming VECT points to an array of *SIZE objects of size
569    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
570    updating *SIZE as necessary and returning the (new) array.  */
571
572 void *
573 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
574 {
575   if (*size < min_size)
576     {
577       *size *= 2;
578       if (*size < min_size)
579         *size = min_size;
580       vect = xrealloc (vect, *size * element_size);
581     }
582   return vect;
583 }
584
585 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
586    suffix of FIELD_NAME beginning "___".  */
587
588 static int
589 field_name_match (const char *field_name, const char *target)
590 {
591   int len = strlen (target);
592
593   return
594     (strncmp (field_name, target, len) == 0
595      && (field_name[len] == '\0'
596          || (strncmp (field_name + len, "___", 3) == 0
597              && strcmp (field_name + strlen (field_name) - 6,
598                         "___XVN") != 0)));
599 }
600
601
602 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
603    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
604    and return its index.  This function also handles fields whose name
605    have ___ suffixes because the compiler sometimes alters their name
606    by adding such a suffix to represent fields with certain constraints.
607    If the field could not be found, return a negative number if
608    MAYBE_MISSING is set.  Otherwise raise an error.  */
609
610 int
611 ada_get_field_index (const struct type *type, const char *field_name,
612                      int maybe_missing)
613 {
614   int fieldno;
615   struct type *struct_type = check_typedef ((struct type *) type);
616
617   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
618     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
619       return fieldno;
620
621   if (!maybe_missing)
622     error (_("Unable to find field %s in struct %s.  Aborting"),
623            field_name, TYPE_NAME (struct_type));
624
625   return -1;
626 }
627
628 /* The length of the prefix of NAME prior to any "___" suffix.  */
629
630 int
631 ada_name_prefix_len (const char *name)
632 {
633   if (name == NULL)
634     return 0;
635   else
636     {
637       const char *p = strstr (name, "___");
638
639       if (p == NULL)
640         return strlen (name);
641       else
642         return p - name;
643     }
644 }
645
646 /* Return non-zero if SUFFIX is a suffix of STR.
647    Return zero if STR is null.  */
648
649 static int
650 is_suffix (const char *str, const char *suffix)
651 {
652   int len1, len2;
653
654   if (str == NULL)
655     return 0;
656   len1 = strlen (str);
657   len2 = strlen (suffix);
658   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
659 }
660
661 /* The contents of value VAL, treated as a value of type TYPE.  The
662    result is an lval in memory if VAL is.  */
663
664 static struct value *
665 coerce_unspec_val_to_type (struct value *val, struct type *type)
666 {
667   type = ada_check_typedef (type);
668   if (value_type (val) == type)
669     return val;
670   else
671     {
672       struct value *result;
673
674       /* Make sure that the object size is not unreasonable before
675          trying to allocate some memory for it.  */
676       check_size (type);
677
678       if (value_lazy (val)
679           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
680         result = allocate_value_lazy (type);
681       else
682         {
683           result = allocate_value (type);
684           memcpy (value_contents_raw (result), value_contents (val),
685                   TYPE_LENGTH (type));
686         }
687       set_value_component_location (result, val);
688       set_value_bitsize (result, value_bitsize (val));
689       set_value_bitpos (result, value_bitpos (val));
690       set_value_address (result, value_address (val));
691       set_value_optimized_out (result, value_optimized_out_const (val));
692       return result;
693     }
694 }
695
696 static const gdb_byte *
697 cond_offset_host (const gdb_byte *valaddr, long offset)
698 {
699   if (valaddr == NULL)
700     return NULL;
701   else
702     return valaddr + offset;
703 }
704
705 static CORE_ADDR
706 cond_offset_target (CORE_ADDR address, long offset)
707 {
708   if (address == 0)
709     return 0;
710   else
711     return address + offset;
712 }
713
714 /* Issue a warning (as for the definition of warning in utils.c, but
715    with exactly one argument rather than ...), unless the limit on the
716    number of warnings has passed during the evaluation of the current
717    expression.  */
718
719 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
720    provided by "complaint".  */
721 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
722
723 static void
724 lim_warning (const char *format, ...)
725 {
726   va_list args;
727
728   va_start (args, format);
729   warnings_issued += 1;
730   if (warnings_issued <= warning_limit)
731     vwarning (format, args);
732
733   va_end (args);
734 }
735
736 /* Issue an error if the size of an object of type T is unreasonable,
737    i.e. if it would be a bad idea to allocate a value of this type in
738    GDB.  */
739
740 static void
741 check_size (const struct type *type)
742 {
743   if (TYPE_LENGTH (type) > varsize_limit)
744     error (_("object size is larger than varsize-limit"));
745 }
746
747 /* Maximum value of a SIZE-byte signed integer type.  */
748 static LONGEST
749 max_of_size (int size)
750 {
751   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
752
753   return top_bit | (top_bit - 1);
754 }
755
756 /* Minimum value of a SIZE-byte signed integer type.  */
757 static LONGEST
758 min_of_size (int size)
759 {
760   return -max_of_size (size) - 1;
761 }
762
763 /* Maximum value of a SIZE-byte unsigned integer type.  */
764 static ULONGEST
765 umax_of_size (int size)
766 {
767   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
768
769   return top_bit | (top_bit - 1);
770 }
771
772 /* Maximum value of integral type T, as a signed quantity.  */
773 static LONGEST
774 max_of_type (struct type *t)
775 {
776   if (TYPE_UNSIGNED (t))
777     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
778   else
779     return max_of_size (TYPE_LENGTH (t));
780 }
781
782 /* Minimum value of integral type T, as a signed quantity.  */
783 static LONGEST
784 min_of_type (struct type *t)
785 {
786   if (TYPE_UNSIGNED (t)) 
787     return 0;
788   else
789     return min_of_size (TYPE_LENGTH (t));
790 }
791
792 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
793 LONGEST
794 ada_discrete_type_high_bound (struct type *type)
795 {
796   type = resolve_dynamic_type (type, 0);
797   switch (TYPE_CODE (type))
798     {
799     case TYPE_CODE_RANGE:
800       return TYPE_HIGH_BOUND (type);
801     case TYPE_CODE_ENUM:
802       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
803     case TYPE_CODE_BOOL:
804       return 1;
805     case TYPE_CODE_CHAR:
806     case TYPE_CODE_INT:
807       return max_of_type (type);
808     default:
809       error (_("Unexpected type in ada_discrete_type_high_bound."));
810     }
811 }
812
813 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
814 LONGEST
815 ada_discrete_type_low_bound (struct type *type)
816 {
817   type = resolve_dynamic_type (type, 0);
818   switch (TYPE_CODE (type))
819     {
820     case TYPE_CODE_RANGE:
821       return TYPE_LOW_BOUND (type);
822     case TYPE_CODE_ENUM:
823       return TYPE_FIELD_ENUMVAL (type, 0);
824     case TYPE_CODE_BOOL:
825       return 0;
826     case TYPE_CODE_CHAR:
827     case TYPE_CODE_INT:
828       return min_of_type (type);
829     default:
830       error (_("Unexpected type in ada_discrete_type_low_bound."));
831     }
832 }
833
834 /* The identity on non-range types.  For range types, the underlying
835    non-range scalar type.  */
836
837 static struct type *
838 get_base_type (struct type *type)
839 {
840   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
841     {
842       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
843         return type;
844       type = TYPE_TARGET_TYPE (type);
845     }
846   return type;
847 }
848
849 /* Return a decoded version of the given VALUE.  This means returning
850    a value whose type is obtained by applying all the GNAT-specific
851    encondings, making the resulting type a static but standard description
852    of the initial type.  */
853
854 struct value *
855 ada_get_decoded_value (struct value *value)
856 {
857   struct type *type = ada_check_typedef (value_type (value));
858
859   if (ada_is_array_descriptor_type (type)
860       || (ada_is_constrained_packed_array_type (type)
861           && TYPE_CODE (type) != TYPE_CODE_PTR))
862     {
863       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
864         value = ada_coerce_to_simple_array_ptr (value);
865       else
866         value = ada_coerce_to_simple_array (value);
867     }
868   else
869     value = ada_to_fixed_value (value);
870
871   return value;
872 }
873
874 /* Same as ada_get_decoded_value, but with the given TYPE.
875    Because there is no associated actual value for this type,
876    the resulting type might be a best-effort approximation in
877    the case of dynamic types.  */
878
879 struct type *
880 ada_get_decoded_type (struct type *type)
881 {
882   type = to_static_fixed_type (type);
883   if (ada_is_constrained_packed_array_type (type))
884     type = ada_coerce_to_simple_array_type (type);
885   return type;
886 }
887
888 \f
889
890                                 /* Language Selection */
891
892 /* If the main program is in Ada, return language_ada, otherwise return LANG
893    (the main program is in Ada iif the adainit symbol is found).  */
894
895 enum language
896 ada_update_initial_language (enum language lang)
897 {
898   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
899                              (struct objfile *) NULL).minsym != NULL)
900     return language_ada;
901
902   return lang;
903 }
904
905 /* If the main procedure is written in Ada, then return its name.
906    The result is good until the next call.  Return NULL if the main
907    procedure doesn't appear to be in Ada.  */
908
909 char *
910 ada_main_name (void)
911 {
912   struct bound_minimal_symbol msym;
913   static char *main_program_name = NULL;
914
915   /* For Ada, the name of the main procedure is stored in a specific
916      string constant, generated by the binder.  Look for that symbol,
917      extract its address, and then read that string.  If we didn't find
918      that string, then most probably the main procedure is not written
919      in Ada.  */
920   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
921
922   if (msym.minsym != NULL)
923     {
924       CORE_ADDR main_program_name_addr;
925       int err_code;
926
927       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
928       if (main_program_name_addr == 0)
929         error (_("Invalid address for Ada main program name."));
930
931       xfree (main_program_name);
932       target_read_string (main_program_name_addr, &main_program_name,
933                           1024, &err_code);
934
935       if (err_code != 0)
936         return NULL;
937       return main_program_name;
938     }
939
940   /* The main procedure doesn't seem to be in Ada.  */
941   return NULL;
942 }
943 \f
944                                 /* Symbols */
945
946 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
947    of NULLs.  */
948
949 const struct ada_opname_map ada_opname_table[] = {
950   {"Oadd", "\"+\"", BINOP_ADD},
951   {"Osubtract", "\"-\"", BINOP_SUB},
952   {"Omultiply", "\"*\"", BINOP_MUL},
953   {"Odivide", "\"/\"", BINOP_DIV},
954   {"Omod", "\"mod\"", BINOP_MOD},
955   {"Orem", "\"rem\"", BINOP_REM},
956   {"Oexpon", "\"**\"", BINOP_EXP},
957   {"Olt", "\"<\"", BINOP_LESS},
958   {"Ole", "\"<=\"", BINOP_LEQ},
959   {"Ogt", "\">\"", BINOP_GTR},
960   {"Oge", "\">=\"", BINOP_GEQ},
961   {"Oeq", "\"=\"", BINOP_EQUAL},
962   {"One", "\"/=\"", BINOP_NOTEQUAL},
963   {"Oand", "\"and\"", BINOP_BITWISE_AND},
964   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
965   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
966   {"Oconcat", "\"&\"", BINOP_CONCAT},
967   {"Oabs", "\"abs\"", UNOP_ABS},
968   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
969   {"Oadd", "\"+\"", UNOP_PLUS},
970   {"Osubtract", "\"-\"", UNOP_NEG},
971   {NULL, NULL}
972 };
973
974 /* The "encoded" form of DECODED, according to GNAT conventions.
975    The result is valid until the next call to ada_encode.  */
976
977 char *
978 ada_encode (const char *decoded)
979 {
980   static char *encoding_buffer = NULL;
981   static size_t encoding_buffer_size = 0;
982   const char *p;
983   int k;
984
985   if (decoded == NULL)
986     return NULL;
987
988   GROW_VECT (encoding_buffer, encoding_buffer_size,
989              2 * strlen (decoded) + 10);
990
991   k = 0;
992   for (p = decoded; *p != '\0'; p += 1)
993     {
994       if (*p == '.')
995         {
996           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
997           k += 2;
998         }
999       else if (*p == '"')
1000         {
1001           const struct ada_opname_map *mapping;
1002
1003           for (mapping = ada_opname_table;
1004                mapping->encoded != NULL
1005                && strncmp (mapping->decoded, p,
1006                            strlen (mapping->decoded)) != 0; mapping += 1)
1007             ;
1008           if (mapping->encoded == NULL)
1009             error (_("invalid Ada operator name: %s"), p);
1010           strcpy (encoding_buffer + k, mapping->encoded);
1011           k += strlen (mapping->encoded);
1012           break;
1013         }
1014       else
1015         {
1016           encoding_buffer[k] = *p;
1017           k += 1;
1018         }
1019     }
1020
1021   encoding_buffer[k] = '\0';
1022   return encoding_buffer;
1023 }
1024
1025 /* Return NAME folded to lower case, or, if surrounded by single
1026    quotes, unfolded, but with the quotes stripped away.  Result good
1027    to next call.  */
1028
1029 char *
1030 ada_fold_name (const char *name)
1031 {
1032   static char *fold_buffer = NULL;
1033   static size_t fold_buffer_size = 0;
1034
1035   int len = strlen (name);
1036   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1037
1038   if (name[0] == '\'')
1039     {
1040       strncpy (fold_buffer, name + 1, len - 2);
1041       fold_buffer[len - 2] = '\000';
1042     }
1043   else
1044     {
1045       int i;
1046
1047       for (i = 0; i <= len; i += 1)
1048         fold_buffer[i] = tolower (name[i]);
1049     }
1050
1051   return fold_buffer;
1052 }
1053
1054 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1055
1056 static int
1057 is_lower_alphanum (const char c)
1058 {
1059   return (isdigit (c) || (isalpha (c) && islower (c)));
1060 }
1061
1062 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1063    This function saves in LEN the length of that same symbol name but
1064    without either of these suffixes:
1065      . .{DIGIT}+
1066      . ${DIGIT}+
1067      . ___{DIGIT}+
1068      . __{DIGIT}+.
1069
1070    These are suffixes introduced by the compiler for entities such as
1071    nested subprogram for instance, in order to avoid name clashes.
1072    They do not serve any purpose for the debugger.  */
1073
1074 static void
1075 ada_remove_trailing_digits (const char *encoded, int *len)
1076 {
1077   if (*len > 1 && isdigit (encoded[*len - 1]))
1078     {
1079       int i = *len - 2;
1080
1081       while (i > 0 && isdigit (encoded[i]))
1082         i--;
1083       if (i >= 0 && encoded[i] == '.')
1084         *len = i;
1085       else if (i >= 0 && encoded[i] == '$')
1086         *len = i;
1087       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
1088         *len = i - 2;
1089       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
1090         *len = i - 1;
1091     }
1092 }
1093
1094 /* Remove the suffix introduced by the compiler for protected object
1095    subprograms.  */
1096
1097 static void
1098 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1099 {
1100   /* Remove trailing N.  */
1101
1102   /* Protected entry subprograms are broken into two
1103      separate subprograms: The first one is unprotected, and has
1104      a 'N' suffix; the second is the protected version, and has
1105      the 'P' suffix.  The second calls the first one after handling
1106      the protection.  Since the P subprograms are internally generated,
1107      we leave these names undecoded, giving the user a clue that this
1108      entity is internal.  */
1109
1110   if (*len > 1
1111       && encoded[*len - 1] == 'N'
1112       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1113     *len = *len - 1;
1114 }
1115
1116 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1117
1118 static void
1119 ada_remove_Xbn_suffix (const char *encoded, int *len)
1120 {
1121   int i = *len - 1;
1122
1123   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1124     i--;
1125
1126   if (encoded[i] != 'X')
1127     return;
1128
1129   if (i == 0)
1130     return;
1131
1132   if (isalnum (encoded[i-1]))
1133     *len = i;
1134 }
1135
1136 /* If ENCODED follows the GNAT entity encoding conventions, then return
1137    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1138    replaced by ENCODED.
1139
1140    The resulting string is valid until the next call of ada_decode.
1141    If the string is unchanged by decoding, the original string pointer
1142    is returned.  */
1143
1144 const char *
1145 ada_decode (const char *encoded)
1146 {
1147   int i, j;
1148   int len0;
1149   const char *p;
1150   char *decoded;
1151   int at_start_name;
1152   static char *decoding_buffer = NULL;
1153   static size_t decoding_buffer_size = 0;
1154
1155   /* The name of the Ada main procedure starts with "_ada_".
1156      This prefix is not part of the decoded name, so skip this part
1157      if we see this prefix.  */
1158   if (strncmp (encoded, "_ada_", 5) == 0)
1159     encoded += 5;
1160
1161   /* If the name starts with '_', then it is not a properly encoded
1162      name, so do not attempt to decode it.  Similarly, if the name
1163      starts with '<', the name should not be decoded.  */
1164   if (encoded[0] == '_' || encoded[0] == '<')
1165     goto Suppress;
1166
1167   len0 = strlen (encoded);
1168
1169   ada_remove_trailing_digits (encoded, &len0);
1170   ada_remove_po_subprogram_suffix (encoded, &len0);
1171
1172   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1173      the suffix is located before the current "end" of ENCODED.  We want
1174      to avoid re-matching parts of ENCODED that have previously been
1175      marked as discarded (by decrementing LEN0).  */
1176   p = strstr (encoded, "___");
1177   if (p != NULL && p - encoded < len0 - 3)
1178     {
1179       if (p[3] == 'X')
1180         len0 = p - encoded;
1181       else
1182         goto Suppress;
1183     }
1184
1185   /* Remove any trailing TKB suffix.  It tells us that this symbol
1186      is for the body of a task, but that information does not actually
1187      appear in the decoded name.  */
1188
1189   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
1190     len0 -= 3;
1191
1192   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1193      from the TKB suffix because it is used for non-anonymous task
1194      bodies.  */
1195
1196   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1197     len0 -= 2;
1198
1199   /* Remove trailing "B" suffixes.  */
1200   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1201
1202   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
1203     len0 -= 1;
1204
1205   /* Make decoded big enough for possible expansion by operator name.  */
1206
1207   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1208   decoded = decoding_buffer;
1209
1210   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1211
1212   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1213     {
1214       i = len0 - 2;
1215       while ((i >= 0 && isdigit (encoded[i]))
1216              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1217         i -= 1;
1218       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1219         len0 = i - 1;
1220       else if (encoded[i] == '$')
1221         len0 = i;
1222     }
1223
1224   /* The first few characters that are not alphabetic are not part
1225      of any encoding we use, so we can copy them over verbatim.  */
1226
1227   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1228     decoded[j] = encoded[i];
1229
1230   at_start_name = 1;
1231   while (i < len0)
1232     {
1233       /* Is this a symbol function?  */
1234       if (at_start_name && encoded[i] == 'O')
1235         {
1236           int k;
1237
1238           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1239             {
1240               int op_len = strlen (ada_opname_table[k].encoded);
1241               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1242                             op_len - 1) == 0)
1243                   && !isalnum (encoded[i + op_len]))
1244                 {
1245                   strcpy (decoded + j, ada_opname_table[k].decoded);
1246                   at_start_name = 0;
1247                   i += op_len;
1248                   j += strlen (ada_opname_table[k].decoded);
1249                   break;
1250                 }
1251             }
1252           if (ada_opname_table[k].encoded != NULL)
1253             continue;
1254         }
1255       at_start_name = 0;
1256
1257       /* Replace "TK__" with "__", which will eventually be translated
1258          into "." (just below).  */
1259
1260       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1261         i += 2;
1262
1263       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1264          be translated into "." (just below).  These are internal names
1265          generated for anonymous blocks inside which our symbol is nested.  */
1266
1267       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1268           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1269           && isdigit (encoded [i+4]))
1270         {
1271           int k = i + 5;
1272           
1273           while (k < len0 && isdigit (encoded[k]))
1274             k++;  /* Skip any extra digit.  */
1275
1276           /* Double-check that the "__B_{DIGITS}+" sequence we found
1277              is indeed followed by "__".  */
1278           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1279             i = k;
1280         }
1281
1282       /* Remove _E{DIGITS}+[sb] */
1283
1284       /* Just as for protected object subprograms, there are 2 categories
1285          of subprograms created by the compiler for each entry.  The first
1286          one implements the actual entry code, and has a suffix following
1287          the convention above; the second one implements the barrier and
1288          uses the same convention as above, except that the 'E' is replaced
1289          by a 'B'.
1290
1291          Just as above, we do not decode the name of barrier functions
1292          to give the user a clue that the code he is debugging has been
1293          internally generated.  */
1294
1295       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1296           && isdigit (encoded[i+2]))
1297         {
1298           int k = i + 3;
1299
1300           while (k < len0 && isdigit (encoded[k]))
1301             k++;
1302
1303           if (k < len0
1304               && (encoded[k] == 'b' || encoded[k] == 's'))
1305             {
1306               k++;
1307               /* Just as an extra precaution, make sure that if this
1308                  suffix is followed by anything else, it is a '_'.
1309                  Otherwise, we matched this sequence by accident.  */
1310               if (k == len0
1311                   || (k < len0 && encoded[k] == '_'))
1312                 i = k;
1313             }
1314         }
1315
1316       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1317          the GNAT front-end in protected object subprograms.  */
1318
1319       if (i < len0 + 3
1320           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1321         {
1322           /* Backtrack a bit up until we reach either the begining of
1323              the encoded name, or "__".  Make sure that we only find
1324              digits or lowercase characters.  */
1325           const char *ptr = encoded + i - 1;
1326
1327           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1328             ptr--;
1329           if (ptr < encoded
1330               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1331             i++;
1332         }
1333
1334       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1335         {
1336           /* This is a X[bn]* sequence not separated from the previous
1337              part of the name with a non-alpha-numeric character (in other
1338              words, immediately following an alpha-numeric character), then
1339              verify that it is placed at the end of the encoded name.  If
1340              not, then the encoding is not valid and we should abort the
1341              decoding.  Otherwise, just skip it, it is used in body-nested
1342              package names.  */
1343           do
1344             i += 1;
1345           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1346           if (i < len0)
1347             goto Suppress;
1348         }
1349       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1350         {
1351          /* Replace '__' by '.'.  */
1352           decoded[j] = '.';
1353           at_start_name = 1;
1354           i += 2;
1355           j += 1;
1356         }
1357       else
1358         {
1359           /* It's a character part of the decoded name, so just copy it
1360              over.  */
1361           decoded[j] = encoded[i];
1362           i += 1;
1363           j += 1;
1364         }
1365     }
1366   decoded[j] = '\000';
1367
1368   /* Decoded names should never contain any uppercase character.
1369      Double-check this, and abort the decoding if we find one.  */
1370
1371   for (i = 0; decoded[i] != '\0'; i += 1)
1372     if (isupper (decoded[i]) || decoded[i] == ' ')
1373       goto Suppress;
1374
1375   if (strcmp (decoded, encoded) == 0)
1376     return encoded;
1377   else
1378     return decoded;
1379
1380 Suppress:
1381   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1382   decoded = decoding_buffer;
1383   if (encoded[0] == '<')
1384     strcpy (decoded, encoded);
1385   else
1386     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1387   return decoded;
1388
1389 }
1390
1391 /* Table for keeping permanent unique copies of decoded names.  Once
1392    allocated, names in this table are never released.  While this is a
1393    storage leak, it should not be significant unless there are massive
1394    changes in the set of decoded names in successive versions of a 
1395    symbol table loaded during a single session.  */
1396 static struct htab *decoded_names_store;
1397
1398 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1399    in the language-specific part of GSYMBOL, if it has not been
1400    previously computed.  Tries to save the decoded name in the same
1401    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1402    in any case, the decoded symbol has a lifetime at least that of
1403    GSYMBOL).
1404    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1405    const, but nevertheless modified to a semantically equivalent form
1406    when a decoded name is cached in it.  */
1407
1408 const char *
1409 ada_decode_symbol (const struct general_symbol_info *arg)
1410 {
1411   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1412   const char **resultp =
1413     &gsymbol->language_specific.mangled_lang.demangled_name;
1414
1415   if (!gsymbol->ada_mangled)
1416     {
1417       const char *decoded = ada_decode (gsymbol->name);
1418       struct obstack *obstack = gsymbol->language_specific.obstack;
1419
1420       gsymbol->ada_mangled = 1;
1421
1422       if (obstack != NULL)
1423         *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1424       else
1425         {
1426           /* Sometimes, we can't find a corresponding objfile, in
1427              which case, we put the result on the heap.  Since we only
1428              decode when needed, we hope this usually does not cause a
1429              significant memory leak (FIXME).  */
1430
1431           char **slot = (char **) htab_find_slot (decoded_names_store,
1432                                                   decoded, INSERT);
1433
1434           if (*slot == NULL)
1435             *slot = xstrdup (decoded);
1436           *resultp = *slot;
1437         }
1438     }
1439
1440   return *resultp;
1441 }
1442
1443 static char *
1444 ada_la_decode (const char *encoded, int options)
1445 {
1446   return xstrdup (ada_decode (encoded));
1447 }
1448
1449 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1450    suffixes that encode debugging information or leading _ada_ on
1451    SYM_NAME (see is_name_suffix commentary for the debugging
1452    information that is ignored).  If WILD, then NAME need only match a
1453    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1454    either argument is NULL.  */
1455
1456 static int
1457 match_name (const char *sym_name, const char *name, int wild)
1458 {
1459   if (sym_name == NULL || name == NULL)
1460     return 0;
1461   else if (wild)
1462     return wild_match (sym_name, name) == 0;
1463   else
1464     {
1465       int len_name = strlen (name);
1466
1467       return (strncmp (sym_name, name, len_name) == 0
1468               && is_name_suffix (sym_name + len_name))
1469         || (strncmp (sym_name, "_ada_", 5) == 0
1470             && strncmp (sym_name + 5, name, len_name) == 0
1471             && is_name_suffix (sym_name + len_name + 5));
1472     }
1473 }
1474 \f
1475
1476                                 /* Arrays */
1477
1478 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1479    generated by the GNAT compiler to describe the index type used
1480    for each dimension of an array, check whether it follows the latest
1481    known encoding.  If not, fix it up to conform to the latest encoding.
1482    Otherwise, do nothing.  This function also does nothing if
1483    INDEX_DESC_TYPE is NULL.
1484
1485    The GNAT encoding used to describle the array index type evolved a bit.
1486    Initially, the information would be provided through the name of each
1487    field of the structure type only, while the type of these fields was
1488    described as unspecified and irrelevant.  The debugger was then expected
1489    to perform a global type lookup using the name of that field in order
1490    to get access to the full index type description.  Because these global
1491    lookups can be very expensive, the encoding was later enhanced to make
1492    the global lookup unnecessary by defining the field type as being
1493    the full index type description.
1494
1495    The purpose of this routine is to allow us to support older versions
1496    of the compiler by detecting the use of the older encoding, and by
1497    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1498    we essentially replace each field's meaningless type by the associated
1499    index subtype).  */
1500
1501 void
1502 ada_fixup_array_indexes_type (struct type *index_desc_type)
1503 {
1504   int i;
1505
1506   if (index_desc_type == NULL)
1507     return;
1508   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1509
1510   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1511      to check one field only, no need to check them all).  If not, return
1512      now.
1513
1514      If our INDEX_DESC_TYPE was generated using the older encoding,
1515      the field type should be a meaningless integer type whose name
1516      is not equal to the field name.  */
1517   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1518       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1519                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1520     return;
1521
1522   /* Fixup each field of INDEX_DESC_TYPE.  */
1523   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1524    {
1525      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1526      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1527
1528      if (raw_type)
1529        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1530    }
1531 }
1532
1533 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1534
1535 static char *bound_name[] = {
1536   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1537   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1538 };
1539
1540 /* Maximum number of array dimensions we are prepared to handle.  */
1541
1542 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1543
1544
1545 /* The desc_* routines return primitive portions of array descriptors
1546    (fat pointers).  */
1547
1548 /* The descriptor or array type, if any, indicated by TYPE; removes
1549    level of indirection, if needed.  */
1550
1551 static struct type *
1552 desc_base_type (struct type *type)
1553 {
1554   if (type == NULL)
1555     return NULL;
1556   type = ada_check_typedef (type);
1557   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1558     type = ada_typedef_target_type (type);
1559
1560   if (type != NULL
1561       && (TYPE_CODE (type) == TYPE_CODE_PTR
1562           || TYPE_CODE (type) == TYPE_CODE_REF))
1563     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1564   else
1565     return type;
1566 }
1567
1568 /* True iff TYPE indicates a "thin" array pointer type.  */
1569
1570 static int
1571 is_thin_pntr (struct type *type)
1572 {
1573   return
1574     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1575     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1576 }
1577
1578 /* The descriptor type for thin pointer type TYPE.  */
1579
1580 static struct type *
1581 thin_descriptor_type (struct type *type)
1582 {
1583   struct type *base_type = desc_base_type (type);
1584
1585   if (base_type == NULL)
1586     return NULL;
1587   if (is_suffix (ada_type_name (base_type), "___XVE"))
1588     return base_type;
1589   else
1590     {
1591       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1592
1593       if (alt_type == NULL)
1594         return base_type;
1595       else
1596         return alt_type;
1597     }
1598 }
1599
1600 /* A pointer to the array data for thin-pointer value VAL.  */
1601
1602 static struct value *
1603 thin_data_pntr (struct value *val)
1604 {
1605   struct type *type = ada_check_typedef (value_type (val));
1606   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1607
1608   data_type = lookup_pointer_type (data_type);
1609
1610   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1611     return value_cast (data_type, value_copy (val));
1612   else
1613     return value_from_longest (data_type, value_address (val));
1614 }
1615
1616 /* True iff TYPE indicates a "thick" array pointer type.  */
1617
1618 static int
1619 is_thick_pntr (struct type *type)
1620 {
1621   type = desc_base_type (type);
1622   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1623           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1624 }
1625
1626 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1627    pointer to one, the type of its bounds data; otherwise, NULL.  */
1628
1629 static struct type *
1630 desc_bounds_type (struct type *type)
1631 {
1632   struct type *r;
1633
1634   type = desc_base_type (type);
1635
1636   if (type == NULL)
1637     return NULL;
1638   else if (is_thin_pntr (type))
1639     {
1640       type = thin_descriptor_type (type);
1641       if (type == NULL)
1642         return NULL;
1643       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1644       if (r != NULL)
1645         return ada_check_typedef (r);
1646     }
1647   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1648     {
1649       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1650       if (r != NULL)
1651         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1652     }
1653   return NULL;
1654 }
1655
1656 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1657    one, a pointer to its bounds data.   Otherwise NULL.  */
1658
1659 static struct value *
1660 desc_bounds (struct value *arr)
1661 {
1662   struct type *type = ada_check_typedef (value_type (arr));
1663
1664   if (is_thin_pntr (type))
1665     {
1666       struct type *bounds_type =
1667         desc_bounds_type (thin_descriptor_type (type));
1668       LONGEST addr;
1669
1670       if (bounds_type == NULL)
1671         error (_("Bad GNAT array descriptor"));
1672
1673       /* NOTE: The following calculation is not really kosher, but
1674          since desc_type is an XVE-encoded type (and shouldn't be),
1675          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1676       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1677         addr = value_as_long (arr);
1678       else
1679         addr = value_address (arr);
1680
1681       return
1682         value_from_longest (lookup_pointer_type (bounds_type),
1683                             addr - TYPE_LENGTH (bounds_type));
1684     }
1685
1686   else if (is_thick_pntr (type))
1687     {
1688       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1689                                                _("Bad GNAT array descriptor"));
1690       struct type *p_bounds_type = value_type (p_bounds);
1691
1692       if (p_bounds_type
1693           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1694         {
1695           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1696
1697           if (TYPE_STUB (target_type))
1698             p_bounds = value_cast (lookup_pointer_type
1699                                    (ada_check_typedef (target_type)),
1700                                    p_bounds);
1701         }
1702       else
1703         error (_("Bad GNAT array descriptor"));
1704
1705       return p_bounds;
1706     }
1707   else
1708     return NULL;
1709 }
1710
1711 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1712    position of the field containing the address of the bounds data.  */
1713
1714 static int
1715 fat_pntr_bounds_bitpos (struct type *type)
1716 {
1717   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1718 }
1719
1720 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1721    size of the field containing the address of the bounds data.  */
1722
1723 static int
1724 fat_pntr_bounds_bitsize (struct type *type)
1725 {
1726   type = desc_base_type (type);
1727
1728   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1729     return TYPE_FIELD_BITSIZE (type, 1);
1730   else
1731     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1732 }
1733
1734 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1735    pointer to one, the type of its array data (a array-with-no-bounds type);
1736    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1737    data.  */
1738
1739 static struct type *
1740 desc_data_target_type (struct type *type)
1741 {
1742   type = desc_base_type (type);
1743
1744   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1745   if (is_thin_pntr (type))
1746     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1747   else if (is_thick_pntr (type))
1748     {
1749       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1750
1751       if (data_type
1752           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1753         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1754     }
1755
1756   return NULL;
1757 }
1758
1759 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1760    its array data.  */
1761
1762 static struct value *
1763 desc_data (struct value *arr)
1764 {
1765   struct type *type = value_type (arr);
1766
1767   if (is_thin_pntr (type))
1768     return thin_data_pntr (arr);
1769   else if (is_thick_pntr (type))
1770     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1771                              _("Bad GNAT array descriptor"));
1772   else
1773     return NULL;
1774 }
1775
1776
1777 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1778    position of the field containing the address of the data.  */
1779
1780 static int
1781 fat_pntr_data_bitpos (struct type *type)
1782 {
1783   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1784 }
1785
1786 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1787    size of the field containing the address of the data.  */
1788
1789 static int
1790 fat_pntr_data_bitsize (struct type *type)
1791 {
1792   type = desc_base_type (type);
1793
1794   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1795     return TYPE_FIELD_BITSIZE (type, 0);
1796   else
1797     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1798 }
1799
1800 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1801    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1802    bound, if WHICH is 1.  The first bound is I=1.  */
1803
1804 static struct value *
1805 desc_one_bound (struct value *bounds, int i, int which)
1806 {
1807   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1808                            _("Bad GNAT array descriptor bounds"));
1809 }
1810
1811 /* If BOUNDS is an array-bounds structure type, return the bit position
1812    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1813    bound, if WHICH is 1.  The first bound is I=1.  */
1814
1815 static int
1816 desc_bound_bitpos (struct type *type, int i, int which)
1817 {
1818   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1819 }
1820
1821 /* If BOUNDS is an array-bounds structure type, return the bit field size
1822    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1823    bound, if WHICH is 1.  The first bound is I=1.  */
1824
1825 static int
1826 desc_bound_bitsize (struct type *type, int i, int which)
1827 {
1828   type = desc_base_type (type);
1829
1830   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1831     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1832   else
1833     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1834 }
1835
1836 /* If TYPE is the type of an array-bounds structure, the type of its
1837    Ith bound (numbering from 1).  Otherwise, NULL.  */
1838
1839 static struct type *
1840 desc_index_type (struct type *type, int i)
1841 {
1842   type = desc_base_type (type);
1843
1844   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1845     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1846   else
1847     return NULL;
1848 }
1849
1850 /* The number of index positions in the array-bounds type TYPE.
1851    Return 0 if TYPE is NULL.  */
1852
1853 static int
1854 desc_arity (struct type *type)
1855 {
1856   type = desc_base_type (type);
1857
1858   if (type != NULL)
1859     return TYPE_NFIELDS (type) / 2;
1860   return 0;
1861 }
1862
1863 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1864    an array descriptor type (representing an unconstrained array
1865    type).  */
1866
1867 static int
1868 ada_is_direct_array_type (struct type *type)
1869 {
1870   if (type == NULL)
1871     return 0;
1872   type = ada_check_typedef (type);
1873   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1874           || ada_is_array_descriptor_type (type));
1875 }
1876
1877 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1878  * to one.  */
1879
1880 static int
1881 ada_is_array_type (struct type *type)
1882 {
1883   while (type != NULL 
1884          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1885              || TYPE_CODE (type) == TYPE_CODE_REF))
1886     type = TYPE_TARGET_TYPE (type);
1887   return ada_is_direct_array_type (type);
1888 }
1889
1890 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1891
1892 int
1893 ada_is_simple_array_type (struct type *type)
1894 {
1895   if (type == NULL)
1896     return 0;
1897   type = ada_check_typedef (type);
1898   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1899           || (TYPE_CODE (type) == TYPE_CODE_PTR
1900               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1901                  == TYPE_CODE_ARRAY));
1902 }
1903
1904 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1905
1906 int
1907 ada_is_array_descriptor_type (struct type *type)
1908 {
1909   struct type *data_type = desc_data_target_type (type);
1910
1911   if (type == NULL)
1912     return 0;
1913   type = ada_check_typedef (type);
1914   return (data_type != NULL
1915           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1916           && desc_arity (desc_bounds_type (type)) > 0);
1917 }
1918
1919 /* Non-zero iff type is a partially mal-formed GNAT array
1920    descriptor.  FIXME: This is to compensate for some problems with
1921    debugging output from GNAT.  Re-examine periodically to see if it
1922    is still needed.  */
1923
1924 int
1925 ada_is_bogus_array_descriptor (struct type *type)
1926 {
1927   return
1928     type != NULL
1929     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1930     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1931         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1932     && !ada_is_array_descriptor_type (type);
1933 }
1934
1935
1936 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1937    (fat pointer) returns the type of the array data described---specifically,
1938    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1939    in from the descriptor; otherwise, they are left unspecified.  If
1940    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1941    returns NULL.  The result is simply the type of ARR if ARR is not
1942    a descriptor.  */
1943 struct type *
1944 ada_type_of_array (struct value *arr, int bounds)
1945 {
1946   if (ada_is_constrained_packed_array_type (value_type (arr)))
1947     return decode_constrained_packed_array_type (value_type (arr));
1948
1949   if (!ada_is_array_descriptor_type (value_type (arr)))
1950     return value_type (arr);
1951
1952   if (!bounds)
1953     {
1954       struct type *array_type =
1955         ada_check_typedef (desc_data_target_type (value_type (arr)));
1956
1957       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1958         TYPE_FIELD_BITSIZE (array_type, 0) =
1959           decode_packed_array_bitsize (value_type (arr));
1960       
1961       return array_type;
1962     }
1963   else
1964     {
1965       struct type *elt_type;
1966       int arity;
1967       struct value *descriptor;
1968
1969       elt_type = ada_array_element_type (value_type (arr), -1);
1970       arity = ada_array_arity (value_type (arr));
1971
1972       if (elt_type == NULL || arity == 0)
1973         return ada_check_typedef (value_type (arr));
1974
1975       descriptor = desc_bounds (arr);
1976       if (value_as_long (descriptor) == 0)
1977         return NULL;
1978       while (arity > 0)
1979         {
1980           struct type *range_type = alloc_type_copy (value_type (arr));
1981           struct type *array_type = alloc_type_copy (value_type (arr));
1982           struct value *low = desc_one_bound (descriptor, arity, 0);
1983           struct value *high = desc_one_bound (descriptor, arity, 1);
1984
1985           arity -= 1;
1986           create_static_range_type (range_type, value_type (low),
1987                                     longest_to_int (value_as_long (low)),
1988                                     longest_to_int (value_as_long (high)));
1989           elt_type = create_array_type (array_type, elt_type, range_type);
1990
1991           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1992             {
1993               /* We need to store the element packed bitsize, as well as
1994                  recompute the array size, because it was previously
1995                  computed based on the unpacked element size.  */
1996               LONGEST lo = value_as_long (low);
1997               LONGEST hi = value_as_long (high);
1998
1999               TYPE_FIELD_BITSIZE (elt_type, 0) =
2000                 decode_packed_array_bitsize (value_type (arr));
2001               /* If the array has no element, then the size is already
2002                  zero, and does not need to be recomputed.  */
2003               if (lo < hi)
2004                 {
2005                   int array_bitsize =
2006                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2007
2008                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2009                 }
2010             }
2011         }
2012
2013       return lookup_pointer_type (elt_type);
2014     }
2015 }
2016
2017 /* If ARR does not represent an array, returns ARR unchanged.
2018    Otherwise, returns either a standard GDB array with bounds set
2019    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2020    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2021
2022 struct value *
2023 ada_coerce_to_simple_array_ptr (struct value *arr)
2024 {
2025   if (ada_is_array_descriptor_type (value_type (arr)))
2026     {
2027       struct type *arrType = ada_type_of_array (arr, 1);
2028
2029       if (arrType == NULL)
2030         return NULL;
2031       return value_cast (arrType, value_copy (desc_data (arr)));
2032     }
2033   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2034     return decode_constrained_packed_array (arr);
2035   else
2036     return arr;
2037 }
2038
2039 /* If ARR does not represent an array, returns ARR unchanged.
2040    Otherwise, returns a standard GDB array describing ARR (which may
2041    be ARR itself if it already is in the proper form).  */
2042
2043 struct value *
2044 ada_coerce_to_simple_array (struct value *arr)
2045 {
2046   if (ada_is_array_descriptor_type (value_type (arr)))
2047     {
2048       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2049
2050       if (arrVal == NULL)
2051         error (_("Bounds unavailable for null array pointer."));
2052       check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
2053       return value_ind (arrVal);
2054     }
2055   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2056     return decode_constrained_packed_array (arr);
2057   else
2058     return arr;
2059 }
2060
2061 /* If TYPE represents a GNAT array type, return it translated to an
2062    ordinary GDB array type (possibly with BITSIZE fields indicating
2063    packing).  For other types, is the identity.  */
2064
2065 struct type *
2066 ada_coerce_to_simple_array_type (struct type *type)
2067 {
2068   if (ada_is_constrained_packed_array_type (type))
2069     return decode_constrained_packed_array_type (type);
2070
2071   if (ada_is_array_descriptor_type (type))
2072     return ada_check_typedef (desc_data_target_type (type));
2073
2074   return type;
2075 }
2076
2077 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2078
2079 static int
2080 ada_is_packed_array_type  (struct type *type)
2081 {
2082   if (type == NULL)
2083     return 0;
2084   type = desc_base_type (type);
2085   type = ada_check_typedef (type);
2086   return
2087     ada_type_name (type) != NULL
2088     && strstr (ada_type_name (type), "___XP") != NULL;
2089 }
2090
2091 /* Non-zero iff TYPE represents a standard GNAT constrained
2092    packed-array type.  */
2093
2094 int
2095 ada_is_constrained_packed_array_type (struct type *type)
2096 {
2097   return ada_is_packed_array_type (type)
2098     && !ada_is_array_descriptor_type (type);
2099 }
2100
2101 /* Non-zero iff TYPE represents an array descriptor for a
2102    unconstrained packed-array type.  */
2103
2104 static int
2105 ada_is_unconstrained_packed_array_type (struct type *type)
2106 {
2107   return ada_is_packed_array_type (type)
2108     && ada_is_array_descriptor_type (type);
2109 }
2110
2111 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2112    return the size of its elements in bits.  */
2113
2114 static long
2115 decode_packed_array_bitsize (struct type *type)
2116 {
2117   const char *raw_name;
2118   const char *tail;
2119   long bits;
2120
2121   /* Access to arrays implemented as fat pointers are encoded as a typedef
2122      of the fat pointer type.  We need the name of the fat pointer type
2123      to do the decoding, so strip the typedef layer.  */
2124   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2125     type = ada_typedef_target_type (type);
2126
2127   raw_name = ada_type_name (ada_check_typedef (type));
2128   if (!raw_name)
2129     raw_name = ada_type_name (desc_base_type (type));
2130
2131   if (!raw_name)
2132     return 0;
2133
2134   tail = strstr (raw_name, "___XP");
2135   gdb_assert (tail != NULL);
2136
2137   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2138     {
2139       lim_warning
2140         (_("could not understand bit size information on packed array"));
2141       return 0;
2142     }
2143
2144   return bits;
2145 }
2146
2147 /* Given that TYPE is a standard GDB array type with all bounds filled
2148    in, and that the element size of its ultimate scalar constituents
2149    (that is, either its elements, or, if it is an array of arrays, its
2150    elements' elements, etc.) is *ELT_BITS, return an identical type,
2151    but with the bit sizes of its elements (and those of any
2152    constituent arrays) recorded in the BITSIZE components of its
2153    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2154    in bits.  */
2155
2156 static struct type *
2157 constrained_packed_array_type (struct type *type, long *elt_bits)
2158 {
2159   struct type *new_elt_type;
2160   struct type *new_type;
2161   struct type *index_type_desc;
2162   struct type *index_type;
2163   LONGEST low_bound, high_bound;
2164
2165   type = ada_check_typedef (type);
2166   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2167     return type;
2168
2169   index_type_desc = ada_find_parallel_type (type, "___XA");
2170   if (index_type_desc)
2171     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2172                                       NULL);
2173   else
2174     index_type = TYPE_INDEX_TYPE (type);
2175
2176   new_type = alloc_type_copy (type);
2177   new_elt_type =
2178     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2179                                    elt_bits);
2180   create_array_type (new_type, new_elt_type, index_type);
2181   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2182   TYPE_NAME (new_type) = ada_type_name (type);
2183
2184   if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2185     low_bound = high_bound = 0;
2186   if (high_bound < low_bound)
2187     *elt_bits = TYPE_LENGTH (new_type) = 0;
2188   else
2189     {
2190       *elt_bits *= (high_bound - low_bound + 1);
2191       TYPE_LENGTH (new_type) =
2192         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2193     }
2194
2195   TYPE_FIXED_INSTANCE (new_type) = 1;
2196   return new_type;
2197 }
2198
2199 /* The array type encoded by TYPE, where
2200    ada_is_constrained_packed_array_type (TYPE).  */
2201
2202 static struct type *
2203 decode_constrained_packed_array_type (struct type *type)
2204 {
2205   const char *raw_name = ada_type_name (ada_check_typedef (type));
2206   char *name;
2207   const char *tail;
2208   struct type *shadow_type;
2209   long bits;
2210
2211   if (!raw_name)
2212     raw_name = ada_type_name (desc_base_type (type));
2213
2214   if (!raw_name)
2215     return NULL;
2216
2217   name = (char *) alloca (strlen (raw_name) + 1);
2218   tail = strstr (raw_name, "___XP");
2219   type = desc_base_type (type);
2220
2221   memcpy (name, raw_name, tail - raw_name);
2222   name[tail - raw_name] = '\000';
2223
2224   shadow_type = ada_find_parallel_type_with_name (type, name);
2225
2226   if (shadow_type == NULL)
2227     {
2228       lim_warning (_("could not find bounds information on packed array"));
2229       return NULL;
2230     }
2231   CHECK_TYPEDEF (shadow_type);
2232
2233   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2234     {
2235       lim_warning (_("could not understand bounds "
2236                      "information on packed array"));
2237       return NULL;
2238     }
2239
2240   bits = decode_packed_array_bitsize (type);
2241   return constrained_packed_array_type (shadow_type, &bits);
2242 }
2243
2244 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2245    array, returns a simple array that denotes that array.  Its type is a
2246    standard GDB array type except that the BITSIZEs of the array
2247    target types are set to the number of bits in each element, and the
2248    type length is set appropriately.  */
2249
2250 static struct value *
2251 decode_constrained_packed_array (struct value *arr)
2252 {
2253   struct type *type;
2254
2255   /* If our value is a pointer, then dereference it. Likewise if
2256      the value is a reference.  Make sure that this operation does not
2257      cause the target type to be fixed, as this would indirectly cause
2258      this array to be decoded.  The rest of the routine assumes that
2259      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2260      and "value_ind" routines to perform the dereferencing, as opposed
2261      to using "ada_coerce_ref" or "ada_value_ind".  */
2262   arr = coerce_ref (arr);
2263   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2264     arr = value_ind (arr);
2265
2266   type = decode_constrained_packed_array_type (value_type (arr));
2267   if (type == NULL)
2268     {
2269       error (_("can't unpack array"));
2270       return NULL;
2271     }
2272
2273   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2274       && ada_is_modular_type (value_type (arr)))
2275     {
2276        /* This is a (right-justified) modular type representing a packed
2277          array with no wrapper.  In order to interpret the value through
2278          the (left-justified) packed array type we just built, we must
2279          first left-justify it.  */
2280       int bit_size, bit_pos;
2281       ULONGEST mod;
2282
2283       mod = ada_modulus (value_type (arr)) - 1;
2284       bit_size = 0;
2285       while (mod > 0)
2286         {
2287           bit_size += 1;
2288           mod >>= 1;
2289         }
2290       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2291       arr = ada_value_primitive_packed_val (arr, NULL,
2292                                             bit_pos / HOST_CHAR_BIT,
2293                                             bit_pos % HOST_CHAR_BIT,
2294                                             bit_size,
2295                                             type);
2296     }
2297
2298   return coerce_unspec_val_to_type (arr, type);
2299 }
2300
2301
2302 /* The value of the element of packed array ARR at the ARITY indices
2303    given in IND.   ARR must be a simple array.  */
2304
2305 static struct value *
2306 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2307 {
2308   int i;
2309   int bits, elt_off, bit_off;
2310   long elt_total_bit_offset;
2311   struct type *elt_type;
2312   struct value *v;
2313
2314   bits = 0;
2315   elt_total_bit_offset = 0;
2316   elt_type = ada_check_typedef (value_type (arr));
2317   for (i = 0; i < arity; i += 1)
2318     {
2319       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2320           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2321         error
2322           (_("attempt to do packed indexing of "
2323              "something other than a packed array"));
2324       else
2325         {
2326           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2327           LONGEST lowerbound, upperbound;
2328           LONGEST idx;
2329
2330           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2331             {
2332               lim_warning (_("don't know bounds of array"));
2333               lowerbound = upperbound = 0;
2334             }
2335
2336           idx = pos_atr (ind[i]);
2337           if (idx < lowerbound || idx > upperbound)
2338             lim_warning (_("packed array index %ld out of bounds"),
2339                          (long) idx);
2340           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2341           elt_total_bit_offset += (idx - lowerbound) * bits;
2342           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2343         }
2344     }
2345   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2346   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2347
2348   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2349                                       bits, elt_type);
2350   return v;
2351 }
2352
2353 /* Non-zero iff TYPE includes negative integer values.  */
2354
2355 static int
2356 has_negatives (struct type *type)
2357 {
2358   switch (TYPE_CODE (type))
2359     {
2360     default:
2361       return 0;
2362     case TYPE_CODE_INT:
2363       return !TYPE_UNSIGNED (type);
2364     case TYPE_CODE_RANGE:
2365       return TYPE_LOW_BOUND (type) < 0;
2366     }
2367 }
2368
2369
2370 /* Create a new value of type TYPE from the contents of OBJ starting
2371    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2372    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2373    assigning through the result will set the field fetched from.
2374    VALADDR is ignored unless OBJ is NULL, in which case,
2375    VALADDR+OFFSET must address the start of storage containing the 
2376    packed value.  The value returned  in this case is never an lval.
2377    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2378
2379 struct value *
2380 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2381                                 long offset, int bit_offset, int bit_size,
2382                                 struct type *type)
2383 {
2384   struct value *v;
2385   int src,                      /* Index into the source area */
2386     targ,                       /* Index into the target area */
2387     srcBitsLeft,                /* Number of source bits left to move */
2388     nsrc, ntarg,                /* Number of source and target bytes */
2389     unusedLS,                   /* Number of bits in next significant
2390                                    byte of source that are unused */
2391     accumSize;                  /* Number of meaningful bits in accum */
2392   unsigned char *bytes;         /* First byte containing data to unpack */
2393   unsigned char *unpacked;
2394   unsigned long accum;          /* Staging area for bits being transferred */
2395   unsigned char sign;
2396   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2397   /* Transmit bytes from least to most significant; delta is the direction
2398      the indices move.  */
2399   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2400
2401   type = ada_check_typedef (type);
2402
2403   if (obj == NULL)
2404     {
2405       v = allocate_value (type);
2406       bytes = (unsigned char *) (valaddr + offset);
2407     }
2408   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2409     {
2410       v = value_at (type, value_address (obj));
2411       type = value_type (v);
2412       bytes = (unsigned char *) alloca (len);
2413       read_memory (value_address (v) + offset, bytes, len);
2414     }
2415   else
2416     {
2417       v = allocate_value (type);
2418       bytes = (unsigned char *) value_contents (obj) + offset;
2419     }
2420
2421   if (obj != NULL)
2422     {
2423       long new_offset = offset;
2424
2425       set_value_component_location (v, obj);
2426       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2427       set_value_bitsize (v, bit_size);
2428       if (value_bitpos (v) >= HOST_CHAR_BIT)
2429         {
2430           ++new_offset;
2431           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2432         }
2433       set_value_offset (v, new_offset);
2434
2435       /* Also set the parent value.  This is needed when trying to
2436          assign a new value (in inferior memory).  */
2437       set_value_parent (v, obj);
2438     }
2439   else
2440     set_value_bitsize (v, bit_size);
2441   unpacked = (unsigned char *) value_contents (v);
2442
2443   srcBitsLeft = bit_size;
2444   nsrc = len;
2445   ntarg = TYPE_LENGTH (type);
2446   sign = 0;
2447   if (bit_size == 0)
2448     {
2449       memset (unpacked, 0, TYPE_LENGTH (type));
2450       return v;
2451     }
2452   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2453     {
2454       src = len - 1;
2455       if (has_negatives (type)
2456           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2457         sign = ~0;
2458
2459       unusedLS =
2460         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2461         % HOST_CHAR_BIT;
2462
2463       switch (TYPE_CODE (type))
2464         {
2465         case TYPE_CODE_ARRAY:
2466         case TYPE_CODE_UNION:
2467         case TYPE_CODE_STRUCT:
2468           /* Non-scalar values must be aligned at a byte boundary...  */
2469           accumSize =
2470             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2471           /* ... And are placed at the beginning (most-significant) bytes
2472              of the target.  */
2473           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2474           ntarg = targ + 1;
2475           break;
2476         default:
2477           accumSize = 0;
2478           targ = TYPE_LENGTH (type) - 1;
2479           break;
2480         }
2481     }
2482   else
2483     {
2484       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2485
2486       src = targ = 0;
2487       unusedLS = bit_offset;
2488       accumSize = 0;
2489
2490       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2491         sign = ~0;
2492     }
2493
2494   accum = 0;
2495   while (nsrc > 0)
2496     {
2497       /* Mask for removing bits of the next source byte that are not
2498          part of the value.  */
2499       unsigned int unusedMSMask =
2500         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2501         1;
2502       /* Sign-extend bits for this byte.  */
2503       unsigned int signMask = sign & ~unusedMSMask;
2504
2505       accum |=
2506         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2507       accumSize += HOST_CHAR_BIT - unusedLS;
2508       if (accumSize >= HOST_CHAR_BIT)
2509         {
2510           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2511           accumSize -= HOST_CHAR_BIT;
2512           accum >>= HOST_CHAR_BIT;
2513           ntarg -= 1;
2514           targ += delta;
2515         }
2516       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2517       unusedLS = 0;
2518       nsrc -= 1;
2519       src += delta;
2520     }
2521   while (ntarg > 0)
2522     {
2523       accum |= sign << accumSize;
2524       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2525       accumSize -= HOST_CHAR_BIT;
2526       accum >>= HOST_CHAR_BIT;
2527       ntarg -= 1;
2528       targ += delta;
2529     }
2530
2531   return v;
2532 }
2533
2534 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2535    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2536    not overlap.  */
2537 static void
2538 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2539            int src_offset, int n, int bits_big_endian_p)
2540 {
2541   unsigned int accum, mask;
2542   int accum_bits, chunk_size;
2543
2544   target += targ_offset / HOST_CHAR_BIT;
2545   targ_offset %= HOST_CHAR_BIT;
2546   source += src_offset / HOST_CHAR_BIT;
2547   src_offset %= HOST_CHAR_BIT;
2548   if (bits_big_endian_p)
2549     {
2550       accum = (unsigned char) *source;
2551       source += 1;
2552       accum_bits = HOST_CHAR_BIT - src_offset;
2553
2554       while (n > 0)
2555         {
2556           int unused_right;
2557
2558           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2559           accum_bits += HOST_CHAR_BIT;
2560           source += 1;
2561           chunk_size = HOST_CHAR_BIT - targ_offset;
2562           if (chunk_size > n)
2563             chunk_size = n;
2564           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2565           mask = ((1 << chunk_size) - 1) << unused_right;
2566           *target =
2567             (*target & ~mask)
2568             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2569           n -= chunk_size;
2570           accum_bits -= chunk_size;
2571           target += 1;
2572           targ_offset = 0;
2573         }
2574     }
2575   else
2576     {
2577       accum = (unsigned char) *source >> src_offset;
2578       source += 1;
2579       accum_bits = HOST_CHAR_BIT - src_offset;
2580
2581       while (n > 0)
2582         {
2583           accum = accum + ((unsigned char) *source << accum_bits);
2584           accum_bits += HOST_CHAR_BIT;
2585           source += 1;
2586           chunk_size = HOST_CHAR_BIT - targ_offset;
2587           if (chunk_size > n)
2588             chunk_size = n;
2589           mask = ((1 << chunk_size) - 1) << targ_offset;
2590           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2591           n -= chunk_size;
2592           accum_bits -= chunk_size;
2593           accum >>= chunk_size;
2594           target += 1;
2595           targ_offset = 0;
2596         }
2597     }
2598 }
2599
2600 /* Store the contents of FROMVAL into the location of TOVAL.
2601    Return a new value with the location of TOVAL and contents of
2602    FROMVAL.   Handles assignment into packed fields that have
2603    floating-point or non-scalar types.  */
2604
2605 static struct value *
2606 ada_value_assign (struct value *toval, struct value *fromval)
2607 {
2608   struct type *type = value_type (toval);
2609   int bits = value_bitsize (toval);
2610
2611   toval = ada_coerce_ref (toval);
2612   fromval = ada_coerce_ref (fromval);
2613
2614   if (ada_is_direct_array_type (value_type (toval)))
2615     toval = ada_coerce_to_simple_array (toval);
2616   if (ada_is_direct_array_type (value_type (fromval)))
2617     fromval = ada_coerce_to_simple_array (fromval);
2618
2619   if (!deprecated_value_modifiable (toval))
2620     error (_("Left operand of assignment is not a modifiable lvalue."));
2621
2622   if (VALUE_LVAL (toval) == lval_memory
2623       && bits > 0
2624       && (TYPE_CODE (type) == TYPE_CODE_FLT
2625           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2626     {
2627       int len = (value_bitpos (toval)
2628                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2629       int from_size;
2630       gdb_byte *buffer = alloca (len);
2631       struct value *val;
2632       CORE_ADDR to_addr = value_address (toval);
2633
2634       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2635         fromval = value_cast (type, fromval);
2636
2637       read_memory (to_addr, buffer, len);
2638       from_size = value_bitsize (fromval);
2639       if (from_size == 0)
2640         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2641       if (gdbarch_bits_big_endian (get_type_arch (type)))
2642         move_bits (buffer, value_bitpos (toval),
2643                    value_contents (fromval), from_size - bits, bits, 1);
2644       else
2645         move_bits (buffer, value_bitpos (toval),
2646                    value_contents (fromval), 0, bits, 0);
2647       write_memory_with_notification (to_addr, buffer, len);
2648
2649       val = value_copy (toval);
2650       memcpy (value_contents_raw (val), value_contents (fromval),
2651               TYPE_LENGTH (type));
2652       deprecated_set_value_type (val, type);
2653
2654       return val;
2655     }
2656
2657   return value_assign (toval, fromval);
2658 }
2659
2660
2661 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2662  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2663  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2664  * COMPONENT, and not the inferior's memory.  The current contents 
2665  * of COMPONENT are ignored.  */
2666 static void
2667 value_assign_to_component (struct value *container, struct value *component,
2668                            struct value *val)
2669 {
2670   LONGEST offset_in_container =
2671     (LONGEST)  (value_address (component) - value_address (container));
2672   int bit_offset_in_container = 
2673     value_bitpos (component) - value_bitpos (container);
2674   int bits;
2675   
2676   val = value_cast (value_type (component), val);
2677
2678   if (value_bitsize (component) == 0)
2679     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2680   else
2681     bits = value_bitsize (component);
2682
2683   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2684     move_bits (value_contents_writeable (container) + offset_in_container, 
2685                value_bitpos (container) + bit_offset_in_container,
2686                value_contents (val),
2687                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2688                bits, 1);
2689   else
2690     move_bits (value_contents_writeable (container) + offset_in_container, 
2691                value_bitpos (container) + bit_offset_in_container,
2692                value_contents (val), 0, bits, 0);
2693 }              
2694                         
2695 /* The value of the element of array ARR at the ARITY indices given in IND.
2696    ARR may be either a simple array, GNAT array descriptor, or pointer
2697    thereto.  */
2698
2699 struct value *
2700 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2701 {
2702   int k;
2703   struct value *elt;
2704   struct type *elt_type;
2705
2706   elt = ada_coerce_to_simple_array (arr);
2707
2708   elt_type = ada_check_typedef (value_type (elt));
2709   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2710       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2711     return value_subscript_packed (elt, arity, ind);
2712
2713   for (k = 0; k < arity; k += 1)
2714     {
2715       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2716         error (_("too many subscripts (%d expected)"), k);
2717       elt = value_subscript (elt, pos_atr (ind[k]));
2718     }
2719   return elt;
2720 }
2721
2722 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2723    value of the element of *ARR at the ARITY indices given in
2724    IND.  Does not read the entire array into memory.  */
2725
2726 static struct value *
2727 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2728                          struct value **ind)
2729 {
2730   int k;
2731
2732   for (k = 0; k < arity; k += 1)
2733     {
2734       LONGEST lwb, upb;
2735
2736       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2737         error (_("too many subscripts (%d expected)"), k);
2738       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2739                         value_copy (arr));
2740       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2741       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2742       type = TYPE_TARGET_TYPE (type);
2743     }
2744
2745   return value_ind (arr);
2746 }
2747
2748 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2749    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2750    elements starting at index LOW.  The lower bound of this array is LOW, as
2751    per Ada rules.  */
2752 static struct value *
2753 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2754                           int low, int high)
2755 {
2756   struct type *type0 = ada_check_typedef (type);
2757   CORE_ADDR base = value_as_address (array_ptr)
2758     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2759        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2760   struct type *index_type
2761     = create_static_range_type (NULL,
2762                                 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2763                                 low, high);
2764   struct type *slice_type =
2765     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2766
2767   return value_at_lazy (slice_type, base);
2768 }
2769
2770
2771 static struct value *
2772 ada_value_slice (struct value *array, int low, int high)
2773 {
2774   struct type *type = ada_check_typedef (value_type (array));
2775   struct type *index_type
2776     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2777   struct type *slice_type =
2778     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2779
2780   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2781 }
2782
2783 /* If type is a record type in the form of a standard GNAT array
2784    descriptor, returns the number of dimensions for type.  If arr is a
2785    simple array, returns the number of "array of"s that prefix its
2786    type designation.  Otherwise, returns 0.  */
2787
2788 int
2789 ada_array_arity (struct type *type)
2790 {
2791   int arity;
2792
2793   if (type == NULL)
2794     return 0;
2795
2796   type = desc_base_type (type);
2797
2798   arity = 0;
2799   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2800     return desc_arity (desc_bounds_type (type));
2801   else
2802     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2803       {
2804         arity += 1;
2805         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2806       }
2807
2808   return arity;
2809 }
2810
2811 /* If TYPE is a record type in the form of a standard GNAT array
2812    descriptor or a simple array type, returns the element type for
2813    TYPE after indexing by NINDICES indices, or by all indices if
2814    NINDICES is -1.  Otherwise, returns NULL.  */
2815
2816 struct type *
2817 ada_array_element_type (struct type *type, int nindices)
2818 {
2819   type = desc_base_type (type);
2820
2821   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2822     {
2823       int k;
2824       struct type *p_array_type;
2825
2826       p_array_type = desc_data_target_type (type);
2827
2828       k = ada_array_arity (type);
2829       if (k == 0)
2830         return NULL;
2831
2832       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2833       if (nindices >= 0 && k > nindices)
2834         k = nindices;
2835       while (k > 0 && p_array_type != NULL)
2836         {
2837           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2838           k -= 1;
2839         }
2840       return p_array_type;
2841     }
2842   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2843     {
2844       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2845         {
2846           type = TYPE_TARGET_TYPE (type);
2847           nindices -= 1;
2848         }
2849       return type;
2850     }
2851
2852   return NULL;
2853 }
2854
2855 /* The type of nth index in arrays of given type (n numbering from 1).
2856    Does not examine memory.  Throws an error if N is invalid or TYPE
2857    is not an array type.  NAME is the name of the Ada attribute being
2858    evaluated ('range, 'first, 'last, or 'length); it is used in building
2859    the error message.  */
2860
2861 static struct type *
2862 ada_index_type (struct type *type, int n, const char *name)
2863 {
2864   struct type *result_type;
2865
2866   type = desc_base_type (type);
2867
2868   if (n < 0 || n > ada_array_arity (type))
2869     error (_("invalid dimension number to '%s"), name);
2870
2871   if (ada_is_simple_array_type (type))
2872     {
2873       int i;
2874
2875       for (i = 1; i < n; i += 1)
2876         type = TYPE_TARGET_TYPE (type);
2877       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2878       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2879          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2880          perhaps stabsread.c would make more sense.  */
2881       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2882         result_type = NULL;
2883     }
2884   else
2885     {
2886       result_type = desc_index_type (desc_bounds_type (type), n);
2887       if (result_type == NULL)
2888         error (_("attempt to take bound of something that is not an array"));
2889     }
2890
2891   return result_type;
2892 }
2893
2894 /* Given that arr is an array type, returns the lower bound of the
2895    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2896    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2897    array-descriptor type.  It works for other arrays with bounds supplied
2898    by run-time quantities other than discriminants.  */
2899
2900 static LONGEST
2901 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2902 {
2903   struct type *type, *index_type_desc, *index_type;
2904   int i;
2905
2906   gdb_assert (which == 0 || which == 1);
2907
2908   if (ada_is_constrained_packed_array_type (arr_type))
2909     arr_type = decode_constrained_packed_array_type (arr_type);
2910
2911   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2912     return (LONGEST) - which;
2913
2914   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2915     type = TYPE_TARGET_TYPE (arr_type);
2916   else
2917     type = arr_type;
2918
2919   index_type_desc = ada_find_parallel_type (type, "___XA");
2920   ada_fixup_array_indexes_type (index_type_desc);
2921   if (index_type_desc != NULL)
2922     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2923                                       NULL);
2924   else
2925     {
2926       struct type *elt_type = check_typedef (type);
2927
2928       for (i = 1; i < n; i++)
2929         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2930
2931       index_type = TYPE_INDEX_TYPE (elt_type);
2932     }
2933
2934   return
2935     (LONGEST) (which == 0
2936                ? ada_discrete_type_low_bound (index_type)
2937                : ada_discrete_type_high_bound (index_type));
2938 }
2939
2940 /* Given that arr is an array value, returns the lower bound of the
2941    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2942    WHICH is 1.  This routine will also work for arrays with bounds
2943    supplied by run-time quantities other than discriminants.  */
2944
2945 static LONGEST
2946 ada_array_bound (struct value *arr, int n, int which)
2947 {
2948   struct type *arr_type = value_type (arr);
2949
2950   if (ada_is_constrained_packed_array_type (arr_type))
2951     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2952   else if (ada_is_simple_array_type (arr_type))
2953     return ada_array_bound_from_type (arr_type, n, which);
2954   else
2955     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2956 }
2957
2958 /* Given that arr is an array value, returns the length of the
2959    nth index.  This routine will also work for arrays with bounds
2960    supplied by run-time quantities other than discriminants.
2961    Does not work for arrays indexed by enumeration types with representation
2962    clauses at the moment.  */
2963
2964 static LONGEST
2965 ada_array_length (struct value *arr, int n)
2966 {
2967   struct type *arr_type = ada_check_typedef (value_type (arr));
2968
2969   if (ada_is_constrained_packed_array_type (arr_type))
2970     return ada_array_length (decode_constrained_packed_array (arr), n);
2971
2972   if (ada_is_simple_array_type (arr_type))
2973     return (ada_array_bound_from_type (arr_type, n, 1)
2974             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2975   else
2976     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2977             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2978 }
2979
2980 /* An empty array whose type is that of ARR_TYPE (an array type),
2981    with bounds LOW to LOW-1.  */
2982
2983 static struct value *
2984 empty_array (struct type *arr_type, int low)
2985 {
2986   struct type *arr_type0 = ada_check_typedef (arr_type);
2987   struct type *index_type
2988     = create_static_range_type
2989         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
2990   struct type *elt_type = ada_array_element_type (arr_type0, 1);
2991
2992   return allocate_value (create_array_type (NULL, elt_type, index_type));
2993 }
2994 \f
2995
2996                                 /* Name resolution */
2997
2998 /* The "decoded" name for the user-definable Ada operator corresponding
2999    to OP.  */
3000
3001 static const char *
3002 ada_decoded_op_name (enum exp_opcode op)
3003 {
3004   int i;
3005
3006   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3007     {
3008       if (ada_opname_table[i].op == op)
3009         return ada_opname_table[i].decoded;
3010     }
3011   error (_("Could not find operator name for opcode"));
3012 }
3013
3014
3015 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3016    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3017    undefined namespace) and converts operators that are
3018    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3019    non-null, it provides a preferred result type [at the moment, only
3020    type void has any effect---causing procedures to be preferred over
3021    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3022    return type is preferred.  May change (expand) *EXP.  */
3023
3024 static void
3025 resolve (struct expression **expp, int void_context_p)
3026 {
3027   struct type *context_type = NULL;
3028   int pc = 0;
3029
3030   if (void_context_p)
3031     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3032
3033   resolve_subexp (expp, &pc, 1, context_type);
3034 }
3035
3036 /* Resolve the operator of the subexpression beginning at
3037    position *POS of *EXPP.  "Resolving" consists of replacing
3038    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3039    with their resolutions, replacing built-in operators with
3040    function calls to user-defined operators, where appropriate, and,
3041    when DEPROCEDURE_P is non-zero, converting function-valued variables
3042    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3043    are as in ada_resolve, above.  */
3044
3045 static struct value *
3046 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3047                 struct type *context_type)
3048 {
3049   int pc = *pos;
3050   int i;
3051   struct expression *exp;       /* Convenience: == *expp.  */
3052   enum exp_opcode op = (*expp)->elts[pc].opcode;
3053   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3054   int nargs;                    /* Number of operands.  */
3055   int oplen;
3056
3057   argvec = NULL;
3058   nargs = 0;
3059   exp = *expp;
3060
3061   /* Pass one: resolve operands, saving their types and updating *pos,
3062      if needed.  */
3063   switch (op)
3064     {
3065     case OP_FUNCALL:
3066       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3067           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3068         *pos += 7;
3069       else
3070         {
3071           *pos += 3;
3072           resolve_subexp (expp, pos, 0, NULL);
3073         }
3074       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3075       break;
3076
3077     case UNOP_ADDR:
3078       *pos += 1;
3079       resolve_subexp (expp, pos, 0, NULL);
3080       break;
3081
3082     case UNOP_QUAL:
3083       *pos += 3;
3084       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3085       break;
3086
3087     case OP_ATR_MODULUS:
3088     case OP_ATR_SIZE:
3089     case OP_ATR_TAG:
3090     case OP_ATR_FIRST:
3091     case OP_ATR_LAST:
3092     case OP_ATR_LENGTH:
3093     case OP_ATR_POS:
3094     case OP_ATR_VAL:
3095     case OP_ATR_MIN:
3096     case OP_ATR_MAX:
3097     case TERNOP_IN_RANGE:
3098     case BINOP_IN_BOUNDS:
3099     case UNOP_IN_RANGE:
3100     case OP_AGGREGATE:
3101     case OP_OTHERS:
3102     case OP_CHOICES:
3103     case OP_POSITIONAL:
3104     case OP_DISCRETE_RANGE:
3105     case OP_NAME:
3106       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3107       *pos += oplen;
3108       break;
3109
3110     case BINOP_ASSIGN:
3111       {
3112         struct value *arg1;
3113
3114         *pos += 1;
3115         arg1 = resolve_subexp (expp, pos, 0, NULL);
3116         if (arg1 == NULL)
3117           resolve_subexp (expp, pos, 1, NULL);
3118         else
3119           resolve_subexp (expp, pos, 1, value_type (arg1));
3120         break;
3121       }
3122
3123     case UNOP_CAST:
3124       *pos += 3;
3125       nargs = 1;
3126       break;
3127
3128     case BINOP_ADD:
3129     case BINOP_SUB:
3130     case BINOP_MUL:
3131     case BINOP_DIV:
3132     case BINOP_REM:
3133     case BINOP_MOD:
3134     case BINOP_EXP:
3135     case BINOP_CONCAT:
3136     case BINOP_LOGICAL_AND:
3137     case BINOP_LOGICAL_OR:
3138     case BINOP_BITWISE_AND:
3139     case BINOP_BITWISE_IOR:
3140     case BINOP_BITWISE_XOR:
3141
3142     case BINOP_EQUAL:
3143     case BINOP_NOTEQUAL:
3144     case BINOP_LESS:
3145     case BINOP_GTR:
3146     case BINOP_LEQ:
3147     case BINOP_GEQ:
3148
3149     case BINOP_REPEAT:
3150     case BINOP_SUBSCRIPT:
3151     case BINOP_COMMA:
3152       *pos += 1;
3153       nargs = 2;
3154       break;
3155
3156     case UNOP_NEG:
3157     case UNOP_PLUS:
3158     case UNOP_LOGICAL_NOT:
3159     case UNOP_ABS:
3160     case UNOP_IND:
3161       *pos += 1;
3162       nargs = 1;
3163       break;
3164
3165     case OP_LONG:
3166     case OP_DOUBLE:
3167     case OP_VAR_VALUE:
3168       *pos += 4;
3169       break;
3170
3171     case OP_TYPE:
3172     case OP_BOOL:
3173     case OP_LAST:
3174     case OP_INTERNALVAR:
3175       *pos += 3;
3176       break;
3177
3178     case UNOP_MEMVAL:
3179       *pos += 3;
3180       nargs = 1;
3181       break;
3182
3183     case OP_REGISTER:
3184       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3185       break;
3186
3187     case STRUCTOP_STRUCT:
3188       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3189       nargs = 1;
3190       break;
3191
3192     case TERNOP_SLICE:
3193       *pos += 1;
3194       nargs = 3;
3195       break;
3196
3197     case OP_STRING:
3198       break;
3199
3200     default:
3201       error (_("Unexpected operator during name resolution"));
3202     }
3203
3204   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3205   for (i = 0; i < nargs; i += 1)
3206     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3207   argvec[i] = NULL;
3208   exp = *expp;
3209
3210   /* Pass two: perform any resolution on principal operator.  */
3211   switch (op)
3212     {
3213     default:
3214       break;
3215
3216     case OP_VAR_VALUE:
3217       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3218         {
3219           struct ada_symbol_info *candidates;
3220           int n_candidates;
3221
3222           n_candidates =
3223             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3224                                     (exp->elts[pc + 2].symbol),
3225                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3226                                     &candidates);
3227
3228           if (n_candidates > 1)
3229             {
3230               /* Types tend to get re-introduced locally, so if there
3231                  are any local symbols that are not types, first filter
3232                  out all types.  */
3233               int j;
3234               for (j = 0; j < n_candidates; j += 1)
3235                 switch (SYMBOL_CLASS (candidates[j].sym))
3236                   {
3237                   case LOC_REGISTER:
3238                   case LOC_ARG:
3239                   case LOC_REF_ARG:
3240                   case LOC_REGPARM_ADDR:
3241                   case LOC_LOCAL:
3242                   case LOC_COMPUTED:
3243                     goto FoundNonType;
3244                   default:
3245                     break;
3246                   }
3247             FoundNonType:
3248               if (j < n_candidates)
3249                 {
3250                   j = 0;
3251                   while (j < n_candidates)
3252                     {
3253                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3254                         {
3255                           candidates[j] = candidates[n_candidates - 1];
3256                           n_candidates -= 1;
3257                         }
3258                       else
3259                         j += 1;
3260                     }
3261                 }
3262             }
3263
3264           if (n_candidates == 0)
3265             error (_("No definition found for %s"),
3266                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3267           else if (n_candidates == 1)
3268             i = 0;
3269           else if (deprocedure_p
3270                    && !is_nonfunction (candidates, n_candidates))
3271             {
3272               i = ada_resolve_function
3273                 (candidates, n_candidates, NULL, 0,
3274                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3275                  context_type);
3276               if (i < 0)
3277                 error (_("Could not find a match for %s"),
3278                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3279             }
3280           else
3281             {
3282               printf_filtered (_("Multiple matches for %s\n"),
3283                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3284               user_select_syms (candidates, n_candidates, 1);
3285               i = 0;
3286             }
3287
3288           exp->elts[pc + 1].block = candidates[i].block;
3289           exp->elts[pc + 2].symbol = candidates[i].sym;
3290           if (innermost_block == NULL
3291               || contained_in (candidates[i].block, innermost_block))
3292             innermost_block = candidates[i].block;
3293         }
3294
3295       if (deprocedure_p
3296           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3297               == TYPE_CODE_FUNC))
3298         {
3299           replace_operator_with_call (expp, pc, 0, 0,
3300                                       exp->elts[pc + 2].symbol,
3301                                       exp->elts[pc + 1].block);
3302           exp = *expp;
3303         }
3304       break;
3305
3306     case OP_FUNCALL:
3307       {
3308         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3309             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3310           {
3311             struct ada_symbol_info *candidates;
3312             int n_candidates;
3313
3314             n_candidates =
3315               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3316                                       (exp->elts[pc + 5].symbol),
3317                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3318                                       &candidates);
3319             if (n_candidates == 1)
3320               i = 0;
3321             else
3322               {
3323                 i = ada_resolve_function
3324                   (candidates, n_candidates,
3325                    argvec, nargs,
3326                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3327                    context_type);
3328                 if (i < 0)
3329                   error (_("Could not find a match for %s"),
3330                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3331               }
3332
3333             exp->elts[pc + 4].block = candidates[i].block;
3334             exp->elts[pc + 5].symbol = candidates[i].sym;
3335             if (innermost_block == NULL
3336                 || contained_in (candidates[i].block, innermost_block))
3337               innermost_block = candidates[i].block;
3338           }
3339       }
3340       break;
3341     case BINOP_ADD:
3342     case BINOP_SUB:
3343     case BINOP_MUL:
3344     case BINOP_DIV:
3345     case BINOP_REM:
3346     case BINOP_MOD:
3347     case BINOP_CONCAT:
3348     case BINOP_BITWISE_AND:
3349     case BINOP_BITWISE_IOR:
3350     case BINOP_BITWISE_XOR:
3351     case BINOP_EQUAL:
3352     case BINOP_NOTEQUAL:
3353     case BINOP_LESS:
3354     case BINOP_GTR:
3355     case BINOP_LEQ:
3356     case BINOP_GEQ:
3357     case BINOP_EXP:
3358     case UNOP_NEG:
3359     case UNOP_PLUS:
3360     case UNOP_LOGICAL_NOT:
3361     case UNOP_ABS:
3362       if (possible_user_operator_p (op, argvec))
3363         {
3364           struct ada_symbol_info *candidates;
3365           int n_candidates;
3366
3367           n_candidates =
3368             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3369                                     (struct block *) NULL, VAR_DOMAIN,
3370                                     &candidates);
3371           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3372                                     ada_decoded_op_name (op), NULL);
3373           if (i < 0)
3374             break;
3375
3376           replace_operator_with_call (expp, pc, nargs, 1,
3377                                       candidates[i].sym, candidates[i].block);
3378           exp = *expp;
3379         }
3380       break;
3381
3382     case OP_TYPE:
3383     case OP_REGISTER:
3384       return NULL;
3385     }
3386
3387   *pos = pc;
3388   return evaluate_subexp_type (exp, pos);
3389 }
3390
3391 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3392    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3393    a non-pointer.  */
3394 /* The term "match" here is rather loose.  The match is heuristic and
3395    liberal.  */
3396
3397 static int
3398 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3399 {
3400   ftype = ada_check_typedef (ftype);
3401   atype = ada_check_typedef (atype);
3402
3403   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3404     ftype = TYPE_TARGET_TYPE (ftype);
3405   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3406     atype = TYPE_TARGET_TYPE (atype);
3407
3408   switch (TYPE_CODE (ftype))
3409     {
3410     default:
3411       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3412     case TYPE_CODE_PTR:
3413       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3414         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3415                                TYPE_TARGET_TYPE (atype), 0);
3416       else
3417         return (may_deref
3418                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3419     case TYPE_CODE_INT:
3420     case TYPE_CODE_ENUM:
3421     case TYPE_CODE_RANGE:
3422       switch (TYPE_CODE (atype))
3423         {
3424         case TYPE_CODE_INT:
3425         case TYPE_CODE_ENUM:
3426         case TYPE_CODE_RANGE:
3427           return 1;
3428         default:
3429           return 0;
3430         }
3431
3432     case TYPE_CODE_ARRAY:
3433       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3434               || ada_is_array_descriptor_type (atype));
3435
3436     case TYPE_CODE_STRUCT:
3437       if (ada_is_array_descriptor_type (ftype))
3438         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3439                 || ada_is_array_descriptor_type (atype));
3440       else
3441         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3442                 && !ada_is_array_descriptor_type (atype));
3443
3444     case TYPE_CODE_UNION:
3445     case TYPE_CODE_FLT:
3446       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3447     }
3448 }
3449
3450 /* Return non-zero if the formals of FUNC "sufficiently match" the
3451    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3452    may also be an enumeral, in which case it is treated as a 0-
3453    argument function.  */
3454
3455 static int
3456 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3457 {
3458   int i;
3459   struct type *func_type = SYMBOL_TYPE (func);
3460
3461   if (SYMBOL_CLASS (func) == LOC_CONST
3462       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3463     return (n_actuals == 0);
3464   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3465     return 0;
3466
3467   if (TYPE_NFIELDS (func_type) != n_actuals)
3468     return 0;
3469
3470   for (i = 0; i < n_actuals; i += 1)
3471     {
3472       if (actuals[i] == NULL)
3473         return 0;
3474       else
3475         {
3476           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3477                                                                    i));
3478           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3479
3480           if (!ada_type_match (ftype, atype, 1))
3481             return 0;
3482         }
3483     }
3484   return 1;
3485 }
3486
3487 /* False iff function type FUNC_TYPE definitely does not produce a value
3488    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3489    FUNC_TYPE is not a valid function type with a non-null return type
3490    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3491
3492 static int
3493 return_match (struct type *func_type, struct type *context_type)
3494 {
3495   struct type *return_type;
3496
3497   if (func_type == NULL)
3498     return 1;
3499
3500   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3501     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3502   else
3503     return_type = get_base_type (func_type);
3504   if (return_type == NULL)
3505     return 1;
3506
3507   context_type = get_base_type (context_type);
3508
3509   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3510     return context_type == NULL || return_type == context_type;
3511   else if (context_type == NULL)
3512     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3513   else
3514     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3515 }
3516
3517
3518 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3519    function (if any) that matches the types of the NARGS arguments in
3520    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3521    that returns that type, then eliminate matches that don't.  If
3522    CONTEXT_TYPE is void and there is at least one match that does not
3523    return void, eliminate all matches that do.
3524
3525    Asks the user if there is more than one match remaining.  Returns -1
3526    if there is no such symbol or none is selected.  NAME is used
3527    solely for messages.  May re-arrange and modify SYMS in
3528    the process; the index returned is for the modified vector.  */
3529
3530 static int
3531 ada_resolve_function (struct ada_symbol_info syms[],
3532                       int nsyms, struct value **args, int nargs,
3533                       const char *name, struct type *context_type)
3534 {
3535   int fallback;
3536   int k;
3537   int m;                        /* Number of hits */
3538
3539   m = 0;
3540   /* In the first pass of the loop, we only accept functions matching
3541      context_type.  If none are found, we add a second pass of the loop
3542      where every function is accepted.  */
3543   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3544     {
3545       for (k = 0; k < nsyms; k += 1)
3546         {
3547           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3548
3549           if (ada_args_match (syms[k].sym, args, nargs)
3550               && (fallback || return_match (type, context_type)))
3551             {
3552               syms[m] = syms[k];
3553               m += 1;
3554             }
3555         }
3556     }
3557
3558   if (m == 0)
3559     return -1;
3560   else if (m > 1)
3561     {
3562       printf_filtered (_("Multiple matches for %s\n"), name);
3563       user_select_syms (syms, m, 1);
3564       return 0;
3565     }
3566   return 0;
3567 }
3568
3569 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3570    in a listing of choices during disambiguation (see sort_choices, below).
3571    The idea is that overloadings of a subprogram name from the
3572    same package should sort in their source order.  We settle for ordering
3573    such symbols by their trailing number (__N  or $N).  */
3574
3575 static int
3576 encoded_ordered_before (const char *N0, const char *N1)
3577 {
3578   if (N1 == NULL)
3579     return 0;
3580   else if (N0 == NULL)
3581     return 1;
3582   else
3583     {
3584       int k0, k1;
3585
3586       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3587         ;
3588       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3589         ;
3590       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3591           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3592         {
3593           int n0, n1;
3594
3595           n0 = k0;
3596           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3597             n0 -= 1;
3598           n1 = k1;
3599           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3600             n1 -= 1;
3601           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3602             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3603         }
3604       return (strcmp (N0, N1) < 0);
3605     }
3606 }
3607
3608 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3609    encoded names.  */
3610
3611 static void
3612 sort_choices (struct ada_symbol_info syms[], int nsyms)
3613 {
3614   int i;
3615
3616   for (i = 1; i < nsyms; i += 1)
3617     {
3618       struct ada_symbol_info sym = syms[i];
3619       int j;
3620
3621       for (j = i - 1; j >= 0; j -= 1)
3622         {
3623           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3624                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3625             break;
3626           syms[j + 1] = syms[j];
3627         }
3628       syms[j + 1] = sym;
3629     }
3630 }
3631
3632 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3633    by asking the user (if necessary), returning the number selected, 
3634    and setting the first elements of SYMS items.  Error if no symbols
3635    selected.  */
3636
3637 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3638    to be re-integrated one of these days.  */
3639
3640 int
3641 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3642 {
3643   int i;
3644   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3645   int n_chosen;
3646   int first_choice = (max_results == 1) ? 1 : 2;
3647   const char *select_mode = multiple_symbols_select_mode ();
3648
3649   if (max_results < 1)
3650     error (_("Request to select 0 symbols!"));
3651   if (nsyms <= 1)
3652     return nsyms;
3653
3654   if (select_mode == multiple_symbols_cancel)
3655     error (_("\
3656 canceled because the command is ambiguous\n\
3657 See set/show multiple-symbol."));
3658   
3659   /* If select_mode is "all", then return all possible symbols.
3660      Only do that if more than one symbol can be selected, of course.
3661      Otherwise, display the menu as usual.  */
3662   if (select_mode == multiple_symbols_all && max_results > 1)
3663     return nsyms;
3664
3665   printf_unfiltered (_("[0] cancel\n"));
3666   if (max_results > 1)
3667     printf_unfiltered (_("[1] all\n"));
3668
3669   sort_choices (syms, nsyms);
3670
3671   for (i = 0; i < nsyms; i += 1)
3672     {
3673       if (syms[i].sym == NULL)
3674         continue;
3675
3676       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3677         {
3678           struct symtab_and_line sal =
3679             find_function_start_sal (syms[i].sym, 1);
3680
3681           if (sal.symtab == NULL)
3682             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3683                                i + first_choice,
3684                                SYMBOL_PRINT_NAME (syms[i].sym),
3685                                sal.line);
3686           else
3687             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3688                                SYMBOL_PRINT_NAME (syms[i].sym),
3689                                symtab_to_filename_for_display (sal.symtab),
3690                                sal.line);
3691           continue;
3692         }
3693       else
3694         {
3695           int is_enumeral =
3696             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3697              && SYMBOL_TYPE (syms[i].sym) != NULL
3698              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3699           struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
3700
3701           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3702             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3703                                i + first_choice,
3704                                SYMBOL_PRINT_NAME (syms[i].sym),
3705                                symtab_to_filename_for_display (symtab),
3706                                SYMBOL_LINE (syms[i].sym));
3707           else if (is_enumeral
3708                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3709             {
3710               printf_unfiltered (("[%d] "), i + first_choice);
3711               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3712                               gdb_stdout, -1, 0, &type_print_raw_options);
3713               printf_unfiltered (_("'(%s) (enumeral)\n"),
3714                                  SYMBOL_PRINT_NAME (syms[i].sym));
3715             }
3716           else if (symtab != NULL)
3717             printf_unfiltered (is_enumeral
3718                                ? _("[%d] %s in %s (enumeral)\n")
3719                                : _("[%d] %s at %s:?\n"),
3720                                i + first_choice,
3721                                SYMBOL_PRINT_NAME (syms[i].sym),
3722                                symtab_to_filename_for_display (symtab));
3723           else
3724             printf_unfiltered (is_enumeral
3725                                ? _("[%d] %s (enumeral)\n")
3726                                : _("[%d] %s at ?\n"),
3727                                i + first_choice,
3728                                SYMBOL_PRINT_NAME (syms[i].sym));
3729         }
3730     }
3731
3732   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3733                              "overload-choice");
3734
3735   for (i = 0; i < n_chosen; i += 1)
3736     syms[i] = syms[chosen[i]];
3737
3738   return n_chosen;
3739 }
3740
3741 /* Read and validate a set of numeric choices from the user in the
3742    range 0 .. N_CHOICES-1.  Place the results in increasing
3743    order in CHOICES[0 .. N-1], and return N.
3744
3745    The user types choices as a sequence of numbers on one line
3746    separated by blanks, encoding them as follows:
3747
3748      + A choice of 0 means to cancel the selection, throwing an error.
3749      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3750      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3751
3752    The user is not allowed to choose more than MAX_RESULTS values.
3753
3754    ANNOTATION_SUFFIX, if present, is used to annotate the input
3755    prompts (for use with the -f switch).  */
3756
3757 int
3758 get_selections (int *choices, int n_choices, int max_results,
3759                 int is_all_choice, char *annotation_suffix)
3760 {
3761   char *args;
3762   char *prompt;
3763   int n_chosen;
3764   int first_choice = is_all_choice ? 2 : 1;
3765
3766   prompt = getenv ("PS2");
3767   if (prompt == NULL)
3768     prompt = "> ";
3769
3770   args = command_line_input (prompt, 0, annotation_suffix);
3771
3772   if (args == NULL)
3773     error_no_arg (_("one or more choice numbers"));
3774
3775   n_chosen = 0;
3776
3777   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3778      order, as given in args.  Choices are validated.  */
3779   while (1)
3780     {
3781       char *args2;
3782       int choice, j;
3783
3784       args = skip_spaces (args);
3785       if (*args == '\0' && n_chosen == 0)
3786         error_no_arg (_("one or more choice numbers"));
3787       else if (*args == '\0')
3788         break;
3789
3790       choice = strtol (args, &args2, 10);
3791       if (args == args2 || choice < 0
3792           || choice > n_choices + first_choice - 1)
3793         error (_("Argument must be choice number"));
3794       args = args2;
3795
3796       if (choice == 0)
3797         error (_("cancelled"));
3798
3799       if (choice < first_choice)
3800         {
3801           n_chosen = n_choices;
3802           for (j = 0; j < n_choices; j += 1)
3803             choices[j] = j;
3804           break;
3805         }
3806       choice -= first_choice;
3807
3808       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3809         {
3810         }
3811
3812       if (j < 0 || choice != choices[j])
3813         {
3814           int k;
3815
3816           for (k = n_chosen - 1; k > j; k -= 1)
3817             choices[k + 1] = choices[k];
3818           choices[j + 1] = choice;
3819           n_chosen += 1;
3820         }
3821     }
3822
3823   if (n_chosen > max_results)
3824     error (_("Select no more than %d of the above"), max_results);
3825
3826   return n_chosen;
3827 }
3828
3829 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3830    on the function identified by SYM and BLOCK, and taking NARGS
3831    arguments.  Update *EXPP as needed to hold more space.  */
3832
3833 static void
3834 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3835                             int oplen, struct symbol *sym,
3836                             const struct block *block)
3837 {
3838   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3839      symbol, -oplen for operator being replaced).  */
3840   struct expression *newexp = (struct expression *)
3841     xzalloc (sizeof (struct expression)
3842              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3843   struct expression *exp = *expp;
3844
3845   newexp->nelts = exp->nelts + 7 - oplen;
3846   newexp->language_defn = exp->language_defn;
3847   newexp->gdbarch = exp->gdbarch;
3848   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3849   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3850           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3851
3852   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3853   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3854
3855   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3856   newexp->elts[pc + 4].block = block;
3857   newexp->elts[pc + 5].symbol = sym;
3858
3859   *expp = newexp;
3860   xfree (exp);
3861 }
3862
3863 /* Type-class predicates */
3864
3865 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3866    or FLOAT).  */
3867
3868 static int
3869 numeric_type_p (struct type *type)
3870 {
3871   if (type == NULL)
3872     return 0;
3873   else
3874     {
3875       switch (TYPE_CODE (type))
3876         {
3877         case TYPE_CODE_INT:
3878         case TYPE_CODE_FLT:
3879           return 1;
3880         case TYPE_CODE_RANGE:
3881           return (type == TYPE_TARGET_TYPE (type)
3882                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3883         default:
3884           return 0;
3885         }
3886     }
3887 }
3888
3889 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3890
3891 static int
3892 integer_type_p (struct type *type)
3893 {
3894   if (type == NULL)
3895     return 0;
3896   else
3897     {
3898       switch (TYPE_CODE (type))
3899         {
3900         case TYPE_CODE_INT:
3901           return 1;
3902         case TYPE_CODE_RANGE:
3903           return (type == TYPE_TARGET_TYPE (type)
3904                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3905         default:
3906           return 0;
3907         }
3908     }
3909 }
3910
3911 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3912
3913 static int
3914 scalar_type_p (struct type *type)
3915 {
3916   if (type == NULL)
3917     return 0;
3918   else
3919     {
3920       switch (TYPE_CODE (type))
3921         {
3922         case TYPE_CODE_INT:
3923         case TYPE_CODE_RANGE:
3924         case TYPE_CODE_ENUM:
3925         case TYPE_CODE_FLT:
3926           return 1;
3927         default:
3928           return 0;
3929         }
3930     }
3931 }
3932
3933 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3934
3935 static int
3936 discrete_type_p (struct type *type)
3937 {
3938   if (type == NULL)
3939     return 0;
3940   else
3941     {
3942       switch (TYPE_CODE (type))
3943         {
3944         case TYPE_CODE_INT:
3945         case TYPE_CODE_RANGE:
3946         case TYPE_CODE_ENUM:
3947         case TYPE_CODE_BOOL:
3948           return 1;
3949         default:
3950           return 0;
3951         }
3952     }
3953 }
3954
3955 /* Returns non-zero if OP with operands in the vector ARGS could be
3956    a user-defined function.  Errs on the side of pre-defined operators
3957    (i.e., result 0).  */
3958
3959 static int
3960 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3961 {
3962   struct type *type0 =
3963     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3964   struct type *type1 =
3965     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3966
3967   if (type0 == NULL)
3968     return 0;
3969
3970   switch (op)
3971     {
3972     default:
3973       return 0;
3974
3975     case BINOP_ADD:
3976     case BINOP_SUB:
3977     case BINOP_MUL:
3978     case BINOP_DIV:
3979       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3980
3981     case BINOP_REM:
3982     case BINOP_MOD:
3983     case BINOP_BITWISE_AND:
3984     case BINOP_BITWISE_IOR:
3985     case BINOP_BITWISE_XOR:
3986       return (!(integer_type_p (type0) && integer_type_p (type1)));
3987
3988     case BINOP_EQUAL:
3989     case BINOP_NOTEQUAL:
3990     case BINOP_LESS:
3991     case BINOP_GTR:
3992     case BINOP_LEQ:
3993     case BINOP_GEQ:
3994       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3995
3996     case BINOP_CONCAT:
3997       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3998
3999     case BINOP_EXP:
4000       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4001
4002     case UNOP_NEG:
4003     case UNOP_PLUS:
4004     case UNOP_LOGICAL_NOT:
4005     case UNOP_ABS:
4006       return (!numeric_type_p (type0));
4007
4008     }
4009 }
4010 \f
4011                                 /* Renaming */
4012
4013 /* NOTES: 
4014
4015    1. In the following, we assume that a renaming type's name may
4016       have an ___XD suffix.  It would be nice if this went away at some
4017       point.
4018    2. We handle both the (old) purely type-based representation of 
4019       renamings and the (new) variable-based encoding.  At some point,
4020       it is devoutly to be hoped that the former goes away 
4021       (FIXME: hilfinger-2007-07-09).
4022    3. Subprogram renamings are not implemented, although the XRS
4023       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4024
4025 /* If SYM encodes a renaming, 
4026
4027        <renaming> renames <renamed entity>,
4028
4029    sets *LEN to the length of the renamed entity's name,
4030    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4031    the string describing the subcomponent selected from the renamed
4032    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4033    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4034    are undefined).  Otherwise, returns a value indicating the category
4035    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4036    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4037    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4038    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4039    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4040    may be NULL, in which case they are not assigned.
4041
4042    [Currently, however, GCC does not generate subprogram renamings.]  */
4043
4044 enum ada_renaming_category
4045 ada_parse_renaming (struct symbol *sym,
4046                     const char **renamed_entity, int *len, 
4047                     const char **renaming_expr)
4048 {
4049   enum ada_renaming_category kind;
4050   const char *info;
4051   const char *suffix;
4052
4053   if (sym == NULL)
4054     return ADA_NOT_RENAMING;
4055   switch (SYMBOL_CLASS (sym)) 
4056     {
4057     default:
4058       return ADA_NOT_RENAMING;
4059     case LOC_TYPEDEF:
4060       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4061                                        renamed_entity, len, renaming_expr);
4062     case LOC_LOCAL:
4063     case LOC_STATIC:
4064     case LOC_COMPUTED:
4065     case LOC_OPTIMIZED_OUT:
4066       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4067       if (info == NULL)
4068         return ADA_NOT_RENAMING;
4069       switch (info[5])
4070         {
4071         case '_':
4072           kind = ADA_OBJECT_RENAMING;
4073           info += 6;
4074           break;
4075         case 'E':
4076           kind = ADA_EXCEPTION_RENAMING;
4077           info += 7;
4078           break;
4079         case 'P':
4080           kind = ADA_PACKAGE_RENAMING;
4081           info += 7;
4082           break;
4083         case 'S':
4084           kind = ADA_SUBPROGRAM_RENAMING;
4085           info += 7;
4086           break;
4087         default:
4088           return ADA_NOT_RENAMING;
4089         }
4090     }
4091
4092   if (renamed_entity != NULL)
4093     *renamed_entity = info;
4094   suffix = strstr (info, "___XE");
4095   if (suffix == NULL || suffix == info)
4096     return ADA_NOT_RENAMING;
4097   if (len != NULL)
4098     *len = strlen (info) - strlen (suffix);
4099   suffix += 5;
4100   if (renaming_expr != NULL)
4101     *renaming_expr = suffix;
4102   return kind;
4103 }
4104
4105 /* Assuming TYPE encodes a renaming according to the old encoding in
4106    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4107    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4108    ADA_NOT_RENAMING otherwise.  */
4109 static enum ada_renaming_category
4110 parse_old_style_renaming (struct type *type,
4111                           const char **renamed_entity, int *len, 
4112                           const char **renaming_expr)
4113 {
4114   enum ada_renaming_category kind;
4115   const char *name;
4116   const char *info;
4117   const char *suffix;
4118
4119   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4120       || TYPE_NFIELDS (type) != 1)
4121     return ADA_NOT_RENAMING;
4122
4123   name = type_name_no_tag (type);
4124   if (name == NULL)
4125     return ADA_NOT_RENAMING;
4126   
4127   name = strstr (name, "___XR");
4128   if (name == NULL)
4129     return ADA_NOT_RENAMING;
4130   switch (name[5])
4131     {
4132     case '\0':
4133     case '_':
4134       kind = ADA_OBJECT_RENAMING;
4135       break;
4136     case 'E':
4137       kind = ADA_EXCEPTION_RENAMING;
4138       break;
4139     case 'P':
4140       kind = ADA_PACKAGE_RENAMING;
4141       break;
4142     case 'S':
4143       kind = ADA_SUBPROGRAM_RENAMING;
4144       break;
4145     default:
4146       return ADA_NOT_RENAMING;
4147     }
4148
4149   info = TYPE_FIELD_NAME (type, 0);
4150   if (info == NULL)
4151     return ADA_NOT_RENAMING;
4152   if (renamed_entity != NULL)
4153     *renamed_entity = info;
4154   suffix = strstr (info, "___XE");
4155   if (renaming_expr != NULL)
4156     *renaming_expr = suffix + 5;
4157   if (suffix == NULL || suffix == info)
4158     return ADA_NOT_RENAMING;
4159   if (len != NULL)
4160     *len = suffix - info;
4161   return kind;
4162 }
4163
4164 /* Compute the value of the given RENAMING_SYM, which is expected to
4165    be a symbol encoding a renaming expression.  BLOCK is the block
4166    used to evaluate the renaming.  */
4167
4168 static struct value *
4169 ada_read_renaming_var_value (struct symbol *renaming_sym,
4170                              struct block *block)
4171 {
4172   const char *sym_name;
4173   struct expression *expr;
4174   struct value *value;
4175   struct cleanup *old_chain = NULL;
4176
4177   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4178   expr = parse_exp_1 (&sym_name, 0, block, 0);
4179   old_chain = make_cleanup (free_current_contents, &expr);
4180   value = evaluate_expression (expr);
4181
4182   do_cleanups (old_chain);
4183   return value;
4184 }
4185 \f
4186
4187                                 /* Evaluation: Function Calls */
4188
4189 /* Return an lvalue containing the value VAL.  This is the identity on
4190    lvalues, and otherwise has the side-effect of allocating memory
4191    in the inferior where a copy of the value contents is copied.  */
4192
4193 static struct value *
4194 ensure_lval (struct value *val)
4195 {
4196   if (VALUE_LVAL (val) == not_lval
4197       || VALUE_LVAL (val) == lval_internalvar)
4198     {
4199       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4200       const CORE_ADDR addr =
4201         value_as_long (value_allocate_space_in_inferior (len));
4202
4203       set_value_address (val, addr);
4204       VALUE_LVAL (val) = lval_memory;
4205       write_memory (addr, value_contents (val), len);
4206     }
4207
4208   return val;
4209 }
4210
4211 /* Return the value ACTUAL, converted to be an appropriate value for a
4212    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4213    allocating any necessary descriptors (fat pointers), or copies of
4214    values not residing in memory, updating it as needed.  */
4215
4216 struct value *
4217 ada_convert_actual (struct value *actual, struct type *formal_type0)
4218 {
4219   struct type *actual_type = ada_check_typedef (value_type (actual));
4220   struct type *formal_type = ada_check_typedef (formal_type0);
4221   struct type *formal_target =
4222     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4223     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4224   struct type *actual_target =
4225     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4226     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4227
4228   if (ada_is_array_descriptor_type (formal_target)
4229       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4230     return make_array_descriptor (formal_type, actual);
4231   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4232            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4233     {
4234       struct value *result;
4235
4236       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4237           && ada_is_array_descriptor_type (actual_target))
4238         result = desc_data (actual);
4239       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4240         {
4241           if (VALUE_LVAL (actual) != lval_memory)
4242             {
4243               struct value *val;
4244
4245               actual_type = ada_check_typedef (value_type (actual));
4246               val = allocate_value (actual_type);
4247               memcpy ((char *) value_contents_raw (val),
4248                       (char *) value_contents (actual),
4249                       TYPE_LENGTH (actual_type));
4250               actual = ensure_lval (val);
4251             }
4252           result = value_addr (actual);
4253         }
4254       else
4255         return actual;
4256       return value_cast_pointers (formal_type, result, 0);
4257     }
4258   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4259     return ada_value_ind (actual);
4260
4261   return actual;
4262 }
4263
4264 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4265    type TYPE.  This is usually an inefficient no-op except on some targets
4266    (such as AVR) where the representation of a pointer and an address
4267    differs.  */
4268
4269 static CORE_ADDR
4270 value_pointer (struct value *value, struct type *type)
4271 {
4272   struct gdbarch *gdbarch = get_type_arch (type);
4273   unsigned len = TYPE_LENGTH (type);
4274   gdb_byte *buf = alloca (len);
4275   CORE_ADDR addr;
4276
4277   addr = value_address (value);
4278   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4279   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4280   return addr;
4281 }
4282
4283
4284 /* Push a descriptor of type TYPE for array value ARR on the stack at
4285    *SP, updating *SP to reflect the new descriptor.  Return either
4286    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4287    to-descriptor type rather than a descriptor type), a struct value *
4288    representing a pointer to this descriptor.  */
4289
4290 static struct value *
4291 make_array_descriptor (struct type *type, struct value *arr)
4292 {
4293   struct type *bounds_type = desc_bounds_type (type);
4294   struct type *desc_type = desc_base_type (type);
4295   struct value *descriptor = allocate_value (desc_type);
4296   struct value *bounds = allocate_value (bounds_type);
4297   int i;
4298
4299   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4300        i > 0; i -= 1)
4301     {
4302       modify_field (value_type (bounds), value_contents_writeable (bounds),
4303                     ada_array_bound (arr, i, 0),
4304                     desc_bound_bitpos (bounds_type, i, 0),
4305                     desc_bound_bitsize (bounds_type, i, 0));
4306       modify_field (value_type (bounds), value_contents_writeable (bounds),
4307                     ada_array_bound (arr, i, 1),
4308                     desc_bound_bitpos (bounds_type, i, 1),
4309                     desc_bound_bitsize (bounds_type, i, 1));
4310     }
4311
4312   bounds = ensure_lval (bounds);
4313
4314   modify_field (value_type (descriptor),
4315                 value_contents_writeable (descriptor),
4316                 value_pointer (ensure_lval (arr),
4317                                TYPE_FIELD_TYPE (desc_type, 0)),
4318                 fat_pntr_data_bitpos (desc_type),
4319                 fat_pntr_data_bitsize (desc_type));
4320
4321   modify_field (value_type (descriptor),
4322                 value_contents_writeable (descriptor),
4323                 value_pointer (bounds,
4324                                TYPE_FIELD_TYPE (desc_type, 1)),
4325                 fat_pntr_bounds_bitpos (desc_type),
4326                 fat_pntr_bounds_bitsize (desc_type));
4327
4328   descriptor = ensure_lval (descriptor);
4329
4330   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4331     return value_addr (descriptor);
4332   else
4333     return descriptor;
4334 }
4335 \f
4336                                 /* Symbol Cache Module */
4337
4338 /* Performance measurements made as of 2010-01-15 indicate that
4339    this cache does bring some noticeable improvements.  Depending
4340    on the type of entity being printed, the cache can make it as much
4341    as an order of magnitude faster than without it.
4342
4343    The descriptive type DWARF extension has significantly reduced
4344    the need for this cache, at least when DWARF is being used.  However,
4345    even in this case, some expensive name-based symbol searches are still
4346    sometimes necessary - to find an XVZ variable, mostly.  */
4347
4348 /* Initialize the contents of SYM_CACHE.  */
4349
4350 static void
4351 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4352 {
4353   obstack_init (&sym_cache->cache_space);
4354   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4355 }
4356
4357 /* Free the memory used by SYM_CACHE.  */
4358
4359 static void
4360 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4361 {
4362   obstack_free (&sym_cache->cache_space, NULL);
4363   xfree (sym_cache);
4364 }
4365
4366 /* Return the symbol cache associated to the given program space PSPACE.
4367    If not allocated for this PSPACE yet, allocate and initialize one.  */
4368
4369 static struct ada_symbol_cache *
4370 ada_get_symbol_cache (struct program_space *pspace)
4371 {
4372   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4373   struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4374
4375   if (sym_cache == NULL)
4376     {
4377       sym_cache = XCNEW (struct ada_symbol_cache);
4378       ada_init_symbol_cache (sym_cache);
4379     }
4380
4381   return sym_cache;
4382 }
4383
4384 /* Clear all entries from the symbol cache.  */
4385
4386 static void
4387 ada_clear_symbol_cache (void)
4388 {
4389   struct ada_symbol_cache *sym_cache
4390     = ada_get_symbol_cache (current_program_space);
4391
4392   obstack_free (&sym_cache->cache_space, NULL);
4393   ada_init_symbol_cache (sym_cache);
4394 }
4395
4396 /* STRUCT_DOMAIN symbols are also typedefs for the type.  This function tests
4397    the equivalency of two Ada symbol domain types.  */
4398
4399 static int
4400 ada_symbol_matches_domain (domain_enum symbol_domain, domain_enum domain)
4401 {
4402   if (symbol_domain == domain
4403       || ((domain == VAR_DOMAIN || domain == STRUCT_DOMAIN)
4404           && symbol_domain == STRUCT_DOMAIN))
4405     return 1;
4406
4407   return 0;
4408 }
4409
4410 /* Search our cache for an entry matching NAME and NAMESPACE.
4411    Return it if found, or NULL otherwise.  */
4412
4413 static struct cache_entry **
4414 find_entry (const char *name, domain_enum namespace)
4415 {
4416   struct ada_symbol_cache *sym_cache
4417     = ada_get_symbol_cache (current_program_space);
4418   int h = msymbol_hash (name) % HASH_SIZE;
4419   struct cache_entry **e;
4420
4421   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4422     {
4423       if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4424         return e;
4425     }
4426   return NULL;
4427 }
4428
4429 /* Search the symbol cache for an entry matching NAME and NAMESPACE.
4430    Return 1 if found, 0 otherwise.
4431
4432    If an entry was found and SYM is not NULL, set *SYM to the entry's
4433    SYM.  Same principle for BLOCK if not NULL.  */
4434
4435 static int
4436 lookup_cached_symbol (const char *name, domain_enum namespace,
4437                       struct symbol **sym, const struct block **block)
4438 {
4439   struct cache_entry **e = find_entry (name, namespace);
4440
4441   if (e == NULL)
4442     return 0;
4443   if (sym != NULL)
4444     *sym = (*e)->sym;
4445   if (block != NULL)
4446     *block = (*e)->block;
4447   return 1;
4448 }
4449
4450 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4451    in domain NAMESPACE, save this result in our symbol cache.  */
4452
4453 static void
4454 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
4455               const struct block *block)
4456 {
4457   struct ada_symbol_cache *sym_cache
4458     = ada_get_symbol_cache (current_program_space);
4459   int h;
4460   char *copy;
4461   struct cache_entry *e;
4462
4463   /* If the symbol is a local symbol, then do not cache it, as a search
4464      for that symbol depends on the context.  To determine whether
4465      the symbol is local or not, we check the block where we found it
4466      against the global and static blocks of its associated symtab.  */
4467   if (sym
4468       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), GLOBAL_BLOCK) != block
4469       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), STATIC_BLOCK) != block)
4470     return;
4471
4472   h = msymbol_hash (name) % HASH_SIZE;
4473   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4474                                             sizeof (*e));
4475   e->next = sym_cache->root[h];
4476   sym_cache->root[h] = e;
4477   e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4478   strcpy (copy, name);
4479   e->sym = sym;
4480   e->namespace = namespace;
4481   e->block = block;
4482 }
4483 \f
4484                                 /* Symbol Lookup */
4485
4486 /* Return nonzero if wild matching should be used when searching for
4487    all symbols matching LOOKUP_NAME.
4488
4489    LOOKUP_NAME is expected to be a symbol name after transformation
4490    for Ada lookups (see ada_name_for_lookup).  */
4491
4492 static int
4493 should_use_wild_match (const char *lookup_name)
4494 {
4495   return (strstr (lookup_name, "__") == NULL);
4496 }
4497
4498 /* Return the result of a standard (literal, C-like) lookup of NAME in
4499    given DOMAIN, visible from lexical block BLOCK.  */
4500
4501 static struct symbol *
4502 standard_lookup (const char *name, const struct block *block,
4503                  domain_enum domain)
4504 {
4505   /* Initialize it just to avoid a GCC false warning.  */
4506   struct symbol *sym = NULL;
4507
4508   if (lookup_cached_symbol (name, domain, &sym, NULL))
4509     return sym;
4510   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4511
4512   /* STRUCT_DOMAIN symbols also define a typedef for the type.  Lookup
4513      a STRUCT_DOMAIN symbol if one is requested for VAR_DOMAIN and not
4514      found.  */
4515   if (sym == NULL && domain == VAR_DOMAIN)
4516     sym = lookup_symbol_in_language (name, block, STRUCT_DOMAIN, language_c, 0);
4517
4518   cache_symbol (name, domain, sym, block_found);
4519   return sym;
4520 }
4521
4522
4523 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4524    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4525    since they contend in overloading in the same way.  */
4526 static int
4527 is_nonfunction (struct ada_symbol_info syms[], int n)
4528 {
4529   int i;
4530
4531   for (i = 0; i < n; i += 1)
4532     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4533         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4534             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4535       return 1;
4536
4537   return 0;
4538 }
4539
4540 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4541    struct types.  Otherwise, they may not.  */
4542
4543 static int
4544 equiv_types (struct type *type0, struct type *type1)
4545 {
4546   if (type0 == type1)
4547     return 1;
4548   if (type0 == NULL || type1 == NULL
4549       || TYPE_CODE (type0) != TYPE_CODE (type1))
4550     return 0;
4551   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4552        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4553       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4554       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4555     return 1;
4556
4557   return 0;
4558 }
4559
4560 /* True iff SYM0 represents the same entity as SYM1, or one that is
4561    no more defined than that of SYM1.  */
4562
4563 static int
4564 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4565 {
4566   if (sym0 == sym1)
4567     return 1;
4568   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4569       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4570     return 0;
4571
4572   switch (SYMBOL_CLASS (sym0))
4573     {
4574     case LOC_UNDEF:
4575       return 1;
4576     case LOC_TYPEDEF:
4577       {
4578         struct type *type0 = SYMBOL_TYPE (sym0);
4579         struct type *type1 = SYMBOL_TYPE (sym1);
4580         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4581         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4582         int len0 = strlen (name0);
4583
4584         return
4585           TYPE_CODE (type0) == TYPE_CODE (type1)
4586           && (equiv_types (type0, type1)
4587               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4588                   && strncmp (name1 + len0, "___XV", 5) == 0));
4589       }
4590     case LOC_CONST:
4591       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4592         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4593     default:
4594       return 0;
4595     }
4596 }
4597
4598 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4599    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4600
4601 static void
4602 add_defn_to_vec (struct obstack *obstackp,
4603                  struct symbol *sym,
4604                  const struct block *block)
4605 {
4606   int i;
4607   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4608
4609   /* Do not try to complete stub types, as the debugger is probably
4610      already scanning all symbols matching a certain name at the
4611      time when this function is called.  Trying to replace the stub
4612      type by its associated full type will cause us to restart a scan
4613      which may lead to an infinite recursion.  Instead, the client
4614      collecting the matching symbols will end up collecting several
4615      matches, with at least one of them complete.  It can then filter
4616      out the stub ones if needed.  */
4617
4618   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4619     {
4620       if (lesseq_defined_than (sym, prevDefns[i].sym))
4621         return;
4622       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4623         {
4624           prevDefns[i].sym = sym;
4625           prevDefns[i].block = block;
4626           return;
4627         }
4628     }
4629
4630   {
4631     struct ada_symbol_info info;
4632
4633     info.sym = sym;
4634     info.block = block;
4635     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4636   }
4637 }
4638
4639 /* Number of ada_symbol_info structures currently collected in 
4640    current vector in *OBSTACKP.  */
4641
4642 static int
4643 num_defns_collected (struct obstack *obstackp)
4644 {
4645   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4646 }
4647
4648 /* Vector of ada_symbol_info structures currently collected in current 
4649    vector in *OBSTACKP.  If FINISH, close off the vector and return
4650    its final address.  */
4651
4652 static struct ada_symbol_info *
4653 defns_collected (struct obstack *obstackp, int finish)
4654 {
4655   if (finish)
4656     return obstack_finish (obstackp);
4657   else
4658     return (struct ada_symbol_info *) obstack_base (obstackp);
4659 }
4660
4661 /* Return a bound minimal symbol matching NAME according to Ada
4662    decoding rules.  Returns an invalid symbol if there is no such
4663    minimal symbol.  Names prefixed with "standard__" are handled
4664    specially: "standard__" is first stripped off, and only static and
4665    global symbols are searched.  */
4666
4667 struct bound_minimal_symbol
4668 ada_lookup_simple_minsym (const char *name)
4669 {
4670   struct bound_minimal_symbol result;
4671   struct objfile *objfile;
4672   struct minimal_symbol *msymbol;
4673   const int wild_match_p = should_use_wild_match (name);
4674
4675   memset (&result, 0, sizeof (result));
4676
4677   /* Special case: If the user specifies a symbol name inside package
4678      Standard, do a non-wild matching of the symbol name without
4679      the "standard__" prefix.  This was primarily introduced in order
4680      to allow the user to specifically access the standard exceptions
4681      using, for instance, Standard.Constraint_Error when Constraint_Error
4682      is ambiguous (due to the user defining its own Constraint_Error
4683      entity inside its program).  */
4684   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4685     name += sizeof ("standard__") - 1;
4686
4687   ALL_MSYMBOLS (objfile, msymbol)
4688   {
4689     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4690         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4691       {
4692         result.minsym = msymbol;
4693         result.objfile = objfile;
4694         break;
4695       }
4696   }
4697
4698   return result;
4699 }
4700
4701 /* For all subprograms that statically enclose the subprogram of the
4702    selected frame, add symbols matching identifier NAME in DOMAIN
4703    and their blocks to the list of data in OBSTACKP, as for
4704    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4705    with a wildcard prefix.  */
4706
4707 static void
4708 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4709                                   const char *name, domain_enum namespace,
4710                                   int wild_match_p)
4711 {
4712 }
4713
4714 /* True if TYPE is definitely an artificial type supplied to a symbol
4715    for which no debugging information was given in the symbol file.  */
4716
4717 static int
4718 is_nondebugging_type (struct type *type)
4719 {
4720   const char *name = ada_type_name (type);
4721
4722   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4723 }
4724
4725 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4726    that are deemed "identical" for practical purposes.
4727
4728    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4729    types and that their number of enumerals is identical (in other
4730    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4731
4732 static int
4733 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4734 {
4735   int i;
4736
4737   /* The heuristic we use here is fairly conservative.  We consider
4738      that 2 enumerate types are identical if they have the same
4739      number of enumerals and that all enumerals have the same
4740      underlying value and name.  */
4741
4742   /* All enums in the type should have an identical underlying value.  */
4743   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4744     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4745       return 0;
4746
4747   /* All enumerals should also have the same name (modulo any numerical
4748      suffix).  */
4749   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4750     {
4751       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4752       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4753       int len_1 = strlen (name_1);
4754       int len_2 = strlen (name_2);
4755
4756       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4757       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4758       if (len_1 != len_2
4759           || strncmp (TYPE_FIELD_NAME (type1, i),
4760                       TYPE_FIELD_NAME (type2, i),
4761                       len_1) != 0)
4762         return 0;
4763     }
4764
4765   return 1;
4766 }
4767
4768 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4769    that are deemed "identical" for practical purposes.  Sometimes,
4770    enumerals are not strictly identical, but their types are so similar
4771    that they can be considered identical.
4772
4773    For instance, consider the following code:
4774
4775       type Color is (Black, Red, Green, Blue, White);
4776       type RGB_Color is new Color range Red .. Blue;
4777
4778    Type RGB_Color is a subrange of an implicit type which is a copy
4779    of type Color. If we call that implicit type RGB_ColorB ("B" is
4780    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4781    As a result, when an expression references any of the enumeral
4782    by name (Eg. "print green"), the expression is technically
4783    ambiguous and the user should be asked to disambiguate. But
4784    doing so would only hinder the user, since it wouldn't matter
4785    what choice he makes, the outcome would always be the same.
4786    So, for practical purposes, we consider them as the same.  */
4787
4788 static int
4789 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4790 {
4791   int i;
4792
4793   /* Before performing a thorough comparison check of each type,
4794      we perform a series of inexpensive checks.  We expect that these
4795      checks will quickly fail in the vast majority of cases, and thus
4796      help prevent the unnecessary use of a more expensive comparison.
4797      Said comparison also expects us to make some of these checks
4798      (see ada_identical_enum_types_p).  */
4799
4800   /* Quick check: All symbols should have an enum type.  */
4801   for (i = 0; i < nsyms; i++)
4802     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4803       return 0;
4804
4805   /* Quick check: They should all have the same value.  */
4806   for (i = 1; i < nsyms; i++)
4807     if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4808       return 0;
4809
4810   /* Quick check: They should all have the same number of enumerals.  */
4811   for (i = 1; i < nsyms; i++)
4812     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4813         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4814       return 0;
4815
4816   /* All the sanity checks passed, so we might have a set of
4817      identical enumeration types.  Perform a more complete
4818      comparison of the type of each symbol.  */
4819   for (i = 1; i < nsyms; i++)
4820     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4821                                      SYMBOL_TYPE (syms[0].sym)))
4822       return 0;
4823
4824   return 1;
4825 }
4826
4827 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4828    duplicate other symbols in the list (The only case I know of where
4829    this happens is when object files containing stabs-in-ecoff are
4830    linked with files containing ordinary ecoff debugging symbols (or no
4831    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4832    Returns the number of items in the modified list.  */
4833
4834 static int
4835 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4836 {
4837   int i, j;
4838
4839   /* We should never be called with less than 2 symbols, as there
4840      cannot be any extra symbol in that case.  But it's easy to
4841      handle, since we have nothing to do in that case.  */
4842   if (nsyms < 2)
4843     return nsyms;
4844
4845   i = 0;
4846   while (i < nsyms)
4847     {
4848       int remove_p = 0;
4849
4850       /* If two symbols have the same name and one of them is a stub type,
4851          the get rid of the stub.  */
4852
4853       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4854           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4855         {
4856           for (j = 0; j < nsyms; j++)
4857             {
4858               if (j != i
4859                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4860                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4861                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4862                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4863                 remove_p = 1;
4864             }
4865         }
4866
4867       /* Two symbols with the same name, same class and same address
4868          should be identical.  */
4869
4870       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4871           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4872           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4873         {
4874           for (j = 0; j < nsyms; j += 1)
4875             {
4876               if (i != j
4877                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4878                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4879                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4880                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4881                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4882                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4883                 remove_p = 1;
4884             }
4885         }
4886       
4887       if (remove_p)
4888         {
4889           for (j = i + 1; j < nsyms; j += 1)
4890             syms[j - 1] = syms[j];
4891           nsyms -= 1;
4892         }
4893
4894       i += 1;
4895     }
4896
4897   /* If all the remaining symbols are identical enumerals, then
4898      just keep the first one and discard the rest.
4899
4900      Unlike what we did previously, we do not discard any entry
4901      unless they are ALL identical.  This is because the symbol
4902      comparison is not a strict comparison, but rather a practical
4903      comparison.  If all symbols are considered identical, then
4904      we can just go ahead and use the first one and discard the rest.
4905      But if we cannot reduce the list to a single element, we have
4906      to ask the user to disambiguate anyways.  And if we have to
4907      present a multiple-choice menu, it's less confusing if the list
4908      isn't missing some choices that were identical and yet distinct.  */
4909   if (symbols_are_identical_enums (syms, nsyms))
4910     nsyms = 1;
4911
4912   return nsyms;
4913 }
4914
4915 /* Given a type that corresponds to a renaming entity, use the type name
4916    to extract the scope (package name or function name, fully qualified,
4917    and following the GNAT encoding convention) where this renaming has been
4918    defined.  The string returned needs to be deallocated after use.  */
4919
4920 static char *
4921 xget_renaming_scope (struct type *renaming_type)
4922 {
4923   /* The renaming types adhere to the following convention:
4924      <scope>__<rename>___<XR extension>.
4925      So, to extract the scope, we search for the "___XR" extension,
4926      and then backtrack until we find the first "__".  */
4927
4928   const char *name = type_name_no_tag (renaming_type);
4929   char *suffix = strstr (name, "___XR");
4930   char *last;
4931   int scope_len;
4932   char *scope;
4933
4934   /* Now, backtrack a bit until we find the first "__".  Start looking
4935      at suffix - 3, as the <rename> part is at least one character long.  */
4936
4937   for (last = suffix - 3; last > name; last--)
4938     if (last[0] == '_' && last[1] == '_')
4939       break;
4940
4941   /* Make a copy of scope and return it.  */
4942
4943   scope_len = last - name;
4944   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4945
4946   strncpy (scope, name, scope_len);
4947   scope[scope_len] = '\0';
4948
4949   return scope;
4950 }
4951
4952 /* Return nonzero if NAME corresponds to a package name.  */
4953
4954 static int
4955 is_package_name (const char *name)
4956 {
4957   /* Here, We take advantage of the fact that no symbols are generated
4958      for packages, while symbols are generated for each function.
4959      So the condition for NAME represent a package becomes equivalent
4960      to NAME not existing in our list of symbols.  There is only one
4961      small complication with library-level functions (see below).  */
4962
4963   char *fun_name;
4964
4965   /* If it is a function that has not been defined at library level,
4966      then we should be able to look it up in the symbols.  */
4967   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4968     return 0;
4969
4970   /* Library-level function names start with "_ada_".  See if function
4971      "_ada_" followed by NAME can be found.  */
4972
4973   /* Do a quick check that NAME does not contain "__", since library-level
4974      functions names cannot contain "__" in them.  */
4975   if (strstr (name, "__") != NULL)
4976     return 0;
4977
4978   fun_name = xstrprintf ("_ada_%s", name);
4979
4980   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4981 }
4982
4983 /* Return nonzero if SYM corresponds to a renaming entity that is
4984    not visible from FUNCTION_NAME.  */
4985
4986 static int
4987 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
4988 {
4989   char *scope;
4990   struct cleanup *old_chain;
4991
4992   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4993     return 0;
4994
4995   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4996   old_chain = make_cleanup (xfree, scope);
4997
4998   /* If the rename has been defined in a package, then it is visible.  */
4999   if (is_package_name (scope))
5000     {
5001       do_cleanups (old_chain);
5002       return 0;
5003     }
5004
5005   /* Check that the rename is in the current function scope by checking
5006      that its name starts with SCOPE.  */
5007
5008   /* If the function name starts with "_ada_", it means that it is
5009      a library-level function.  Strip this prefix before doing the
5010      comparison, as the encoding for the renaming does not contain
5011      this prefix.  */
5012   if (strncmp (function_name, "_ada_", 5) == 0)
5013     function_name += 5;
5014
5015   {
5016     int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
5017
5018     do_cleanups (old_chain);
5019     return is_invisible;
5020   }
5021 }
5022
5023 /* Remove entries from SYMS that corresponds to a renaming entity that
5024    is not visible from the function associated with CURRENT_BLOCK or
5025    that is superfluous due to the presence of more specific renaming
5026    information.  Places surviving symbols in the initial entries of
5027    SYMS and returns the number of surviving symbols.
5028    
5029    Rationale:
5030    First, in cases where an object renaming is implemented as a
5031    reference variable, GNAT may produce both the actual reference
5032    variable and the renaming encoding.  In this case, we discard the
5033    latter.
5034
5035    Second, GNAT emits a type following a specified encoding for each renaming
5036    entity.  Unfortunately, STABS currently does not support the definition
5037    of types that are local to a given lexical block, so all renamings types
5038    are emitted at library level.  As a consequence, if an application
5039    contains two renaming entities using the same name, and a user tries to
5040    print the value of one of these entities, the result of the ada symbol
5041    lookup will also contain the wrong renaming type.
5042
5043    This function partially covers for this limitation by attempting to
5044    remove from the SYMS list renaming symbols that should be visible
5045    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5046    method with the current information available.  The implementation
5047    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5048    
5049       - When the user tries to print a rename in a function while there
5050         is another rename entity defined in a package:  Normally, the
5051         rename in the function has precedence over the rename in the
5052         package, so the latter should be removed from the list.  This is
5053         currently not the case.
5054         
5055       - This function will incorrectly remove valid renames if
5056         the CURRENT_BLOCK corresponds to a function which symbol name
5057         has been changed by an "Export" pragma.  As a consequence,
5058         the user will be unable to print such rename entities.  */
5059
5060 static int
5061 remove_irrelevant_renamings (struct ada_symbol_info *syms,
5062                              int nsyms, const struct block *current_block)
5063 {
5064   struct symbol *current_function;
5065   const char *current_function_name;
5066   int i;
5067   int is_new_style_renaming;
5068
5069   /* If there is both a renaming foo___XR... encoded as a variable and
5070      a simple variable foo in the same block, discard the latter.
5071      First, zero out such symbols, then compress.  */
5072   is_new_style_renaming = 0;
5073   for (i = 0; i < nsyms; i += 1)
5074     {
5075       struct symbol *sym = syms[i].sym;
5076       const struct block *block = syms[i].block;
5077       const char *name;
5078       const char *suffix;
5079
5080       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5081         continue;
5082       name = SYMBOL_LINKAGE_NAME (sym);
5083       suffix = strstr (name, "___XR");
5084
5085       if (suffix != NULL)
5086         {
5087           int name_len = suffix - name;
5088           int j;
5089
5090           is_new_style_renaming = 1;
5091           for (j = 0; j < nsyms; j += 1)
5092             if (i != j && syms[j].sym != NULL
5093                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5094                             name_len) == 0
5095                 && block == syms[j].block)
5096               syms[j].sym = NULL;
5097         }
5098     }
5099   if (is_new_style_renaming)
5100     {
5101       int j, k;
5102
5103       for (j = k = 0; j < nsyms; j += 1)
5104         if (syms[j].sym != NULL)
5105             {
5106               syms[k] = syms[j];
5107               k += 1;
5108             }
5109       return k;
5110     }
5111
5112   /* Extract the function name associated to CURRENT_BLOCK.
5113      Abort if unable to do so.  */
5114
5115   if (current_block == NULL)
5116     return nsyms;
5117
5118   current_function = block_linkage_function (current_block);
5119   if (current_function == NULL)
5120     return nsyms;
5121
5122   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5123   if (current_function_name == NULL)
5124     return nsyms;
5125
5126   /* Check each of the symbols, and remove it from the list if it is
5127      a type corresponding to a renaming that is out of the scope of
5128      the current block.  */
5129
5130   i = 0;
5131   while (i < nsyms)
5132     {
5133       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5134           == ADA_OBJECT_RENAMING
5135           && old_renaming_is_invisible (syms[i].sym, current_function_name))
5136         {
5137           int j;
5138
5139           for (j = i + 1; j < nsyms; j += 1)
5140             syms[j - 1] = syms[j];
5141           nsyms -= 1;
5142         }
5143       else
5144         i += 1;
5145     }
5146
5147   return nsyms;
5148 }
5149
5150 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5151    whose name and domain match NAME and DOMAIN respectively.
5152    If no match was found, then extend the search to "enclosing"
5153    routines (in other words, if we're inside a nested function,
5154    search the symbols defined inside the enclosing functions).
5155    If WILD_MATCH_P is nonzero, perform the naming matching in
5156    "wild" mode (see function "wild_match" for more info).
5157
5158    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5159
5160 static void
5161 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5162                        const struct block *block, domain_enum domain,
5163                        int wild_match_p)
5164 {
5165   int block_depth = 0;
5166
5167   while (block != NULL)
5168     {
5169       block_depth += 1;
5170       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5171                              wild_match_p);
5172
5173       /* If we found a non-function match, assume that's the one.  */
5174       if (is_nonfunction (defns_collected (obstackp, 0),
5175                           num_defns_collected (obstackp)))
5176         return;
5177
5178       block = BLOCK_SUPERBLOCK (block);
5179     }
5180
5181   /* If no luck so far, try to find NAME as a local symbol in some lexically
5182      enclosing subprogram.  */
5183   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5184     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5185 }
5186
5187 /* An object of this type is used as the user_data argument when
5188    calling the map_matching_symbols method.  */
5189
5190 struct match_data
5191 {
5192   struct objfile *objfile;
5193   struct obstack *obstackp;
5194   struct symbol *arg_sym;
5195   int found_sym;
5196 };
5197
5198 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5199    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5200    containing the obstack that collects the symbol list, the file that SYM
5201    must come from, a flag indicating whether a non-argument symbol has
5202    been found in the current block, and the last argument symbol
5203    passed in SYM within the current block (if any).  When SYM is null,
5204    marking the end of a block, the argument symbol is added if no
5205    other has been found.  */
5206
5207 static int
5208 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5209 {
5210   struct match_data *data = (struct match_data *) data0;
5211   
5212   if (sym == NULL)
5213     {
5214       if (!data->found_sym && data->arg_sym != NULL) 
5215         add_defn_to_vec (data->obstackp,
5216                          fixup_symbol_section (data->arg_sym, data->objfile),
5217                          block);
5218       data->found_sym = 0;
5219       data->arg_sym = NULL;
5220     }
5221   else 
5222     {
5223       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5224         return 0;
5225       else if (SYMBOL_IS_ARGUMENT (sym))
5226         data->arg_sym = sym;
5227       else
5228         {
5229           data->found_sym = 1;
5230           add_defn_to_vec (data->obstackp,
5231                            fixup_symbol_section (sym, data->objfile),
5232                            block);
5233         }
5234     }
5235   return 0;
5236 }
5237
5238 /* Implements compare_names, but only applying the comparision using
5239    the given CASING.  */
5240
5241 static int
5242 compare_names_with_case (const char *string1, const char *string2,
5243                          enum case_sensitivity casing)
5244 {
5245   while (*string1 != '\0' && *string2 != '\0')
5246     {
5247       char c1, c2;
5248
5249       if (isspace (*string1) || isspace (*string2))
5250         return strcmp_iw_ordered (string1, string2);
5251
5252       if (casing == case_sensitive_off)
5253         {
5254           c1 = tolower (*string1);
5255           c2 = tolower (*string2);
5256         }
5257       else
5258         {
5259           c1 = *string1;
5260           c2 = *string2;
5261         }
5262       if (c1 != c2)
5263         break;
5264
5265       string1 += 1;
5266       string2 += 1;
5267     }
5268
5269   switch (*string1)
5270     {
5271     case '(':
5272       return strcmp_iw_ordered (string1, string2);
5273     case '_':
5274       if (*string2 == '\0')
5275         {
5276           if (is_name_suffix (string1))
5277             return 0;
5278           else
5279             return 1;
5280         }
5281       /* FALLTHROUGH */
5282     default:
5283       if (*string2 == '(')
5284         return strcmp_iw_ordered (string1, string2);
5285       else
5286         {
5287           if (casing == case_sensitive_off)
5288             return tolower (*string1) - tolower (*string2);
5289           else
5290             return *string1 - *string2;
5291         }
5292     }
5293 }
5294
5295 /* Compare STRING1 to STRING2, with results as for strcmp.
5296    Compatible with strcmp_iw_ordered in that...
5297
5298        strcmp_iw_ordered (STRING1, STRING2) <= 0
5299
5300    ... implies...
5301
5302        compare_names (STRING1, STRING2) <= 0
5303
5304    (they may differ as to what symbols compare equal).  */
5305
5306 static int
5307 compare_names (const char *string1, const char *string2)
5308 {
5309   int result;
5310
5311   /* Similar to what strcmp_iw_ordered does, we need to perform
5312      a case-insensitive comparison first, and only resort to
5313      a second, case-sensitive, comparison if the first one was
5314      not sufficient to differentiate the two strings.  */
5315
5316   result = compare_names_with_case (string1, string2, case_sensitive_off);
5317   if (result == 0)
5318     result = compare_names_with_case (string1, string2, case_sensitive_on);
5319
5320   return result;
5321 }
5322
5323 /* Add to OBSTACKP all non-local symbols whose name and domain match
5324    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5325    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5326
5327 static void
5328 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5329                       domain_enum domain, int global,
5330                       int is_wild_match)
5331 {
5332   struct objfile *objfile;
5333   struct match_data data;
5334
5335   memset (&data, 0, sizeof data);
5336   data.obstackp = obstackp;
5337
5338   ALL_OBJFILES (objfile)
5339     {
5340       data.objfile = objfile;
5341
5342       if (is_wild_match)
5343         {
5344           objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5345                                                  aux_add_nonlocal_symbols,
5346                                                  &data, wild_match, NULL);
5347           if (domain == VAR_DOMAIN)
5348             objfile->sf->qf->map_matching_symbols (objfile, name,
5349                                                    STRUCT_DOMAIN, global,
5350                                                    aux_add_nonlocal_symbols,
5351                                                    &data, wild_match, NULL);
5352         }
5353       else
5354         {
5355           objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5356                                                  aux_add_nonlocal_symbols,
5357                                                  &data, full_match,
5358                                                  compare_names);
5359           if (domain == VAR_DOMAIN)
5360             objfile->sf->qf->map_matching_symbols (objfile, name,
5361                                                    STRUCT_DOMAIN, global,
5362                                                    aux_add_nonlocal_symbols,
5363                                                    &data, full_match,
5364                                                    compare_names);
5365         }
5366     }
5367
5368   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5369     {
5370       ALL_OBJFILES (objfile)
5371         {
5372           char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5373           strcpy (name1, "_ada_");
5374           strcpy (name1 + sizeof ("_ada_") - 1, name);
5375           data.objfile = objfile;
5376           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5377                                                  global,
5378                                                  aux_add_nonlocal_symbols,
5379                                                  &data,
5380                                                  full_match, compare_names);
5381         }
5382     }           
5383 }
5384
5385 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5386    non-zero, enclosing scope and in global scopes, returning the number of
5387    matches.
5388    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5389    indicating the symbols found and the blocks and symbol tables (if
5390    any) in which they were found.  This vector is transient---good only to
5391    the next call of ada_lookup_symbol_list.
5392
5393    When full_search is non-zero, any non-function/non-enumeral
5394    symbol match within the nest of blocks whose innermost member is BLOCK0,
5395    is the one match returned (no other matches in that or
5396    enclosing blocks is returned).  If there are any matches in or
5397    surrounding BLOCK0, then these alone are returned.
5398
5399    Names prefixed with "standard__" are handled specially: "standard__"
5400    is first stripped off, and only static and global symbols are searched.  */
5401
5402 static int
5403 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5404                                domain_enum namespace,
5405                                struct ada_symbol_info **results,
5406                                int full_search)
5407 {
5408   struct symbol *sym;
5409   const struct block *block;
5410   const char *name;
5411   const int wild_match_p = should_use_wild_match (name0);
5412   int cacheIfUnique;
5413   int ndefns;
5414
5415   obstack_free (&symbol_list_obstack, NULL);
5416   obstack_init (&symbol_list_obstack);
5417
5418   cacheIfUnique = 0;
5419
5420   /* Search specified block and its superiors.  */
5421
5422   name = name0;
5423   block = block0;
5424
5425   /* Special case: If the user specifies a symbol name inside package
5426      Standard, do a non-wild matching of the symbol name without
5427      the "standard__" prefix.  This was primarily introduced in order
5428      to allow the user to specifically access the standard exceptions
5429      using, for instance, Standard.Constraint_Error when Constraint_Error
5430      is ambiguous (due to the user defining its own Constraint_Error
5431      entity inside its program).  */
5432   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5433     {
5434       block = NULL;
5435       name = name0 + sizeof ("standard__") - 1;
5436     }
5437
5438   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5439
5440   if (block != NULL)
5441     {
5442       if (full_search)
5443         {
5444           ada_add_local_symbols (&symbol_list_obstack, name, block,
5445                                  namespace, wild_match_p);
5446         }
5447       else
5448         {
5449           /* In the !full_search case we're are being called by
5450              ada_iterate_over_symbols, and we don't want to search
5451              superblocks.  */
5452           ada_add_block_symbols (&symbol_list_obstack, block, name,
5453                                  namespace, NULL, wild_match_p);
5454         }
5455       if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5456         goto done;
5457     }
5458
5459   /* No non-global symbols found.  Check our cache to see if we have
5460      already performed this search before.  If we have, then return
5461      the same result.  */
5462
5463   cacheIfUnique = 1;
5464   if (lookup_cached_symbol (name0, namespace, &sym, &block))
5465     {
5466       if (sym != NULL)
5467         add_defn_to_vec (&symbol_list_obstack, sym, block);
5468       goto done;
5469     }
5470
5471   /* Search symbols from all global blocks.  */
5472  
5473   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5474                         wild_match_p);
5475
5476   /* Now add symbols from all per-file blocks if we've gotten no hits
5477      (not strictly correct, but perhaps better than an error).  */
5478
5479   if (num_defns_collected (&symbol_list_obstack) == 0)
5480     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5481                           wild_match_p);
5482
5483 done:
5484   ndefns = num_defns_collected (&symbol_list_obstack);
5485   *results = defns_collected (&symbol_list_obstack, 1);
5486
5487   ndefns = remove_extra_symbols (*results, ndefns);
5488
5489   if (ndefns == 0 && full_search)
5490     cache_symbol (name0, namespace, NULL, NULL);
5491
5492   if (ndefns == 1 && full_search && cacheIfUnique)
5493     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
5494
5495   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5496
5497   return ndefns;
5498 }
5499
5500 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5501    in global scopes, returning the number of matches, and setting *RESULTS
5502    to a vector of (SYM,BLOCK) tuples.
5503    See ada_lookup_symbol_list_worker for further details.  */
5504
5505 int
5506 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5507                         domain_enum domain, struct ada_symbol_info **results)
5508 {
5509   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5510 }
5511
5512 /* Implementation of the la_iterate_over_symbols method.  */
5513
5514 static void
5515 ada_iterate_over_symbols (const struct block *block,
5516                           const char *name, domain_enum domain,
5517                           symbol_found_callback_ftype *callback,
5518                           void *data)
5519 {
5520   int ndefs, i;
5521   struct ada_symbol_info *results;
5522
5523   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5524   for (i = 0; i < ndefs; ++i)
5525     {
5526       if (! (*callback) (results[i].sym, data))
5527         break;
5528     }
5529 }
5530
5531 /* If NAME is the name of an entity, return a string that should
5532    be used to look that entity up in Ada units.  This string should
5533    be deallocated after use using xfree.
5534
5535    NAME can have any form that the "break" or "print" commands might
5536    recognize.  In other words, it does not have to be the "natural"
5537    name, or the "encoded" name.  */
5538
5539 char *
5540 ada_name_for_lookup (const char *name)
5541 {
5542   char *canon;
5543   int nlen = strlen (name);
5544
5545   if (name[0] == '<' && name[nlen - 1] == '>')
5546     {
5547       canon = xmalloc (nlen - 1);
5548       memcpy (canon, name + 1, nlen - 2);
5549       canon[nlen - 2] = '\0';
5550     }
5551   else
5552     canon = xstrdup (ada_encode (ada_fold_name (name)));
5553   return canon;
5554 }
5555
5556 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5557    to 1, but choosing the first symbol found if there are multiple
5558    choices.
5559
5560    The result is stored in *INFO, which must be non-NULL.
5561    If no match is found, INFO->SYM is set to NULL.  */
5562
5563 void
5564 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5565                            domain_enum namespace,
5566                            struct ada_symbol_info *info)
5567 {
5568   struct ada_symbol_info *candidates;
5569   int n_candidates;
5570
5571   gdb_assert (info != NULL);
5572   memset (info, 0, sizeof (struct ada_symbol_info));
5573
5574   n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
5575   if (n_candidates == 0)
5576     return;
5577
5578   *info = candidates[0];
5579   info->sym = fixup_symbol_section (info->sym, NULL);
5580 }
5581
5582 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5583    scope and in global scopes, or NULL if none.  NAME is folded and
5584    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5585    choosing the first symbol if there are multiple choices.
5586    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5587
5588 struct symbol *
5589 ada_lookup_symbol (const char *name, const struct block *block0,
5590                    domain_enum namespace, int *is_a_field_of_this)
5591 {
5592   struct ada_symbol_info info;
5593
5594   if (is_a_field_of_this != NULL)
5595     *is_a_field_of_this = 0;
5596
5597   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5598                              block0, namespace, &info);
5599   return info.sym;
5600 }
5601
5602 static struct symbol *
5603 ada_lookup_symbol_nonlocal (const char *name,
5604                             const struct block *block,
5605                             const domain_enum domain)
5606 {
5607   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5608 }
5609
5610
5611 /* True iff STR is a possible encoded suffix of a normal Ada name
5612    that is to be ignored for matching purposes.  Suffixes of parallel
5613    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5614    are given by any of the regular expressions:
5615
5616    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5617    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5618    TKB              [subprogram suffix for task bodies]
5619    _E[0-9]+[bs]$    [protected object entry suffixes]
5620    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5621
5622    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5623    match is performed.  This sequence is used to differentiate homonyms,
5624    is an optional part of a valid name suffix.  */
5625
5626 static int
5627 is_name_suffix (const char *str)
5628 {
5629   int k;
5630   const char *matching;
5631   const int len = strlen (str);
5632
5633   /* Skip optional leading __[0-9]+.  */
5634
5635   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5636     {
5637       str += 3;
5638       while (isdigit (str[0]))
5639         str += 1;
5640     }
5641   
5642   /* [.$][0-9]+ */
5643
5644   if (str[0] == '.' || str[0] == '$')
5645     {
5646       matching = str + 1;
5647       while (isdigit (matching[0]))
5648         matching += 1;
5649       if (matching[0] == '\0')
5650         return 1;
5651     }
5652
5653   /* ___[0-9]+ */
5654
5655   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5656     {
5657       matching = str + 3;
5658       while (isdigit (matching[0]))
5659         matching += 1;
5660       if (matching[0] == '\0')
5661         return 1;
5662     }
5663
5664   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5665
5666   if (strcmp (str, "TKB") == 0)
5667     return 1;
5668
5669 #if 0
5670   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5671      with a N at the end.  Unfortunately, the compiler uses the same
5672      convention for other internal types it creates.  So treating
5673      all entity names that end with an "N" as a name suffix causes
5674      some regressions.  For instance, consider the case of an enumerated
5675      type.  To support the 'Image attribute, it creates an array whose
5676      name ends with N.
5677      Having a single character like this as a suffix carrying some
5678      information is a bit risky.  Perhaps we should change the encoding
5679      to be something like "_N" instead.  In the meantime, do not do
5680      the following check.  */
5681   /* Protected Object Subprograms */
5682   if (len == 1 && str [0] == 'N')
5683     return 1;
5684 #endif
5685
5686   /* _E[0-9]+[bs]$ */
5687   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5688     {
5689       matching = str + 3;
5690       while (isdigit (matching[0]))
5691         matching += 1;
5692       if ((matching[0] == 'b' || matching[0] == 's')
5693           && matching [1] == '\0')
5694         return 1;
5695     }
5696
5697   /* ??? We should not modify STR directly, as we are doing below.  This
5698      is fine in this case, but may become problematic later if we find
5699      that this alternative did not work, and want to try matching
5700      another one from the begining of STR.  Since we modified it, we
5701      won't be able to find the begining of the string anymore!  */
5702   if (str[0] == 'X')
5703     {
5704       str += 1;
5705       while (str[0] != '_' && str[0] != '\0')
5706         {
5707           if (str[0] != 'n' && str[0] != 'b')
5708             return 0;
5709           str += 1;
5710         }
5711     }
5712
5713   if (str[0] == '\000')
5714     return 1;
5715
5716   if (str[0] == '_')
5717     {
5718       if (str[1] != '_' || str[2] == '\000')
5719         return 0;
5720       if (str[2] == '_')
5721         {
5722           if (strcmp (str + 3, "JM") == 0)
5723             return 1;
5724           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5725              the LJM suffix in favor of the JM one.  But we will
5726              still accept LJM as a valid suffix for a reasonable
5727              amount of time, just to allow ourselves to debug programs
5728              compiled using an older version of GNAT.  */
5729           if (strcmp (str + 3, "LJM") == 0)
5730             return 1;
5731           if (str[3] != 'X')
5732             return 0;
5733           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5734               || str[4] == 'U' || str[4] == 'P')
5735             return 1;
5736           if (str[4] == 'R' && str[5] != 'T')
5737             return 1;
5738           return 0;
5739         }
5740       if (!isdigit (str[2]))
5741         return 0;
5742       for (k = 3; str[k] != '\0'; k += 1)
5743         if (!isdigit (str[k]) && str[k] != '_')
5744           return 0;
5745       return 1;
5746     }
5747   if (str[0] == '$' && isdigit (str[1]))
5748     {
5749       for (k = 2; str[k] != '\0'; k += 1)
5750         if (!isdigit (str[k]) && str[k] != '_')
5751           return 0;
5752       return 1;
5753     }
5754   return 0;
5755 }
5756
5757 /* Return non-zero if the string starting at NAME and ending before
5758    NAME_END contains no capital letters.  */
5759
5760 static int
5761 is_valid_name_for_wild_match (const char *name0)
5762 {
5763   const char *decoded_name = ada_decode (name0);
5764   int i;
5765
5766   /* If the decoded name starts with an angle bracket, it means that
5767      NAME0 does not follow the GNAT encoding format.  It should then
5768      not be allowed as a possible wild match.  */
5769   if (decoded_name[0] == '<')
5770     return 0;
5771
5772   for (i=0; decoded_name[i] != '\0'; i++)
5773     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5774       return 0;
5775
5776   return 1;
5777 }
5778
5779 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5780    that could start a simple name.  Assumes that *NAMEP points into
5781    the string beginning at NAME0.  */
5782
5783 static int
5784 advance_wild_match (const char **namep, const char *name0, int target0)
5785 {
5786   const char *name = *namep;
5787
5788   while (1)
5789     {
5790       int t0, t1;
5791
5792       t0 = *name;
5793       if (t0 == '_')
5794         {
5795           t1 = name[1];
5796           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5797             {
5798               name += 1;
5799               if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5800                 break;
5801               else
5802                 name += 1;
5803             }
5804           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5805                                  || name[2] == target0))
5806             {
5807               name += 2;
5808               break;
5809             }
5810           else
5811             return 0;
5812         }
5813       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5814         name += 1;
5815       else
5816         return 0;
5817     }
5818
5819   *namep = name;
5820   return 1;
5821 }
5822
5823 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5824    informational suffixes of NAME (i.e., for which is_name_suffix is
5825    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5826
5827 static int
5828 wild_match (const char *name, const char *patn)
5829 {
5830   const char *p;
5831   const char *name0 = name;
5832
5833   while (1)
5834     {
5835       const char *match = name;
5836
5837       if (*name == *patn)
5838         {
5839           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5840             if (*p != *name)
5841               break;
5842           if (*p == '\0' && is_name_suffix (name))
5843             return match != name0 && !is_valid_name_for_wild_match (name0);
5844
5845           if (name[-1] == '_')
5846             name -= 1;
5847         }
5848       if (!advance_wild_match (&name, name0, *patn))
5849         return 1;
5850     }
5851 }
5852
5853 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5854    informational suffix.  */
5855
5856 static int
5857 full_match (const char *sym_name, const char *search_name)
5858 {
5859   return !match_name (sym_name, search_name, 0);
5860 }
5861
5862
5863 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5864    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5865    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5866    OBJFILE is the section containing BLOCK.  */
5867
5868 static void
5869 ada_add_block_symbols (struct obstack *obstackp,
5870                        const struct block *block, const char *name,
5871                        domain_enum domain, struct objfile *objfile,
5872                        int wild)
5873 {
5874   struct block_iterator iter;
5875   int name_len = strlen (name);
5876   /* A matching argument symbol, if any.  */
5877   struct symbol *arg_sym;
5878   /* Set true when we find a matching non-argument symbol.  */
5879   int found_sym;
5880   struct symbol *sym;
5881
5882   arg_sym = NULL;
5883   found_sym = 0;
5884   if (wild)
5885     {
5886       for (sym = block_iter_match_first (block, name, wild_match, &iter);
5887            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5888       {
5889         if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain)
5890             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5891           {
5892             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5893               continue;
5894             else if (SYMBOL_IS_ARGUMENT (sym))
5895               arg_sym = sym;
5896             else
5897               {
5898                 found_sym = 1;
5899                 add_defn_to_vec (obstackp,
5900                                  fixup_symbol_section (sym, objfile),
5901                                  block);
5902               }
5903           }
5904       }
5905     }
5906   else
5907     {
5908      for (sym = block_iter_match_first (block, name, full_match, &iter);
5909           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5910       {
5911         if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain))
5912           {
5913             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5914               {
5915                 if (SYMBOL_IS_ARGUMENT (sym))
5916                   arg_sym = sym;
5917                 else
5918                   {
5919                     found_sym = 1;
5920                     add_defn_to_vec (obstackp,
5921                                      fixup_symbol_section (sym, objfile),
5922                                      block);
5923                   }
5924               }
5925           }
5926       }
5927     }
5928
5929   if (!found_sym && arg_sym != NULL)
5930     {
5931       add_defn_to_vec (obstackp,
5932                        fixup_symbol_section (arg_sym, objfile),
5933                        block);
5934     }
5935
5936   if (!wild)
5937     {
5938       arg_sym = NULL;
5939       found_sym = 0;
5940
5941       ALL_BLOCK_SYMBOLS (block, iter, sym)
5942       {
5943         if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain))
5944           {
5945             int cmp;
5946
5947             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5948             if (cmp == 0)
5949               {
5950                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5951                 if (cmp == 0)
5952                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5953                                  name_len);
5954               }
5955
5956             if (cmp == 0
5957                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5958               {
5959                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5960                   {
5961                     if (SYMBOL_IS_ARGUMENT (sym))
5962                       arg_sym = sym;
5963                     else
5964                       {
5965                         found_sym = 1;
5966                         add_defn_to_vec (obstackp,
5967                                          fixup_symbol_section (sym, objfile),
5968                                          block);
5969                       }
5970                   }
5971               }
5972           }
5973       }
5974
5975       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5976          They aren't parameters, right?  */
5977       if (!found_sym && arg_sym != NULL)
5978         {
5979           add_defn_to_vec (obstackp,
5980                            fixup_symbol_section (arg_sym, objfile),
5981                            block);
5982         }
5983     }
5984 }
5985 \f
5986
5987                                 /* Symbol Completion */
5988
5989 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5990    name in a form that's appropriate for the completion.  The result
5991    does not need to be deallocated, but is only good until the next call.
5992
5993    TEXT_LEN is equal to the length of TEXT.
5994    Perform a wild match if WILD_MATCH_P is set.
5995    ENCODED_P should be set if TEXT represents the start of a symbol name
5996    in its encoded form.  */
5997
5998 static const char *
5999 symbol_completion_match (const char *sym_name,
6000                          const char *text, int text_len,
6001                          int wild_match_p, int encoded_p)
6002 {
6003   const int verbatim_match = (text[0] == '<');
6004   int match = 0;
6005
6006   if (verbatim_match)
6007     {
6008       /* Strip the leading angle bracket.  */
6009       text = text + 1;
6010       text_len--;
6011     }
6012
6013   /* First, test against the fully qualified name of the symbol.  */
6014
6015   if (strncmp (sym_name, text, text_len) == 0)
6016     match = 1;
6017
6018   if (match && !encoded_p)
6019     {
6020       /* One needed check before declaring a positive match is to verify
6021          that iff we are doing a verbatim match, the decoded version
6022          of the symbol name starts with '<'.  Otherwise, this symbol name
6023          is not a suitable completion.  */
6024       const char *sym_name_copy = sym_name;
6025       int has_angle_bracket;
6026
6027       sym_name = ada_decode (sym_name);
6028       has_angle_bracket = (sym_name[0] == '<');
6029       match = (has_angle_bracket == verbatim_match);
6030       sym_name = sym_name_copy;
6031     }
6032
6033   if (match && !verbatim_match)
6034     {
6035       /* When doing non-verbatim match, another check that needs to
6036          be done is to verify that the potentially matching symbol name
6037          does not include capital letters, because the ada-mode would
6038          not be able to understand these symbol names without the
6039          angle bracket notation.  */
6040       const char *tmp;
6041
6042       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6043       if (*tmp != '\0')
6044         match = 0;
6045     }
6046
6047   /* Second: Try wild matching...  */
6048
6049   if (!match && wild_match_p)
6050     {
6051       /* Since we are doing wild matching, this means that TEXT
6052          may represent an unqualified symbol name.  We therefore must
6053          also compare TEXT against the unqualified name of the symbol.  */
6054       sym_name = ada_unqualified_name (ada_decode (sym_name));
6055
6056       if (strncmp (sym_name, text, text_len) == 0)
6057         match = 1;
6058     }
6059
6060   /* Finally: If we found a mach, prepare the result to return.  */
6061
6062   if (!match)
6063     return NULL;
6064
6065   if (verbatim_match)
6066     sym_name = add_angle_brackets (sym_name);
6067
6068   if (!encoded_p)
6069     sym_name = ada_decode (sym_name);
6070
6071   return sym_name;
6072 }
6073
6074 /* A companion function to ada_make_symbol_completion_list().
6075    Check if SYM_NAME represents a symbol which name would be suitable
6076    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6077    it is appended at the end of the given string vector SV.
6078
6079    ORIG_TEXT is the string original string from the user command
6080    that needs to be completed.  WORD is the entire command on which
6081    completion should be performed.  These two parameters are used to
6082    determine which part of the symbol name should be added to the
6083    completion vector.
6084    if WILD_MATCH_P is set, then wild matching is performed.
6085    ENCODED_P should be set if TEXT represents a symbol name in its
6086    encoded formed (in which case the completion should also be
6087    encoded).  */
6088
6089 static void
6090 symbol_completion_add (VEC(char_ptr) **sv,
6091                        const char *sym_name,
6092                        const char *text, int text_len,
6093                        const char *orig_text, const char *word,
6094                        int wild_match_p, int encoded_p)
6095 {
6096   const char *match = symbol_completion_match (sym_name, text, text_len,
6097                                                wild_match_p, encoded_p);
6098   char *completion;
6099
6100   if (match == NULL)
6101     return;
6102
6103   /* We found a match, so add the appropriate completion to the given
6104      string vector.  */
6105
6106   if (word == orig_text)
6107     {
6108       completion = xmalloc (strlen (match) + 5);
6109       strcpy (completion, match);
6110     }
6111   else if (word > orig_text)
6112     {
6113       /* Return some portion of sym_name.  */
6114       completion = xmalloc (strlen (match) + 5);
6115       strcpy (completion, match + (word - orig_text));
6116     }
6117   else
6118     {
6119       /* Return some of ORIG_TEXT plus sym_name.  */
6120       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6121       strncpy (completion, word, orig_text - word);
6122       completion[orig_text - word] = '\0';
6123       strcat (completion, match);
6124     }
6125
6126   VEC_safe_push (char_ptr, *sv, completion);
6127 }
6128
6129 /* An object of this type is passed as the user_data argument to the
6130    expand_symtabs_matching method.  */
6131 struct add_partial_datum
6132 {
6133   VEC(char_ptr) **completions;
6134   const char *text;
6135   int text_len;
6136   const char *text0;
6137   const char *word;
6138   int wild_match;
6139   int encoded;
6140 };
6141
6142 /* A callback for expand_symtabs_matching.  */
6143
6144 static int
6145 ada_complete_symbol_matcher (const char *name, void *user_data)
6146 {
6147   struct add_partial_datum *data = user_data;
6148   
6149   return symbol_completion_match (name, data->text, data->text_len,
6150                                   data->wild_match, data->encoded) != NULL;
6151 }
6152
6153 /* Return a list of possible symbol names completing TEXT0.  WORD is
6154    the entire command on which completion is made.  */
6155
6156 static VEC (char_ptr) *
6157 ada_make_symbol_completion_list (const char *text0, const char *word,
6158                                  enum type_code code)
6159 {
6160   char *text;
6161   int text_len;
6162   int wild_match_p;
6163   int encoded_p;
6164   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6165   struct symbol *sym;
6166   struct symtab *s;
6167   struct minimal_symbol *msymbol;
6168   struct objfile *objfile;
6169   struct block *b, *surrounding_static_block = 0;
6170   int i;
6171   struct block_iterator iter;
6172   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6173
6174   gdb_assert (code == TYPE_CODE_UNDEF);
6175
6176   if (text0[0] == '<')
6177     {
6178       text = xstrdup (text0);
6179       make_cleanup (xfree, text);
6180       text_len = strlen (text);
6181       wild_match_p = 0;
6182       encoded_p = 1;
6183     }
6184   else
6185     {
6186       text = xstrdup (ada_encode (text0));
6187       make_cleanup (xfree, text);
6188       text_len = strlen (text);
6189       for (i = 0; i < text_len; i++)
6190         text[i] = tolower (text[i]);
6191
6192       encoded_p = (strstr (text0, "__") != NULL);
6193       /* If the name contains a ".", then the user is entering a fully
6194          qualified entity name, and the match must not be done in wild
6195          mode.  Similarly, if the user wants to complete what looks like
6196          an encoded name, the match must not be done in wild mode.  */
6197       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6198     }
6199
6200   /* First, look at the partial symtab symbols.  */
6201   {
6202     struct add_partial_datum data;
6203
6204     data.completions = &completions;
6205     data.text = text;
6206     data.text_len = text_len;
6207     data.text0 = text0;
6208     data.word = word;
6209     data.wild_match = wild_match_p;
6210     data.encoded = encoded_p;
6211     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6212                              &data);
6213   }
6214
6215   /* At this point scan through the misc symbol vectors and add each
6216      symbol you find to the list.  Eventually we want to ignore
6217      anything that isn't a text symbol (everything else will be
6218      handled by the psymtab code above).  */
6219
6220   ALL_MSYMBOLS (objfile, msymbol)
6221   {
6222     QUIT;
6223     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6224                            text, text_len, text0, word, wild_match_p,
6225                            encoded_p);
6226   }
6227
6228   /* Search upwards from currently selected frame (so that we can
6229      complete on local vars.  */
6230
6231   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6232     {
6233       if (!BLOCK_SUPERBLOCK (b))
6234         surrounding_static_block = b;   /* For elmin of dups */
6235
6236       ALL_BLOCK_SYMBOLS (b, iter, sym)
6237       {
6238         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6239                                text, text_len, text0, word,
6240                                wild_match_p, encoded_p);
6241       }
6242     }
6243
6244   /* Go through the symtabs and check the externs and statics for
6245      symbols which match.  */
6246
6247   ALL_SYMTABS (objfile, s)
6248   {
6249     QUIT;
6250     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
6251     ALL_BLOCK_SYMBOLS (b, iter, sym)
6252     {
6253       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6254                              text, text_len, text0, word,
6255                              wild_match_p, encoded_p);
6256     }
6257   }
6258
6259   ALL_SYMTABS (objfile, s)
6260   {
6261     QUIT;
6262     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
6263     /* Don't do this block twice.  */
6264     if (b == surrounding_static_block)
6265       continue;
6266     ALL_BLOCK_SYMBOLS (b, iter, sym)
6267     {
6268       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6269                              text, text_len, text0, word,
6270                              wild_match_p, encoded_p);
6271     }
6272   }
6273
6274   do_cleanups (old_chain);
6275   return completions;
6276 }
6277
6278                                 /* Field Access */
6279
6280 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6281    for tagged types.  */
6282
6283 static int
6284 ada_is_dispatch_table_ptr_type (struct type *type)
6285 {
6286   const char *name;
6287
6288   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6289     return 0;
6290
6291   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6292   if (name == NULL)
6293     return 0;
6294
6295   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6296 }
6297
6298 /* Return non-zero if TYPE is an interface tag.  */
6299
6300 static int
6301 ada_is_interface_tag (struct type *type)
6302 {
6303   const char *name = TYPE_NAME (type);
6304
6305   if (name == NULL)
6306     return 0;
6307
6308   return (strcmp (name, "ada__tags__interface_tag") == 0);
6309 }
6310
6311 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6312    to be invisible to users.  */
6313
6314 int
6315 ada_is_ignored_field (struct type *type, int field_num)
6316 {
6317   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6318     return 1;
6319
6320   /* Check the name of that field.  */
6321   {
6322     const char *name = TYPE_FIELD_NAME (type, field_num);
6323
6324     /* Anonymous field names should not be printed.
6325        brobecker/2007-02-20: I don't think this can actually happen
6326        but we don't want to print the value of annonymous fields anyway.  */
6327     if (name == NULL)
6328       return 1;
6329
6330     /* Normally, fields whose name start with an underscore ("_")
6331        are fields that have been internally generated by the compiler,
6332        and thus should not be printed.  The "_parent" field is special,
6333        however: This is a field internally generated by the compiler
6334        for tagged types, and it contains the components inherited from
6335        the parent type.  This field should not be printed as is, but
6336        should not be ignored either.  */
6337     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6338       return 1;
6339   }
6340
6341   /* If this is the dispatch table of a tagged type or an interface tag,
6342      then ignore.  */
6343   if (ada_is_tagged_type (type, 1)
6344       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6345           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6346     return 1;
6347
6348   /* Not a special field, so it should not be ignored.  */
6349   return 0;
6350 }
6351
6352 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6353    pointer or reference type whose ultimate target has a tag field.  */
6354
6355 int
6356 ada_is_tagged_type (struct type *type, int refok)
6357 {
6358   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6359 }
6360
6361 /* True iff TYPE represents the type of X'Tag */
6362
6363 int
6364 ada_is_tag_type (struct type *type)
6365 {
6366   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6367     return 0;
6368   else
6369     {
6370       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6371
6372       return (name != NULL
6373               && strcmp (name, "ada__tags__dispatch_table") == 0);
6374     }
6375 }
6376
6377 /* The type of the tag on VAL.  */
6378
6379 struct type *
6380 ada_tag_type (struct value *val)
6381 {
6382   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6383 }
6384
6385 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6386    retired at Ada 05).  */
6387
6388 static int
6389 is_ada95_tag (struct value *tag)
6390 {
6391   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6392 }
6393
6394 /* The value of the tag on VAL.  */
6395
6396 struct value *
6397 ada_value_tag (struct value *val)
6398 {
6399   return ada_value_struct_elt (val, "_tag", 0);
6400 }
6401
6402 /* The value of the tag on the object of type TYPE whose contents are
6403    saved at VALADDR, if it is non-null, or is at memory address
6404    ADDRESS.  */
6405
6406 static struct value *
6407 value_tag_from_contents_and_address (struct type *type,
6408                                      const gdb_byte *valaddr,
6409                                      CORE_ADDR address)
6410 {
6411   int tag_byte_offset;
6412   struct type *tag_type;
6413
6414   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6415                          NULL, NULL, NULL))
6416     {
6417       const gdb_byte *valaddr1 = ((valaddr == NULL)
6418                                   ? NULL
6419                                   : valaddr + tag_byte_offset);
6420       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6421
6422       return value_from_contents_and_address (tag_type, valaddr1, address1);
6423     }
6424   return NULL;
6425 }
6426
6427 static struct type *
6428 type_from_tag (struct value *tag)
6429 {
6430   const char *type_name = ada_tag_name (tag);
6431
6432   if (type_name != NULL)
6433     return ada_find_any_type (ada_encode (type_name));
6434   return NULL;
6435 }
6436
6437 /* Given a value OBJ of a tagged type, return a value of this
6438    type at the base address of the object.  The base address, as
6439    defined in Ada.Tags, it is the address of the primary tag of
6440    the object, and therefore where the field values of its full
6441    view can be fetched.  */
6442
6443 struct value *
6444 ada_tag_value_at_base_address (struct value *obj)
6445 {
6446   volatile struct gdb_exception e;
6447   struct value *val;
6448   LONGEST offset_to_top = 0;
6449   struct type *ptr_type, *obj_type;
6450   struct value *tag;
6451   CORE_ADDR base_address;
6452
6453   obj_type = value_type (obj);
6454
6455   /* It is the responsability of the caller to deref pointers.  */
6456
6457   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6458       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6459     return obj;
6460
6461   tag = ada_value_tag (obj);
6462   if (!tag)
6463     return obj;
6464
6465   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6466
6467   if (is_ada95_tag (tag))
6468     return obj;
6469
6470   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6471   ptr_type = lookup_pointer_type (ptr_type);
6472   val = value_cast (ptr_type, tag);
6473   if (!val)
6474     return obj;
6475
6476   /* It is perfectly possible that an exception be raised while
6477      trying to determine the base address, just like for the tag;
6478      see ada_tag_name for more details.  We do not print the error
6479      message for the same reason.  */
6480
6481   TRY_CATCH (e, RETURN_MASK_ERROR)
6482     {
6483       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6484     }
6485
6486   if (e.reason < 0)
6487     return obj;
6488
6489   /* If offset is null, nothing to do.  */
6490
6491   if (offset_to_top == 0)
6492     return obj;
6493
6494   /* -1 is a special case in Ada.Tags; however, what should be done
6495      is not quite clear from the documentation.  So do nothing for
6496      now.  */
6497
6498   if (offset_to_top == -1)
6499     return obj;
6500
6501   base_address = value_address (obj) - offset_to_top;
6502   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6503
6504   /* Make sure that we have a proper tag at the new address.
6505      Otherwise, offset_to_top is bogus (which can happen when
6506      the object is not initialized yet).  */
6507
6508   if (!tag)
6509     return obj;
6510
6511   obj_type = type_from_tag (tag);
6512
6513   if (!obj_type)
6514     return obj;
6515
6516   return value_from_contents_and_address (obj_type, NULL, base_address);
6517 }
6518
6519 /* Return the "ada__tags__type_specific_data" type.  */
6520
6521 static struct type *
6522 ada_get_tsd_type (struct inferior *inf)
6523 {
6524   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6525
6526   if (data->tsd_type == 0)
6527     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6528   return data->tsd_type;
6529 }
6530
6531 /* Return the TSD (type-specific data) associated to the given TAG.
6532    TAG is assumed to be the tag of a tagged-type entity.
6533
6534    May return NULL if we are unable to get the TSD.  */
6535
6536 static struct value *
6537 ada_get_tsd_from_tag (struct value *tag)
6538 {
6539   struct value *val;
6540   struct type *type;
6541
6542   /* First option: The TSD is simply stored as a field of our TAG.
6543      Only older versions of GNAT would use this format, but we have
6544      to test it first, because there are no visible markers for
6545      the current approach except the absence of that field.  */
6546
6547   val = ada_value_struct_elt (tag, "tsd", 1);
6548   if (val)
6549     return val;
6550
6551   /* Try the second representation for the dispatch table (in which
6552      there is no explicit 'tsd' field in the referent of the tag pointer,
6553      and instead the tsd pointer is stored just before the dispatch
6554      table.  */
6555
6556   type = ada_get_tsd_type (current_inferior());
6557   if (type == NULL)
6558     return NULL;
6559   type = lookup_pointer_type (lookup_pointer_type (type));
6560   val = value_cast (type, tag);
6561   if (val == NULL)
6562     return NULL;
6563   return value_ind (value_ptradd (val, -1));
6564 }
6565
6566 /* Given the TSD of a tag (type-specific data), return a string
6567    containing the name of the associated type.
6568
6569    The returned value is good until the next call.  May return NULL
6570    if we are unable to determine the tag name.  */
6571
6572 static char *
6573 ada_tag_name_from_tsd (struct value *tsd)
6574 {
6575   static char name[1024];
6576   char *p;
6577   struct value *val;
6578
6579   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6580   if (val == NULL)
6581     return NULL;
6582   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6583   for (p = name; *p != '\0'; p += 1)
6584     if (isalpha (*p))
6585       *p = tolower (*p);
6586   return name;
6587 }
6588
6589 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6590    a C string.
6591
6592    Return NULL if the TAG is not an Ada tag, or if we were unable to
6593    determine the name of that tag.  The result is good until the next
6594    call.  */
6595
6596 const char *
6597 ada_tag_name (struct value *tag)
6598 {
6599   volatile struct gdb_exception e;
6600   char *name = NULL;
6601
6602   if (!ada_is_tag_type (value_type (tag)))
6603     return NULL;
6604
6605   /* It is perfectly possible that an exception be raised while trying
6606      to determine the TAG's name, even under normal circumstances:
6607      The associated variable may be uninitialized or corrupted, for
6608      instance. We do not let any exception propagate past this point.
6609      instead we return NULL.
6610
6611      We also do not print the error message either (which often is very
6612      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6613      the caller print a more meaningful message if necessary.  */
6614   TRY_CATCH (e, RETURN_MASK_ERROR)
6615     {
6616       struct value *tsd = ada_get_tsd_from_tag (tag);
6617
6618       if (tsd != NULL)
6619         name = ada_tag_name_from_tsd (tsd);
6620     }
6621
6622   return name;
6623 }
6624
6625 /* The parent type of TYPE, or NULL if none.  */
6626
6627 struct type *
6628 ada_parent_type (struct type *type)
6629 {
6630   int i;
6631
6632   type = ada_check_typedef (type);
6633
6634   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6635     return NULL;
6636
6637   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6638     if (ada_is_parent_field (type, i))
6639       {
6640         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6641
6642         /* If the _parent field is a pointer, then dereference it.  */
6643         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6644           parent_type = TYPE_TARGET_TYPE (parent_type);
6645         /* If there is a parallel XVS type, get the actual base type.  */
6646         parent_type = ada_get_base_type (parent_type);
6647
6648         return ada_check_typedef (parent_type);
6649       }
6650
6651   return NULL;
6652 }
6653
6654 /* True iff field number FIELD_NUM of structure type TYPE contains the
6655    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6656    a structure type with at least FIELD_NUM+1 fields.  */
6657
6658 int
6659 ada_is_parent_field (struct type *type, int field_num)
6660 {
6661   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6662
6663   return (name != NULL
6664           && (strncmp (name, "PARENT", 6) == 0
6665               || strncmp (name, "_parent", 7) == 0));
6666 }
6667
6668 /* True iff field number FIELD_NUM of structure type TYPE is a
6669    transparent wrapper field (which should be silently traversed when doing
6670    field selection and flattened when printing).  Assumes TYPE is a
6671    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6672    structures.  */
6673
6674 int
6675 ada_is_wrapper_field (struct type *type, int field_num)
6676 {
6677   const char *name = TYPE_FIELD_NAME (type, field_num);
6678
6679   return (name != NULL
6680           && (strncmp (name, "PARENT", 6) == 0
6681               || strcmp (name, "REP") == 0
6682               || strncmp (name, "_parent", 7) == 0
6683               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6684 }
6685
6686 /* True iff field number FIELD_NUM of structure or union type TYPE
6687    is a variant wrapper.  Assumes TYPE is a structure type with at least
6688    FIELD_NUM+1 fields.  */
6689
6690 int
6691 ada_is_variant_part (struct type *type, int field_num)
6692 {
6693   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6694
6695   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6696           || (is_dynamic_field (type, field_num)
6697               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
6698                   == TYPE_CODE_UNION)));
6699 }
6700
6701 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6702    whose discriminants are contained in the record type OUTER_TYPE,
6703    returns the type of the controlling discriminant for the variant.
6704    May return NULL if the type could not be found.  */
6705
6706 struct type *
6707 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6708 {
6709   char *name = ada_variant_discrim_name (var_type);
6710
6711   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6712 }
6713
6714 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6715    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6716    represents a 'when others' clause; otherwise 0.  */
6717
6718 int
6719 ada_is_others_clause (struct type *type, int field_num)
6720 {
6721   const char *name = TYPE_FIELD_NAME (type, field_num);
6722
6723   return (name != NULL && name[0] == 'O');
6724 }
6725
6726 /* Assuming that TYPE0 is the type of the variant part of a record,
6727    returns the name of the discriminant controlling the variant.
6728    The value is valid until the next call to ada_variant_discrim_name.  */
6729
6730 char *
6731 ada_variant_discrim_name (struct type *type0)
6732 {
6733   static char *result = NULL;
6734   static size_t result_len = 0;
6735   struct type *type;
6736   const char *name;
6737   const char *discrim_end;
6738   const char *discrim_start;
6739
6740   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6741     type = TYPE_TARGET_TYPE (type0);
6742   else
6743     type = type0;
6744
6745   name = ada_type_name (type);
6746
6747   if (name == NULL || name[0] == '\000')
6748     return "";
6749
6750   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6751        discrim_end -= 1)
6752     {
6753       if (strncmp (discrim_end, "___XVN", 6) == 0)
6754         break;
6755     }
6756   if (discrim_end == name)
6757     return "";
6758
6759   for (discrim_start = discrim_end; discrim_start != name + 3;
6760        discrim_start -= 1)
6761     {
6762       if (discrim_start == name + 1)
6763         return "";
6764       if ((discrim_start > name + 3
6765            && strncmp (discrim_start - 3, "___", 3) == 0)
6766           || discrim_start[-1] == '.')
6767         break;
6768     }
6769
6770   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6771   strncpy (result, discrim_start, discrim_end - discrim_start);
6772   result[discrim_end - discrim_start] = '\0';
6773   return result;
6774 }
6775
6776 /* Scan STR for a subtype-encoded number, beginning at position K.
6777    Put the position of the character just past the number scanned in
6778    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6779    Return 1 if there was a valid number at the given position, and 0
6780    otherwise.  A "subtype-encoded" number consists of the absolute value
6781    in decimal, followed by the letter 'm' to indicate a negative number.
6782    Assumes 0m does not occur.  */
6783
6784 int
6785 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6786 {
6787   ULONGEST RU;
6788
6789   if (!isdigit (str[k]))
6790     return 0;
6791
6792   /* Do it the hard way so as not to make any assumption about
6793      the relationship of unsigned long (%lu scan format code) and
6794      LONGEST.  */
6795   RU = 0;
6796   while (isdigit (str[k]))
6797     {
6798       RU = RU * 10 + (str[k] - '0');
6799       k += 1;
6800     }
6801
6802   if (str[k] == 'm')
6803     {
6804       if (R != NULL)
6805         *R = (-(LONGEST) (RU - 1)) - 1;
6806       k += 1;
6807     }
6808   else if (R != NULL)
6809     *R = (LONGEST) RU;
6810
6811   /* NOTE on the above: Technically, C does not say what the results of
6812      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6813      number representable as a LONGEST (although either would probably work
6814      in most implementations).  When RU>0, the locution in the then branch
6815      above is always equivalent to the negative of RU.  */
6816
6817   if (new_k != NULL)
6818     *new_k = k;
6819   return 1;
6820 }
6821
6822 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6823    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6824    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6825
6826 int
6827 ada_in_variant (LONGEST val, struct type *type, int field_num)
6828 {
6829   const char *name = TYPE_FIELD_NAME (type, field_num);
6830   int p;
6831
6832   p = 0;
6833   while (1)
6834     {
6835       switch (name[p])
6836         {
6837         case '\0':
6838           return 0;
6839         case 'S':
6840           {
6841             LONGEST W;
6842
6843             if (!ada_scan_number (name, p + 1, &W, &p))
6844               return 0;
6845             if (val == W)
6846               return 1;
6847             break;
6848           }
6849         case 'R':
6850           {
6851             LONGEST L, U;
6852
6853             if (!ada_scan_number (name, p + 1, &L, &p)
6854                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6855               return 0;
6856             if (val >= L && val <= U)
6857               return 1;
6858             break;
6859           }
6860         case 'O':
6861           return 1;
6862         default:
6863           return 0;
6864         }
6865     }
6866 }
6867
6868 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6869
6870 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6871    ARG_TYPE, extract and return the value of one of its (non-static)
6872    fields.  FIELDNO says which field.   Differs from value_primitive_field
6873    only in that it can handle packed values of arbitrary type.  */
6874
6875 static struct value *
6876 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6877                            struct type *arg_type)
6878 {
6879   struct type *type;
6880
6881   arg_type = ada_check_typedef (arg_type);
6882   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6883
6884   /* Handle packed fields.  */
6885
6886   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6887     {
6888       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6889       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6890
6891       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6892                                              offset + bit_pos / 8,
6893                                              bit_pos % 8, bit_size, type);
6894     }
6895   else
6896     return value_primitive_field (arg1, offset, fieldno, arg_type);
6897 }
6898
6899 /* Find field with name NAME in object of type TYPE.  If found, 
6900    set the following for each argument that is non-null:
6901     - *FIELD_TYPE_P to the field's type; 
6902     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6903       an object of that type;
6904     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6905     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6906       0 otherwise;
6907    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6908    fields up to but not including the desired field, or by the total
6909    number of fields if not found.   A NULL value of NAME never
6910    matches; the function just counts visible fields in this case.
6911    
6912    Returns 1 if found, 0 otherwise.  */
6913
6914 static int
6915 find_struct_field (const char *name, struct type *type, int offset,
6916                    struct type **field_type_p,
6917                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6918                    int *index_p)
6919 {
6920   int i;
6921
6922   type = ada_check_typedef (type);
6923
6924   if (field_type_p != NULL)
6925     *field_type_p = NULL;
6926   if (byte_offset_p != NULL)
6927     *byte_offset_p = 0;
6928   if (bit_offset_p != NULL)
6929     *bit_offset_p = 0;
6930   if (bit_size_p != NULL)
6931     *bit_size_p = 0;
6932
6933   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6934     {
6935       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6936       int fld_offset = offset + bit_pos / 8;
6937       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6938
6939       if (t_field_name == NULL)
6940         continue;
6941
6942       else if (name != NULL && field_name_match (t_field_name, name))
6943         {
6944           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6945
6946           if (field_type_p != NULL)
6947             *field_type_p = TYPE_FIELD_TYPE (type, i);
6948           if (byte_offset_p != NULL)
6949             *byte_offset_p = fld_offset;
6950           if (bit_offset_p != NULL)
6951             *bit_offset_p = bit_pos % 8;
6952           if (bit_size_p != NULL)
6953             *bit_size_p = bit_size;
6954           return 1;
6955         }
6956       else if (ada_is_wrapper_field (type, i))
6957         {
6958           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6959                                  field_type_p, byte_offset_p, bit_offset_p,
6960                                  bit_size_p, index_p))
6961             return 1;
6962         }
6963       else if (ada_is_variant_part (type, i))
6964         {
6965           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6966              fixed type?? */
6967           int j;
6968           struct type *field_type
6969             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6970
6971           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6972             {
6973               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6974                                      fld_offset
6975                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6976                                      field_type_p, byte_offset_p,
6977                                      bit_offset_p, bit_size_p, index_p))
6978                 return 1;
6979             }
6980         }
6981       else if (index_p != NULL)
6982         *index_p += 1;
6983     }
6984   return 0;
6985 }
6986
6987 /* Number of user-visible fields in record type TYPE.  */
6988
6989 static int
6990 num_visible_fields (struct type *type)
6991 {
6992   int n;
6993
6994   n = 0;
6995   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6996   return n;
6997 }
6998
6999 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
7000    and search in it assuming it has (class) type TYPE.
7001    If found, return value, else return NULL.
7002
7003    Searches recursively through wrapper fields (e.g., '_parent').  */
7004
7005 static struct value *
7006 ada_search_struct_field (char *name, struct value *arg, int offset,
7007                          struct type *type)
7008 {
7009   int i;
7010
7011   type = ada_check_typedef (type);
7012   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7013     {
7014       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7015
7016       if (t_field_name == NULL)
7017         continue;
7018
7019       else if (field_name_match (t_field_name, name))
7020         return ada_value_primitive_field (arg, offset, i, type);
7021
7022       else if (ada_is_wrapper_field (type, i))
7023         {
7024           struct value *v =     /* Do not let indent join lines here.  */
7025             ada_search_struct_field (name, arg,
7026                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7027                                      TYPE_FIELD_TYPE (type, i));
7028
7029           if (v != NULL)
7030             return v;
7031         }
7032
7033       else if (ada_is_variant_part (type, i))
7034         {
7035           /* PNH: Do we ever get here?  See find_struct_field.  */
7036           int j;
7037           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7038                                                                         i));
7039           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7040
7041           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7042             {
7043               struct value *v = ada_search_struct_field /* Force line
7044                                                            break.  */
7045                 (name, arg,
7046                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7047                  TYPE_FIELD_TYPE (field_type, j));
7048
7049               if (v != NULL)
7050                 return v;
7051             }
7052         }
7053     }
7054   return NULL;
7055 }
7056
7057 static struct value *ada_index_struct_field_1 (int *, struct value *,
7058                                                int, struct type *);
7059
7060
7061 /* Return field #INDEX in ARG, where the index is that returned by
7062  * find_struct_field through its INDEX_P argument.  Adjust the address
7063  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7064  * If found, return value, else return NULL.  */
7065
7066 static struct value *
7067 ada_index_struct_field (int index, struct value *arg, int offset,
7068                         struct type *type)
7069 {
7070   return ada_index_struct_field_1 (&index, arg, offset, type);
7071 }
7072
7073
7074 /* Auxiliary function for ada_index_struct_field.  Like
7075  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7076  * *INDEX_P.  */
7077
7078 static struct value *
7079 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7080                           struct type *type)
7081 {
7082   int i;
7083   type = ada_check_typedef (type);
7084
7085   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7086     {
7087       if (TYPE_FIELD_NAME (type, i) == NULL)
7088         continue;
7089       else if (ada_is_wrapper_field (type, i))
7090         {
7091           struct value *v =     /* Do not let indent join lines here.  */
7092             ada_index_struct_field_1 (index_p, arg,
7093                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7094                                       TYPE_FIELD_TYPE (type, i));
7095
7096           if (v != NULL)
7097             return v;
7098         }
7099
7100       else if (ada_is_variant_part (type, i))
7101         {
7102           /* PNH: Do we ever get here?  See ada_search_struct_field,
7103              find_struct_field.  */
7104           error (_("Cannot assign this kind of variant record"));
7105         }
7106       else if (*index_p == 0)
7107         return ada_value_primitive_field (arg, offset, i, type);
7108       else
7109         *index_p -= 1;
7110     }
7111   return NULL;
7112 }
7113
7114 /* Given ARG, a value of type (pointer or reference to a)*
7115    structure/union, extract the component named NAME from the ultimate
7116    target structure/union and return it as a value with its
7117    appropriate type.
7118
7119    The routine searches for NAME among all members of the structure itself
7120    and (recursively) among all members of any wrapper members
7121    (e.g., '_parent').
7122
7123    If NO_ERR, then simply return NULL in case of error, rather than 
7124    calling error.  */
7125
7126 struct value *
7127 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7128 {
7129   struct type *t, *t1;
7130   struct value *v;
7131
7132   v = NULL;
7133   t1 = t = ada_check_typedef (value_type (arg));
7134   if (TYPE_CODE (t) == TYPE_CODE_REF)
7135     {
7136       t1 = TYPE_TARGET_TYPE (t);
7137       if (t1 == NULL)
7138         goto BadValue;
7139       t1 = ada_check_typedef (t1);
7140       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7141         {
7142           arg = coerce_ref (arg);
7143           t = t1;
7144         }
7145     }
7146
7147   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7148     {
7149       t1 = TYPE_TARGET_TYPE (t);
7150       if (t1 == NULL)
7151         goto BadValue;
7152       t1 = ada_check_typedef (t1);
7153       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7154         {
7155           arg = value_ind (arg);
7156           t = t1;
7157         }
7158       else
7159         break;
7160     }
7161
7162   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7163     goto BadValue;
7164
7165   if (t1 == t)
7166     v = ada_search_struct_field (name, arg, 0, t);
7167   else
7168     {
7169       int bit_offset, bit_size, byte_offset;
7170       struct type *field_type;
7171       CORE_ADDR address;
7172
7173       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7174         address = value_address (ada_value_ind (arg));
7175       else
7176         address = value_address (ada_coerce_ref (arg));
7177
7178       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7179       if (find_struct_field (name, t1, 0,
7180                              &field_type, &byte_offset, &bit_offset,
7181                              &bit_size, NULL))
7182         {
7183           if (bit_size != 0)
7184             {
7185               if (TYPE_CODE (t) == TYPE_CODE_REF)
7186                 arg = ada_coerce_ref (arg);
7187               else
7188                 arg = ada_value_ind (arg);
7189               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7190                                                   bit_offset, bit_size,
7191                                                   field_type);
7192             }
7193           else
7194             v = value_at_lazy (field_type, address + byte_offset);
7195         }
7196     }
7197
7198   if (v != NULL || no_err)
7199     return v;
7200   else
7201     error (_("There is no member named %s."), name);
7202
7203  BadValue:
7204   if (no_err)
7205     return NULL;
7206   else
7207     error (_("Attempt to extract a component of "
7208              "a value that is not a record."));
7209 }
7210
7211 /* Given a type TYPE, look up the type of the component of type named NAME.
7212    If DISPP is non-null, add its byte displacement from the beginning of a
7213    structure (pointed to by a value) of type TYPE to *DISPP (does not
7214    work for packed fields).
7215
7216    Matches any field whose name has NAME as a prefix, possibly
7217    followed by "___".
7218
7219    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7220    be a (pointer or reference)+ to a struct or union, and the
7221    ultimate target type will be searched.
7222
7223    Looks recursively into variant clauses and parent types.
7224
7225    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7226    TYPE is not a type of the right kind.  */
7227
7228 static struct type *
7229 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7230                             int noerr, int *dispp)
7231 {
7232   int i;
7233
7234   if (name == NULL)
7235     goto BadName;
7236
7237   if (refok && type != NULL)
7238     while (1)
7239       {
7240         type = ada_check_typedef (type);
7241         if (TYPE_CODE (type) != TYPE_CODE_PTR
7242             && TYPE_CODE (type) != TYPE_CODE_REF)
7243           break;
7244         type = TYPE_TARGET_TYPE (type);
7245       }
7246
7247   if (type == NULL
7248       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7249           && TYPE_CODE (type) != TYPE_CODE_UNION))
7250     {
7251       if (noerr)
7252         return NULL;
7253       else
7254         {
7255           target_terminal_ours ();
7256           gdb_flush (gdb_stdout);
7257           if (type == NULL)
7258             error (_("Type (null) is not a structure or union type"));
7259           else
7260             {
7261               /* XXX: type_sprint */
7262               fprintf_unfiltered (gdb_stderr, _("Type "));
7263               type_print (type, "", gdb_stderr, -1);
7264               error (_(" is not a structure or union type"));
7265             }
7266         }
7267     }
7268
7269   type = to_static_fixed_type (type);
7270
7271   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7272     {
7273       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7274       struct type *t;
7275       int disp;
7276
7277       if (t_field_name == NULL)
7278         continue;
7279
7280       else if (field_name_match (t_field_name, name))
7281         {
7282           if (dispp != NULL)
7283             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7284           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7285         }
7286
7287       else if (ada_is_wrapper_field (type, i))
7288         {
7289           disp = 0;
7290           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7291                                           0, 1, &disp);
7292           if (t != NULL)
7293             {
7294               if (dispp != NULL)
7295                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7296               return t;
7297             }
7298         }
7299
7300       else if (ada_is_variant_part (type, i))
7301         {
7302           int j;
7303           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7304                                                                         i));
7305
7306           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7307             {
7308               /* FIXME pnh 2008/01/26: We check for a field that is
7309                  NOT wrapped in a struct, since the compiler sometimes
7310                  generates these for unchecked variant types.  Revisit
7311                  if the compiler changes this practice.  */
7312               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7313               disp = 0;
7314               if (v_field_name != NULL 
7315                   && field_name_match (v_field_name, name))
7316                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7317               else
7318                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7319                                                                  j),
7320                                                 name, 0, 1, &disp);
7321
7322               if (t != NULL)
7323                 {
7324                   if (dispp != NULL)
7325                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7326                   return t;
7327                 }
7328             }
7329         }
7330
7331     }
7332
7333 BadName:
7334   if (!noerr)
7335     {
7336       target_terminal_ours ();
7337       gdb_flush (gdb_stdout);
7338       if (name == NULL)
7339         {
7340           /* XXX: type_sprint */
7341           fprintf_unfiltered (gdb_stderr, _("Type "));
7342           type_print (type, "", gdb_stderr, -1);
7343           error (_(" has no component named <null>"));
7344         }
7345       else
7346         {
7347           /* XXX: type_sprint */
7348           fprintf_unfiltered (gdb_stderr, _("Type "));
7349           type_print (type, "", gdb_stderr, -1);
7350           error (_(" has no component named %s"), name);
7351         }
7352     }
7353
7354   return NULL;
7355 }
7356
7357 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7358    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7359    represents an unchecked union (that is, the variant part of a
7360    record that is named in an Unchecked_Union pragma).  */
7361
7362 static int
7363 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7364 {
7365   char *discrim_name = ada_variant_discrim_name (var_type);
7366
7367   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7368           == NULL);
7369 }
7370
7371
7372 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7373    within a value of type OUTER_TYPE that is stored in GDB at
7374    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7375    numbering from 0) is applicable.  Returns -1 if none are.  */
7376
7377 int
7378 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7379                            const gdb_byte *outer_valaddr)
7380 {
7381   int others_clause;
7382   int i;
7383   char *discrim_name = ada_variant_discrim_name (var_type);
7384   struct value *outer;
7385   struct value *discrim;
7386   LONGEST discrim_val;
7387
7388   /* Using plain value_from_contents_and_address here causes problems
7389      because we will end up trying to resolve a type that is currently
7390      being constructed.  */
7391   outer = value_from_contents_and_address_unresolved (outer_type,
7392                                                       outer_valaddr, 0);
7393   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7394   if (discrim == NULL)
7395     return -1;
7396   discrim_val = value_as_long (discrim);
7397
7398   others_clause = -1;
7399   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7400     {
7401       if (ada_is_others_clause (var_type, i))
7402         others_clause = i;
7403       else if (ada_in_variant (discrim_val, var_type, i))
7404         return i;
7405     }
7406
7407   return others_clause;
7408 }
7409 \f
7410
7411
7412                                 /* Dynamic-Sized Records */
7413
7414 /* Strategy: The type ostensibly attached to a value with dynamic size
7415    (i.e., a size that is not statically recorded in the debugging
7416    data) does not accurately reflect the size or layout of the value.
7417    Our strategy is to convert these values to values with accurate,
7418    conventional types that are constructed on the fly.  */
7419
7420 /* There is a subtle and tricky problem here.  In general, we cannot
7421    determine the size of dynamic records without its data.  However,
7422    the 'struct value' data structure, which GDB uses to represent
7423    quantities in the inferior process (the target), requires the size
7424    of the type at the time of its allocation in order to reserve space
7425    for GDB's internal copy of the data.  That's why the
7426    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7427    rather than struct value*s.
7428
7429    However, GDB's internal history variables ($1, $2, etc.) are
7430    struct value*s containing internal copies of the data that are not, in
7431    general, the same as the data at their corresponding addresses in
7432    the target.  Fortunately, the types we give to these values are all
7433    conventional, fixed-size types (as per the strategy described
7434    above), so that we don't usually have to perform the
7435    'to_fixed_xxx_type' conversions to look at their values.
7436    Unfortunately, there is one exception: if one of the internal
7437    history variables is an array whose elements are unconstrained
7438    records, then we will need to create distinct fixed types for each
7439    element selected.  */
7440
7441 /* The upshot of all of this is that many routines take a (type, host
7442    address, target address) triple as arguments to represent a value.
7443    The host address, if non-null, is supposed to contain an internal
7444    copy of the relevant data; otherwise, the program is to consult the
7445    target at the target address.  */
7446
7447 /* Assuming that VAL0 represents a pointer value, the result of
7448    dereferencing it.  Differs from value_ind in its treatment of
7449    dynamic-sized types.  */
7450
7451 struct value *
7452 ada_value_ind (struct value *val0)
7453 {
7454   struct value *val = value_ind (val0);
7455
7456   if (ada_is_tagged_type (value_type (val), 0))
7457     val = ada_tag_value_at_base_address (val);
7458
7459   return ada_to_fixed_value (val);
7460 }
7461
7462 /* The value resulting from dereferencing any "reference to"
7463    qualifiers on VAL0.  */
7464
7465 static struct value *
7466 ada_coerce_ref (struct value *val0)
7467 {
7468   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7469     {
7470       struct value *val = val0;
7471
7472       val = coerce_ref (val);
7473
7474       if (ada_is_tagged_type (value_type (val), 0))
7475         val = ada_tag_value_at_base_address (val);
7476
7477       return ada_to_fixed_value (val);
7478     }
7479   else
7480     return val0;
7481 }
7482
7483 /* Return OFF rounded upward if necessary to a multiple of
7484    ALIGNMENT (a power of 2).  */
7485
7486 static unsigned int
7487 align_value (unsigned int off, unsigned int alignment)
7488 {
7489   return (off + alignment - 1) & ~(alignment - 1);
7490 }
7491
7492 /* Return the bit alignment required for field #F of template type TYPE.  */
7493
7494 static unsigned int
7495 field_alignment (struct type *type, int f)
7496 {
7497   const char *name = TYPE_FIELD_NAME (type, f);
7498   int len;
7499   int align_offset;
7500
7501   /* The field name should never be null, unless the debugging information
7502      is somehow malformed.  In this case, we assume the field does not
7503      require any alignment.  */
7504   if (name == NULL)
7505     return 1;
7506
7507   len = strlen (name);
7508
7509   if (!isdigit (name[len - 1]))
7510     return 1;
7511
7512   if (isdigit (name[len - 2]))
7513     align_offset = len - 2;
7514   else
7515     align_offset = len - 1;
7516
7517   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7518     return TARGET_CHAR_BIT;
7519
7520   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7521 }
7522
7523 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7524
7525 static struct symbol *
7526 ada_find_any_type_symbol (const char *name)
7527 {
7528   struct symbol *sym;
7529
7530   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7531   if (sym != NULL
7532       && (SYMBOL_DOMAIN (sym) != VAR_DOMAIN
7533           || SYMBOL_CLASS (sym) == LOC_TYPEDEF))
7534     return sym;
7535
7536   return NULL;
7537 }
7538
7539 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7540    solely for types defined by debug info, it will not search the GDB
7541    primitive types.  */
7542
7543 static struct type *
7544 ada_find_any_type (const char *name)
7545 {
7546   struct symbol *sym = ada_find_any_type_symbol (name);
7547
7548   if (sym != NULL)
7549     return SYMBOL_TYPE (sym);
7550
7551   return NULL;
7552 }
7553
7554 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7555    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7556    symbol, in which case it is returned.  Otherwise, this looks for
7557    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7558    Return symbol if found, and NULL otherwise.  */
7559
7560 struct symbol *
7561 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7562 {
7563   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7564   struct symbol *sym;
7565
7566   if (strstr (name, "___XR") != NULL)
7567      return name_sym;
7568
7569   sym = find_old_style_renaming_symbol (name, block);
7570
7571   if (sym != NULL)
7572     return sym;
7573
7574   /* Not right yet.  FIXME pnh 7/20/2007.  */
7575   sym = ada_find_any_type_symbol (name);
7576   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7577     return sym;
7578   else
7579     return NULL;
7580 }
7581
7582 static struct symbol *
7583 find_old_style_renaming_symbol (const char *name, const struct block *block)
7584 {
7585   const struct symbol *function_sym = block_linkage_function (block);
7586   char *rename;
7587
7588   if (function_sym != NULL)
7589     {
7590       /* If the symbol is defined inside a function, NAME is not fully
7591          qualified.  This means we need to prepend the function name
7592          as well as adding the ``___XR'' suffix to build the name of
7593          the associated renaming symbol.  */
7594       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7595       /* Function names sometimes contain suffixes used
7596          for instance to qualify nested subprograms.  When building
7597          the XR type name, we need to make sure that this suffix is
7598          not included.  So do not include any suffix in the function
7599          name length below.  */
7600       int function_name_len = ada_name_prefix_len (function_name);
7601       const int rename_len = function_name_len + 2      /*  "__" */
7602         + strlen (name) + 6 /* "___XR\0" */ ;
7603
7604       /* Strip the suffix if necessary.  */
7605       ada_remove_trailing_digits (function_name, &function_name_len);
7606       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7607       ada_remove_Xbn_suffix (function_name, &function_name_len);
7608
7609       /* Library-level functions are a special case, as GNAT adds
7610          a ``_ada_'' prefix to the function name to avoid namespace
7611          pollution.  However, the renaming symbols themselves do not
7612          have this prefix, so we need to skip this prefix if present.  */
7613       if (function_name_len > 5 /* "_ada_" */
7614           && strstr (function_name, "_ada_") == function_name)
7615         {
7616           function_name += 5;
7617           function_name_len -= 5;
7618         }
7619
7620       rename = (char *) alloca (rename_len * sizeof (char));
7621       strncpy (rename, function_name, function_name_len);
7622       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7623                  "__%s___XR", name);
7624     }
7625   else
7626     {
7627       const int rename_len = strlen (name) + 6;
7628
7629       rename = (char *) alloca (rename_len * sizeof (char));
7630       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7631     }
7632
7633   return ada_find_any_type_symbol (rename);
7634 }
7635
7636 /* Because of GNAT encoding conventions, several GDB symbols may match a
7637    given type name.  If the type denoted by TYPE0 is to be preferred to
7638    that of TYPE1 for purposes of type printing, return non-zero;
7639    otherwise return 0.  */
7640
7641 int
7642 ada_prefer_type (struct type *type0, struct type *type1)
7643 {
7644   if (type1 == NULL)
7645     return 1;
7646   else if (type0 == NULL)
7647     return 0;
7648   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7649     return 1;
7650   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7651     return 0;
7652   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7653     return 1;
7654   else if (ada_is_constrained_packed_array_type (type0))
7655     return 1;
7656   else if (ada_is_array_descriptor_type (type0)
7657            && !ada_is_array_descriptor_type (type1))
7658     return 1;
7659   else
7660     {
7661       const char *type0_name = type_name_no_tag (type0);
7662       const char *type1_name = type_name_no_tag (type1);
7663
7664       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7665           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7666         return 1;
7667     }
7668   return 0;
7669 }
7670
7671 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7672    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
7673
7674 const char *
7675 ada_type_name (struct type *type)
7676 {
7677   if (type == NULL)
7678     return NULL;
7679   else if (TYPE_NAME (type) != NULL)
7680     return TYPE_NAME (type);
7681   else
7682     return TYPE_TAG_NAME (type);
7683 }
7684
7685 /* Search the list of "descriptive" types associated to TYPE for a type
7686    whose name is NAME.  */
7687
7688 static struct type *
7689 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7690 {
7691   struct type *result;
7692
7693   if (ada_ignore_descriptive_types_p)
7694     return NULL;
7695
7696   /* If there no descriptive-type info, then there is no parallel type
7697      to be found.  */
7698   if (!HAVE_GNAT_AUX_INFO (type))
7699     return NULL;
7700
7701   result = TYPE_DESCRIPTIVE_TYPE (type);
7702   while (result != NULL)
7703     {
7704       const char *result_name = ada_type_name (result);
7705
7706       if (result_name == NULL)
7707         {
7708           warning (_("unexpected null name on descriptive type"));
7709           return NULL;
7710         }
7711
7712       /* If the names match, stop.  */
7713       if (strcmp (result_name, name) == 0)
7714         break;
7715
7716       /* Otherwise, look at the next item on the list, if any.  */
7717       if (HAVE_GNAT_AUX_INFO (result))
7718         result = TYPE_DESCRIPTIVE_TYPE (result);
7719       else
7720         result = NULL;
7721     }
7722
7723   /* If we didn't find a match, see whether this is a packed array.  With
7724      older compilers, the descriptive type information is either absent or
7725      irrelevant when it comes to packed arrays so the above lookup fails.
7726      Fall back to using a parallel lookup by name in this case.  */
7727   if (result == NULL && ada_is_constrained_packed_array_type (type))
7728     return ada_find_any_type (name);
7729
7730   return result;
7731 }
7732
7733 /* Find a parallel type to TYPE with the specified NAME, using the
7734    descriptive type taken from the debugging information, if available,
7735    and otherwise using the (slower) name-based method.  */
7736
7737 static struct type *
7738 ada_find_parallel_type_with_name (struct type *type, const char *name)
7739 {
7740   struct type *result = NULL;
7741
7742   if (HAVE_GNAT_AUX_INFO (type))
7743     result = find_parallel_type_by_descriptive_type (type, name);
7744   else
7745     result = ada_find_any_type (name);
7746
7747   return result;
7748 }
7749
7750 /* Same as above, but specify the name of the parallel type by appending
7751    SUFFIX to the name of TYPE.  */
7752
7753 struct type *
7754 ada_find_parallel_type (struct type *type, const char *suffix)
7755 {
7756   char *name;
7757   const char *typename = ada_type_name (type);
7758   int len;
7759
7760   if (typename == NULL)
7761     return NULL;
7762
7763   len = strlen (typename);
7764
7765   name = (char *) alloca (len + strlen (suffix) + 1);
7766
7767   strcpy (name, typename);
7768   strcpy (name + len, suffix);
7769
7770   return ada_find_parallel_type_with_name (type, name);
7771 }
7772
7773 /* If TYPE is a variable-size record type, return the corresponding template
7774    type describing its fields.  Otherwise, return NULL.  */
7775
7776 static struct type *
7777 dynamic_template_type (struct type *type)
7778 {
7779   type = ada_check_typedef (type);
7780
7781   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7782       || ada_type_name (type) == NULL)
7783     return NULL;
7784   else
7785     {
7786       int len = strlen (ada_type_name (type));
7787
7788       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7789         return type;
7790       else
7791         return ada_find_parallel_type (type, "___XVE");
7792     }
7793 }
7794
7795 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7796    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7797
7798 static int
7799 is_dynamic_field (struct type *templ_type, int field_num)
7800 {
7801   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7802
7803   return name != NULL
7804     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7805     && strstr (name, "___XVL") != NULL;
7806 }
7807
7808 /* The index of the variant field of TYPE, or -1 if TYPE does not
7809    represent a variant record type.  */
7810
7811 static int
7812 variant_field_index (struct type *type)
7813 {
7814   int f;
7815
7816   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7817     return -1;
7818
7819   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7820     {
7821       if (ada_is_variant_part (type, f))
7822         return f;
7823     }
7824   return -1;
7825 }
7826
7827 /* A record type with no fields.  */
7828
7829 static struct type *
7830 empty_record (struct type *template)
7831 {
7832   struct type *type = alloc_type_copy (template);
7833
7834   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7835   TYPE_NFIELDS (type) = 0;
7836   TYPE_FIELDS (type) = NULL;
7837   INIT_CPLUS_SPECIFIC (type);
7838   TYPE_NAME (type) = "<empty>";
7839   TYPE_TAG_NAME (type) = NULL;
7840   TYPE_LENGTH (type) = 0;
7841   return type;
7842 }
7843
7844 /* An ordinary record type (with fixed-length fields) that describes
7845    the value of type TYPE at VALADDR or ADDRESS (see comments at
7846    the beginning of this section) VAL according to GNAT conventions.
7847    DVAL0 should describe the (portion of a) record that contains any
7848    necessary discriminants.  It should be NULL if value_type (VAL) is
7849    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7850    variant field (unless unchecked) is replaced by a particular branch
7851    of the variant.
7852
7853    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7854    length are not statically known are discarded.  As a consequence,
7855    VALADDR, ADDRESS and DVAL0 are ignored.
7856
7857    NOTE: Limitations: For now, we assume that dynamic fields and
7858    variants occupy whole numbers of bytes.  However, they need not be
7859    byte-aligned.  */
7860
7861 struct type *
7862 ada_template_to_fixed_record_type_1 (struct type *type,
7863                                      const gdb_byte *valaddr,
7864                                      CORE_ADDR address, struct value *dval0,
7865                                      int keep_dynamic_fields)
7866 {
7867   struct value *mark = value_mark ();
7868   struct value *dval;
7869   struct type *rtype;
7870   int nfields, bit_len;
7871   int variant_field;
7872   long off;
7873   int fld_bit_len;
7874   int f;
7875
7876   /* Compute the number of fields in this record type that are going
7877      to be processed: unless keep_dynamic_fields, this includes only
7878      fields whose position and length are static will be processed.  */
7879   if (keep_dynamic_fields)
7880     nfields = TYPE_NFIELDS (type);
7881   else
7882     {
7883       nfields = 0;
7884       while (nfields < TYPE_NFIELDS (type)
7885              && !ada_is_variant_part (type, nfields)
7886              && !is_dynamic_field (type, nfields))
7887         nfields++;
7888     }
7889
7890   rtype = alloc_type_copy (type);
7891   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7892   INIT_CPLUS_SPECIFIC (rtype);
7893   TYPE_NFIELDS (rtype) = nfields;
7894   TYPE_FIELDS (rtype) = (struct field *)
7895     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7896   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7897   TYPE_NAME (rtype) = ada_type_name (type);
7898   TYPE_TAG_NAME (rtype) = NULL;
7899   TYPE_FIXED_INSTANCE (rtype) = 1;
7900
7901   off = 0;
7902   bit_len = 0;
7903   variant_field = -1;
7904
7905   for (f = 0; f < nfields; f += 1)
7906     {
7907       off = align_value (off, field_alignment (type, f))
7908         + TYPE_FIELD_BITPOS (type, f);
7909       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7910       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7911
7912       if (ada_is_variant_part (type, f))
7913         {
7914           variant_field = f;
7915           fld_bit_len = 0;
7916         }
7917       else if (is_dynamic_field (type, f))
7918         {
7919           const gdb_byte *field_valaddr = valaddr;
7920           CORE_ADDR field_address = address;
7921           struct type *field_type =
7922             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7923
7924           if (dval0 == NULL)
7925             {
7926               /* rtype's length is computed based on the run-time
7927                  value of discriminants.  If the discriminants are not
7928                  initialized, the type size may be completely bogus and
7929                  GDB may fail to allocate a value for it.  So check the
7930                  size first before creating the value.  */
7931               check_size (rtype);
7932               /* Using plain value_from_contents_and_address here
7933                  causes problems because we will end up trying to
7934                  resolve a type that is currently being
7935                  constructed.  */
7936               dval = value_from_contents_and_address_unresolved (rtype,
7937                                                                  valaddr,
7938                                                                  address);
7939               rtype = value_type (dval);
7940             }
7941           else
7942             dval = dval0;
7943
7944           /* If the type referenced by this field is an aligner type, we need
7945              to unwrap that aligner type, because its size might not be set.
7946              Keeping the aligner type would cause us to compute the wrong
7947              size for this field, impacting the offset of the all the fields
7948              that follow this one.  */
7949           if (ada_is_aligner_type (field_type))
7950             {
7951               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7952
7953               field_valaddr = cond_offset_host (field_valaddr, field_offset);
7954               field_address = cond_offset_target (field_address, field_offset);
7955               field_type = ada_aligned_type (field_type);
7956             }
7957
7958           field_valaddr = cond_offset_host (field_valaddr,
7959                                             off / TARGET_CHAR_BIT);
7960           field_address = cond_offset_target (field_address,
7961                                               off / TARGET_CHAR_BIT);
7962
7963           /* Get the fixed type of the field.  Note that, in this case,
7964              we do not want to get the real type out of the tag: if
7965              the current field is the parent part of a tagged record,
7966              we will get the tag of the object.  Clearly wrong: the real
7967              type of the parent is not the real type of the child.  We
7968              would end up in an infinite loop.  */
7969           field_type = ada_get_base_type (field_type);
7970           field_type = ada_to_fixed_type (field_type, field_valaddr,
7971                                           field_address, dval, 0);
7972           /* If the field size is already larger than the maximum
7973              object size, then the record itself will necessarily
7974              be larger than the maximum object size.  We need to make
7975              this check now, because the size might be so ridiculously
7976              large (due to an uninitialized variable in the inferior)
7977              that it would cause an overflow when adding it to the
7978              record size.  */
7979           check_size (field_type);
7980
7981           TYPE_FIELD_TYPE (rtype, f) = field_type;
7982           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7983           /* The multiplication can potentially overflow.  But because
7984              the field length has been size-checked just above, and
7985              assuming that the maximum size is a reasonable value,
7986              an overflow should not happen in practice.  So rather than
7987              adding overflow recovery code to this already complex code,
7988              we just assume that it's not going to happen.  */
7989           fld_bit_len =
7990             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7991         }
7992       else
7993         {
7994           /* Note: If this field's type is a typedef, it is important
7995              to preserve the typedef layer.
7996
7997              Otherwise, we might be transforming a typedef to a fat
7998              pointer (encoding a pointer to an unconstrained array),
7999              into a basic fat pointer (encoding an unconstrained
8000              array).  As both types are implemented using the same
8001              structure, the typedef is the only clue which allows us
8002              to distinguish between the two options.  Stripping it
8003              would prevent us from printing this field appropriately.  */
8004           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
8005           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8006           if (TYPE_FIELD_BITSIZE (type, f) > 0)
8007             fld_bit_len =
8008               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8009           else
8010             {
8011               struct type *field_type = TYPE_FIELD_TYPE (type, f);
8012
8013               /* We need to be careful of typedefs when computing
8014                  the length of our field.  If this is a typedef,
8015                  get the length of the target type, not the length
8016                  of the typedef.  */
8017               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8018                 field_type = ada_typedef_target_type (field_type);
8019
8020               fld_bit_len =
8021                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8022             }
8023         }
8024       if (off + fld_bit_len > bit_len)
8025         bit_len = off + fld_bit_len;
8026       off += fld_bit_len;
8027       TYPE_LENGTH (rtype) =
8028         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8029     }
8030
8031   /* We handle the variant part, if any, at the end because of certain
8032      odd cases in which it is re-ordered so as NOT to be the last field of
8033      the record.  This can happen in the presence of representation
8034      clauses.  */
8035   if (variant_field >= 0)
8036     {
8037       struct type *branch_type;
8038
8039       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8040
8041       if (dval0 == NULL)
8042         {
8043           /* Using plain value_from_contents_and_address here causes
8044              problems because we will end up trying to resolve a type
8045              that is currently being constructed.  */
8046           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8047                                                              address);
8048           rtype = value_type (dval);
8049         }
8050       else
8051         dval = dval0;
8052
8053       branch_type =
8054         to_fixed_variant_branch_type
8055         (TYPE_FIELD_TYPE (type, variant_field),
8056          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8057          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8058       if (branch_type == NULL)
8059         {
8060           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8061             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8062           TYPE_NFIELDS (rtype) -= 1;
8063         }
8064       else
8065         {
8066           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8067           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8068           fld_bit_len =
8069             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8070             TARGET_CHAR_BIT;
8071           if (off + fld_bit_len > bit_len)
8072             bit_len = off + fld_bit_len;
8073           TYPE_LENGTH (rtype) =
8074             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8075         }
8076     }
8077
8078   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8079      should contain the alignment of that record, which should be a strictly
8080      positive value.  If null or negative, then something is wrong, most
8081      probably in the debug info.  In that case, we don't round up the size
8082      of the resulting type.  If this record is not part of another structure,
8083      the current RTYPE length might be good enough for our purposes.  */
8084   if (TYPE_LENGTH (type) <= 0)
8085     {
8086       if (TYPE_NAME (rtype))
8087         warning (_("Invalid type size for `%s' detected: %d."),
8088                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8089       else
8090         warning (_("Invalid type size for <unnamed> detected: %d."),
8091                  TYPE_LENGTH (type));
8092     }
8093   else
8094     {
8095       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8096                                          TYPE_LENGTH (type));
8097     }
8098
8099   value_free_to_mark (mark);
8100   if (TYPE_LENGTH (rtype) > varsize_limit)
8101     error (_("record type with dynamic size is larger than varsize-limit"));
8102   return rtype;
8103 }
8104
8105 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8106    of 1.  */
8107
8108 static struct type *
8109 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8110                                CORE_ADDR address, struct value *dval0)
8111 {
8112   return ada_template_to_fixed_record_type_1 (type, valaddr,
8113                                               address, dval0, 1);
8114 }
8115
8116 /* An ordinary record type in which ___XVL-convention fields and
8117    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8118    static approximations, containing all possible fields.  Uses
8119    no runtime values.  Useless for use in values, but that's OK,
8120    since the results are used only for type determinations.   Works on both
8121    structs and unions.  Representation note: to save space, we memorize
8122    the result of this function in the TYPE_TARGET_TYPE of the
8123    template type.  */
8124
8125 static struct type *
8126 template_to_static_fixed_type (struct type *type0)
8127 {
8128   struct type *type;
8129   int nfields;
8130   int f;
8131
8132   if (TYPE_TARGET_TYPE (type0) != NULL)
8133     return TYPE_TARGET_TYPE (type0);
8134
8135   nfields = TYPE_NFIELDS (type0);
8136   type = type0;
8137
8138   for (f = 0; f < nfields; f += 1)
8139     {
8140       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
8141       struct type *new_type;
8142
8143       if (is_dynamic_field (type0, f))
8144         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8145       else
8146         new_type = static_unwrap_type (field_type);
8147       if (type == type0 && new_type != field_type)
8148         {
8149           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8150           TYPE_CODE (type) = TYPE_CODE (type0);
8151           INIT_CPLUS_SPECIFIC (type);
8152           TYPE_NFIELDS (type) = nfields;
8153           TYPE_FIELDS (type) = (struct field *)
8154             TYPE_ALLOC (type, nfields * sizeof (struct field));
8155           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8156                   sizeof (struct field) * nfields);
8157           TYPE_NAME (type) = ada_type_name (type0);
8158           TYPE_TAG_NAME (type) = NULL;
8159           TYPE_FIXED_INSTANCE (type) = 1;
8160           TYPE_LENGTH (type) = 0;
8161         }
8162       TYPE_FIELD_TYPE (type, f) = new_type;
8163       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8164     }
8165   return type;
8166 }
8167
8168 /* Given an object of type TYPE whose contents are at VALADDR and
8169    whose address in memory is ADDRESS, returns a revision of TYPE,
8170    which should be a non-dynamic-sized record, in which the variant
8171    part, if any, is replaced with the appropriate branch.  Looks
8172    for discriminant values in DVAL0, which can be NULL if the record
8173    contains the necessary discriminant values.  */
8174
8175 static struct type *
8176 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8177                                    CORE_ADDR address, struct value *dval0)
8178 {
8179   struct value *mark = value_mark ();
8180   struct value *dval;
8181   struct type *rtype;
8182   struct type *branch_type;
8183   int nfields = TYPE_NFIELDS (type);
8184   int variant_field = variant_field_index (type);
8185
8186   if (variant_field == -1)
8187     return type;
8188
8189   if (dval0 == NULL)
8190     {
8191       dval = value_from_contents_and_address (type, valaddr, address);
8192       type = value_type (dval);
8193     }
8194   else
8195     dval = dval0;
8196
8197   rtype = alloc_type_copy (type);
8198   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8199   INIT_CPLUS_SPECIFIC (rtype);
8200   TYPE_NFIELDS (rtype) = nfields;
8201   TYPE_FIELDS (rtype) =
8202     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8203   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8204           sizeof (struct field) * nfields);
8205   TYPE_NAME (rtype) = ada_type_name (type);
8206   TYPE_TAG_NAME (rtype) = NULL;
8207   TYPE_FIXED_INSTANCE (rtype) = 1;
8208   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8209
8210   branch_type = to_fixed_variant_branch_type
8211     (TYPE_FIELD_TYPE (type, variant_field),
8212      cond_offset_host (valaddr,
8213                        TYPE_FIELD_BITPOS (type, variant_field)
8214                        / TARGET_CHAR_BIT),
8215      cond_offset_target (address,
8216                          TYPE_FIELD_BITPOS (type, variant_field)
8217                          / TARGET_CHAR_BIT), dval);
8218   if (branch_type == NULL)
8219     {
8220       int f;
8221
8222       for (f = variant_field + 1; f < nfields; f += 1)
8223         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8224       TYPE_NFIELDS (rtype) -= 1;
8225     }
8226   else
8227     {
8228       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8229       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8230       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8231       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8232     }
8233   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8234
8235   value_free_to_mark (mark);
8236   return rtype;
8237 }
8238
8239 /* An ordinary record type (with fixed-length fields) that describes
8240    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8241    beginning of this section].   Any necessary discriminants' values
8242    should be in DVAL, a record value; it may be NULL if the object
8243    at ADDR itself contains any necessary discriminant values.
8244    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8245    values from the record are needed.  Except in the case that DVAL,
8246    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8247    unchecked) is replaced by a particular branch of the variant.
8248
8249    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8250    is questionable and may be removed.  It can arise during the
8251    processing of an unconstrained-array-of-record type where all the
8252    variant branches have exactly the same size.  This is because in
8253    such cases, the compiler does not bother to use the XVS convention
8254    when encoding the record.  I am currently dubious of this
8255    shortcut and suspect the compiler should be altered.  FIXME.  */
8256
8257 static struct type *
8258 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8259                       CORE_ADDR address, struct value *dval)
8260 {
8261   struct type *templ_type;
8262
8263   if (TYPE_FIXED_INSTANCE (type0))
8264     return type0;
8265
8266   templ_type = dynamic_template_type (type0);
8267
8268   if (templ_type != NULL)
8269     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8270   else if (variant_field_index (type0) >= 0)
8271     {
8272       if (dval == NULL && valaddr == NULL && address == 0)
8273         return type0;
8274       return to_record_with_fixed_variant_part (type0, valaddr, address,
8275                                                 dval);
8276     }
8277   else
8278     {
8279       TYPE_FIXED_INSTANCE (type0) = 1;
8280       return type0;
8281     }
8282
8283 }
8284
8285 /* An ordinary record type (with fixed-length fields) that describes
8286    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8287    union type.  Any necessary discriminants' values should be in DVAL,
8288    a record value.  That is, this routine selects the appropriate
8289    branch of the union at ADDR according to the discriminant value
8290    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8291    it represents a variant subject to a pragma Unchecked_Union.  */
8292
8293 static struct type *
8294 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8295                               CORE_ADDR address, struct value *dval)
8296 {
8297   int which;
8298   struct type *templ_type;
8299   struct type *var_type;
8300
8301   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8302     var_type = TYPE_TARGET_TYPE (var_type0);
8303   else
8304     var_type = var_type0;
8305
8306   templ_type = ada_find_parallel_type (var_type, "___XVU");
8307
8308   if (templ_type != NULL)
8309     var_type = templ_type;
8310
8311   if (is_unchecked_variant (var_type, value_type (dval)))
8312       return var_type0;
8313   which =
8314     ada_which_variant_applies (var_type,
8315                                value_type (dval), value_contents (dval));
8316
8317   if (which < 0)
8318     return empty_record (var_type);
8319   else if (is_dynamic_field (var_type, which))
8320     return to_fixed_record_type
8321       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8322        valaddr, address, dval);
8323   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8324     return
8325       to_fixed_record_type
8326       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8327   else
8328     return TYPE_FIELD_TYPE (var_type, which);
8329 }
8330
8331 /* Assuming that TYPE0 is an array type describing the type of a value
8332    at ADDR, and that DVAL describes a record containing any
8333    discriminants used in TYPE0, returns a type for the value that
8334    contains no dynamic components (that is, no components whose sizes
8335    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8336    true, gives an error message if the resulting type's size is over
8337    varsize_limit.  */
8338
8339 static struct type *
8340 to_fixed_array_type (struct type *type0, struct value *dval,
8341                      int ignore_too_big)
8342 {
8343   struct type *index_type_desc;
8344   struct type *result;
8345   int constrained_packed_array_p;
8346
8347   type0 = ada_check_typedef (type0);
8348   if (TYPE_FIXED_INSTANCE (type0))
8349     return type0;
8350
8351   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8352   if (constrained_packed_array_p)
8353     type0 = decode_constrained_packed_array_type (type0);
8354
8355   index_type_desc = ada_find_parallel_type (type0, "___XA");
8356   ada_fixup_array_indexes_type (index_type_desc);
8357   if (index_type_desc == NULL)
8358     {
8359       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8360
8361       /* NOTE: elt_type---the fixed version of elt_type0---should never
8362          depend on the contents of the array in properly constructed
8363          debugging data.  */
8364       /* Create a fixed version of the array element type.
8365          We're not providing the address of an element here,
8366          and thus the actual object value cannot be inspected to do
8367          the conversion.  This should not be a problem, since arrays of
8368          unconstrained objects are not allowed.  In particular, all
8369          the elements of an array of a tagged type should all be of
8370          the same type specified in the debugging info.  No need to
8371          consult the object tag.  */
8372       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8373
8374       /* Make sure we always create a new array type when dealing with
8375          packed array types, since we're going to fix-up the array
8376          type length and element bitsize a little further down.  */
8377       if (elt_type0 == elt_type && !constrained_packed_array_p)
8378         result = type0;
8379       else
8380         result = create_array_type (alloc_type_copy (type0),
8381                                     elt_type, TYPE_INDEX_TYPE (type0));
8382     }
8383   else
8384     {
8385       int i;
8386       struct type *elt_type0;
8387
8388       elt_type0 = type0;
8389       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8390         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8391
8392       /* NOTE: result---the fixed version of elt_type0---should never
8393          depend on the contents of the array in properly constructed
8394          debugging data.  */
8395       /* Create a fixed version of the array element type.
8396          We're not providing the address of an element here,
8397          and thus the actual object value cannot be inspected to do
8398          the conversion.  This should not be a problem, since arrays of
8399          unconstrained objects are not allowed.  In particular, all
8400          the elements of an array of a tagged type should all be of
8401          the same type specified in the debugging info.  No need to
8402          consult the object tag.  */
8403       result =
8404         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8405
8406       elt_type0 = type0;
8407       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8408         {
8409           struct type *range_type =
8410             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8411
8412           result = create_array_type (alloc_type_copy (elt_type0),
8413                                       result, range_type);
8414           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8415         }
8416       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8417         error (_("array type with dynamic size is larger than varsize-limit"));
8418     }
8419
8420   /* We want to preserve the type name.  This can be useful when
8421      trying to get the type name of a value that has already been
8422      printed (for instance, if the user did "print VAR; whatis $".  */
8423   TYPE_NAME (result) = TYPE_NAME (type0);
8424
8425   if (constrained_packed_array_p)
8426     {
8427       /* So far, the resulting type has been created as if the original
8428          type was a regular (non-packed) array type.  As a result, the
8429          bitsize of the array elements needs to be set again, and the array
8430          length needs to be recomputed based on that bitsize.  */
8431       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8432       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8433
8434       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8435       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8436       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8437         TYPE_LENGTH (result)++;
8438     }
8439
8440   TYPE_FIXED_INSTANCE (result) = 1;
8441   return result;
8442 }
8443
8444
8445 /* A standard type (containing no dynamically sized components)
8446    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8447    DVAL describes a record containing any discriminants used in TYPE0,
8448    and may be NULL if there are none, or if the object of type TYPE at
8449    ADDRESS or in VALADDR contains these discriminants.
8450    
8451    If CHECK_TAG is not null, in the case of tagged types, this function
8452    attempts to locate the object's tag and use it to compute the actual
8453    type.  However, when ADDRESS is null, we cannot use it to determine the
8454    location of the tag, and therefore compute the tagged type's actual type.
8455    So we return the tagged type without consulting the tag.  */
8456    
8457 static struct type *
8458 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8459                    CORE_ADDR address, struct value *dval, int check_tag)
8460 {
8461   type = ada_check_typedef (type);
8462   switch (TYPE_CODE (type))
8463     {
8464     default:
8465       return type;
8466     case TYPE_CODE_STRUCT:
8467       {
8468         struct type *static_type = to_static_fixed_type (type);
8469         struct type *fixed_record_type =
8470           to_fixed_record_type (type, valaddr, address, NULL);
8471
8472         /* If STATIC_TYPE is a tagged type and we know the object's address,
8473            then we can determine its tag, and compute the object's actual
8474            type from there.  Note that we have to use the fixed record
8475            type (the parent part of the record may have dynamic fields
8476            and the way the location of _tag is expressed may depend on
8477            them).  */
8478
8479         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8480           {
8481             struct value *tag =
8482               value_tag_from_contents_and_address
8483               (fixed_record_type,
8484                valaddr,
8485                address);
8486             struct type *real_type = type_from_tag (tag);
8487             struct value *obj =
8488               value_from_contents_and_address (fixed_record_type,
8489                                                valaddr,
8490                                                address);
8491             fixed_record_type = value_type (obj);
8492             if (real_type != NULL)
8493               return to_fixed_record_type
8494                 (real_type, NULL,
8495                  value_address (ada_tag_value_at_base_address (obj)), NULL);
8496           }
8497
8498         /* Check to see if there is a parallel ___XVZ variable.
8499            If there is, then it provides the actual size of our type.  */
8500         else if (ada_type_name (fixed_record_type) != NULL)
8501           {
8502             const char *name = ada_type_name (fixed_record_type);
8503             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8504             int xvz_found = 0;
8505             LONGEST size;
8506
8507             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8508             size = get_int_var_value (xvz_name, &xvz_found);
8509             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8510               {
8511                 fixed_record_type = copy_type (fixed_record_type);
8512                 TYPE_LENGTH (fixed_record_type) = size;
8513
8514                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8515                    observed this when the debugging info is STABS, and
8516                    apparently it is something that is hard to fix.
8517
8518                    In practice, we don't need the actual type definition
8519                    at all, because the presence of the XVZ variable allows us
8520                    to assume that there must be a XVS type as well, which we
8521                    should be able to use later, when we need the actual type
8522                    definition.
8523
8524                    In the meantime, pretend that the "fixed" type we are
8525                    returning is NOT a stub, because this can cause trouble
8526                    when using this type to create new types targeting it.
8527                    Indeed, the associated creation routines often check
8528                    whether the target type is a stub and will try to replace
8529                    it, thus using a type with the wrong size.  This, in turn,
8530                    might cause the new type to have the wrong size too.
8531                    Consider the case of an array, for instance, where the size
8532                    of the array is computed from the number of elements in
8533                    our array multiplied by the size of its element.  */
8534                 TYPE_STUB (fixed_record_type) = 0;
8535               }
8536           }
8537         return fixed_record_type;
8538       }
8539     case TYPE_CODE_ARRAY:
8540       return to_fixed_array_type (type, dval, 1);
8541     case TYPE_CODE_UNION:
8542       if (dval == NULL)
8543         return type;
8544       else
8545         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8546     }
8547 }
8548
8549 /* The same as ada_to_fixed_type_1, except that it preserves the type
8550    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8551
8552    The typedef layer needs be preserved in order to differentiate between
8553    arrays and array pointers when both types are implemented using the same
8554    fat pointer.  In the array pointer case, the pointer is encoded as
8555    a typedef of the pointer type.  For instance, considering:
8556
8557           type String_Access is access String;
8558           S1 : String_Access := null;
8559
8560    To the debugger, S1 is defined as a typedef of type String.  But
8561    to the user, it is a pointer.  So if the user tries to print S1,
8562    we should not dereference the array, but print the array address
8563    instead.
8564
8565    If we didn't preserve the typedef layer, we would lose the fact that
8566    the type is to be presented as a pointer (needs de-reference before
8567    being printed).  And we would also use the source-level type name.  */
8568
8569 struct type *
8570 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8571                    CORE_ADDR address, struct value *dval, int check_tag)
8572
8573 {
8574   struct type *fixed_type =
8575     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8576
8577   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8578       then preserve the typedef layer.
8579
8580       Implementation note: We can only check the main-type portion of
8581       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8582       from TYPE now returns a type that has the same instance flags
8583       as TYPE.  For instance, if TYPE is a "typedef const", and its
8584       target type is a "struct", then the typedef elimination will return
8585       a "const" version of the target type.  See check_typedef for more
8586       details about how the typedef layer elimination is done.
8587
8588       brobecker/2010-11-19: It seems to me that the only case where it is
8589       useful to preserve the typedef layer is when dealing with fat pointers.
8590       Perhaps, we could add a check for that and preserve the typedef layer
8591       only in that situation.  But this seems unecessary so far, probably
8592       because we call check_typedef/ada_check_typedef pretty much everywhere.
8593       */
8594   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8595       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8596           == TYPE_MAIN_TYPE (fixed_type)))
8597     return type;
8598
8599   return fixed_type;
8600 }
8601
8602 /* A standard (static-sized) type corresponding as well as possible to
8603    TYPE0, but based on no runtime data.  */
8604
8605 static struct type *
8606 to_static_fixed_type (struct type *type0)
8607 {
8608   struct type *type;
8609
8610   if (type0 == NULL)
8611     return NULL;
8612
8613   if (TYPE_FIXED_INSTANCE (type0))
8614     return type0;
8615
8616   type0 = ada_check_typedef (type0);
8617
8618   switch (TYPE_CODE (type0))
8619     {
8620     default:
8621       return type0;
8622     case TYPE_CODE_STRUCT:
8623       type = dynamic_template_type (type0);
8624       if (type != NULL)
8625         return template_to_static_fixed_type (type);
8626       else
8627         return template_to_static_fixed_type (type0);
8628     case TYPE_CODE_UNION:
8629       type = ada_find_parallel_type (type0, "___XVU");
8630       if (type != NULL)
8631         return template_to_static_fixed_type (type);
8632       else
8633         return template_to_static_fixed_type (type0);
8634     }
8635 }
8636
8637 /* A static approximation of TYPE with all type wrappers removed.  */
8638
8639 static struct type *
8640 static_unwrap_type (struct type *type)
8641 {
8642   if (ada_is_aligner_type (type))
8643     {
8644       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8645       if (ada_type_name (type1) == NULL)
8646         TYPE_NAME (type1) = ada_type_name (type);
8647
8648       return static_unwrap_type (type1);
8649     }
8650   else
8651     {
8652       struct type *raw_real_type = ada_get_base_type (type);
8653
8654       if (raw_real_type == type)
8655         return type;
8656       else
8657         return to_static_fixed_type (raw_real_type);
8658     }
8659 }
8660
8661 /* In some cases, incomplete and private types require
8662    cross-references that are not resolved as records (for example,
8663       type Foo;
8664       type FooP is access Foo;
8665       V: FooP;
8666       type Foo is array ...;
8667    ).  In these cases, since there is no mechanism for producing
8668    cross-references to such types, we instead substitute for FooP a
8669    stub enumeration type that is nowhere resolved, and whose tag is
8670    the name of the actual type.  Call these types "non-record stubs".  */
8671
8672 /* A type equivalent to TYPE that is not a non-record stub, if one
8673    exists, otherwise TYPE.  */
8674
8675 struct type *
8676 ada_check_typedef (struct type *type)
8677 {
8678   if (type == NULL)
8679     return NULL;
8680
8681   /* If our type is a typedef type of a fat pointer, then we're done.
8682      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8683      what allows us to distinguish between fat pointers that represent
8684      array types, and fat pointers that represent array access types
8685      (in both cases, the compiler implements them as fat pointers).  */
8686   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8687       && is_thick_pntr (ada_typedef_target_type (type)))
8688     return type;
8689
8690   CHECK_TYPEDEF (type);
8691   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8692       || !TYPE_STUB (type)
8693       || TYPE_TAG_NAME (type) == NULL)
8694     return type;
8695   else
8696     {
8697       const char *name = TYPE_TAG_NAME (type);
8698       struct type *type1 = ada_find_any_type (name);
8699
8700       if (type1 == NULL)
8701         return type;
8702
8703       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8704          stubs pointing to arrays, as we don't create symbols for array
8705          types, only for the typedef-to-array types).  If that's the case,
8706          strip the typedef layer.  */
8707       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8708         type1 = ada_check_typedef (type1);
8709
8710       return type1;
8711     }
8712 }
8713
8714 /* A value representing the data at VALADDR/ADDRESS as described by
8715    type TYPE0, but with a standard (static-sized) type that correctly
8716    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8717    type, then return VAL0 [this feature is simply to avoid redundant
8718    creation of struct values].  */
8719
8720 static struct value *
8721 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8722                            struct value *val0)
8723 {
8724   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8725
8726   if (type == type0 && val0 != NULL)
8727     return val0;
8728   else
8729     return value_from_contents_and_address (type, 0, address);
8730 }
8731
8732 /* A value representing VAL, but with a standard (static-sized) type
8733    that correctly describes it.  Does not necessarily create a new
8734    value.  */
8735
8736 struct value *
8737 ada_to_fixed_value (struct value *val)
8738 {
8739   val = unwrap_value (val);
8740   val = ada_to_fixed_value_create (value_type (val),
8741                                       value_address (val),
8742                                       val);
8743   return val;
8744 }
8745 \f
8746
8747 /* Attributes */
8748
8749 /* Table mapping attribute numbers to names.
8750    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8751
8752 static const char *attribute_names[] = {
8753   "<?>",
8754
8755   "first",
8756   "last",
8757   "length",
8758   "image",
8759   "max",
8760   "min",
8761   "modulus",
8762   "pos",
8763   "size",
8764   "tag",
8765   "val",
8766   0
8767 };
8768
8769 const char *
8770 ada_attribute_name (enum exp_opcode n)
8771 {
8772   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8773     return attribute_names[n - OP_ATR_FIRST + 1];
8774   else
8775     return attribute_names[0];
8776 }
8777
8778 /* Evaluate the 'POS attribute applied to ARG.  */
8779
8780 static LONGEST
8781 pos_atr (struct value *arg)
8782 {
8783   struct value *val = coerce_ref (arg);
8784   struct type *type = value_type (val);
8785
8786   if (!discrete_type_p (type))
8787     error (_("'POS only defined on discrete types"));
8788
8789   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8790     {
8791       int i;
8792       LONGEST v = value_as_long (val);
8793
8794       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8795         {
8796           if (v == TYPE_FIELD_ENUMVAL (type, i))
8797             return i;
8798         }
8799       error (_("enumeration value is invalid: can't find 'POS"));
8800     }
8801   else
8802     return value_as_long (val);
8803 }
8804
8805 static struct value *
8806 value_pos_atr (struct type *type, struct value *arg)
8807 {
8808   return value_from_longest (type, pos_atr (arg));
8809 }
8810
8811 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8812
8813 static struct value *
8814 value_val_atr (struct type *type, struct value *arg)
8815 {
8816   if (!discrete_type_p (type))
8817     error (_("'VAL only defined on discrete types"));
8818   if (!integer_type_p (value_type (arg)))
8819     error (_("'VAL requires integral argument"));
8820
8821   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8822     {
8823       long pos = value_as_long (arg);
8824
8825       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8826         error (_("argument to 'VAL out of range"));
8827       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8828     }
8829   else
8830     return value_from_longest (type, value_as_long (arg));
8831 }
8832 \f
8833
8834                                 /* Evaluation */
8835
8836 /* True if TYPE appears to be an Ada character type.
8837    [At the moment, this is true only for Character and Wide_Character;
8838    It is a heuristic test that could stand improvement].  */
8839
8840 int
8841 ada_is_character_type (struct type *type)
8842 {
8843   const char *name;
8844
8845   /* If the type code says it's a character, then assume it really is,
8846      and don't check any further.  */
8847   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8848     return 1;
8849   
8850   /* Otherwise, assume it's a character type iff it is a discrete type
8851      with a known character type name.  */
8852   name = ada_type_name (type);
8853   return (name != NULL
8854           && (TYPE_CODE (type) == TYPE_CODE_INT
8855               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8856           && (strcmp (name, "character") == 0
8857               || strcmp (name, "wide_character") == 0
8858               || strcmp (name, "wide_wide_character") == 0
8859               || strcmp (name, "unsigned char") == 0));
8860 }
8861
8862 /* True if TYPE appears to be an Ada string type.  */
8863
8864 int
8865 ada_is_string_type (struct type *type)
8866 {
8867   type = ada_check_typedef (type);
8868   if (type != NULL
8869       && TYPE_CODE (type) != TYPE_CODE_PTR
8870       && (ada_is_simple_array_type (type)
8871           || ada_is_array_descriptor_type (type))
8872       && ada_array_arity (type) == 1)
8873     {
8874       struct type *elttype = ada_array_element_type (type, 1);
8875
8876       return ada_is_character_type (elttype);
8877     }
8878   else
8879     return 0;
8880 }
8881
8882 /* The compiler sometimes provides a parallel XVS type for a given
8883    PAD type.  Normally, it is safe to follow the PAD type directly,
8884    but older versions of the compiler have a bug that causes the offset
8885    of its "F" field to be wrong.  Following that field in that case
8886    would lead to incorrect results, but this can be worked around
8887    by ignoring the PAD type and using the associated XVS type instead.
8888
8889    Set to True if the debugger should trust the contents of PAD types.
8890    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8891 static int trust_pad_over_xvs = 1;
8892
8893 /* True if TYPE is a struct type introduced by the compiler to force the
8894    alignment of a value.  Such types have a single field with a
8895    distinctive name.  */
8896
8897 int
8898 ada_is_aligner_type (struct type *type)
8899 {
8900   type = ada_check_typedef (type);
8901
8902   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8903     return 0;
8904
8905   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8906           && TYPE_NFIELDS (type) == 1
8907           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8908 }
8909
8910 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8911    the parallel type.  */
8912
8913 struct type *
8914 ada_get_base_type (struct type *raw_type)
8915 {
8916   struct type *real_type_namer;
8917   struct type *raw_real_type;
8918
8919   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8920     return raw_type;
8921
8922   if (ada_is_aligner_type (raw_type))
8923     /* The encoding specifies that we should always use the aligner type.
8924        So, even if this aligner type has an associated XVS type, we should
8925        simply ignore it.
8926
8927        According to the compiler gurus, an XVS type parallel to an aligner
8928        type may exist because of a stabs limitation.  In stabs, aligner
8929        types are empty because the field has a variable-sized type, and
8930        thus cannot actually be used as an aligner type.  As a result,
8931        we need the associated parallel XVS type to decode the type.
8932        Since the policy in the compiler is to not change the internal
8933        representation based on the debugging info format, we sometimes
8934        end up having a redundant XVS type parallel to the aligner type.  */
8935     return raw_type;
8936
8937   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8938   if (real_type_namer == NULL
8939       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8940       || TYPE_NFIELDS (real_type_namer) != 1)
8941     return raw_type;
8942
8943   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8944     {
8945       /* This is an older encoding form where the base type needs to be
8946          looked up by name.  We prefer the newer enconding because it is
8947          more efficient.  */
8948       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8949       if (raw_real_type == NULL)
8950         return raw_type;
8951       else
8952         return raw_real_type;
8953     }
8954
8955   /* The field in our XVS type is a reference to the base type.  */
8956   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
8957 }
8958
8959 /* The type of value designated by TYPE, with all aligners removed.  */
8960
8961 struct type *
8962 ada_aligned_type (struct type *type)
8963 {
8964   if (ada_is_aligner_type (type))
8965     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8966   else
8967     return ada_get_base_type (type);
8968 }
8969
8970
8971 /* The address of the aligned value in an object at address VALADDR
8972    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
8973
8974 const gdb_byte *
8975 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
8976 {
8977   if (ada_is_aligner_type (type))
8978     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8979                                    valaddr +
8980                                    TYPE_FIELD_BITPOS (type,
8981                                                       0) / TARGET_CHAR_BIT);
8982   else
8983     return valaddr;
8984 }
8985
8986
8987
8988 /* The printed representation of an enumeration literal with encoded
8989    name NAME.  The value is good to the next call of ada_enum_name.  */
8990 const char *
8991 ada_enum_name (const char *name)
8992 {
8993   static char *result;
8994   static size_t result_len = 0;
8995   char *tmp;
8996
8997   /* First, unqualify the enumeration name:
8998      1. Search for the last '.' character.  If we find one, then skip
8999      all the preceding characters, the unqualified name starts
9000      right after that dot.
9001      2. Otherwise, we may be debugging on a target where the compiler
9002      translates dots into "__".  Search forward for double underscores,
9003      but stop searching when we hit an overloading suffix, which is
9004      of the form "__" followed by digits.  */
9005
9006   tmp = strrchr (name, '.');
9007   if (tmp != NULL)
9008     name = tmp + 1;
9009   else
9010     {
9011       while ((tmp = strstr (name, "__")) != NULL)
9012         {
9013           if (isdigit (tmp[2]))
9014             break;
9015           else
9016             name = tmp + 2;
9017         }
9018     }
9019
9020   if (name[0] == 'Q')
9021     {
9022       int v;
9023
9024       if (name[1] == 'U' || name[1] == 'W')
9025         {
9026           if (sscanf (name + 2, "%x", &v) != 1)
9027             return name;
9028         }
9029       else
9030         return name;
9031
9032       GROW_VECT (result, result_len, 16);
9033       if (isascii (v) && isprint (v))
9034         xsnprintf (result, result_len, "'%c'", v);
9035       else if (name[1] == 'U')
9036         xsnprintf (result, result_len, "[\"%02x\"]", v);
9037       else
9038         xsnprintf (result, result_len, "[\"%04x\"]", v);
9039
9040       return result;
9041     }
9042   else
9043     {
9044       tmp = strstr (name, "__");
9045       if (tmp == NULL)
9046         tmp = strstr (name, "$");
9047       if (tmp != NULL)
9048         {
9049           GROW_VECT (result, result_len, tmp - name + 1);
9050           strncpy (result, name, tmp - name);
9051           result[tmp - name] = '\0';
9052           return result;
9053         }
9054
9055       return name;
9056     }
9057 }
9058
9059 /* Evaluate the subexpression of EXP starting at *POS as for
9060    evaluate_type, updating *POS to point just past the evaluated
9061    expression.  */
9062
9063 static struct value *
9064 evaluate_subexp_type (struct expression *exp, int *pos)
9065 {
9066   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9067 }
9068
9069 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9070    value it wraps.  */
9071
9072 static struct value *
9073 unwrap_value (struct value *val)
9074 {
9075   struct type *type = ada_check_typedef (value_type (val));
9076
9077   if (ada_is_aligner_type (type))
9078     {
9079       struct value *v = ada_value_struct_elt (val, "F", 0);
9080       struct type *val_type = ada_check_typedef (value_type (v));
9081
9082       if (ada_type_name (val_type) == NULL)
9083         TYPE_NAME (val_type) = ada_type_name (type);
9084
9085       return unwrap_value (v);
9086     }
9087   else
9088     {
9089       struct type *raw_real_type =
9090         ada_check_typedef (ada_get_base_type (type));
9091
9092       /* If there is no parallel XVS or XVE type, then the value is
9093          already unwrapped.  Return it without further modification.  */
9094       if ((type == raw_real_type)
9095           && ada_find_parallel_type (type, "___XVE") == NULL)
9096         return val;
9097
9098       return
9099         coerce_unspec_val_to_type
9100         (val, ada_to_fixed_type (raw_real_type, 0,
9101                                  value_address (val),
9102                                  NULL, 1));
9103     }
9104 }
9105
9106 static struct value *
9107 cast_to_fixed (struct type *type, struct value *arg)
9108 {
9109   LONGEST val;
9110
9111   if (type == value_type (arg))
9112     return arg;
9113   else if (ada_is_fixed_point_type (value_type (arg)))
9114     val = ada_float_to_fixed (type,
9115                               ada_fixed_to_float (value_type (arg),
9116                                                   value_as_long (arg)));
9117   else
9118     {
9119       DOUBLEST argd = value_as_double (arg);
9120
9121       val = ada_float_to_fixed (type, argd);
9122     }
9123
9124   return value_from_longest (type, val);
9125 }
9126
9127 static struct value *
9128 cast_from_fixed (struct type *type, struct value *arg)
9129 {
9130   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9131                                      value_as_long (arg));
9132
9133   return value_from_double (type, val);
9134 }
9135
9136 /* Given two array types T1 and T2, return nonzero iff both arrays
9137    contain the same number of elements.  */
9138
9139 static int
9140 ada_same_array_size_p (struct type *t1, struct type *t2)
9141 {
9142   LONGEST lo1, hi1, lo2, hi2;
9143
9144   /* Get the array bounds in order to verify that the size of
9145      the two arrays match.  */
9146   if (!get_array_bounds (t1, &lo1, &hi1)
9147       || !get_array_bounds (t2, &lo2, &hi2))
9148     error (_("unable to determine array bounds"));
9149
9150   /* To make things easier for size comparison, normalize a bit
9151      the case of empty arrays by making sure that the difference
9152      between upper bound and lower bound is always -1.  */
9153   if (lo1 > hi1)
9154     hi1 = lo1 - 1;
9155   if (lo2 > hi2)
9156     hi2 = lo2 - 1;
9157
9158   return (hi1 - lo1 == hi2 - lo2);
9159 }
9160
9161 /* Assuming that VAL is an array of integrals, and TYPE represents
9162    an array with the same number of elements, but with wider integral
9163    elements, return an array "casted" to TYPE.  In practice, this
9164    means that the returned array is built by casting each element
9165    of the original array into TYPE's (wider) element type.  */
9166
9167 static struct value *
9168 ada_promote_array_of_integrals (struct type *type, struct value *val)
9169 {
9170   struct type *elt_type = TYPE_TARGET_TYPE (type);
9171   LONGEST lo, hi;
9172   struct value *res;
9173   LONGEST i;
9174
9175   /* Verify that both val and type are arrays of scalars, and
9176      that the size of val's elements is smaller than the size
9177      of type's element.  */
9178   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9179   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9180   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9181   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9182   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9183               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9184
9185   if (!get_array_bounds (type, &lo, &hi))
9186     error (_("unable to determine array bounds"));
9187
9188   res = allocate_value (type);
9189
9190   /* Promote each array element.  */
9191   for (i = 0; i < hi - lo + 1; i++)
9192     {
9193       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9194
9195       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9196               value_contents_all (elt), TYPE_LENGTH (elt_type));
9197     }
9198
9199   return res;
9200 }
9201
9202 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9203    return the converted value.  */
9204
9205 static struct value *
9206 coerce_for_assign (struct type *type, struct value *val)
9207 {
9208   struct type *type2 = value_type (val);
9209
9210   if (type == type2)
9211     return val;
9212
9213   type2 = ada_check_typedef (type2);
9214   type = ada_check_typedef (type);
9215
9216   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9217       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9218     {
9219       val = ada_value_ind (val);
9220       type2 = value_type (val);
9221     }
9222
9223   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9224       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9225     {
9226       if (!ada_same_array_size_p (type, type2))
9227         error (_("cannot assign arrays of different length"));
9228
9229       if (is_integral_type (TYPE_TARGET_TYPE (type))
9230           && is_integral_type (TYPE_TARGET_TYPE (type2))
9231           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9232                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9233         {
9234           /* Allow implicit promotion of the array elements to
9235              a wider type.  */
9236           return ada_promote_array_of_integrals (type, val);
9237         }
9238
9239       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9240           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9241         error (_("Incompatible types in assignment"));
9242       deprecated_set_value_type (val, type);
9243     }
9244   return val;
9245 }
9246
9247 static struct value *
9248 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9249 {
9250   struct value *val;
9251   struct type *type1, *type2;
9252   LONGEST v, v1, v2;
9253
9254   arg1 = coerce_ref (arg1);
9255   arg2 = coerce_ref (arg2);
9256   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9257   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9258
9259   if (TYPE_CODE (type1) != TYPE_CODE_INT
9260       || TYPE_CODE (type2) != TYPE_CODE_INT)
9261     return value_binop (arg1, arg2, op);
9262
9263   switch (op)
9264     {
9265     case BINOP_MOD:
9266     case BINOP_DIV:
9267     case BINOP_REM:
9268       break;
9269     default:
9270       return value_binop (arg1, arg2, op);
9271     }
9272
9273   v2 = value_as_long (arg2);
9274   if (v2 == 0)
9275     error (_("second operand of %s must not be zero."), op_string (op));
9276
9277   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9278     return value_binop (arg1, arg2, op);
9279
9280   v1 = value_as_long (arg1);
9281   switch (op)
9282     {
9283     case BINOP_DIV:
9284       v = v1 / v2;
9285       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9286         v += v > 0 ? -1 : 1;
9287       break;
9288     case BINOP_REM:
9289       v = v1 % v2;
9290       if (v * v1 < 0)
9291         v -= v2;
9292       break;
9293     default:
9294       /* Should not reach this point.  */
9295       v = 0;
9296     }
9297
9298   val = allocate_value (type1);
9299   store_unsigned_integer (value_contents_raw (val),
9300                           TYPE_LENGTH (value_type (val)),
9301                           gdbarch_byte_order (get_type_arch (type1)), v);
9302   return val;
9303 }
9304
9305 static int
9306 ada_value_equal (struct value *arg1, struct value *arg2)
9307 {
9308   if (ada_is_direct_array_type (value_type (arg1))
9309       || ada_is_direct_array_type (value_type (arg2)))
9310     {
9311       /* Automatically dereference any array reference before
9312          we attempt to perform the comparison.  */
9313       arg1 = ada_coerce_ref (arg1);
9314       arg2 = ada_coerce_ref (arg2);
9315       
9316       arg1 = ada_coerce_to_simple_array (arg1);
9317       arg2 = ada_coerce_to_simple_array (arg2);
9318       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9319           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9320         error (_("Attempt to compare array with non-array"));
9321       /* FIXME: The following works only for types whose
9322          representations use all bits (no padding or undefined bits)
9323          and do not have user-defined equality.  */
9324       return
9325         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9326         && memcmp (value_contents (arg1), value_contents (arg2),
9327                    TYPE_LENGTH (value_type (arg1))) == 0;
9328     }
9329   return value_equal (arg1, arg2);
9330 }
9331
9332 /* Total number of component associations in the aggregate starting at
9333    index PC in EXP.  Assumes that index PC is the start of an
9334    OP_AGGREGATE.  */
9335
9336 static int
9337 num_component_specs (struct expression *exp, int pc)
9338 {
9339   int n, m, i;
9340
9341   m = exp->elts[pc + 1].longconst;
9342   pc += 3;
9343   n = 0;
9344   for (i = 0; i < m; i += 1)
9345     {
9346       switch (exp->elts[pc].opcode) 
9347         {
9348         default:
9349           n += 1;
9350           break;
9351         case OP_CHOICES:
9352           n += exp->elts[pc + 1].longconst;
9353           break;
9354         }
9355       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9356     }
9357   return n;
9358 }
9359
9360 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9361    component of LHS (a simple array or a record), updating *POS past
9362    the expression, assuming that LHS is contained in CONTAINER.  Does
9363    not modify the inferior's memory, nor does it modify LHS (unless
9364    LHS == CONTAINER).  */
9365
9366 static void
9367 assign_component (struct value *container, struct value *lhs, LONGEST index,
9368                   struct expression *exp, int *pos)
9369 {
9370   struct value *mark = value_mark ();
9371   struct value *elt;
9372
9373   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9374     {
9375       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9376       struct value *index_val = value_from_longest (index_type, index);
9377
9378       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9379     }
9380   else
9381     {
9382       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9383       elt = ada_to_fixed_value (elt);
9384     }
9385
9386   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9387     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9388   else
9389     value_assign_to_component (container, elt, 
9390                                ada_evaluate_subexp (NULL, exp, pos, 
9391                                                     EVAL_NORMAL));
9392
9393   value_free_to_mark (mark);
9394 }
9395
9396 /* Assuming that LHS represents an lvalue having a record or array
9397    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9398    of that aggregate's value to LHS, advancing *POS past the
9399    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9400    lvalue containing LHS (possibly LHS itself).  Does not modify
9401    the inferior's memory, nor does it modify the contents of 
9402    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9403
9404 static struct value *
9405 assign_aggregate (struct value *container, 
9406                   struct value *lhs, struct expression *exp, 
9407                   int *pos, enum noside noside)
9408 {
9409   struct type *lhs_type;
9410   int n = exp->elts[*pos+1].longconst;
9411   LONGEST low_index, high_index;
9412   int num_specs;
9413   LONGEST *indices;
9414   int max_indices, num_indices;
9415   int i;
9416
9417   *pos += 3;
9418   if (noside != EVAL_NORMAL)
9419     {
9420       for (i = 0; i < n; i += 1)
9421         ada_evaluate_subexp (NULL, exp, pos, noside);
9422       return container;
9423     }
9424
9425   container = ada_coerce_ref (container);
9426   if (ada_is_direct_array_type (value_type (container)))
9427     container = ada_coerce_to_simple_array (container);
9428   lhs = ada_coerce_ref (lhs);
9429   if (!deprecated_value_modifiable (lhs))
9430     error (_("Left operand of assignment is not a modifiable lvalue."));
9431
9432   lhs_type = value_type (lhs);
9433   if (ada_is_direct_array_type (lhs_type))
9434     {
9435       lhs = ada_coerce_to_simple_array (lhs);
9436       lhs_type = value_type (lhs);
9437       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9438       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9439     }
9440   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9441     {
9442       low_index = 0;
9443       high_index = num_visible_fields (lhs_type) - 1;
9444     }
9445   else
9446     error (_("Left-hand side must be array or record."));
9447
9448   num_specs = num_component_specs (exp, *pos - 3);
9449   max_indices = 4 * num_specs + 4;
9450   indices = alloca (max_indices * sizeof (indices[0]));
9451   indices[0] = indices[1] = low_index - 1;
9452   indices[2] = indices[3] = high_index + 1;
9453   num_indices = 4;
9454
9455   for (i = 0; i < n; i += 1)
9456     {
9457       switch (exp->elts[*pos].opcode)
9458         {
9459           case OP_CHOICES:
9460             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9461                                            &num_indices, max_indices,
9462                                            low_index, high_index);
9463             break;
9464           case OP_POSITIONAL:
9465             aggregate_assign_positional (container, lhs, exp, pos, indices,
9466                                          &num_indices, max_indices,
9467                                          low_index, high_index);
9468             break;
9469           case OP_OTHERS:
9470             if (i != n-1)
9471               error (_("Misplaced 'others' clause"));
9472             aggregate_assign_others (container, lhs, exp, pos, indices, 
9473                                      num_indices, low_index, high_index);
9474             break;
9475           default:
9476             error (_("Internal error: bad aggregate clause"));
9477         }
9478     }
9479
9480   return container;
9481 }
9482               
9483 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9484    construct at *POS, updating *POS past the construct, given that
9485    the positions are relative to lower bound LOW, where HIGH is the 
9486    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9487    updating *NUM_INDICES as needed.  CONTAINER is as for
9488    assign_aggregate.  */
9489 static void
9490 aggregate_assign_positional (struct value *container,
9491                              struct value *lhs, struct expression *exp,
9492                              int *pos, LONGEST *indices, int *num_indices,
9493                              int max_indices, LONGEST low, LONGEST high) 
9494 {
9495   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9496   
9497   if (ind - 1 == high)
9498     warning (_("Extra components in aggregate ignored."));
9499   if (ind <= high)
9500     {
9501       add_component_interval (ind, ind, indices, num_indices, max_indices);
9502       *pos += 3;
9503       assign_component (container, lhs, ind, exp, pos);
9504     }
9505   else
9506     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9507 }
9508
9509 /* Assign into the components of LHS indexed by the OP_CHOICES
9510    construct at *POS, updating *POS past the construct, given that
9511    the allowable indices are LOW..HIGH.  Record the indices assigned
9512    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9513    needed.  CONTAINER is as for assign_aggregate.  */
9514 static void
9515 aggregate_assign_from_choices (struct value *container,
9516                                struct value *lhs, struct expression *exp,
9517                                int *pos, LONGEST *indices, int *num_indices,
9518                                int max_indices, LONGEST low, LONGEST high) 
9519 {
9520   int j;
9521   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9522   int choice_pos, expr_pc;
9523   int is_array = ada_is_direct_array_type (value_type (lhs));
9524
9525   choice_pos = *pos += 3;
9526
9527   for (j = 0; j < n_choices; j += 1)
9528     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9529   expr_pc = *pos;
9530   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9531   
9532   for (j = 0; j < n_choices; j += 1)
9533     {
9534       LONGEST lower, upper;
9535       enum exp_opcode op = exp->elts[choice_pos].opcode;
9536
9537       if (op == OP_DISCRETE_RANGE)
9538         {
9539           choice_pos += 1;
9540           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9541                                                       EVAL_NORMAL));
9542           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
9543                                                       EVAL_NORMAL));
9544         }
9545       else if (is_array)
9546         {
9547           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
9548                                                       EVAL_NORMAL));
9549           upper = lower;
9550         }
9551       else
9552         {
9553           int ind;
9554           const char *name;
9555
9556           switch (op)
9557             {
9558             case OP_NAME:
9559               name = &exp->elts[choice_pos + 2].string;
9560               break;
9561             case OP_VAR_VALUE:
9562               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9563               break;
9564             default:
9565               error (_("Invalid record component association."));
9566             }
9567           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9568           ind = 0;
9569           if (! find_struct_field (name, value_type (lhs), 0, 
9570                                    NULL, NULL, NULL, NULL, &ind))
9571             error (_("Unknown component name: %s."), name);
9572           lower = upper = ind;
9573         }
9574
9575       if (lower <= upper && (lower < low || upper > high))
9576         error (_("Index in component association out of bounds."));
9577
9578       add_component_interval (lower, upper, indices, num_indices,
9579                               max_indices);
9580       while (lower <= upper)
9581         {
9582           int pos1;
9583
9584           pos1 = expr_pc;
9585           assign_component (container, lhs, lower, exp, &pos1);
9586           lower += 1;
9587         }
9588     }
9589 }
9590
9591 /* Assign the value of the expression in the OP_OTHERS construct in
9592    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9593    have not been previously assigned.  The index intervals already assigned
9594    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
9595    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9596 static void
9597 aggregate_assign_others (struct value *container,
9598                          struct value *lhs, struct expression *exp,
9599                          int *pos, LONGEST *indices, int num_indices,
9600                          LONGEST low, LONGEST high) 
9601 {
9602   int i;
9603   int expr_pc = *pos + 1;
9604   
9605   for (i = 0; i < num_indices - 2; i += 2)
9606     {
9607       LONGEST ind;
9608
9609       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9610         {
9611           int localpos;
9612
9613           localpos = expr_pc;
9614           assign_component (container, lhs, ind, exp, &localpos);
9615         }
9616     }
9617   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9618 }
9619
9620 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
9621    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9622    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9623    MAX_SIZE.  The resulting intervals do not overlap.  */
9624 static void
9625 add_component_interval (LONGEST low, LONGEST high, 
9626                         LONGEST* indices, int *size, int max_size)
9627 {
9628   int i, j;
9629
9630   for (i = 0; i < *size; i += 2) {
9631     if (high >= indices[i] && low <= indices[i + 1])
9632       {
9633         int kh;
9634
9635         for (kh = i + 2; kh < *size; kh += 2)
9636           if (high < indices[kh])
9637             break;
9638         if (low < indices[i])
9639           indices[i] = low;
9640         indices[i + 1] = indices[kh - 1];
9641         if (high > indices[i + 1])
9642           indices[i + 1] = high;
9643         memcpy (indices + i + 2, indices + kh, *size - kh);
9644         *size -= kh - i - 2;
9645         return;
9646       }
9647     else if (high < indices[i])
9648       break;
9649   }
9650         
9651   if (*size == max_size)
9652     error (_("Internal error: miscounted aggregate components."));
9653   *size += 2;
9654   for (j = *size-1; j >= i+2; j -= 1)
9655     indices[j] = indices[j - 2];
9656   indices[i] = low;
9657   indices[i + 1] = high;
9658 }
9659
9660 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9661    is different.  */
9662
9663 static struct value *
9664 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9665 {
9666   if (type == ada_check_typedef (value_type (arg2)))
9667     return arg2;
9668
9669   if (ada_is_fixed_point_type (type))
9670     return (cast_to_fixed (type, arg2));
9671
9672   if (ada_is_fixed_point_type (value_type (arg2)))
9673     return cast_from_fixed (type, arg2);
9674
9675   return value_cast (type, arg2);
9676 }
9677
9678 /*  Evaluating Ada expressions, and printing their result.
9679     ------------------------------------------------------
9680
9681     1. Introduction:
9682     ----------------
9683
9684     We usually evaluate an Ada expression in order to print its value.
9685     We also evaluate an expression in order to print its type, which
9686     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9687     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9688     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9689     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9690     similar.
9691
9692     Evaluating expressions is a little more complicated for Ada entities
9693     than it is for entities in languages such as C.  The main reason for
9694     this is that Ada provides types whose definition might be dynamic.
9695     One example of such types is variant records.  Or another example
9696     would be an array whose bounds can only be known at run time.
9697
9698     The following description is a general guide as to what should be
9699     done (and what should NOT be done) in order to evaluate an expression
9700     involving such types, and when.  This does not cover how the semantic
9701     information is encoded by GNAT as this is covered separatly.  For the
9702     document used as the reference for the GNAT encoding, see exp_dbug.ads
9703     in the GNAT sources.
9704
9705     Ideally, we should embed each part of this description next to its
9706     associated code.  Unfortunately, the amount of code is so vast right
9707     now that it's hard to see whether the code handling a particular
9708     situation might be duplicated or not.  One day, when the code is
9709     cleaned up, this guide might become redundant with the comments
9710     inserted in the code, and we might want to remove it.
9711
9712     2. ``Fixing'' an Entity, the Simple Case:
9713     -----------------------------------------
9714
9715     When evaluating Ada expressions, the tricky issue is that they may
9716     reference entities whose type contents and size are not statically
9717     known.  Consider for instance a variant record:
9718
9719        type Rec (Empty : Boolean := True) is record
9720           case Empty is
9721              when True => null;
9722              when False => Value : Integer;
9723           end case;
9724        end record;
9725        Yes : Rec := (Empty => False, Value => 1);
9726        No  : Rec := (empty => True);
9727
9728     The size and contents of that record depends on the value of the
9729     descriminant (Rec.Empty).  At this point, neither the debugging
9730     information nor the associated type structure in GDB are able to
9731     express such dynamic types.  So what the debugger does is to create
9732     "fixed" versions of the type that applies to the specific object.
9733     We also informally refer to this opperation as "fixing" an object,
9734     which means creating its associated fixed type.
9735
9736     Example: when printing the value of variable "Yes" above, its fixed
9737     type would look like this:
9738
9739        type Rec is record
9740           Empty : Boolean;
9741           Value : Integer;
9742        end record;
9743
9744     On the other hand, if we printed the value of "No", its fixed type
9745     would become:
9746
9747        type Rec is record
9748           Empty : Boolean;
9749        end record;
9750
9751     Things become a little more complicated when trying to fix an entity
9752     with a dynamic type that directly contains another dynamic type,
9753     such as an array of variant records, for instance.  There are
9754     two possible cases: Arrays, and records.
9755
9756     3. ``Fixing'' Arrays:
9757     ---------------------
9758
9759     The type structure in GDB describes an array in terms of its bounds,
9760     and the type of its elements.  By design, all elements in the array
9761     have the same type and we cannot represent an array of variant elements
9762     using the current type structure in GDB.  When fixing an array,
9763     we cannot fix the array element, as we would potentially need one
9764     fixed type per element of the array.  As a result, the best we can do
9765     when fixing an array is to produce an array whose bounds and size
9766     are correct (allowing us to read it from memory), but without having
9767     touched its element type.  Fixing each element will be done later,
9768     when (if) necessary.
9769
9770     Arrays are a little simpler to handle than records, because the same
9771     amount of memory is allocated for each element of the array, even if
9772     the amount of space actually used by each element differs from element
9773     to element.  Consider for instance the following array of type Rec:
9774
9775        type Rec_Array is array (1 .. 2) of Rec;
9776
9777     The actual amount of memory occupied by each element might be different
9778     from element to element, depending on the value of their discriminant.
9779     But the amount of space reserved for each element in the array remains
9780     fixed regardless.  So we simply need to compute that size using
9781     the debugging information available, from which we can then determine
9782     the array size (we multiply the number of elements of the array by
9783     the size of each element).
9784
9785     The simplest case is when we have an array of a constrained element
9786     type. For instance, consider the following type declarations:
9787
9788         type Bounded_String (Max_Size : Integer) is
9789            Length : Integer;
9790            Buffer : String (1 .. Max_Size);
9791         end record;
9792         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9793
9794     In this case, the compiler describes the array as an array of
9795     variable-size elements (identified by its XVS suffix) for which
9796     the size can be read in the parallel XVZ variable.
9797
9798     In the case of an array of an unconstrained element type, the compiler
9799     wraps the array element inside a private PAD type.  This type should not
9800     be shown to the user, and must be "unwrap"'ed before printing.  Note
9801     that we also use the adjective "aligner" in our code to designate
9802     these wrapper types.
9803
9804     In some cases, the size allocated for each element is statically
9805     known.  In that case, the PAD type already has the correct size,
9806     and the array element should remain unfixed.
9807
9808     But there are cases when this size is not statically known.
9809     For instance, assuming that "Five" is an integer variable:
9810
9811         type Dynamic is array (1 .. Five) of Integer;
9812         type Wrapper (Has_Length : Boolean := False) is record
9813            Data : Dynamic;
9814            case Has_Length is
9815               when True => Length : Integer;
9816               when False => null;
9817            end case;
9818         end record;
9819         type Wrapper_Array is array (1 .. 2) of Wrapper;
9820
9821         Hello : Wrapper_Array := (others => (Has_Length => True,
9822                                              Data => (others => 17),
9823                                              Length => 1));
9824
9825
9826     The debugging info would describe variable Hello as being an
9827     array of a PAD type.  The size of that PAD type is not statically
9828     known, but can be determined using a parallel XVZ variable.
9829     In that case, a copy of the PAD type with the correct size should
9830     be used for the fixed array.
9831
9832     3. ``Fixing'' record type objects:
9833     ----------------------------------
9834
9835     Things are slightly different from arrays in the case of dynamic
9836     record types.  In this case, in order to compute the associated
9837     fixed type, we need to determine the size and offset of each of
9838     its components.  This, in turn, requires us to compute the fixed
9839     type of each of these components.
9840
9841     Consider for instance the example:
9842
9843         type Bounded_String (Max_Size : Natural) is record
9844            Str : String (1 .. Max_Size);
9845            Length : Natural;
9846         end record;
9847         My_String : Bounded_String (Max_Size => 10);
9848
9849     In that case, the position of field "Length" depends on the size
9850     of field Str, which itself depends on the value of the Max_Size
9851     discriminant.  In order to fix the type of variable My_String,
9852     we need to fix the type of field Str.  Therefore, fixing a variant
9853     record requires us to fix each of its components.
9854
9855     However, if a component does not have a dynamic size, the component
9856     should not be fixed.  In particular, fields that use a PAD type
9857     should not fixed.  Here is an example where this might happen
9858     (assuming type Rec above):
9859
9860        type Container (Big : Boolean) is record
9861           First : Rec;
9862           After : Integer;
9863           case Big is
9864              when True => Another : Integer;
9865              when False => null;
9866           end case;
9867        end record;
9868        My_Container : Container := (Big => False,
9869                                     First => (Empty => True),
9870                                     After => 42);
9871
9872     In that example, the compiler creates a PAD type for component First,
9873     whose size is constant, and then positions the component After just
9874     right after it.  The offset of component After is therefore constant
9875     in this case.
9876
9877     The debugger computes the position of each field based on an algorithm
9878     that uses, among other things, the actual position and size of the field
9879     preceding it.  Let's now imagine that the user is trying to print
9880     the value of My_Container.  If the type fixing was recursive, we would
9881     end up computing the offset of field After based on the size of the
9882     fixed version of field First.  And since in our example First has
9883     only one actual field, the size of the fixed type is actually smaller
9884     than the amount of space allocated to that field, and thus we would
9885     compute the wrong offset of field After.
9886
9887     To make things more complicated, we need to watch out for dynamic
9888     components of variant records (identified by the ___XVL suffix in
9889     the component name).  Even if the target type is a PAD type, the size
9890     of that type might not be statically known.  So the PAD type needs
9891     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9892     we might end up with the wrong size for our component.  This can be
9893     observed with the following type declarations:
9894
9895         type Octal is new Integer range 0 .. 7;
9896         type Octal_Array is array (Positive range <>) of Octal;
9897         pragma Pack (Octal_Array);
9898
9899         type Octal_Buffer (Size : Positive) is record
9900            Buffer : Octal_Array (1 .. Size);
9901            Length : Integer;
9902         end record;
9903
9904     In that case, Buffer is a PAD type whose size is unset and needs
9905     to be computed by fixing the unwrapped type.
9906
9907     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9908     ----------------------------------------------------------
9909
9910     Lastly, when should the sub-elements of an entity that remained unfixed
9911     thus far, be actually fixed?
9912
9913     The answer is: Only when referencing that element.  For instance
9914     when selecting one component of a record, this specific component
9915     should be fixed at that point in time.  Or when printing the value
9916     of a record, each component should be fixed before its value gets
9917     printed.  Similarly for arrays, the element of the array should be
9918     fixed when printing each element of the array, or when extracting
9919     one element out of that array.  On the other hand, fixing should
9920     not be performed on the elements when taking a slice of an array!
9921
9922     Note that one of the side-effects of miscomputing the offset and
9923     size of each field is that we end up also miscomputing the size
9924     of the containing type.  This can have adverse results when computing
9925     the value of an entity.  GDB fetches the value of an entity based
9926     on the size of its type, and thus a wrong size causes GDB to fetch
9927     the wrong amount of memory.  In the case where the computed size is
9928     too small, GDB fetches too little data to print the value of our
9929     entiry.  Results in this case as unpredicatble, as we usually read
9930     past the buffer containing the data =:-o.  */
9931
9932 /* Implement the evaluate_exp routine in the exp_descriptor structure
9933    for the Ada language.  */
9934
9935 static struct value *
9936 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9937                      int *pos, enum noside noside)
9938 {
9939   enum exp_opcode op;
9940   int tem;
9941   int pc;
9942   int preeval_pos;
9943   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9944   struct type *type;
9945   int nargs, oplen;
9946   struct value **argvec;
9947
9948   pc = *pos;
9949   *pos += 1;
9950   op = exp->elts[pc].opcode;
9951
9952   switch (op)
9953     {
9954     default:
9955       *pos -= 1;
9956       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9957
9958       if (noside == EVAL_NORMAL)
9959         arg1 = unwrap_value (arg1);
9960
9961       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9962          then we need to perform the conversion manually, because
9963          evaluate_subexp_standard doesn't do it.  This conversion is
9964          necessary in Ada because the different kinds of float/fixed
9965          types in Ada have different representations.
9966
9967          Similarly, we need to perform the conversion from OP_LONG
9968          ourselves.  */
9969       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9970         arg1 = ada_value_cast (expect_type, arg1, noside);
9971
9972       return arg1;
9973
9974     case OP_STRING:
9975       {
9976         struct value *result;
9977
9978         *pos -= 1;
9979         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9980         /* The result type will have code OP_STRING, bashed there from 
9981            OP_ARRAY.  Bash it back.  */
9982         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9983           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
9984         return result;
9985       }
9986
9987     case UNOP_CAST:
9988       (*pos) += 2;
9989       type = exp->elts[pc + 1].type;
9990       arg1 = evaluate_subexp (type, exp, pos, noside);
9991       if (noside == EVAL_SKIP)
9992         goto nosideret;
9993       arg1 = ada_value_cast (type, arg1, noside);
9994       return arg1;
9995
9996     case UNOP_QUAL:
9997       (*pos) += 2;
9998       type = exp->elts[pc + 1].type;
9999       return ada_evaluate_subexp (type, exp, pos, noside);
10000
10001     case BINOP_ASSIGN:
10002       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10003       if (exp->elts[*pos].opcode == OP_AGGREGATE)
10004         {
10005           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10006           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10007             return arg1;
10008           return ada_value_assign (arg1, arg1);
10009         }
10010       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10011          except if the lhs of our assignment is a convenience variable.
10012          In the case of assigning to a convenience variable, the lhs
10013          should be exactly the result of the evaluation of the rhs.  */
10014       type = value_type (arg1);
10015       if (VALUE_LVAL (arg1) == lval_internalvar)
10016          type = NULL;
10017       arg2 = evaluate_subexp (type, exp, pos, noside);
10018       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10019         return arg1;
10020       if (ada_is_fixed_point_type (value_type (arg1)))
10021         arg2 = cast_to_fixed (value_type (arg1), arg2);
10022       else if (ada_is_fixed_point_type (value_type (arg2)))
10023         error
10024           (_("Fixed-point values must be assigned to fixed-point variables"));
10025       else
10026         arg2 = coerce_for_assign (value_type (arg1), arg2);
10027       return ada_value_assign (arg1, arg2);
10028
10029     case BINOP_ADD:
10030       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10031       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10032       if (noside == EVAL_SKIP)
10033         goto nosideret;
10034       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10035         return (value_from_longest
10036                  (value_type (arg1),
10037                   value_as_long (arg1) + value_as_long (arg2)));
10038       if ((ada_is_fixed_point_type (value_type (arg1))
10039            || ada_is_fixed_point_type (value_type (arg2)))
10040           && value_type (arg1) != value_type (arg2))
10041         error (_("Operands of fixed-point addition must have the same type"));
10042       /* Do the addition, and cast the result to the type of the first
10043          argument.  We cannot cast the result to a reference type, so if
10044          ARG1 is a reference type, find its underlying type.  */
10045       type = value_type (arg1);
10046       while (TYPE_CODE (type) == TYPE_CODE_REF)
10047         type = TYPE_TARGET_TYPE (type);
10048       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10049       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10050
10051     case BINOP_SUB:
10052       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10053       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10054       if (noside == EVAL_SKIP)
10055         goto nosideret;
10056       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10057         return (value_from_longest
10058                  (value_type (arg1),
10059                   value_as_long (arg1) - value_as_long (arg2)));
10060       if ((ada_is_fixed_point_type (value_type (arg1))
10061            || ada_is_fixed_point_type (value_type (arg2)))
10062           && value_type (arg1) != value_type (arg2))
10063         error (_("Operands of fixed-point subtraction "
10064                  "must have the same type"));
10065       /* Do the substraction, and cast the result to the type of the first
10066          argument.  We cannot cast the result to a reference type, so if
10067          ARG1 is a reference type, find its underlying type.  */
10068       type = value_type (arg1);
10069       while (TYPE_CODE (type) == TYPE_CODE_REF)
10070         type = TYPE_TARGET_TYPE (type);
10071       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10072       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10073
10074     case BINOP_MUL:
10075     case BINOP_DIV:
10076     case BINOP_REM:
10077     case BINOP_MOD:
10078       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10079       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10080       if (noside == EVAL_SKIP)
10081         goto nosideret;
10082       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10083         {
10084           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10085           return value_zero (value_type (arg1), not_lval);
10086         }
10087       else
10088         {
10089           type = builtin_type (exp->gdbarch)->builtin_double;
10090           if (ada_is_fixed_point_type (value_type (arg1)))
10091             arg1 = cast_from_fixed (type, arg1);
10092           if (ada_is_fixed_point_type (value_type (arg2)))
10093             arg2 = cast_from_fixed (type, arg2);
10094           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10095           return ada_value_binop (arg1, arg2, op);
10096         }
10097
10098     case BINOP_EQUAL:
10099     case BINOP_NOTEQUAL:
10100       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10101       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10102       if (noside == EVAL_SKIP)
10103         goto nosideret;
10104       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10105         tem = 0;
10106       else
10107         {
10108           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10109           tem = ada_value_equal (arg1, arg2);
10110         }
10111       if (op == BINOP_NOTEQUAL)
10112         tem = !tem;
10113       type = language_bool_type (exp->language_defn, exp->gdbarch);
10114       return value_from_longest (type, (LONGEST) tem);
10115
10116     case UNOP_NEG:
10117       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10118       if (noside == EVAL_SKIP)
10119         goto nosideret;
10120       else if (ada_is_fixed_point_type (value_type (arg1)))
10121         return value_cast (value_type (arg1), value_neg (arg1));
10122       else
10123         {
10124           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10125           return value_neg (arg1);
10126         }
10127
10128     case BINOP_LOGICAL_AND:
10129     case BINOP_LOGICAL_OR:
10130     case UNOP_LOGICAL_NOT:
10131       {
10132         struct value *val;
10133
10134         *pos -= 1;
10135         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10136         type = language_bool_type (exp->language_defn, exp->gdbarch);
10137         return value_cast (type, val);
10138       }
10139
10140     case BINOP_BITWISE_AND:
10141     case BINOP_BITWISE_IOR:
10142     case BINOP_BITWISE_XOR:
10143       {
10144         struct value *val;
10145
10146         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10147         *pos = pc;
10148         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10149
10150         return value_cast (value_type (arg1), val);
10151       }
10152
10153     case OP_VAR_VALUE:
10154       *pos -= 1;
10155
10156       if (noside == EVAL_SKIP)
10157         {
10158           *pos += 4;
10159           goto nosideret;
10160         }
10161       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10162         /* Only encountered when an unresolved symbol occurs in a
10163            context other than a function call, in which case, it is
10164            invalid.  */
10165         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10166                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10167       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10168         {
10169           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10170           /* Check to see if this is a tagged type.  We also need to handle
10171              the case where the type is a reference to a tagged type, but
10172              we have to be careful to exclude pointers to tagged types.
10173              The latter should be shown as usual (as a pointer), whereas
10174              a reference should mostly be transparent to the user.  */
10175           if (ada_is_tagged_type (type, 0)
10176               || (TYPE_CODE (type) == TYPE_CODE_REF
10177                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10178           {
10179             /* Tagged types are a little special in the fact that the real
10180                type is dynamic and can only be determined by inspecting the
10181                object's tag.  This means that we need to get the object's
10182                value first (EVAL_NORMAL) and then extract the actual object
10183                type from its tag.
10184
10185                Note that we cannot skip the final step where we extract
10186                the object type from its tag, because the EVAL_NORMAL phase
10187                results in dynamic components being resolved into fixed ones.
10188                This can cause problems when trying to print the type
10189                description of tagged types whose parent has a dynamic size:
10190                We use the type name of the "_parent" component in order
10191                to print the name of the ancestor type in the type description.
10192                If that component had a dynamic size, the resolution into
10193                a fixed type would result in the loss of that type name,
10194                thus preventing us from printing the name of the ancestor
10195                type in the type description.  */
10196             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10197
10198             if (TYPE_CODE (type) != TYPE_CODE_REF)
10199               {
10200                 struct type *actual_type;
10201
10202                 actual_type = type_from_tag (ada_value_tag (arg1));
10203                 if (actual_type == NULL)
10204                   /* If, for some reason, we were unable to determine
10205                      the actual type from the tag, then use the static
10206                      approximation that we just computed as a fallback.
10207                      This can happen if the debugging information is
10208                      incomplete, for instance.  */
10209                   actual_type = type;
10210                 return value_zero (actual_type, not_lval);
10211               }
10212             else
10213               {
10214                 /* In the case of a ref, ada_coerce_ref takes care
10215                    of determining the actual type.  But the evaluation
10216                    should return a ref as it should be valid to ask
10217                    for its address; so rebuild a ref after coerce.  */
10218                 arg1 = ada_coerce_ref (arg1);
10219                 return value_ref (arg1);
10220               }
10221           }
10222
10223           *pos += 4;
10224           return value_zero (to_static_fixed_type (type), not_lval);
10225         }
10226       else
10227         {
10228           arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10229           return ada_to_fixed_value (arg1);
10230         }
10231
10232     case OP_FUNCALL:
10233       (*pos) += 2;
10234
10235       /* Allocate arg vector, including space for the function to be
10236          called in argvec[0] and a terminating NULL.  */
10237       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10238       argvec =
10239         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10240
10241       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10242           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10243         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10244                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10245       else
10246         {
10247           for (tem = 0; tem <= nargs; tem += 1)
10248             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10249           argvec[tem] = 0;
10250
10251           if (noside == EVAL_SKIP)
10252             goto nosideret;
10253         }
10254
10255       if (ada_is_constrained_packed_array_type
10256           (desc_base_type (value_type (argvec[0]))))
10257         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10258       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10259                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10260         /* This is a packed array that has already been fixed, and
10261            therefore already coerced to a simple array.  Nothing further
10262            to do.  */
10263         ;
10264       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10265                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10266                    && VALUE_LVAL (argvec[0]) == lval_memory))
10267         argvec[0] = value_addr (argvec[0]);
10268
10269       type = ada_check_typedef (value_type (argvec[0]));
10270
10271       /* Ada allows us to implicitly dereference arrays when subscripting
10272          them.  So, if this is an array typedef (encoding use for array
10273          access types encoded as fat pointers), strip it now.  */
10274       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10275         type = ada_typedef_target_type (type);
10276
10277       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10278         {
10279           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10280             {
10281             case TYPE_CODE_FUNC:
10282               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10283               break;
10284             case TYPE_CODE_ARRAY:
10285               break;
10286             case TYPE_CODE_STRUCT:
10287               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10288                 argvec[0] = ada_value_ind (argvec[0]);
10289               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10290               break;
10291             default:
10292               error (_("cannot subscript or call something of type `%s'"),
10293                      ada_type_name (value_type (argvec[0])));
10294               break;
10295             }
10296         }
10297
10298       switch (TYPE_CODE (type))
10299         {
10300         case TYPE_CODE_FUNC:
10301           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10302             {
10303               struct type *rtype = TYPE_TARGET_TYPE (type);
10304
10305               if (TYPE_GNU_IFUNC (type))
10306                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10307               return allocate_value (rtype);
10308             }
10309           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10310         case TYPE_CODE_INTERNAL_FUNCTION:
10311           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10312             /* We don't know anything about what the internal
10313                function might return, but we have to return
10314                something.  */
10315             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10316                                not_lval);
10317           else
10318             return call_internal_function (exp->gdbarch, exp->language_defn,
10319                                            argvec[0], nargs, argvec + 1);
10320
10321         case TYPE_CODE_STRUCT:
10322           {
10323             int arity;
10324
10325             arity = ada_array_arity (type);
10326             type = ada_array_element_type (type, nargs);
10327             if (type == NULL)
10328               error (_("cannot subscript or call a record"));
10329             if (arity != nargs)
10330               error (_("wrong number of subscripts; expecting %d"), arity);
10331             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10332               return value_zero (ada_aligned_type (type), lval_memory);
10333             return
10334               unwrap_value (ada_value_subscript
10335                             (argvec[0], nargs, argvec + 1));
10336           }
10337         case TYPE_CODE_ARRAY:
10338           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10339             {
10340               type = ada_array_element_type (type, nargs);
10341               if (type == NULL)
10342                 error (_("element type of array unknown"));
10343               else
10344                 return value_zero (ada_aligned_type (type), lval_memory);
10345             }
10346           return
10347             unwrap_value (ada_value_subscript
10348                           (ada_coerce_to_simple_array (argvec[0]),
10349                            nargs, argvec + 1));
10350         case TYPE_CODE_PTR:     /* Pointer to array */
10351           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10352           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10353             {
10354               type = ada_array_element_type (type, nargs);
10355               if (type == NULL)
10356                 error (_("element type of array unknown"));
10357               else
10358                 return value_zero (ada_aligned_type (type), lval_memory);
10359             }
10360           return
10361             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
10362                                                    nargs, argvec + 1));
10363
10364         default:
10365           error (_("Attempt to index or call something other than an "
10366                    "array or function"));
10367         }
10368
10369     case TERNOP_SLICE:
10370       {
10371         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10372         struct value *low_bound_val =
10373           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10374         struct value *high_bound_val =
10375           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10376         LONGEST low_bound;
10377         LONGEST high_bound;
10378
10379         low_bound_val = coerce_ref (low_bound_val);
10380         high_bound_val = coerce_ref (high_bound_val);
10381         low_bound = pos_atr (low_bound_val);
10382         high_bound = pos_atr (high_bound_val);
10383
10384         if (noside == EVAL_SKIP)
10385           goto nosideret;
10386
10387         /* If this is a reference to an aligner type, then remove all
10388            the aligners.  */
10389         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10390             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10391           TYPE_TARGET_TYPE (value_type (array)) =
10392             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10393
10394         if (ada_is_constrained_packed_array_type (value_type (array)))
10395           error (_("cannot slice a packed array"));
10396
10397         /* If this is a reference to an array or an array lvalue,
10398            convert to a pointer.  */
10399         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10400             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10401                 && VALUE_LVAL (array) == lval_memory))
10402           array = value_addr (array);
10403
10404         if (noside == EVAL_AVOID_SIDE_EFFECTS
10405             && ada_is_array_descriptor_type (ada_check_typedef
10406                                              (value_type (array))))
10407           return empty_array (ada_type_of_array (array, 0), low_bound);
10408
10409         array = ada_coerce_to_simple_array_ptr (array);
10410
10411         /* If we have more than one level of pointer indirection,
10412            dereference the value until we get only one level.  */
10413         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10414                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10415                      == TYPE_CODE_PTR))
10416           array = value_ind (array);
10417
10418         /* Make sure we really do have an array type before going further,
10419            to avoid a SEGV when trying to get the index type or the target
10420            type later down the road if the debug info generated by
10421            the compiler is incorrect or incomplete.  */
10422         if (!ada_is_simple_array_type (value_type (array)))
10423           error (_("cannot take slice of non-array"));
10424
10425         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10426             == TYPE_CODE_PTR)
10427           {
10428             struct type *type0 = ada_check_typedef (value_type (array));
10429
10430             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10431               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10432             else
10433               {
10434                 struct type *arr_type0 =
10435                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10436
10437                 return ada_value_slice_from_ptr (array, arr_type0,
10438                                                  longest_to_int (low_bound),
10439                                                  longest_to_int (high_bound));
10440               }
10441           }
10442         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10443           return array;
10444         else if (high_bound < low_bound)
10445           return empty_array (value_type (array), low_bound);
10446         else
10447           return ada_value_slice (array, longest_to_int (low_bound),
10448                                   longest_to_int (high_bound));
10449       }
10450
10451     case UNOP_IN_RANGE:
10452       (*pos) += 2;
10453       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10454       type = check_typedef (exp->elts[pc + 1].type);
10455
10456       if (noside == EVAL_SKIP)
10457         goto nosideret;
10458
10459       switch (TYPE_CODE (type))
10460         {
10461         default:
10462           lim_warning (_("Membership test incompletely implemented; "
10463                          "always returns true"));
10464           type = language_bool_type (exp->language_defn, exp->gdbarch);
10465           return value_from_longest (type, (LONGEST) 1);
10466
10467         case TYPE_CODE_RANGE:
10468           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10469           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10470           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10471           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10472           type = language_bool_type (exp->language_defn, exp->gdbarch);
10473           return
10474             value_from_longest (type,
10475                                 (value_less (arg1, arg3)
10476                                  || value_equal (arg1, arg3))
10477                                 && (value_less (arg2, arg1)
10478                                     || value_equal (arg2, arg1)));
10479         }
10480
10481     case BINOP_IN_BOUNDS:
10482       (*pos) += 2;
10483       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10484       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10485
10486       if (noside == EVAL_SKIP)
10487         goto nosideret;
10488
10489       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10490         {
10491           type = language_bool_type (exp->language_defn, exp->gdbarch);
10492           return value_zero (type, not_lval);
10493         }
10494
10495       tem = longest_to_int (exp->elts[pc + 1].longconst);
10496
10497       type = ada_index_type (value_type (arg2), tem, "range");
10498       if (!type)
10499         type = value_type (arg1);
10500
10501       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10502       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10503
10504       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10505       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10506       type = language_bool_type (exp->language_defn, exp->gdbarch);
10507       return
10508         value_from_longest (type,
10509                             (value_less (arg1, arg3)
10510                              || value_equal (arg1, arg3))
10511                             && (value_less (arg2, arg1)
10512                                 || value_equal (arg2, arg1)));
10513
10514     case TERNOP_IN_RANGE:
10515       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10516       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10517       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10518
10519       if (noside == EVAL_SKIP)
10520         goto nosideret;
10521
10522       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10523       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10524       type = language_bool_type (exp->language_defn, exp->gdbarch);
10525       return
10526         value_from_longest (type,
10527                             (value_less (arg1, arg3)
10528                              || value_equal (arg1, arg3))
10529                             && (value_less (arg2, arg1)
10530                                 || value_equal (arg2, arg1)));
10531
10532     case OP_ATR_FIRST:
10533     case OP_ATR_LAST:
10534     case OP_ATR_LENGTH:
10535       {
10536         struct type *type_arg;
10537
10538         if (exp->elts[*pos].opcode == OP_TYPE)
10539           {
10540             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10541             arg1 = NULL;
10542             type_arg = check_typedef (exp->elts[pc + 2].type);
10543           }
10544         else
10545           {
10546             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10547             type_arg = NULL;
10548           }
10549
10550         if (exp->elts[*pos].opcode != OP_LONG)
10551           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10552         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10553         *pos += 4;
10554
10555         if (noside == EVAL_SKIP)
10556           goto nosideret;
10557
10558         if (type_arg == NULL)
10559           {
10560             arg1 = ada_coerce_ref (arg1);
10561
10562             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10563               arg1 = ada_coerce_to_simple_array (arg1);
10564
10565             if (op == OP_ATR_LENGTH)
10566               type = builtin_type (exp->gdbarch)->builtin_int;
10567             else
10568               {
10569                 type = ada_index_type (value_type (arg1), tem,
10570                                        ada_attribute_name (op));
10571                 if (type == NULL)
10572                   type = builtin_type (exp->gdbarch)->builtin_int;
10573               }
10574
10575             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10576               return allocate_value (type);
10577
10578             switch (op)
10579               {
10580               default:          /* Should never happen.  */
10581                 error (_("unexpected attribute encountered"));
10582               case OP_ATR_FIRST:
10583                 return value_from_longest
10584                         (type, ada_array_bound (arg1, tem, 0));
10585               case OP_ATR_LAST:
10586                 return value_from_longest
10587                         (type, ada_array_bound (arg1, tem, 1));
10588               case OP_ATR_LENGTH:
10589                 return value_from_longest
10590                         (type, ada_array_length (arg1, tem));
10591               }
10592           }
10593         else if (discrete_type_p (type_arg))
10594           {
10595             struct type *range_type;
10596             const char *name = ada_type_name (type_arg);
10597
10598             range_type = NULL;
10599             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10600               range_type = to_fixed_range_type (type_arg, NULL);
10601             if (range_type == NULL)
10602               range_type = type_arg;
10603             switch (op)
10604               {
10605               default:
10606                 error (_("unexpected attribute encountered"));
10607               case OP_ATR_FIRST:
10608                 return value_from_longest 
10609                   (range_type, ada_discrete_type_low_bound (range_type));
10610               case OP_ATR_LAST:
10611                 return value_from_longest
10612                   (range_type, ada_discrete_type_high_bound (range_type));
10613               case OP_ATR_LENGTH:
10614                 error (_("the 'length attribute applies only to array types"));
10615               }
10616           }
10617         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10618           error (_("unimplemented type attribute"));
10619         else
10620           {
10621             LONGEST low, high;
10622
10623             if (ada_is_constrained_packed_array_type (type_arg))
10624               type_arg = decode_constrained_packed_array_type (type_arg);
10625
10626             if (op == OP_ATR_LENGTH)
10627               type = builtin_type (exp->gdbarch)->builtin_int;
10628             else
10629               {
10630                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10631                 if (type == NULL)
10632                   type = builtin_type (exp->gdbarch)->builtin_int;
10633               }
10634
10635             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10636               return allocate_value (type);
10637
10638             switch (op)
10639               {
10640               default:
10641                 error (_("unexpected attribute encountered"));
10642               case OP_ATR_FIRST:
10643                 low = ada_array_bound_from_type (type_arg, tem, 0);
10644                 return value_from_longest (type, low);
10645               case OP_ATR_LAST:
10646                 high = ada_array_bound_from_type (type_arg, tem, 1);
10647                 return value_from_longest (type, high);
10648               case OP_ATR_LENGTH:
10649                 low = ada_array_bound_from_type (type_arg, tem, 0);
10650                 high = ada_array_bound_from_type (type_arg, tem, 1);
10651                 return value_from_longest (type, high - low + 1);
10652               }
10653           }
10654       }
10655
10656     case OP_ATR_TAG:
10657       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10658       if (noside == EVAL_SKIP)
10659         goto nosideret;
10660
10661       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10662         return value_zero (ada_tag_type (arg1), not_lval);
10663
10664       return ada_value_tag (arg1);
10665
10666     case OP_ATR_MIN:
10667     case OP_ATR_MAX:
10668       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10669       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10670       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10671       if (noside == EVAL_SKIP)
10672         goto nosideret;
10673       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10674         return value_zero (value_type (arg1), not_lval);
10675       else
10676         {
10677           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10678           return value_binop (arg1, arg2,
10679                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10680         }
10681
10682     case OP_ATR_MODULUS:
10683       {
10684         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10685
10686         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10687         if (noside == EVAL_SKIP)
10688           goto nosideret;
10689
10690         if (!ada_is_modular_type (type_arg))
10691           error (_("'modulus must be applied to modular type"));
10692
10693         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10694                                    ada_modulus (type_arg));
10695       }
10696
10697
10698     case OP_ATR_POS:
10699       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10700       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10701       if (noside == EVAL_SKIP)
10702         goto nosideret;
10703       type = builtin_type (exp->gdbarch)->builtin_int;
10704       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10705         return value_zero (type, not_lval);
10706       else
10707         return value_pos_atr (type, arg1);
10708
10709     case OP_ATR_SIZE:
10710       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10711       type = value_type (arg1);
10712
10713       /* If the argument is a reference, then dereference its type, since
10714          the user is really asking for the size of the actual object,
10715          not the size of the pointer.  */
10716       if (TYPE_CODE (type) == TYPE_CODE_REF)
10717         type = TYPE_TARGET_TYPE (type);
10718
10719       if (noside == EVAL_SKIP)
10720         goto nosideret;
10721       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10722         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10723       else
10724         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10725                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10726
10727     case OP_ATR_VAL:
10728       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10729       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10730       type = exp->elts[pc + 2].type;
10731       if (noside == EVAL_SKIP)
10732         goto nosideret;
10733       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10734         return value_zero (type, not_lval);
10735       else
10736         return value_val_atr (type, arg1);
10737
10738     case BINOP_EXP:
10739       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10740       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10741       if (noside == EVAL_SKIP)
10742         goto nosideret;
10743       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10744         return value_zero (value_type (arg1), not_lval);
10745       else
10746         {
10747           /* For integer exponentiation operations,
10748              only promote the first argument.  */
10749           if (is_integral_type (value_type (arg2)))
10750             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10751           else
10752             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10753
10754           return value_binop (arg1, arg2, op);
10755         }
10756
10757     case UNOP_PLUS:
10758       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10759       if (noside == EVAL_SKIP)
10760         goto nosideret;
10761       else
10762         return arg1;
10763
10764     case UNOP_ABS:
10765       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10766       if (noside == EVAL_SKIP)
10767         goto nosideret;
10768       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10769       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10770         return value_neg (arg1);
10771       else
10772         return arg1;
10773
10774     case UNOP_IND:
10775       preeval_pos = *pos;
10776       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10777       if (noside == EVAL_SKIP)
10778         goto nosideret;
10779       type = ada_check_typedef (value_type (arg1));
10780       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10781         {
10782           if (ada_is_array_descriptor_type (type))
10783             /* GDB allows dereferencing GNAT array descriptors.  */
10784             {
10785               struct type *arrType = ada_type_of_array (arg1, 0);
10786
10787               if (arrType == NULL)
10788                 error (_("Attempt to dereference null array pointer."));
10789               return value_at_lazy (arrType, 0);
10790             }
10791           else if (TYPE_CODE (type) == TYPE_CODE_PTR
10792                    || TYPE_CODE (type) == TYPE_CODE_REF
10793                    /* In C you can dereference an array to get the 1st elt.  */
10794                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10795             {
10796             /* As mentioned in the OP_VAR_VALUE case, tagged types can
10797                only be determined by inspecting the object's tag.
10798                This means that we need to evaluate completely the
10799                expression in order to get its type.  */
10800
10801               if ((TYPE_CODE (type) == TYPE_CODE_REF
10802                    || TYPE_CODE (type) == TYPE_CODE_PTR)
10803                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10804                 {
10805                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10806                                           EVAL_NORMAL);
10807                   type = value_type (ada_value_ind (arg1));
10808                 }
10809               else
10810                 {
10811                   type = to_static_fixed_type
10812                     (ada_aligned_type
10813                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10814                 }
10815               check_size (type);
10816               return value_zero (type, lval_memory);
10817             }
10818           else if (TYPE_CODE (type) == TYPE_CODE_INT)
10819             {
10820               /* GDB allows dereferencing an int.  */
10821               if (expect_type == NULL)
10822                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10823                                    lval_memory);
10824               else
10825                 {
10826                   expect_type = 
10827                     to_static_fixed_type (ada_aligned_type (expect_type));
10828                   return value_zero (expect_type, lval_memory);
10829                 }
10830             }
10831           else
10832             error (_("Attempt to take contents of a non-pointer value."));
10833         }
10834       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
10835       type = ada_check_typedef (value_type (arg1));
10836
10837       if (TYPE_CODE (type) == TYPE_CODE_INT)
10838           /* GDB allows dereferencing an int.  If we were given
10839              the expect_type, then use that as the target type.
10840              Otherwise, assume that the target type is an int.  */
10841         {
10842           if (expect_type != NULL)
10843             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10844                                               arg1));
10845           else
10846             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10847                                   (CORE_ADDR) value_as_address (arg1));
10848         }
10849
10850       if (ada_is_array_descriptor_type (type))
10851         /* GDB allows dereferencing GNAT array descriptors.  */
10852         return ada_coerce_to_simple_array (arg1);
10853       else
10854         return ada_value_ind (arg1);
10855
10856     case STRUCTOP_STRUCT:
10857       tem = longest_to_int (exp->elts[pc + 1].longconst);
10858       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10859       preeval_pos = *pos;
10860       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10861       if (noside == EVAL_SKIP)
10862         goto nosideret;
10863       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10864         {
10865           struct type *type1 = value_type (arg1);
10866
10867           if (ada_is_tagged_type (type1, 1))
10868             {
10869               type = ada_lookup_struct_elt_type (type1,
10870                                                  &exp->elts[pc + 2].string,
10871                                                  1, 1, NULL);
10872
10873               /* If the field is not found, check if it exists in the
10874                  extension of this object's type. This means that we
10875                  need to evaluate completely the expression.  */
10876
10877               if (type == NULL)
10878                 {
10879                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10880                                           EVAL_NORMAL);
10881                   arg1 = ada_value_struct_elt (arg1,
10882                                                &exp->elts[pc + 2].string,
10883                                                0);
10884                   arg1 = unwrap_value (arg1);
10885                   type = value_type (ada_to_fixed_value (arg1));
10886                 }
10887             }
10888           else
10889             type =
10890               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10891                                           0, NULL);
10892
10893           return value_zero (ada_aligned_type (type), lval_memory);
10894         }
10895       else
10896         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10897         arg1 = unwrap_value (arg1);
10898         return ada_to_fixed_value (arg1);
10899
10900     case OP_TYPE:
10901       /* The value is not supposed to be used.  This is here to make it
10902          easier to accommodate expressions that contain types.  */
10903       (*pos) += 2;
10904       if (noside == EVAL_SKIP)
10905         goto nosideret;
10906       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10907         return allocate_value (exp->elts[pc + 1].type);
10908       else
10909         error (_("Attempt to use a type name as an expression"));
10910
10911     case OP_AGGREGATE:
10912     case OP_CHOICES:
10913     case OP_OTHERS:
10914     case OP_DISCRETE_RANGE:
10915     case OP_POSITIONAL:
10916     case OP_NAME:
10917       if (noside == EVAL_NORMAL)
10918         switch (op) 
10919           {
10920           case OP_NAME:
10921             error (_("Undefined name, ambiguous name, or renaming used in "
10922                      "component association: %s."), &exp->elts[pc+2].string);
10923           case OP_AGGREGATE:
10924             error (_("Aggregates only allowed on the right of an assignment"));
10925           default:
10926             internal_error (__FILE__, __LINE__,
10927                             _("aggregate apparently mangled"));
10928           }
10929
10930       ada_forward_operator_length (exp, pc, &oplen, &nargs);
10931       *pos += oplen - 1;
10932       for (tem = 0; tem < nargs; tem += 1) 
10933         ada_evaluate_subexp (NULL, exp, pos, noside);
10934       goto nosideret;
10935     }
10936
10937 nosideret:
10938   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
10939 }
10940 \f
10941
10942                                 /* Fixed point */
10943
10944 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
10945    type name that encodes the 'small and 'delta information.
10946    Otherwise, return NULL.  */
10947
10948 static const char *
10949 fixed_type_info (struct type *type)
10950 {
10951   const char *name = ada_type_name (type);
10952   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10953
10954   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10955     {
10956       const char *tail = strstr (name, "___XF_");
10957
10958       if (tail == NULL)
10959         return NULL;
10960       else
10961         return tail + 5;
10962     }
10963   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10964     return fixed_type_info (TYPE_TARGET_TYPE (type));
10965   else
10966     return NULL;
10967 }
10968
10969 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
10970
10971 int
10972 ada_is_fixed_point_type (struct type *type)
10973 {
10974   return fixed_type_info (type) != NULL;
10975 }
10976
10977 /* Return non-zero iff TYPE represents a System.Address type.  */
10978
10979 int
10980 ada_is_system_address_type (struct type *type)
10981 {
10982   return (TYPE_NAME (type)
10983           && strcmp (TYPE_NAME (type), "system__address") == 0);
10984 }
10985
10986 /* Assuming that TYPE is the representation of an Ada fixed-point
10987    type, return its delta, or -1 if the type is malformed and the
10988    delta cannot be determined.  */
10989
10990 DOUBLEST
10991 ada_delta (struct type *type)
10992 {
10993   const char *encoding = fixed_type_info (type);
10994   DOUBLEST num, den;
10995
10996   /* Strictly speaking, num and den are encoded as integer.  However,
10997      they may not fit into a long, and they will have to be converted
10998      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10999   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11000               &num, &den) < 2)
11001     return -1.0;
11002   else
11003     return num / den;
11004 }
11005
11006 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
11007    factor ('SMALL value) associated with the type.  */
11008
11009 static DOUBLEST
11010 scaling_factor (struct type *type)
11011 {
11012   const char *encoding = fixed_type_info (type);
11013   DOUBLEST num0, den0, num1, den1;
11014   int n;
11015
11016   /* Strictly speaking, num's and den's are encoded as integer.  However,
11017      they may not fit into a long, and they will have to be converted
11018      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11019   n = sscanf (encoding,
11020               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11021               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11022               &num0, &den0, &num1, &den1);
11023
11024   if (n < 2)
11025     return 1.0;
11026   else if (n == 4)
11027     return num1 / den1;
11028   else
11029     return num0 / den0;
11030 }
11031
11032
11033 /* Assuming that X is the representation of a value of fixed-point
11034    type TYPE, return its floating-point equivalent.  */
11035
11036 DOUBLEST
11037 ada_fixed_to_float (struct type *type, LONGEST x)
11038 {
11039   return (DOUBLEST) x *scaling_factor (type);
11040 }
11041
11042 /* The representation of a fixed-point value of type TYPE
11043    corresponding to the value X.  */
11044
11045 LONGEST
11046 ada_float_to_fixed (struct type *type, DOUBLEST x)
11047 {
11048   return (LONGEST) (x / scaling_factor (type) + 0.5);
11049 }
11050
11051 \f
11052
11053                                 /* Range types */
11054
11055 /* Scan STR beginning at position K for a discriminant name, and
11056    return the value of that discriminant field of DVAL in *PX.  If
11057    PNEW_K is not null, put the position of the character beyond the
11058    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11059    not alter *PX and *PNEW_K if unsuccessful.  */
11060
11061 static int
11062 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
11063                     int *pnew_k)
11064 {
11065   static char *bound_buffer = NULL;
11066   static size_t bound_buffer_len = 0;
11067   char *bound;
11068   char *pend;
11069   struct value *bound_val;
11070
11071   if (dval == NULL || str == NULL || str[k] == '\0')
11072     return 0;
11073
11074   pend = strstr (str + k, "__");
11075   if (pend == NULL)
11076     {
11077       bound = str + k;
11078       k += strlen (bound);
11079     }
11080   else
11081     {
11082       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
11083       bound = bound_buffer;
11084       strncpy (bound_buffer, str + k, pend - (str + k));
11085       bound[pend - (str + k)] = '\0';
11086       k = pend - str;
11087     }
11088
11089   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11090   if (bound_val == NULL)
11091     return 0;
11092
11093   *px = value_as_long (bound_val);
11094   if (pnew_k != NULL)
11095     *pnew_k = k;
11096   return 1;
11097 }
11098
11099 /* Value of variable named NAME in the current environment.  If
11100    no such variable found, then if ERR_MSG is null, returns 0, and
11101    otherwise causes an error with message ERR_MSG.  */
11102
11103 static struct value *
11104 get_var_value (char *name, char *err_msg)
11105 {
11106   struct ada_symbol_info *syms;
11107   int nsyms;
11108
11109   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11110                                   &syms);
11111
11112   if (nsyms != 1)
11113     {
11114       if (err_msg == NULL)
11115         return 0;
11116       else
11117         error (("%s"), err_msg);
11118     }
11119
11120   return value_of_variable (syms[0].sym, syms[0].block);
11121 }
11122
11123 /* Value of integer variable named NAME in the current environment.  If
11124    no such variable found, returns 0, and sets *FLAG to 0.  If
11125    successful, sets *FLAG to 1.  */
11126
11127 LONGEST
11128 get_int_var_value (char *name, int *flag)
11129 {
11130   struct value *var_val = get_var_value (name, 0);
11131
11132   if (var_val == 0)
11133     {
11134       if (flag != NULL)
11135         *flag = 0;
11136       return 0;
11137     }
11138   else
11139     {
11140       if (flag != NULL)
11141         *flag = 1;
11142       return value_as_long (var_val);
11143     }
11144 }
11145
11146
11147 /* Return a range type whose base type is that of the range type named
11148    NAME in the current environment, and whose bounds are calculated
11149    from NAME according to the GNAT range encoding conventions.
11150    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11151    corresponding range type from debug information; fall back to using it
11152    if symbol lookup fails.  If a new type must be created, allocate it
11153    like ORIG_TYPE was.  The bounds information, in general, is encoded
11154    in NAME, the base type given in the named range type.  */
11155
11156 static struct type *
11157 to_fixed_range_type (struct type *raw_type, struct value *dval)
11158 {
11159   const char *name;
11160   struct type *base_type;
11161   char *subtype_info;
11162
11163   gdb_assert (raw_type != NULL);
11164   gdb_assert (TYPE_NAME (raw_type) != NULL);
11165
11166   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11167     base_type = TYPE_TARGET_TYPE (raw_type);
11168   else
11169     base_type = raw_type;
11170
11171   name = TYPE_NAME (raw_type);
11172   subtype_info = strstr (name, "___XD");
11173   if (subtype_info == NULL)
11174     {
11175       LONGEST L = ada_discrete_type_low_bound (raw_type);
11176       LONGEST U = ada_discrete_type_high_bound (raw_type);
11177
11178       if (L < INT_MIN || U > INT_MAX)
11179         return raw_type;
11180       else
11181         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11182                                          L, U);
11183     }
11184   else
11185     {
11186       static char *name_buf = NULL;
11187       static size_t name_len = 0;
11188       int prefix_len = subtype_info - name;
11189       LONGEST L, U;
11190       struct type *type;
11191       char *bounds_str;
11192       int n;
11193
11194       GROW_VECT (name_buf, name_len, prefix_len + 5);
11195       strncpy (name_buf, name, prefix_len);
11196       name_buf[prefix_len] = '\0';
11197
11198       subtype_info += 5;
11199       bounds_str = strchr (subtype_info, '_');
11200       n = 1;
11201
11202       if (*subtype_info == 'L')
11203         {
11204           if (!ada_scan_number (bounds_str, n, &L, &n)
11205               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11206             return raw_type;
11207           if (bounds_str[n] == '_')
11208             n += 2;
11209           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11210             n += 1;
11211           subtype_info += 1;
11212         }
11213       else
11214         {
11215           int ok;
11216
11217           strcpy (name_buf + prefix_len, "___L");
11218           L = get_int_var_value (name_buf, &ok);
11219           if (!ok)
11220             {
11221               lim_warning (_("Unknown lower bound, using 1."));
11222               L = 1;
11223             }
11224         }
11225
11226       if (*subtype_info == 'U')
11227         {
11228           if (!ada_scan_number (bounds_str, n, &U, &n)
11229               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11230             return raw_type;
11231         }
11232       else
11233         {
11234           int ok;
11235
11236           strcpy (name_buf + prefix_len, "___U");
11237           U = get_int_var_value (name_buf, &ok);
11238           if (!ok)
11239             {
11240               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11241               U = L;
11242             }
11243         }
11244
11245       type = create_static_range_type (alloc_type_copy (raw_type),
11246                                        base_type, L, U);
11247       TYPE_NAME (type) = name;
11248       return type;
11249     }
11250 }
11251
11252 /* True iff NAME is the name of a range type.  */
11253
11254 int
11255 ada_is_range_type_name (const char *name)
11256 {
11257   return (name != NULL && strstr (name, "___XD"));
11258 }
11259 \f
11260
11261                                 /* Modular types */
11262
11263 /* True iff TYPE is an Ada modular type.  */
11264
11265 int
11266 ada_is_modular_type (struct type *type)
11267 {
11268   struct type *subranged_type = get_base_type (type);
11269
11270   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11271           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11272           && TYPE_UNSIGNED (subranged_type));
11273 }
11274
11275 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11276
11277 ULONGEST
11278 ada_modulus (struct type *type)
11279 {
11280   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11281 }
11282 \f
11283
11284 /* Ada exception catchpoint support:
11285    ---------------------------------
11286
11287    We support 3 kinds of exception catchpoints:
11288      . catchpoints on Ada exceptions
11289      . catchpoints on unhandled Ada exceptions
11290      . catchpoints on failed assertions
11291
11292    Exceptions raised during failed assertions, or unhandled exceptions
11293    could perfectly be caught with the general catchpoint on Ada exceptions.
11294    However, we can easily differentiate these two special cases, and having
11295    the option to distinguish these two cases from the rest can be useful
11296    to zero-in on certain situations.
11297
11298    Exception catchpoints are a specialized form of breakpoint,
11299    since they rely on inserting breakpoints inside known routines
11300    of the GNAT runtime.  The implementation therefore uses a standard
11301    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11302    of breakpoint_ops.
11303
11304    Support in the runtime for exception catchpoints have been changed
11305    a few times already, and these changes affect the implementation
11306    of these catchpoints.  In order to be able to support several
11307    variants of the runtime, we use a sniffer that will determine
11308    the runtime variant used by the program being debugged.  */
11309
11310 /* Ada's standard exceptions.
11311
11312    The Ada 83 standard also defined Numeric_Error.  But there so many
11313    situations where it was unclear from the Ada 83 Reference Manual
11314    (RM) whether Constraint_Error or Numeric_Error should be raised,
11315    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11316    Interpretation saying that anytime the RM says that Numeric_Error
11317    should be raised, the implementation may raise Constraint_Error.
11318    Ada 95 went one step further and pretty much removed Numeric_Error
11319    from the list of standard exceptions (it made it a renaming of
11320    Constraint_Error, to help preserve compatibility when compiling
11321    an Ada83 compiler). As such, we do not include Numeric_Error from
11322    this list of standard exceptions.  */
11323
11324 static char *standard_exc[] = {
11325   "constraint_error",
11326   "program_error",
11327   "storage_error",
11328   "tasking_error"
11329 };
11330
11331 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11332
11333 /* A structure that describes how to support exception catchpoints
11334    for a given executable.  */
11335
11336 struct exception_support_info
11337 {
11338    /* The name of the symbol to break on in order to insert
11339       a catchpoint on exceptions.  */
11340    const char *catch_exception_sym;
11341
11342    /* The name of the symbol to break on in order to insert
11343       a catchpoint on unhandled exceptions.  */
11344    const char *catch_exception_unhandled_sym;
11345
11346    /* The name of the symbol to break on in order to insert
11347       a catchpoint on failed assertions.  */
11348    const char *catch_assert_sym;
11349
11350    /* Assuming that the inferior just triggered an unhandled exception
11351       catchpoint, this function is responsible for returning the address
11352       in inferior memory where the name of that exception is stored.
11353       Return zero if the address could not be computed.  */
11354    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11355 };
11356
11357 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11358 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11359
11360 /* The following exception support info structure describes how to
11361    implement exception catchpoints with the latest version of the
11362    Ada runtime (as of 2007-03-06).  */
11363
11364 static const struct exception_support_info default_exception_support_info =
11365 {
11366   "__gnat_debug_raise_exception", /* catch_exception_sym */
11367   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11368   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11369   ada_unhandled_exception_name_addr
11370 };
11371
11372 /* The following exception support info structure describes how to
11373    implement exception catchpoints with a slightly older version
11374    of the Ada runtime.  */
11375
11376 static const struct exception_support_info exception_support_info_fallback =
11377 {
11378   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11379   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11380   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11381   ada_unhandled_exception_name_addr_from_raise
11382 };
11383
11384 /* Return nonzero if we can detect the exception support routines
11385    described in EINFO.
11386
11387    This function errors out if an abnormal situation is detected
11388    (for instance, if we find the exception support routines, but
11389    that support is found to be incomplete).  */
11390
11391 static int
11392 ada_has_this_exception_support (const struct exception_support_info *einfo)
11393 {
11394   struct symbol *sym;
11395
11396   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11397      that should be compiled with debugging information.  As a result, we
11398      expect to find that symbol in the symtabs.  */
11399
11400   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11401   if (sym == NULL)
11402     {
11403       /* Perhaps we did not find our symbol because the Ada runtime was
11404          compiled without debugging info, or simply stripped of it.
11405          It happens on some GNU/Linux distributions for instance, where
11406          users have to install a separate debug package in order to get
11407          the runtime's debugging info.  In that situation, let the user
11408          know why we cannot insert an Ada exception catchpoint.
11409
11410          Note: Just for the purpose of inserting our Ada exception
11411          catchpoint, we could rely purely on the associated minimal symbol.
11412          But we would be operating in degraded mode anyway, since we are
11413          still lacking the debugging info needed later on to extract
11414          the name of the exception being raised (this name is printed in
11415          the catchpoint message, and is also used when trying to catch
11416          a specific exception).  We do not handle this case for now.  */
11417       struct bound_minimal_symbol msym
11418         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11419
11420       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11421         error (_("Your Ada runtime appears to be missing some debugging "
11422                  "information.\nCannot insert Ada exception catchpoint "
11423                  "in this configuration."));
11424
11425       return 0;
11426     }
11427
11428   /* Make sure that the symbol we found corresponds to a function.  */
11429
11430   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11431     error (_("Symbol \"%s\" is not a function (class = %d)"),
11432            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11433
11434   return 1;
11435 }
11436
11437 /* Inspect the Ada runtime and determine which exception info structure
11438    should be used to provide support for exception catchpoints.
11439
11440    This function will always set the per-inferior exception_info,
11441    or raise an error.  */
11442
11443 static void
11444 ada_exception_support_info_sniffer (void)
11445 {
11446   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11447
11448   /* If the exception info is already known, then no need to recompute it.  */
11449   if (data->exception_info != NULL)
11450     return;
11451
11452   /* Check the latest (default) exception support info.  */
11453   if (ada_has_this_exception_support (&default_exception_support_info))
11454     {
11455       data->exception_info = &default_exception_support_info;
11456       return;
11457     }
11458
11459   /* Try our fallback exception suport info.  */
11460   if (ada_has_this_exception_support (&exception_support_info_fallback))
11461     {
11462       data->exception_info = &exception_support_info_fallback;
11463       return;
11464     }
11465
11466   /* Sometimes, it is normal for us to not be able to find the routine
11467      we are looking for.  This happens when the program is linked with
11468      the shared version of the GNAT runtime, and the program has not been
11469      started yet.  Inform the user of these two possible causes if
11470      applicable.  */
11471
11472   if (ada_update_initial_language (language_unknown) != language_ada)
11473     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11474
11475   /* If the symbol does not exist, then check that the program is
11476      already started, to make sure that shared libraries have been
11477      loaded.  If it is not started, this may mean that the symbol is
11478      in a shared library.  */
11479
11480   if (ptid_get_pid (inferior_ptid) == 0)
11481     error (_("Unable to insert catchpoint. Try to start the program first."));
11482
11483   /* At this point, we know that we are debugging an Ada program and
11484      that the inferior has been started, but we still are not able to
11485      find the run-time symbols.  That can mean that we are in
11486      configurable run time mode, or that a-except as been optimized
11487      out by the linker...  In any case, at this point it is not worth
11488      supporting this feature.  */
11489
11490   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11491 }
11492
11493 /* True iff FRAME is very likely to be that of a function that is
11494    part of the runtime system.  This is all very heuristic, but is
11495    intended to be used as advice as to what frames are uninteresting
11496    to most users.  */
11497
11498 static int
11499 is_known_support_routine (struct frame_info *frame)
11500 {
11501   struct symtab_and_line sal;
11502   char *func_name;
11503   enum language func_lang;
11504   int i;
11505   const char *fullname;
11506
11507   /* If this code does not have any debugging information (no symtab),
11508      This cannot be any user code.  */
11509
11510   find_frame_sal (frame, &sal);
11511   if (sal.symtab == NULL)
11512     return 1;
11513
11514   /* If there is a symtab, but the associated source file cannot be
11515      located, then assume this is not user code:  Selecting a frame
11516      for which we cannot display the code would not be very helpful
11517      for the user.  This should also take care of case such as VxWorks
11518      where the kernel has some debugging info provided for a few units.  */
11519
11520   fullname = symtab_to_fullname (sal.symtab);
11521   if (access (fullname, R_OK) != 0)
11522     return 1;
11523
11524   /* Check the unit filename againt the Ada runtime file naming.
11525      We also check the name of the objfile against the name of some
11526      known system libraries that sometimes come with debugging info
11527      too.  */
11528
11529   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11530     {
11531       re_comp (known_runtime_file_name_patterns[i]);
11532       if (re_exec (lbasename (sal.symtab->filename)))
11533         return 1;
11534       if (sal.symtab->objfile != NULL
11535           && re_exec (objfile_name (sal.symtab->objfile)))
11536         return 1;
11537     }
11538
11539   /* Check whether the function is a GNAT-generated entity.  */
11540
11541   find_frame_funname (frame, &func_name, &func_lang, NULL);
11542   if (func_name == NULL)
11543     return 1;
11544
11545   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11546     {
11547       re_comp (known_auxiliary_function_name_patterns[i]);
11548       if (re_exec (func_name))
11549         {
11550           xfree (func_name);
11551           return 1;
11552         }
11553     }
11554
11555   xfree (func_name);
11556   return 0;
11557 }
11558
11559 /* Find the first frame that contains debugging information and that is not
11560    part of the Ada run-time, starting from FI and moving upward.  */
11561
11562 void
11563 ada_find_printable_frame (struct frame_info *fi)
11564 {
11565   for (; fi != NULL; fi = get_prev_frame (fi))
11566     {
11567       if (!is_known_support_routine (fi))
11568         {
11569           select_frame (fi);
11570           break;
11571         }
11572     }
11573
11574 }
11575
11576 /* Assuming that the inferior just triggered an unhandled exception
11577    catchpoint, return the address in inferior memory where the name
11578    of the exception is stored.
11579    
11580    Return zero if the address could not be computed.  */
11581
11582 static CORE_ADDR
11583 ada_unhandled_exception_name_addr (void)
11584 {
11585   return parse_and_eval_address ("e.full_name");
11586 }
11587
11588 /* Same as ada_unhandled_exception_name_addr, except that this function
11589    should be used when the inferior uses an older version of the runtime,
11590    where the exception name needs to be extracted from a specific frame
11591    several frames up in the callstack.  */
11592
11593 static CORE_ADDR
11594 ada_unhandled_exception_name_addr_from_raise (void)
11595 {
11596   int frame_level;
11597   struct frame_info *fi;
11598   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11599   struct cleanup *old_chain;
11600
11601   /* To determine the name of this exception, we need to select
11602      the frame corresponding to RAISE_SYM_NAME.  This frame is
11603      at least 3 levels up, so we simply skip the first 3 frames
11604      without checking the name of their associated function.  */
11605   fi = get_current_frame ();
11606   for (frame_level = 0; frame_level < 3; frame_level += 1)
11607     if (fi != NULL)
11608       fi = get_prev_frame (fi); 
11609
11610   old_chain = make_cleanup (null_cleanup, NULL);
11611   while (fi != NULL)
11612     {
11613       char *func_name;
11614       enum language func_lang;
11615
11616       find_frame_funname (fi, &func_name, &func_lang, NULL);
11617       if (func_name != NULL)
11618         {
11619           make_cleanup (xfree, func_name);
11620
11621           if (strcmp (func_name,
11622                       data->exception_info->catch_exception_sym) == 0)
11623             break; /* We found the frame we were looking for...  */
11624           fi = get_prev_frame (fi);
11625         }
11626     }
11627   do_cleanups (old_chain);
11628
11629   if (fi == NULL)
11630     return 0;
11631
11632   select_frame (fi);
11633   return parse_and_eval_address ("id.full_name");
11634 }
11635
11636 /* Assuming the inferior just triggered an Ada exception catchpoint
11637    (of any type), return the address in inferior memory where the name
11638    of the exception is stored, if applicable.
11639
11640    Return zero if the address could not be computed, or if not relevant.  */
11641
11642 static CORE_ADDR
11643 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11644                            struct breakpoint *b)
11645 {
11646   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11647
11648   switch (ex)
11649     {
11650       case ada_catch_exception:
11651         return (parse_and_eval_address ("e.full_name"));
11652         break;
11653
11654       case ada_catch_exception_unhandled:
11655         return data->exception_info->unhandled_exception_name_addr ();
11656         break;
11657       
11658       case ada_catch_assert:
11659         return 0;  /* Exception name is not relevant in this case.  */
11660         break;
11661
11662       default:
11663         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11664         break;
11665     }
11666
11667   return 0; /* Should never be reached.  */
11668 }
11669
11670 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11671    any error that ada_exception_name_addr_1 might cause to be thrown.
11672    When an error is intercepted, a warning with the error message is printed,
11673    and zero is returned.  */
11674
11675 static CORE_ADDR
11676 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11677                          struct breakpoint *b)
11678 {
11679   volatile struct gdb_exception e;
11680   CORE_ADDR result = 0;
11681
11682   TRY_CATCH (e, RETURN_MASK_ERROR)
11683     {
11684       result = ada_exception_name_addr_1 (ex, b);
11685     }
11686
11687   if (e.reason < 0)
11688     {
11689       warning (_("failed to get exception name: %s"), e.message);
11690       return 0;
11691     }
11692
11693   return result;
11694 }
11695
11696 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11697
11698 /* Ada catchpoints.
11699
11700    In the case of catchpoints on Ada exceptions, the catchpoint will
11701    stop the target on every exception the program throws.  When a user
11702    specifies the name of a specific exception, we translate this
11703    request into a condition expression (in text form), and then parse
11704    it into an expression stored in each of the catchpoint's locations.
11705    We then use this condition to check whether the exception that was
11706    raised is the one the user is interested in.  If not, then the
11707    target is resumed again.  We store the name of the requested
11708    exception, in order to be able to re-set the condition expression
11709    when symbols change.  */
11710
11711 /* An instance of this type is used to represent an Ada catchpoint
11712    breakpoint location.  It includes a "struct bp_location" as a kind
11713    of base class; users downcast to "struct bp_location *" when
11714    needed.  */
11715
11716 struct ada_catchpoint_location
11717 {
11718   /* The base class.  */
11719   struct bp_location base;
11720
11721   /* The condition that checks whether the exception that was raised
11722      is the specific exception the user specified on catchpoint
11723      creation.  */
11724   struct expression *excep_cond_expr;
11725 };
11726
11727 /* Implement the DTOR method in the bp_location_ops structure for all
11728    Ada exception catchpoint kinds.  */
11729
11730 static void
11731 ada_catchpoint_location_dtor (struct bp_location *bl)
11732 {
11733   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11734
11735   xfree (al->excep_cond_expr);
11736 }
11737
11738 /* The vtable to be used in Ada catchpoint locations.  */
11739
11740 static const struct bp_location_ops ada_catchpoint_location_ops =
11741 {
11742   ada_catchpoint_location_dtor
11743 };
11744
11745 /* An instance of this type is used to represent an Ada catchpoint.
11746    It includes a "struct breakpoint" as a kind of base class; users
11747    downcast to "struct breakpoint *" when needed.  */
11748
11749 struct ada_catchpoint
11750 {
11751   /* The base class.  */
11752   struct breakpoint base;
11753
11754   /* The name of the specific exception the user specified.  */
11755   char *excep_string;
11756 };
11757
11758 /* Parse the exception condition string in the context of each of the
11759    catchpoint's locations, and store them for later evaluation.  */
11760
11761 static void
11762 create_excep_cond_exprs (struct ada_catchpoint *c)
11763 {
11764   struct cleanup *old_chain;
11765   struct bp_location *bl;
11766   char *cond_string;
11767
11768   /* Nothing to do if there's no specific exception to catch.  */
11769   if (c->excep_string == NULL)
11770     return;
11771
11772   /* Same if there are no locations... */
11773   if (c->base.loc == NULL)
11774     return;
11775
11776   /* Compute the condition expression in text form, from the specific
11777      expection we want to catch.  */
11778   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11779   old_chain = make_cleanup (xfree, cond_string);
11780
11781   /* Iterate over all the catchpoint's locations, and parse an
11782      expression for each.  */
11783   for (bl = c->base.loc; bl != NULL; bl = bl->next)
11784     {
11785       struct ada_catchpoint_location *ada_loc
11786         = (struct ada_catchpoint_location *) bl;
11787       struct expression *exp = NULL;
11788
11789       if (!bl->shlib_disabled)
11790         {
11791           volatile struct gdb_exception e;
11792           const char *s;
11793
11794           s = cond_string;
11795           TRY_CATCH (e, RETURN_MASK_ERROR)
11796             {
11797               exp = parse_exp_1 (&s, bl->address,
11798                                  block_for_pc (bl->address), 0);
11799             }
11800           if (e.reason < 0)
11801             {
11802               warning (_("failed to reevaluate internal exception condition "
11803                          "for catchpoint %d: %s"),
11804                        c->base.number, e.message);
11805               /* There is a bug in GCC on sparc-solaris when building with
11806                  optimization which causes EXP to change unexpectedly
11807                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11808                  The problem should be fixed starting with GCC 4.9.
11809                  In the meantime, work around it by forcing EXP back
11810                  to NULL.  */
11811               exp = NULL;
11812             }
11813         }
11814
11815       ada_loc->excep_cond_expr = exp;
11816     }
11817
11818   do_cleanups (old_chain);
11819 }
11820
11821 /* Implement the DTOR method in the breakpoint_ops structure for all
11822    exception catchpoint kinds.  */
11823
11824 static void
11825 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11826 {
11827   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11828
11829   xfree (c->excep_string);
11830
11831   bkpt_breakpoint_ops.dtor (b);
11832 }
11833
11834 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11835    structure for all exception catchpoint kinds.  */
11836
11837 static struct bp_location *
11838 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
11839                              struct breakpoint *self)
11840 {
11841   struct ada_catchpoint_location *loc;
11842
11843   loc = XNEW (struct ada_catchpoint_location);
11844   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11845   loc->excep_cond_expr = NULL;
11846   return &loc->base;
11847 }
11848
11849 /* Implement the RE_SET method in the breakpoint_ops structure for all
11850    exception catchpoint kinds.  */
11851
11852 static void
11853 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11854 {
11855   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11856
11857   /* Call the base class's method.  This updates the catchpoint's
11858      locations.  */
11859   bkpt_breakpoint_ops.re_set (b);
11860
11861   /* Reparse the exception conditional expressions.  One for each
11862      location.  */
11863   create_excep_cond_exprs (c);
11864 }
11865
11866 /* Returns true if we should stop for this breakpoint hit.  If the
11867    user specified a specific exception, we only want to cause a stop
11868    if the program thrown that exception.  */
11869
11870 static int
11871 should_stop_exception (const struct bp_location *bl)
11872 {
11873   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11874   const struct ada_catchpoint_location *ada_loc
11875     = (const struct ada_catchpoint_location *) bl;
11876   volatile struct gdb_exception ex;
11877   int stop;
11878
11879   /* With no specific exception, should always stop.  */
11880   if (c->excep_string == NULL)
11881     return 1;
11882
11883   if (ada_loc->excep_cond_expr == NULL)
11884     {
11885       /* We will have a NULL expression if back when we were creating
11886          the expressions, this location's had failed to parse.  */
11887       return 1;
11888     }
11889
11890   stop = 1;
11891   TRY_CATCH (ex, RETURN_MASK_ALL)
11892     {
11893       struct value *mark;
11894
11895       mark = value_mark ();
11896       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11897       value_free_to_mark (mark);
11898     }
11899   if (ex.reason < 0)
11900     exception_fprintf (gdb_stderr, ex,
11901                        _("Error in testing exception condition:\n"));
11902   return stop;
11903 }
11904
11905 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
11906    for all exception catchpoint kinds.  */
11907
11908 static void
11909 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11910 {
11911   bs->stop = should_stop_exception (bs->bp_location_at);
11912 }
11913
11914 /* Implement the PRINT_IT method in the breakpoint_ops structure
11915    for all exception catchpoint kinds.  */
11916
11917 static enum print_stop_action
11918 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11919 {
11920   struct ui_out *uiout = current_uiout;
11921   struct breakpoint *b = bs->breakpoint_at;
11922
11923   annotate_catchpoint (b->number);
11924
11925   if (ui_out_is_mi_like_p (uiout))
11926     {
11927       ui_out_field_string (uiout, "reason",
11928                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11929       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11930     }
11931
11932   ui_out_text (uiout,
11933                b->disposition == disp_del ? "\nTemporary catchpoint "
11934                                           : "\nCatchpoint ");
11935   ui_out_field_int (uiout, "bkptno", b->number);
11936   ui_out_text (uiout, ", ");
11937
11938   switch (ex)
11939     {
11940       case ada_catch_exception:
11941       case ada_catch_exception_unhandled:
11942         {
11943           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11944           char exception_name[256];
11945
11946           if (addr != 0)
11947             {
11948               read_memory (addr, (gdb_byte *) exception_name,
11949                            sizeof (exception_name) - 1);
11950               exception_name [sizeof (exception_name) - 1] = '\0';
11951             }
11952           else
11953             {
11954               /* For some reason, we were unable to read the exception
11955                  name.  This could happen if the Runtime was compiled
11956                  without debugging info, for instance.  In that case,
11957                  just replace the exception name by the generic string
11958                  "exception" - it will read as "an exception" in the
11959                  notification we are about to print.  */
11960               memcpy (exception_name, "exception", sizeof ("exception"));
11961             }
11962           /* In the case of unhandled exception breakpoints, we print
11963              the exception name as "unhandled EXCEPTION_NAME", to make
11964              it clearer to the user which kind of catchpoint just got
11965              hit.  We used ui_out_text to make sure that this extra
11966              info does not pollute the exception name in the MI case.  */
11967           if (ex == ada_catch_exception_unhandled)
11968             ui_out_text (uiout, "unhandled ");
11969           ui_out_field_string (uiout, "exception-name", exception_name);
11970         }
11971         break;
11972       case ada_catch_assert:
11973         /* In this case, the name of the exception is not really
11974            important.  Just print "failed assertion" to make it clearer
11975            that his program just hit an assertion-failure catchpoint.
11976            We used ui_out_text because this info does not belong in
11977            the MI output.  */
11978         ui_out_text (uiout, "failed assertion");
11979         break;
11980     }
11981   ui_out_text (uiout, " at ");
11982   ada_find_printable_frame (get_current_frame ());
11983
11984   return PRINT_SRC_AND_LOC;
11985 }
11986
11987 /* Implement the PRINT_ONE method in the breakpoint_ops structure
11988    for all exception catchpoint kinds.  */
11989
11990 static void
11991 print_one_exception (enum ada_exception_catchpoint_kind ex,
11992                      struct breakpoint *b, struct bp_location **last_loc)
11993
11994   struct ui_out *uiout = current_uiout;
11995   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11996   struct value_print_options opts;
11997
11998   get_user_print_options (&opts);
11999   if (opts.addressprint)
12000     {
12001       annotate_field (4);
12002       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
12003     }
12004
12005   annotate_field (5);
12006   *last_loc = b->loc;
12007   switch (ex)
12008     {
12009       case ada_catch_exception:
12010         if (c->excep_string != NULL)
12011           {
12012             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12013
12014             ui_out_field_string (uiout, "what", msg);
12015             xfree (msg);
12016           }
12017         else
12018           ui_out_field_string (uiout, "what", "all Ada exceptions");
12019         
12020         break;
12021
12022       case ada_catch_exception_unhandled:
12023         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12024         break;
12025       
12026       case ada_catch_assert:
12027         ui_out_field_string (uiout, "what", "failed Ada assertions");
12028         break;
12029
12030       default:
12031         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12032         break;
12033     }
12034 }
12035
12036 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12037    for all exception catchpoint kinds.  */
12038
12039 static void
12040 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12041                          struct breakpoint *b)
12042 {
12043   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12044   struct ui_out *uiout = current_uiout;
12045
12046   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12047                                                  : _("Catchpoint "));
12048   ui_out_field_int (uiout, "bkptno", b->number);
12049   ui_out_text (uiout, ": ");
12050
12051   switch (ex)
12052     {
12053       case ada_catch_exception:
12054         if (c->excep_string != NULL)
12055           {
12056             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12057             struct cleanup *old_chain = make_cleanup (xfree, info);
12058
12059             ui_out_text (uiout, info);
12060             do_cleanups (old_chain);
12061           }
12062         else
12063           ui_out_text (uiout, _("all Ada exceptions"));
12064         break;
12065
12066       case ada_catch_exception_unhandled:
12067         ui_out_text (uiout, _("unhandled Ada exceptions"));
12068         break;
12069       
12070       case ada_catch_assert:
12071         ui_out_text (uiout, _("failed Ada assertions"));
12072         break;
12073
12074       default:
12075         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12076         break;
12077     }
12078 }
12079
12080 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12081    for all exception catchpoint kinds.  */
12082
12083 static void
12084 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12085                           struct breakpoint *b, struct ui_file *fp)
12086 {
12087   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12088
12089   switch (ex)
12090     {
12091       case ada_catch_exception:
12092         fprintf_filtered (fp, "catch exception");
12093         if (c->excep_string != NULL)
12094           fprintf_filtered (fp, " %s", c->excep_string);
12095         break;
12096
12097       case ada_catch_exception_unhandled:
12098         fprintf_filtered (fp, "catch exception unhandled");
12099         break;
12100
12101       case ada_catch_assert:
12102         fprintf_filtered (fp, "catch assert");
12103         break;
12104
12105       default:
12106         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12107     }
12108   print_recreate_thread (b, fp);
12109 }
12110
12111 /* Virtual table for "catch exception" breakpoints.  */
12112
12113 static void
12114 dtor_catch_exception (struct breakpoint *b)
12115 {
12116   dtor_exception (ada_catch_exception, b);
12117 }
12118
12119 static struct bp_location *
12120 allocate_location_catch_exception (struct breakpoint *self)
12121 {
12122   return allocate_location_exception (ada_catch_exception, self);
12123 }
12124
12125 static void
12126 re_set_catch_exception (struct breakpoint *b)
12127 {
12128   re_set_exception (ada_catch_exception, b);
12129 }
12130
12131 static void
12132 check_status_catch_exception (bpstat bs)
12133 {
12134   check_status_exception (ada_catch_exception, bs);
12135 }
12136
12137 static enum print_stop_action
12138 print_it_catch_exception (bpstat bs)
12139 {
12140   return print_it_exception (ada_catch_exception, bs);
12141 }
12142
12143 static void
12144 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12145 {
12146   print_one_exception (ada_catch_exception, b, last_loc);
12147 }
12148
12149 static void
12150 print_mention_catch_exception (struct breakpoint *b)
12151 {
12152   print_mention_exception (ada_catch_exception, b);
12153 }
12154
12155 static void
12156 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12157 {
12158   print_recreate_exception (ada_catch_exception, b, fp);
12159 }
12160
12161 static struct breakpoint_ops catch_exception_breakpoint_ops;
12162
12163 /* Virtual table for "catch exception unhandled" breakpoints.  */
12164
12165 static void
12166 dtor_catch_exception_unhandled (struct breakpoint *b)
12167 {
12168   dtor_exception (ada_catch_exception_unhandled, b);
12169 }
12170
12171 static struct bp_location *
12172 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12173 {
12174   return allocate_location_exception (ada_catch_exception_unhandled, self);
12175 }
12176
12177 static void
12178 re_set_catch_exception_unhandled (struct breakpoint *b)
12179 {
12180   re_set_exception (ada_catch_exception_unhandled, b);
12181 }
12182
12183 static void
12184 check_status_catch_exception_unhandled (bpstat bs)
12185 {
12186   check_status_exception (ada_catch_exception_unhandled, bs);
12187 }
12188
12189 static enum print_stop_action
12190 print_it_catch_exception_unhandled (bpstat bs)
12191 {
12192   return print_it_exception (ada_catch_exception_unhandled, bs);
12193 }
12194
12195 static void
12196 print_one_catch_exception_unhandled (struct breakpoint *b,
12197                                      struct bp_location **last_loc)
12198 {
12199   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12200 }
12201
12202 static void
12203 print_mention_catch_exception_unhandled (struct breakpoint *b)
12204 {
12205   print_mention_exception (ada_catch_exception_unhandled, b);
12206 }
12207
12208 static void
12209 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12210                                           struct ui_file *fp)
12211 {
12212   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12213 }
12214
12215 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12216
12217 /* Virtual table for "catch assert" breakpoints.  */
12218
12219 static void
12220 dtor_catch_assert (struct breakpoint *b)
12221 {
12222   dtor_exception (ada_catch_assert, b);
12223 }
12224
12225 static struct bp_location *
12226 allocate_location_catch_assert (struct breakpoint *self)
12227 {
12228   return allocate_location_exception (ada_catch_assert, self);
12229 }
12230
12231 static void
12232 re_set_catch_assert (struct breakpoint *b)
12233 {
12234   re_set_exception (ada_catch_assert, b);
12235 }
12236
12237 static void
12238 check_status_catch_assert (bpstat bs)
12239 {
12240   check_status_exception (ada_catch_assert, bs);
12241 }
12242
12243 static enum print_stop_action
12244 print_it_catch_assert (bpstat bs)
12245 {
12246   return print_it_exception (ada_catch_assert, bs);
12247 }
12248
12249 static void
12250 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12251 {
12252   print_one_exception (ada_catch_assert, b, last_loc);
12253 }
12254
12255 static void
12256 print_mention_catch_assert (struct breakpoint *b)
12257 {
12258   print_mention_exception (ada_catch_assert, b);
12259 }
12260
12261 static void
12262 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12263 {
12264   print_recreate_exception (ada_catch_assert, b, fp);
12265 }
12266
12267 static struct breakpoint_ops catch_assert_breakpoint_ops;
12268
12269 /* Return a newly allocated copy of the first space-separated token
12270    in ARGSP, and then adjust ARGSP to point immediately after that
12271    token.
12272
12273    Return NULL if ARGPS does not contain any more tokens.  */
12274
12275 static char *
12276 ada_get_next_arg (char **argsp)
12277 {
12278   char *args = *argsp;
12279   char *end;
12280   char *result;
12281
12282   args = skip_spaces (args);
12283   if (args[0] == '\0')
12284     return NULL; /* No more arguments.  */
12285   
12286   /* Find the end of the current argument.  */
12287
12288   end = skip_to_space (args);
12289
12290   /* Adjust ARGSP to point to the start of the next argument.  */
12291
12292   *argsp = end;
12293
12294   /* Make a copy of the current argument and return it.  */
12295
12296   result = xmalloc (end - args + 1);
12297   strncpy (result, args, end - args);
12298   result[end - args] = '\0';
12299   
12300   return result;
12301 }
12302
12303 /* Split the arguments specified in a "catch exception" command.  
12304    Set EX to the appropriate catchpoint type.
12305    Set EXCEP_STRING to the name of the specific exception if
12306    specified by the user.
12307    If a condition is found at the end of the arguments, the condition
12308    expression is stored in COND_STRING (memory must be deallocated
12309    after use).  Otherwise COND_STRING is set to NULL.  */
12310
12311 static void
12312 catch_ada_exception_command_split (char *args,
12313                                    enum ada_exception_catchpoint_kind *ex,
12314                                    char **excep_string,
12315                                    char **cond_string)
12316 {
12317   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12318   char *exception_name;
12319   char *cond = NULL;
12320
12321   exception_name = ada_get_next_arg (&args);
12322   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12323     {
12324       /* This is not an exception name; this is the start of a condition
12325          expression for a catchpoint on all exceptions.  So, "un-get"
12326          this token, and set exception_name to NULL.  */
12327       xfree (exception_name);
12328       exception_name = NULL;
12329       args -= 2;
12330     }
12331   make_cleanup (xfree, exception_name);
12332
12333   /* Check to see if we have a condition.  */
12334
12335   args = skip_spaces (args);
12336   if (strncmp (args, "if", 2) == 0
12337       && (isspace (args[2]) || args[2] == '\0'))
12338     {
12339       args += 2;
12340       args = skip_spaces (args);
12341
12342       if (args[0] == '\0')
12343         error (_("Condition missing after `if' keyword"));
12344       cond = xstrdup (args);
12345       make_cleanup (xfree, cond);
12346
12347       args += strlen (args);
12348     }
12349
12350   /* Check that we do not have any more arguments.  Anything else
12351      is unexpected.  */
12352
12353   if (args[0] != '\0')
12354     error (_("Junk at end of expression"));
12355
12356   discard_cleanups (old_chain);
12357
12358   if (exception_name == NULL)
12359     {
12360       /* Catch all exceptions.  */
12361       *ex = ada_catch_exception;
12362       *excep_string = NULL;
12363     }
12364   else if (strcmp (exception_name, "unhandled") == 0)
12365     {
12366       /* Catch unhandled exceptions.  */
12367       *ex = ada_catch_exception_unhandled;
12368       *excep_string = NULL;
12369     }
12370   else
12371     {
12372       /* Catch a specific exception.  */
12373       *ex = ada_catch_exception;
12374       *excep_string = exception_name;
12375     }
12376   *cond_string = cond;
12377 }
12378
12379 /* Return the name of the symbol on which we should break in order to
12380    implement a catchpoint of the EX kind.  */
12381
12382 static const char *
12383 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12384 {
12385   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12386
12387   gdb_assert (data->exception_info != NULL);
12388
12389   switch (ex)
12390     {
12391       case ada_catch_exception:
12392         return (data->exception_info->catch_exception_sym);
12393         break;
12394       case ada_catch_exception_unhandled:
12395         return (data->exception_info->catch_exception_unhandled_sym);
12396         break;
12397       case ada_catch_assert:
12398         return (data->exception_info->catch_assert_sym);
12399         break;
12400       default:
12401         internal_error (__FILE__, __LINE__,
12402                         _("unexpected catchpoint kind (%d)"), ex);
12403     }
12404 }
12405
12406 /* Return the breakpoint ops "virtual table" used for catchpoints
12407    of the EX kind.  */
12408
12409 static const struct breakpoint_ops *
12410 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12411 {
12412   switch (ex)
12413     {
12414       case ada_catch_exception:
12415         return (&catch_exception_breakpoint_ops);
12416         break;
12417       case ada_catch_exception_unhandled:
12418         return (&catch_exception_unhandled_breakpoint_ops);
12419         break;
12420       case ada_catch_assert:
12421         return (&catch_assert_breakpoint_ops);
12422         break;
12423       default:
12424         internal_error (__FILE__, __LINE__,
12425                         _("unexpected catchpoint kind (%d)"), ex);
12426     }
12427 }
12428
12429 /* Return the condition that will be used to match the current exception
12430    being raised with the exception that the user wants to catch.  This
12431    assumes that this condition is used when the inferior just triggered
12432    an exception catchpoint.
12433    
12434    The string returned is a newly allocated string that needs to be
12435    deallocated later.  */
12436
12437 static char *
12438 ada_exception_catchpoint_cond_string (const char *excep_string)
12439 {
12440   int i;
12441
12442   /* The standard exceptions are a special case.  They are defined in
12443      runtime units that have been compiled without debugging info; if
12444      EXCEP_STRING is the not-fully-qualified name of a standard
12445      exception (e.g. "constraint_error") then, during the evaluation
12446      of the condition expression, the symbol lookup on this name would
12447      *not* return this standard exception.  The catchpoint condition
12448      may then be set only on user-defined exceptions which have the
12449      same not-fully-qualified name (e.g. my_package.constraint_error).
12450
12451      To avoid this unexcepted behavior, these standard exceptions are
12452      systematically prefixed by "standard".  This means that "catch
12453      exception constraint_error" is rewritten into "catch exception
12454      standard.constraint_error".
12455
12456      If an exception named contraint_error is defined in another package of
12457      the inferior program, then the only way to specify this exception as a
12458      breakpoint condition is to use its fully-qualified named:
12459      e.g. my_package.constraint_error.  */
12460
12461   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12462     {
12463       if (strcmp (standard_exc [i], excep_string) == 0)
12464         {
12465           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12466                              excep_string);
12467         }
12468     }
12469   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12470 }
12471
12472 /* Return the symtab_and_line that should be used to insert an exception
12473    catchpoint of the TYPE kind.
12474
12475    EXCEP_STRING should contain the name of a specific exception that
12476    the catchpoint should catch, or NULL otherwise.
12477
12478    ADDR_STRING returns the name of the function where the real
12479    breakpoint that implements the catchpoints is set, depending on the
12480    type of catchpoint we need to create.  */
12481
12482 static struct symtab_and_line
12483 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12484                    char **addr_string, const struct breakpoint_ops **ops)
12485 {
12486   const char *sym_name;
12487   struct symbol *sym;
12488
12489   /* First, find out which exception support info to use.  */
12490   ada_exception_support_info_sniffer ();
12491
12492   /* Then lookup the function on which we will break in order to catch
12493      the Ada exceptions requested by the user.  */
12494   sym_name = ada_exception_sym_name (ex);
12495   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12496
12497   /* We can assume that SYM is not NULL at this stage.  If the symbol
12498      did not exist, ada_exception_support_info_sniffer would have
12499      raised an exception.
12500
12501      Also, ada_exception_support_info_sniffer should have already
12502      verified that SYM is a function symbol.  */
12503   gdb_assert (sym != NULL);
12504   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12505
12506   /* Set ADDR_STRING.  */
12507   *addr_string = xstrdup (sym_name);
12508
12509   /* Set OPS.  */
12510   *ops = ada_exception_breakpoint_ops (ex);
12511
12512   return find_function_start_sal (sym, 1);
12513 }
12514
12515 /* Create an Ada exception catchpoint.
12516
12517    EX_KIND is the kind of exception catchpoint to be created.
12518
12519    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12520    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12521    of the exception to which this catchpoint applies.  When not NULL,
12522    the string must be allocated on the heap, and its deallocation
12523    is no longer the responsibility of the caller.
12524
12525    COND_STRING, if not NULL, is the catchpoint condition.  This string
12526    must be allocated on the heap, and its deallocation is no longer
12527    the responsibility of the caller.
12528
12529    TEMPFLAG, if nonzero, means that the underlying breakpoint
12530    should be temporary.
12531
12532    FROM_TTY is the usual argument passed to all commands implementations.  */
12533
12534 void
12535 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12536                                  enum ada_exception_catchpoint_kind ex_kind,
12537                                  char *excep_string,
12538                                  char *cond_string,
12539                                  int tempflag,
12540                                  int disabled,
12541                                  int from_tty)
12542 {
12543   struct ada_catchpoint *c;
12544   char *addr_string = NULL;
12545   const struct breakpoint_ops *ops = NULL;
12546   struct symtab_and_line sal
12547     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12548
12549   c = XNEW (struct ada_catchpoint);
12550   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12551                                  ops, tempflag, disabled, from_tty);
12552   c->excep_string = excep_string;
12553   create_excep_cond_exprs (c);
12554   if (cond_string != NULL)
12555     set_breakpoint_condition (&c->base, cond_string, from_tty);
12556   install_breakpoint (0, &c->base, 1);
12557 }
12558
12559 /* Implement the "catch exception" command.  */
12560
12561 static void
12562 catch_ada_exception_command (char *arg, int from_tty,
12563                              struct cmd_list_element *command)
12564 {
12565   struct gdbarch *gdbarch = get_current_arch ();
12566   int tempflag;
12567   enum ada_exception_catchpoint_kind ex_kind;
12568   char *excep_string = NULL;
12569   char *cond_string = NULL;
12570
12571   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12572
12573   if (!arg)
12574     arg = "";
12575   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12576                                      &cond_string);
12577   create_ada_exception_catchpoint (gdbarch, ex_kind,
12578                                    excep_string, cond_string,
12579                                    tempflag, 1 /* enabled */,
12580                                    from_tty);
12581 }
12582
12583 /* Split the arguments specified in a "catch assert" command.
12584
12585    ARGS contains the command's arguments (or the empty string if
12586    no arguments were passed).
12587
12588    If ARGS contains a condition, set COND_STRING to that condition
12589    (the memory needs to be deallocated after use).  */
12590
12591 static void
12592 catch_ada_assert_command_split (char *args, char **cond_string)
12593 {
12594   args = skip_spaces (args);
12595
12596   /* Check whether a condition was provided.  */
12597   if (strncmp (args, "if", 2) == 0
12598       && (isspace (args[2]) || args[2] == '\0'))
12599     {
12600       args += 2;
12601       args = skip_spaces (args);
12602       if (args[0] == '\0')
12603         error (_("condition missing after `if' keyword"));
12604       *cond_string = xstrdup (args);
12605     }
12606
12607   /* Otherwise, there should be no other argument at the end of
12608      the command.  */
12609   else if (args[0] != '\0')
12610     error (_("Junk at end of arguments."));
12611 }
12612
12613 /* Implement the "catch assert" command.  */
12614
12615 static void
12616 catch_assert_command (char *arg, int from_tty,
12617                       struct cmd_list_element *command)
12618 {
12619   struct gdbarch *gdbarch = get_current_arch ();
12620   int tempflag;
12621   char *cond_string = NULL;
12622
12623   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12624
12625   if (!arg)
12626     arg = "";
12627   catch_ada_assert_command_split (arg, &cond_string);
12628   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12629                                    NULL, cond_string,
12630                                    tempflag, 1 /* enabled */,
12631                                    from_tty);
12632 }
12633
12634 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12635
12636 static int
12637 ada_is_exception_sym (struct symbol *sym)
12638 {
12639   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12640
12641   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12642           && SYMBOL_CLASS (sym) != LOC_BLOCK
12643           && SYMBOL_CLASS (sym) != LOC_CONST
12644           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12645           && type_name != NULL && strcmp (type_name, "exception") == 0);
12646 }
12647
12648 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12649    Ada exception object.  This matches all exceptions except the ones
12650    defined by the Ada language.  */
12651
12652 static int
12653 ada_is_non_standard_exception_sym (struct symbol *sym)
12654 {
12655   int i;
12656
12657   if (!ada_is_exception_sym (sym))
12658     return 0;
12659
12660   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12661     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12662       return 0;  /* A standard exception.  */
12663
12664   /* Numeric_Error is also a standard exception, so exclude it.
12665      See the STANDARD_EXC description for more details as to why
12666      this exception is not listed in that array.  */
12667   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12668     return 0;
12669
12670   return 1;
12671 }
12672
12673 /* A helper function for qsort, comparing two struct ada_exc_info
12674    objects.
12675
12676    The comparison is determined first by exception name, and then
12677    by exception address.  */
12678
12679 static int
12680 compare_ada_exception_info (const void *a, const void *b)
12681 {
12682   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12683   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12684   int result;
12685
12686   result = strcmp (exc_a->name, exc_b->name);
12687   if (result != 0)
12688     return result;
12689
12690   if (exc_a->addr < exc_b->addr)
12691     return -1;
12692   if (exc_a->addr > exc_b->addr)
12693     return 1;
12694
12695   return 0;
12696 }
12697
12698 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12699    routine, but keeping the first SKIP elements untouched.
12700
12701    All duplicates are also removed.  */
12702
12703 static void
12704 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12705                                       int skip)
12706 {
12707   struct ada_exc_info *to_sort
12708     = VEC_address (ada_exc_info, *exceptions) + skip;
12709   int to_sort_len
12710     = VEC_length (ada_exc_info, *exceptions) - skip;
12711   int i, j;
12712
12713   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12714          compare_ada_exception_info);
12715
12716   for (i = 1, j = 1; i < to_sort_len; i++)
12717     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12718       to_sort[j++] = to_sort[i];
12719   to_sort_len = j;
12720   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12721 }
12722
12723 /* A function intended as the "name_matcher" callback in the struct
12724    quick_symbol_functions' expand_symtabs_matching method.
12725
12726    SEARCH_NAME is the symbol's search name.
12727
12728    If USER_DATA is not NULL, it is a pointer to a regext_t object
12729    used to match the symbol (by natural name).  Otherwise, when USER_DATA
12730    is null, no filtering is performed, and all symbols are a positive
12731    match.  */
12732
12733 static int
12734 ada_exc_search_name_matches (const char *search_name, void *user_data)
12735 {
12736   regex_t *preg = user_data;
12737
12738   if (preg == NULL)
12739     return 1;
12740
12741   /* In Ada, the symbol "search name" is a linkage name, whereas
12742      the regular expression used to do the matching refers to
12743      the natural name.  So match against the decoded name.  */
12744   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12745 }
12746
12747 /* Add all exceptions defined by the Ada standard whose name match
12748    a regular expression.
12749
12750    If PREG is not NULL, then this regexp_t object is used to
12751    perform the symbol name matching.  Otherwise, no name-based
12752    filtering is performed.
12753
12754    EXCEPTIONS is a vector of exceptions to which matching exceptions
12755    gets pushed.  */
12756
12757 static void
12758 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12759 {
12760   int i;
12761
12762   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12763     {
12764       if (preg == NULL
12765           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12766         {
12767           struct bound_minimal_symbol msymbol
12768             = ada_lookup_simple_minsym (standard_exc[i]);
12769
12770           if (msymbol.minsym != NULL)
12771             {
12772               struct ada_exc_info info
12773                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12774
12775               VEC_safe_push (ada_exc_info, *exceptions, &info);
12776             }
12777         }
12778     }
12779 }
12780
12781 /* Add all Ada exceptions defined locally and accessible from the given
12782    FRAME.
12783
12784    If PREG is not NULL, then this regexp_t object is used to
12785    perform the symbol name matching.  Otherwise, no name-based
12786    filtering is performed.
12787
12788    EXCEPTIONS is a vector of exceptions to which matching exceptions
12789    gets pushed.  */
12790
12791 static void
12792 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12793                                VEC(ada_exc_info) **exceptions)
12794 {
12795   struct block *block = get_frame_block (frame, 0);
12796
12797   while (block != 0)
12798     {
12799       struct block_iterator iter;
12800       struct symbol *sym;
12801
12802       ALL_BLOCK_SYMBOLS (block, iter, sym)
12803         {
12804           switch (SYMBOL_CLASS (sym))
12805             {
12806             case LOC_TYPEDEF:
12807             case LOC_BLOCK:
12808             case LOC_CONST:
12809               break;
12810             default:
12811               if (ada_is_exception_sym (sym))
12812                 {
12813                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12814                                               SYMBOL_VALUE_ADDRESS (sym)};
12815
12816                   VEC_safe_push (ada_exc_info, *exceptions, &info);
12817                 }
12818             }
12819         }
12820       if (BLOCK_FUNCTION (block) != NULL)
12821         break;
12822       block = BLOCK_SUPERBLOCK (block);
12823     }
12824 }
12825
12826 /* Add all exceptions defined globally whose name name match
12827    a regular expression, excluding standard exceptions.
12828
12829    The reason we exclude standard exceptions is that they need
12830    to be handled separately: Standard exceptions are defined inside
12831    a runtime unit which is normally not compiled with debugging info,
12832    and thus usually do not show up in our symbol search.  However,
12833    if the unit was in fact built with debugging info, we need to
12834    exclude them because they would duplicate the entry we found
12835    during the special loop that specifically searches for those
12836    standard exceptions.
12837
12838    If PREG is not NULL, then this regexp_t object is used to
12839    perform the symbol name matching.  Otherwise, no name-based
12840    filtering is performed.
12841
12842    EXCEPTIONS is a vector of exceptions to which matching exceptions
12843    gets pushed.  */
12844
12845 static void
12846 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12847 {
12848   struct objfile *objfile;
12849   struct symtab *s;
12850
12851   expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12852                            VARIABLES_DOMAIN, preg);
12853
12854   ALL_PRIMARY_SYMTABS (objfile, s)
12855     {
12856       struct blockvector *bv = BLOCKVECTOR (s);
12857       int i;
12858
12859       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12860         {
12861           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12862           struct block_iterator iter;
12863           struct symbol *sym;
12864
12865           ALL_BLOCK_SYMBOLS (b, iter, sym)
12866             if (ada_is_non_standard_exception_sym (sym)
12867                 && (preg == NULL
12868                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12869                                 0, NULL, 0) == 0))
12870               {
12871                 struct ada_exc_info info
12872                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12873
12874                 VEC_safe_push (ada_exc_info, *exceptions, &info);
12875               }
12876         }
12877     }
12878 }
12879
12880 /* Implements ada_exceptions_list with the regular expression passed
12881    as a regex_t, rather than a string.
12882
12883    If not NULL, PREG is used to filter out exceptions whose names
12884    do not match.  Otherwise, all exceptions are listed.  */
12885
12886 static VEC(ada_exc_info) *
12887 ada_exceptions_list_1 (regex_t *preg)
12888 {
12889   VEC(ada_exc_info) *result = NULL;
12890   struct cleanup *old_chain
12891     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12892   int prev_len;
12893
12894   /* First, list the known standard exceptions.  These exceptions
12895      need to be handled separately, as they are usually defined in
12896      runtime units that have been compiled without debugging info.  */
12897
12898   ada_add_standard_exceptions (preg, &result);
12899
12900   /* Next, find all exceptions whose scope is local and accessible
12901      from the currently selected frame.  */
12902
12903   if (has_stack_frames ())
12904     {
12905       prev_len = VEC_length (ada_exc_info, result);
12906       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12907                                      &result);
12908       if (VEC_length (ada_exc_info, result) > prev_len)
12909         sort_remove_dups_ada_exceptions_list (&result, prev_len);
12910     }
12911
12912   /* Add all exceptions whose scope is global.  */
12913
12914   prev_len = VEC_length (ada_exc_info, result);
12915   ada_add_global_exceptions (preg, &result);
12916   if (VEC_length (ada_exc_info, result) > prev_len)
12917     sort_remove_dups_ada_exceptions_list (&result, prev_len);
12918
12919   discard_cleanups (old_chain);
12920   return result;
12921 }
12922
12923 /* Return a vector of ada_exc_info.
12924
12925    If REGEXP is NULL, all exceptions are included in the result.
12926    Otherwise, it should contain a valid regular expression,
12927    and only the exceptions whose names match that regular expression
12928    are included in the result.
12929
12930    The exceptions are sorted in the following order:
12931      - Standard exceptions (defined by the Ada language), in
12932        alphabetical order;
12933      - Exceptions only visible from the current frame, in
12934        alphabetical order;
12935      - Exceptions whose scope is global, in alphabetical order.  */
12936
12937 VEC(ada_exc_info) *
12938 ada_exceptions_list (const char *regexp)
12939 {
12940   VEC(ada_exc_info) *result = NULL;
12941   struct cleanup *old_chain = NULL;
12942   regex_t reg;
12943
12944   if (regexp != NULL)
12945     old_chain = compile_rx_or_error (&reg, regexp,
12946                                      _("invalid regular expression"));
12947
12948   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12949
12950   if (old_chain != NULL)
12951     do_cleanups (old_chain);
12952   return result;
12953 }
12954
12955 /* Implement the "info exceptions" command.  */
12956
12957 static void
12958 info_exceptions_command (char *regexp, int from_tty)
12959 {
12960   VEC(ada_exc_info) *exceptions;
12961   struct cleanup *cleanup;
12962   struct gdbarch *gdbarch = get_current_arch ();
12963   int ix;
12964   struct ada_exc_info *info;
12965
12966   exceptions = ada_exceptions_list (regexp);
12967   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12968
12969   if (regexp != NULL)
12970     printf_filtered
12971       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12972   else
12973     printf_filtered (_("All defined Ada exceptions:\n"));
12974
12975   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12976     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12977
12978   do_cleanups (cleanup);
12979 }
12980
12981                                 /* Operators */
12982 /* Information about operators given special treatment in functions
12983    below.  */
12984 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
12985
12986 #define ADA_OPERATORS \
12987     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12988     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12989     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12990     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12991     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12992     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12993     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12994     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12995     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12996     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12997     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12998     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12999     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13000     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13001     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
13002     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13003     OP_DEFN (OP_OTHERS, 1, 1, 0) \
13004     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13005     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
13006
13007 static void
13008 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13009                      int *argsp)
13010 {
13011   switch (exp->elts[pc - 1].opcode)
13012     {
13013     default:
13014       operator_length_standard (exp, pc, oplenp, argsp);
13015       break;
13016
13017 #define OP_DEFN(op, len, args, binop) \
13018     case op: *oplenp = len; *argsp = args; break;
13019       ADA_OPERATORS;
13020 #undef OP_DEFN
13021
13022     case OP_AGGREGATE:
13023       *oplenp = 3;
13024       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13025       break;
13026
13027     case OP_CHOICES:
13028       *oplenp = 3;
13029       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13030       break;
13031     }
13032 }
13033
13034 /* Implementation of the exp_descriptor method operator_check.  */
13035
13036 static int
13037 ada_operator_check (struct expression *exp, int pos,
13038                     int (*objfile_func) (struct objfile *objfile, void *data),
13039                     void *data)
13040 {
13041   const union exp_element *const elts = exp->elts;
13042   struct type *type = NULL;
13043
13044   switch (elts[pos].opcode)
13045     {
13046       case UNOP_IN_RANGE:
13047       case UNOP_QUAL:
13048         type = elts[pos + 1].type;
13049         break;
13050
13051       default:
13052         return operator_check_standard (exp, pos, objfile_func, data);
13053     }
13054
13055   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13056
13057   if (type && TYPE_OBJFILE (type)
13058       && (*objfile_func) (TYPE_OBJFILE (type), data))
13059     return 1;
13060
13061   return 0;
13062 }
13063
13064 static char *
13065 ada_op_name (enum exp_opcode opcode)
13066 {
13067   switch (opcode)
13068     {
13069     default:
13070       return op_name_standard (opcode);
13071
13072 #define OP_DEFN(op, len, args, binop) case op: return #op;
13073       ADA_OPERATORS;
13074 #undef OP_DEFN
13075
13076     case OP_AGGREGATE:
13077       return "OP_AGGREGATE";
13078     case OP_CHOICES:
13079       return "OP_CHOICES";
13080     case OP_NAME:
13081       return "OP_NAME";
13082     }
13083 }
13084
13085 /* As for operator_length, but assumes PC is pointing at the first
13086    element of the operator, and gives meaningful results only for the 
13087    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13088
13089 static void
13090 ada_forward_operator_length (struct expression *exp, int pc,
13091                              int *oplenp, int *argsp)
13092 {
13093   switch (exp->elts[pc].opcode)
13094     {
13095     default:
13096       *oplenp = *argsp = 0;
13097       break;
13098
13099 #define OP_DEFN(op, len, args, binop) \
13100     case op: *oplenp = len; *argsp = args; break;
13101       ADA_OPERATORS;
13102 #undef OP_DEFN
13103
13104     case OP_AGGREGATE:
13105       *oplenp = 3;
13106       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13107       break;
13108
13109     case OP_CHOICES:
13110       *oplenp = 3;
13111       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13112       break;
13113
13114     case OP_STRING:
13115     case OP_NAME:
13116       {
13117         int len = longest_to_int (exp->elts[pc + 1].longconst);
13118
13119         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13120         *argsp = 0;
13121         break;
13122       }
13123     }
13124 }
13125
13126 static int
13127 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13128 {
13129   enum exp_opcode op = exp->elts[elt].opcode;
13130   int oplen, nargs;
13131   int pc = elt;
13132   int i;
13133
13134   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13135
13136   switch (op)
13137     {
13138       /* Ada attributes ('Foo).  */
13139     case OP_ATR_FIRST:
13140     case OP_ATR_LAST:
13141     case OP_ATR_LENGTH:
13142     case OP_ATR_IMAGE:
13143     case OP_ATR_MAX:
13144     case OP_ATR_MIN:
13145     case OP_ATR_MODULUS:
13146     case OP_ATR_POS:
13147     case OP_ATR_SIZE:
13148     case OP_ATR_TAG:
13149     case OP_ATR_VAL:
13150       break;
13151
13152     case UNOP_IN_RANGE:
13153     case UNOP_QUAL:
13154       /* XXX: gdb_sprint_host_address, type_sprint */
13155       fprintf_filtered (stream, _("Type @"));
13156       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13157       fprintf_filtered (stream, " (");
13158       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13159       fprintf_filtered (stream, ")");
13160       break;
13161     case BINOP_IN_BOUNDS:
13162       fprintf_filtered (stream, " (%d)",
13163                         longest_to_int (exp->elts[pc + 2].longconst));
13164       break;
13165     case TERNOP_IN_RANGE:
13166       break;
13167
13168     case OP_AGGREGATE:
13169     case OP_OTHERS:
13170     case OP_DISCRETE_RANGE:
13171     case OP_POSITIONAL:
13172     case OP_CHOICES:
13173       break;
13174
13175     case OP_NAME:
13176     case OP_STRING:
13177       {
13178         char *name = &exp->elts[elt + 2].string;
13179         int len = longest_to_int (exp->elts[elt + 1].longconst);
13180
13181         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13182         break;
13183       }
13184
13185     default:
13186       return dump_subexp_body_standard (exp, stream, elt);
13187     }
13188
13189   elt += oplen;
13190   for (i = 0; i < nargs; i += 1)
13191     elt = dump_subexp (exp, stream, elt);
13192
13193   return elt;
13194 }
13195
13196 /* The Ada extension of print_subexp (q.v.).  */
13197
13198 static void
13199 ada_print_subexp (struct expression *exp, int *pos,
13200                   struct ui_file *stream, enum precedence prec)
13201 {
13202   int oplen, nargs, i;
13203   int pc = *pos;
13204   enum exp_opcode op = exp->elts[pc].opcode;
13205
13206   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13207
13208   *pos += oplen;
13209   switch (op)
13210     {
13211     default:
13212       *pos -= oplen;
13213       print_subexp_standard (exp, pos, stream, prec);
13214       return;
13215
13216     case OP_VAR_VALUE:
13217       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13218       return;
13219
13220     case BINOP_IN_BOUNDS:
13221       /* XXX: sprint_subexp */
13222       print_subexp (exp, pos, stream, PREC_SUFFIX);
13223       fputs_filtered (" in ", stream);
13224       print_subexp (exp, pos, stream, PREC_SUFFIX);
13225       fputs_filtered ("'range", stream);
13226       if (exp->elts[pc + 1].longconst > 1)
13227         fprintf_filtered (stream, "(%ld)",
13228                           (long) exp->elts[pc + 1].longconst);
13229       return;
13230
13231     case TERNOP_IN_RANGE:
13232       if (prec >= PREC_EQUAL)
13233         fputs_filtered ("(", stream);
13234       /* XXX: sprint_subexp */
13235       print_subexp (exp, pos, stream, PREC_SUFFIX);
13236       fputs_filtered (" in ", stream);
13237       print_subexp (exp, pos, stream, PREC_EQUAL);
13238       fputs_filtered (" .. ", stream);
13239       print_subexp (exp, pos, stream, PREC_EQUAL);
13240       if (prec >= PREC_EQUAL)
13241         fputs_filtered (")", stream);
13242       return;
13243
13244     case OP_ATR_FIRST:
13245     case OP_ATR_LAST:
13246     case OP_ATR_LENGTH:
13247     case OP_ATR_IMAGE:
13248     case OP_ATR_MAX:
13249     case OP_ATR_MIN:
13250     case OP_ATR_MODULUS:
13251     case OP_ATR_POS:
13252     case OP_ATR_SIZE:
13253     case OP_ATR_TAG:
13254     case OP_ATR_VAL:
13255       if (exp->elts[*pos].opcode == OP_TYPE)
13256         {
13257           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13258             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13259                            &type_print_raw_options);
13260           *pos += 3;
13261         }
13262       else
13263         print_subexp (exp, pos, stream, PREC_SUFFIX);
13264       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13265       if (nargs > 1)
13266         {
13267           int tem;
13268
13269           for (tem = 1; tem < nargs; tem += 1)
13270             {
13271               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13272               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13273             }
13274           fputs_filtered (")", stream);
13275         }
13276       return;
13277
13278     case UNOP_QUAL:
13279       type_print (exp->elts[pc + 1].type, "", stream, 0);
13280       fputs_filtered ("'(", stream);
13281       print_subexp (exp, pos, stream, PREC_PREFIX);
13282       fputs_filtered (")", stream);
13283       return;
13284
13285     case UNOP_IN_RANGE:
13286       /* XXX: sprint_subexp */
13287       print_subexp (exp, pos, stream, PREC_SUFFIX);
13288       fputs_filtered (" in ", stream);
13289       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13290                      &type_print_raw_options);
13291       return;
13292
13293     case OP_DISCRETE_RANGE:
13294       print_subexp (exp, pos, stream, PREC_SUFFIX);
13295       fputs_filtered ("..", stream);
13296       print_subexp (exp, pos, stream, PREC_SUFFIX);
13297       return;
13298
13299     case OP_OTHERS:
13300       fputs_filtered ("others => ", stream);
13301       print_subexp (exp, pos, stream, PREC_SUFFIX);
13302       return;
13303
13304     case OP_CHOICES:
13305       for (i = 0; i < nargs-1; i += 1)
13306         {
13307           if (i > 0)
13308             fputs_filtered ("|", stream);
13309           print_subexp (exp, pos, stream, PREC_SUFFIX);
13310         }
13311       fputs_filtered (" => ", stream);
13312       print_subexp (exp, pos, stream, PREC_SUFFIX);
13313       return;
13314       
13315     case OP_POSITIONAL:
13316       print_subexp (exp, pos, stream, PREC_SUFFIX);
13317       return;
13318
13319     case OP_AGGREGATE:
13320       fputs_filtered ("(", stream);
13321       for (i = 0; i < nargs; i += 1)
13322         {
13323           if (i > 0)
13324             fputs_filtered (", ", stream);
13325           print_subexp (exp, pos, stream, PREC_SUFFIX);
13326         }
13327       fputs_filtered (")", stream);
13328       return;
13329     }
13330 }
13331
13332 /* Table mapping opcodes into strings for printing operators
13333    and precedences of the operators.  */
13334
13335 static const struct op_print ada_op_print_tab[] = {
13336   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13337   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13338   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13339   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13340   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13341   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13342   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13343   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13344   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13345   {">=", BINOP_GEQ, PREC_ORDER, 0},
13346   {">", BINOP_GTR, PREC_ORDER, 0},
13347   {"<", BINOP_LESS, PREC_ORDER, 0},
13348   {">>", BINOP_RSH, PREC_SHIFT, 0},
13349   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13350   {"+", BINOP_ADD, PREC_ADD, 0},
13351   {"-", BINOP_SUB, PREC_ADD, 0},
13352   {"&", BINOP_CONCAT, PREC_ADD, 0},
13353   {"*", BINOP_MUL, PREC_MUL, 0},
13354   {"/", BINOP_DIV, PREC_MUL, 0},
13355   {"rem", BINOP_REM, PREC_MUL, 0},
13356   {"mod", BINOP_MOD, PREC_MUL, 0},
13357   {"**", BINOP_EXP, PREC_REPEAT, 0},
13358   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13359   {"-", UNOP_NEG, PREC_PREFIX, 0},
13360   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13361   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13362   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13363   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13364   {".all", UNOP_IND, PREC_SUFFIX, 1},
13365   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13366   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13367   {NULL, 0, 0, 0}
13368 };
13369 \f
13370 enum ada_primitive_types {
13371   ada_primitive_type_int,
13372   ada_primitive_type_long,
13373   ada_primitive_type_short,
13374   ada_primitive_type_char,
13375   ada_primitive_type_float,
13376   ada_primitive_type_double,
13377   ada_primitive_type_void,
13378   ada_primitive_type_long_long,
13379   ada_primitive_type_long_double,
13380   ada_primitive_type_natural,
13381   ada_primitive_type_positive,
13382   ada_primitive_type_system_address,
13383   nr_ada_primitive_types
13384 };
13385
13386 static void
13387 ada_language_arch_info (struct gdbarch *gdbarch,
13388                         struct language_arch_info *lai)
13389 {
13390   const struct builtin_type *builtin = builtin_type (gdbarch);
13391
13392   lai->primitive_type_vector
13393     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13394                               struct type *);
13395
13396   lai->primitive_type_vector [ada_primitive_type_int]
13397     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13398                          0, "integer");
13399   lai->primitive_type_vector [ada_primitive_type_long]
13400     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13401                          0, "long_integer");
13402   lai->primitive_type_vector [ada_primitive_type_short]
13403     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13404                          0, "short_integer");
13405   lai->string_char_type
13406     = lai->primitive_type_vector [ada_primitive_type_char]
13407     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13408   lai->primitive_type_vector [ada_primitive_type_float]
13409     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13410                        "float", NULL);
13411   lai->primitive_type_vector [ada_primitive_type_double]
13412     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13413                        "long_float", NULL);
13414   lai->primitive_type_vector [ada_primitive_type_long_long]
13415     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13416                          0, "long_long_integer");
13417   lai->primitive_type_vector [ada_primitive_type_long_double]
13418     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13419                        "long_long_float", NULL);
13420   lai->primitive_type_vector [ada_primitive_type_natural]
13421     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13422                          0, "natural");
13423   lai->primitive_type_vector [ada_primitive_type_positive]
13424     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13425                          0, "positive");
13426   lai->primitive_type_vector [ada_primitive_type_void]
13427     = builtin->builtin_void;
13428
13429   lai->primitive_type_vector [ada_primitive_type_system_address]
13430     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13431   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13432     = "system__address";
13433
13434   lai->bool_type_symbol = NULL;
13435   lai->bool_type_default = builtin->builtin_bool;
13436 }
13437 \f
13438                                 /* Language vector */
13439
13440 /* Not really used, but needed in the ada_language_defn.  */
13441
13442 static void
13443 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13444 {
13445   ada_emit_char (c, type, stream, quoter, 1);
13446 }
13447
13448 static int
13449 parse (struct parser_state *ps)
13450 {
13451   warnings_issued = 0;
13452   return ada_parse (ps);
13453 }
13454
13455 static const struct exp_descriptor ada_exp_descriptor = {
13456   ada_print_subexp,
13457   ada_operator_length,
13458   ada_operator_check,
13459   ada_op_name,
13460   ada_dump_subexp_body,
13461   ada_evaluate_subexp
13462 };
13463
13464 /* Implement the "la_get_symbol_name_cmp" language_defn method
13465    for Ada.  */
13466
13467 static symbol_name_cmp_ftype
13468 ada_get_symbol_name_cmp (const char *lookup_name)
13469 {
13470   if (should_use_wild_match (lookup_name))
13471     return wild_match;
13472   else
13473     return compare_names;
13474 }
13475
13476 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13477
13478 static struct value *
13479 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13480 {
13481   struct block *frame_block = NULL;
13482   struct symbol *renaming_sym = NULL;
13483
13484   /* The only case where default_read_var_value is not sufficient
13485      is when VAR is a renaming...  */
13486   if (frame)
13487     frame_block = get_frame_block (frame, NULL);
13488   if (frame_block)
13489     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13490   if (renaming_sym != NULL)
13491     return ada_read_renaming_var_value (renaming_sym, frame_block);
13492
13493   /* This is a typical case where we expect the default_read_var_value
13494      function to work.  */
13495   return default_read_var_value (var, frame);
13496 }
13497
13498 const struct language_defn ada_language_defn = {
13499   "ada",                        /* Language name */
13500   "Ada",
13501   language_ada,
13502   range_check_off,
13503   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13504                                    that's not quite what this means.  */
13505   array_row_major,
13506   macro_expansion_no,
13507   &ada_exp_descriptor,
13508   parse,
13509   ada_error,
13510   resolve,
13511   ada_printchar,                /* Print a character constant */
13512   ada_printstr,                 /* Function to print string constant */
13513   emit_char,                    /* Function to print single char (not used) */
13514   ada_print_type,               /* Print a type using appropriate syntax */
13515   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13516   ada_val_print,                /* Print a value using appropriate syntax */
13517   ada_value_print,              /* Print a top-level value */
13518   ada_read_var_value,           /* la_read_var_value */
13519   NULL,                         /* Language specific skip_trampoline */
13520   NULL,                         /* name_of_this */
13521   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13522   basic_lookup_transparent_type,        /* lookup_transparent_type */
13523   ada_la_decode,                /* Language specific symbol demangler */
13524   NULL,                         /* Language specific
13525                                    class_name_from_physname */
13526   ada_op_print_tab,             /* expression operators for printing */
13527   0,                            /* c-style arrays */
13528   1,                            /* String lower bound */
13529   ada_get_gdb_completer_word_break_characters,
13530   ada_make_symbol_completion_list,
13531   ada_language_arch_info,
13532   ada_print_array_index,
13533   default_pass_by_reference,
13534   c_get_string,
13535   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
13536   ada_iterate_over_symbols,
13537   &ada_varobj_ops,
13538   LANG_MAGIC
13539 };
13540
13541 /* Provide a prototype to silence -Wmissing-prototypes.  */
13542 extern initialize_file_ftype _initialize_ada_language;
13543
13544 /* Command-list for the "set/show ada" prefix command.  */
13545 static struct cmd_list_element *set_ada_list;
13546 static struct cmd_list_element *show_ada_list;
13547
13548 /* Implement the "set ada" prefix command.  */
13549
13550 static void
13551 set_ada_command (char *arg, int from_tty)
13552 {
13553   printf_unfiltered (_(\
13554 "\"set ada\" must be followed by the name of a setting.\n"));
13555   help_list (set_ada_list, "set ada ", -1, gdb_stdout);
13556 }
13557
13558 /* Implement the "show ada" prefix command.  */
13559
13560 static void
13561 show_ada_command (char *args, int from_tty)
13562 {
13563   cmd_show_list (show_ada_list, from_tty, "");
13564 }
13565
13566 static void
13567 initialize_ada_catchpoint_ops (void)
13568 {
13569   struct breakpoint_ops *ops;
13570
13571   initialize_breakpoint_ops ();
13572
13573   ops = &catch_exception_breakpoint_ops;
13574   *ops = bkpt_breakpoint_ops;
13575   ops->dtor = dtor_catch_exception;
13576   ops->allocate_location = allocate_location_catch_exception;
13577   ops->re_set = re_set_catch_exception;
13578   ops->check_status = check_status_catch_exception;
13579   ops->print_it = print_it_catch_exception;
13580   ops->print_one = print_one_catch_exception;
13581   ops->print_mention = print_mention_catch_exception;
13582   ops->print_recreate = print_recreate_catch_exception;
13583
13584   ops = &catch_exception_unhandled_breakpoint_ops;
13585   *ops = bkpt_breakpoint_ops;
13586   ops->dtor = dtor_catch_exception_unhandled;
13587   ops->allocate_location = allocate_location_catch_exception_unhandled;
13588   ops->re_set = re_set_catch_exception_unhandled;
13589   ops->check_status = check_status_catch_exception_unhandled;
13590   ops->print_it = print_it_catch_exception_unhandled;
13591   ops->print_one = print_one_catch_exception_unhandled;
13592   ops->print_mention = print_mention_catch_exception_unhandled;
13593   ops->print_recreate = print_recreate_catch_exception_unhandled;
13594
13595   ops = &catch_assert_breakpoint_ops;
13596   *ops = bkpt_breakpoint_ops;
13597   ops->dtor = dtor_catch_assert;
13598   ops->allocate_location = allocate_location_catch_assert;
13599   ops->re_set = re_set_catch_assert;
13600   ops->check_status = check_status_catch_assert;
13601   ops->print_it = print_it_catch_assert;
13602   ops->print_one = print_one_catch_assert;
13603   ops->print_mention = print_mention_catch_assert;
13604   ops->print_recreate = print_recreate_catch_assert;
13605 }
13606
13607 /* This module's 'new_objfile' observer.  */
13608
13609 static void
13610 ada_new_objfile_observer (struct objfile *objfile)
13611 {
13612   ada_clear_symbol_cache ();
13613 }
13614
13615 /* This module's 'free_objfile' observer.  */
13616
13617 static void
13618 ada_free_objfile_observer (struct objfile *objfile)
13619 {
13620   ada_clear_symbol_cache ();
13621 }
13622
13623 void
13624 _initialize_ada_language (void)
13625 {
13626   add_language (&ada_language_defn);
13627
13628   initialize_ada_catchpoint_ops ();
13629
13630   add_prefix_cmd ("ada", no_class, set_ada_command,
13631                   _("Prefix command for changing Ada-specfic settings"),
13632                   &set_ada_list, "set ada ", 0, &setlist);
13633
13634   add_prefix_cmd ("ada", no_class, show_ada_command,
13635                   _("Generic command for showing Ada-specific settings."),
13636                   &show_ada_list, "show ada ", 0, &showlist);
13637
13638   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13639                            &trust_pad_over_xvs, _("\
13640 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13641 Show whether an optimization trusting PAD types over XVS types is activated"),
13642                            _("\
13643 This is related to the encoding used by the GNAT compiler.  The debugger\n\
13644 should normally trust the contents of PAD types, but certain older versions\n\
13645 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13646 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
13647 work around this bug.  It is always safe to turn this option \"off\", but\n\
13648 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13649 this option to \"off\" unless necessary."),
13650                             NULL, NULL, &set_ada_list, &show_ada_list);
13651
13652   add_catch_command ("exception", _("\
13653 Catch Ada exceptions, when raised.\n\
13654 With an argument, catch only exceptions with the given name."),
13655                      catch_ada_exception_command,
13656                      NULL,
13657                      CATCH_PERMANENT,
13658                      CATCH_TEMPORARY);
13659   add_catch_command ("assert", _("\
13660 Catch failed Ada assertions, when raised.\n\
13661 With an argument, catch only exceptions with the given name."),
13662                      catch_assert_command,
13663                      NULL,
13664                      CATCH_PERMANENT,
13665                      CATCH_TEMPORARY);
13666
13667   varsize_limit = 65536;
13668
13669   add_info ("exceptions", info_exceptions_command,
13670             _("\
13671 List all Ada exception names.\n\
13672 If a regular expression is passed as an argument, only those matching\n\
13673 the regular expression are listed."));
13674
13675   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13676                   _("Set Ada maintenance-related variables."),
13677                   &maint_set_ada_cmdlist, "maintenance set ada ",
13678                   0/*allow-unknown*/, &maintenance_set_cmdlist);
13679
13680   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13681                   _("Show Ada maintenance-related variables"),
13682                   &maint_show_ada_cmdlist, "maintenance show ada ",
13683                   0/*allow-unknown*/, &maintenance_show_cmdlist);
13684
13685   add_setshow_boolean_cmd
13686     ("ignore-descriptive-types", class_maintenance,
13687      &ada_ignore_descriptive_types_p,
13688      _("Set whether descriptive types generated by GNAT should be ignored."),
13689      _("Show whether descriptive types generated by GNAT should be ignored."),
13690      _("\
13691 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13692 DWARF attribute."),
13693      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13694
13695   obstack_init (&symbol_list_obstack);
13696
13697   decoded_names_store = htab_create_alloc
13698     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13699      NULL, xcalloc, xfree);
13700
13701   /* The ada-lang observers.  */
13702   observer_attach_new_objfile (ada_new_objfile_observer);
13703   observer_attach_free_objfile (ada_free_objfile_observer);
13704   observer_attach_inferior_exit (ada_inferior_exit);
13705
13706   /* Setup various context-specific data.  */
13707   ada_inferior_data
13708     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13709   ada_pspace_data_handle
13710     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
13711 }