varsize-limit error printing element of packed array...
[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 <ctype.h>
23 #include "demangle.h"
24 #include "gdb_regex.h"
25 #include "frame.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "gdbcmd.h"
29 #include "expression.h"
30 #include "parser-defs.h"
31 #include "language.h"
32 #include "varobj.h"
33 #include "c-lang.h"
34 #include "inferior.h"
35 #include "symfile.h"
36 #include "objfiles.h"
37 #include "breakpoint.h"
38 #include "gdbcore.h"
39 #include "hashtab.h"
40 #include "gdb_obstack.h"
41 #include "ada-lang.h"
42 #include "completer.h"
43 #include <sys/stat.h>
44 #include "ui-out.h"
45 #include "block.h"
46 #include "infcall.h"
47 #include "dictionary.h"
48 #include "annotate.h"
49 #include "valprint.h"
50 #include "source.h"
51 #include "observer.h"
52 #include "vec.h"
53 #include "stack.h"
54 #include "gdb_vecs.h"
55 #include "typeprint.h"
56
57 #include "psymtab.h"
58 #include "value.h"
59 #include "mi/mi-common.h"
60 #include "arch-utils.h"
61 #include "cli/cli-utils.h"
62
63 /* Define whether or not the C operator '/' truncates towards zero for
64    differently signed operands (truncation direction is undefined in C).
65    Copied from valarith.c.  */
66
67 #ifndef TRUNCATION_TOWARDS_ZERO
68 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
69 #endif
70
71 static struct type *desc_base_type (struct type *);
72
73 static struct type *desc_bounds_type (struct type *);
74
75 static struct value *desc_bounds (struct value *);
76
77 static int fat_pntr_bounds_bitpos (struct type *);
78
79 static int fat_pntr_bounds_bitsize (struct type *);
80
81 static struct type *desc_data_target_type (struct type *);
82
83 static struct value *desc_data (struct value *);
84
85 static int fat_pntr_data_bitpos (struct type *);
86
87 static int fat_pntr_data_bitsize (struct type *);
88
89 static struct value *desc_one_bound (struct value *, int, int);
90
91 static int desc_bound_bitpos (struct type *, int, int);
92
93 static int desc_bound_bitsize (struct type *, int, int);
94
95 static struct type *desc_index_type (struct type *, int);
96
97 static int desc_arity (struct type *);
98
99 static int ada_type_match (struct type *, struct type *, int);
100
101 static int ada_args_match (struct symbol *, struct value **, int);
102
103 static int full_match (const char *, const char *);
104
105 static struct value *make_array_descriptor (struct type *, struct value *);
106
107 static void ada_add_block_symbols (struct obstack *,
108                                    const struct block *, const char *,
109                                    domain_enum, struct objfile *, int);
110
111 static int is_nonfunction (struct ada_symbol_info *, int);
112
113 static void add_defn_to_vec (struct obstack *, struct symbol *,
114                              const struct block *);
115
116 static int num_defns_collected (struct obstack *);
117
118 static struct ada_symbol_info *defns_collected (struct obstack *, int);
119
120 static struct value *resolve_subexp (struct expression **, int *, int,
121                                      struct type *);
122
123 static void replace_operator_with_call (struct expression **, int, int, int,
124                                         struct symbol *, const struct block *);
125
126 static int possible_user_operator_p (enum exp_opcode, struct value **);
127
128 static char *ada_op_name (enum exp_opcode);
129
130 static const char *ada_decoded_op_name (enum exp_opcode);
131
132 static int numeric_type_p (struct type *);
133
134 static int integer_type_p (struct type *);
135
136 static int scalar_type_p (struct type *);
137
138 static int discrete_type_p (struct type *);
139
140 static enum ada_renaming_category parse_old_style_renaming (struct type *,
141                                                             const char **,
142                                                             int *,
143                                                             const char **);
144
145 static struct symbol *find_old_style_renaming_symbol (const char *,
146                                                       const struct block *);
147
148 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
149                                                 int, int, int *);
150
151 static struct value *evaluate_subexp_type (struct expression *, int *);
152
153 static struct type *ada_find_parallel_type_with_name (struct type *,
154                                                       const char *);
155
156 static int is_dynamic_field (struct type *, int);
157
158 static struct type *to_fixed_variant_branch_type (struct type *,
159                                                   const gdb_byte *,
160                                                   CORE_ADDR, struct value *);
161
162 static struct type *to_fixed_array_type (struct type *, struct value *, int);
163
164 static struct type *to_fixed_range_type (struct type *, struct value *);
165
166 static struct type *to_static_fixed_type (struct type *);
167 static struct type *static_unwrap_type (struct type *type);
168
169 static struct value *unwrap_value (struct value *);
170
171 static struct type *constrained_packed_array_type (struct type *, long *);
172
173 static struct type *decode_constrained_packed_array_type (struct type *);
174
175 static long decode_packed_array_bitsize (struct type *);
176
177 static struct value *decode_constrained_packed_array (struct value *);
178
179 static int ada_is_packed_array_type  (struct type *);
180
181 static int ada_is_unconstrained_packed_array_type (struct type *);
182
183 static struct value *value_subscript_packed (struct value *, int,
184                                              struct value **);
185
186 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
187
188 static struct value *coerce_unspec_val_to_type (struct value *,
189                                                 struct type *);
190
191 static struct value *get_var_value (char *, char *);
192
193 static int lesseq_defined_than (struct symbol *, struct symbol *);
194
195 static int equiv_types (struct type *, struct type *);
196
197 static int is_name_suffix (const char *);
198
199 static int advance_wild_match (const char **, const char *, int);
200
201 static int wild_match (const char *, const char *);
202
203 static struct value *ada_coerce_ref (struct value *);
204
205 static LONGEST pos_atr (struct value *);
206
207 static struct value *value_pos_atr (struct type *, struct value *);
208
209 static struct value *value_val_atr (struct type *, struct value *);
210
211 static struct symbol *standard_lookup (const char *, const struct block *,
212                                        domain_enum);
213
214 static struct value *ada_search_struct_field (char *, struct value *, int,
215                                               struct type *);
216
217 static struct value *ada_value_primitive_field (struct value *, int, int,
218                                                 struct type *);
219
220 static int find_struct_field (const char *, struct type *, int,
221                               struct type **, int *, int *, int *, int *);
222
223 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
224                                                 struct value *);
225
226 static int ada_resolve_function (struct ada_symbol_info *, int,
227                                  struct value **, int, const char *,
228                                  struct type *);
229
230 static int ada_is_direct_array_type (struct type *);
231
232 static void ada_language_arch_info (struct gdbarch *,
233                                     struct language_arch_info *);
234
235 static void check_size (const struct type *);
236
237 static struct value *ada_index_struct_field (int, struct value *, int,
238                                              struct type *);
239
240 static struct value *assign_aggregate (struct value *, struct value *, 
241                                        struct expression *,
242                                        int *, enum noside);
243
244 static void aggregate_assign_from_choices (struct value *, struct value *, 
245                                            struct expression *,
246                                            int *, LONGEST *, int *,
247                                            int, LONGEST, LONGEST);
248
249 static void aggregate_assign_positional (struct value *, struct value *,
250                                          struct expression *,
251                                          int *, LONGEST *, int *, int,
252                                          LONGEST, LONGEST);
253
254
255 static void aggregate_assign_others (struct value *, struct value *,
256                                      struct expression *,
257                                      int *, LONGEST *, int, LONGEST, LONGEST);
258
259
260 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
261
262
263 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
264                                           int *, enum noside);
265
266 static void ada_forward_operator_length (struct expression *, int, int *,
267                                          int *);
268
269 static struct type *ada_find_any_type (const char *name);
270 \f
271
272 /* The result of a symbol lookup to be stored in our symbol cache.  */
273
274 struct cache_entry
275 {
276   /* The name used to perform the lookup.  */
277   const char *name;
278   /* The namespace used during the lookup.  */
279   domain_enum namespace;
280   /* The symbol returned by the lookup, or NULL if no matching symbol
281      was found.  */
282   struct symbol *sym;
283   /* The block where the symbol was found, or NULL if no matching
284      symbol was found.  */
285   const struct block *block;
286   /* A pointer to the next entry with the same hash.  */
287   struct cache_entry *next;
288 };
289
290 /* The Ada symbol cache, used to store the result of Ada-mode symbol
291    lookups in the course of executing the user's commands.
292
293    The cache is implemented using a simple, fixed-sized hash.
294    The size is fixed on the grounds that there are not likely to be
295    all that many symbols looked up during any given session, regardless
296    of the size of the symbol table.  If we decide to go to a resizable
297    table, let's just use the stuff from libiberty instead.  */
298
299 #define HASH_SIZE 1009
300
301 struct ada_symbol_cache
302 {
303   /* An obstack used to store the entries in our cache.  */
304   struct obstack cache_space;
305
306   /* The root of the hash table used to implement our symbol cache.  */
307   struct cache_entry *root[HASH_SIZE];
308 };
309
310 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
311
312 /* Maximum-sized dynamic type.  */
313 static unsigned int varsize_limit;
314
315 /* FIXME: brobecker/2003-09-17: No longer a const because it is
316    returned by a function that does not return a const char *.  */
317 static char *ada_completer_word_break_characters =
318 #ifdef VMS
319   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
320 #else
321   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
322 #endif
323
324 /* The name of the symbol to use to get the name of the main subprogram.  */
325 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
326   = "__gnat_ada_main_program_name";
327
328 /* Limit on the number of warnings to raise per expression evaluation.  */
329 static int warning_limit = 2;
330
331 /* Number of warning messages issued; reset to 0 by cleanups after
332    expression evaluation.  */
333 static int warnings_issued = 0;
334
335 static const char *known_runtime_file_name_patterns[] = {
336   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
337 };
338
339 static const char *known_auxiliary_function_name_patterns[] = {
340   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
341 };
342
343 /* Space for allocating results of ada_lookup_symbol_list.  */
344 static struct obstack symbol_list_obstack;
345
346 /* Maintenance-related settings for this module.  */
347
348 static struct cmd_list_element *maint_set_ada_cmdlist;
349 static struct cmd_list_element *maint_show_ada_cmdlist;
350
351 /* Implement the "maintenance set ada" (prefix) command.  */
352
353 static void
354 maint_set_ada_cmd (char *args, int from_tty)
355 {
356   help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
357              gdb_stdout);
358 }
359
360 /* Implement the "maintenance show ada" (prefix) command.  */
361
362 static void
363 maint_show_ada_cmd (char *args, int from_tty)
364 {
365   cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
366 }
367
368 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
369
370 static int ada_ignore_descriptive_types_p = 0;
371
372                         /* Inferior-specific data.  */
373
374 /* Per-inferior data for this module.  */
375
376 struct ada_inferior_data
377 {
378   /* The ada__tags__type_specific_data type, which is used when decoding
379      tagged types.  With older versions of GNAT, this type was directly
380      accessible through a component ("tsd") in the object tag.  But this
381      is no longer the case, so we cache it for each inferior.  */
382   struct type *tsd_type;
383
384   /* The exception_support_info data.  This data is used to determine
385      how to implement support for Ada exception catchpoints in a given
386      inferior.  */
387   const struct exception_support_info *exception_info;
388 };
389
390 /* Our key to this module's inferior data.  */
391 static const struct inferior_data *ada_inferior_data;
392
393 /* A cleanup routine for our inferior data.  */
394 static void
395 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
396 {
397   struct ada_inferior_data *data;
398
399   data = inferior_data (inf, ada_inferior_data);
400   if (data != NULL)
401     xfree (data);
402 }
403
404 /* Return our inferior data for the given inferior (INF).
405
406    This function always returns a valid pointer to an allocated
407    ada_inferior_data structure.  If INF's inferior data has not
408    been previously set, this functions creates a new one with all
409    fields set to zero, sets INF's inferior to it, and then returns
410    a pointer to that newly allocated ada_inferior_data.  */
411
412 static struct ada_inferior_data *
413 get_ada_inferior_data (struct inferior *inf)
414 {
415   struct ada_inferior_data *data;
416
417   data = inferior_data (inf, ada_inferior_data);
418   if (data == NULL)
419     {
420       data = XCNEW (struct ada_inferior_data);
421       set_inferior_data (inf, ada_inferior_data, data);
422     }
423
424   return data;
425 }
426
427 /* Perform all necessary cleanups regarding our module's inferior data
428    that is required after the inferior INF just exited.  */
429
430 static void
431 ada_inferior_exit (struct inferior *inf)
432 {
433   ada_inferior_data_cleanup (inf, NULL);
434   set_inferior_data (inf, ada_inferior_data, NULL);
435 }
436
437
438                         /* program-space-specific data.  */
439
440 /* This module's per-program-space data.  */
441 struct ada_pspace_data
442 {
443   /* The Ada symbol cache.  */
444   struct ada_symbol_cache *sym_cache;
445 };
446
447 /* Key to our per-program-space data.  */
448 static const struct program_space_data *ada_pspace_data_handle;
449
450 /* Return this module's data for the given program space (PSPACE).
451    If not is found, add a zero'ed one now.
452
453    This function always returns a valid object.  */
454
455 static struct ada_pspace_data *
456 get_ada_pspace_data (struct program_space *pspace)
457 {
458   struct ada_pspace_data *data;
459
460   data = program_space_data (pspace, ada_pspace_data_handle);
461   if (data == NULL)
462     {
463       data = XCNEW (struct ada_pspace_data);
464       set_program_space_data (pspace, ada_pspace_data_handle, data);
465     }
466
467   return data;
468 }
469
470 /* The cleanup callback for this module's per-program-space data.  */
471
472 static void
473 ada_pspace_data_cleanup (struct program_space *pspace, void *data)
474 {
475   struct ada_pspace_data *pspace_data = data;
476
477   if (pspace_data->sym_cache != NULL)
478     ada_free_symbol_cache (pspace_data->sym_cache);
479   xfree (pspace_data);
480 }
481
482                         /* Utilities */
483
484 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
485    all typedef layers have been peeled.  Otherwise, return TYPE.
486
487    Normally, we really expect a typedef type to only have 1 typedef layer.
488    In other words, we really expect the target type of a typedef type to be
489    a non-typedef type.  This is particularly true for Ada units, because
490    the language does not have a typedef vs not-typedef distinction.
491    In that respect, the Ada compiler has been trying to eliminate as many
492    typedef definitions in the debugging information, since they generally
493    do not bring any extra information (we still use typedef under certain
494    circumstances related mostly to the GNAT encoding).
495
496    Unfortunately, we have seen situations where the debugging information
497    generated by the compiler leads to such multiple typedef layers.  For
498    instance, consider the following example with stabs:
499
500      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
501      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
502
503    This is an error in the debugging information which causes type
504    pck__float_array___XUP to be defined twice, and the second time,
505    it is defined as a typedef of a typedef.
506
507    This is on the fringe of legality as far as debugging information is
508    concerned, and certainly unexpected.  But it is easy to handle these
509    situations correctly, so we can afford to be lenient in this case.  */
510
511 static struct type *
512 ada_typedef_target_type (struct type *type)
513 {
514   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
515     type = TYPE_TARGET_TYPE (type);
516   return type;
517 }
518
519 /* Given DECODED_NAME a string holding a symbol name in its
520    decoded form (ie using the Ada dotted notation), returns
521    its unqualified name.  */
522
523 static const char *
524 ada_unqualified_name (const char *decoded_name)
525 {
526   const char *result = strrchr (decoded_name, '.');
527
528   if (result != NULL)
529     result++;                   /* Skip the dot...  */
530   else
531     result = decoded_name;
532
533   return result;
534 }
535
536 /* Return a string starting with '<', followed by STR, and '>'.
537    The result is good until the next call.  */
538
539 static char *
540 add_angle_brackets (const char *str)
541 {
542   static char *result = NULL;
543
544   xfree (result);
545   result = xstrprintf ("<%s>", str);
546   return result;
547 }
548
549 static char *
550 ada_get_gdb_completer_word_break_characters (void)
551 {
552   return ada_completer_word_break_characters;
553 }
554
555 /* Print an array element index using the Ada syntax.  */
556
557 static void
558 ada_print_array_index (struct value *index_value, struct ui_file *stream,
559                        const struct value_print_options *options)
560 {
561   LA_VALUE_PRINT (index_value, stream, options);
562   fprintf_filtered (stream, " => ");
563 }
564
565 /* Assuming VECT points to an array of *SIZE objects of size
566    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
567    updating *SIZE as necessary and returning the (new) array.  */
568
569 void *
570 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
571 {
572   if (*size < min_size)
573     {
574       *size *= 2;
575       if (*size < min_size)
576         *size = min_size;
577       vect = xrealloc (vect, *size * element_size);
578     }
579   return vect;
580 }
581
582 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
583    suffix of FIELD_NAME beginning "___".  */
584
585 static int
586 field_name_match (const char *field_name, const char *target)
587 {
588   int len = strlen (target);
589
590   return
591     (strncmp (field_name, target, len) == 0
592      && (field_name[len] == '\0'
593          || (strncmp (field_name + len, "___", 3) == 0
594              && strcmp (field_name + strlen (field_name) - 6,
595                         "___XVN") != 0)));
596 }
597
598
599 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
600    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
601    and return its index.  This function also handles fields whose name
602    have ___ suffixes because the compiler sometimes alters their name
603    by adding such a suffix to represent fields with certain constraints.
604    If the field could not be found, return a negative number if
605    MAYBE_MISSING is set.  Otherwise raise an error.  */
606
607 int
608 ada_get_field_index (const struct type *type, const char *field_name,
609                      int maybe_missing)
610 {
611   int fieldno;
612   struct type *struct_type = check_typedef ((struct type *) type);
613
614   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
615     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
616       return fieldno;
617
618   if (!maybe_missing)
619     error (_("Unable to find field %s in struct %s.  Aborting"),
620            field_name, TYPE_NAME (struct_type));
621
622   return -1;
623 }
624
625 /* The length of the prefix of NAME prior to any "___" suffix.  */
626
627 int
628 ada_name_prefix_len (const char *name)
629 {
630   if (name == NULL)
631     return 0;
632   else
633     {
634       const char *p = strstr (name, "___");
635
636       if (p == NULL)
637         return strlen (name);
638       else
639         return p - name;
640     }
641 }
642
643 /* Return non-zero if SUFFIX is a suffix of STR.
644    Return zero if STR is null.  */
645
646 static int
647 is_suffix (const char *str, const char *suffix)
648 {
649   int len1, len2;
650
651   if (str == NULL)
652     return 0;
653   len1 = strlen (str);
654   len2 = strlen (suffix);
655   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
656 }
657
658 /* The contents of value VAL, treated as a value of type TYPE.  The
659    result is an lval in memory if VAL is.  */
660
661 static struct value *
662 coerce_unspec_val_to_type (struct value *val, struct type *type)
663 {
664   type = ada_check_typedef (type);
665   if (value_type (val) == type)
666     return val;
667   else
668     {
669       struct value *result;
670
671       /* Make sure that the object size is not unreasonable before
672          trying to allocate some memory for it.  */
673       check_size (type);
674
675       if (value_lazy (val)
676           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
677         result = allocate_value_lazy (type);
678       else
679         {
680           result = allocate_value (type);
681           value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
682         }
683       set_value_component_location (result, val);
684       set_value_bitsize (result, value_bitsize (val));
685       set_value_bitpos (result, value_bitpos (val));
686       set_value_address (result, value_address (val));
687       return result;
688     }
689 }
690
691 static const gdb_byte *
692 cond_offset_host (const gdb_byte *valaddr, long offset)
693 {
694   if (valaddr == NULL)
695     return NULL;
696   else
697     return valaddr + offset;
698 }
699
700 static CORE_ADDR
701 cond_offset_target (CORE_ADDR address, long offset)
702 {
703   if (address == 0)
704     return 0;
705   else
706     return address + offset;
707 }
708
709 /* Issue a warning (as for the definition of warning in utils.c, but
710    with exactly one argument rather than ...), unless the limit on the
711    number of warnings has passed during the evaluation of the current
712    expression.  */
713
714 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
715    provided by "complaint".  */
716 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
717
718 static void
719 lim_warning (const char *format, ...)
720 {
721   va_list args;
722
723   va_start (args, format);
724   warnings_issued += 1;
725   if (warnings_issued <= warning_limit)
726     vwarning (format, args);
727
728   va_end (args);
729 }
730
731 /* Issue an error if the size of an object of type T is unreasonable,
732    i.e. if it would be a bad idea to allocate a value of this type in
733    GDB.  */
734
735 static void
736 check_size (const struct type *type)
737 {
738   if (TYPE_LENGTH (type) > varsize_limit)
739     error (_("object size is larger than varsize-limit"));
740 }
741
742 /* Maximum value of a SIZE-byte signed integer type.  */
743 static LONGEST
744 max_of_size (int size)
745 {
746   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
747
748   return top_bit | (top_bit - 1);
749 }
750
751 /* Minimum value of a SIZE-byte signed integer type.  */
752 static LONGEST
753 min_of_size (int size)
754 {
755   return -max_of_size (size) - 1;
756 }
757
758 /* Maximum value of a SIZE-byte unsigned integer type.  */
759 static ULONGEST
760 umax_of_size (int size)
761 {
762   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
763
764   return top_bit | (top_bit - 1);
765 }
766
767 /* Maximum value of integral type T, as a signed quantity.  */
768 static LONGEST
769 max_of_type (struct type *t)
770 {
771   if (TYPE_UNSIGNED (t))
772     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
773   else
774     return max_of_size (TYPE_LENGTH (t));
775 }
776
777 /* Minimum value of integral type T, as a signed quantity.  */
778 static LONGEST
779 min_of_type (struct type *t)
780 {
781   if (TYPE_UNSIGNED (t)) 
782     return 0;
783   else
784     return min_of_size (TYPE_LENGTH (t));
785 }
786
787 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
788 LONGEST
789 ada_discrete_type_high_bound (struct type *type)
790 {
791   type = resolve_dynamic_type (type, 0);
792   switch (TYPE_CODE (type))
793     {
794     case TYPE_CODE_RANGE:
795       return TYPE_HIGH_BOUND (type);
796     case TYPE_CODE_ENUM:
797       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
798     case TYPE_CODE_BOOL:
799       return 1;
800     case TYPE_CODE_CHAR:
801     case TYPE_CODE_INT:
802       return max_of_type (type);
803     default:
804       error (_("Unexpected type in ada_discrete_type_high_bound."));
805     }
806 }
807
808 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
809 LONGEST
810 ada_discrete_type_low_bound (struct type *type)
811 {
812   type = resolve_dynamic_type (type, 0);
813   switch (TYPE_CODE (type))
814     {
815     case TYPE_CODE_RANGE:
816       return TYPE_LOW_BOUND (type);
817     case TYPE_CODE_ENUM:
818       return TYPE_FIELD_ENUMVAL (type, 0);
819     case TYPE_CODE_BOOL:
820       return 0;
821     case TYPE_CODE_CHAR:
822     case TYPE_CODE_INT:
823       return min_of_type (type);
824     default:
825       error (_("Unexpected type in ada_discrete_type_low_bound."));
826     }
827 }
828
829 /* The identity on non-range types.  For range types, the underlying
830    non-range scalar type.  */
831
832 static struct type *
833 get_base_type (struct type *type)
834 {
835   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
836     {
837       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
838         return type;
839       type = TYPE_TARGET_TYPE (type);
840     }
841   return type;
842 }
843
844 /* Return a decoded version of the given VALUE.  This means returning
845    a value whose type is obtained by applying all the GNAT-specific
846    encondings, making the resulting type a static but standard description
847    of the initial type.  */
848
849 struct value *
850 ada_get_decoded_value (struct value *value)
851 {
852   struct type *type = ada_check_typedef (value_type (value));
853
854   if (ada_is_array_descriptor_type (type)
855       || (ada_is_constrained_packed_array_type (type)
856           && TYPE_CODE (type) != TYPE_CODE_PTR))
857     {
858       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
859         value = ada_coerce_to_simple_array_ptr (value);
860       else
861         value = ada_coerce_to_simple_array (value);
862     }
863   else
864     value = ada_to_fixed_value (value);
865
866   return value;
867 }
868
869 /* Same as ada_get_decoded_value, but with the given TYPE.
870    Because there is no associated actual value for this type,
871    the resulting type might be a best-effort approximation in
872    the case of dynamic types.  */
873
874 struct type *
875 ada_get_decoded_type (struct type *type)
876 {
877   type = to_static_fixed_type (type);
878   if (ada_is_constrained_packed_array_type (type))
879     type = ada_coerce_to_simple_array_type (type);
880   return type;
881 }
882
883 \f
884
885                                 /* Language Selection */
886
887 /* If the main program is in Ada, return language_ada, otherwise return LANG
888    (the main program is in Ada iif the adainit symbol is found).  */
889
890 enum language
891 ada_update_initial_language (enum language lang)
892 {
893   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
894                              (struct objfile *) NULL).minsym != NULL)
895     return language_ada;
896
897   return lang;
898 }
899
900 /* If the main procedure is written in Ada, then return its name.
901    The result is good until the next call.  Return NULL if the main
902    procedure doesn't appear to be in Ada.  */
903
904 char *
905 ada_main_name (void)
906 {
907   struct bound_minimal_symbol msym;
908   static char *main_program_name = NULL;
909
910   /* For Ada, the name of the main procedure is stored in a specific
911      string constant, generated by the binder.  Look for that symbol,
912      extract its address, and then read that string.  If we didn't find
913      that string, then most probably the main procedure is not written
914      in Ada.  */
915   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
916
917   if (msym.minsym != NULL)
918     {
919       CORE_ADDR main_program_name_addr;
920       int err_code;
921
922       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
923       if (main_program_name_addr == 0)
924         error (_("Invalid address for Ada main program name."));
925
926       xfree (main_program_name);
927       target_read_string (main_program_name_addr, &main_program_name,
928                           1024, &err_code);
929
930       if (err_code != 0)
931         return NULL;
932       return main_program_name;
933     }
934
935   /* The main procedure doesn't seem to be in Ada.  */
936   return NULL;
937 }
938 \f
939                                 /* Symbols */
940
941 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
942    of NULLs.  */
943
944 const struct ada_opname_map ada_opname_table[] = {
945   {"Oadd", "\"+\"", BINOP_ADD},
946   {"Osubtract", "\"-\"", BINOP_SUB},
947   {"Omultiply", "\"*\"", BINOP_MUL},
948   {"Odivide", "\"/\"", BINOP_DIV},
949   {"Omod", "\"mod\"", BINOP_MOD},
950   {"Orem", "\"rem\"", BINOP_REM},
951   {"Oexpon", "\"**\"", BINOP_EXP},
952   {"Olt", "\"<\"", BINOP_LESS},
953   {"Ole", "\"<=\"", BINOP_LEQ},
954   {"Ogt", "\">\"", BINOP_GTR},
955   {"Oge", "\">=\"", BINOP_GEQ},
956   {"Oeq", "\"=\"", BINOP_EQUAL},
957   {"One", "\"/=\"", BINOP_NOTEQUAL},
958   {"Oand", "\"and\"", BINOP_BITWISE_AND},
959   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
960   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
961   {"Oconcat", "\"&\"", BINOP_CONCAT},
962   {"Oabs", "\"abs\"", UNOP_ABS},
963   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
964   {"Oadd", "\"+\"", UNOP_PLUS},
965   {"Osubtract", "\"-\"", UNOP_NEG},
966   {NULL, NULL}
967 };
968
969 /* The "encoded" form of DECODED, according to GNAT conventions.
970    The result is valid until the next call to ada_encode.  */
971
972 char *
973 ada_encode (const char *decoded)
974 {
975   static char *encoding_buffer = NULL;
976   static size_t encoding_buffer_size = 0;
977   const char *p;
978   int k;
979
980   if (decoded == NULL)
981     return NULL;
982
983   GROW_VECT (encoding_buffer, encoding_buffer_size,
984              2 * strlen (decoded) + 10);
985
986   k = 0;
987   for (p = decoded; *p != '\0'; p += 1)
988     {
989       if (*p == '.')
990         {
991           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
992           k += 2;
993         }
994       else if (*p == '"')
995         {
996           const struct ada_opname_map *mapping;
997
998           for (mapping = ada_opname_table;
999                mapping->encoded != NULL
1000                && strncmp (mapping->decoded, p,
1001                            strlen (mapping->decoded)) != 0; mapping += 1)
1002             ;
1003           if (mapping->encoded == NULL)
1004             error (_("invalid Ada operator name: %s"), p);
1005           strcpy (encoding_buffer + k, mapping->encoded);
1006           k += strlen (mapping->encoded);
1007           break;
1008         }
1009       else
1010         {
1011           encoding_buffer[k] = *p;
1012           k += 1;
1013         }
1014     }
1015
1016   encoding_buffer[k] = '\0';
1017   return encoding_buffer;
1018 }
1019
1020 /* Return NAME folded to lower case, or, if surrounded by single
1021    quotes, unfolded, but with the quotes stripped away.  Result good
1022    to next call.  */
1023
1024 char *
1025 ada_fold_name (const char *name)
1026 {
1027   static char *fold_buffer = NULL;
1028   static size_t fold_buffer_size = 0;
1029
1030   int len = strlen (name);
1031   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1032
1033   if (name[0] == '\'')
1034     {
1035       strncpy (fold_buffer, name + 1, len - 2);
1036       fold_buffer[len - 2] = '\000';
1037     }
1038   else
1039     {
1040       int i;
1041
1042       for (i = 0; i <= len; i += 1)
1043         fold_buffer[i] = tolower (name[i]);
1044     }
1045
1046   return fold_buffer;
1047 }
1048
1049 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1050
1051 static int
1052 is_lower_alphanum (const char c)
1053 {
1054   return (isdigit (c) || (isalpha (c) && islower (c)));
1055 }
1056
1057 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1058    This function saves in LEN the length of that same symbol name but
1059    without either of these suffixes:
1060      . .{DIGIT}+
1061      . ${DIGIT}+
1062      . ___{DIGIT}+
1063      . __{DIGIT}+.
1064
1065    These are suffixes introduced by the compiler for entities such as
1066    nested subprogram for instance, in order to avoid name clashes.
1067    They do not serve any purpose for the debugger.  */
1068
1069 static void
1070 ada_remove_trailing_digits (const char *encoded, int *len)
1071 {
1072   if (*len > 1 && isdigit (encoded[*len - 1]))
1073     {
1074       int i = *len - 2;
1075
1076       while (i > 0 && isdigit (encoded[i]))
1077         i--;
1078       if (i >= 0 && encoded[i] == '.')
1079         *len = i;
1080       else if (i >= 0 && encoded[i] == '$')
1081         *len = i;
1082       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
1083         *len = i - 2;
1084       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
1085         *len = i - 1;
1086     }
1087 }
1088
1089 /* Remove the suffix introduced by the compiler for protected object
1090    subprograms.  */
1091
1092 static void
1093 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1094 {
1095   /* Remove trailing N.  */
1096
1097   /* Protected entry subprograms are broken into two
1098      separate subprograms: The first one is unprotected, and has
1099      a 'N' suffix; the second is the protected version, and has
1100      the 'P' suffix.  The second calls the first one after handling
1101      the protection.  Since the P subprograms are internally generated,
1102      we leave these names undecoded, giving the user a clue that this
1103      entity is internal.  */
1104
1105   if (*len > 1
1106       && encoded[*len - 1] == 'N'
1107       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1108     *len = *len - 1;
1109 }
1110
1111 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1112
1113 static void
1114 ada_remove_Xbn_suffix (const char *encoded, int *len)
1115 {
1116   int i = *len - 1;
1117
1118   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1119     i--;
1120
1121   if (encoded[i] != 'X')
1122     return;
1123
1124   if (i == 0)
1125     return;
1126
1127   if (isalnum (encoded[i-1]))
1128     *len = i;
1129 }
1130
1131 /* If ENCODED follows the GNAT entity encoding conventions, then return
1132    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1133    replaced by ENCODED.
1134
1135    The resulting string is valid until the next call of ada_decode.
1136    If the string is unchanged by decoding, the original string pointer
1137    is returned.  */
1138
1139 const char *
1140 ada_decode (const char *encoded)
1141 {
1142   int i, j;
1143   int len0;
1144   const char *p;
1145   char *decoded;
1146   int at_start_name;
1147   static char *decoding_buffer = NULL;
1148   static size_t decoding_buffer_size = 0;
1149
1150   /* The name of the Ada main procedure starts with "_ada_".
1151      This prefix is not part of the decoded name, so skip this part
1152      if we see this prefix.  */
1153   if (strncmp (encoded, "_ada_", 5) == 0)
1154     encoded += 5;
1155
1156   /* If the name starts with '_', then it is not a properly encoded
1157      name, so do not attempt to decode it.  Similarly, if the name
1158      starts with '<', the name should not be decoded.  */
1159   if (encoded[0] == '_' || encoded[0] == '<')
1160     goto Suppress;
1161
1162   len0 = strlen (encoded);
1163
1164   ada_remove_trailing_digits (encoded, &len0);
1165   ada_remove_po_subprogram_suffix (encoded, &len0);
1166
1167   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1168      the suffix is located before the current "end" of ENCODED.  We want
1169      to avoid re-matching parts of ENCODED that have previously been
1170      marked as discarded (by decrementing LEN0).  */
1171   p = strstr (encoded, "___");
1172   if (p != NULL && p - encoded < len0 - 3)
1173     {
1174       if (p[3] == 'X')
1175         len0 = p - encoded;
1176       else
1177         goto Suppress;
1178     }
1179
1180   /* Remove any trailing TKB suffix.  It tells us that this symbol
1181      is for the body of a task, but that information does not actually
1182      appear in the decoded name.  */
1183
1184   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
1185     len0 -= 3;
1186
1187   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1188      from the TKB suffix because it is used for non-anonymous task
1189      bodies.  */
1190
1191   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1192     len0 -= 2;
1193
1194   /* Remove trailing "B" suffixes.  */
1195   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1196
1197   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
1198     len0 -= 1;
1199
1200   /* Make decoded big enough for possible expansion by operator name.  */
1201
1202   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1203   decoded = decoding_buffer;
1204
1205   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1206
1207   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1208     {
1209       i = len0 - 2;
1210       while ((i >= 0 && isdigit (encoded[i]))
1211              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1212         i -= 1;
1213       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1214         len0 = i - 1;
1215       else if (encoded[i] == '$')
1216         len0 = i;
1217     }
1218
1219   /* The first few characters that are not alphabetic are not part
1220      of any encoding we use, so we can copy them over verbatim.  */
1221
1222   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1223     decoded[j] = encoded[i];
1224
1225   at_start_name = 1;
1226   while (i < len0)
1227     {
1228       /* Is this a symbol function?  */
1229       if (at_start_name && encoded[i] == 'O')
1230         {
1231           int k;
1232
1233           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1234             {
1235               int op_len = strlen (ada_opname_table[k].encoded);
1236               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1237                             op_len - 1) == 0)
1238                   && !isalnum (encoded[i + op_len]))
1239                 {
1240                   strcpy (decoded + j, ada_opname_table[k].decoded);
1241                   at_start_name = 0;
1242                   i += op_len;
1243                   j += strlen (ada_opname_table[k].decoded);
1244                   break;
1245                 }
1246             }
1247           if (ada_opname_table[k].encoded != NULL)
1248             continue;
1249         }
1250       at_start_name = 0;
1251
1252       /* Replace "TK__" with "__", which will eventually be translated
1253          into "." (just below).  */
1254
1255       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1256         i += 2;
1257
1258       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1259          be translated into "." (just below).  These are internal names
1260          generated for anonymous blocks inside which our symbol is nested.  */
1261
1262       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1263           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1264           && isdigit (encoded [i+4]))
1265         {
1266           int k = i + 5;
1267           
1268           while (k < len0 && isdigit (encoded[k]))
1269             k++;  /* Skip any extra digit.  */
1270
1271           /* Double-check that the "__B_{DIGITS}+" sequence we found
1272              is indeed followed by "__".  */
1273           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1274             i = k;
1275         }
1276
1277       /* Remove _E{DIGITS}+[sb] */
1278
1279       /* Just as for protected object subprograms, there are 2 categories
1280          of subprograms created by the compiler for each entry.  The first
1281          one implements the actual entry code, and has a suffix following
1282          the convention above; the second one implements the barrier and
1283          uses the same convention as above, except that the 'E' is replaced
1284          by a 'B'.
1285
1286          Just as above, we do not decode the name of barrier functions
1287          to give the user a clue that the code he is debugging has been
1288          internally generated.  */
1289
1290       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1291           && isdigit (encoded[i+2]))
1292         {
1293           int k = i + 3;
1294
1295           while (k < len0 && isdigit (encoded[k]))
1296             k++;
1297
1298           if (k < len0
1299               && (encoded[k] == 'b' || encoded[k] == 's'))
1300             {
1301               k++;
1302               /* Just as an extra precaution, make sure that if this
1303                  suffix is followed by anything else, it is a '_'.
1304                  Otherwise, we matched this sequence by accident.  */
1305               if (k == len0
1306                   || (k < len0 && encoded[k] == '_'))
1307                 i = k;
1308             }
1309         }
1310
1311       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1312          the GNAT front-end in protected object subprograms.  */
1313
1314       if (i < len0 + 3
1315           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1316         {
1317           /* Backtrack a bit up until we reach either the begining of
1318              the encoded name, or "__".  Make sure that we only find
1319              digits or lowercase characters.  */
1320           const char *ptr = encoded + i - 1;
1321
1322           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1323             ptr--;
1324           if (ptr < encoded
1325               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1326             i++;
1327         }
1328
1329       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1330         {
1331           /* This is a X[bn]* sequence not separated from the previous
1332              part of the name with a non-alpha-numeric character (in other
1333              words, immediately following an alpha-numeric character), then
1334              verify that it is placed at the end of the encoded name.  If
1335              not, then the encoding is not valid and we should abort the
1336              decoding.  Otherwise, just skip it, it is used in body-nested
1337              package names.  */
1338           do
1339             i += 1;
1340           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1341           if (i < len0)
1342             goto Suppress;
1343         }
1344       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1345         {
1346          /* Replace '__' by '.'.  */
1347           decoded[j] = '.';
1348           at_start_name = 1;
1349           i += 2;
1350           j += 1;
1351         }
1352       else
1353         {
1354           /* It's a character part of the decoded name, so just copy it
1355              over.  */
1356           decoded[j] = encoded[i];
1357           i += 1;
1358           j += 1;
1359         }
1360     }
1361   decoded[j] = '\000';
1362
1363   /* Decoded names should never contain any uppercase character.
1364      Double-check this, and abort the decoding if we find one.  */
1365
1366   for (i = 0; decoded[i] != '\0'; i += 1)
1367     if (isupper (decoded[i]) || decoded[i] == ' ')
1368       goto Suppress;
1369
1370   if (strcmp (decoded, encoded) == 0)
1371     return encoded;
1372   else
1373     return decoded;
1374
1375 Suppress:
1376   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1377   decoded = decoding_buffer;
1378   if (encoded[0] == '<')
1379     strcpy (decoded, encoded);
1380   else
1381     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1382   return decoded;
1383
1384 }
1385
1386 /* Table for keeping permanent unique copies of decoded names.  Once
1387    allocated, names in this table are never released.  While this is a
1388    storage leak, it should not be significant unless there are massive
1389    changes in the set of decoded names in successive versions of a 
1390    symbol table loaded during a single session.  */
1391 static struct htab *decoded_names_store;
1392
1393 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1394    in the language-specific part of GSYMBOL, if it has not been
1395    previously computed.  Tries to save the decoded name in the same
1396    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1397    in any case, the decoded symbol has a lifetime at least that of
1398    GSYMBOL).
1399    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1400    const, but nevertheless modified to a semantically equivalent form
1401    when a decoded name is cached in it.  */
1402
1403 const char *
1404 ada_decode_symbol (const struct general_symbol_info *arg)
1405 {
1406   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1407   const char **resultp =
1408     &gsymbol->language_specific.mangled_lang.demangled_name;
1409
1410   if (!gsymbol->ada_mangled)
1411     {
1412       const char *decoded = ada_decode (gsymbol->name);
1413       struct obstack *obstack = gsymbol->language_specific.obstack;
1414
1415       gsymbol->ada_mangled = 1;
1416
1417       if (obstack != NULL)
1418         *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1419       else
1420         {
1421           /* Sometimes, we can't find a corresponding objfile, in
1422              which case, we put the result on the heap.  Since we only
1423              decode when needed, we hope this usually does not cause a
1424              significant memory leak (FIXME).  */
1425
1426           char **slot = (char **) htab_find_slot (decoded_names_store,
1427                                                   decoded, INSERT);
1428
1429           if (*slot == NULL)
1430             *slot = xstrdup (decoded);
1431           *resultp = *slot;
1432         }
1433     }
1434
1435   return *resultp;
1436 }
1437
1438 static char *
1439 ada_la_decode (const char *encoded, int options)
1440 {
1441   return xstrdup (ada_decode (encoded));
1442 }
1443
1444 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1445    suffixes that encode debugging information or leading _ada_ on
1446    SYM_NAME (see is_name_suffix commentary for the debugging
1447    information that is ignored).  If WILD, then NAME need only match a
1448    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1449    either argument is NULL.  */
1450
1451 static int
1452 match_name (const char *sym_name, const char *name, int wild)
1453 {
1454   if (sym_name == NULL || name == NULL)
1455     return 0;
1456   else if (wild)
1457     return wild_match (sym_name, name) == 0;
1458   else
1459     {
1460       int len_name = strlen (name);
1461
1462       return (strncmp (sym_name, name, len_name) == 0
1463               && is_name_suffix (sym_name + len_name))
1464         || (strncmp (sym_name, "_ada_", 5) == 0
1465             && strncmp (sym_name + 5, name, len_name) == 0
1466             && is_name_suffix (sym_name + len_name + 5));
1467     }
1468 }
1469 \f
1470
1471                                 /* Arrays */
1472
1473 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1474    generated by the GNAT compiler to describe the index type used
1475    for each dimension of an array, check whether it follows the latest
1476    known encoding.  If not, fix it up to conform to the latest encoding.
1477    Otherwise, do nothing.  This function also does nothing if
1478    INDEX_DESC_TYPE is NULL.
1479
1480    The GNAT encoding used to describle the array index type evolved a bit.
1481    Initially, the information would be provided through the name of each
1482    field of the structure type only, while the type of these fields was
1483    described as unspecified and irrelevant.  The debugger was then expected
1484    to perform a global type lookup using the name of that field in order
1485    to get access to the full index type description.  Because these global
1486    lookups can be very expensive, the encoding was later enhanced to make
1487    the global lookup unnecessary by defining the field type as being
1488    the full index type description.
1489
1490    The purpose of this routine is to allow us to support older versions
1491    of the compiler by detecting the use of the older encoding, and by
1492    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1493    we essentially replace each field's meaningless type by the associated
1494    index subtype).  */
1495
1496 void
1497 ada_fixup_array_indexes_type (struct type *index_desc_type)
1498 {
1499   int i;
1500
1501   if (index_desc_type == NULL)
1502     return;
1503   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1504
1505   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1506      to check one field only, no need to check them all).  If not, return
1507      now.
1508
1509      If our INDEX_DESC_TYPE was generated using the older encoding,
1510      the field type should be a meaningless integer type whose name
1511      is not equal to the field name.  */
1512   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1513       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1514                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1515     return;
1516
1517   /* Fixup each field of INDEX_DESC_TYPE.  */
1518   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1519    {
1520      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1521      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1522
1523      if (raw_type)
1524        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1525    }
1526 }
1527
1528 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1529
1530 static char *bound_name[] = {
1531   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1532   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1533 };
1534
1535 /* Maximum number of array dimensions we are prepared to handle.  */
1536
1537 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1538
1539
1540 /* The desc_* routines return primitive portions of array descriptors
1541    (fat pointers).  */
1542
1543 /* The descriptor or array type, if any, indicated by TYPE; removes
1544    level of indirection, if needed.  */
1545
1546 static struct type *
1547 desc_base_type (struct type *type)
1548 {
1549   if (type == NULL)
1550     return NULL;
1551   type = ada_check_typedef (type);
1552   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1553     type = ada_typedef_target_type (type);
1554
1555   if (type != NULL
1556       && (TYPE_CODE (type) == TYPE_CODE_PTR
1557           || TYPE_CODE (type) == TYPE_CODE_REF))
1558     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1559   else
1560     return type;
1561 }
1562
1563 /* True iff TYPE indicates a "thin" array pointer type.  */
1564
1565 static int
1566 is_thin_pntr (struct type *type)
1567 {
1568   return
1569     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1570     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1571 }
1572
1573 /* The descriptor type for thin pointer type TYPE.  */
1574
1575 static struct type *
1576 thin_descriptor_type (struct type *type)
1577 {
1578   struct type *base_type = desc_base_type (type);
1579
1580   if (base_type == NULL)
1581     return NULL;
1582   if (is_suffix (ada_type_name (base_type), "___XVE"))
1583     return base_type;
1584   else
1585     {
1586       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1587
1588       if (alt_type == NULL)
1589         return base_type;
1590       else
1591         return alt_type;
1592     }
1593 }
1594
1595 /* A pointer to the array data for thin-pointer value VAL.  */
1596
1597 static struct value *
1598 thin_data_pntr (struct value *val)
1599 {
1600   struct type *type = ada_check_typedef (value_type (val));
1601   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1602
1603   data_type = lookup_pointer_type (data_type);
1604
1605   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1606     return value_cast (data_type, value_copy (val));
1607   else
1608     return value_from_longest (data_type, value_address (val));
1609 }
1610
1611 /* True iff TYPE indicates a "thick" array pointer type.  */
1612
1613 static int
1614 is_thick_pntr (struct type *type)
1615 {
1616   type = desc_base_type (type);
1617   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1618           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1619 }
1620
1621 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1622    pointer to one, the type of its bounds data; otherwise, NULL.  */
1623
1624 static struct type *
1625 desc_bounds_type (struct type *type)
1626 {
1627   struct type *r;
1628
1629   type = desc_base_type (type);
1630
1631   if (type == NULL)
1632     return NULL;
1633   else if (is_thin_pntr (type))
1634     {
1635       type = thin_descriptor_type (type);
1636       if (type == NULL)
1637         return NULL;
1638       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1639       if (r != NULL)
1640         return ada_check_typedef (r);
1641     }
1642   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1643     {
1644       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1645       if (r != NULL)
1646         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1647     }
1648   return NULL;
1649 }
1650
1651 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1652    one, a pointer to its bounds data.   Otherwise NULL.  */
1653
1654 static struct value *
1655 desc_bounds (struct value *arr)
1656 {
1657   struct type *type = ada_check_typedef (value_type (arr));
1658
1659   if (is_thin_pntr (type))
1660     {
1661       struct type *bounds_type =
1662         desc_bounds_type (thin_descriptor_type (type));
1663       LONGEST addr;
1664
1665       if (bounds_type == NULL)
1666         error (_("Bad GNAT array descriptor"));
1667
1668       /* NOTE: The following calculation is not really kosher, but
1669          since desc_type is an XVE-encoded type (and shouldn't be),
1670          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1671       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1672         addr = value_as_long (arr);
1673       else
1674         addr = value_address (arr);
1675
1676       return
1677         value_from_longest (lookup_pointer_type (bounds_type),
1678                             addr - TYPE_LENGTH (bounds_type));
1679     }
1680
1681   else if (is_thick_pntr (type))
1682     {
1683       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1684                                                _("Bad GNAT array descriptor"));
1685       struct type *p_bounds_type = value_type (p_bounds);
1686
1687       if (p_bounds_type
1688           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1689         {
1690           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1691
1692           if (TYPE_STUB (target_type))
1693             p_bounds = value_cast (lookup_pointer_type
1694                                    (ada_check_typedef (target_type)),
1695                                    p_bounds);
1696         }
1697       else
1698         error (_("Bad GNAT array descriptor"));
1699
1700       return p_bounds;
1701     }
1702   else
1703     return NULL;
1704 }
1705
1706 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1707    position of the field containing the address of the bounds data.  */
1708
1709 static int
1710 fat_pntr_bounds_bitpos (struct type *type)
1711 {
1712   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1713 }
1714
1715 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1716    size of the field containing the address of the bounds data.  */
1717
1718 static int
1719 fat_pntr_bounds_bitsize (struct type *type)
1720 {
1721   type = desc_base_type (type);
1722
1723   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1724     return TYPE_FIELD_BITSIZE (type, 1);
1725   else
1726     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1727 }
1728
1729 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1730    pointer to one, the type of its array data (a array-with-no-bounds type);
1731    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1732    data.  */
1733
1734 static struct type *
1735 desc_data_target_type (struct type *type)
1736 {
1737   type = desc_base_type (type);
1738
1739   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1740   if (is_thin_pntr (type))
1741     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1742   else if (is_thick_pntr (type))
1743     {
1744       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1745
1746       if (data_type
1747           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1748         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1749     }
1750
1751   return NULL;
1752 }
1753
1754 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1755    its array data.  */
1756
1757 static struct value *
1758 desc_data (struct value *arr)
1759 {
1760   struct type *type = value_type (arr);
1761
1762   if (is_thin_pntr (type))
1763     return thin_data_pntr (arr);
1764   else if (is_thick_pntr (type))
1765     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1766                              _("Bad GNAT array descriptor"));
1767   else
1768     return NULL;
1769 }
1770
1771
1772 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1773    position of the field containing the address of the data.  */
1774
1775 static int
1776 fat_pntr_data_bitpos (struct type *type)
1777 {
1778   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1779 }
1780
1781 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1782    size of the field containing the address of the data.  */
1783
1784 static int
1785 fat_pntr_data_bitsize (struct type *type)
1786 {
1787   type = desc_base_type (type);
1788
1789   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1790     return TYPE_FIELD_BITSIZE (type, 0);
1791   else
1792     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1793 }
1794
1795 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1796    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1797    bound, if WHICH is 1.  The first bound is I=1.  */
1798
1799 static struct value *
1800 desc_one_bound (struct value *bounds, int i, int which)
1801 {
1802   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1803                            _("Bad GNAT array descriptor bounds"));
1804 }
1805
1806 /* If BOUNDS is an array-bounds structure type, return the bit position
1807    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1808    bound, if WHICH is 1.  The first bound is I=1.  */
1809
1810 static int
1811 desc_bound_bitpos (struct type *type, int i, int which)
1812 {
1813   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1814 }
1815
1816 /* If BOUNDS is an array-bounds structure type, return the bit field size
1817    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1818    bound, if WHICH is 1.  The first bound is I=1.  */
1819
1820 static int
1821 desc_bound_bitsize (struct type *type, int i, int which)
1822 {
1823   type = desc_base_type (type);
1824
1825   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1826     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1827   else
1828     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1829 }
1830
1831 /* If TYPE is the type of an array-bounds structure, the type of its
1832    Ith bound (numbering from 1).  Otherwise, NULL.  */
1833
1834 static struct type *
1835 desc_index_type (struct type *type, int i)
1836 {
1837   type = desc_base_type (type);
1838
1839   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1840     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1841   else
1842     return NULL;
1843 }
1844
1845 /* The number of index positions in the array-bounds type TYPE.
1846    Return 0 if TYPE is NULL.  */
1847
1848 static int
1849 desc_arity (struct type *type)
1850 {
1851   type = desc_base_type (type);
1852
1853   if (type != NULL)
1854     return TYPE_NFIELDS (type) / 2;
1855   return 0;
1856 }
1857
1858 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1859    an array descriptor type (representing an unconstrained array
1860    type).  */
1861
1862 static int
1863 ada_is_direct_array_type (struct type *type)
1864 {
1865   if (type == NULL)
1866     return 0;
1867   type = ada_check_typedef (type);
1868   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1869           || ada_is_array_descriptor_type (type));
1870 }
1871
1872 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1873  * to one.  */
1874
1875 static int
1876 ada_is_array_type (struct type *type)
1877 {
1878   while (type != NULL 
1879          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1880              || TYPE_CODE (type) == TYPE_CODE_REF))
1881     type = TYPE_TARGET_TYPE (type);
1882   return ada_is_direct_array_type (type);
1883 }
1884
1885 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1886
1887 int
1888 ada_is_simple_array_type (struct type *type)
1889 {
1890   if (type == NULL)
1891     return 0;
1892   type = ada_check_typedef (type);
1893   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1894           || (TYPE_CODE (type) == TYPE_CODE_PTR
1895               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1896                  == TYPE_CODE_ARRAY));
1897 }
1898
1899 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1900
1901 int
1902 ada_is_array_descriptor_type (struct type *type)
1903 {
1904   struct type *data_type = desc_data_target_type (type);
1905
1906   if (type == NULL)
1907     return 0;
1908   type = ada_check_typedef (type);
1909   return (data_type != NULL
1910           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1911           && desc_arity (desc_bounds_type (type)) > 0);
1912 }
1913
1914 /* Non-zero iff type is a partially mal-formed GNAT array
1915    descriptor.  FIXME: This is to compensate for some problems with
1916    debugging output from GNAT.  Re-examine periodically to see if it
1917    is still needed.  */
1918
1919 int
1920 ada_is_bogus_array_descriptor (struct type *type)
1921 {
1922   return
1923     type != NULL
1924     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1925     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1926         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1927     && !ada_is_array_descriptor_type (type);
1928 }
1929
1930
1931 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1932    (fat pointer) returns the type of the array data described---specifically,
1933    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1934    in from the descriptor; otherwise, they are left unspecified.  If
1935    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1936    returns NULL.  The result is simply the type of ARR if ARR is not
1937    a descriptor.  */
1938 struct type *
1939 ada_type_of_array (struct value *arr, int bounds)
1940 {
1941   if (ada_is_constrained_packed_array_type (value_type (arr)))
1942     return decode_constrained_packed_array_type (value_type (arr));
1943
1944   if (!ada_is_array_descriptor_type (value_type (arr)))
1945     return value_type (arr);
1946
1947   if (!bounds)
1948     {
1949       struct type *array_type =
1950         ada_check_typedef (desc_data_target_type (value_type (arr)));
1951
1952       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1953         TYPE_FIELD_BITSIZE (array_type, 0) =
1954           decode_packed_array_bitsize (value_type (arr));
1955       
1956       return array_type;
1957     }
1958   else
1959     {
1960       struct type *elt_type;
1961       int arity;
1962       struct value *descriptor;
1963
1964       elt_type = ada_array_element_type (value_type (arr), -1);
1965       arity = ada_array_arity (value_type (arr));
1966
1967       if (elt_type == NULL || arity == 0)
1968         return ada_check_typedef (value_type (arr));
1969
1970       descriptor = desc_bounds (arr);
1971       if (value_as_long (descriptor) == 0)
1972         return NULL;
1973       while (arity > 0)
1974         {
1975           struct type *range_type = alloc_type_copy (value_type (arr));
1976           struct type *array_type = alloc_type_copy (value_type (arr));
1977           struct value *low = desc_one_bound (descriptor, arity, 0);
1978           struct value *high = desc_one_bound (descriptor, arity, 1);
1979
1980           arity -= 1;
1981           create_static_range_type (range_type, value_type (low),
1982                                     longest_to_int (value_as_long (low)),
1983                                     longest_to_int (value_as_long (high)));
1984           elt_type = create_array_type (array_type, elt_type, range_type);
1985
1986           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1987             {
1988               /* We need to store the element packed bitsize, as well as
1989                  recompute the array size, because it was previously
1990                  computed based on the unpacked element size.  */
1991               LONGEST lo = value_as_long (low);
1992               LONGEST hi = value_as_long (high);
1993
1994               TYPE_FIELD_BITSIZE (elt_type, 0) =
1995                 decode_packed_array_bitsize (value_type (arr));
1996               /* If the array has no element, then the size is already
1997                  zero, and does not need to be recomputed.  */
1998               if (lo < hi)
1999                 {
2000                   int array_bitsize =
2001                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2002
2003                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2004                 }
2005             }
2006         }
2007
2008       return lookup_pointer_type (elt_type);
2009     }
2010 }
2011
2012 /* If ARR does not represent an array, returns ARR unchanged.
2013    Otherwise, returns either a standard GDB array with bounds set
2014    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2015    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2016
2017 struct value *
2018 ada_coerce_to_simple_array_ptr (struct value *arr)
2019 {
2020   if (ada_is_array_descriptor_type (value_type (arr)))
2021     {
2022       struct type *arrType = ada_type_of_array (arr, 1);
2023
2024       if (arrType == NULL)
2025         return NULL;
2026       return value_cast (arrType, value_copy (desc_data (arr)));
2027     }
2028   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2029     return decode_constrained_packed_array (arr);
2030   else
2031     return arr;
2032 }
2033
2034 /* If ARR does not represent an array, returns ARR unchanged.
2035    Otherwise, returns a standard GDB array describing ARR (which may
2036    be ARR itself if it already is in the proper form).  */
2037
2038 struct value *
2039 ada_coerce_to_simple_array (struct value *arr)
2040 {
2041   if (ada_is_array_descriptor_type (value_type (arr)))
2042     {
2043       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2044
2045       if (arrVal == NULL)
2046         error (_("Bounds unavailable for null array pointer."));
2047       check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
2048       return value_ind (arrVal);
2049     }
2050   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2051     return decode_constrained_packed_array (arr);
2052   else
2053     return arr;
2054 }
2055
2056 /* If TYPE represents a GNAT array type, return it translated to an
2057    ordinary GDB array type (possibly with BITSIZE fields indicating
2058    packing).  For other types, is the identity.  */
2059
2060 struct type *
2061 ada_coerce_to_simple_array_type (struct type *type)
2062 {
2063   if (ada_is_constrained_packed_array_type (type))
2064     return decode_constrained_packed_array_type (type);
2065
2066   if (ada_is_array_descriptor_type (type))
2067     return ada_check_typedef (desc_data_target_type (type));
2068
2069   return type;
2070 }
2071
2072 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2073
2074 static int
2075 ada_is_packed_array_type  (struct type *type)
2076 {
2077   if (type == NULL)
2078     return 0;
2079   type = desc_base_type (type);
2080   type = ada_check_typedef (type);
2081   return
2082     ada_type_name (type) != NULL
2083     && strstr (ada_type_name (type), "___XP") != NULL;
2084 }
2085
2086 /* Non-zero iff TYPE represents a standard GNAT constrained
2087    packed-array type.  */
2088
2089 int
2090 ada_is_constrained_packed_array_type (struct type *type)
2091 {
2092   return ada_is_packed_array_type (type)
2093     && !ada_is_array_descriptor_type (type);
2094 }
2095
2096 /* Non-zero iff TYPE represents an array descriptor for a
2097    unconstrained packed-array type.  */
2098
2099 static int
2100 ada_is_unconstrained_packed_array_type (struct type *type)
2101 {
2102   return ada_is_packed_array_type (type)
2103     && ada_is_array_descriptor_type (type);
2104 }
2105
2106 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2107    return the size of its elements in bits.  */
2108
2109 static long
2110 decode_packed_array_bitsize (struct type *type)
2111 {
2112   const char *raw_name;
2113   const char *tail;
2114   long bits;
2115
2116   /* Access to arrays implemented as fat pointers are encoded as a typedef
2117      of the fat pointer type.  We need the name of the fat pointer type
2118      to do the decoding, so strip the typedef layer.  */
2119   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2120     type = ada_typedef_target_type (type);
2121
2122   raw_name = ada_type_name (ada_check_typedef (type));
2123   if (!raw_name)
2124     raw_name = ada_type_name (desc_base_type (type));
2125
2126   if (!raw_name)
2127     return 0;
2128
2129   tail = strstr (raw_name, "___XP");
2130   gdb_assert (tail != NULL);
2131
2132   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2133     {
2134       lim_warning
2135         (_("could not understand bit size information on packed array"));
2136       return 0;
2137     }
2138
2139   return bits;
2140 }
2141
2142 /* Given that TYPE is a standard GDB array type with all bounds filled
2143    in, and that the element size of its ultimate scalar constituents
2144    (that is, either its elements, or, if it is an array of arrays, its
2145    elements' elements, etc.) is *ELT_BITS, return an identical type,
2146    but with the bit sizes of its elements (and those of any
2147    constituent arrays) recorded in the BITSIZE components of its
2148    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2149    in bits.
2150
2151    Note that, for arrays whose index type has an XA encoding where
2152    a bound references a record discriminant, getting that discriminant,
2153    and therefore the actual value of that bound, is not possible
2154    because none of the given parameters gives us access to the record.
2155    This function assumes that it is OK in the context where it is being
2156    used to return an array whose bounds are still dynamic and where
2157    the length is arbitrary.  */
2158
2159 static struct type *
2160 constrained_packed_array_type (struct type *type, long *elt_bits)
2161 {
2162   struct type *new_elt_type;
2163   struct type *new_type;
2164   struct type *index_type_desc;
2165   struct type *index_type;
2166   LONGEST low_bound, high_bound;
2167
2168   type = ada_check_typedef (type);
2169   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2170     return type;
2171
2172   index_type_desc = ada_find_parallel_type (type, "___XA");
2173   if (index_type_desc)
2174     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2175                                       NULL);
2176   else
2177     index_type = TYPE_INDEX_TYPE (type);
2178
2179   new_type = alloc_type_copy (type);
2180   new_elt_type =
2181     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2182                                    elt_bits);
2183   create_array_type (new_type, new_elt_type, index_type);
2184   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2185   TYPE_NAME (new_type) = ada_type_name (type);
2186
2187   if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2188        && is_dynamic_type (check_typedef (index_type)))
2189       || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2190     low_bound = high_bound = 0;
2191   if (high_bound < low_bound)
2192     *elt_bits = TYPE_LENGTH (new_type) = 0;
2193   else
2194     {
2195       *elt_bits *= (high_bound - low_bound + 1);
2196       TYPE_LENGTH (new_type) =
2197         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2198     }
2199
2200   TYPE_FIXED_INSTANCE (new_type) = 1;
2201   return new_type;
2202 }
2203
2204 /* The array type encoded by TYPE, where
2205    ada_is_constrained_packed_array_type (TYPE).  */
2206
2207 static struct type *
2208 decode_constrained_packed_array_type (struct type *type)
2209 {
2210   const char *raw_name = ada_type_name (ada_check_typedef (type));
2211   char *name;
2212   const char *tail;
2213   struct type *shadow_type;
2214   long bits;
2215
2216   if (!raw_name)
2217     raw_name = ada_type_name (desc_base_type (type));
2218
2219   if (!raw_name)
2220     return NULL;
2221
2222   name = (char *) alloca (strlen (raw_name) + 1);
2223   tail = strstr (raw_name, "___XP");
2224   type = desc_base_type (type);
2225
2226   memcpy (name, raw_name, tail - raw_name);
2227   name[tail - raw_name] = '\000';
2228
2229   shadow_type = ada_find_parallel_type_with_name (type, name);
2230
2231   if (shadow_type == NULL)
2232     {
2233       lim_warning (_("could not find bounds information on packed array"));
2234       return NULL;
2235     }
2236   CHECK_TYPEDEF (shadow_type);
2237
2238   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2239     {
2240       lim_warning (_("could not understand bounds "
2241                      "information on packed array"));
2242       return NULL;
2243     }
2244
2245   bits = decode_packed_array_bitsize (type);
2246   return constrained_packed_array_type (shadow_type, &bits);
2247 }
2248
2249 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2250    array, returns a simple array that denotes that array.  Its type is a
2251    standard GDB array type except that the BITSIZEs of the array
2252    target types are set to the number of bits in each element, and the
2253    type length is set appropriately.  */
2254
2255 static struct value *
2256 decode_constrained_packed_array (struct value *arr)
2257 {
2258   struct type *type;
2259
2260   /* If our value is a pointer, then dereference it. Likewise if
2261      the value is a reference.  Make sure that this operation does not
2262      cause the target type to be fixed, as this would indirectly cause
2263      this array to be decoded.  The rest of the routine assumes that
2264      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2265      and "value_ind" routines to perform the dereferencing, as opposed
2266      to using "ada_coerce_ref" or "ada_value_ind".  */
2267   arr = coerce_ref (arr);
2268   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2269     arr = value_ind (arr);
2270
2271   type = decode_constrained_packed_array_type (value_type (arr));
2272   if (type == NULL)
2273     {
2274       error (_("can't unpack array"));
2275       return NULL;
2276     }
2277
2278   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2279       && ada_is_modular_type (value_type (arr)))
2280     {
2281        /* This is a (right-justified) modular type representing a packed
2282          array with no wrapper.  In order to interpret the value through
2283          the (left-justified) packed array type we just built, we must
2284          first left-justify it.  */
2285       int bit_size, bit_pos;
2286       ULONGEST mod;
2287
2288       mod = ada_modulus (value_type (arr)) - 1;
2289       bit_size = 0;
2290       while (mod > 0)
2291         {
2292           bit_size += 1;
2293           mod >>= 1;
2294         }
2295       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2296       arr = ada_value_primitive_packed_val (arr, NULL,
2297                                             bit_pos / HOST_CHAR_BIT,
2298                                             bit_pos % HOST_CHAR_BIT,
2299                                             bit_size,
2300                                             type);
2301     }
2302
2303   return coerce_unspec_val_to_type (arr, type);
2304 }
2305
2306
2307 /* The value of the element of packed array ARR at the ARITY indices
2308    given in IND.   ARR must be a simple array.  */
2309
2310 static struct value *
2311 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2312 {
2313   int i;
2314   int bits, elt_off, bit_off;
2315   long elt_total_bit_offset;
2316   struct type *elt_type;
2317   struct value *v;
2318
2319   bits = 0;
2320   elt_total_bit_offset = 0;
2321   elt_type = ada_check_typedef (value_type (arr));
2322   for (i = 0; i < arity; i += 1)
2323     {
2324       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2325           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2326         error
2327           (_("attempt to do packed indexing of "
2328              "something other than a packed array"));
2329       else
2330         {
2331           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2332           LONGEST lowerbound, upperbound;
2333           LONGEST idx;
2334
2335           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2336             {
2337               lim_warning (_("don't know bounds of array"));
2338               lowerbound = upperbound = 0;
2339             }
2340
2341           idx = pos_atr (ind[i]);
2342           if (idx < lowerbound || idx > upperbound)
2343             lim_warning (_("packed array index %ld out of bounds"),
2344                          (long) idx);
2345           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2346           elt_total_bit_offset += (idx - lowerbound) * bits;
2347           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2348         }
2349     }
2350   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2351   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2352
2353   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2354                                       bits, elt_type);
2355   return v;
2356 }
2357
2358 /* Non-zero iff TYPE includes negative integer values.  */
2359
2360 static int
2361 has_negatives (struct type *type)
2362 {
2363   switch (TYPE_CODE (type))
2364     {
2365     default:
2366       return 0;
2367     case TYPE_CODE_INT:
2368       return !TYPE_UNSIGNED (type);
2369     case TYPE_CODE_RANGE:
2370       return TYPE_LOW_BOUND (type) < 0;
2371     }
2372 }
2373
2374
2375 /* Create a new value of type TYPE from the contents of OBJ starting
2376    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2377    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2378    assigning through the result will set the field fetched from.
2379    VALADDR is ignored unless OBJ is NULL, in which case,
2380    VALADDR+OFFSET must address the start of storage containing the 
2381    packed value.  The value returned  in this case is never an lval.
2382    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2383
2384 struct value *
2385 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2386                                 long offset, int bit_offset, int bit_size,
2387                                 struct type *type)
2388 {
2389   struct value *v;
2390   int src,                      /* Index into the source area */
2391     targ,                       /* Index into the target area */
2392     srcBitsLeft,                /* Number of source bits left to move */
2393     nsrc, ntarg,                /* Number of source and target bytes */
2394     unusedLS,                   /* Number of bits in next significant
2395                                    byte of source that are unused */
2396     accumSize;                  /* Number of meaningful bits in accum */
2397   unsigned char *bytes;         /* First byte containing data to unpack */
2398   unsigned char *unpacked;
2399   unsigned long accum;          /* Staging area for bits being transferred */
2400   unsigned char sign;
2401   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2402   /* Transmit bytes from least to most significant; delta is the direction
2403      the indices move.  */
2404   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2405
2406   type = ada_check_typedef (type);
2407
2408   if (obj == NULL)
2409     {
2410       v = allocate_value (type);
2411       bytes = (unsigned char *) (valaddr + offset);
2412     }
2413   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2414     {
2415       v = value_at (type, value_address (obj));
2416       type = value_type (v);
2417       bytes = (unsigned char *) alloca (len);
2418       read_memory (value_address (v) + offset, bytes, len);
2419     }
2420   else
2421     {
2422       v = allocate_value (type);
2423       bytes = (unsigned char *) value_contents (obj) + offset;
2424     }
2425
2426   if (obj != NULL)
2427     {
2428       long new_offset = offset;
2429
2430       set_value_component_location (v, obj);
2431       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2432       set_value_bitsize (v, bit_size);
2433       if (value_bitpos (v) >= HOST_CHAR_BIT)
2434         {
2435           ++new_offset;
2436           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2437         }
2438       set_value_offset (v, new_offset);
2439
2440       /* Also set the parent value.  This is needed when trying to
2441          assign a new value (in inferior memory).  */
2442       set_value_parent (v, obj);
2443     }
2444   else
2445     set_value_bitsize (v, bit_size);
2446   unpacked = (unsigned char *) value_contents (v);
2447
2448   srcBitsLeft = bit_size;
2449   nsrc = len;
2450   ntarg = TYPE_LENGTH (type);
2451   sign = 0;
2452   if (bit_size == 0)
2453     {
2454       memset (unpacked, 0, TYPE_LENGTH (type));
2455       return v;
2456     }
2457   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2458     {
2459       src = len - 1;
2460       if (has_negatives (type)
2461           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2462         sign = ~0;
2463
2464       unusedLS =
2465         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2466         % HOST_CHAR_BIT;
2467
2468       switch (TYPE_CODE (type))
2469         {
2470         case TYPE_CODE_ARRAY:
2471         case TYPE_CODE_UNION:
2472         case TYPE_CODE_STRUCT:
2473           /* Non-scalar values must be aligned at a byte boundary...  */
2474           accumSize =
2475             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2476           /* ... And are placed at the beginning (most-significant) bytes
2477              of the target.  */
2478           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2479           ntarg = targ + 1;
2480           break;
2481         default:
2482           accumSize = 0;
2483           targ = TYPE_LENGTH (type) - 1;
2484           break;
2485         }
2486     }
2487   else
2488     {
2489       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2490
2491       src = targ = 0;
2492       unusedLS = bit_offset;
2493       accumSize = 0;
2494
2495       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2496         sign = ~0;
2497     }
2498
2499   accum = 0;
2500   while (nsrc > 0)
2501     {
2502       /* Mask for removing bits of the next source byte that are not
2503          part of the value.  */
2504       unsigned int unusedMSMask =
2505         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2506         1;
2507       /* Sign-extend bits for this byte.  */
2508       unsigned int signMask = sign & ~unusedMSMask;
2509
2510       accum |=
2511         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2512       accumSize += HOST_CHAR_BIT - unusedLS;
2513       if (accumSize >= HOST_CHAR_BIT)
2514         {
2515           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2516           accumSize -= HOST_CHAR_BIT;
2517           accum >>= HOST_CHAR_BIT;
2518           ntarg -= 1;
2519           targ += delta;
2520         }
2521       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2522       unusedLS = 0;
2523       nsrc -= 1;
2524       src += delta;
2525     }
2526   while (ntarg > 0)
2527     {
2528       accum |= sign << accumSize;
2529       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2530       accumSize -= HOST_CHAR_BIT;
2531       accum >>= HOST_CHAR_BIT;
2532       ntarg -= 1;
2533       targ += delta;
2534     }
2535
2536   return v;
2537 }
2538
2539 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2540    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2541    not overlap.  */
2542 static void
2543 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2544            int src_offset, int n, int bits_big_endian_p)
2545 {
2546   unsigned int accum, mask;
2547   int accum_bits, chunk_size;
2548
2549   target += targ_offset / HOST_CHAR_BIT;
2550   targ_offset %= HOST_CHAR_BIT;
2551   source += src_offset / HOST_CHAR_BIT;
2552   src_offset %= HOST_CHAR_BIT;
2553   if (bits_big_endian_p)
2554     {
2555       accum = (unsigned char) *source;
2556       source += 1;
2557       accum_bits = HOST_CHAR_BIT - src_offset;
2558
2559       while (n > 0)
2560         {
2561           int unused_right;
2562
2563           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2564           accum_bits += HOST_CHAR_BIT;
2565           source += 1;
2566           chunk_size = HOST_CHAR_BIT - targ_offset;
2567           if (chunk_size > n)
2568             chunk_size = n;
2569           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2570           mask = ((1 << chunk_size) - 1) << unused_right;
2571           *target =
2572             (*target & ~mask)
2573             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2574           n -= chunk_size;
2575           accum_bits -= chunk_size;
2576           target += 1;
2577           targ_offset = 0;
2578         }
2579     }
2580   else
2581     {
2582       accum = (unsigned char) *source >> src_offset;
2583       source += 1;
2584       accum_bits = HOST_CHAR_BIT - src_offset;
2585
2586       while (n > 0)
2587         {
2588           accum = accum + ((unsigned char) *source << accum_bits);
2589           accum_bits += HOST_CHAR_BIT;
2590           source += 1;
2591           chunk_size = HOST_CHAR_BIT - targ_offset;
2592           if (chunk_size > n)
2593             chunk_size = n;
2594           mask = ((1 << chunk_size) - 1) << targ_offset;
2595           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2596           n -= chunk_size;
2597           accum_bits -= chunk_size;
2598           accum >>= chunk_size;
2599           target += 1;
2600           targ_offset = 0;
2601         }
2602     }
2603 }
2604
2605 /* Store the contents of FROMVAL into the location of TOVAL.
2606    Return a new value with the location of TOVAL and contents of
2607    FROMVAL.   Handles assignment into packed fields that have
2608    floating-point or non-scalar types.  */
2609
2610 static struct value *
2611 ada_value_assign (struct value *toval, struct value *fromval)
2612 {
2613   struct type *type = value_type (toval);
2614   int bits = value_bitsize (toval);
2615
2616   toval = ada_coerce_ref (toval);
2617   fromval = ada_coerce_ref (fromval);
2618
2619   if (ada_is_direct_array_type (value_type (toval)))
2620     toval = ada_coerce_to_simple_array (toval);
2621   if (ada_is_direct_array_type (value_type (fromval)))
2622     fromval = ada_coerce_to_simple_array (fromval);
2623
2624   if (!deprecated_value_modifiable (toval))
2625     error (_("Left operand of assignment is not a modifiable lvalue."));
2626
2627   if (VALUE_LVAL (toval) == lval_memory
2628       && bits > 0
2629       && (TYPE_CODE (type) == TYPE_CODE_FLT
2630           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2631     {
2632       int len = (value_bitpos (toval)
2633                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2634       int from_size;
2635       gdb_byte *buffer = alloca (len);
2636       struct value *val;
2637       CORE_ADDR to_addr = value_address (toval);
2638
2639       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2640         fromval = value_cast (type, fromval);
2641
2642       read_memory (to_addr, buffer, len);
2643       from_size = value_bitsize (fromval);
2644       if (from_size == 0)
2645         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2646       if (gdbarch_bits_big_endian (get_type_arch (type)))
2647         move_bits (buffer, value_bitpos (toval),
2648                    value_contents (fromval), from_size - bits, bits, 1);
2649       else
2650         move_bits (buffer, value_bitpos (toval),
2651                    value_contents (fromval), 0, bits, 0);
2652       write_memory_with_notification (to_addr, buffer, len);
2653
2654       val = value_copy (toval);
2655       memcpy (value_contents_raw (val), value_contents (fromval),
2656               TYPE_LENGTH (type));
2657       deprecated_set_value_type (val, type);
2658
2659       return val;
2660     }
2661
2662   return value_assign (toval, fromval);
2663 }
2664
2665
2666 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2667  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2668  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2669  * COMPONENT, and not the inferior's memory.  The current contents 
2670  * of COMPONENT are ignored.  */
2671 static void
2672 value_assign_to_component (struct value *container, struct value *component,
2673                            struct value *val)
2674 {
2675   LONGEST offset_in_container =
2676     (LONGEST)  (value_address (component) - value_address (container));
2677   int bit_offset_in_container = 
2678     value_bitpos (component) - value_bitpos (container);
2679   int bits;
2680   
2681   val = value_cast (value_type (component), val);
2682
2683   if (value_bitsize (component) == 0)
2684     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2685   else
2686     bits = value_bitsize (component);
2687
2688   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2689     move_bits (value_contents_writeable (container) + offset_in_container, 
2690                value_bitpos (container) + bit_offset_in_container,
2691                value_contents (val),
2692                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2693                bits, 1);
2694   else
2695     move_bits (value_contents_writeable (container) + offset_in_container, 
2696                value_bitpos (container) + bit_offset_in_container,
2697                value_contents (val), 0, bits, 0);
2698 }              
2699                         
2700 /* The value of the element of array ARR at the ARITY indices given in IND.
2701    ARR may be either a simple array, GNAT array descriptor, or pointer
2702    thereto.  */
2703
2704 struct value *
2705 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2706 {
2707   int k;
2708   struct value *elt;
2709   struct type *elt_type;
2710
2711   elt = ada_coerce_to_simple_array (arr);
2712
2713   elt_type = ada_check_typedef (value_type (elt));
2714   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2715       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2716     return value_subscript_packed (elt, arity, ind);
2717
2718   for (k = 0; k < arity; k += 1)
2719     {
2720       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2721         error (_("too many subscripts (%d expected)"), k);
2722       elt = value_subscript (elt, pos_atr (ind[k]));
2723     }
2724   return elt;
2725 }
2726
2727 /* Assuming ARR is a pointer to a GDB array, the value of the element
2728    of *ARR at the ARITY indices given in IND.
2729    Does not read the entire array into memory.  */
2730
2731 static struct value *
2732 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2733 {
2734   int k;
2735   struct type *type
2736     = check_typedef (value_enclosing_type (ada_value_ind (arr)));
2737
2738   for (k = 0; k < arity; k += 1)
2739     {
2740       LONGEST lwb, upb;
2741
2742       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2743         error (_("too many subscripts (%d expected)"), k);
2744       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2745                         value_copy (arr));
2746       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2747       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2748       type = TYPE_TARGET_TYPE (type);
2749     }
2750
2751   return value_ind (arr);
2752 }
2753
2754 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2755    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2756    elements starting at index LOW.  The lower bound of this array is LOW, as
2757    per Ada rules.  */
2758 static struct value *
2759 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2760                           int low, int high)
2761 {
2762   struct type *type0 = ada_check_typedef (type);
2763   CORE_ADDR base = value_as_address (array_ptr)
2764     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2765        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2766   struct type *index_type
2767     = create_static_range_type (NULL,
2768                                 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2769                                 low, high);
2770   struct type *slice_type =
2771     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2772
2773   return value_at_lazy (slice_type, base);
2774 }
2775
2776
2777 static struct value *
2778 ada_value_slice (struct value *array, int low, int high)
2779 {
2780   struct type *type = ada_check_typedef (value_type (array));
2781   struct type *index_type
2782     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2783   struct type *slice_type =
2784     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2785
2786   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2787 }
2788
2789 /* If type is a record type in the form of a standard GNAT array
2790    descriptor, returns the number of dimensions for type.  If arr is a
2791    simple array, returns the number of "array of"s that prefix its
2792    type designation.  Otherwise, returns 0.  */
2793
2794 int
2795 ada_array_arity (struct type *type)
2796 {
2797   int arity;
2798
2799   if (type == NULL)
2800     return 0;
2801
2802   type = desc_base_type (type);
2803
2804   arity = 0;
2805   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2806     return desc_arity (desc_bounds_type (type));
2807   else
2808     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2809       {
2810         arity += 1;
2811         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2812       }
2813
2814   return arity;
2815 }
2816
2817 /* If TYPE is a record type in the form of a standard GNAT array
2818    descriptor or a simple array type, returns the element type for
2819    TYPE after indexing by NINDICES indices, or by all indices if
2820    NINDICES is -1.  Otherwise, returns NULL.  */
2821
2822 struct type *
2823 ada_array_element_type (struct type *type, int nindices)
2824 {
2825   type = desc_base_type (type);
2826
2827   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2828     {
2829       int k;
2830       struct type *p_array_type;
2831
2832       p_array_type = desc_data_target_type (type);
2833
2834       k = ada_array_arity (type);
2835       if (k == 0)
2836         return NULL;
2837
2838       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2839       if (nindices >= 0 && k > nindices)
2840         k = nindices;
2841       while (k > 0 && p_array_type != NULL)
2842         {
2843           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2844           k -= 1;
2845         }
2846       return p_array_type;
2847     }
2848   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2849     {
2850       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2851         {
2852           type = TYPE_TARGET_TYPE (type);
2853           nindices -= 1;
2854         }
2855       return type;
2856     }
2857
2858   return NULL;
2859 }
2860
2861 /* The type of nth index in arrays of given type (n numbering from 1).
2862    Does not examine memory.  Throws an error if N is invalid or TYPE
2863    is not an array type.  NAME is the name of the Ada attribute being
2864    evaluated ('range, 'first, 'last, or 'length); it is used in building
2865    the error message.  */
2866
2867 static struct type *
2868 ada_index_type (struct type *type, int n, const char *name)
2869 {
2870   struct type *result_type;
2871
2872   type = desc_base_type (type);
2873
2874   if (n < 0 || n > ada_array_arity (type))
2875     error (_("invalid dimension number to '%s"), name);
2876
2877   if (ada_is_simple_array_type (type))
2878     {
2879       int i;
2880
2881       for (i = 1; i < n; i += 1)
2882         type = TYPE_TARGET_TYPE (type);
2883       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2884       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2885          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2886          perhaps stabsread.c would make more sense.  */
2887       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2888         result_type = NULL;
2889     }
2890   else
2891     {
2892       result_type = desc_index_type (desc_bounds_type (type), n);
2893       if (result_type == NULL)
2894         error (_("attempt to take bound of something that is not an array"));
2895     }
2896
2897   return result_type;
2898 }
2899
2900 /* Given that arr is an array type, returns the lower bound of the
2901    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2902    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2903    array-descriptor type.  It works for other arrays with bounds supplied
2904    by run-time quantities other than discriminants.  */
2905
2906 static LONGEST
2907 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2908 {
2909   struct type *type, *index_type_desc, *index_type;
2910   int i;
2911
2912   gdb_assert (which == 0 || which == 1);
2913
2914   if (ada_is_constrained_packed_array_type (arr_type))
2915     arr_type = decode_constrained_packed_array_type (arr_type);
2916
2917   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2918     return (LONGEST) - which;
2919
2920   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2921     type = TYPE_TARGET_TYPE (arr_type);
2922   else
2923     type = arr_type;
2924
2925   index_type_desc = ada_find_parallel_type (type, "___XA");
2926   ada_fixup_array_indexes_type (index_type_desc);
2927   if (index_type_desc != NULL)
2928     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2929                                       NULL);
2930   else
2931     {
2932       struct type *elt_type = check_typedef (type);
2933
2934       for (i = 1; i < n; i++)
2935         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2936
2937       index_type = TYPE_INDEX_TYPE (elt_type);
2938     }
2939
2940   return
2941     (LONGEST) (which == 0
2942                ? ada_discrete_type_low_bound (index_type)
2943                : ada_discrete_type_high_bound (index_type));
2944 }
2945
2946 /* Given that arr is an array value, returns the lower bound of the
2947    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2948    WHICH is 1.  This routine will also work for arrays with bounds
2949    supplied by run-time quantities other than discriminants.  */
2950
2951 static LONGEST
2952 ada_array_bound (struct value *arr, int n, int which)
2953 {
2954   struct type *arr_type;
2955
2956   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2957     arr = value_ind (arr);
2958   arr_type = value_enclosing_type (arr);
2959
2960   if (ada_is_constrained_packed_array_type (arr_type))
2961     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2962   else if (ada_is_simple_array_type (arr_type))
2963     return ada_array_bound_from_type (arr_type, n, which);
2964   else
2965     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2966 }
2967
2968 /* Given that arr is an array value, returns the length of the
2969    nth index.  This routine will also work for arrays with bounds
2970    supplied by run-time quantities other than discriminants.
2971    Does not work for arrays indexed by enumeration types with representation
2972    clauses at the moment.  */
2973
2974 static LONGEST
2975 ada_array_length (struct value *arr, int n)
2976 {
2977   struct type *arr_type;
2978
2979   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2980     arr = value_ind (arr);
2981   arr_type = value_enclosing_type (arr);
2982
2983   if (ada_is_constrained_packed_array_type (arr_type))
2984     return ada_array_length (decode_constrained_packed_array (arr), n);
2985
2986   if (ada_is_simple_array_type (arr_type))
2987     return (ada_array_bound_from_type (arr_type, n, 1)
2988             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2989   else
2990     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2991             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2992 }
2993
2994 /* An empty array whose type is that of ARR_TYPE (an array type),
2995    with bounds LOW to LOW-1.  */
2996
2997 static struct value *
2998 empty_array (struct type *arr_type, int low)
2999 {
3000   struct type *arr_type0 = ada_check_typedef (arr_type);
3001   struct type *index_type
3002     = create_static_range_type
3003         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
3004   struct type *elt_type = ada_array_element_type (arr_type0, 1);
3005
3006   return allocate_value (create_array_type (NULL, elt_type, index_type));
3007 }
3008 \f
3009
3010                                 /* Name resolution */
3011
3012 /* The "decoded" name for the user-definable Ada operator corresponding
3013    to OP.  */
3014
3015 static const char *
3016 ada_decoded_op_name (enum exp_opcode op)
3017 {
3018   int i;
3019
3020   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3021     {
3022       if (ada_opname_table[i].op == op)
3023         return ada_opname_table[i].decoded;
3024     }
3025   error (_("Could not find operator name for opcode"));
3026 }
3027
3028
3029 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3030    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3031    undefined namespace) and converts operators that are
3032    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3033    non-null, it provides a preferred result type [at the moment, only
3034    type void has any effect---causing procedures to be preferred over
3035    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3036    return type is preferred.  May change (expand) *EXP.  */
3037
3038 static void
3039 resolve (struct expression **expp, int void_context_p)
3040 {
3041   struct type *context_type = NULL;
3042   int pc = 0;
3043
3044   if (void_context_p)
3045     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3046
3047   resolve_subexp (expp, &pc, 1, context_type);
3048 }
3049
3050 /* Resolve the operator of the subexpression beginning at
3051    position *POS of *EXPP.  "Resolving" consists of replacing
3052    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3053    with their resolutions, replacing built-in operators with
3054    function calls to user-defined operators, where appropriate, and,
3055    when DEPROCEDURE_P is non-zero, converting function-valued variables
3056    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3057    are as in ada_resolve, above.  */
3058
3059 static struct value *
3060 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3061                 struct type *context_type)
3062 {
3063   int pc = *pos;
3064   int i;
3065   struct expression *exp;       /* Convenience: == *expp.  */
3066   enum exp_opcode op = (*expp)->elts[pc].opcode;
3067   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3068   int nargs;                    /* Number of operands.  */
3069   int oplen;
3070
3071   argvec = NULL;
3072   nargs = 0;
3073   exp = *expp;
3074
3075   /* Pass one: resolve operands, saving their types and updating *pos,
3076      if needed.  */
3077   switch (op)
3078     {
3079     case OP_FUNCALL:
3080       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3081           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3082         *pos += 7;
3083       else
3084         {
3085           *pos += 3;
3086           resolve_subexp (expp, pos, 0, NULL);
3087         }
3088       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3089       break;
3090
3091     case UNOP_ADDR:
3092       *pos += 1;
3093       resolve_subexp (expp, pos, 0, NULL);
3094       break;
3095
3096     case UNOP_QUAL:
3097       *pos += 3;
3098       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3099       break;
3100
3101     case OP_ATR_MODULUS:
3102     case OP_ATR_SIZE:
3103     case OP_ATR_TAG:
3104     case OP_ATR_FIRST:
3105     case OP_ATR_LAST:
3106     case OP_ATR_LENGTH:
3107     case OP_ATR_POS:
3108     case OP_ATR_VAL:
3109     case OP_ATR_MIN:
3110     case OP_ATR_MAX:
3111     case TERNOP_IN_RANGE:
3112     case BINOP_IN_BOUNDS:
3113     case UNOP_IN_RANGE:
3114     case OP_AGGREGATE:
3115     case OP_OTHERS:
3116     case OP_CHOICES:
3117     case OP_POSITIONAL:
3118     case OP_DISCRETE_RANGE:
3119     case OP_NAME:
3120       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3121       *pos += oplen;
3122       break;
3123
3124     case BINOP_ASSIGN:
3125       {
3126         struct value *arg1;
3127
3128         *pos += 1;
3129         arg1 = resolve_subexp (expp, pos, 0, NULL);
3130         if (arg1 == NULL)
3131           resolve_subexp (expp, pos, 1, NULL);
3132         else
3133           resolve_subexp (expp, pos, 1, value_type (arg1));
3134         break;
3135       }
3136
3137     case UNOP_CAST:
3138       *pos += 3;
3139       nargs = 1;
3140       break;
3141
3142     case BINOP_ADD:
3143     case BINOP_SUB:
3144     case BINOP_MUL:
3145     case BINOP_DIV:
3146     case BINOP_REM:
3147     case BINOP_MOD:
3148     case BINOP_EXP:
3149     case BINOP_CONCAT:
3150     case BINOP_LOGICAL_AND:
3151     case BINOP_LOGICAL_OR:
3152     case BINOP_BITWISE_AND:
3153     case BINOP_BITWISE_IOR:
3154     case BINOP_BITWISE_XOR:
3155
3156     case BINOP_EQUAL:
3157     case BINOP_NOTEQUAL:
3158     case BINOP_LESS:
3159     case BINOP_GTR:
3160     case BINOP_LEQ:
3161     case BINOP_GEQ:
3162
3163     case BINOP_REPEAT:
3164     case BINOP_SUBSCRIPT:
3165     case BINOP_COMMA:
3166       *pos += 1;
3167       nargs = 2;
3168       break;
3169
3170     case UNOP_NEG:
3171     case UNOP_PLUS:
3172     case UNOP_LOGICAL_NOT:
3173     case UNOP_ABS:
3174     case UNOP_IND:
3175       *pos += 1;
3176       nargs = 1;
3177       break;
3178
3179     case OP_LONG:
3180     case OP_DOUBLE:
3181     case OP_VAR_VALUE:
3182       *pos += 4;
3183       break;
3184
3185     case OP_TYPE:
3186     case OP_BOOL:
3187     case OP_LAST:
3188     case OP_INTERNALVAR:
3189       *pos += 3;
3190       break;
3191
3192     case UNOP_MEMVAL:
3193       *pos += 3;
3194       nargs = 1;
3195       break;
3196
3197     case OP_REGISTER:
3198       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3199       break;
3200
3201     case STRUCTOP_STRUCT:
3202       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3203       nargs = 1;
3204       break;
3205
3206     case TERNOP_SLICE:
3207       *pos += 1;
3208       nargs = 3;
3209       break;
3210
3211     case OP_STRING:
3212       break;
3213
3214     default:
3215       error (_("Unexpected operator during name resolution"));
3216     }
3217
3218   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3219   for (i = 0; i < nargs; i += 1)
3220     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3221   argvec[i] = NULL;
3222   exp = *expp;
3223
3224   /* Pass two: perform any resolution on principal operator.  */
3225   switch (op)
3226     {
3227     default:
3228       break;
3229
3230     case OP_VAR_VALUE:
3231       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3232         {
3233           struct ada_symbol_info *candidates;
3234           int n_candidates;
3235
3236           n_candidates =
3237             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3238                                     (exp->elts[pc + 2].symbol),
3239                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3240                                     &candidates);
3241
3242           if (n_candidates > 1)
3243             {
3244               /* Types tend to get re-introduced locally, so if there
3245                  are any local symbols that are not types, first filter
3246                  out all types.  */
3247               int j;
3248               for (j = 0; j < n_candidates; j += 1)
3249                 switch (SYMBOL_CLASS (candidates[j].sym))
3250                   {
3251                   case LOC_REGISTER:
3252                   case LOC_ARG:
3253                   case LOC_REF_ARG:
3254                   case LOC_REGPARM_ADDR:
3255                   case LOC_LOCAL:
3256                   case LOC_COMPUTED:
3257                     goto FoundNonType;
3258                   default:
3259                     break;
3260                   }
3261             FoundNonType:
3262               if (j < n_candidates)
3263                 {
3264                   j = 0;
3265                   while (j < n_candidates)
3266                     {
3267                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3268                         {
3269                           candidates[j] = candidates[n_candidates - 1];
3270                           n_candidates -= 1;
3271                         }
3272                       else
3273                         j += 1;
3274                     }
3275                 }
3276             }
3277
3278           if (n_candidates == 0)
3279             error (_("No definition found for %s"),
3280                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3281           else if (n_candidates == 1)
3282             i = 0;
3283           else if (deprocedure_p
3284                    && !is_nonfunction (candidates, n_candidates))
3285             {
3286               i = ada_resolve_function
3287                 (candidates, n_candidates, NULL, 0,
3288                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3289                  context_type);
3290               if (i < 0)
3291                 error (_("Could not find a match for %s"),
3292                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3293             }
3294           else
3295             {
3296               printf_filtered (_("Multiple matches for %s\n"),
3297                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3298               user_select_syms (candidates, n_candidates, 1);
3299               i = 0;
3300             }
3301
3302           exp->elts[pc + 1].block = candidates[i].block;
3303           exp->elts[pc + 2].symbol = candidates[i].sym;
3304           if (innermost_block == NULL
3305               || contained_in (candidates[i].block, innermost_block))
3306             innermost_block = candidates[i].block;
3307         }
3308
3309       if (deprocedure_p
3310           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3311               == TYPE_CODE_FUNC))
3312         {
3313           replace_operator_with_call (expp, pc, 0, 0,
3314                                       exp->elts[pc + 2].symbol,
3315                                       exp->elts[pc + 1].block);
3316           exp = *expp;
3317         }
3318       break;
3319
3320     case OP_FUNCALL:
3321       {
3322         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3323             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3324           {
3325             struct ada_symbol_info *candidates;
3326             int n_candidates;
3327
3328             n_candidates =
3329               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3330                                       (exp->elts[pc + 5].symbol),
3331                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3332                                       &candidates);
3333             if (n_candidates == 1)
3334               i = 0;
3335             else
3336               {
3337                 i = ada_resolve_function
3338                   (candidates, n_candidates,
3339                    argvec, nargs,
3340                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3341                    context_type);
3342                 if (i < 0)
3343                   error (_("Could not find a match for %s"),
3344                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3345               }
3346
3347             exp->elts[pc + 4].block = candidates[i].block;
3348             exp->elts[pc + 5].symbol = candidates[i].sym;
3349             if (innermost_block == NULL
3350                 || contained_in (candidates[i].block, innermost_block))
3351               innermost_block = candidates[i].block;
3352           }
3353       }
3354       break;
3355     case BINOP_ADD:
3356     case BINOP_SUB:
3357     case BINOP_MUL:
3358     case BINOP_DIV:
3359     case BINOP_REM:
3360     case BINOP_MOD:
3361     case BINOP_CONCAT:
3362     case BINOP_BITWISE_AND:
3363     case BINOP_BITWISE_IOR:
3364     case BINOP_BITWISE_XOR:
3365     case BINOP_EQUAL:
3366     case BINOP_NOTEQUAL:
3367     case BINOP_LESS:
3368     case BINOP_GTR:
3369     case BINOP_LEQ:
3370     case BINOP_GEQ:
3371     case BINOP_EXP:
3372     case UNOP_NEG:
3373     case UNOP_PLUS:
3374     case UNOP_LOGICAL_NOT:
3375     case UNOP_ABS:
3376       if (possible_user_operator_p (op, argvec))
3377         {
3378           struct ada_symbol_info *candidates;
3379           int n_candidates;
3380
3381           n_candidates =
3382             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3383                                     (struct block *) NULL, VAR_DOMAIN,
3384                                     &candidates);
3385           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3386                                     ada_decoded_op_name (op), NULL);
3387           if (i < 0)
3388             break;
3389
3390           replace_operator_with_call (expp, pc, nargs, 1,
3391                                       candidates[i].sym, candidates[i].block);
3392           exp = *expp;
3393         }
3394       break;
3395
3396     case OP_TYPE:
3397     case OP_REGISTER:
3398       return NULL;
3399     }
3400
3401   *pos = pc;
3402   return evaluate_subexp_type (exp, pos);
3403 }
3404
3405 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3406    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3407    a non-pointer.  */
3408 /* The term "match" here is rather loose.  The match is heuristic and
3409    liberal.  */
3410
3411 static int
3412 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3413 {
3414   ftype = ada_check_typedef (ftype);
3415   atype = ada_check_typedef (atype);
3416
3417   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3418     ftype = TYPE_TARGET_TYPE (ftype);
3419   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3420     atype = TYPE_TARGET_TYPE (atype);
3421
3422   switch (TYPE_CODE (ftype))
3423     {
3424     default:
3425       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3426     case TYPE_CODE_PTR:
3427       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3428         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3429                                TYPE_TARGET_TYPE (atype), 0);
3430       else
3431         return (may_deref
3432                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3433     case TYPE_CODE_INT:
3434     case TYPE_CODE_ENUM:
3435     case TYPE_CODE_RANGE:
3436       switch (TYPE_CODE (atype))
3437         {
3438         case TYPE_CODE_INT:
3439         case TYPE_CODE_ENUM:
3440         case TYPE_CODE_RANGE:
3441           return 1;
3442         default:
3443           return 0;
3444         }
3445
3446     case TYPE_CODE_ARRAY:
3447       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3448               || ada_is_array_descriptor_type (atype));
3449
3450     case TYPE_CODE_STRUCT:
3451       if (ada_is_array_descriptor_type (ftype))
3452         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3453                 || ada_is_array_descriptor_type (atype));
3454       else
3455         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3456                 && !ada_is_array_descriptor_type (atype));
3457
3458     case TYPE_CODE_UNION:
3459     case TYPE_CODE_FLT:
3460       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3461     }
3462 }
3463
3464 /* Return non-zero if the formals of FUNC "sufficiently match" the
3465    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3466    may also be an enumeral, in which case it is treated as a 0-
3467    argument function.  */
3468
3469 static int
3470 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3471 {
3472   int i;
3473   struct type *func_type = SYMBOL_TYPE (func);
3474
3475   if (SYMBOL_CLASS (func) == LOC_CONST
3476       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3477     return (n_actuals == 0);
3478   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3479     return 0;
3480
3481   if (TYPE_NFIELDS (func_type) != n_actuals)
3482     return 0;
3483
3484   for (i = 0; i < n_actuals; i += 1)
3485     {
3486       if (actuals[i] == NULL)
3487         return 0;
3488       else
3489         {
3490           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3491                                                                    i));
3492           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3493
3494           if (!ada_type_match (ftype, atype, 1))
3495             return 0;
3496         }
3497     }
3498   return 1;
3499 }
3500
3501 /* False iff function type FUNC_TYPE definitely does not produce a value
3502    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3503    FUNC_TYPE is not a valid function type with a non-null return type
3504    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3505
3506 static int
3507 return_match (struct type *func_type, struct type *context_type)
3508 {
3509   struct type *return_type;
3510
3511   if (func_type == NULL)
3512     return 1;
3513
3514   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3515     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3516   else
3517     return_type = get_base_type (func_type);
3518   if (return_type == NULL)
3519     return 1;
3520
3521   context_type = get_base_type (context_type);
3522
3523   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3524     return context_type == NULL || return_type == context_type;
3525   else if (context_type == NULL)
3526     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3527   else
3528     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3529 }
3530
3531
3532 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3533    function (if any) that matches the types of the NARGS arguments in
3534    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3535    that returns that type, then eliminate matches that don't.  If
3536    CONTEXT_TYPE is void and there is at least one match that does not
3537    return void, eliminate all matches that do.
3538
3539    Asks the user if there is more than one match remaining.  Returns -1
3540    if there is no such symbol or none is selected.  NAME is used
3541    solely for messages.  May re-arrange and modify SYMS in
3542    the process; the index returned is for the modified vector.  */
3543
3544 static int
3545 ada_resolve_function (struct ada_symbol_info syms[],
3546                       int nsyms, struct value **args, int nargs,
3547                       const char *name, struct type *context_type)
3548 {
3549   int fallback;
3550   int k;
3551   int m;                        /* Number of hits */
3552
3553   m = 0;
3554   /* In the first pass of the loop, we only accept functions matching
3555      context_type.  If none are found, we add a second pass of the loop
3556      where every function is accepted.  */
3557   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3558     {
3559       for (k = 0; k < nsyms; k += 1)
3560         {
3561           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3562
3563           if (ada_args_match (syms[k].sym, args, nargs)
3564               && (fallback || return_match (type, context_type)))
3565             {
3566               syms[m] = syms[k];
3567               m += 1;
3568             }
3569         }
3570     }
3571
3572   if (m == 0)
3573     return -1;
3574   else if (m > 1)
3575     {
3576       printf_filtered (_("Multiple matches for %s\n"), name);
3577       user_select_syms (syms, m, 1);
3578       return 0;
3579     }
3580   return 0;
3581 }
3582
3583 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3584    in a listing of choices during disambiguation (see sort_choices, below).
3585    The idea is that overloadings of a subprogram name from the
3586    same package should sort in their source order.  We settle for ordering
3587    such symbols by their trailing number (__N  or $N).  */
3588
3589 static int
3590 encoded_ordered_before (const char *N0, const char *N1)
3591 {
3592   if (N1 == NULL)
3593     return 0;
3594   else if (N0 == NULL)
3595     return 1;
3596   else
3597     {
3598       int k0, k1;
3599
3600       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3601         ;
3602       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3603         ;
3604       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3605           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3606         {
3607           int n0, n1;
3608
3609           n0 = k0;
3610           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3611             n0 -= 1;
3612           n1 = k1;
3613           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3614             n1 -= 1;
3615           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3616             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3617         }
3618       return (strcmp (N0, N1) < 0);
3619     }
3620 }
3621
3622 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3623    encoded names.  */
3624
3625 static void
3626 sort_choices (struct ada_symbol_info syms[], int nsyms)
3627 {
3628   int i;
3629
3630   for (i = 1; i < nsyms; i += 1)
3631     {
3632       struct ada_symbol_info sym = syms[i];
3633       int j;
3634
3635       for (j = i - 1; j >= 0; j -= 1)
3636         {
3637           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3638                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3639             break;
3640           syms[j + 1] = syms[j];
3641         }
3642       syms[j + 1] = sym;
3643     }
3644 }
3645
3646 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3647    by asking the user (if necessary), returning the number selected, 
3648    and setting the first elements of SYMS items.  Error if no symbols
3649    selected.  */
3650
3651 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3652    to be re-integrated one of these days.  */
3653
3654 int
3655 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3656 {
3657   int i;
3658   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3659   int n_chosen;
3660   int first_choice = (max_results == 1) ? 1 : 2;
3661   const char *select_mode = multiple_symbols_select_mode ();
3662
3663   if (max_results < 1)
3664     error (_("Request to select 0 symbols!"));
3665   if (nsyms <= 1)
3666     return nsyms;
3667
3668   if (select_mode == multiple_symbols_cancel)
3669     error (_("\
3670 canceled because the command is ambiguous\n\
3671 See set/show multiple-symbol."));
3672   
3673   /* If select_mode is "all", then return all possible symbols.
3674      Only do that if more than one symbol can be selected, of course.
3675      Otherwise, display the menu as usual.  */
3676   if (select_mode == multiple_symbols_all && max_results > 1)
3677     return nsyms;
3678
3679   printf_unfiltered (_("[0] cancel\n"));
3680   if (max_results > 1)
3681     printf_unfiltered (_("[1] all\n"));
3682
3683   sort_choices (syms, nsyms);
3684
3685   for (i = 0; i < nsyms; i += 1)
3686     {
3687       if (syms[i].sym == NULL)
3688         continue;
3689
3690       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3691         {
3692           struct symtab_and_line sal =
3693             find_function_start_sal (syms[i].sym, 1);
3694
3695           if (sal.symtab == NULL)
3696             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3697                                i + first_choice,
3698                                SYMBOL_PRINT_NAME (syms[i].sym),
3699                                sal.line);
3700           else
3701             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3702                                SYMBOL_PRINT_NAME (syms[i].sym),
3703                                symtab_to_filename_for_display (sal.symtab),
3704                                sal.line);
3705           continue;
3706         }
3707       else
3708         {
3709           int is_enumeral =
3710             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3711              && SYMBOL_TYPE (syms[i].sym) != NULL
3712              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3713           struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
3714
3715           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3716             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3717                                i + first_choice,
3718                                SYMBOL_PRINT_NAME (syms[i].sym),
3719                                symtab_to_filename_for_display (symtab),
3720                                SYMBOL_LINE (syms[i].sym));
3721           else if (is_enumeral
3722                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3723             {
3724               printf_unfiltered (("[%d] "), i + first_choice);
3725               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3726                               gdb_stdout, -1, 0, &type_print_raw_options);
3727               printf_unfiltered (_("'(%s) (enumeral)\n"),
3728                                  SYMBOL_PRINT_NAME (syms[i].sym));
3729             }
3730           else if (symtab != NULL)
3731             printf_unfiltered (is_enumeral
3732                                ? _("[%d] %s in %s (enumeral)\n")
3733                                : _("[%d] %s at %s:?\n"),
3734                                i + first_choice,
3735                                SYMBOL_PRINT_NAME (syms[i].sym),
3736                                symtab_to_filename_for_display (symtab));
3737           else
3738             printf_unfiltered (is_enumeral
3739                                ? _("[%d] %s (enumeral)\n")
3740                                : _("[%d] %s at ?\n"),
3741                                i + first_choice,
3742                                SYMBOL_PRINT_NAME (syms[i].sym));
3743         }
3744     }
3745
3746   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3747                              "overload-choice");
3748
3749   for (i = 0; i < n_chosen; i += 1)
3750     syms[i] = syms[chosen[i]];
3751
3752   return n_chosen;
3753 }
3754
3755 /* Read and validate a set of numeric choices from the user in the
3756    range 0 .. N_CHOICES-1.  Place the results in increasing
3757    order in CHOICES[0 .. N-1], and return N.
3758
3759    The user types choices as a sequence of numbers on one line
3760    separated by blanks, encoding them as follows:
3761
3762      + A choice of 0 means to cancel the selection, throwing an error.
3763      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3764      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3765
3766    The user is not allowed to choose more than MAX_RESULTS values.
3767
3768    ANNOTATION_SUFFIX, if present, is used to annotate the input
3769    prompts (for use with the -f switch).  */
3770
3771 int
3772 get_selections (int *choices, int n_choices, int max_results,
3773                 int is_all_choice, char *annotation_suffix)
3774 {
3775   char *args;
3776   char *prompt;
3777   int n_chosen;
3778   int first_choice = is_all_choice ? 2 : 1;
3779
3780   prompt = getenv ("PS2");
3781   if (prompt == NULL)
3782     prompt = "> ";
3783
3784   args = command_line_input (prompt, 0, annotation_suffix);
3785
3786   if (args == NULL)
3787     error_no_arg (_("one or more choice numbers"));
3788
3789   n_chosen = 0;
3790
3791   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3792      order, as given in args.  Choices are validated.  */
3793   while (1)
3794     {
3795       char *args2;
3796       int choice, j;
3797
3798       args = skip_spaces (args);
3799       if (*args == '\0' && n_chosen == 0)
3800         error_no_arg (_("one or more choice numbers"));
3801       else if (*args == '\0')
3802         break;
3803
3804       choice = strtol (args, &args2, 10);
3805       if (args == args2 || choice < 0
3806           || choice > n_choices + first_choice - 1)
3807         error (_("Argument must be choice number"));
3808       args = args2;
3809
3810       if (choice == 0)
3811         error (_("cancelled"));
3812
3813       if (choice < first_choice)
3814         {
3815           n_chosen = n_choices;
3816           for (j = 0; j < n_choices; j += 1)
3817             choices[j] = j;
3818           break;
3819         }
3820       choice -= first_choice;
3821
3822       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3823         {
3824         }
3825
3826       if (j < 0 || choice != choices[j])
3827         {
3828           int k;
3829
3830           for (k = n_chosen - 1; k > j; k -= 1)
3831             choices[k + 1] = choices[k];
3832           choices[j + 1] = choice;
3833           n_chosen += 1;
3834         }
3835     }
3836
3837   if (n_chosen > max_results)
3838     error (_("Select no more than %d of the above"), max_results);
3839
3840   return n_chosen;
3841 }
3842
3843 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3844    on the function identified by SYM and BLOCK, and taking NARGS
3845    arguments.  Update *EXPP as needed to hold more space.  */
3846
3847 static void
3848 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3849                             int oplen, struct symbol *sym,
3850                             const struct block *block)
3851 {
3852   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3853      symbol, -oplen for operator being replaced).  */
3854   struct expression *newexp = (struct expression *)
3855     xzalloc (sizeof (struct expression)
3856              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3857   struct expression *exp = *expp;
3858
3859   newexp->nelts = exp->nelts + 7 - oplen;
3860   newexp->language_defn = exp->language_defn;
3861   newexp->gdbarch = exp->gdbarch;
3862   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3863   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3864           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3865
3866   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3867   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3868
3869   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3870   newexp->elts[pc + 4].block = block;
3871   newexp->elts[pc + 5].symbol = sym;
3872
3873   *expp = newexp;
3874   xfree (exp);
3875 }
3876
3877 /* Type-class predicates */
3878
3879 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3880    or FLOAT).  */
3881
3882 static int
3883 numeric_type_p (struct type *type)
3884 {
3885   if (type == NULL)
3886     return 0;
3887   else
3888     {
3889       switch (TYPE_CODE (type))
3890         {
3891         case TYPE_CODE_INT:
3892         case TYPE_CODE_FLT:
3893           return 1;
3894         case TYPE_CODE_RANGE:
3895           return (type == TYPE_TARGET_TYPE (type)
3896                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3897         default:
3898           return 0;
3899         }
3900     }
3901 }
3902
3903 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3904
3905 static int
3906 integer_type_p (struct type *type)
3907 {
3908   if (type == NULL)
3909     return 0;
3910   else
3911     {
3912       switch (TYPE_CODE (type))
3913         {
3914         case TYPE_CODE_INT:
3915           return 1;
3916         case TYPE_CODE_RANGE:
3917           return (type == TYPE_TARGET_TYPE (type)
3918                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3919         default:
3920           return 0;
3921         }
3922     }
3923 }
3924
3925 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3926
3927 static int
3928 scalar_type_p (struct type *type)
3929 {
3930   if (type == NULL)
3931     return 0;
3932   else
3933     {
3934       switch (TYPE_CODE (type))
3935         {
3936         case TYPE_CODE_INT:
3937         case TYPE_CODE_RANGE:
3938         case TYPE_CODE_ENUM:
3939         case TYPE_CODE_FLT:
3940           return 1;
3941         default:
3942           return 0;
3943         }
3944     }
3945 }
3946
3947 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3948
3949 static int
3950 discrete_type_p (struct type *type)
3951 {
3952   if (type == NULL)
3953     return 0;
3954   else
3955     {
3956       switch (TYPE_CODE (type))
3957         {
3958         case TYPE_CODE_INT:
3959         case TYPE_CODE_RANGE:
3960         case TYPE_CODE_ENUM:
3961         case TYPE_CODE_BOOL:
3962           return 1;
3963         default:
3964           return 0;
3965         }
3966     }
3967 }
3968
3969 /* Returns non-zero if OP with operands in the vector ARGS could be
3970    a user-defined function.  Errs on the side of pre-defined operators
3971    (i.e., result 0).  */
3972
3973 static int
3974 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3975 {
3976   struct type *type0 =
3977     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3978   struct type *type1 =
3979     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3980
3981   if (type0 == NULL)
3982     return 0;
3983
3984   switch (op)
3985     {
3986     default:
3987       return 0;
3988
3989     case BINOP_ADD:
3990     case BINOP_SUB:
3991     case BINOP_MUL:
3992     case BINOP_DIV:
3993       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3994
3995     case BINOP_REM:
3996     case BINOP_MOD:
3997     case BINOP_BITWISE_AND:
3998     case BINOP_BITWISE_IOR:
3999     case BINOP_BITWISE_XOR:
4000       return (!(integer_type_p (type0) && integer_type_p (type1)));
4001
4002     case BINOP_EQUAL:
4003     case BINOP_NOTEQUAL:
4004     case BINOP_LESS:
4005     case BINOP_GTR:
4006     case BINOP_LEQ:
4007     case BINOP_GEQ:
4008       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4009
4010     case BINOP_CONCAT:
4011       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4012
4013     case BINOP_EXP:
4014       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4015
4016     case UNOP_NEG:
4017     case UNOP_PLUS:
4018     case UNOP_LOGICAL_NOT:
4019     case UNOP_ABS:
4020       return (!numeric_type_p (type0));
4021
4022     }
4023 }
4024 \f
4025                                 /* Renaming */
4026
4027 /* NOTES: 
4028
4029    1. In the following, we assume that a renaming type's name may
4030       have an ___XD suffix.  It would be nice if this went away at some
4031       point.
4032    2. We handle both the (old) purely type-based representation of 
4033       renamings and the (new) variable-based encoding.  At some point,
4034       it is devoutly to be hoped that the former goes away 
4035       (FIXME: hilfinger-2007-07-09).
4036    3. Subprogram renamings are not implemented, although the XRS
4037       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4038
4039 /* If SYM encodes a renaming, 
4040
4041        <renaming> renames <renamed entity>,
4042
4043    sets *LEN to the length of the renamed entity's name,
4044    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4045    the string describing the subcomponent selected from the renamed
4046    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4047    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4048    are undefined).  Otherwise, returns a value indicating the category
4049    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4050    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4051    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4052    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4053    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4054    may be NULL, in which case they are not assigned.
4055
4056    [Currently, however, GCC does not generate subprogram renamings.]  */
4057
4058 enum ada_renaming_category
4059 ada_parse_renaming (struct symbol *sym,
4060                     const char **renamed_entity, int *len, 
4061                     const char **renaming_expr)
4062 {
4063   enum ada_renaming_category kind;
4064   const char *info;
4065   const char *suffix;
4066
4067   if (sym == NULL)
4068     return ADA_NOT_RENAMING;
4069   switch (SYMBOL_CLASS (sym)) 
4070     {
4071     default:
4072       return ADA_NOT_RENAMING;
4073     case LOC_TYPEDEF:
4074       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4075                                        renamed_entity, len, renaming_expr);
4076     case LOC_LOCAL:
4077     case LOC_STATIC:
4078     case LOC_COMPUTED:
4079     case LOC_OPTIMIZED_OUT:
4080       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4081       if (info == NULL)
4082         return ADA_NOT_RENAMING;
4083       switch (info[5])
4084         {
4085         case '_':
4086           kind = ADA_OBJECT_RENAMING;
4087           info += 6;
4088           break;
4089         case 'E':
4090           kind = ADA_EXCEPTION_RENAMING;
4091           info += 7;
4092           break;
4093         case 'P':
4094           kind = ADA_PACKAGE_RENAMING;
4095           info += 7;
4096           break;
4097         case 'S':
4098           kind = ADA_SUBPROGRAM_RENAMING;
4099           info += 7;
4100           break;
4101         default:
4102           return ADA_NOT_RENAMING;
4103         }
4104     }
4105
4106   if (renamed_entity != NULL)
4107     *renamed_entity = info;
4108   suffix = strstr (info, "___XE");
4109   if (suffix == NULL || suffix == info)
4110     return ADA_NOT_RENAMING;
4111   if (len != NULL)
4112     *len = strlen (info) - strlen (suffix);
4113   suffix += 5;
4114   if (renaming_expr != NULL)
4115     *renaming_expr = suffix;
4116   return kind;
4117 }
4118
4119 /* Assuming TYPE encodes a renaming according to the old encoding in
4120    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4121    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4122    ADA_NOT_RENAMING otherwise.  */
4123 static enum ada_renaming_category
4124 parse_old_style_renaming (struct type *type,
4125                           const char **renamed_entity, int *len, 
4126                           const char **renaming_expr)
4127 {
4128   enum ada_renaming_category kind;
4129   const char *name;
4130   const char *info;
4131   const char *suffix;
4132
4133   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4134       || TYPE_NFIELDS (type) != 1)
4135     return ADA_NOT_RENAMING;
4136
4137   name = type_name_no_tag (type);
4138   if (name == NULL)
4139     return ADA_NOT_RENAMING;
4140   
4141   name = strstr (name, "___XR");
4142   if (name == NULL)
4143     return ADA_NOT_RENAMING;
4144   switch (name[5])
4145     {
4146     case '\0':
4147     case '_':
4148       kind = ADA_OBJECT_RENAMING;
4149       break;
4150     case 'E':
4151       kind = ADA_EXCEPTION_RENAMING;
4152       break;
4153     case 'P':
4154       kind = ADA_PACKAGE_RENAMING;
4155       break;
4156     case 'S':
4157       kind = ADA_SUBPROGRAM_RENAMING;
4158       break;
4159     default:
4160       return ADA_NOT_RENAMING;
4161     }
4162
4163   info = TYPE_FIELD_NAME (type, 0);
4164   if (info == NULL)
4165     return ADA_NOT_RENAMING;
4166   if (renamed_entity != NULL)
4167     *renamed_entity = info;
4168   suffix = strstr (info, "___XE");
4169   if (renaming_expr != NULL)
4170     *renaming_expr = suffix + 5;
4171   if (suffix == NULL || suffix == info)
4172     return ADA_NOT_RENAMING;
4173   if (len != NULL)
4174     *len = suffix - info;
4175   return kind;
4176 }
4177
4178 /* Compute the value of the given RENAMING_SYM, which is expected to
4179    be a symbol encoding a renaming expression.  BLOCK is the block
4180    used to evaluate the renaming.  */
4181
4182 static struct value *
4183 ada_read_renaming_var_value (struct symbol *renaming_sym,
4184                              const struct block *block)
4185 {
4186   const char *sym_name;
4187   struct expression *expr;
4188   struct value *value;
4189   struct cleanup *old_chain = NULL;
4190
4191   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4192   expr = parse_exp_1 (&sym_name, 0, block, 0);
4193   old_chain = make_cleanup (free_current_contents, &expr);
4194   value = evaluate_expression (expr);
4195
4196   do_cleanups (old_chain);
4197   return value;
4198 }
4199 \f
4200
4201                                 /* Evaluation: Function Calls */
4202
4203 /* Return an lvalue containing the value VAL.  This is the identity on
4204    lvalues, and otherwise has the side-effect of allocating memory
4205    in the inferior where a copy of the value contents is copied.  */
4206
4207 static struct value *
4208 ensure_lval (struct value *val)
4209 {
4210   if (VALUE_LVAL (val) == not_lval
4211       || VALUE_LVAL (val) == lval_internalvar)
4212     {
4213       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4214       const CORE_ADDR addr =
4215         value_as_long (value_allocate_space_in_inferior (len));
4216
4217       set_value_address (val, addr);
4218       VALUE_LVAL (val) = lval_memory;
4219       write_memory (addr, value_contents (val), len);
4220     }
4221
4222   return val;
4223 }
4224
4225 /* Return the value ACTUAL, converted to be an appropriate value for a
4226    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4227    allocating any necessary descriptors (fat pointers), or copies of
4228    values not residing in memory, updating it as needed.  */
4229
4230 struct value *
4231 ada_convert_actual (struct value *actual, struct type *formal_type0)
4232 {
4233   struct type *actual_type = ada_check_typedef (value_type (actual));
4234   struct type *formal_type = ada_check_typedef (formal_type0);
4235   struct type *formal_target =
4236     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4237     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4238   struct type *actual_target =
4239     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4240     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4241
4242   if (ada_is_array_descriptor_type (formal_target)
4243       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4244     return make_array_descriptor (formal_type, actual);
4245   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4246            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4247     {
4248       struct value *result;
4249
4250       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4251           && ada_is_array_descriptor_type (actual_target))
4252         result = desc_data (actual);
4253       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4254         {
4255           if (VALUE_LVAL (actual) != lval_memory)
4256             {
4257               struct value *val;
4258
4259               actual_type = ada_check_typedef (value_type (actual));
4260               val = allocate_value (actual_type);
4261               memcpy ((char *) value_contents_raw (val),
4262                       (char *) value_contents (actual),
4263                       TYPE_LENGTH (actual_type));
4264               actual = ensure_lval (val);
4265             }
4266           result = value_addr (actual);
4267         }
4268       else
4269         return actual;
4270       return value_cast_pointers (formal_type, result, 0);
4271     }
4272   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4273     return ada_value_ind (actual);
4274
4275   return actual;
4276 }
4277
4278 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4279    type TYPE.  This is usually an inefficient no-op except on some targets
4280    (such as AVR) where the representation of a pointer and an address
4281    differs.  */
4282
4283 static CORE_ADDR
4284 value_pointer (struct value *value, struct type *type)
4285 {
4286   struct gdbarch *gdbarch = get_type_arch (type);
4287   unsigned len = TYPE_LENGTH (type);
4288   gdb_byte *buf = alloca (len);
4289   CORE_ADDR addr;
4290
4291   addr = value_address (value);
4292   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4293   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4294   return addr;
4295 }
4296
4297
4298 /* Push a descriptor of type TYPE for array value ARR on the stack at
4299    *SP, updating *SP to reflect the new descriptor.  Return either
4300    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4301    to-descriptor type rather than a descriptor type), a struct value *
4302    representing a pointer to this descriptor.  */
4303
4304 static struct value *
4305 make_array_descriptor (struct type *type, struct value *arr)
4306 {
4307   struct type *bounds_type = desc_bounds_type (type);
4308   struct type *desc_type = desc_base_type (type);
4309   struct value *descriptor = allocate_value (desc_type);
4310   struct value *bounds = allocate_value (bounds_type);
4311   int i;
4312
4313   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4314        i > 0; i -= 1)
4315     {
4316       modify_field (value_type (bounds), value_contents_writeable (bounds),
4317                     ada_array_bound (arr, i, 0),
4318                     desc_bound_bitpos (bounds_type, i, 0),
4319                     desc_bound_bitsize (bounds_type, i, 0));
4320       modify_field (value_type (bounds), value_contents_writeable (bounds),
4321                     ada_array_bound (arr, i, 1),
4322                     desc_bound_bitpos (bounds_type, i, 1),
4323                     desc_bound_bitsize (bounds_type, i, 1));
4324     }
4325
4326   bounds = ensure_lval (bounds);
4327
4328   modify_field (value_type (descriptor),
4329                 value_contents_writeable (descriptor),
4330                 value_pointer (ensure_lval (arr),
4331                                TYPE_FIELD_TYPE (desc_type, 0)),
4332                 fat_pntr_data_bitpos (desc_type),
4333                 fat_pntr_data_bitsize (desc_type));
4334
4335   modify_field (value_type (descriptor),
4336                 value_contents_writeable (descriptor),
4337                 value_pointer (bounds,
4338                                TYPE_FIELD_TYPE (desc_type, 1)),
4339                 fat_pntr_bounds_bitpos (desc_type),
4340                 fat_pntr_bounds_bitsize (desc_type));
4341
4342   descriptor = ensure_lval (descriptor);
4343
4344   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4345     return value_addr (descriptor);
4346   else
4347     return descriptor;
4348 }
4349 \f
4350                                 /* Symbol Cache Module */
4351
4352 /* Performance measurements made as of 2010-01-15 indicate that
4353    this cache does bring some noticeable improvements.  Depending
4354    on the type of entity being printed, the cache can make it as much
4355    as an order of magnitude faster than without it.
4356
4357    The descriptive type DWARF extension has significantly reduced
4358    the need for this cache, at least when DWARF is being used.  However,
4359    even in this case, some expensive name-based symbol searches are still
4360    sometimes necessary - to find an XVZ variable, mostly.  */
4361
4362 /* Initialize the contents of SYM_CACHE.  */
4363
4364 static void
4365 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4366 {
4367   obstack_init (&sym_cache->cache_space);
4368   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4369 }
4370
4371 /* Free the memory used by SYM_CACHE.  */
4372
4373 static void
4374 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4375 {
4376   obstack_free (&sym_cache->cache_space, NULL);
4377   xfree (sym_cache);
4378 }
4379
4380 /* Return the symbol cache associated to the given program space PSPACE.
4381    If not allocated for this PSPACE yet, allocate and initialize one.  */
4382
4383 static struct ada_symbol_cache *
4384 ada_get_symbol_cache (struct program_space *pspace)
4385 {
4386   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4387   struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4388
4389   if (sym_cache == NULL)
4390     {
4391       sym_cache = XCNEW (struct ada_symbol_cache);
4392       ada_init_symbol_cache (sym_cache);
4393     }
4394
4395   return sym_cache;
4396 }
4397
4398 /* Clear all entries from the symbol cache.  */
4399
4400 static void
4401 ada_clear_symbol_cache (void)
4402 {
4403   struct ada_symbol_cache *sym_cache
4404     = ada_get_symbol_cache (current_program_space);
4405
4406   obstack_free (&sym_cache->cache_space, NULL);
4407   ada_init_symbol_cache (sym_cache);
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 (SYMTAB_BLOCKVECTOR (sym->symtab),
4469                             GLOBAL_BLOCK) != block
4470       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (sym->symtab),
4471                             STATIC_BLOCK) != block)
4472     return;
4473
4474   h = msymbol_hash (name) % HASH_SIZE;
4475   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4476                                             sizeof (*e));
4477   e->next = sym_cache->root[h];
4478   sym_cache->root[h] = e;
4479   e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4480   strcpy (copy, name);
4481   e->sym = sym;
4482   e->namespace = namespace;
4483   e->block = block;
4484 }
4485 \f
4486                                 /* Symbol Lookup */
4487
4488 /* Return nonzero if wild matching should be used when searching for
4489    all symbols matching LOOKUP_NAME.
4490
4491    LOOKUP_NAME is expected to be a symbol name after transformation
4492    for Ada lookups (see ada_name_for_lookup).  */
4493
4494 static int
4495 should_use_wild_match (const char *lookup_name)
4496 {
4497   return (strstr (lookup_name, "__") == NULL);
4498 }
4499
4500 /* Return the result of a standard (literal, C-like) lookup of NAME in
4501    given DOMAIN, visible from lexical block BLOCK.  */
4502
4503 static struct symbol *
4504 standard_lookup (const char *name, const struct block *block,
4505                  domain_enum domain)
4506 {
4507   /* Initialize it just to avoid a GCC false warning.  */
4508   struct symbol *sym = NULL;
4509
4510   if (lookup_cached_symbol (name, domain, &sym, NULL))
4511     return sym;
4512   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4513   cache_symbol (name, domain, sym, block_found);
4514   return sym;
4515 }
4516
4517
4518 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4519    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4520    since they contend in overloading in the same way.  */
4521 static int
4522 is_nonfunction (struct ada_symbol_info syms[], int n)
4523 {
4524   int i;
4525
4526   for (i = 0; i < n; i += 1)
4527     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4528         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4529             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4530       return 1;
4531
4532   return 0;
4533 }
4534
4535 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4536    struct types.  Otherwise, they may not.  */
4537
4538 static int
4539 equiv_types (struct type *type0, struct type *type1)
4540 {
4541   if (type0 == type1)
4542     return 1;
4543   if (type0 == NULL || type1 == NULL
4544       || TYPE_CODE (type0) != TYPE_CODE (type1))
4545     return 0;
4546   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4547        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4548       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4549       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4550     return 1;
4551
4552   return 0;
4553 }
4554
4555 /* True iff SYM0 represents the same entity as SYM1, or one that is
4556    no more defined than that of SYM1.  */
4557
4558 static int
4559 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4560 {
4561   if (sym0 == sym1)
4562     return 1;
4563   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4564       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4565     return 0;
4566
4567   switch (SYMBOL_CLASS (sym0))
4568     {
4569     case LOC_UNDEF:
4570       return 1;
4571     case LOC_TYPEDEF:
4572       {
4573         struct type *type0 = SYMBOL_TYPE (sym0);
4574         struct type *type1 = SYMBOL_TYPE (sym1);
4575         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4576         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4577         int len0 = strlen (name0);
4578
4579         return
4580           TYPE_CODE (type0) == TYPE_CODE (type1)
4581           && (equiv_types (type0, type1)
4582               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4583                   && strncmp (name1 + len0, "___XV", 5) == 0));
4584       }
4585     case LOC_CONST:
4586       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4587         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4588     default:
4589       return 0;
4590     }
4591 }
4592
4593 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4594    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4595
4596 static void
4597 add_defn_to_vec (struct obstack *obstackp,
4598                  struct symbol *sym,
4599                  const struct block *block)
4600 {
4601   int i;
4602   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4603
4604   /* Do not try to complete stub types, as the debugger is probably
4605      already scanning all symbols matching a certain name at the
4606      time when this function is called.  Trying to replace the stub
4607      type by its associated full type will cause us to restart a scan
4608      which may lead to an infinite recursion.  Instead, the client
4609      collecting the matching symbols will end up collecting several
4610      matches, with at least one of them complete.  It can then filter
4611      out the stub ones if needed.  */
4612
4613   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4614     {
4615       if (lesseq_defined_than (sym, prevDefns[i].sym))
4616         return;
4617       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4618         {
4619           prevDefns[i].sym = sym;
4620           prevDefns[i].block = block;
4621           return;
4622         }
4623     }
4624
4625   {
4626     struct ada_symbol_info info;
4627
4628     info.sym = sym;
4629     info.block = block;
4630     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4631   }
4632 }
4633
4634 /* Number of ada_symbol_info structures currently collected in 
4635    current vector in *OBSTACKP.  */
4636
4637 static int
4638 num_defns_collected (struct obstack *obstackp)
4639 {
4640   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4641 }
4642
4643 /* Vector of ada_symbol_info structures currently collected in current 
4644    vector in *OBSTACKP.  If FINISH, close off the vector and return
4645    its final address.  */
4646
4647 static struct ada_symbol_info *
4648 defns_collected (struct obstack *obstackp, int finish)
4649 {
4650   if (finish)
4651     return obstack_finish (obstackp);
4652   else
4653     return (struct ada_symbol_info *) obstack_base (obstackp);
4654 }
4655
4656 /* Return a bound minimal symbol matching NAME according to Ada
4657    decoding rules.  Returns an invalid symbol if there is no such
4658    minimal symbol.  Names prefixed with "standard__" are handled
4659    specially: "standard__" is first stripped off, and only static and
4660    global symbols are searched.  */
4661
4662 struct bound_minimal_symbol
4663 ada_lookup_simple_minsym (const char *name)
4664 {
4665   struct bound_minimal_symbol result;
4666   struct objfile *objfile;
4667   struct minimal_symbol *msymbol;
4668   const int wild_match_p = should_use_wild_match (name);
4669
4670   memset (&result, 0, sizeof (result));
4671
4672   /* Special case: If the user specifies a symbol name inside package
4673      Standard, do a non-wild matching of the symbol name without
4674      the "standard__" prefix.  This was primarily introduced in order
4675      to allow the user to specifically access the standard exceptions
4676      using, for instance, Standard.Constraint_Error when Constraint_Error
4677      is ambiguous (due to the user defining its own Constraint_Error
4678      entity inside its program).  */
4679   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4680     name += sizeof ("standard__") - 1;
4681
4682   ALL_MSYMBOLS (objfile, msymbol)
4683   {
4684     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4685         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4686       {
4687         result.minsym = msymbol;
4688         result.objfile = objfile;
4689         break;
4690       }
4691   }
4692
4693   return result;
4694 }
4695
4696 /* For all subprograms that statically enclose the subprogram of the
4697    selected frame, add symbols matching identifier NAME in DOMAIN
4698    and their blocks to the list of data in OBSTACKP, as for
4699    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4700    with a wildcard prefix.  */
4701
4702 static void
4703 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4704                                   const char *name, domain_enum namespace,
4705                                   int wild_match_p)
4706 {
4707 }
4708
4709 /* True if TYPE is definitely an artificial type supplied to a symbol
4710    for which no debugging information was given in the symbol file.  */
4711
4712 static int
4713 is_nondebugging_type (struct type *type)
4714 {
4715   const char *name = ada_type_name (type);
4716
4717   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4718 }
4719
4720 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4721    that are deemed "identical" for practical purposes.
4722
4723    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4724    types and that their number of enumerals is identical (in other
4725    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4726
4727 static int
4728 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4729 {
4730   int i;
4731
4732   /* The heuristic we use here is fairly conservative.  We consider
4733      that 2 enumerate types are identical if they have the same
4734      number of enumerals and that all enumerals have the same
4735      underlying value and name.  */
4736
4737   /* All enums in the type should have an identical underlying value.  */
4738   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4739     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4740       return 0;
4741
4742   /* All enumerals should also have the same name (modulo any numerical
4743      suffix).  */
4744   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4745     {
4746       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4747       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4748       int len_1 = strlen (name_1);
4749       int len_2 = strlen (name_2);
4750
4751       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4752       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4753       if (len_1 != len_2
4754           || strncmp (TYPE_FIELD_NAME (type1, i),
4755                       TYPE_FIELD_NAME (type2, i),
4756                       len_1) != 0)
4757         return 0;
4758     }
4759
4760   return 1;
4761 }
4762
4763 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4764    that are deemed "identical" for practical purposes.  Sometimes,
4765    enumerals are not strictly identical, but their types are so similar
4766    that they can be considered identical.
4767
4768    For instance, consider the following code:
4769
4770       type Color is (Black, Red, Green, Blue, White);
4771       type RGB_Color is new Color range Red .. Blue;
4772
4773    Type RGB_Color is a subrange of an implicit type which is a copy
4774    of type Color. If we call that implicit type RGB_ColorB ("B" is
4775    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4776    As a result, when an expression references any of the enumeral
4777    by name (Eg. "print green"), the expression is technically
4778    ambiguous and the user should be asked to disambiguate. But
4779    doing so would only hinder the user, since it wouldn't matter
4780    what choice he makes, the outcome would always be the same.
4781    So, for practical purposes, we consider them as the same.  */
4782
4783 static int
4784 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4785 {
4786   int i;
4787
4788   /* Before performing a thorough comparison check of each type,
4789      we perform a series of inexpensive checks.  We expect that these
4790      checks will quickly fail in the vast majority of cases, and thus
4791      help prevent the unnecessary use of a more expensive comparison.
4792      Said comparison also expects us to make some of these checks
4793      (see ada_identical_enum_types_p).  */
4794
4795   /* Quick check: All symbols should have an enum type.  */
4796   for (i = 0; i < nsyms; i++)
4797     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4798       return 0;
4799
4800   /* Quick check: They should all have the same value.  */
4801   for (i = 1; i < nsyms; i++)
4802     if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4803       return 0;
4804
4805   /* Quick check: They should all have the same number of enumerals.  */
4806   for (i = 1; i < nsyms; i++)
4807     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4808         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4809       return 0;
4810
4811   /* All the sanity checks passed, so we might have a set of
4812      identical enumeration types.  Perform a more complete
4813      comparison of the type of each symbol.  */
4814   for (i = 1; i < nsyms; i++)
4815     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4816                                      SYMBOL_TYPE (syms[0].sym)))
4817       return 0;
4818
4819   return 1;
4820 }
4821
4822 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4823    duplicate other symbols in the list (The only case I know of where
4824    this happens is when object files containing stabs-in-ecoff are
4825    linked with files containing ordinary ecoff debugging symbols (or no
4826    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4827    Returns the number of items in the modified list.  */
4828
4829 static int
4830 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4831 {
4832   int i, j;
4833
4834   /* We should never be called with less than 2 symbols, as there
4835      cannot be any extra symbol in that case.  But it's easy to
4836      handle, since we have nothing to do in that case.  */
4837   if (nsyms < 2)
4838     return nsyms;
4839
4840   i = 0;
4841   while (i < nsyms)
4842     {
4843       int remove_p = 0;
4844
4845       /* If two symbols have the same name and one of them is a stub type,
4846          the get rid of the stub.  */
4847
4848       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4849           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4850         {
4851           for (j = 0; j < nsyms; j++)
4852             {
4853               if (j != i
4854                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4855                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4856                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4857                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4858                 remove_p = 1;
4859             }
4860         }
4861
4862       /* Two symbols with the same name, same class and same address
4863          should be identical.  */
4864
4865       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4866           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4867           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4868         {
4869           for (j = 0; j < nsyms; j += 1)
4870             {
4871               if (i != j
4872                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4873                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4874                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4875                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4876                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4877                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4878                 remove_p = 1;
4879             }
4880         }
4881       
4882       if (remove_p)
4883         {
4884           for (j = i + 1; j < nsyms; j += 1)
4885             syms[j - 1] = syms[j];
4886           nsyms -= 1;
4887         }
4888
4889       i += 1;
4890     }
4891
4892   /* If all the remaining symbols are identical enumerals, then
4893      just keep the first one and discard the rest.
4894
4895      Unlike what we did previously, we do not discard any entry
4896      unless they are ALL identical.  This is because the symbol
4897      comparison is not a strict comparison, but rather a practical
4898      comparison.  If all symbols are considered identical, then
4899      we can just go ahead and use the first one and discard the rest.
4900      But if we cannot reduce the list to a single element, we have
4901      to ask the user to disambiguate anyways.  And if we have to
4902      present a multiple-choice menu, it's less confusing if the list
4903      isn't missing some choices that were identical and yet distinct.  */
4904   if (symbols_are_identical_enums (syms, nsyms))
4905     nsyms = 1;
4906
4907   return nsyms;
4908 }
4909
4910 /* Given a type that corresponds to a renaming entity, use the type name
4911    to extract the scope (package name or function name, fully qualified,
4912    and following the GNAT encoding convention) where this renaming has been
4913    defined.  The string returned needs to be deallocated after use.  */
4914
4915 static char *
4916 xget_renaming_scope (struct type *renaming_type)
4917 {
4918   /* The renaming types adhere to the following convention:
4919      <scope>__<rename>___<XR extension>.
4920      So, to extract the scope, we search for the "___XR" extension,
4921      and then backtrack until we find the first "__".  */
4922
4923   const char *name = type_name_no_tag (renaming_type);
4924   char *suffix = strstr (name, "___XR");
4925   char *last;
4926   int scope_len;
4927   char *scope;
4928
4929   /* Now, backtrack a bit until we find the first "__".  Start looking
4930      at suffix - 3, as the <rename> part is at least one character long.  */
4931
4932   for (last = suffix - 3; last > name; last--)
4933     if (last[0] == '_' && last[1] == '_')
4934       break;
4935
4936   /* Make a copy of scope and return it.  */
4937
4938   scope_len = last - name;
4939   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4940
4941   strncpy (scope, name, scope_len);
4942   scope[scope_len] = '\0';
4943
4944   return scope;
4945 }
4946
4947 /* Return nonzero if NAME corresponds to a package name.  */
4948
4949 static int
4950 is_package_name (const char *name)
4951 {
4952   /* Here, We take advantage of the fact that no symbols are generated
4953      for packages, while symbols are generated for each function.
4954      So the condition for NAME represent a package becomes equivalent
4955      to NAME not existing in our list of symbols.  There is only one
4956      small complication with library-level functions (see below).  */
4957
4958   char *fun_name;
4959
4960   /* If it is a function that has not been defined at library level,
4961      then we should be able to look it up in the symbols.  */
4962   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4963     return 0;
4964
4965   /* Library-level function names start with "_ada_".  See if function
4966      "_ada_" followed by NAME can be found.  */
4967
4968   /* Do a quick check that NAME does not contain "__", since library-level
4969      functions names cannot contain "__" in them.  */
4970   if (strstr (name, "__") != NULL)
4971     return 0;
4972
4973   fun_name = xstrprintf ("_ada_%s", name);
4974
4975   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4976 }
4977
4978 /* Return nonzero if SYM corresponds to a renaming entity that is
4979    not visible from FUNCTION_NAME.  */
4980
4981 static int
4982 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
4983 {
4984   char *scope;
4985   struct cleanup *old_chain;
4986
4987   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4988     return 0;
4989
4990   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4991   old_chain = make_cleanup (xfree, scope);
4992
4993   /* If the rename has been defined in a package, then it is visible.  */
4994   if (is_package_name (scope))
4995     {
4996       do_cleanups (old_chain);
4997       return 0;
4998     }
4999
5000   /* Check that the rename is in the current function scope by checking
5001      that its name starts with SCOPE.  */
5002
5003   /* If the function name starts with "_ada_", it means that it is
5004      a library-level function.  Strip this prefix before doing the
5005      comparison, as the encoding for the renaming does not contain
5006      this prefix.  */
5007   if (strncmp (function_name, "_ada_", 5) == 0)
5008     function_name += 5;
5009
5010   {
5011     int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
5012
5013     do_cleanups (old_chain);
5014     return is_invisible;
5015   }
5016 }
5017
5018 /* Remove entries from SYMS that corresponds to a renaming entity that
5019    is not visible from the function associated with CURRENT_BLOCK or
5020    that is superfluous due to the presence of more specific renaming
5021    information.  Places surviving symbols in the initial entries of
5022    SYMS and returns the number of surviving symbols.
5023    
5024    Rationale:
5025    First, in cases where an object renaming is implemented as a
5026    reference variable, GNAT may produce both the actual reference
5027    variable and the renaming encoding.  In this case, we discard the
5028    latter.
5029
5030    Second, GNAT emits a type following a specified encoding for each renaming
5031    entity.  Unfortunately, STABS currently does not support the definition
5032    of types that are local to a given lexical block, so all renamings types
5033    are emitted at library level.  As a consequence, if an application
5034    contains two renaming entities using the same name, and a user tries to
5035    print the value of one of these entities, the result of the ada symbol
5036    lookup will also contain the wrong renaming type.
5037
5038    This function partially covers for this limitation by attempting to
5039    remove from the SYMS list renaming symbols that should be visible
5040    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5041    method with the current information available.  The implementation
5042    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5043    
5044       - When the user tries to print a rename in a function while there
5045         is another rename entity defined in a package:  Normally, the
5046         rename in the function has precedence over the rename in the
5047         package, so the latter should be removed from the list.  This is
5048         currently not the case.
5049         
5050       - This function will incorrectly remove valid renames if
5051         the CURRENT_BLOCK corresponds to a function which symbol name
5052         has been changed by an "Export" pragma.  As a consequence,
5053         the user will be unable to print such rename entities.  */
5054
5055 static int
5056 remove_irrelevant_renamings (struct ada_symbol_info *syms,
5057                              int nsyms, const struct block *current_block)
5058 {
5059   struct symbol *current_function;
5060   const char *current_function_name;
5061   int i;
5062   int is_new_style_renaming;
5063
5064   /* If there is both a renaming foo___XR... encoded as a variable and
5065      a simple variable foo in the same block, discard the latter.
5066      First, zero out such symbols, then compress.  */
5067   is_new_style_renaming = 0;
5068   for (i = 0; i < nsyms; i += 1)
5069     {
5070       struct symbol *sym = syms[i].sym;
5071       const struct block *block = syms[i].block;
5072       const char *name;
5073       const char *suffix;
5074
5075       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5076         continue;
5077       name = SYMBOL_LINKAGE_NAME (sym);
5078       suffix = strstr (name, "___XR");
5079
5080       if (suffix != NULL)
5081         {
5082           int name_len = suffix - name;
5083           int j;
5084
5085           is_new_style_renaming = 1;
5086           for (j = 0; j < nsyms; j += 1)
5087             if (i != j && syms[j].sym != NULL
5088                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5089                             name_len) == 0
5090                 && block == syms[j].block)
5091               syms[j].sym = NULL;
5092         }
5093     }
5094   if (is_new_style_renaming)
5095     {
5096       int j, k;
5097
5098       for (j = k = 0; j < nsyms; j += 1)
5099         if (syms[j].sym != NULL)
5100             {
5101               syms[k] = syms[j];
5102               k += 1;
5103             }
5104       return k;
5105     }
5106
5107   /* Extract the function name associated to CURRENT_BLOCK.
5108      Abort if unable to do so.  */
5109
5110   if (current_block == NULL)
5111     return nsyms;
5112
5113   current_function = block_linkage_function (current_block);
5114   if (current_function == NULL)
5115     return nsyms;
5116
5117   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5118   if (current_function_name == NULL)
5119     return nsyms;
5120
5121   /* Check each of the symbols, and remove it from the list if it is
5122      a type corresponding to a renaming that is out of the scope of
5123      the current block.  */
5124
5125   i = 0;
5126   while (i < nsyms)
5127     {
5128       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5129           == ADA_OBJECT_RENAMING
5130           && old_renaming_is_invisible (syms[i].sym, current_function_name))
5131         {
5132           int j;
5133
5134           for (j = i + 1; j < nsyms; j += 1)
5135             syms[j - 1] = syms[j];
5136           nsyms -= 1;
5137         }
5138       else
5139         i += 1;
5140     }
5141
5142   return nsyms;
5143 }
5144
5145 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5146    whose name and domain match NAME and DOMAIN respectively.
5147    If no match was found, then extend the search to "enclosing"
5148    routines (in other words, if we're inside a nested function,
5149    search the symbols defined inside the enclosing functions).
5150    If WILD_MATCH_P is nonzero, perform the naming matching in
5151    "wild" mode (see function "wild_match" for more info).
5152
5153    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5154
5155 static void
5156 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5157                        const struct block *block, domain_enum domain,
5158                        int wild_match_p)
5159 {
5160   int block_depth = 0;
5161
5162   while (block != NULL)
5163     {
5164       block_depth += 1;
5165       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5166                              wild_match_p);
5167
5168       /* If we found a non-function match, assume that's the one.  */
5169       if (is_nonfunction (defns_collected (obstackp, 0),
5170                           num_defns_collected (obstackp)))
5171         return;
5172
5173       block = BLOCK_SUPERBLOCK (block);
5174     }
5175
5176   /* If no luck so far, try to find NAME as a local symbol in some lexically
5177      enclosing subprogram.  */
5178   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5179     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5180 }
5181
5182 /* An object of this type is used as the user_data argument when
5183    calling the map_matching_symbols method.  */
5184
5185 struct match_data
5186 {
5187   struct objfile *objfile;
5188   struct obstack *obstackp;
5189   struct symbol *arg_sym;
5190   int found_sym;
5191 };
5192
5193 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5194    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5195    containing the obstack that collects the symbol list, the file that SYM
5196    must come from, a flag indicating whether a non-argument symbol has
5197    been found in the current block, and the last argument symbol
5198    passed in SYM within the current block (if any).  When SYM is null,
5199    marking the end of a block, the argument symbol is added if no
5200    other has been found.  */
5201
5202 static int
5203 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5204 {
5205   struct match_data *data = (struct match_data *) data0;
5206   
5207   if (sym == NULL)
5208     {
5209       if (!data->found_sym && data->arg_sym != NULL) 
5210         add_defn_to_vec (data->obstackp,
5211                          fixup_symbol_section (data->arg_sym, data->objfile),
5212                          block);
5213       data->found_sym = 0;
5214       data->arg_sym = NULL;
5215     }
5216   else 
5217     {
5218       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5219         return 0;
5220       else if (SYMBOL_IS_ARGUMENT (sym))
5221         data->arg_sym = sym;
5222       else
5223         {
5224           data->found_sym = 1;
5225           add_defn_to_vec (data->obstackp,
5226                            fixup_symbol_section (sym, data->objfile),
5227                            block);
5228         }
5229     }
5230   return 0;
5231 }
5232
5233 /* Implements compare_names, but only applying the comparision using
5234    the given CASING.  */
5235
5236 static int
5237 compare_names_with_case (const char *string1, const char *string2,
5238                          enum case_sensitivity casing)
5239 {
5240   while (*string1 != '\0' && *string2 != '\0')
5241     {
5242       char c1, c2;
5243
5244       if (isspace (*string1) || isspace (*string2))
5245         return strcmp_iw_ordered (string1, string2);
5246
5247       if (casing == case_sensitive_off)
5248         {
5249           c1 = tolower (*string1);
5250           c2 = tolower (*string2);
5251         }
5252       else
5253         {
5254           c1 = *string1;
5255           c2 = *string2;
5256         }
5257       if (c1 != c2)
5258         break;
5259
5260       string1 += 1;
5261       string2 += 1;
5262     }
5263
5264   switch (*string1)
5265     {
5266     case '(':
5267       return strcmp_iw_ordered (string1, string2);
5268     case '_':
5269       if (*string2 == '\0')
5270         {
5271           if (is_name_suffix (string1))
5272             return 0;
5273           else
5274             return 1;
5275         }
5276       /* FALLTHROUGH */
5277     default:
5278       if (*string2 == '(')
5279         return strcmp_iw_ordered (string1, string2);
5280       else
5281         {
5282           if (casing == case_sensitive_off)
5283             return tolower (*string1) - tolower (*string2);
5284           else
5285             return *string1 - *string2;
5286         }
5287     }
5288 }
5289
5290 /* Compare STRING1 to STRING2, with results as for strcmp.
5291    Compatible with strcmp_iw_ordered in that...
5292
5293        strcmp_iw_ordered (STRING1, STRING2) <= 0
5294
5295    ... implies...
5296
5297        compare_names (STRING1, STRING2) <= 0
5298
5299    (they may differ as to what symbols compare equal).  */
5300
5301 static int
5302 compare_names (const char *string1, const char *string2)
5303 {
5304   int result;
5305
5306   /* Similar to what strcmp_iw_ordered does, we need to perform
5307      a case-insensitive comparison first, and only resort to
5308      a second, case-sensitive, comparison if the first one was
5309      not sufficient to differentiate the two strings.  */
5310
5311   result = compare_names_with_case (string1, string2, case_sensitive_off);
5312   if (result == 0)
5313     result = compare_names_with_case (string1, string2, case_sensitive_on);
5314
5315   return result;
5316 }
5317
5318 /* Add to OBSTACKP all non-local symbols whose name and domain match
5319    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5320    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5321
5322 static void
5323 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5324                       domain_enum domain, int global,
5325                       int is_wild_match)
5326 {
5327   struct objfile *objfile;
5328   struct match_data data;
5329
5330   memset (&data, 0, sizeof data);
5331   data.obstackp = obstackp;
5332
5333   ALL_OBJFILES (objfile)
5334     {
5335       data.objfile = objfile;
5336
5337       if (is_wild_match)
5338         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5339                                                aux_add_nonlocal_symbols, &data,
5340                                                wild_match, NULL);
5341       else
5342         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5343                                                aux_add_nonlocal_symbols, &data,
5344                                                full_match, compare_names);
5345     }
5346
5347   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5348     {
5349       ALL_OBJFILES (objfile)
5350         {
5351           char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5352           strcpy (name1, "_ada_");
5353           strcpy (name1 + sizeof ("_ada_") - 1, name);
5354           data.objfile = objfile;
5355           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5356                                                  global,
5357                                                  aux_add_nonlocal_symbols,
5358                                                  &data,
5359                                                  full_match, compare_names);
5360         }
5361     }           
5362 }
5363
5364 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5365    non-zero, enclosing scope and in global scopes, returning the number of
5366    matches.
5367    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5368    indicating the symbols found and the blocks and symbol tables (if
5369    any) in which they were found.  This vector is transient---good only to
5370    the next call of ada_lookup_symbol_list.
5371
5372    When full_search is non-zero, any non-function/non-enumeral
5373    symbol match within the nest of blocks whose innermost member is BLOCK0,
5374    is the one match returned (no other matches in that or
5375    enclosing blocks is returned).  If there are any matches in or
5376    surrounding BLOCK0, then these alone are returned.
5377
5378    Names prefixed with "standard__" are handled specially: "standard__"
5379    is first stripped off, and only static and global symbols are searched.  */
5380
5381 static int
5382 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5383                                domain_enum namespace,
5384                                struct ada_symbol_info **results,
5385                                int full_search)
5386 {
5387   struct symbol *sym;
5388   const struct block *block;
5389   const char *name;
5390   const int wild_match_p = should_use_wild_match (name0);
5391   int cacheIfUnique;
5392   int ndefns;
5393
5394   obstack_free (&symbol_list_obstack, NULL);
5395   obstack_init (&symbol_list_obstack);
5396
5397   cacheIfUnique = 0;
5398
5399   /* Search specified block and its superiors.  */
5400
5401   name = name0;
5402   block = block0;
5403
5404   /* Special case: If the user specifies a symbol name inside package
5405      Standard, do a non-wild matching of the symbol name without
5406      the "standard__" prefix.  This was primarily introduced in order
5407      to allow the user to specifically access the standard exceptions
5408      using, for instance, Standard.Constraint_Error when Constraint_Error
5409      is ambiguous (due to the user defining its own Constraint_Error
5410      entity inside its program).  */
5411   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5412     {
5413       block = NULL;
5414       name = name0 + sizeof ("standard__") - 1;
5415     }
5416
5417   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5418
5419   if (block != NULL)
5420     {
5421       if (full_search)
5422         {
5423           ada_add_local_symbols (&symbol_list_obstack, name, block,
5424                                  namespace, wild_match_p);
5425         }
5426       else
5427         {
5428           /* In the !full_search case we're are being called by
5429              ada_iterate_over_symbols, and we don't want to search
5430              superblocks.  */
5431           ada_add_block_symbols (&symbol_list_obstack, block, name,
5432                                  namespace, NULL, wild_match_p);
5433         }
5434       if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5435         goto done;
5436     }
5437
5438   /* No non-global symbols found.  Check our cache to see if we have
5439      already performed this search before.  If we have, then return
5440      the same result.  */
5441
5442   cacheIfUnique = 1;
5443   if (lookup_cached_symbol (name0, namespace, &sym, &block))
5444     {
5445       if (sym != NULL)
5446         add_defn_to_vec (&symbol_list_obstack, sym, block);
5447       goto done;
5448     }
5449
5450   /* Search symbols from all global blocks.  */
5451  
5452   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5453                         wild_match_p);
5454
5455   /* Now add symbols from all per-file blocks if we've gotten no hits
5456      (not strictly correct, but perhaps better than an error).  */
5457
5458   if (num_defns_collected (&symbol_list_obstack) == 0)
5459     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5460                           wild_match_p);
5461
5462 done:
5463   ndefns = num_defns_collected (&symbol_list_obstack);
5464   *results = defns_collected (&symbol_list_obstack, 1);
5465
5466   ndefns = remove_extra_symbols (*results, ndefns);
5467
5468   if (ndefns == 0 && full_search)
5469     cache_symbol (name0, namespace, NULL, NULL);
5470
5471   if (ndefns == 1 && full_search && cacheIfUnique)
5472     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
5473
5474   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5475
5476   return ndefns;
5477 }
5478
5479 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5480    in global scopes, returning the number of matches, and setting *RESULTS
5481    to a vector of (SYM,BLOCK) tuples.
5482    See ada_lookup_symbol_list_worker for further details.  */
5483
5484 int
5485 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5486                         domain_enum domain, struct ada_symbol_info **results)
5487 {
5488   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5489 }
5490
5491 /* Implementation of the la_iterate_over_symbols method.  */
5492
5493 static void
5494 ada_iterate_over_symbols (const struct block *block,
5495                           const char *name, domain_enum domain,
5496                           symbol_found_callback_ftype *callback,
5497                           void *data)
5498 {
5499   int ndefs, i;
5500   struct ada_symbol_info *results;
5501
5502   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5503   for (i = 0; i < ndefs; ++i)
5504     {
5505       if (! (*callback) (results[i].sym, data))
5506         break;
5507     }
5508 }
5509
5510 /* If NAME is the name of an entity, return a string that should
5511    be used to look that entity up in Ada units.  This string should
5512    be deallocated after use using xfree.
5513
5514    NAME can have any form that the "break" or "print" commands might
5515    recognize.  In other words, it does not have to be the "natural"
5516    name, or the "encoded" name.  */
5517
5518 char *
5519 ada_name_for_lookup (const char *name)
5520 {
5521   char *canon;
5522   int nlen = strlen (name);
5523
5524   if (name[0] == '<' && name[nlen - 1] == '>')
5525     {
5526       canon = xmalloc (nlen - 1);
5527       memcpy (canon, name + 1, nlen - 2);
5528       canon[nlen - 2] = '\0';
5529     }
5530   else
5531     canon = xstrdup (ada_encode (ada_fold_name (name)));
5532   return canon;
5533 }
5534
5535 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5536    to 1, but choosing the first symbol found if there are multiple
5537    choices.
5538
5539    The result is stored in *INFO, which must be non-NULL.
5540    If no match is found, INFO->SYM is set to NULL.  */
5541
5542 void
5543 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5544                            domain_enum namespace,
5545                            struct ada_symbol_info *info)
5546 {
5547   struct ada_symbol_info *candidates;
5548   int n_candidates;
5549
5550   gdb_assert (info != NULL);
5551   memset (info, 0, sizeof (struct ada_symbol_info));
5552
5553   n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
5554   if (n_candidates == 0)
5555     return;
5556
5557   *info = candidates[0];
5558   info->sym = fixup_symbol_section (info->sym, NULL);
5559 }
5560
5561 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5562    scope and in global scopes, or NULL if none.  NAME is folded and
5563    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5564    choosing the first symbol if there are multiple choices.
5565    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5566
5567 struct symbol *
5568 ada_lookup_symbol (const char *name, const struct block *block0,
5569                    domain_enum namespace, int *is_a_field_of_this)
5570 {
5571   struct ada_symbol_info info;
5572
5573   if (is_a_field_of_this != NULL)
5574     *is_a_field_of_this = 0;
5575
5576   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5577                              block0, namespace, &info);
5578   return info.sym;
5579 }
5580
5581 static struct symbol *
5582 ada_lookup_symbol_nonlocal (const char *name,
5583                             const struct block *block,
5584                             const domain_enum domain)
5585 {
5586   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5587 }
5588
5589
5590 /* True iff STR is a possible encoded suffix of a normal Ada name
5591    that is to be ignored for matching purposes.  Suffixes of parallel
5592    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5593    are given by any of the regular expressions:
5594
5595    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5596    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5597    TKB              [subprogram suffix for task bodies]
5598    _E[0-9]+[bs]$    [protected object entry suffixes]
5599    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5600
5601    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5602    match is performed.  This sequence is used to differentiate homonyms,
5603    is an optional part of a valid name suffix.  */
5604
5605 static int
5606 is_name_suffix (const char *str)
5607 {
5608   int k;
5609   const char *matching;
5610   const int len = strlen (str);
5611
5612   /* Skip optional leading __[0-9]+.  */
5613
5614   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5615     {
5616       str += 3;
5617       while (isdigit (str[0]))
5618         str += 1;
5619     }
5620   
5621   /* [.$][0-9]+ */
5622
5623   if (str[0] == '.' || str[0] == '$')
5624     {
5625       matching = str + 1;
5626       while (isdigit (matching[0]))
5627         matching += 1;
5628       if (matching[0] == '\0')
5629         return 1;
5630     }
5631
5632   /* ___[0-9]+ */
5633
5634   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5635     {
5636       matching = str + 3;
5637       while (isdigit (matching[0]))
5638         matching += 1;
5639       if (matching[0] == '\0')
5640         return 1;
5641     }
5642
5643   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5644
5645   if (strcmp (str, "TKB") == 0)
5646     return 1;
5647
5648 #if 0
5649   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5650      with a N at the end.  Unfortunately, the compiler uses the same
5651      convention for other internal types it creates.  So treating
5652      all entity names that end with an "N" as a name suffix causes
5653      some regressions.  For instance, consider the case of an enumerated
5654      type.  To support the 'Image attribute, it creates an array whose
5655      name ends with N.
5656      Having a single character like this as a suffix carrying some
5657      information is a bit risky.  Perhaps we should change the encoding
5658      to be something like "_N" instead.  In the meantime, do not do
5659      the following check.  */
5660   /* Protected Object Subprograms */
5661   if (len == 1 && str [0] == 'N')
5662     return 1;
5663 #endif
5664
5665   /* _E[0-9]+[bs]$ */
5666   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5667     {
5668       matching = str + 3;
5669       while (isdigit (matching[0]))
5670         matching += 1;
5671       if ((matching[0] == 'b' || matching[0] == 's')
5672           && matching [1] == '\0')
5673         return 1;
5674     }
5675
5676   /* ??? We should not modify STR directly, as we are doing below.  This
5677      is fine in this case, but may become problematic later if we find
5678      that this alternative did not work, and want to try matching
5679      another one from the begining of STR.  Since we modified it, we
5680      won't be able to find the begining of the string anymore!  */
5681   if (str[0] == 'X')
5682     {
5683       str += 1;
5684       while (str[0] != '_' && str[0] != '\0')
5685         {
5686           if (str[0] != 'n' && str[0] != 'b')
5687             return 0;
5688           str += 1;
5689         }
5690     }
5691
5692   if (str[0] == '\000')
5693     return 1;
5694
5695   if (str[0] == '_')
5696     {
5697       if (str[1] != '_' || str[2] == '\000')
5698         return 0;
5699       if (str[2] == '_')
5700         {
5701           if (strcmp (str + 3, "JM") == 0)
5702             return 1;
5703           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5704              the LJM suffix in favor of the JM one.  But we will
5705              still accept LJM as a valid suffix for a reasonable
5706              amount of time, just to allow ourselves to debug programs
5707              compiled using an older version of GNAT.  */
5708           if (strcmp (str + 3, "LJM") == 0)
5709             return 1;
5710           if (str[3] != 'X')
5711             return 0;
5712           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5713               || str[4] == 'U' || str[4] == 'P')
5714             return 1;
5715           if (str[4] == 'R' && str[5] != 'T')
5716             return 1;
5717           return 0;
5718         }
5719       if (!isdigit (str[2]))
5720         return 0;
5721       for (k = 3; str[k] != '\0'; k += 1)
5722         if (!isdigit (str[k]) && str[k] != '_')
5723           return 0;
5724       return 1;
5725     }
5726   if (str[0] == '$' && isdigit (str[1]))
5727     {
5728       for (k = 2; str[k] != '\0'; k += 1)
5729         if (!isdigit (str[k]) && str[k] != '_')
5730           return 0;
5731       return 1;
5732     }
5733   return 0;
5734 }
5735
5736 /* Return non-zero if the string starting at NAME and ending before
5737    NAME_END contains no capital letters.  */
5738
5739 static int
5740 is_valid_name_for_wild_match (const char *name0)
5741 {
5742   const char *decoded_name = ada_decode (name0);
5743   int i;
5744
5745   /* If the decoded name starts with an angle bracket, it means that
5746      NAME0 does not follow the GNAT encoding format.  It should then
5747      not be allowed as a possible wild match.  */
5748   if (decoded_name[0] == '<')
5749     return 0;
5750
5751   for (i=0; decoded_name[i] != '\0'; i++)
5752     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5753       return 0;
5754
5755   return 1;
5756 }
5757
5758 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5759    that could start a simple name.  Assumes that *NAMEP points into
5760    the string beginning at NAME0.  */
5761
5762 static int
5763 advance_wild_match (const char **namep, const char *name0, int target0)
5764 {
5765   const char *name = *namep;
5766
5767   while (1)
5768     {
5769       int t0, t1;
5770
5771       t0 = *name;
5772       if (t0 == '_')
5773         {
5774           t1 = name[1];
5775           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5776             {
5777               name += 1;
5778               if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5779                 break;
5780               else
5781                 name += 1;
5782             }
5783           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5784                                  || name[2] == target0))
5785             {
5786               name += 2;
5787               break;
5788             }
5789           else
5790             return 0;
5791         }
5792       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5793         name += 1;
5794       else
5795         return 0;
5796     }
5797
5798   *namep = name;
5799   return 1;
5800 }
5801
5802 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5803    informational suffixes of NAME (i.e., for which is_name_suffix is
5804    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5805
5806 static int
5807 wild_match (const char *name, const char *patn)
5808 {
5809   const char *p;
5810   const char *name0 = name;
5811
5812   while (1)
5813     {
5814       const char *match = name;
5815
5816       if (*name == *patn)
5817         {
5818           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5819             if (*p != *name)
5820               break;
5821           if (*p == '\0' && is_name_suffix (name))
5822             return match != name0 && !is_valid_name_for_wild_match (name0);
5823
5824           if (name[-1] == '_')
5825             name -= 1;
5826         }
5827       if (!advance_wild_match (&name, name0, *patn))
5828         return 1;
5829     }
5830 }
5831
5832 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5833    informational suffix.  */
5834
5835 static int
5836 full_match (const char *sym_name, const char *search_name)
5837 {
5838   return !match_name (sym_name, search_name, 0);
5839 }
5840
5841
5842 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5843    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5844    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5845    OBJFILE is the section containing BLOCK.  */
5846
5847 static void
5848 ada_add_block_symbols (struct obstack *obstackp,
5849                        const struct block *block, const char *name,
5850                        domain_enum domain, struct objfile *objfile,
5851                        int wild)
5852 {
5853   struct block_iterator iter;
5854   int name_len = strlen (name);
5855   /* A matching argument symbol, if any.  */
5856   struct symbol *arg_sym;
5857   /* Set true when we find a matching non-argument symbol.  */
5858   int found_sym;
5859   struct symbol *sym;
5860
5861   arg_sym = NULL;
5862   found_sym = 0;
5863   if (wild)
5864     {
5865       for (sym = block_iter_match_first (block, name, wild_match, &iter);
5866            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5867       {
5868         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5869                                    SYMBOL_DOMAIN (sym), domain)
5870             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5871           {
5872             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5873               continue;
5874             else if (SYMBOL_IS_ARGUMENT (sym))
5875               arg_sym = sym;
5876             else
5877               {
5878                 found_sym = 1;
5879                 add_defn_to_vec (obstackp,
5880                                  fixup_symbol_section (sym, objfile),
5881                                  block);
5882               }
5883           }
5884       }
5885     }
5886   else
5887     {
5888      for (sym = block_iter_match_first (block, name, full_match, &iter);
5889           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5890       {
5891         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5892                                    SYMBOL_DOMAIN (sym), domain))
5893           {
5894             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5895               {
5896                 if (SYMBOL_IS_ARGUMENT (sym))
5897                   arg_sym = sym;
5898                 else
5899                   {
5900                     found_sym = 1;
5901                     add_defn_to_vec (obstackp,
5902                                      fixup_symbol_section (sym, objfile),
5903                                      block);
5904                   }
5905               }
5906           }
5907       }
5908     }
5909
5910   if (!found_sym && arg_sym != NULL)
5911     {
5912       add_defn_to_vec (obstackp,
5913                        fixup_symbol_section (arg_sym, objfile),
5914                        block);
5915     }
5916
5917   if (!wild)
5918     {
5919       arg_sym = NULL;
5920       found_sym = 0;
5921
5922       ALL_BLOCK_SYMBOLS (block, iter, sym)
5923       {
5924         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5925                                    SYMBOL_DOMAIN (sym), domain))
5926           {
5927             int cmp;
5928
5929             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5930             if (cmp == 0)
5931               {
5932                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5933                 if (cmp == 0)
5934                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5935                                  name_len);
5936               }
5937
5938             if (cmp == 0
5939                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5940               {
5941                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5942                   {
5943                     if (SYMBOL_IS_ARGUMENT (sym))
5944                       arg_sym = sym;
5945                     else
5946                       {
5947                         found_sym = 1;
5948                         add_defn_to_vec (obstackp,
5949                                          fixup_symbol_section (sym, objfile),
5950                                          block);
5951                       }
5952                   }
5953               }
5954           }
5955       }
5956
5957       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5958          They aren't parameters, right?  */
5959       if (!found_sym && arg_sym != NULL)
5960         {
5961           add_defn_to_vec (obstackp,
5962                            fixup_symbol_section (arg_sym, objfile),
5963                            block);
5964         }
5965     }
5966 }
5967 \f
5968
5969                                 /* Symbol Completion */
5970
5971 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5972    name in a form that's appropriate for the completion.  The result
5973    does not need to be deallocated, but is only good until the next call.
5974
5975    TEXT_LEN is equal to the length of TEXT.
5976    Perform a wild match if WILD_MATCH_P is set.
5977    ENCODED_P should be set if TEXT represents the start of a symbol name
5978    in its encoded form.  */
5979
5980 static const char *
5981 symbol_completion_match (const char *sym_name,
5982                          const char *text, int text_len,
5983                          int wild_match_p, int encoded_p)
5984 {
5985   const int verbatim_match = (text[0] == '<');
5986   int match = 0;
5987
5988   if (verbatim_match)
5989     {
5990       /* Strip the leading angle bracket.  */
5991       text = text + 1;
5992       text_len--;
5993     }
5994
5995   /* First, test against the fully qualified name of the symbol.  */
5996
5997   if (strncmp (sym_name, text, text_len) == 0)
5998     match = 1;
5999
6000   if (match && !encoded_p)
6001     {
6002       /* One needed check before declaring a positive match is to verify
6003          that iff we are doing a verbatim match, the decoded version
6004          of the symbol name starts with '<'.  Otherwise, this symbol name
6005          is not a suitable completion.  */
6006       const char *sym_name_copy = sym_name;
6007       int has_angle_bracket;
6008
6009       sym_name = ada_decode (sym_name);
6010       has_angle_bracket = (sym_name[0] == '<');
6011       match = (has_angle_bracket == verbatim_match);
6012       sym_name = sym_name_copy;
6013     }
6014
6015   if (match && !verbatim_match)
6016     {
6017       /* When doing non-verbatim match, another check that needs to
6018          be done is to verify that the potentially matching symbol name
6019          does not include capital letters, because the ada-mode would
6020          not be able to understand these symbol names without the
6021          angle bracket notation.  */
6022       const char *tmp;
6023
6024       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6025       if (*tmp != '\0')
6026         match = 0;
6027     }
6028
6029   /* Second: Try wild matching...  */
6030
6031   if (!match && wild_match_p)
6032     {
6033       /* Since we are doing wild matching, this means that TEXT
6034          may represent an unqualified symbol name.  We therefore must
6035          also compare TEXT against the unqualified name of the symbol.  */
6036       sym_name = ada_unqualified_name (ada_decode (sym_name));
6037
6038       if (strncmp (sym_name, text, text_len) == 0)
6039         match = 1;
6040     }
6041
6042   /* Finally: If we found a mach, prepare the result to return.  */
6043
6044   if (!match)
6045     return NULL;
6046
6047   if (verbatim_match)
6048     sym_name = add_angle_brackets (sym_name);
6049
6050   if (!encoded_p)
6051     sym_name = ada_decode (sym_name);
6052
6053   return sym_name;
6054 }
6055
6056 /* A companion function to ada_make_symbol_completion_list().
6057    Check if SYM_NAME represents a symbol which name would be suitable
6058    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6059    it is appended at the end of the given string vector SV.
6060
6061    ORIG_TEXT is the string original string from the user command
6062    that needs to be completed.  WORD is the entire command on which
6063    completion should be performed.  These two parameters are used to
6064    determine which part of the symbol name should be added to the
6065    completion vector.
6066    if WILD_MATCH_P is set, then wild matching is performed.
6067    ENCODED_P should be set if TEXT represents a symbol name in its
6068    encoded formed (in which case the completion should also be
6069    encoded).  */
6070
6071 static void
6072 symbol_completion_add (VEC(char_ptr) **sv,
6073                        const char *sym_name,
6074                        const char *text, int text_len,
6075                        const char *orig_text, const char *word,
6076                        int wild_match_p, int encoded_p)
6077 {
6078   const char *match = symbol_completion_match (sym_name, text, text_len,
6079                                                wild_match_p, encoded_p);
6080   char *completion;
6081
6082   if (match == NULL)
6083     return;
6084
6085   /* We found a match, so add the appropriate completion to the given
6086      string vector.  */
6087
6088   if (word == orig_text)
6089     {
6090       completion = xmalloc (strlen (match) + 5);
6091       strcpy (completion, match);
6092     }
6093   else if (word > orig_text)
6094     {
6095       /* Return some portion of sym_name.  */
6096       completion = xmalloc (strlen (match) + 5);
6097       strcpy (completion, match + (word - orig_text));
6098     }
6099   else
6100     {
6101       /* Return some of ORIG_TEXT plus sym_name.  */
6102       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6103       strncpy (completion, word, orig_text - word);
6104       completion[orig_text - word] = '\0';
6105       strcat (completion, match);
6106     }
6107
6108   VEC_safe_push (char_ptr, *sv, completion);
6109 }
6110
6111 /* An object of this type is passed as the user_data argument to the
6112    expand_symtabs_matching method.  */
6113 struct add_partial_datum
6114 {
6115   VEC(char_ptr) **completions;
6116   const char *text;
6117   int text_len;
6118   const char *text0;
6119   const char *word;
6120   int wild_match;
6121   int encoded;
6122 };
6123
6124 /* A callback for expand_symtabs_matching.  */
6125
6126 static int
6127 ada_complete_symbol_matcher (const char *name, void *user_data)
6128 {
6129   struct add_partial_datum *data = user_data;
6130   
6131   return symbol_completion_match (name, data->text, data->text_len,
6132                                   data->wild_match, data->encoded) != NULL;
6133 }
6134
6135 /* Return a list of possible symbol names completing TEXT0.  WORD is
6136    the entire command on which completion is made.  */
6137
6138 static VEC (char_ptr) *
6139 ada_make_symbol_completion_list (const char *text0, const char *word,
6140                                  enum type_code code)
6141 {
6142   char *text;
6143   int text_len;
6144   int wild_match_p;
6145   int encoded_p;
6146   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6147   struct symbol *sym;
6148   struct symtab *s;
6149   struct minimal_symbol *msymbol;
6150   struct objfile *objfile;
6151   const struct block *b, *surrounding_static_block = 0;
6152   int i;
6153   struct block_iterator iter;
6154   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6155
6156   gdb_assert (code == TYPE_CODE_UNDEF);
6157
6158   if (text0[0] == '<')
6159     {
6160       text = xstrdup (text0);
6161       make_cleanup (xfree, text);
6162       text_len = strlen (text);
6163       wild_match_p = 0;
6164       encoded_p = 1;
6165     }
6166   else
6167     {
6168       text = xstrdup (ada_encode (text0));
6169       make_cleanup (xfree, text);
6170       text_len = strlen (text);
6171       for (i = 0; i < text_len; i++)
6172         text[i] = tolower (text[i]);
6173
6174       encoded_p = (strstr (text0, "__") != NULL);
6175       /* If the name contains a ".", then the user is entering a fully
6176          qualified entity name, and the match must not be done in wild
6177          mode.  Similarly, if the user wants to complete what looks like
6178          an encoded name, the match must not be done in wild mode.  */
6179       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6180     }
6181
6182   /* First, look at the partial symtab symbols.  */
6183   {
6184     struct add_partial_datum data;
6185
6186     data.completions = &completions;
6187     data.text = text;
6188     data.text_len = text_len;
6189     data.text0 = text0;
6190     data.word = word;
6191     data.wild_match = wild_match_p;
6192     data.encoded = encoded_p;
6193     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6194                              &data);
6195   }
6196
6197   /* At this point scan through the misc symbol vectors and add each
6198      symbol you find to the list.  Eventually we want to ignore
6199      anything that isn't a text symbol (everything else will be
6200      handled by the psymtab code above).  */
6201
6202   ALL_MSYMBOLS (objfile, msymbol)
6203   {
6204     QUIT;
6205     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6206                            text, text_len, text0, word, wild_match_p,
6207                            encoded_p);
6208   }
6209
6210   /* Search upwards from currently selected frame (so that we can
6211      complete on local vars.  */
6212
6213   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6214     {
6215       if (!BLOCK_SUPERBLOCK (b))
6216         surrounding_static_block = b;   /* For elmin of dups */
6217
6218       ALL_BLOCK_SYMBOLS (b, iter, sym)
6219       {
6220         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6221                                text, text_len, text0, word,
6222                                wild_match_p, encoded_p);
6223       }
6224     }
6225
6226   /* Go through the symtabs and check the externs and statics for
6227      symbols which match.
6228      Non-primary symtabs share the block vector with their primary symtabs
6229      so we use ALL_PRIMARY_SYMTABS here instead of ALL_SYMTABS.  */
6230
6231   ALL_PRIMARY_SYMTABS (objfile, s)
6232   {
6233     QUIT;
6234     b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (s), GLOBAL_BLOCK);
6235     ALL_BLOCK_SYMBOLS (b, iter, sym)
6236     {
6237       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6238                              text, text_len, text0, word,
6239                              wild_match_p, encoded_p);
6240     }
6241   }
6242
6243   ALL_PRIMARY_SYMTABS (objfile, s)
6244   {
6245     QUIT;
6246     b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (s), STATIC_BLOCK);
6247     /* Don't do this block twice.  */
6248     if (b == surrounding_static_block)
6249       continue;
6250     ALL_BLOCK_SYMBOLS (b, iter, sym)
6251     {
6252       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6253                              text, text_len, text0, word,
6254                              wild_match_p, encoded_p);
6255     }
6256   }
6257
6258   do_cleanups (old_chain);
6259   return completions;
6260 }
6261
6262                                 /* Field Access */
6263
6264 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6265    for tagged types.  */
6266
6267 static int
6268 ada_is_dispatch_table_ptr_type (struct type *type)
6269 {
6270   const char *name;
6271
6272   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6273     return 0;
6274
6275   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6276   if (name == NULL)
6277     return 0;
6278
6279   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6280 }
6281
6282 /* Return non-zero if TYPE is an interface tag.  */
6283
6284 static int
6285 ada_is_interface_tag (struct type *type)
6286 {
6287   const char *name = TYPE_NAME (type);
6288
6289   if (name == NULL)
6290     return 0;
6291
6292   return (strcmp (name, "ada__tags__interface_tag") == 0);
6293 }
6294
6295 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6296    to be invisible to users.  */
6297
6298 int
6299 ada_is_ignored_field (struct type *type, int field_num)
6300 {
6301   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6302     return 1;
6303
6304   /* Check the name of that field.  */
6305   {
6306     const char *name = TYPE_FIELD_NAME (type, field_num);
6307
6308     /* Anonymous field names should not be printed.
6309        brobecker/2007-02-20: I don't think this can actually happen
6310        but we don't want to print the value of annonymous fields anyway.  */
6311     if (name == NULL)
6312       return 1;
6313
6314     /* Normally, fields whose name start with an underscore ("_")
6315        are fields that have been internally generated by the compiler,
6316        and thus should not be printed.  The "_parent" field is special,
6317        however: This is a field internally generated by the compiler
6318        for tagged types, and it contains the components inherited from
6319        the parent type.  This field should not be printed as is, but
6320        should not be ignored either.  */
6321     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6322       return 1;
6323   }
6324
6325   /* If this is the dispatch table of a tagged type or an interface tag,
6326      then ignore.  */
6327   if (ada_is_tagged_type (type, 1)
6328       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6329           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6330     return 1;
6331
6332   /* Not a special field, so it should not be ignored.  */
6333   return 0;
6334 }
6335
6336 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6337    pointer or reference type whose ultimate target has a tag field.  */
6338
6339 int
6340 ada_is_tagged_type (struct type *type, int refok)
6341 {
6342   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6343 }
6344
6345 /* True iff TYPE represents the type of X'Tag */
6346
6347 int
6348 ada_is_tag_type (struct type *type)
6349 {
6350   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6351     return 0;
6352   else
6353     {
6354       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6355
6356       return (name != NULL
6357               && strcmp (name, "ada__tags__dispatch_table") == 0);
6358     }
6359 }
6360
6361 /* The type of the tag on VAL.  */
6362
6363 struct type *
6364 ada_tag_type (struct value *val)
6365 {
6366   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6367 }
6368
6369 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6370    retired at Ada 05).  */
6371
6372 static int
6373 is_ada95_tag (struct value *tag)
6374 {
6375   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6376 }
6377
6378 /* The value of the tag on VAL.  */
6379
6380 struct value *
6381 ada_value_tag (struct value *val)
6382 {
6383   return ada_value_struct_elt (val, "_tag", 0);
6384 }
6385
6386 /* The value of the tag on the object of type TYPE whose contents are
6387    saved at VALADDR, if it is non-null, or is at memory address
6388    ADDRESS.  */
6389
6390 static struct value *
6391 value_tag_from_contents_and_address (struct type *type,
6392                                      const gdb_byte *valaddr,
6393                                      CORE_ADDR address)
6394 {
6395   int tag_byte_offset;
6396   struct type *tag_type;
6397
6398   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6399                          NULL, NULL, NULL))
6400     {
6401       const gdb_byte *valaddr1 = ((valaddr == NULL)
6402                                   ? NULL
6403                                   : valaddr + tag_byte_offset);
6404       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6405
6406       return value_from_contents_and_address (tag_type, valaddr1, address1);
6407     }
6408   return NULL;
6409 }
6410
6411 static struct type *
6412 type_from_tag (struct value *tag)
6413 {
6414   const char *type_name = ada_tag_name (tag);
6415
6416   if (type_name != NULL)
6417     return ada_find_any_type (ada_encode (type_name));
6418   return NULL;
6419 }
6420
6421 /* Given a value OBJ of a tagged type, return a value of this
6422    type at the base address of the object.  The base address, as
6423    defined in Ada.Tags, it is the address of the primary tag of
6424    the object, and therefore where the field values of its full
6425    view can be fetched.  */
6426
6427 struct value *
6428 ada_tag_value_at_base_address (struct value *obj)
6429 {
6430   volatile struct gdb_exception e;
6431   struct value *val;
6432   LONGEST offset_to_top = 0;
6433   struct type *ptr_type, *obj_type;
6434   struct value *tag;
6435   CORE_ADDR base_address;
6436
6437   obj_type = value_type (obj);
6438
6439   /* It is the responsability of the caller to deref pointers.  */
6440
6441   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6442       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6443     return obj;
6444
6445   tag = ada_value_tag (obj);
6446   if (!tag)
6447     return obj;
6448
6449   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6450
6451   if (is_ada95_tag (tag))
6452     return obj;
6453
6454   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6455   ptr_type = lookup_pointer_type (ptr_type);
6456   val = value_cast (ptr_type, tag);
6457   if (!val)
6458     return obj;
6459
6460   /* It is perfectly possible that an exception be raised while
6461      trying to determine the base address, just like for the tag;
6462      see ada_tag_name for more details.  We do not print the error
6463      message for the same reason.  */
6464
6465   TRY_CATCH (e, RETURN_MASK_ERROR)
6466     {
6467       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6468     }
6469
6470   if (e.reason < 0)
6471     return obj;
6472
6473   /* If offset is null, nothing to do.  */
6474
6475   if (offset_to_top == 0)
6476     return obj;
6477
6478   /* -1 is a special case in Ada.Tags; however, what should be done
6479      is not quite clear from the documentation.  So do nothing for
6480      now.  */
6481
6482   if (offset_to_top == -1)
6483     return obj;
6484
6485   base_address = value_address (obj) - offset_to_top;
6486   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6487
6488   /* Make sure that we have a proper tag at the new address.
6489      Otherwise, offset_to_top is bogus (which can happen when
6490      the object is not initialized yet).  */
6491
6492   if (!tag)
6493     return obj;
6494
6495   obj_type = type_from_tag (tag);
6496
6497   if (!obj_type)
6498     return obj;
6499
6500   return value_from_contents_and_address (obj_type, NULL, base_address);
6501 }
6502
6503 /* Return the "ada__tags__type_specific_data" type.  */
6504
6505 static struct type *
6506 ada_get_tsd_type (struct inferior *inf)
6507 {
6508   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6509
6510   if (data->tsd_type == 0)
6511     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6512   return data->tsd_type;
6513 }
6514
6515 /* Return the TSD (type-specific data) associated to the given TAG.
6516    TAG is assumed to be the tag of a tagged-type entity.
6517
6518    May return NULL if we are unable to get the TSD.  */
6519
6520 static struct value *
6521 ada_get_tsd_from_tag (struct value *tag)
6522 {
6523   struct value *val;
6524   struct type *type;
6525
6526   /* First option: The TSD is simply stored as a field of our TAG.
6527      Only older versions of GNAT would use this format, but we have
6528      to test it first, because there are no visible markers for
6529      the current approach except the absence of that field.  */
6530
6531   val = ada_value_struct_elt (tag, "tsd", 1);
6532   if (val)
6533     return val;
6534
6535   /* Try the second representation for the dispatch table (in which
6536      there is no explicit 'tsd' field in the referent of the tag pointer,
6537      and instead the tsd pointer is stored just before the dispatch
6538      table.  */
6539
6540   type = ada_get_tsd_type (current_inferior());
6541   if (type == NULL)
6542     return NULL;
6543   type = lookup_pointer_type (lookup_pointer_type (type));
6544   val = value_cast (type, tag);
6545   if (val == NULL)
6546     return NULL;
6547   return value_ind (value_ptradd (val, -1));
6548 }
6549
6550 /* Given the TSD of a tag (type-specific data), return a string
6551    containing the name of the associated type.
6552
6553    The returned value is good until the next call.  May return NULL
6554    if we are unable to determine the tag name.  */
6555
6556 static char *
6557 ada_tag_name_from_tsd (struct value *tsd)
6558 {
6559   static char name[1024];
6560   char *p;
6561   struct value *val;
6562
6563   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6564   if (val == NULL)
6565     return NULL;
6566   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6567   for (p = name; *p != '\0'; p += 1)
6568     if (isalpha (*p))
6569       *p = tolower (*p);
6570   return name;
6571 }
6572
6573 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6574    a C string.
6575
6576    Return NULL if the TAG is not an Ada tag, or if we were unable to
6577    determine the name of that tag.  The result is good until the next
6578    call.  */
6579
6580 const char *
6581 ada_tag_name (struct value *tag)
6582 {
6583   volatile struct gdb_exception e;
6584   char *name = NULL;
6585
6586   if (!ada_is_tag_type (value_type (tag)))
6587     return NULL;
6588
6589   /* It is perfectly possible that an exception be raised while trying
6590      to determine the TAG's name, even under normal circumstances:
6591      The associated variable may be uninitialized or corrupted, for
6592      instance. We do not let any exception propagate past this point.
6593      instead we return NULL.
6594
6595      We also do not print the error message either (which often is very
6596      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6597      the caller print a more meaningful message if necessary.  */
6598   TRY_CATCH (e, RETURN_MASK_ERROR)
6599     {
6600       struct value *tsd = ada_get_tsd_from_tag (tag);
6601
6602       if (tsd != NULL)
6603         name = ada_tag_name_from_tsd (tsd);
6604     }
6605
6606   return name;
6607 }
6608
6609 /* The parent type of TYPE, or NULL if none.  */
6610
6611 struct type *
6612 ada_parent_type (struct type *type)
6613 {
6614   int i;
6615
6616   type = ada_check_typedef (type);
6617
6618   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6619     return NULL;
6620
6621   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6622     if (ada_is_parent_field (type, i))
6623       {
6624         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6625
6626         /* If the _parent field is a pointer, then dereference it.  */
6627         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6628           parent_type = TYPE_TARGET_TYPE (parent_type);
6629         /* If there is a parallel XVS type, get the actual base type.  */
6630         parent_type = ada_get_base_type (parent_type);
6631
6632         return ada_check_typedef (parent_type);
6633       }
6634
6635   return NULL;
6636 }
6637
6638 /* True iff field number FIELD_NUM of structure type TYPE contains the
6639    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6640    a structure type with at least FIELD_NUM+1 fields.  */
6641
6642 int
6643 ada_is_parent_field (struct type *type, int field_num)
6644 {
6645   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6646
6647   return (name != NULL
6648           && (strncmp (name, "PARENT", 6) == 0
6649               || strncmp (name, "_parent", 7) == 0));
6650 }
6651
6652 /* True iff field number FIELD_NUM of structure type TYPE is a
6653    transparent wrapper field (which should be silently traversed when doing
6654    field selection and flattened when printing).  Assumes TYPE is a
6655    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6656    structures.  */
6657
6658 int
6659 ada_is_wrapper_field (struct type *type, int field_num)
6660 {
6661   const char *name = TYPE_FIELD_NAME (type, field_num);
6662
6663   return (name != NULL
6664           && (strncmp (name, "PARENT", 6) == 0
6665               || strcmp (name, "REP") == 0
6666               || strncmp (name, "_parent", 7) == 0
6667               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6668 }
6669
6670 /* True iff field number FIELD_NUM of structure or union type TYPE
6671    is a variant wrapper.  Assumes TYPE is a structure type with at least
6672    FIELD_NUM+1 fields.  */
6673
6674 int
6675 ada_is_variant_part (struct type *type, int field_num)
6676 {
6677   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6678
6679   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6680           || (is_dynamic_field (type, field_num)
6681               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
6682                   == TYPE_CODE_UNION)));
6683 }
6684
6685 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6686    whose discriminants are contained in the record type OUTER_TYPE,
6687    returns the type of the controlling discriminant for the variant.
6688    May return NULL if the type could not be found.  */
6689
6690 struct type *
6691 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6692 {
6693   char *name = ada_variant_discrim_name (var_type);
6694
6695   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6696 }
6697
6698 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6699    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6700    represents a 'when others' clause; otherwise 0.  */
6701
6702 int
6703 ada_is_others_clause (struct type *type, int field_num)
6704 {
6705   const char *name = TYPE_FIELD_NAME (type, field_num);
6706
6707   return (name != NULL && name[0] == 'O');
6708 }
6709
6710 /* Assuming that TYPE0 is the type of the variant part of a record,
6711    returns the name of the discriminant controlling the variant.
6712    The value is valid until the next call to ada_variant_discrim_name.  */
6713
6714 char *
6715 ada_variant_discrim_name (struct type *type0)
6716 {
6717   static char *result = NULL;
6718   static size_t result_len = 0;
6719   struct type *type;
6720   const char *name;
6721   const char *discrim_end;
6722   const char *discrim_start;
6723
6724   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6725     type = TYPE_TARGET_TYPE (type0);
6726   else
6727     type = type0;
6728
6729   name = ada_type_name (type);
6730
6731   if (name == NULL || name[0] == '\000')
6732     return "";
6733
6734   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6735        discrim_end -= 1)
6736     {
6737       if (strncmp (discrim_end, "___XVN", 6) == 0)
6738         break;
6739     }
6740   if (discrim_end == name)
6741     return "";
6742
6743   for (discrim_start = discrim_end; discrim_start != name + 3;
6744        discrim_start -= 1)
6745     {
6746       if (discrim_start == name + 1)
6747         return "";
6748       if ((discrim_start > name + 3
6749            && strncmp (discrim_start - 3, "___", 3) == 0)
6750           || discrim_start[-1] == '.')
6751         break;
6752     }
6753
6754   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6755   strncpy (result, discrim_start, discrim_end - discrim_start);
6756   result[discrim_end - discrim_start] = '\0';
6757   return result;
6758 }
6759
6760 /* Scan STR for a subtype-encoded number, beginning at position K.
6761    Put the position of the character just past the number scanned in
6762    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6763    Return 1 if there was a valid number at the given position, and 0
6764    otherwise.  A "subtype-encoded" number consists of the absolute value
6765    in decimal, followed by the letter 'm' to indicate a negative number.
6766    Assumes 0m does not occur.  */
6767
6768 int
6769 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6770 {
6771   ULONGEST RU;
6772
6773   if (!isdigit (str[k]))
6774     return 0;
6775
6776   /* Do it the hard way so as not to make any assumption about
6777      the relationship of unsigned long (%lu scan format code) and
6778      LONGEST.  */
6779   RU = 0;
6780   while (isdigit (str[k]))
6781     {
6782       RU = RU * 10 + (str[k] - '0');
6783       k += 1;
6784     }
6785
6786   if (str[k] == 'm')
6787     {
6788       if (R != NULL)
6789         *R = (-(LONGEST) (RU - 1)) - 1;
6790       k += 1;
6791     }
6792   else if (R != NULL)
6793     *R = (LONGEST) RU;
6794
6795   /* NOTE on the above: Technically, C does not say what the results of
6796      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6797      number representable as a LONGEST (although either would probably work
6798      in most implementations).  When RU>0, the locution in the then branch
6799      above is always equivalent to the negative of RU.  */
6800
6801   if (new_k != NULL)
6802     *new_k = k;
6803   return 1;
6804 }
6805
6806 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6807    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6808    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6809
6810 int
6811 ada_in_variant (LONGEST val, struct type *type, int field_num)
6812 {
6813   const char *name = TYPE_FIELD_NAME (type, field_num);
6814   int p;
6815
6816   p = 0;
6817   while (1)
6818     {
6819       switch (name[p])
6820         {
6821         case '\0':
6822           return 0;
6823         case 'S':
6824           {
6825             LONGEST W;
6826
6827             if (!ada_scan_number (name, p + 1, &W, &p))
6828               return 0;
6829             if (val == W)
6830               return 1;
6831             break;
6832           }
6833         case 'R':
6834           {
6835             LONGEST L, U;
6836
6837             if (!ada_scan_number (name, p + 1, &L, &p)
6838                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6839               return 0;
6840             if (val >= L && val <= U)
6841               return 1;
6842             break;
6843           }
6844         case 'O':
6845           return 1;
6846         default:
6847           return 0;
6848         }
6849     }
6850 }
6851
6852 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6853
6854 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6855    ARG_TYPE, extract and return the value of one of its (non-static)
6856    fields.  FIELDNO says which field.   Differs from value_primitive_field
6857    only in that it can handle packed values of arbitrary type.  */
6858
6859 static struct value *
6860 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6861                            struct type *arg_type)
6862 {
6863   struct type *type;
6864
6865   arg_type = ada_check_typedef (arg_type);
6866   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6867
6868   /* Handle packed fields.  */
6869
6870   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6871     {
6872       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6873       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6874
6875       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6876                                              offset + bit_pos / 8,
6877                                              bit_pos % 8, bit_size, type);
6878     }
6879   else
6880     return value_primitive_field (arg1, offset, fieldno, arg_type);
6881 }
6882
6883 /* Find field with name NAME in object of type TYPE.  If found, 
6884    set the following for each argument that is non-null:
6885     - *FIELD_TYPE_P to the field's type; 
6886     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6887       an object of that type;
6888     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6889     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6890       0 otherwise;
6891    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6892    fields up to but not including the desired field, or by the total
6893    number of fields if not found.   A NULL value of NAME never
6894    matches; the function just counts visible fields in this case.
6895    
6896    Returns 1 if found, 0 otherwise.  */
6897
6898 static int
6899 find_struct_field (const char *name, struct type *type, int offset,
6900                    struct type **field_type_p,
6901                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6902                    int *index_p)
6903 {
6904   int i;
6905
6906   type = ada_check_typedef (type);
6907
6908   if (field_type_p != NULL)
6909     *field_type_p = NULL;
6910   if (byte_offset_p != NULL)
6911     *byte_offset_p = 0;
6912   if (bit_offset_p != NULL)
6913     *bit_offset_p = 0;
6914   if (bit_size_p != NULL)
6915     *bit_size_p = 0;
6916
6917   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6918     {
6919       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6920       int fld_offset = offset + bit_pos / 8;
6921       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6922
6923       if (t_field_name == NULL)
6924         continue;
6925
6926       else if (name != NULL && field_name_match (t_field_name, name))
6927         {
6928           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6929
6930           if (field_type_p != NULL)
6931             *field_type_p = TYPE_FIELD_TYPE (type, i);
6932           if (byte_offset_p != NULL)
6933             *byte_offset_p = fld_offset;
6934           if (bit_offset_p != NULL)
6935             *bit_offset_p = bit_pos % 8;
6936           if (bit_size_p != NULL)
6937             *bit_size_p = bit_size;
6938           return 1;
6939         }
6940       else if (ada_is_wrapper_field (type, i))
6941         {
6942           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6943                                  field_type_p, byte_offset_p, bit_offset_p,
6944                                  bit_size_p, index_p))
6945             return 1;
6946         }
6947       else if (ada_is_variant_part (type, i))
6948         {
6949           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6950              fixed type?? */
6951           int j;
6952           struct type *field_type
6953             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6954
6955           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6956             {
6957               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6958                                      fld_offset
6959                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6960                                      field_type_p, byte_offset_p,
6961                                      bit_offset_p, bit_size_p, index_p))
6962                 return 1;
6963             }
6964         }
6965       else if (index_p != NULL)
6966         *index_p += 1;
6967     }
6968   return 0;
6969 }
6970
6971 /* Number of user-visible fields in record type TYPE.  */
6972
6973 static int
6974 num_visible_fields (struct type *type)
6975 {
6976   int n;
6977
6978   n = 0;
6979   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6980   return n;
6981 }
6982
6983 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6984    and search in it assuming it has (class) type TYPE.
6985    If found, return value, else return NULL.
6986
6987    Searches recursively through wrapper fields (e.g., '_parent').  */
6988
6989 static struct value *
6990 ada_search_struct_field (char *name, struct value *arg, int offset,
6991                          struct type *type)
6992 {
6993   int i;
6994
6995   type = ada_check_typedef (type);
6996   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6997     {
6998       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6999
7000       if (t_field_name == NULL)
7001         continue;
7002
7003       else if (field_name_match (t_field_name, name))
7004         return ada_value_primitive_field (arg, offset, i, type);
7005
7006       else if (ada_is_wrapper_field (type, i))
7007         {
7008           struct value *v =     /* Do not let indent join lines here.  */
7009             ada_search_struct_field (name, arg,
7010                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7011                                      TYPE_FIELD_TYPE (type, i));
7012
7013           if (v != NULL)
7014             return v;
7015         }
7016
7017       else if (ada_is_variant_part (type, i))
7018         {
7019           /* PNH: Do we ever get here?  See find_struct_field.  */
7020           int j;
7021           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7022                                                                         i));
7023           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7024
7025           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7026             {
7027               struct value *v = ada_search_struct_field /* Force line
7028                                                            break.  */
7029                 (name, arg,
7030                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7031                  TYPE_FIELD_TYPE (field_type, j));
7032
7033               if (v != NULL)
7034                 return v;
7035             }
7036         }
7037     }
7038   return NULL;
7039 }
7040
7041 static struct value *ada_index_struct_field_1 (int *, struct value *,
7042                                                int, struct type *);
7043
7044
7045 /* Return field #INDEX in ARG, where the index is that returned by
7046  * find_struct_field through its INDEX_P argument.  Adjust the address
7047  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7048  * If found, return value, else return NULL.  */
7049
7050 static struct value *
7051 ada_index_struct_field (int index, struct value *arg, int offset,
7052                         struct type *type)
7053 {
7054   return ada_index_struct_field_1 (&index, arg, offset, type);
7055 }
7056
7057
7058 /* Auxiliary function for ada_index_struct_field.  Like
7059  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7060  * *INDEX_P.  */
7061
7062 static struct value *
7063 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7064                           struct type *type)
7065 {
7066   int i;
7067   type = ada_check_typedef (type);
7068
7069   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7070     {
7071       if (TYPE_FIELD_NAME (type, i) == NULL)
7072         continue;
7073       else if (ada_is_wrapper_field (type, i))
7074         {
7075           struct value *v =     /* Do not let indent join lines here.  */
7076             ada_index_struct_field_1 (index_p, arg,
7077                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7078                                       TYPE_FIELD_TYPE (type, i));
7079
7080           if (v != NULL)
7081             return v;
7082         }
7083
7084       else if (ada_is_variant_part (type, i))
7085         {
7086           /* PNH: Do we ever get here?  See ada_search_struct_field,
7087              find_struct_field.  */
7088           error (_("Cannot assign this kind of variant record"));
7089         }
7090       else if (*index_p == 0)
7091         return ada_value_primitive_field (arg, offset, i, type);
7092       else
7093         *index_p -= 1;
7094     }
7095   return NULL;
7096 }
7097
7098 /* Given ARG, a value of type (pointer or reference to a)*
7099    structure/union, extract the component named NAME from the ultimate
7100    target structure/union and return it as a value with its
7101    appropriate type.
7102
7103    The routine searches for NAME among all members of the structure itself
7104    and (recursively) among all members of any wrapper members
7105    (e.g., '_parent').
7106
7107    If NO_ERR, then simply return NULL in case of error, rather than 
7108    calling error.  */
7109
7110 struct value *
7111 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7112 {
7113   struct type *t, *t1;
7114   struct value *v;
7115
7116   v = NULL;
7117   t1 = t = ada_check_typedef (value_type (arg));
7118   if (TYPE_CODE (t) == TYPE_CODE_REF)
7119     {
7120       t1 = TYPE_TARGET_TYPE (t);
7121       if (t1 == NULL)
7122         goto BadValue;
7123       t1 = ada_check_typedef (t1);
7124       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7125         {
7126           arg = coerce_ref (arg);
7127           t = t1;
7128         }
7129     }
7130
7131   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7132     {
7133       t1 = TYPE_TARGET_TYPE (t);
7134       if (t1 == NULL)
7135         goto BadValue;
7136       t1 = ada_check_typedef (t1);
7137       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7138         {
7139           arg = value_ind (arg);
7140           t = t1;
7141         }
7142       else
7143         break;
7144     }
7145
7146   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7147     goto BadValue;
7148
7149   if (t1 == t)
7150     v = ada_search_struct_field (name, arg, 0, t);
7151   else
7152     {
7153       int bit_offset, bit_size, byte_offset;
7154       struct type *field_type;
7155       CORE_ADDR address;
7156
7157       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7158         address = value_address (ada_value_ind (arg));
7159       else
7160         address = value_address (ada_coerce_ref (arg));
7161
7162       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7163       if (find_struct_field (name, t1, 0,
7164                              &field_type, &byte_offset, &bit_offset,
7165                              &bit_size, NULL))
7166         {
7167           if (bit_size != 0)
7168             {
7169               if (TYPE_CODE (t) == TYPE_CODE_REF)
7170                 arg = ada_coerce_ref (arg);
7171               else
7172                 arg = ada_value_ind (arg);
7173               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7174                                                   bit_offset, bit_size,
7175                                                   field_type);
7176             }
7177           else
7178             v = value_at_lazy (field_type, address + byte_offset);
7179         }
7180     }
7181
7182   if (v != NULL || no_err)
7183     return v;
7184   else
7185     error (_("There is no member named %s."), name);
7186
7187  BadValue:
7188   if (no_err)
7189     return NULL;
7190   else
7191     error (_("Attempt to extract a component of "
7192              "a value that is not a record."));
7193 }
7194
7195 /* Given a type TYPE, look up the type of the component of type named NAME.
7196    If DISPP is non-null, add its byte displacement from the beginning of a
7197    structure (pointed to by a value) of type TYPE to *DISPP (does not
7198    work for packed fields).
7199
7200    Matches any field whose name has NAME as a prefix, possibly
7201    followed by "___".
7202
7203    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7204    be a (pointer or reference)+ to a struct or union, and the
7205    ultimate target type will be searched.
7206
7207    Looks recursively into variant clauses and parent types.
7208
7209    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7210    TYPE is not a type of the right kind.  */
7211
7212 static struct type *
7213 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7214                             int noerr, int *dispp)
7215 {
7216   int i;
7217
7218   if (name == NULL)
7219     goto BadName;
7220
7221   if (refok && type != NULL)
7222     while (1)
7223       {
7224         type = ada_check_typedef (type);
7225         if (TYPE_CODE (type) != TYPE_CODE_PTR
7226             && TYPE_CODE (type) != TYPE_CODE_REF)
7227           break;
7228         type = TYPE_TARGET_TYPE (type);
7229       }
7230
7231   if (type == NULL
7232       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7233           && TYPE_CODE (type) != TYPE_CODE_UNION))
7234     {
7235       if (noerr)
7236         return NULL;
7237       else
7238         {
7239           target_terminal_ours ();
7240           gdb_flush (gdb_stdout);
7241           if (type == NULL)
7242             error (_("Type (null) is not a structure or union type"));
7243           else
7244             {
7245               /* XXX: type_sprint */
7246               fprintf_unfiltered (gdb_stderr, _("Type "));
7247               type_print (type, "", gdb_stderr, -1);
7248               error (_(" is not a structure or union type"));
7249             }
7250         }
7251     }
7252
7253   type = to_static_fixed_type (type);
7254
7255   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7256     {
7257       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7258       struct type *t;
7259       int disp;
7260
7261       if (t_field_name == NULL)
7262         continue;
7263
7264       else if (field_name_match (t_field_name, name))
7265         {
7266           if (dispp != NULL)
7267             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7268           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7269         }
7270
7271       else if (ada_is_wrapper_field (type, i))
7272         {
7273           disp = 0;
7274           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7275                                           0, 1, &disp);
7276           if (t != NULL)
7277             {
7278               if (dispp != NULL)
7279                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7280               return t;
7281             }
7282         }
7283
7284       else if (ada_is_variant_part (type, i))
7285         {
7286           int j;
7287           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7288                                                                         i));
7289
7290           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7291             {
7292               /* FIXME pnh 2008/01/26: We check for a field that is
7293                  NOT wrapped in a struct, since the compiler sometimes
7294                  generates these for unchecked variant types.  Revisit
7295                  if the compiler changes this practice.  */
7296               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7297               disp = 0;
7298               if (v_field_name != NULL 
7299                   && field_name_match (v_field_name, name))
7300                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7301               else
7302                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7303                                                                  j),
7304                                                 name, 0, 1, &disp);
7305
7306               if (t != NULL)
7307                 {
7308                   if (dispp != NULL)
7309                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7310                   return t;
7311                 }
7312             }
7313         }
7314
7315     }
7316
7317 BadName:
7318   if (!noerr)
7319     {
7320       target_terminal_ours ();
7321       gdb_flush (gdb_stdout);
7322       if (name == NULL)
7323         {
7324           /* XXX: type_sprint */
7325           fprintf_unfiltered (gdb_stderr, _("Type "));
7326           type_print (type, "", gdb_stderr, -1);
7327           error (_(" has no component named <null>"));
7328         }
7329       else
7330         {
7331           /* XXX: type_sprint */
7332           fprintf_unfiltered (gdb_stderr, _("Type "));
7333           type_print (type, "", gdb_stderr, -1);
7334           error (_(" has no component named %s"), name);
7335         }
7336     }
7337
7338   return NULL;
7339 }
7340
7341 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7342    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7343    represents an unchecked union (that is, the variant part of a
7344    record that is named in an Unchecked_Union pragma).  */
7345
7346 static int
7347 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7348 {
7349   char *discrim_name = ada_variant_discrim_name (var_type);
7350
7351   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7352           == NULL);
7353 }
7354
7355
7356 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7357    within a value of type OUTER_TYPE that is stored in GDB at
7358    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7359    numbering from 0) is applicable.  Returns -1 if none are.  */
7360
7361 int
7362 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7363                            const gdb_byte *outer_valaddr)
7364 {
7365   int others_clause;
7366   int i;
7367   char *discrim_name = ada_variant_discrim_name (var_type);
7368   struct value *outer;
7369   struct value *discrim;
7370   LONGEST discrim_val;
7371
7372   /* Using plain value_from_contents_and_address here causes problems
7373      because we will end up trying to resolve a type that is currently
7374      being constructed.  */
7375   outer = value_from_contents_and_address_unresolved (outer_type,
7376                                                       outer_valaddr, 0);
7377   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7378   if (discrim == NULL)
7379     return -1;
7380   discrim_val = value_as_long (discrim);
7381
7382   others_clause = -1;
7383   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7384     {
7385       if (ada_is_others_clause (var_type, i))
7386         others_clause = i;
7387       else if (ada_in_variant (discrim_val, var_type, i))
7388         return i;
7389     }
7390
7391   return others_clause;
7392 }
7393 \f
7394
7395
7396                                 /* Dynamic-Sized Records */
7397
7398 /* Strategy: The type ostensibly attached to a value with dynamic size
7399    (i.e., a size that is not statically recorded in the debugging
7400    data) does not accurately reflect the size or layout of the value.
7401    Our strategy is to convert these values to values with accurate,
7402    conventional types that are constructed on the fly.  */
7403
7404 /* There is a subtle and tricky problem here.  In general, we cannot
7405    determine the size of dynamic records without its data.  However,
7406    the 'struct value' data structure, which GDB uses to represent
7407    quantities in the inferior process (the target), requires the size
7408    of the type at the time of its allocation in order to reserve space
7409    for GDB's internal copy of the data.  That's why the
7410    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7411    rather than struct value*s.
7412
7413    However, GDB's internal history variables ($1, $2, etc.) are
7414    struct value*s containing internal copies of the data that are not, in
7415    general, the same as the data at their corresponding addresses in
7416    the target.  Fortunately, the types we give to these values are all
7417    conventional, fixed-size types (as per the strategy described
7418    above), so that we don't usually have to perform the
7419    'to_fixed_xxx_type' conversions to look at their values.
7420    Unfortunately, there is one exception: if one of the internal
7421    history variables is an array whose elements are unconstrained
7422    records, then we will need to create distinct fixed types for each
7423    element selected.  */
7424
7425 /* The upshot of all of this is that many routines take a (type, host
7426    address, target address) triple as arguments to represent a value.
7427    The host address, if non-null, is supposed to contain an internal
7428    copy of the relevant data; otherwise, the program is to consult the
7429    target at the target address.  */
7430
7431 /* Assuming that VAL0 represents a pointer value, the result of
7432    dereferencing it.  Differs from value_ind in its treatment of
7433    dynamic-sized types.  */
7434
7435 struct value *
7436 ada_value_ind (struct value *val0)
7437 {
7438   struct value *val = value_ind (val0);
7439
7440   if (ada_is_tagged_type (value_type (val), 0))
7441     val = ada_tag_value_at_base_address (val);
7442
7443   return ada_to_fixed_value (val);
7444 }
7445
7446 /* The value resulting from dereferencing any "reference to"
7447    qualifiers on VAL0.  */
7448
7449 static struct value *
7450 ada_coerce_ref (struct value *val0)
7451 {
7452   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7453     {
7454       struct value *val = val0;
7455
7456       val = coerce_ref (val);
7457
7458       if (ada_is_tagged_type (value_type (val), 0))
7459         val = ada_tag_value_at_base_address (val);
7460
7461       return ada_to_fixed_value (val);
7462     }
7463   else
7464     return val0;
7465 }
7466
7467 /* Return OFF rounded upward if necessary to a multiple of
7468    ALIGNMENT (a power of 2).  */
7469
7470 static unsigned int
7471 align_value (unsigned int off, unsigned int alignment)
7472 {
7473   return (off + alignment - 1) & ~(alignment - 1);
7474 }
7475
7476 /* Return the bit alignment required for field #F of template type TYPE.  */
7477
7478 static unsigned int
7479 field_alignment (struct type *type, int f)
7480 {
7481   const char *name = TYPE_FIELD_NAME (type, f);
7482   int len;
7483   int align_offset;
7484
7485   /* The field name should never be null, unless the debugging information
7486      is somehow malformed.  In this case, we assume the field does not
7487      require any alignment.  */
7488   if (name == NULL)
7489     return 1;
7490
7491   len = strlen (name);
7492
7493   if (!isdigit (name[len - 1]))
7494     return 1;
7495
7496   if (isdigit (name[len - 2]))
7497     align_offset = len - 2;
7498   else
7499     align_offset = len - 1;
7500
7501   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7502     return TARGET_CHAR_BIT;
7503
7504   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7505 }
7506
7507 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7508
7509 static struct symbol *
7510 ada_find_any_type_symbol (const char *name)
7511 {
7512   struct symbol *sym;
7513
7514   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7515   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7516     return sym;
7517
7518   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7519   return sym;
7520 }
7521
7522 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7523    solely for types defined by debug info, it will not search the GDB
7524    primitive types.  */
7525
7526 static struct type *
7527 ada_find_any_type (const char *name)
7528 {
7529   struct symbol *sym = ada_find_any_type_symbol (name);
7530
7531   if (sym != NULL)
7532     return SYMBOL_TYPE (sym);
7533
7534   return NULL;
7535 }
7536
7537 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7538    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7539    symbol, in which case it is returned.  Otherwise, this looks for
7540    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7541    Return symbol if found, and NULL otherwise.  */
7542
7543 struct symbol *
7544 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7545 {
7546   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7547   struct symbol *sym;
7548
7549   if (strstr (name, "___XR") != NULL)
7550      return name_sym;
7551
7552   sym = find_old_style_renaming_symbol (name, block);
7553
7554   if (sym != NULL)
7555     return sym;
7556
7557   /* Not right yet.  FIXME pnh 7/20/2007.  */
7558   sym = ada_find_any_type_symbol (name);
7559   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7560     return sym;
7561   else
7562     return NULL;
7563 }
7564
7565 static struct symbol *
7566 find_old_style_renaming_symbol (const char *name, const struct block *block)
7567 {
7568   const struct symbol *function_sym = block_linkage_function (block);
7569   char *rename;
7570
7571   if (function_sym != NULL)
7572     {
7573       /* If the symbol is defined inside a function, NAME is not fully
7574          qualified.  This means we need to prepend the function name
7575          as well as adding the ``___XR'' suffix to build the name of
7576          the associated renaming symbol.  */
7577       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7578       /* Function names sometimes contain suffixes used
7579          for instance to qualify nested subprograms.  When building
7580          the XR type name, we need to make sure that this suffix is
7581          not included.  So do not include any suffix in the function
7582          name length below.  */
7583       int function_name_len = ada_name_prefix_len (function_name);
7584       const int rename_len = function_name_len + 2      /*  "__" */
7585         + strlen (name) + 6 /* "___XR\0" */ ;
7586
7587       /* Strip the suffix if necessary.  */
7588       ada_remove_trailing_digits (function_name, &function_name_len);
7589       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7590       ada_remove_Xbn_suffix (function_name, &function_name_len);
7591
7592       /* Library-level functions are a special case, as GNAT adds
7593          a ``_ada_'' prefix to the function name to avoid namespace
7594          pollution.  However, the renaming symbols themselves do not
7595          have this prefix, so we need to skip this prefix if present.  */
7596       if (function_name_len > 5 /* "_ada_" */
7597           && strstr (function_name, "_ada_") == function_name)
7598         {
7599           function_name += 5;
7600           function_name_len -= 5;
7601         }
7602
7603       rename = (char *) alloca (rename_len * sizeof (char));
7604       strncpy (rename, function_name, function_name_len);
7605       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7606                  "__%s___XR", name);
7607     }
7608   else
7609     {
7610       const int rename_len = strlen (name) + 6;
7611
7612       rename = (char *) alloca (rename_len * sizeof (char));
7613       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7614     }
7615
7616   return ada_find_any_type_symbol (rename);
7617 }
7618
7619 /* Because of GNAT encoding conventions, several GDB symbols may match a
7620    given type name.  If the type denoted by TYPE0 is to be preferred to
7621    that of TYPE1 for purposes of type printing, return non-zero;
7622    otherwise return 0.  */
7623
7624 int
7625 ada_prefer_type (struct type *type0, struct type *type1)
7626 {
7627   if (type1 == NULL)
7628     return 1;
7629   else if (type0 == NULL)
7630     return 0;
7631   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7632     return 1;
7633   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7634     return 0;
7635   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7636     return 1;
7637   else if (ada_is_constrained_packed_array_type (type0))
7638     return 1;
7639   else if (ada_is_array_descriptor_type (type0)
7640            && !ada_is_array_descriptor_type (type1))
7641     return 1;
7642   else
7643     {
7644       const char *type0_name = type_name_no_tag (type0);
7645       const char *type1_name = type_name_no_tag (type1);
7646
7647       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7648           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7649         return 1;
7650     }
7651   return 0;
7652 }
7653
7654 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7655    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
7656
7657 const char *
7658 ada_type_name (struct type *type)
7659 {
7660   if (type == NULL)
7661     return NULL;
7662   else if (TYPE_NAME (type) != NULL)
7663     return TYPE_NAME (type);
7664   else
7665     return TYPE_TAG_NAME (type);
7666 }
7667
7668 /* Search the list of "descriptive" types associated to TYPE for a type
7669    whose name is NAME.  */
7670
7671 static struct type *
7672 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7673 {
7674   struct type *result;
7675
7676   if (ada_ignore_descriptive_types_p)
7677     return NULL;
7678
7679   /* If there no descriptive-type info, then there is no parallel type
7680      to be found.  */
7681   if (!HAVE_GNAT_AUX_INFO (type))
7682     return NULL;
7683
7684   result = TYPE_DESCRIPTIVE_TYPE (type);
7685   while (result != NULL)
7686     {
7687       const char *result_name = ada_type_name (result);
7688
7689       if (result_name == NULL)
7690         {
7691           warning (_("unexpected null name on descriptive type"));
7692           return NULL;
7693         }
7694
7695       /* If the names match, stop.  */
7696       if (strcmp (result_name, name) == 0)
7697         break;
7698
7699       /* Otherwise, look at the next item on the list, if any.  */
7700       if (HAVE_GNAT_AUX_INFO (result))
7701         result = TYPE_DESCRIPTIVE_TYPE (result);
7702       else
7703         result = NULL;
7704     }
7705
7706   /* If we didn't find a match, see whether this is a packed array.  With
7707      older compilers, the descriptive type information is either absent or
7708      irrelevant when it comes to packed arrays so the above lookup fails.
7709      Fall back to using a parallel lookup by name in this case.  */
7710   if (result == NULL && ada_is_constrained_packed_array_type (type))
7711     return ada_find_any_type (name);
7712
7713   return result;
7714 }
7715
7716 /* Find a parallel type to TYPE with the specified NAME, using the
7717    descriptive type taken from the debugging information, if available,
7718    and otherwise using the (slower) name-based method.  */
7719
7720 static struct type *
7721 ada_find_parallel_type_with_name (struct type *type, const char *name)
7722 {
7723   struct type *result = NULL;
7724
7725   if (HAVE_GNAT_AUX_INFO (type))
7726     result = find_parallel_type_by_descriptive_type (type, name);
7727   else
7728     result = ada_find_any_type (name);
7729
7730   return result;
7731 }
7732
7733 /* Same as above, but specify the name of the parallel type by appending
7734    SUFFIX to the name of TYPE.  */
7735
7736 struct type *
7737 ada_find_parallel_type (struct type *type, const char *suffix)
7738 {
7739   char *name;
7740   const char *typename = ada_type_name (type);
7741   int len;
7742
7743   if (typename == NULL)
7744     return NULL;
7745
7746   len = strlen (typename);
7747
7748   name = (char *) alloca (len + strlen (suffix) + 1);
7749
7750   strcpy (name, typename);
7751   strcpy (name + len, suffix);
7752
7753   return ada_find_parallel_type_with_name (type, name);
7754 }
7755
7756 /* If TYPE is a variable-size record type, return the corresponding template
7757    type describing its fields.  Otherwise, return NULL.  */
7758
7759 static struct type *
7760 dynamic_template_type (struct type *type)
7761 {
7762   type = ada_check_typedef (type);
7763
7764   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7765       || ada_type_name (type) == NULL)
7766     return NULL;
7767   else
7768     {
7769       int len = strlen (ada_type_name (type));
7770
7771       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7772         return type;
7773       else
7774         return ada_find_parallel_type (type, "___XVE");
7775     }
7776 }
7777
7778 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7779    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7780
7781 static int
7782 is_dynamic_field (struct type *templ_type, int field_num)
7783 {
7784   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7785
7786   return name != NULL
7787     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7788     && strstr (name, "___XVL") != NULL;
7789 }
7790
7791 /* The index of the variant field of TYPE, or -1 if TYPE does not
7792    represent a variant record type.  */
7793
7794 static int
7795 variant_field_index (struct type *type)
7796 {
7797   int f;
7798
7799   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7800     return -1;
7801
7802   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7803     {
7804       if (ada_is_variant_part (type, f))
7805         return f;
7806     }
7807   return -1;
7808 }
7809
7810 /* A record type with no fields.  */
7811
7812 static struct type *
7813 empty_record (struct type *template)
7814 {
7815   struct type *type = alloc_type_copy (template);
7816
7817   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7818   TYPE_NFIELDS (type) = 0;
7819   TYPE_FIELDS (type) = NULL;
7820   INIT_CPLUS_SPECIFIC (type);
7821   TYPE_NAME (type) = "<empty>";
7822   TYPE_TAG_NAME (type) = NULL;
7823   TYPE_LENGTH (type) = 0;
7824   return type;
7825 }
7826
7827 /* An ordinary record type (with fixed-length fields) that describes
7828    the value of type TYPE at VALADDR or ADDRESS (see comments at
7829    the beginning of this section) VAL according to GNAT conventions.
7830    DVAL0 should describe the (portion of a) record that contains any
7831    necessary discriminants.  It should be NULL if value_type (VAL) is
7832    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7833    variant field (unless unchecked) is replaced by a particular branch
7834    of the variant.
7835
7836    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7837    length are not statically known are discarded.  As a consequence,
7838    VALADDR, ADDRESS and DVAL0 are ignored.
7839
7840    NOTE: Limitations: For now, we assume that dynamic fields and
7841    variants occupy whole numbers of bytes.  However, they need not be
7842    byte-aligned.  */
7843
7844 struct type *
7845 ada_template_to_fixed_record_type_1 (struct type *type,
7846                                      const gdb_byte *valaddr,
7847                                      CORE_ADDR address, struct value *dval0,
7848                                      int keep_dynamic_fields)
7849 {
7850   struct value *mark = value_mark ();
7851   struct value *dval;
7852   struct type *rtype;
7853   int nfields, bit_len;
7854   int variant_field;
7855   long off;
7856   int fld_bit_len;
7857   int f;
7858
7859   /* Compute the number of fields in this record type that are going
7860      to be processed: unless keep_dynamic_fields, this includes only
7861      fields whose position and length are static will be processed.  */
7862   if (keep_dynamic_fields)
7863     nfields = TYPE_NFIELDS (type);
7864   else
7865     {
7866       nfields = 0;
7867       while (nfields < TYPE_NFIELDS (type)
7868              && !ada_is_variant_part (type, nfields)
7869              && !is_dynamic_field (type, nfields))
7870         nfields++;
7871     }
7872
7873   rtype = alloc_type_copy (type);
7874   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7875   INIT_CPLUS_SPECIFIC (rtype);
7876   TYPE_NFIELDS (rtype) = nfields;
7877   TYPE_FIELDS (rtype) = (struct field *)
7878     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7879   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7880   TYPE_NAME (rtype) = ada_type_name (type);
7881   TYPE_TAG_NAME (rtype) = NULL;
7882   TYPE_FIXED_INSTANCE (rtype) = 1;
7883
7884   off = 0;
7885   bit_len = 0;
7886   variant_field = -1;
7887
7888   for (f = 0; f < nfields; f += 1)
7889     {
7890       off = align_value (off, field_alignment (type, f))
7891         + TYPE_FIELD_BITPOS (type, f);
7892       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7893       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7894
7895       if (ada_is_variant_part (type, f))
7896         {
7897           variant_field = f;
7898           fld_bit_len = 0;
7899         }
7900       else if (is_dynamic_field (type, f))
7901         {
7902           const gdb_byte *field_valaddr = valaddr;
7903           CORE_ADDR field_address = address;
7904           struct type *field_type =
7905             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7906
7907           if (dval0 == NULL)
7908             {
7909               /* rtype's length is computed based on the run-time
7910                  value of discriminants.  If the discriminants are not
7911                  initialized, the type size may be completely bogus and
7912                  GDB may fail to allocate a value for it.  So check the
7913                  size first before creating the value.  */
7914               check_size (rtype);
7915               /* Using plain value_from_contents_and_address here
7916                  causes problems because we will end up trying to
7917                  resolve a type that is currently being
7918                  constructed.  */
7919               dval = value_from_contents_and_address_unresolved (rtype,
7920                                                                  valaddr,
7921                                                                  address);
7922               rtype = value_type (dval);
7923             }
7924           else
7925             dval = dval0;
7926
7927           /* If the type referenced by this field is an aligner type, we need
7928              to unwrap that aligner type, because its size might not be set.
7929              Keeping the aligner type would cause us to compute the wrong
7930              size for this field, impacting the offset of the all the fields
7931              that follow this one.  */
7932           if (ada_is_aligner_type (field_type))
7933             {
7934               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7935
7936               field_valaddr = cond_offset_host (field_valaddr, field_offset);
7937               field_address = cond_offset_target (field_address, field_offset);
7938               field_type = ada_aligned_type (field_type);
7939             }
7940
7941           field_valaddr = cond_offset_host (field_valaddr,
7942                                             off / TARGET_CHAR_BIT);
7943           field_address = cond_offset_target (field_address,
7944                                               off / TARGET_CHAR_BIT);
7945
7946           /* Get the fixed type of the field.  Note that, in this case,
7947              we do not want to get the real type out of the tag: if
7948              the current field is the parent part of a tagged record,
7949              we will get the tag of the object.  Clearly wrong: the real
7950              type of the parent is not the real type of the child.  We
7951              would end up in an infinite loop.  */
7952           field_type = ada_get_base_type (field_type);
7953           field_type = ada_to_fixed_type (field_type, field_valaddr,
7954                                           field_address, dval, 0);
7955           /* If the field size is already larger than the maximum
7956              object size, then the record itself will necessarily
7957              be larger than the maximum object size.  We need to make
7958              this check now, because the size might be so ridiculously
7959              large (due to an uninitialized variable in the inferior)
7960              that it would cause an overflow when adding it to the
7961              record size.  */
7962           check_size (field_type);
7963
7964           TYPE_FIELD_TYPE (rtype, f) = field_type;
7965           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7966           /* The multiplication can potentially overflow.  But because
7967              the field length has been size-checked just above, and
7968              assuming that the maximum size is a reasonable value,
7969              an overflow should not happen in practice.  So rather than
7970              adding overflow recovery code to this already complex code,
7971              we just assume that it's not going to happen.  */
7972           fld_bit_len =
7973             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7974         }
7975       else
7976         {
7977           /* Note: If this field's type is a typedef, it is important
7978              to preserve the typedef layer.
7979
7980              Otherwise, we might be transforming a typedef to a fat
7981              pointer (encoding a pointer to an unconstrained array),
7982              into a basic fat pointer (encoding an unconstrained
7983              array).  As both types are implemented using the same
7984              structure, the typedef is the only clue which allows us
7985              to distinguish between the two options.  Stripping it
7986              would prevent us from printing this field appropriately.  */
7987           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
7988           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7989           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7990             fld_bit_len =
7991               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7992           else
7993             {
7994               struct type *field_type = TYPE_FIELD_TYPE (type, f);
7995
7996               /* We need to be careful of typedefs when computing
7997                  the length of our field.  If this is a typedef,
7998                  get the length of the target type, not the length
7999                  of the typedef.  */
8000               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8001                 field_type = ada_typedef_target_type (field_type);
8002
8003               fld_bit_len =
8004                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8005             }
8006         }
8007       if (off + fld_bit_len > bit_len)
8008         bit_len = off + fld_bit_len;
8009       off += fld_bit_len;
8010       TYPE_LENGTH (rtype) =
8011         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8012     }
8013
8014   /* We handle the variant part, if any, at the end because of certain
8015      odd cases in which it is re-ordered so as NOT to be the last field of
8016      the record.  This can happen in the presence of representation
8017      clauses.  */
8018   if (variant_field >= 0)
8019     {
8020       struct type *branch_type;
8021
8022       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8023
8024       if (dval0 == NULL)
8025         {
8026           /* Using plain value_from_contents_and_address here causes
8027              problems because we will end up trying to resolve a type
8028              that is currently being constructed.  */
8029           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8030                                                              address);
8031           rtype = value_type (dval);
8032         }
8033       else
8034         dval = dval0;
8035
8036       branch_type =
8037         to_fixed_variant_branch_type
8038         (TYPE_FIELD_TYPE (type, variant_field),
8039          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8040          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8041       if (branch_type == NULL)
8042         {
8043           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8044             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8045           TYPE_NFIELDS (rtype) -= 1;
8046         }
8047       else
8048         {
8049           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8050           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8051           fld_bit_len =
8052             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8053             TARGET_CHAR_BIT;
8054           if (off + fld_bit_len > bit_len)
8055             bit_len = off + fld_bit_len;
8056           TYPE_LENGTH (rtype) =
8057             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8058         }
8059     }
8060
8061   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8062      should contain the alignment of that record, which should be a strictly
8063      positive value.  If null or negative, then something is wrong, most
8064      probably in the debug info.  In that case, we don't round up the size
8065      of the resulting type.  If this record is not part of another structure,
8066      the current RTYPE length might be good enough for our purposes.  */
8067   if (TYPE_LENGTH (type) <= 0)
8068     {
8069       if (TYPE_NAME (rtype))
8070         warning (_("Invalid type size for `%s' detected: %d."),
8071                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8072       else
8073         warning (_("Invalid type size for <unnamed> detected: %d."),
8074                  TYPE_LENGTH (type));
8075     }
8076   else
8077     {
8078       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8079                                          TYPE_LENGTH (type));
8080     }
8081
8082   value_free_to_mark (mark);
8083   if (TYPE_LENGTH (rtype) > varsize_limit)
8084     error (_("record type with dynamic size is larger than varsize-limit"));
8085   return rtype;
8086 }
8087
8088 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8089    of 1.  */
8090
8091 static struct type *
8092 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8093                                CORE_ADDR address, struct value *dval0)
8094 {
8095   return ada_template_to_fixed_record_type_1 (type, valaddr,
8096                                               address, dval0, 1);
8097 }
8098
8099 /* An ordinary record type in which ___XVL-convention fields and
8100    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8101    static approximations, containing all possible fields.  Uses
8102    no runtime values.  Useless for use in values, but that's OK,
8103    since the results are used only for type determinations.   Works on both
8104    structs and unions.  Representation note: to save space, we memorize
8105    the result of this function in the TYPE_TARGET_TYPE of the
8106    template type.  */
8107
8108 static struct type *
8109 template_to_static_fixed_type (struct type *type0)
8110 {
8111   struct type *type;
8112   int nfields;
8113   int f;
8114
8115   if (TYPE_TARGET_TYPE (type0) != NULL)
8116     return TYPE_TARGET_TYPE (type0);
8117
8118   nfields = TYPE_NFIELDS (type0);
8119   type = type0;
8120
8121   for (f = 0; f < nfields; f += 1)
8122     {
8123       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
8124       struct type *new_type;
8125
8126       if (is_dynamic_field (type0, f))
8127         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8128       else
8129         new_type = static_unwrap_type (field_type);
8130       if (type == type0 && new_type != field_type)
8131         {
8132           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8133           TYPE_CODE (type) = TYPE_CODE (type0);
8134           INIT_CPLUS_SPECIFIC (type);
8135           TYPE_NFIELDS (type) = nfields;
8136           TYPE_FIELDS (type) = (struct field *)
8137             TYPE_ALLOC (type, nfields * sizeof (struct field));
8138           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8139                   sizeof (struct field) * nfields);
8140           TYPE_NAME (type) = ada_type_name (type0);
8141           TYPE_TAG_NAME (type) = NULL;
8142           TYPE_FIXED_INSTANCE (type) = 1;
8143           TYPE_LENGTH (type) = 0;
8144         }
8145       TYPE_FIELD_TYPE (type, f) = new_type;
8146       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8147     }
8148   return type;
8149 }
8150
8151 /* Given an object of type TYPE whose contents are at VALADDR and
8152    whose address in memory is ADDRESS, returns a revision of TYPE,
8153    which should be a non-dynamic-sized record, in which the variant
8154    part, if any, is replaced with the appropriate branch.  Looks
8155    for discriminant values in DVAL0, which can be NULL if the record
8156    contains the necessary discriminant values.  */
8157
8158 static struct type *
8159 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8160                                    CORE_ADDR address, struct value *dval0)
8161 {
8162   struct value *mark = value_mark ();
8163   struct value *dval;
8164   struct type *rtype;
8165   struct type *branch_type;
8166   int nfields = TYPE_NFIELDS (type);
8167   int variant_field = variant_field_index (type);
8168
8169   if (variant_field == -1)
8170     return type;
8171
8172   if (dval0 == NULL)
8173     {
8174       dval = value_from_contents_and_address (type, valaddr, address);
8175       type = value_type (dval);
8176     }
8177   else
8178     dval = dval0;
8179
8180   rtype = alloc_type_copy (type);
8181   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8182   INIT_CPLUS_SPECIFIC (rtype);
8183   TYPE_NFIELDS (rtype) = nfields;
8184   TYPE_FIELDS (rtype) =
8185     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8186   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8187           sizeof (struct field) * nfields);
8188   TYPE_NAME (rtype) = ada_type_name (type);
8189   TYPE_TAG_NAME (rtype) = NULL;
8190   TYPE_FIXED_INSTANCE (rtype) = 1;
8191   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8192
8193   branch_type = to_fixed_variant_branch_type
8194     (TYPE_FIELD_TYPE (type, variant_field),
8195      cond_offset_host (valaddr,
8196                        TYPE_FIELD_BITPOS (type, variant_field)
8197                        / TARGET_CHAR_BIT),
8198      cond_offset_target (address,
8199                          TYPE_FIELD_BITPOS (type, variant_field)
8200                          / TARGET_CHAR_BIT), dval);
8201   if (branch_type == NULL)
8202     {
8203       int f;
8204
8205       for (f = variant_field + 1; f < nfields; f += 1)
8206         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8207       TYPE_NFIELDS (rtype) -= 1;
8208     }
8209   else
8210     {
8211       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8212       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8213       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8214       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8215     }
8216   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8217
8218   value_free_to_mark (mark);
8219   return rtype;
8220 }
8221
8222 /* An ordinary record type (with fixed-length fields) that describes
8223    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8224    beginning of this section].   Any necessary discriminants' values
8225    should be in DVAL, a record value; it may be NULL if the object
8226    at ADDR itself contains any necessary discriminant values.
8227    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8228    values from the record are needed.  Except in the case that DVAL,
8229    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8230    unchecked) is replaced by a particular branch of the variant.
8231
8232    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8233    is questionable and may be removed.  It can arise during the
8234    processing of an unconstrained-array-of-record type where all the
8235    variant branches have exactly the same size.  This is because in
8236    such cases, the compiler does not bother to use the XVS convention
8237    when encoding the record.  I am currently dubious of this
8238    shortcut and suspect the compiler should be altered.  FIXME.  */
8239
8240 static struct type *
8241 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8242                       CORE_ADDR address, struct value *dval)
8243 {
8244   struct type *templ_type;
8245
8246   if (TYPE_FIXED_INSTANCE (type0))
8247     return type0;
8248
8249   templ_type = dynamic_template_type (type0);
8250
8251   if (templ_type != NULL)
8252     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8253   else if (variant_field_index (type0) >= 0)
8254     {
8255       if (dval == NULL && valaddr == NULL && address == 0)
8256         return type0;
8257       return to_record_with_fixed_variant_part (type0, valaddr, address,
8258                                                 dval);
8259     }
8260   else
8261     {
8262       TYPE_FIXED_INSTANCE (type0) = 1;
8263       return type0;
8264     }
8265
8266 }
8267
8268 /* An ordinary record type (with fixed-length fields) that describes
8269    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8270    union type.  Any necessary discriminants' values should be in DVAL,
8271    a record value.  That is, this routine selects the appropriate
8272    branch of the union at ADDR according to the discriminant value
8273    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8274    it represents a variant subject to a pragma Unchecked_Union.  */
8275
8276 static struct type *
8277 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8278                               CORE_ADDR address, struct value *dval)
8279 {
8280   int which;
8281   struct type *templ_type;
8282   struct type *var_type;
8283
8284   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8285     var_type = TYPE_TARGET_TYPE (var_type0);
8286   else
8287     var_type = var_type0;
8288
8289   templ_type = ada_find_parallel_type (var_type, "___XVU");
8290
8291   if (templ_type != NULL)
8292     var_type = templ_type;
8293
8294   if (is_unchecked_variant (var_type, value_type (dval)))
8295       return var_type0;
8296   which =
8297     ada_which_variant_applies (var_type,
8298                                value_type (dval), value_contents (dval));
8299
8300   if (which < 0)
8301     return empty_record (var_type);
8302   else if (is_dynamic_field (var_type, which))
8303     return to_fixed_record_type
8304       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8305        valaddr, address, dval);
8306   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8307     return
8308       to_fixed_record_type
8309       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8310   else
8311     return TYPE_FIELD_TYPE (var_type, which);
8312 }
8313
8314 /* Assuming that TYPE0 is an array type describing the type of a value
8315    at ADDR, and that DVAL describes a record containing any
8316    discriminants used in TYPE0, returns a type for the value that
8317    contains no dynamic components (that is, no components whose sizes
8318    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8319    true, gives an error message if the resulting type's size is over
8320    varsize_limit.  */
8321
8322 static struct type *
8323 to_fixed_array_type (struct type *type0, struct value *dval,
8324                      int ignore_too_big)
8325 {
8326   struct type *index_type_desc;
8327   struct type *result;
8328   int constrained_packed_array_p;
8329
8330   type0 = ada_check_typedef (type0);
8331   if (TYPE_FIXED_INSTANCE (type0))
8332     return type0;
8333
8334   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8335   if (constrained_packed_array_p)
8336     type0 = decode_constrained_packed_array_type (type0);
8337
8338   index_type_desc = ada_find_parallel_type (type0, "___XA");
8339   ada_fixup_array_indexes_type (index_type_desc);
8340   if (index_type_desc == NULL)
8341     {
8342       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8343
8344       /* NOTE: elt_type---the fixed version of elt_type0---should never
8345          depend on the contents of the array in properly constructed
8346          debugging data.  */
8347       /* Create a fixed version of the array element type.
8348          We're not providing the address of an element here,
8349          and thus the actual object value cannot be inspected to do
8350          the conversion.  This should not be a problem, since arrays of
8351          unconstrained objects are not allowed.  In particular, all
8352          the elements of an array of a tagged type should all be of
8353          the same type specified in the debugging info.  No need to
8354          consult the object tag.  */
8355       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8356
8357       /* Make sure we always create a new array type when dealing with
8358          packed array types, since we're going to fix-up the array
8359          type length and element bitsize a little further down.  */
8360       if (elt_type0 == elt_type && !constrained_packed_array_p)
8361         result = type0;
8362       else
8363         result = create_array_type (alloc_type_copy (type0),
8364                                     elt_type, TYPE_INDEX_TYPE (type0));
8365     }
8366   else
8367     {
8368       int i;
8369       struct type *elt_type0;
8370
8371       elt_type0 = type0;
8372       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8373         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8374
8375       /* NOTE: result---the fixed version of elt_type0---should never
8376          depend on the contents of the array in properly constructed
8377          debugging data.  */
8378       /* Create a fixed version of the array element type.
8379          We're not providing the address of an element here,
8380          and thus the actual object value cannot be inspected to do
8381          the conversion.  This should not be a problem, since arrays of
8382          unconstrained objects are not allowed.  In particular, all
8383          the elements of an array of a tagged type should all be of
8384          the same type specified in the debugging info.  No need to
8385          consult the object tag.  */
8386       result =
8387         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8388
8389       elt_type0 = type0;
8390       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8391         {
8392           struct type *range_type =
8393             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8394
8395           result = create_array_type (alloc_type_copy (elt_type0),
8396                                       result, range_type);
8397           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8398         }
8399       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8400         error (_("array type with dynamic size is larger than varsize-limit"));
8401     }
8402
8403   /* We want to preserve the type name.  This can be useful when
8404      trying to get the type name of a value that has already been
8405      printed (for instance, if the user did "print VAR; whatis $".  */
8406   TYPE_NAME (result) = TYPE_NAME (type0);
8407
8408   if (constrained_packed_array_p)
8409     {
8410       /* So far, the resulting type has been created as if the original
8411          type was a regular (non-packed) array type.  As a result, the
8412          bitsize of the array elements needs to be set again, and the array
8413          length needs to be recomputed based on that bitsize.  */
8414       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8415       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8416
8417       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8418       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8419       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8420         TYPE_LENGTH (result)++;
8421     }
8422
8423   TYPE_FIXED_INSTANCE (result) = 1;
8424   return result;
8425 }
8426
8427
8428 /* A standard type (containing no dynamically sized components)
8429    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8430    DVAL describes a record containing any discriminants used in TYPE0,
8431    and may be NULL if there are none, or if the object of type TYPE at
8432    ADDRESS or in VALADDR contains these discriminants.
8433    
8434    If CHECK_TAG is not null, in the case of tagged types, this function
8435    attempts to locate the object's tag and use it to compute the actual
8436    type.  However, when ADDRESS is null, we cannot use it to determine the
8437    location of the tag, and therefore compute the tagged type's actual type.
8438    So we return the tagged type without consulting the tag.  */
8439    
8440 static struct type *
8441 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8442                    CORE_ADDR address, struct value *dval, int check_tag)
8443 {
8444   type = ada_check_typedef (type);
8445   switch (TYPE_CODE (type))
8446     {
8447     default:
8448       return type;
8449     case TYPE_CODE_STRUCT:
8450       {
8451         struct type *static_type = to_static_fixed_type (type);
8452         struct type *fixed_record_type =
8453           to_fixed_record_type (type, valaddr, address, NULL);
8454
8455         /* If STATIC_TYPE is a tagged type and we know the object's address,
8456            then we can determine its tag, and compute the object's actual
8457            type from there.  Note that we have to use the fixed record
8458            type (the parent part of the record may have dynamic fields
8459            and the way the location of _tag is expressed may depend on
8460            them).  */
8461
8462         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8463           {
8464             struct value *tag =
8465               value_tag_from_contents_and_address
8466               (fixed_record_type,
8467                valaddr,
8468                address);
8469             struct type *real_type = type_from_tag (tag);
8470             struct value *obj =
8471               value_from_contents_and_address (fixed_record_type,
8472                                                valaddr,
8473                                                address);
8474             fixed_record_type = value_type (obj);
8475             if (real_type != NULL)
8476               return to_fixed_record_type
8477                 (real_type, NULL,
8478                  value_address (ada_tag_value_at_base_address (obj)), NULL);
8479           }
8480
8481         /* Check to see if there is a parallel ___XVZ variable.
8482            If there is, then it provides the actual size of our type.  */
8483         else if (ada_type_name (fixed_record_type) != NULL)
8484           {
8485             const char *name = ada_type_name (fixed_record_type);
8486             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8487             int xvz_found = 0;
8488             LONGEST size;
8489
8490             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8491             size = get_int_var_value (xvz_name, &xvz_found);
8492             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8493               {
8494                 fixed_record_type = copy_type (fixed_record_type);
8495                 TYPE_LENGTH (fixed_record_type) = size;
8496
8497                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8498                    observed this when the debugging info is STABS, and
8499                    apparently it is something that is hard to fix.
8500
8501                    In practice, we don't need the actual type definition
8502                    at all, because the presence of the XVZ variable allows us
8503                    to assume that there must be a XVS type as well, which we
8504                    should be able to use later, when we need the actual type
8505                    definition.
8506
8507                    In the meantime, pretend that the "fixed" type we are
8508                    returning is NOT a stub, because this can cause trouble
8509                    when using this type to create new types targeting it.
8510                    Indeed, the associated creation routines often check
8511                    whether the target type is a stub and will try to replace
8512                    it, thus using a type with the wrong size.  This, in turn,
8513                    might cause the new type to have the wrong size too.
8514                    Consider the case of an array, for instance, where the size
8515                    of the array is computed from the number of elements in
8516                    our array multiplied by the size of its element.  */
8517                 TYPE_STUB (fixed_record_type) = 0;
8518               }
8519           }
8520         return fixed_record_type;
8521       }
8522     case TYPE_CODE_ARRAY:
8523       return to_fixed_array_type (type, dval, 1);
8524     case TYPE_CODE_UNION:
8525       if (dval == NULL)
8526         return type;
8527       else
8528         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8529     }
8530 }
8531
8532 /* The same as ada_to_fixed_type_1, except that it preserves the type
8533    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8534
8535    The typedef layer needs be preserved in order to differentiate between
8536    arrays and array pointers when both types are implemented using the same
8537    fat pointer.  In the array pointer case, the pointer is encoded as
8538    a typedef of the pointer type.  For instance, considering:
8539
8540           type String_Access is access String;
8541           S1 : String_Access := null;
8542
8543    To the debugger, S1 is defined as a typedef of type String.  But
8544    to the user, it is a pointer.  So if the user tries to print S1,
8545    we should not dereference the array, but print the array address
8546    instead.
8547
8548    If we didn't preserve the typedef layer, we would lose the fact that
8549    the type is to be presented as a pointer (needs de-reference before
8550    being printed).  And we would also use the source-level type name.  */
8551
8552 struct type *
8553 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8554                    CORE_ADDR address, struct value *dval, int check_tag)
8555
8556 {
8557   struct type *fixed_type =
8558     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8559
8560   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8561       then preserve the typedef layer.
8562
8563       Implementation note: We can only check the main-type portion of
8564       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8565       from TYPE now returns a type that has the same instance flags
8566       as TYPE.  For instance, if TYPE is a "typedef const", and its
8567       target type is a "struct", then the typedef elimination will return
8568       a "const" version of the target type.  See check_typedef for more
8569       details about how the typedef layer elimination is done.
8570
8571       brobecker/2010-11-19: It seems to me that the only case where it is
8572       useful to preserve the typedef layer is when dealing with fat pointers.
8573       Perhaps, we could add a check for that and preserve the typedef layer
8574       only in that situation.  But this seems unecessary so far, probably
8575       because we call check_typedef/ada_check_typedef pretty much everywhere.
8576       */
8577   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8578       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8579           == TYPE_MAIN_TYPE (fixed_type)))
8580     return type;
8581
8582   return fixed_type;
8583 }
8584
8585 /* A standard (static-sized) type corresponding as well as possible to
8586    TYPE0, but based on no runtime data.  */
8587
8588 static struct type *
8589 to_static_fixed_type (struct type *type0)
8590 {
8591   struct type *type;
8592
8593   if (type0 == NULL)
8594     return NULL;
8595
8596   if (TYPE_FIXED_INSTANCE (type0))
8597     return type0;
8598
8599   type0 = ada_check_typedef (type0);
8600
8601   switch (TYPE_CODE (type0))
8602     {
8603     default:
8604       return type0;
8605     case TYPE_CODE_STRUCT:
8606       type = dynamic_template_type (type0);
8607       if (type != NULL)
8608         return template_to_static_fixed_type (type);
8609       else
8610         return template_to_static_fixed_type (type0);
8611     case TYPE_CODE_UNION:
8612       type = ada_find_parallel_type (type0, "___XVU");
8613       if (type != NULL)
8614         return template_to_static_fixed_type (type);
8615       else
8616         return template_to_static_fixed_type (type0);
8617     }
8618 }
8619
8620 /* A static approximation of TYPE with all type wrappers removed.  */
8621
8622 static struct type *
8623 static_unwrap_type (struct type *type)
8624 {
8625   if (ada_is_aligner_type (type))
8626     {
8627       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8628       if (ada_type_name (type1) == NULL)
8629         TYPE_NAME (type1) = ada_type_name (type);
8630
8631       return static_unwrap_type (type1);
8632     }
8633   else
8634     {
8635       struct type *raw_real_type = ada_get_base_type (type);
8636
8637       if (raw_real_type == type)
8638         return type;
8639       else
8640         return to_static_fixed_type (raw_real_type);
8641     }
8642 }
8643
8644 /* In some cases, incomplete and private types require
8645    cross-references that are not resolved as records (for example,
8646       type Foo;
8647       type FooP is access Foo;
8648       V: FooP;
8649       type Foo is array ...;
8650    ).  In these cases, since there is no mechanism for producing
8651    cross-references to such types, we instead substitute for FooP a
8652    stub enumeration type that is nowhere resolved, and whose tag is
8653    the name of the actual type.  Call these types "non-record stubs".  */
8654
8655 /* A type equivalent to TYPE that is not a non-record stub, if one
8656    exists, otherwise TYPE.  */
8657
8658 struct type *
8659 ada_check_typedef (struct type *type)
8660 {
8661   if (type == NULL)
8662     return NULL;
8663
8664   /* If our type is a typedef type of a fat pointer, then we're done.
8665      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8666      what allows us to distinguish between fat pointers that represent
8667      array types, and fat pointers that represent array access types
8668      (in both cases, the compiler implements them as fat pointers).  */
8669   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8670       && is_thick_pntr (ada_typedef_target_type (type)))
8671     return type;
8672
8673   CHECK_TYPEDEF (type);
8674   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8675       || !TYPE_STUB (type)
8676       || TYPE_TAG_NAME (type) == NULL)
8677     return type;
8678   else
8679     {
8680       const char *name = TYPE_TAG_NAME (type);
8681       struct type *type1 = ada_find_any_type (name);
8682
8683       if (type1 == NULL)
8684         return type;
8685
8686       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8687          stubs pointing to arrays, as we don't create symbols for array
8688          types, only for the typedef-to-array types).  If that's the case,
8689          strip the typedef layer.  */
8690       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8691         type1 = ada_check_typedef (type1);
8692
8693       return type1;
8694     }
8695 }
8696
8697 /* A value representing the data at VALADDR/ADDRESS as described by
8698    type TYPE0, but with a standard (static-sized) type that correctly
8699    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8700    type, then return VAL0 [this feature is simply to avoid redundant
8701    creation of struct values].  */
8702
8703 static struct value *
8704 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8705                            struct value *val0)
8706 {
8707   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8708
8709   if (type == type0 && val0 != NULL)
8710     return val0;
8711   else
8712     return value_from_contents_and_address (type, 0, address);
8713 }
8714
8715 /* A value representing VAL, but with a standard (static-sized) type
8716    that correctly describes it.  Does not necessarily create a new
8717    value.  */
8718
8719 struct value *
8720 ada_to_fixed_value (struct value *val)
8721 {
8722   val = unwrap_value (val);
8723   val = ada_to_fixed_value_create (value_type (val),
8724                                       value_address (val),
8725                                       val);
8726   return val;
8727 }
8728 \f
8729
8730 /* Attributes */
8731
8732 /* Table mapping attribute numbers to names.
8733    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8734
8735 static const char *attribute_names[] = {
8736   "<?>",
8737
8738   "first",
8739   "last",
8740   "length",
8741   "image",
8742   "max",
8743   "min",
8744   "modulus",
8745   "pos",
8746   "size",
8747   "tag",
8748   "val",
8749   0
8750 };
8751
8752 const char *
8753 ada_attribute_name (enum exp_opcode n)
8754 {
8755   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8756     return attribute_names[n - OP_ATR_FIRST + 1];
8757   else
8758     return attribute_names[0];
8759 }
8760
8761 /* Evaluate the 'POS attribute applied to ARG.  */
8762
8763 static LONGEST
8764 pos_atr (struct value *arg)
8765 {
8766   struct value *val = coerce_ref (arg);
8767   struct type *type = value_type (val);
8768
8769   if (!discrete_type_p (type))
8770     error (_("'POS only defined on discrete types"));
8771
8772   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8773     {
8774       int i;
8775       LONGEST v = value_as_long (val);
8776
8777       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8778         {
8779           if (v == TYPE_FIELD_ENUMVAL (type, i))
8780             return i;
8781         }
8782       error (_("enumeration value is invalid: can't find 'POS"));
8783     }
8784   else
8785     return value_as_long (val);
8786 }
8787
8788 static struct value *
8789 value_pos_atr (struct type *type, struct value *arg)
8790 {
8791   return value_from_longest (type, pos_atr (arg));
8792 }
8793
8794 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8795
8796 static struct value *
8797 value_val_atr (struct type *type, struct value *arg)
8798 {
8799   if (!discrete_type_p (type))
8800     error (_("'VAL only defined on discrete types"));
8801   if (!integer_type_p (value_type (arg)))
8802     error (_("'VAL requires integral argument"));
8803
8804   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8805     {
8806       long pos = value_as_long (arg);
8807
8808       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8809         error (_("argument to 'VAL out of range"));
8810       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8811     }
8812   else
8813     return value_from_longest (type, value_as_long (arg));
8814 }
8815 \f
8816
8817                                 /* Evaluation */
8818
8819 /* True if TYPE appears to be an Ada character type.
8820    [At the moment, this is true only for Character and Wide_Character;
8821    It is a heuristic test that could stand improvement].  */
8822
8823 int
8824 ada_is_character_type (struct type *type)
8825 {
8826   const char *name;
8827
8828   /* If the type code says it's a character, then assume it really is,
8829      and don't check any further.  */
8830   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8831     return 1;
8832   
8833   /* Otherwise, assume it's a character type iff it is a discrete type
8834      with a known character type name.  */
8835   name = ada_type_name (type);
8836   return (name != NULL
8837           && (TYPE_CODE (type) == TYPE_CODE_INT
8838               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8839           && (strcmp (name, "character") == 0
8840               || strcmp (name, "wide_character") == 0
8841               || strcmp (name, "wide_wide_character") == 0
8842               || strcmp (name, "unsigned char") == 0));
8843 }
8844
8845 /* True if TYPE appears to be an Ada string type.  */
8846
8847 int
8848 ada_is_string_type (struct type *type)
8849 {
8850   type = ada_check_typedef (type);
8851   if (type != NULL
8852       && TYPE_CODE (type) != TYPE_CODE_PTR
8853       && (ada_is_simple_array_type (type)
8854           || ada_is_array_descriptor_type (type))
8855       && ada_array_arity (type) == 1)
8856     {
8857       struct type *elttype = ada_array_element_type (type, 1);
8858
8859       return ada_is_character_type (elttype);
8860     }
8861   else
8862     return 0;
8863 }
8864
8865 /* The compiler sometimes provides a parallel XVS type for a given
8866    PAD type.  Normally, it is safe to follow the PAD type directly,
8867    but older versions of the compiler have a bug that causes the offset
8868    of its "F" field to be wrong.  Following that field in that case
8869    would lead to incorrect results, but this can be worked around
8870    by ignoring the PAD type and using the associated XVS type instead.
8871
8872    Set to True if the debugger should trust the contents of PAD types.
8873    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8874 static int trust_pad_over_xvs = 1;
8875
8876 /* True if TYPE is a struct type introduced by the compiler to force the
8877    alignment of a value.  Such types have a single field with a
8878    distinctive name.  */
8879
8880 int
8881 ada_is_aligner_type (struct type *type)
8882 {
8883   type = ada_check_typedef (type);
8884
8885   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8886     return 0;
8887
8888   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8889           && TYPE_NFIELDS (type) == 1
8890           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8891 }
8892
8893 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8894    the parallel type.  */
8895
8896 struct type *
8897 ada_get_base_type (struct type *raw_type)
8898 {
8899   struct type *real_type_namer;
8900   struct type *raw_real_type;
8901
8902   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8903     return raw_type;
8904
8905   if (ada_is_aligner_type (raw_type))
8906     /* The encoding specifies that we should always use the aligner type.
8907        So, even if this aligner type has an associated XVS type, we should
8908        simply ignore it.
8909
8910        According to the compiler gurus, an XVS type parallel to an aligner
8911        type may exist because of a stabs limitation.  In stabs, aligner
8912        types are empty because the field has a variable-sized type, and
8913        thus cannot actually be used as an aligner type.  As a result,
8914        we need the associated parallel XVS type to decode the type.
8915        Since the policy in the compiler is to not change the internal
8916        representation based on the debugging info format, we sometimes
8917        end up having a redundant XVS type parallel to the aligner type.  */
8918     return raw_type;
8919
8920   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8921   if (real_type_namer == NULL
8922       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8923       || TYPE_NFIELDS (real_type_namer) != 1)
8924     return raw_type;
8925
8926   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8927     {
8928       /* This is an older encoding form where the base type needs to be
8929          looked up by name.  We prefer the newer enconding because it is
8930          more efficient.  */
8931       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8932       if (raw_real_type == NULL)
8933         return raw_type;
8934       else
8935         return raw_real_type;
8936     }
8937
8938   /* The field in our XVS type is a reference to the base type.  */
8939   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
8940 }
8941
8942 /* The type of value designated by TYPE, with all aligners removed.  */
8943
8944 struct type *
8945 ada_aligned_type (struct type *type)
8946 {
8947   if (ada_is_aligner_type (type))
8948     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8949   else
8950     return ada_get_base_type (type);
8951 }
8952
8953
8954 /* The address of the aligned value in an object at address VALADDR
8955    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
8956
8957 const gdb_byte *
8958 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
8959 {
8960   if (ada_is_aligner_type (type))
8961     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8962                                    valaddr +
8963                                    TYPE_FIELD_BITPOS (type,
8964                                                       0) / TARGET_CHAR_BIT);
8965   else
8966     return valaddr;
8967 }
8968
8969
8970
8971 /* The printed representation of an enumeration literal with encoded
8972    name NAME.  The value is good to the next call of ada_enum_name.  */
8973 const char *
8974 ada_enum_name (const char *name)
8975 {
8976   static char *result;
8977   static size_t result_len = 0;
8978   char *tmp;
8979
8980   /* First, unqualify the enumeration name:
8981      1. Search for the last '.' character.  If we find one, then skip
8982      all the preceding characters, the unqualified name starts
8983      right after that dot.
8984      2. Otherwise, we may be debugging on a target where the compiler
8985      translates dots into "__".  Search forward for double underscores,
8986      but stop searching when we hit an overloading suffix, which is
8987      of the form "__" followed by digits.  */
8988
8989   tmp = strrchr (name, '.');
8990   if (tmp != NULL)
8991     name = tmp + 1;
8992   else
8993     {
8994       while ((tmp = strstr (name, "__")) != NULL)
8995         {
8996           if (isdigit (tmp[2]))
8997             break;
8998           else
8999             name = tmp + 2;
9000         }
9001     }
9002
9003   if (name[0] == 'Q')
9004     {
9005       int v;
9006
9007       if (name[1] == 'U' || name[1] == 'W')
9008         {
9009           if (sscanf (name + 2, "%x", &v) != 1)
9010             return name;
9011         }
9012       else
9013         return name;
9014
9015       GROW_VECT (result, result_len, 16);
9016       if (isascii (v) && isprint (v))
9017         xsnprintf (result, result_len, "'%c'", v);
9018       else if (name[1] == 'U')
9019         xsnprintf (result, result_len, "[\"%02x\"]", v);
9020       else
9021         xsnprintf (result, result_len, "[\"%04x\"]", v);
9022
9023       return result;
9024     }
9025   else
9026     {
9027       tmp = strstr (name, "__");
9028       if (tmp == NULL)
9029         tmp = strstr (name, "$");
9030       if (tmp != NULL)
9031         {
9032           GROW_VECT (result, result_len, tmp - name + 1);
9033           strncpy (result, name, tmp - name);
9034           result[tmp - name] = '\0';
9035           return result;
9036         }
9037
9038       return name;
9039     }
9040 }
9041
9042 /* Evaluate the subexpression of EXP starting at *POS as for
9043    evaluate_type, updating *POS to point just past the evaluated
9044    expression.  */
9045
9046 static struct value *
9047 evaluate_subexp_type (struct expression *exp, int *pos)
9048 {
9049   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9050 }
9051
9052 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9053    value it wraps.  */
9054
9055 static struct value *
9056 unwrap_value (struct value *val)
9057 {
9058   struct type *type = ada_check_typedef (value_type (val));
9059
9060   if (ada_is_aligner_type (type))
9061     {
9062       struct value *v = ada_value_struct_elt (val, "F", 0);
9063       struct type *val_type = ada_check_typedef (value_type (v));
9064
9065       if (ada_type_name (val_type) == NULL)
9066         TYPE_NAME (val_type) = ada_type_name (type);
9067
9068       return unwrap_value (v);
9069     }
9070   else
9071     {
9072       struct type *raw_real_type =
9073         ada_check_typedef (ada_get_base_type (type));
9074
9075       /* If there is no parallel XVS or XVE type, then the value is
9076          already unwrapped.  Return it without further modification.  */
9077       if ((type == raw_real_type)
9078           && ada_find_parallel_type (type, "___XVE") == NULL)
9079         return val;
9080
9081       return
9082         coerce_unspec_val_to_type
9083         (val, ada_to_fixed_type (raw_real_type, 0,
9084                                  value_address (val),
9085                                  NULL, 1));
9086     }
9087 }
9088
9089 static struct value *
9090 cast_to_fixed (struct type *type, struct value *arg)
9091 {
9092   LONGEST val;
9093
9094   if (type == value_type (arg))
9095     return arg;
9096   else if (ada_is_fixed_point_type (value_type (arg)))
9097     val = ada_float_to_fixed (type,
9098                               ada_fixed_to_float (value_type (arg),
9099                                                   value_as_long (arg)));
9100   else
9101     {
9102       DOUBLEST argd = value_as_double (arg);
9103
9104       val = ada_float_to_fixed (type, argd);
9105     }
9106
9107   return value_from_longest (type, val);
9108 }
9109
9110 static struct value *
9111 cast_from_fixed (struct type *type, struct value *arg)
9112 {
9113   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9114                                      value_as_long (arg));
9115
9116   return value_from_double (type, val);
9117 }
9118
9119 /* Given two array types T1 and T2, return nonzero iff both arrays
9120    contain the same number of elements.  */
9121
9122 static int
9123 ada_same_array_size_p (struct type *t1, struct type *t2)
9124 {
9125   LONGEST lo1, hi1, lo2, hi2;
9126
9127   /* Get the array bounds in order to verify that the size of
9128      the two arrays match.  */
9129   if (!get_array_bounds (t1, &lo1, &hi1)
9130       || !get_array_bounds (t2, &lo2, &hi2))
9131     error (_("unable to determine array bounds"));
9132
9133   /* To make things easier for size comparison, normalize a bit
9134      the case of empty arrays by making sure that the difference
9135      between upper bound and lower bound is always -1.  */
9136   if (lo1 > hi1)
9137     hi1 = lo1 - 1;
9138   if (lo2 > hi2)
9139     hi2 = lo2 - 1;
9140
9141   return (hi1 - lo1 == hi2 - lo2);
9142 }
9143
9144 /* Assuming that VAL is an array of integrals, and TYPE represents
9145    an array with the same number of elements, but with wider integral
9146    elements, return an array "casted" to TYPE.  In practice, this
9147    means that the returned array is built by casting each element
9148    of the original array into TYPE's (wider) element type.  */
9149
9150 static struct value *
9151 ada_promote_array_of_integrals (struct type *type, struct value *val)
9152 {
9153   struct type *elt_type = TYPE_TARGET_TYPE (type);
9154   LONGEST lo, hi;
9155   struct value *res;
9156   LONGEST i;
9157
9158   /* Verify that both val and type are arrays of scalars, and
9159      that the size of val's elements is smaller than the size
9160      of type's element.  */
9161   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9162   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9163   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9164   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9165   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9166               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9167
9168   if (!get_array_bounds (type, &lo, &hi))
9169     error (_("unable to determine array bounds"));
9170
9171   res = allocate_value (type);
9172
9173   /* Promote each array element.  */
9174   for (i = 0; i < hi - lo + 1; i++)
9175     {
9176       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9177
9178       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9179               value_contents_all (elt), TYPE_LENGTH (elt_type));
9180     }
9181
9182   return res;
9183 }
9184
9185 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9186    return the converted value.  */
9187
9188 static struct value *
9189 coerce_for_assign (struct type *type, struct value *val)
9190 {
9191   struct type *type2 = value_type (val);
9192
9193   if (type == type2)
9194     return val;
9195
9196   type2 = ada_check_typedef (type2);
9197   type = ada_check_typedef (type);
9198
9199   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9200       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9201     {
9202       val = ada_value_ind (val);
9203       type2 = value_type (val);
9204     }
9205
9206   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9207       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9208     {
9209       if (!ada_same_array_size_p (type, type2))
9210         error (_("cannot assign arrays of different length"));
9211
9212       if (is_integral_type (TYPE_TARGET_TYPE (type))
9213           && is_integral_type (TYPE_TARGET_TYPE (type2))
9214           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9215                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9216         {
9217           /* Allow implicit promotion of the array elements to
9218              a wider type.  */
9219           return ada_promote_array_of_integrals (type, val);
9220         }
9221
9222       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9223           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9224         error (_("Incompatible types in assignment"));
9225       deprecated_set_value_type (val, type);
9226     }
9227   return val;
9228 }
9229
9230 static struct value *
9231 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9232 {
9233   struct value *val;
9234   struct type *type1, *type2;
9235   LONGEST v, v1, v2;
9236
9237   arg1 = coerce_ref (arg1);
9238   arg2 = coerce_ref (arg2);
9239   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9240   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9241
9242   if (TYPE_CODE (type1) != TYPE_CODE_INT
9243       || TYPE_CODE (type2) != TYPE_CODE_INT)
9244     return value_binop (arg1, arg2, op);
9245
9246   switch (op)
9247     {
9248     case BINOP_MOD:
9249     case BINOP_DIV:
9250     case BINOP_REM:
9251       break;
9252     default:
9253       return value_binop (arg1, arg2, op);
9254     }
9255
9256   v2 = value_as_long (arg2);
9257   if (v2 == 0)
9258     error (_("second operand of %s must not be zero."), op_string (op));
9259
9260   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9261     return value_binop (arg1, arg2, op);
9262
9263   v1 = value_as_long (arg1);
9264   switch (op)
9265     {
9266     case BINOP_DIV:
9267       v = v1 / v2;
9268       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9269         v += v > 0 ? -1 : 1;
9270       break;
9271     case BINOP_REM:
9272       v = v1 % v2;
9273       if (v * v1 < 0)
9274         v -= v2;
9275       break;
9276     default:
9277       /* Should not reach this point.  */
9278       v = 0;
9279     }
9280
9281   val = allocate_value (type1);
9282   store_unsigned_integer (value_contents_raw (val),
9283                           TYPE_LENGTH (value_type (val)),
9284                           gdbarch_byte_order (get_type_arch (type1)), v);
9285   return val;
9286 }
9287
9288 static int
9289 ada_value_equal (struct value *arg1, struct value *arg2)
9290 {
9291   if (ada_is_direct_array_type (value_type (arg1))
9292       || ada_is_direct_array_type (value_type (arg2)))
9293     {
9294       /* Automatically dereference any array reference before
9295          we attempt to perform the comparison.  */
9296       arg1 = ada_coerce_ref (arg1);
9297       arg2 = ada_coerce_ref (arg2);
9298       
9299       arg1 = ada_coerce_to_simple_array (arg1);
9300       arg2 = ada_coerce_to_simple_array (arg2);
9301       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9302           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9303         error (_("Attempt to compare array with non-array"));
9304       /* FIXME: The following works only for types whose
9305          representations use all bits (no padding or undefined bits)
9306          and do not have user-defined equality.  */
9307       return
9308         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9309         && memcmp (value_contents (arg1), value_contents (arg2),
9310                    TYPE_LENGTH (value_type (arg1))) == 0;
9311     }
9312   return value_equal (arg1, arg2);
9313 }
9314
9315 /* Total number of component associations in the aggregate starting at
9316    index PC in EXP.  Assumes that index PC is the start of an
9317    OP_AGGREGATE.  */
9318
9319 static int
9320 num_component_specs (struct expression *exp, int pc)
9321 {
9322   int n, m, i;
9323
9324   m = exp->elts[pc + 1].longconst;
9325   pc += 3;
9326   n = 0;
9327   for (i = 0; i < m; i += 1)
9328     {
9329       switch (exp->elts[pc].opcode) 
9330         {
9331         default:
9332           n += 1;
9333           break;
9334         case OP_CHOICES:
9335           n += exp->elts[pc + 1].longconst;
9336           break;
9337         }
9338       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9339     }
9340   return n;
9341 }
9342
9343 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9344    component of LHS (a simple array or a record), updating *POS past
9345    the expression, assuming that LHS is contained in CONTAINER.  Does
9346    not modify the inferior's memory, nor does it modify LHS (unless
9347    LHS == CONTAINER).  */
9348
9349 static void
9350 assign_component (struct value *container, struct value *lhs, LONGEST index,
9351                   struct expression *exp, int *pos)
9352 {
9353   struct value *mark = value_mark ();
9354   struct value *elt;
9355
9356   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9357     {
9358       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9359       struct value *index_val = value_from_longest (index_type, index);
9360
9361       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9362     }
9363   else
9364     {
9365       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9366       elt = ada_to_fixed_value (elt);
9367     }
9368
9369   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9370     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9371   else
9372     value_assign_to_component (container, elt, 
9373                                ada_evaluate_subexp (NULL, exp, pos, 
9374                                                     EVAL_NORMAL));
9375
9376   value_free_to_mark (mark);
9377 }
9378
9379 /* Assuming that LHS represents an lvalue having a record or array
9380    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9381    of that aggregate's value to LHS, advancing *POS past the
9382    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9383    lvalue containing LHS (possibly LHS itself).  Does not modify
9384    the inferior's memory, nor does it modify the contents of 
9385    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9386
9387 static struct value *
9388 assign_aggregate (struct value *container, 
9389                   struct value *lhs, struct expression *exp, 
9390                   int *pos, enum noside noside)
9391 {
9392   struct type *lhs_type;
9393   int n = exp->elts[*pos+1].longconst;
9394   LONGEST low_index, high_index;
9395   int num_specs;
9396   LONGEST *indices;
9397   int max_indices, num_indices;
9398   int i;
9399
9400   *pos += 3;
9401   if (noside != EVAL_NORMAL)
9402     {
9403       for (i = 0; i < n; i += 1)
9404         ada_evaluate_subexp (NULL, exp, pos, noside);
9405       return container;
9406     }
9407
9408   container = ada_coerce_ref (container);
9409   if (ada_is_direct_array_type (value_type (container)))
9410     container = ada_coerce_to_simple_array (container);
9411   lhs = ada_coerce_ref (lhs);
9412   if (!deprecated_value_modifiable (lhs))
9413     error (_("Left operand of assignment is not a modifiable lvalue."));
9414
9415   lhs_type = value_type (lhs);
9416   if (ada_is_direct_array_type (lhs_type))
9417     {
9418       lhs = ada_coerce_to_simple_array (lhs);
9419       lhs_type = value_type (lhs);
9420       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9421       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9422     }
9423   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9424     {
9425       low_index = 0;
9426       high_index = num_visible_fields (lhs_type) - 1;
9427     }
9428   else
9429     error (_("Left-hand side must be array or record."));
9430
9431   num_specs = num_component_specs (exp, *pos - 3);
9432   max_indices = 4 * num_specs + 4;
9433   indices = alloca (max_indices * sizeof (indices[0]));
9434   indices[0] = indices[1] = low_index - 1;
9435   indices[2] = indices[3] = high_index + 1;
9436   num_indices = 4;
9437
9438   for (i = 0; i < n; i += 1)
9439     {
9440       switch (exp->elts[*pos].opcode)
9441         {
9442           case OP_CHOICES:
9443             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9444                                            &num_indices, max_indices,
9445                                            low_index, high_index);
9446             break;
9447           case OP_POSITIONAL:
9448             aggregate_assign_positional (container, lhs, exp, pos, indices,
9449                                          &num_indices, max_indices,
9450                                          low_index, high_index);
9451             break;
9452           case OP_OTHERS:
9453             if (i != n-1)
9454               error (_("Misplaced 'others' clause"));
9455             aggregate_assign_others (container, lhs, exp, pos, indices, 
9456                                      num_indices, low_index, high_index);
9457             break;
9458           default:
9459             error (_("Internal error: bad aggregate clause"));
9460         }
9461     }
9462
9463   return container;
9464 }
9465               
9466 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9467    construct at *POS, updating *POS past the construct, given that
9468    the positions are relative to lower bound LOW, where HIGH is the 
9469    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9470    updating *NUM_INDICES as needed.  CONTAINER is as for
9471    assign_aggregate.  */
9472 static void
9473 aggregate_assign_positional (struct value *container,
9474                              struct value *lhs, struct expression *exp,
9475                              int *pos, LONGEST *indices, int *num_indices,
9476                              int max_indices, LONGEST low, LONGEST high) 
9477 {
9478   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9479   
9480   if (ind - 1 == high)
9481     warning (_("Extra components in aggregate ignored."));
9482   if (ind <= high)
9483     {
9484       add_component_interval (ind, ind, indices, num_indices, max_indices);
9485       *pos += 3;
9486       assign_component (container, lhs, ind, exp, pos);
9487     }
9488   else
9489     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9490 }
9491
9492 /* Assign into the components of LHS indexed by the OP_CHOICES
9493    construct at *POS, updating *POS past the construct, given that
9494    the allowable indices are LOW..HIGH.  Record the indices assigned
9495    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9496    needed.  CONTAINER is as for assign_aggregate.  */
9497 static void
9498 aggregate_assign_from_choices (struct value *container,
9499                                struct value *lhs, struct expression *exp,
9500                                int *pos, LONGEST *indices, int *num_indices,
9501                                int max_indices, LONGEST low, LONGEST high) 
9502 {
9503   int j;
9504   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9505   int choice_pos, expr_pc;
9506   int is_array = ada_is_direct_array_type (value_type (lhs));
9507
9508   choice_pos = *pos += 3;
9509
9510   for (j = 0; j < n_choices; j += 1)
9511     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9512   expr_pc = *pos;
9513   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9514   
9515   for (j = 0; j < n_choices; j += 1)
9516     {
9517       LONGEST lower, upper;
9518       enum exp_opcode op = exp->elts[choice_pos].opcode;
9519
9520       if (op == OP_DISCRETE_RANGE)
9521         {
9522           choice_pos += 1;
9523           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9524                                                       EVAL_NORMAL));
9525           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
9526                                                       EVAL_NORMAL));
9527         }
9528       else if (is_array)
9529         {
9530           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
9531                                                       EVAL_NORMAL));
9532           upper = lower;
9533         }
9534       else
9535         {
9536           int ind;
9537           const char *name;
9538
9539           switch (op)
9540             {
9541             case OP_NAME:
9542               name = &exp->elts[choice_pos + 2].string;
9543               break;
9544             case OP_VAR_VALUE:
9545               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9546               break;
9547             default:
9548               error (_("Invalid record component association."));
9549             }
9550           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9551           ind = 0;
9552           if (! find_struct_field (name, value_type (lhs), 0, 
9553                                    NULL, NULL, NULL, NULL, &ind))
9554             error (_("Unknown component name: %s."), name);
9555           lower = upper = ind;
9556         }
9557
9558       if (lower <= upper && (lower < low || upper > high))
9559         error (_("Index in component association out of bounds."));
9560
9561       add_component_interval (lower, upper, indices, num_indices,
9562                               max_indices);
9563       while (lower <= upper)
9564         {
9565           int pos1;
9566
9567           pos1 = expr_pc;
9568           assign_component (container, lhs, lower, exp, &pos1);
9569           lower += 1;
9570         }
9571     }
9572 }
9573
9574 /* Assign the value of the expression in the OP_OTHERS construct in
9575    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9576    have not been previously assigned.  The index intervals already assigned
9577    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
9578    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9579 static void
9580 aggregate_assign_others (struct value *container,
9581                          struct value *lhs, struct expression *exp,
9582                          int *pos, LONGEST *indices, int num_indices,
9583                          LONGEST low, LONGEST high) 
9584 {
9585   int i;
9586   int expr_pc = *pos + 1;
9587   
9588   for (i = 0; i < num_indices - 2; i += 2)
9589     {
9590       LONGEST ind;
9591
9592       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9593         {
9594           int localpos;
9595
9596           localpos = expr_pc;
9597           assign_component (container, lhs, ind, exp, &localpos);
9598         }
9599     }
9600   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9601 }
9602
9603 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
9604    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9605    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9606    MAX_SIZE.  The resulting intervals do not overlap.  */
9607 static void
9608 add_component_interval (LONGEST low, LONGEST high, 
9609                         LONGEST* indices, int *size, int max_size)
9610 {
9611   int i, j;
9612
9613   for (i = 0; i < *size; i += 2) {
9614     if (high >= indices[i] && low <= indices[i + 1])
9615       {
9616         int kh;
9617
9618         for (kh = i + 2; kh < *size; kh += 2)
9619           if (high < indices[kh])
9620             break;
9621         if (low < indices[i])
9622           indices[i] = low;
9623         indices[i + 1] = indices[kh - 1];
9624         if (high > indices[i + 1])
9625           indices[i + 1] = high;
9626         memcpy (indices + i + 2, indices + kh, *size - kh);
9627         *size -= kh - i - 2;
9628         return;
9629       }
9630     else if (high < indices[i])
9631       break;
9632   }
9633         
9634   if (*size == max_size)
9635     error (_("Internal error: miscounted aggregate components."));
9636   *size += 2;
9637   for (j = *size-1; j >= i+2; j -= 1)
9638     indices[j] = indices[j - 2];
9639   indices[i] = low;
9640   indices[i + 1] = high;
9641 }
9642
9643 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9644    is different.  */
9645
9646 static struct value *
9647 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9648 {
9649   if (type == ada_check_typedef (value_type (arg2)))
9650     return arg2;
9651
9652   if (ada_is_fixed_point_type (type))
9653     return (cast_to_fixed (type, arg2));
9654
9655   if (ada_is_fixed_point_type (value_type (arg2)))
9656     return cast_from_fixed (type, arg2);
9657
9658   return value_cast (type, arg2);
9659 }
9660
9661 /*  Evaluating Ada expressions, and printing their result.
9662     ------------------------------------------------------
9663
9664     1. Introduction:
9665     ----------------
9666
9667     We usually evaluate an Ada expression in order to print its value.
9668     We also evaluate an expression in order to print its type, which
9669     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9670     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9671     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9672     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9673     similar.
9674
9675     Evaluating expressions is a little more complicated for Ada entities
9676     than it is for entities in languages such as C.  The main reason for
9677     this is that Ada provides types whose definition might be dynamic.
9678     One example of such types is variant records.  Or another example
9679     would be an array whose bounds can only be known at run time.
9680
9681     The following description is a general guide as to what should be
9682     done (and what should NOT be done) in order to evaluate an expression
9683     involving such types, and when.  This does not cover how the semantic
9684     information is encoded by GNAT as this is covered separatly.  For the
9685     document used as the reference for the GNAT encoding, see exp_dbug.ads
9686     in the GNAT sources.
9687
9688     Ideally, we should embed each part of this description next to its
9689     associated code.  Unfortunately, the amount of code is so vast right
9690     now that it's hard to see whether the code handling a particular
9691     situation might be duplicated or not.  One day, when the code is
9692     cleaned up, this guide might become redundant with the comments
9693     inserted in the code, and we might want to remove it.
9694
9695     2. ``Fixing'' an Entity, the Simple Case:
9696     -----------------------------------------
9697
9698     When evaluating Ada expressions, the tricky issue is that they may
9699     reference entities whose type contents and size are not statically
9700     known.  Consider for instance a variant record:
9701
9702        type Rec (Empty : Boolean := True) is record
9703           case Empty is
9704              when True => null;
9705              when False => Value : Integer;
9706           end case;
9707        end record;
9708        Yes : Rec := (Empty => False, Value => 1);
9709        No  : Rec := (empty => True);
9710
9711     The size and contents of that record depends on the value of the
9712     descriminant (Rec.Empty).  At this point, neither the debugging
9713     information nor the associated type structure in GDB are able to
9714     express such dynamic types.  So what the debugger does is to create
9715     "fixed" versions of the type that applies to the specific object.
9716     We also informally refer to this opperation as "fixing" an object,
9717     which means creating its associated fixed type.
9718
9719     Example: when printing the value of variable "Yes" above, its fixed
9720     type would look like this:
9721
9722        type Rec is record
9723           Empty : Boolean;
9724           Value : Integer;
9725        end record;
9726
9727     On the other hand, if we printed the value of "No", its fixed type
9728     would become:
9729
9730        type Rec is record
9731           Empty : Boolean;
9732        end record;
9733
9734     Things become a little more complicated when trying to fix an entity
9735     with a dynamic type that directly contains another dynamic type,
9736     such as an array of variant records, for instance.  There are
9737     two possible cases: Arrays, and records.
9738
9739     3. ``Fixing'' Arrays:
9740     ---------------------
9741
9742     The type structure in GDB describes an array in terms of its bounds,
9743     and the type of its elements.  By design, all elements in the array
9744     have the same type and we cannot represent an array of variant elements
9745     using the current type structure in GDB.  When fixing an array,
9746     we cannot fix the array element, as we would potentially need one
9747     fixed type per element of the array.  As a result, the best we can do
9748     when fixing an array is to produce an array whose bounds and size
9749     are correct (allowing us to read it from memory), but without having
9750     touched its element type.  Fixing each element will be done later,
9751     when (if) necessary.
9752
9753     Arrays are a little simpler to handle than records, because the same
9754     amount of memory is allocated for each element of the array, even if
9755     the amount of space actually used by each element differs from element
9756     to element.  Consider for instance the following array of type Rec:
9757
9758        type Rec_Array is array (1 .. 2) of Rec;
9759
9760     The actual amount of memory occupied by each element might be different
9761     from element to element, depending on the value of their discriminant.
9762     But the amount of space reserved for each element in the array remains
9763     fixed regardless.  So we simply need to compute that size using
9764     the debugging information available, from which we can then determine
9765     the array size (we multiply the number of elements of the array by
9766     the size of each element).
9767
9768     The simplest case is when we have an array of a constrained element
9769     type. For instance, consider the following type declarations:
9770
9771         type Bounded_String (Max_Size : Integer) is
9772            Length : Integer;
9773            Buffer : String (1 .. Max_Size);
9774         end record;
9775         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9776
9777     In this case, the compiler describes the array as an array of
9778     variable-size elements (identified by its XVS suffix) for which
9779     the size can be read in the parallel XVZ variable.
9780
9781     In the case of an array of an unconstrained element type, the compiler
9782     wraps the array element inside a private PAD type.  This type should not
9783     be shown to the user, and must be "unwrap"'ed before printing.  Note
9784     that we also use the adjective "aligner" in our code to designate
9785     these wrapper types.
9786
9787     In some cases, the size allocated for each element is statically
9788     known.  In that case, the PAD type already has the correct size,
9789     and the array element should remain unfixed.
9790
9791     But there are cases when this size is not statically known.
9792     For instance, assuming that "Five" is an integer variable:
9793
9794         type Dynamic is array (1 .. Five) of Integer;
9795         type Wrapper (Has_Length : Boolean := False) is record
9796            Data : Dynamic;
9797            case Has_Length is
9798               when True => Length : Integer;
9799               when False => null;
9800            end case;
9801         end record;
9802         type Wrapper_Array is array (1 .. 2) of Wrapper;
9803
9804         Hello : Wrapper_Array := (others => (Has_Length => True,
9805                                              Data => (others => 17),
9806                                              Length => 1));
9807
9808
9809     The debugging info would describe variable Hello as being an
9810     array of a PAD type.  The size of that PAD type is not statically
9811     known, but can be determined using a parallel XVZ variable.
9812     In that case, a copy of the PAD type with the correct size should
9813     be used for the fixed array.
9814
9815     3. ``Fixing'' record type objects:
9816     ----------------------------------
9817
9818     Things are slightly different from arrays in the case of dynamic
9819     record types.  In this case, in order to compute the associated
9820     fixed type, we need to determine the size and offset of each of
9821     its components.  This, in turn, requires us to compute the fixed
9822     type of each of these components.
9823
9824     Consider for instance the example:
9825
9826         type Bounded_String (Max_Size : Natural) is record
9827            Str : String (1 .. Max_Size);
9828            Length : Natural;
9829         end record;
9830         My_String : Bounded_String (Max_Size => 10);
9831
9832     In that case, the position of field "Length" depends on the size
9833     of field Str, which itself depends on the value of the Max_Size
9834     discriminant.  In order to fix the type of variable My_String,
9835     we need to fix the type of field Str.  Therefore, fixing a variant
9836     record requires us to fix each of its components.
9837
9838     However, if a component does not have a dynamic size, the component
9839     should not be fixed.  In particular, fields that use a PAD type
9840     should not fixed.  Here is an example where this might happen
9841     (assuming type Rec above):
9842
9843        type Container (Big : Boolean) is record
9844           First : Rec;
9845           After : Integer;
9846           case Big is
9847              when True => Another : Integer;
9848              when False => null;
9849           end case;
9850        end record;
9851        My_Container : Container := (Big => False,
9852                                     First => (Empty => True),
9853                                     After => 42);
9854
9855     In that example, the compiler creates a PAD type for component First,
9856     whose size is constant, and then positions the component After just
9857     right after it.  The offset of component After is therefore constant
9858     in this case.
9859
9860     The debugger computes the position of each field based on an algorithm
9861     that uses, among other things, the actual position and size of the field
9862     preceding it.  Let's now imagine that the user is trying to print
9863     the value of My_Container.  If the type fixing was recursive, we would
9864     end up computing the offset of field After based on the size of the
9865     fixed version of field First.  And since in our example First has
9866     only one actual field, the size of the fixed type is actually smaller
9867     than the amount of space allocated to that field, and thus we would
9868     compute the wrong offset of field After.
9869
9870     To make things more complicated, we need to watch out for dynamic
9871     components of variant records (identified by the ___XVL suffix in
9872     the component name).  Even if the target type is a PAD type, the size
9873     of that type might not be statically known.  So the PAD type needs
9874     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9875     we might end up with the wrong size for our component.  This can be
9876     observed with the following type declarations:
9877
9878         type Octal is new Integer range 0 .. 7;
9879         type Octal_Array is array (Positive range <>) of Octal;
9880         pragma Pack (Octal_Array);
9881
9882         type Octal_Buffer (Size : Positive) is record
9883            Buffer : Octal_Array (1 .. Size);
9884            Length : Integer;
9885         end record;
9886
9887     In that case, Buffer is a PAD type whose size is unset and needs
9888     to be computed by fixing the unwrapped type.
9889
9890     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9891     ----------------------------------------------------------
9892
9893     Lastly, when should the sub-elements of an entity that remained unfixed
9894     thus far, be actually fixed?
9895
9896     The answer is: Only when referencing that element.  For instance
9897     when selecting one component of a record, this specific component
9898     should be fixed at that point in time.  Or when printing the value
9899     of a record, each component should be fixed before its value gets
9900     printed.  Similarly for arrays, the element of the array should be
9901     fixed when printing each element of the array, or when extracting
9902     one element out of that array.  On the other hand, fixing should
9903     not be performed on the elements when taking a slice of an array!
9904
9905     Note that one of the side-effects of miscomputing the offset and
9906     size of each field is that we end up also miscomputing the size
9907     of the containing type.  This can have adverse results when computing
9908     the value of an entity.  GDB fetches the value of an entity based
9909     on the size of its type, and thus a wrong size causes GDB to fetch
9910     the wrong amount of memory.  In the case where the computed size is
9911     too small, GDB fetches too little data to print the value of our
9912     entiry.  Results in this case as unpredicatble, as we usually read
9913     past the buffer containing the data =:-o.  */
9914
9915 /* Implement the evaluate_exp routine in the exp_descriptor structure
9916    for the Ada language.  */
9917
9918 static struct value *
9919 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9920                      int *pos, enum noside noside)
9921 {
9922   enum exp_opcode op;
9923   int tem;
9924   int pc;
9925   int preeval_pos;
9926   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9927   struct type *type;
9928   int nargs, oplen;
9929   struct value **argvec;
9930
9931   pc = *pos;
9932   *pos += 1;
9933   op = exp->elts[pc].opcode;
9934
9935   switch (op)
9936     {
9937     default:
9938       *pos -= 1;
9939       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9940
9941       if (noside == EVAL_NORMAL)
9942         arg1 = unwrap_value (arg1);
9943
9944       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9945          then we need to perform the conversion manually, because
9946          evaluate_subexp_standard doesn't do it.  This conversion is
9947          necessary in Ada because the different kinds of float/fixed
9948          types in Ada have different representations.
9949
9950          Similarly, we need to perform the conversion from OP_LONG
9951          ourselves.  */
9952       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9953         arg1 = ada_value_cast (expect_type, arg1, noside);
9954
9955       return arg1;
9956
9957     case OP_STRING:
9958       {
9959         struct value *result;
9960
9961         *pos -= 1;
9962         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9963         /* The result type will have code OP_STRING, bashed there from 
9964            OP_ARRAY.  Bash it back.  */
9965         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9966           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
9967         return result;
9968       }
9969
9970     case UNOP_CAST:
9971       (*pos) += 2;
9972       type = exp->elts[pc + 1].type;
9973       arg1 = evaluate_subexp (type, exp, pos, noside);
9974       if (noside == EVAL_SKIP)
9975         goto nosideret;
9976       arg1 = ada_value_cast (type, arg1, noside);
9977       return arg1;
9978
9979     case UNOP_QUAL:
9980       (*pos) += 2;
9981       type = exp->elts[pc + 1].type;
9982       return ada_evaluate_subexp (type, exp, pos, noside);
9983
9984     case BINOP_ASSIGN:
9985       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9986       if (exp->elts[*pos].opcode == OP_AGGREGATE)
9987         {
9988           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9989           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9990             return arg1;
9991           return ada_value_assign (arg1, arg1);
9992         }
9993       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9994          except if the lhs of our assignment is a convenience variable.
9995          In the case of assigning to a convenience variable, the lhs
9996          should be exactly the result of the evaluation of the rhs.  */
9997       type = value_type (arg1);
9998       if (VALUE_LVAL (arg1) == lval_internalvar)
9999          type = NULL;
10000       arg2 = evaluate_subexp (type, exp, pos, noside);
10001       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10002         return arg1;
10003       if (ada_is_fixed_point_type (value_type (arg1)))
10004         arg2 = cast_to_fixed (value_type (arg1), arg2);
10005       else if (ada_is_fixed_point_type (value_type (arg2)))
10006         error
10007           (_("Fixed-point values must be assigned to fixed-point variables"));
10008       else
10009         arg2 = coerce_for_assign (value_type (arg1), arg2);
10010       return ada_value_assign (arg1, arg2);
10011
10012     case BINOP_ADD:
10013       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10014       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10015       if (noside == EVAL_SKIP)
10016         goto nosideret;
10017       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10018         return (value_from_longest
10019                  (value_type (arg1),
10020                   value_as_long (arg1) + value_as_long (arg2)));
10021       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10022         return (value_from_longest
10023                  (value_type (arg2),
10024                   value_as_long (arg1) + value_as_long (arg2)));
10025       if ((ada_is_fixed_point_type (value_type (arg1))
10026            || ada_is_fixed_point_type (value_type (arg2)))
10027           && value_type (arg1) != value_type (arg2))
10028         error (_("Operands of fixed-point addition must have the same type"));
10029       /* Do the addition, and cast the result to the type of the first
10030          argument.  We cannot cast the result to a reference type, so if
10031          ARG1 is a reference type, find its underlying type.  */
10032       type = value_type (arg1);
10033       while (TYPE_CODE (type) == TYPE_CODE_REF)
10034         type = TYPE_TARGET_TYPE (type);
10035       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10036       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10037
10038     case BINOP_SUB:
10039       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10040       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10041       if (noside == EVAL_SKIP)
10042         goto nosideret;
10043       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10044         return (value_from_longest
10045                  (value_type (arg1),
10046                   value_as_long (arg1) - value_as_long (arg2)));
10047       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10048         return (value_from_longest
10049                  (value_type (arg2),
10050                   value_as_long (arg1) - value_as_long (arg2)));
10051       if ((ada_is_fixed_point_type (value_type (arg1))
10052            || ada_is_fixed_point_type (value_type (arg2)))
10053           && value_type (arg1) != value_type (arg2))
10054         error (_("Operands of fixed-point subtraction "
10055                  "must have the same type"));
10056       /* Do the substraction, and cast the result to the type of the first
10057          argument.  We cannot cast the result to a reference type, so if
10058          ARG1 is a reference type, find its underlying type.  */
10059       type = value_type (arg1);
10060       while (TYPE_CODE (type) == TYPE_CODE_REF)
10061         type = TYPE_TARGET_TYPE (type);
10062       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10063       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10064
10065     case BINOP_MUL:
10066     case BINOP_DIV:
10067     case BINOP_REM:
10068     case BINOP_MOD:
10069       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10070       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10071       if (noside == EVAL_SKIP)
10072         goto nosideret;
10073       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10074         {
10075           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10076           return value_zero (value_type (arg1), not_lval);
10077         }
10078       else
10079         {
10080           type = builtin_type (exp->gdbarch)->builtin_double;
10081           if (ada_is_fixed_point_type (value_type (arg1)))
10082             arg1 = cast_from_fixed (type, arg1);
10083           if (ada_is_fixed_point_type (value_type (arg2)))
10084             arg2 = cast_from_fixed (type, arg2);
10085           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10086           return ada_value_binop (arg1, arg2, op);
10087         }
10088
10089     case BINOP_EQUAL:
10090     case BINOP_NOTEQUAL:
10091       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10092       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10093       if (noside == EVAL_SKIP)
10094         goto nosideret;
10095       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10096         tem = 0;
10097       else
10098         {
10099           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10100           tem = ada_value_equal (arg1, arg2);
10101         }
10102       if (op == BINOP_NOTEQUAL)
10103         tem = !tem;
10104       type = language_bool_type (exp->language_defn, exp->gdbarch);
10105       return value_from_longest (type, (LONGEST) tem);
10106
10107     case UNOP_NEG:
10108       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10109       if (noside == EVAL_SKIP)
10110         goto nosideret;
10111       else if (ada_is_fixed_point_type (value_type (arg1)))
10112         return value_cast (value_type (arg1), value_neg (arg1));
10113       else
10114         {
10115           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10116           return value_neg (arg1);
10117         }
10118
10119     case BINOP_LOGICAL_AND:
10120     case BINOP_LOGICAL_OR:
10121     case UNOP_LOGICAL_NOT:
10122       {
10123         struct value *val;
10124
10125         *pos -= 1;
10126         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10127         type = language_bool_type (exp->language_defn, exp->gdbarch);
10128         return value_cast (type, val);
10129       }
10130
10131     case BINOP_BITWISE_AND:
10132     case BINOP_BITWISE_IOR:
10133     case BINOP_BITWISE_XOR:
10134       {
10135         struct value *val;
10136
10137         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10138         *pos = pc;
10139         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10140
10141         return value_cast (value_type (arg1), val);
10142       }
10143
10144     case OP_VAR_VALUE:
10145       *pos -= 1;
10146
10147       if (noside == EVAL_SKIP)
10148         {
10149           *pos += 4;
10150           goto nosideret;
10151         }
10152
10153       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10154         /* Only encountered when an unresolved symbol occurs in a
10155            context other than a function call, in which case, it is
10156            invalid.  */
10157         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10158                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10159
10160       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10161         {
10162           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10163           /* Check to see if this is a tagged type.  We also need to handle
10164              the case where the type is a reference to a tagged type, but
10165              we have to be careful to exclude pointers to tagged types.
10166              The latter should be shown as usual (as a pointer), whereas
10167              a reference should mostly be transparent to the user.  */
10168           if (ada_is_tagged_type (type, 0)
10169               || (TYPE_CODE (type) == TYPE_CODE_REF
10170                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10171             {
10172               /* Tagged types are a little special in the fact that the real
10173                  type is dynamic and can only be determined by inspecting the
10174                  object's tag.  This means that we need to get the object's
10175                  value first (EVAL_NORMAL) and then extract the actual object
10176                  type from its tag.
10177
10178                  Note that we cannot skip the final step where we extract
10179                  the object type from its tag, because the EVAL_NORMAL phase
10180                  results in dynamic components being resolved into fixed ones.
10181                  This can cause problems when trying to print the type
10182                  description of tagged types whose parent has a dynamic size:
10183                  We use the type name of the "_parent" component in order
10184                  to print the name of the ancestor type in the type description.
10185                  If that component had a dynamic size, the resolution into
10186                  a fixed type would result in the loss of that type name,
10187                  thus preventing us from printing the name of the ancestor
10188                  type in the type description.  */
10189               arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10190
10191               if (TYPE_CODE (type) != TYPE_CODE_REF)
10192                 {
10193                   struct type *actual_type;
10194
10195                   actual_type = type_from_tag (ada_value_tag (arg1));
10196                   if (actual_type == NULL)
10197                     /* If, for some reason, we were unable to determine
10198                        the actual type from the tag, then use the static
10199                        approximation that we just computed as a fallback.
10200                        This can happen if the debugging information is
10201                        incomplete, for instance.  */
10202                     actual_type = type;
10203                   return value_zero (actual_type, not_lval);
10204                 }
10205               else
10206                 {
10207                   /* In the case of a ref, ada_coerce_ref takes care
10208                      of determining the actual type.  But the evaluation
10209                      should return a ref as it should be valid to ask
10210                      for its address; so rebuild a ref after coerce.  */
10211                   arg1 = ada_coerce_ref (arg1);
10212                   return value_ref (arg1);
10213                 }
10214             }
10215
10216           /* Records and unions for which GNAT encodings have been
10217              generated need to be statically fixed as well.
10218              Otherwise, non-static fixing produces a type where
10219              all dynamic properties are removed, which prevents "ptype"
10220              from being able to completely describe the type.
10221              For instance, a case statement in a variant record would be
10222              replaced by the relevant components based on the actual
10223              value of the discriminants.  */
10224           if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10225                && dynamic_template_type (type) != NULL)
10226               || (TYPE_CODE (type) == TYPE_CODE_UNION
10227                   && ada_find_parallel_type (type, "___XVU") != NULL))
10228             {
10229               *pos += 4;
10230               return value_zero (to_static_fixed_type (type), not_lval);
10231             }
10232         }
10233
10234       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10235       return ada_to_fixed_value (arg1);
10236
10237     case OP_FUNCALL:
10238       (*pos) += 2;
10239
10240       /* Allocate arg vector, including space for the function to be
10241          called in argvec[0] and a terminating NULL.  */
10242       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10243       argvec =
10244         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10245
10246       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10247           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10248         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10249                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10250       else
10251         {
10252           for (tem = 0; tem <= nargs; tem += 1)
10253             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10254           argvec[tem] = 0;
10255
10256           if (noside == EVAL_SKIP)
10257             goto nosideret;
10258         }
10259
10260       if (ada_is_constrained_packed_array_type
10261           (desc_base_type (value_type (argvec[0]))))
10262         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10263       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10264                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10265         /* This is a packed array that has already been fixed, and
10266            therefore already coerced to a simple array.  Nothing further
10267            to do.  */
10268         ;
10269       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10270                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10271                    && VALUE_LVAL (argvec[0]) == lval_memory))
10272         argvec[0] = value_addr (argvec[0]);
10273
10274       type = ada_check_typedef (value_type (argvec[0]));
10275
10276       /* Ada allows us to implicitly dereference arrays when subscripting
10277          them.  So, if this is an array typedef (encoding use for array
10278          access types encoded as fat pointers), strip it now.  */
10279       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10280         type = ada_typedef_target_type (type);
10281
10282       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10283         {
10284           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10285             {
10286             case TYPE_CODE_FUNC:
10287               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10288               break;
10289             case TYPE_CODE_ARRAY:
10290               break;
10291             case TYPE_CODE_STRUCT:
10292               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10293                 argvec[0] = ada_value_ind (argvec[0]);
10294               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10295               break;
10296             default:
10297               error (_("cannot subscript or call something of type `%s'"),
10298                      ada_type_name (value_type (argvec[0])));
10299               break;
10300             }
10301         }
10302
10303       switch (TYPE_CODE (type))
10304         {
10305         case TYPE_CODE_FUNC:
10306           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10307             {
10308               struct type *rtype = TYPE_TARGET_TYPE (type);
10309
10310               if (TYPE_GNU_IFUNC (type))
10311                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10312               return allocate_value (rtype);
10313             }
10314           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10315         case TYPE_CODE_INTERNAL_FUNCTION:
10316           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10317             /* We don't know anything about what the internal
10318                function might return, but we have to return
10319                something.  */
10320             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10321                                not_lval);
10322           else
10323             return call_internal_function (exp->gdbarch, exp->language_defn,
10324                                            argvec[0], nargs, argvec + 1);
10325
10326         case TYPE_CODE_STRUCT:
10327           {
10328             int arity;
10329
10330             arity = ada_array_arity (type);
10331             type = ada_array_element_type (type, nargs);
10332             if (type == NULL)
10333               error (_("cannot subscript or call a record"));
10334             if (arity != nargs)
10335               error (_("wrong number of subscripts; expecting %d"), arity);
10336             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10337               return value_zero (ada_aligned_type (type), lval_memory);
10338             return
10339               unwrap_value (ada_value_subscript
10340                             (argvec[0], nargs, argvec + 1));
10341           }
10342         case TYPE_CODE_ARRAY:
10343           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10344             {
10345               type = ada_array_element_type (type, nargs);
10346               if (type == NULL)
10347                 error (_("element type of array unknown"));
10348               else
10349                 return value_zero (ada_aligned_type (type), lval_memory);
10350             }
10351           return
10352             unwrap_value (ada_value_subscript
10353                           (ada_coerce_to_simple_array (argvec[0]),
10354                            nargs, argvec + 1));
10355         case TYPE_CODE_PTR:     /* Pointer to array */
10356           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10357             {
10358               type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10359               type = ada_array_element_type (type, nargs);
10360               if (type == NULL)
10361                 error (_("element type of array unknown"));
10362               else
10363                 return value_zero (ada_aligned_type (type), lval_memory);
10364             }
10365           return
10366             unwrap_value (ada_value_ptr_subscript (argvec[0],
10367                                                    nargs, argvec + 1));
10368
10369         default:
10370           error (_("Attempt to index or call something other than an "
10371                    "array or function"));
10372         }
10373
10374     case TERNOP_SLICE:
10375       {
10376         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10377         struct value *low_bound_val =
10378           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10379         struct value *high_bound_val =
10380           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10381         LONGEST low_bound;
10382         LONGEST high_bound;
10383
10384         low_bound_val = coerce_ref (low_bound_val);
10385         high_bound_val = coerce_ref (high_bound_val);
10386         low_bound = pos_atr (low_bound_val);
10387         high_bound = pos_atr (high_bound_val);
10388
10389         if (noside == EVAL_SKIP)
10390           goto nosideret;
10391
10392         /* If this is a reference to an aligner type, then remove all
10393            the aligners.  */
10394         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10395             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10396           TYPE_TARGET_TYPE (value_type (array)) =
10397             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10398
10399         if (ada_is_constrained_packed_array_type (value_type (array)))
10400           error (_("cannot slice a packed array"));
10401
10402         /* If this is a reference to an array or an array lvalue,
10403            convert to a pointer.  */
10404         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10405             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10406                 && VALUE_LVAL (array) == lval_memory))
10407           array = value_addr (array);
10408
10409         if (noside == EVAL_AVOID_SIDE_EFFECTS
10410             && ada_is_array_descriptor_type (ada_check_typedef
10411                                              (value_type (array))))
10412           return empty_array (ada_type_of_array (array, 0), low_bound);
10413
10414         array = ada_coerce_to_simple_array_ptr (array);
10415
10416         /* If we have more than one level of pointer indirection,
10417            dereference the value until we get only one level.  */
10418         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10419                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10420                      == TYPE_CODE_PTR))
10421           array = value_ind (array);
10422
10423         /* Make sure we really do have an array type before going further,
10424            to avoid a SEGV when trying to get the index type or the target
10425            type later down the road if the debug info generated by
10426            the compiler is incorrect or incomplete.  */
10427         if (!ada_is_simple_array_type (value_type (array)))
10428           error (_("cannot take slice of non-array"));
10429
10430         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10431             == TYPE_CODE_PTR)
10432           {
10433             struct type *type0 = ada_check_typedef (value_type (array));
10434
10435             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10436               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10437             else
10438               {
10439                 struct type *arr_type0 =
10440                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10441
10442                 return ada_value_slice_from_ptr (array, arr_type0,
10443                                                  longest_to_int (low_bound),
10444                                                  longest_to_int (high_bound));
10445               }
10446           }
10447         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10448           return array;
10449         else if (high_bound < low_bound)
10450           return empty_array (value_type (array), low_bound);
10451         else
10452           return ada_value_slice (array, longest_to_int (low_bound),
10453                                   longest_to_int (high_bound));
10454       }
10455
10456     case UNOP_IN_RANGE:
10457       (*pos) += 2;
10458       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10459       type = check_typedef (exp->elts[pc + 1].type);
10460
10461       if (noside == EVAL_SKIP)
10462         goto nosideret;
10463
10464       switch (TYPE_CODE (type))
10465         {
10466         default:
10467           lim_warning (_("Membership test incompletely implemented; "
10468                          "always returns true"));
10469           type = language_bool_type (exp->language_defn, exp->gdbarch);
10470           return value_from_longest (type, (LONGEST) 1);
10471
10472         case TYPE_CODE_RANGE:
10473           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10474           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10475           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10476           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10477           type = language_bool_type (exp->language_defn, exp->gdbarch);
10478           return
10479             value_from_longest (type,
10480                                 (value_less (arg1, arg3)
10481                                  || value_equal (arg1, arg3))
10482                                 && (value_less (arg2, arg1)
10483                                     || value_equal (arg2, arg1)));
10484         }
10485
10486     case BINOP_IN_BOUNDS:
10487       (*pos) += 2;
10488       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10489       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10490
10491       if (noside == EVAL_SKIP)
10492         goto nosideret;
10493
10494       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10495         {
10496           type = language_bool_type (exp->language_defn, exp->gdbarch);
10497           return value_zero (type, not_lval);
10498         }
10499
10500       tem = longest_to_int (exp->elts[pc + 1].longconst);
10501
10502       type = ada_index_type (value_type (arg2), tem, "range");
10503       if (!type)
10504         type = value_type (arg1);
10505
10506       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10507       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10508
10509       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10510       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10511       type = language_bool_type (exp->language_defn, exp->gdbarch);
10512       return
10513         value_from_longest (type,
10514                             (value_less (arg1, arg3)
10515                              || value_equal (arg1, arg3))
10516                             && (value_less (arg2, arg1)
10517                                 || value_equal (arg2, arg1)));
10518
10519     case TERNOP_IN_RANGE:
10520       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10521       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10522       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10523
10524       if (noside == EVAL_SKIP)
10525         goto nosideret;
10526
10527       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10528       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10529       type = language_bool_type (exp->language_defn, exp->gdbarch);
10530       return
10531         value_from_longest (type,
10532                             (value_less (arg1, arg3)
10533                              || value_equal (arg1, arg3))
10534                             && (value_less (arg2, arg1)
10535                                 || value_equal (arg2, arg1)));
10536
10537     case OP_ATR_FIRST:
10538     case OP_ATR_LAST:
10539     case OP_ATR_LENGTH:
10540       {
10541         struct type *type_arg;
10542
10543         if (exp->elts[*pos].opcode == OP_TYPE)
10544           {
10545             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10546             arg1 = NULL;
10547             type_arg = check_typedef (exp->elts[pc + 2].type);
10548           }
10549         else
10550           {
10551             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10552             type_arg = NULL;
10553           }
10554
10555         if (exp->elts[*pos].opcode != OP_LONG)
10556           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10557         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10558         *pos += 4;
10559
10560         if (noside == EVAL_SKIP)
10561           goto nosideret;
10562
10563         if (type_arg == NULL)
10564           {
10565             arg1 = ada_coerce_ref (arg1);
10566
10567             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10568               arg1 = ada_coerce_to_simple_array (arg1);
10569
10570             if (op == OP_ATR_LENGTH)
10571               type = builtin_type (exp->gdbarch)->builtin_int;
10572             else
10573               {
10574                 type = ada_index_type (value_type (arg1), tem,
10575                                        ada_attribute_name (op));
10576                 if (type == NULL)
10577                   type = builtin_type (exp->gdbarch)->builtin_int;
10578               }
10579
10580             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10581               return allocate_value (type);
10582
10583             switch (op)
10584               {
10585               default:          /* Should never happen.  */
10586                 error (_("unexpected attribute encountered"));
10587               case OP_ATR_FIRST:
10588                 return value_from_longest
10589                         (type, ada_array_bound (arg1, tem, 0));
10590               case OP_ATR_LAST:
10591                 return value_from_longest
10592                         (type, ada_array_bound (arg1, tem, 1));
10593               case OP_ATR_LENGTH:
10594                 return value_from_longest
10595                         (type, ada_array_length (arg1, tem));
10596               }
10597           }
10598         else if (discrete_type_p (type_arg))
10599           {
10600             struct type *range_type;
10601             const char *name = ada_type_name (type_arg);
10602
10603             range_type = NULL;
10604             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10605               range_type = to_fixed_range_type (type_arg, NULL);
10606             if (range_type == NULL)
10607               range_type = type_arg;
10608             switch (op)
10609               {
10610               default:
10611                 error (_("unexpected attribute encountered"));
10612               case OP_ATR_FIRST:
10613                 return value_from_longest 
10614                   (range_type, ada_discrete_type_low_bound (range_type));
10615               case OP_ATR_LAST:
10616                 return value_from_longest
10617                   (range_type, ada_discrete_type_high_bound (range_type));
10618               case OP_ATR_LENGTH:
10619                 error (_("the 'length attribute applies only to array types"));
10620               }
10621           }
10622         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10623           error (_("unimplemented type attribute"));
10624         else
10625           {
10626             LONGEST low, high;
10627
10628             if (ada_is_constrained_packed_array_type (type_arg))
10629               type_arg = decode_constrained_packed_array_type (type_arg);
10630
10631             if (op == OP_ATR_LENGTH)
10632               type = builtin_type (exp->gdbarch)->builtin_int;
10633             else
10634               {
10635                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10636                 if (type == NULL)
10637                   type = builtin_type (exp->gdbarch)->builtin_int;
10638               }
10639
10640             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10641               return allocate_value (type);
10642
10643             switch (op)
10644               {
10645               default:
10646                 error (_("unexpected attribute encountered"));
10647               case OP_ATR_FIRST:
10648                 low = ada_array_bound_from_type (type_arg, tem, 0);
10649                 return value_from_longest (type, low);
10650               case OP_ATR_LAST:
10651                 high = ada_array_bound_from_type (type_arg, tem, 1);
10652                 return value_from_longest (type, high);
10653               case OP_ATR_LENGTH:
10654                 low = ada_array_bound_from_type (type_arg, tem, 0);
10655                 high = ada_array_bound_from_type (type_arg, tem, 1);
10656                 return value_from_longest (type, high - low + 1);
10657               }
10658           }
10659       }
10660
10661     case OP_ATR_TAG:
10662       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10663       if (noside == EVAL_SKIP)
10664         goto nosideret;
10665
10666       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10667         return value_zero (ada_tag_type (arg1), not_lval);
10668
10669       return ada_value_tag (arg1);
10670
10671     case OP_ATR_MIN:
10672     case OP_ATR_MAX:
10673       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10674       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10675       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10676       if (noside == EVAL_SKIP)
10677         goto nosideret;
10678       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10679         return value_zero (value_type (arg1), not_lval);
10680       else
10681         {
10682           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10683           return value_binop (arg1, arg2,
10684                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10685         }
10686
10687     case OP_ATR_MODULUS:
10688       {
10689         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10690
10691         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10692         if (noside == EVAL_SKIP)
10693           goto nosideret;
10694
10695         if (!ada_is_modular_type (type_arg))
10696           error (_("'modulus must be applied to modular type"));
10697
10698         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10699                                    ada_modulus (type_arg));
10700       }
10701
10702
10703     case OP_ATR_POS:
10704       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10705       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10706       if (noside == EVAL_SKIP)
10707         goto nosideret;
10708       type = builtin_type (exp->gdbarch)->builtin_int;
10709       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10710         return value_zero (type, not_lval);
10711       else
10712         return value_pos_atr (type, arg1);
10713
10714     case OP_ATR_SIZE:
10715       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10716       type = value_type (arg1);
10717
10718       /* If the argument is a reference, then dereference its type, since
10719          the user is really asking for the size of the actual object,
10720          not the size of the pointer.  */
10721       if (TYPE_CODE (type) == TYPE_CODE_REF)
10722         type = TYPE_TARGET_TYPE (type);
10723
10724       if (noside == EVAL_SKIP)
10725         goto nosideret;
10726       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10727         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10728       else
10729         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10730                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10731
10732     case OP_ATR_VAL:
10733       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10734       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10735       type = exp->elts[pc + 2].type;
10736       if (noside == EVAL_SKIP)
10737         goto nosideret;
10738       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10739         return value_zero (type, not_lval);
10740       else
10741         return value_val_atr (type, arg1);
10742
10743     case BINOP_EXP:
10744       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10745       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10746       if (noside == EVAL_SKIP)
10747         goto nosideret;
10748       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10749         return value_zero (value_type (arg1), not_lval);
10750       else
10751         {
10752           /* For integer exponentiation operations,
10753              only promote the first argument.  */
10754           if (is_integral_type (value_type (arg2)))
10755             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10756           else
10757             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10758
10759           return value_binop (arg1, arg2, op);
10760         }
10761
10762     case UNOP_PLUS:
10763       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10764       if (noside == EVAL_SKIP)
10765         goto nosideret;
10766       else
10767         return arg1;
10768
10769     case UNOP_ABS:
10770       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10771       if (noside == EVAL_SKIP)
10772         goto nosideret;
10773       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10774       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10775         return value_neg (arg1);
10776       else
10777         return arg1;
10778
10779     case UNOP_IND:
10780       preeval_pos = *pos;
10781       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10782       if (noside == EVAL_SKIP)
10783         goto nosideret;
10784       type = ada_check_typedef (value_type (arg1));
10785       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10786         {
10787           if (ada_is_array_descriptor_type (type))
10788             /* GDB allows dereferencing GNAT array descriptors.  */
10789             {
10790               struct type *arrType = ada_type_of_array (arg1, 0);
10791
10792               if (arrType == NULL)
10793                 error (_("Attempt to dereference null array pointer."));
10794               return value_at_lazy (arrType, 0);
10795             }
10796           else if (TYPE_CODE (type) == TYPE_CODE_PTR
10797                    || TYPE_CODE (type) == TYPE_CODE_REF
10798                    /* In C you can dereference an array to get the 1st elt.  */
10799                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10800             {
10801             /* As mentioned in the OP_VAR_VALUE case, tagged types can
10802                only be determined by inspecting the object's tag.
10803                This means that we need to evaluate completely the
10804                expression in order to get its type.  */
10805
10806               if ((TYPE_CODE (type) == TYPE_CODE_REF
10807                    || TYPE_CODE (type) == TYPE_CODE_PTR)
10808                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10809                 {
10810                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10811                                           EVAL_NORMAL);
10812                   type = value_type (ada_value_ind (arg1));
10813                 }
10814               else
10815                 {
10816                   type = to_static_fixed_type
10817                     (ada_aligned_type
10818                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10819                 }
10820               check_size (type);
10821               return value_zero (type, lval_memory);
10822             }
10823           else if (TYPE_CODE (type) == TYPE_CODE_INT)
10824             {
10825               /* GDB allows dereferencing an int.  */
10826               if (expect_type == NULL)
10827                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10828                                    lval_memory);
10829               else
10830                 {
10831                   expect_type = 
10832                     to_static_fixed_type (ada_aligned_type (expect_type));
10833                   return value_zero (expect_type, lval_memory);
10834                 }
10835             }
10836           else
10837             error (_("Attempt to take contents of a non-pointer value."));
10838         }
10839       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
10840       type = ada_check_typedef (value_type (arg1));
10841
10842       if (TYPE_CODE (type) == TYPE_CODE_INT)
10843           /* GDB allows dereferencing an int.  If we were given
10844              the expect_type, then use that as the target type.
10845              Otherwise, assume that the target type is an int.  */
10846         {
10847           if (expect_type != NULL)
10848             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10849                                               arg1));
10850           else
10851             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10852                                   (CORE_ADDR) value_as_address (arg1));
10853         }
10854
10855       if (ada_is_array_descriptor_type (type))
10856         /* GDB allows dereferencing GNAT array descriptors.  */
10857         return ada_coerce_to_simple_array (arg1);
10858       else
10859         return ada_value_ind (arg1);
10860
10861     case STRUCTOP_STRUCT:
10862       tem = longest_to_int (exp->elts[pc + 1].longconst);
10863       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10864       preeval_pos = *pos;
10865       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10866       if (noside == EVAL_SKIP)
10867         goto nosideret;
10868       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10869         {
10870           struct type *type1 = value_type (arg1);
10871
10872           if (ada_is_tagged_type (type1, 1))
10873             {
10874               type = ada_lookup_struct_elt_type (type1,
10875                                                  &exp->elts[pc + 2].string,
10876                                                  1, 1, NULL);
10877
10878               /* If the field is not found, check if it exists in the
10879                  extension of this object's type. This means that we
10880                  need to evaluate completely the expression.  */
10881
10882               if (type == NULL)
10883                 {
10884                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10885                                           EVAL_NORMAL);
10886                   arg1 = ada_value_struct_elt (arg1,
10887                                                &exp->elts[pc + 2].string,
10888                                                0);
10889                   arg1 = unwrap_value (arg1);
10890                   type = value_type (ada_to_fixed_value (arg1));
10891                 }
10892             }
10893           else
10894             type =
10895               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10896                                           0, NULL);
10897
10898           return value_zero (ada_aligned_type (type), lval_memory);
10899         }
10900       else
10901         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10902         arg1 = unwrap_value (arg1);
10903         return ada_to_fixed_value (arg1);
10904
10905     case OP_TYPE:
10906       /* The value is not supposed to be used.  This is here to make it
10907          easier to accommodate expressions that contain types.  */
10908       (*pos) += 2;
10909       if (noside == EVAL_SKIP)
10910         goto nosideret;
10911       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10912         return allocate_value (exp->elts[pc + 1].type);
10913       else
10914         error (_("Attempt to use a type name as an expression"));
10915
10916     case OP_AGGREGATE:
10917     case OP_CHOICES:
10918     case OP_OTHERS:
10919     case OP_DISCRETE_RANGE:
10920     case OP_POSITIONAL:
10921     case OP_NAME:
10922       if (noside == EVAL_NORMAL)
10923         switch (op) 
10924           {
10925           case OP_NAME:
10926             error (_("Undefined name, ambiguous name, or renaming used in "
10927                      "component association: %s."), &exp->elts[pc+2].string);
10928           case OP_AGGREGATE:
10929             error (_("Aggregates only allowed on the right of an assignment"));
10930           default:
10931             internal_error (__FILE__, __LINE__,
10932                             _("aggregate apparently mangled"));
10933           }
10934
10935       ada_forward_operator_length (exp, pc, &oplen, &nargs);
10936       *pos += oplen - 1;
10937       for (tem = 0; tem < nargs; tem += 1) 
10938         ada_evaluate_subexp (NULL, exp, pos, noside);
10939       goto nosideret;
10940     }
10941
10942 nosideret:
10943   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
10944 }
10945 \f
10946
10947                                 /* Fixed point */
10948
10949 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
10950    type name that encodes the 'small and 'delta information.
10951    Otherwise, return NULL.  */
10952
10953 static const char *
10954 fixed_type_info (struct type *type)
10955 {
10956   const char *name = ada_type_name (type);
10957   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10958
10959   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10960     {
10961       const char *tail = strstr (name, "___XF_");
10962
10963       if (tail == NULL)
10964         return NULL;
10965       else
10966         return tail + 5;
10967     }
10968   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10969     return fixed_type_info (TYPE_TARGET_TYPE (type));
10970   else
10971     return NULL;
10972 }
10973
10974 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
10975
10976 int
10977 ada_is_fixed_point_type (struct type *type)
10978 {
10979   return fixed_type_info (type) != NULL;
10980 }
10981
10982 /* Return non-zero iff TYPE represents a System.Address type.  */
10983
10984 int
10985 ada_is_system_address_type (struct type *type)
10986 {
10987   return (TYPE_NAME (type)
10988           && strcmp (TYPE_NAME (type), "system__address") == 0);
10989 }
10990
10991 /* Assuming that TYPE is the representation of an Ada fixed-point
10992    type, return its delta, or -1 if the type is malformed and the
10993    delta cannot be determined.  */
10994
10995 DOUBLEST
10996 ada_delta (struct type *type)
10997 {
10998   const char *encoding = fixed_type_info (type);
10999   DOUBLEST num, den;
11000
11001   /* Strictly speaking, num and den are encoded as integer.  However,
11002      they may not fit into a long, and they will have to be converted
11003      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11004   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11005               &num, &den) < 2)
11006     return -1.0;
11007   else
11008     return num / den;
11009 }
11010
11011 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
11012    factor ('SMALL value) associated with the type.  */
11013
11014 static DOUBLEST
11015 scaling_factor (struct type *type)
11016 {
11017   const char *encoding = fixed_type_info (type);
11018   DOUBLEST num0, den0, num1, den1;
11019   int n;
11020
11021   /* Strictly speaking, num's and den's are encoded as integer.  However,
11022      they may not fit into a long, and they will have to be converted
11023      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11024   n = sscanf (encoding,
11025               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11026               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11027               &num0, &den0, &num1, &den1);
11028
11029   if (n < 2)
11030     return 1.0;
11031   else if (n == 4)
11032     return num1 / den1;
11033   else
11034     return num0 / den0;
11035 }
11036
11037
11038 /* Assuming that X is the representation of a value of fixed-point
11039    type TYPE, return its floating-point equivalent.  */
11040
11041 DOUBLEST
11042 ada_fixed_to_float (struct type *type, LONGEST x)
11043 {
11044   return (DOUBLEST) x *scaling_factor (type);
11045 }
11046
11047 /* The representation of a fixed-point value of type TYPE
11048    corresponding to the value X.  */
11049
11050 LONGEST
11051 ada_float_to_fixed (struct type *type, DOUBLEST x)
11052 {
11053   return (LONGEST) (x / scaling_factor (type) + 0.5);
11054 }
11055
11056 \f
11057
11058                                 /* Range types */
11059
11060 /* Scan STR beginning at position K for a discriminant name, and
11061    return the value of that discriminant field of DVAL in *PX.  If
11062    PNEW_K is not null, put the position of the character beyond the
11063    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11064    not alter *PX and *PNEW_K if unsuccessful.  */
11065
11066 static int
11067 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
11068                     int *pnew_k)
11069 {
11070   static char *bound_buffer = NULL;
11071   static size_t bound_buffer_len = 0;
11072   char *bound;
11073   char *pend;
11074   struct value *bound_val;
11075
11076   if (dval == NULL || str == NULL || str[k] == '\0')
11077     return 0;
11078
11079   pend = strstr (str + k, "__");
11080   if (pend == NULL)
11081     {
11082       bound = str + k;
11083       k += strlen (bound);
11084     }
11085   else
11086     {
11087       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
11088       bound = bound_buffer;
11089       strncpy (bound_buffer, str + k, pend - (str + k));
11090       bound[pend - (str + k)] = '\0';
11091       k = pend - str;
11092     }
11093
11094   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11095   if (bound_val == NULL)
11096     return 0;
11097
11098   *px = value_as_long (bound_val);
11099   if (pnew_k != NULL)
11100     *pnew_k = k;
11101   return 1;
11102 }
11103
11104 /* Value of variable named NAME in the current environment.  If
11105    no such variable found, then if ERR_MSG is null, returns 0, and
11106    otherwise causes an error with message ERR_MSG.  */
11107
11108 static struct value *
11109 get_var_value (char *name, char *err_msg)
11110 {
11111   struct ada_symbol_info *syms;
11112   int nsyms;
11113
11114   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11115                                   &syms);
11116
11117   if (nsyms != 1)
11118     {
11119       if (err_msg == NULL)
11120         return 0;
11121       else
11122         error (("%s"), err_msg);
11123     }
11124
11125   return value_of_variable (syms[0].sym, syms[0].block);
11126 }
11127
11128 /* Value of integer variable named NAME in the current environment.  If
11129    no such variable found, returns 0, and sets *FLAG to 0.  If
11130    successful, sets *FLAG to 1.  */
11131
11132 LONGEST
11133 get_int_var_value (char *name, int *flag)
11134 {
11135   struct value *var_val = get_var_value (name, 0);
11136
11137   if (var_val == 0)
11138     {
11139       if (flag != NULL)
11140         *flag = 0;
11141       return 0;
11142     }
11143   else
11144     {
11145       if (flag != NULL)
11146         *flag = 1;
11147       return value_as_long (var_val);
11148     }
11149 }
11150
11151
11152 /* Return a range type whose base type is that of the range type named
11153    NAME in the current environment, and whose bounds are calculated
11154    from NAME according to the GNAT range encoding conventions.
11155    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11156    corresponding range type from debug information; fall back to using it
11157    if symbol lookup fails.  If a new type must be created, allocate it
11158    like ORIG_TYPE was.  The bounds information, in general, is encoded
11159    in NAME, the base type given in the named range type.  */
11160
11161 static struct type *
11162 to_fixed_range_type (struct type *raw_type, struct value *dval)
11163 {
11164   const char *name;
11165   struct type *base_type;
11166   char *subtype_info;
11167
11168   gdb_assert (raw_type != NULL);
11169   gdb_assert (TYPE_NAME (raw_type) != NULL);
11170
11171   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11172     base_type = TYPE_TARGET_TYPE (raw_type);
11173   else
11174     base_type = raw_type;
11175
11176   name = TYPE_NAME (raw_type);
11177   subtype_info = strstr (name, "___XD");
11178   if (subtype_info == NULL)
11179     {
11180       LONGEST L = ada_discrete_type_low_bound (raw_type);
11181       LONGEST U = ada_discrete_type_high_bound (raw_type);
11182
11183       if (L < INT_MIN || U > INT_MAX)
11184         return raw_type;
11185       else
11186         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11187                                          L, U);
11188     }
11189   else
11190     {
11191       static char *name_buf = NULL;
11192       static size_t name_len = 0;
11193       int prefix_len = subtype_info - name;
11194       LONGEST L, U;
11195       struct type *type;
11196       char *bounds_str;
11197       int n;
11198
11199       GROW_VECT (name_buf, name_len, prefix_len + 5);
11200       strncpy (name_buf, name, prefix_len);
11201       name_buf[prefix_len] = '\0';
11202
11203       subtype_info += 5;
11204       bounds_str = strchr (subtype_info, '_');
11205       n = 1;
11206
11207       if (*subtype_info == 'L')
11208         {
11209           if (!ada_scan_number (bounds_str, n, &L, &n)
11210               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11211             return raw_type;
11212           if (bounds_str[n] == '_')
11213             n += 2;
11214           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11215             n += 1;
11216           subtype_info += 1;
11217         }
11218       else
11219         {
11220           int ok;
11221
11222           strcpy (name_buf + prefix_len, "___L");
11223           L = get_int_var_value (name_buf, &ok);
11224           if (!ok)
11225             {
11226               lim_warning (_("Unknown lower bound, using 1."));
11227               L = 1;
11228             }
11229         }
11230
11231       if (*subtype_info == 'U')
11232         {
11233           if (!ada_scan_number (bounds_str, n, &U, &n)
11234               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11235             return raw_type;
11236         }
11237       else
11238         {
11239           int ok;
11240
11241           strcpy (name_buf + prefix_len, "___U");
11242           U = get_int_var_value (name_buf, &ok);
11243           if (!ok)
11244             {
11245               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11246               U = L;
11247             }
11248         }
11249
11250       type = create_static_range_type (alloc_type_copy (raw_type),
11251                                        base_type, L, U);
11252       TYPE_NAME (type) = name;
11253       return type;
11254     }
11255 }
11256
11257 /* True iff NAME is the name of a range type.  */
11258
11259 int
11260 ada_is_range_type_name (const char *name)
11261 {
11262   return (name != NULL && strstr (name, "___XD"));
11263 }
11264 \f
11265
11266                                 /* Modular types */
11267
11268 /* True iff TYPE is an Ada modular type.  */
11269
11270 int
11271 ada_is_modular_type (struct type *type)
11272 {
11273   struct type *subranged_type = get_base_type (type);
11274
11275   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11276           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11277           && TYPE_UNSIGNED (subranged_type));
11278 }
11279
11280 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11281
11282 ULONGEST
11283 ada_modulus (struct type *type)
11284 {
11285   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11286 }
11287 \f
11288
11289 /* Ada exception catchpoint support:
11290    ---------------------------------
11291
11292    We support 3 kinds of exception catchpoints:
11293      . catchpoints on Ada exceptions
11294      . catchpoints on unhandled Ada exceptions
11295      . catchpoints on failed assertions
11296
11297    Exceptions raised during failed assertions, or unhandled exceptions
11298    could perfectly be caught with the general catchpoint on Ada exceptions.
11299    However, we can easily differentiate these two special cases, and having
11300    the option to distinguish these two cases from the rest can be useful
11301    to zero-in on certain situations.
11302
11303    Exception catchpoints are a specialized form of breakpoint,
11304    since they rely on inserting breakpoints inside known routines
11305    of the GNAT runtime.  The implementation therefore uses a standard
11306    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11307    of breakpoint_ops.
11308
11309    Support in the runtime for exception catchpoints have been changed
11310    a few times already, and these changes affect the implementation
11311    of these catchpoints.  In order to be able to support several
11312    variants of the runtime, we use a sniffer that will determine
11313    the runtime variant used by the program being debugged.  */
11314
11315 /* Ada's standard exceptions.
11316
11317    The Ada 83 standard also defined Numeric_Error.  But there so many
11318    situations where it was unclear from the Ada 83 Reference Manual
11319    (RM) whether Constraint_Error or Numeric_Error should be raised,
11320    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11321    Interpretation saying that anytime the RM says that Numeric_Error
11322    should be raised, the implementation may raise Constraint_Error.
11323    Ada 95 went one step further and pretty much removed Numeric_Error
11324    from the list of standard exceptions (it made it a renaming of
11325    Constraint_Error, to help preserve compatibility when compiling
11326    an Ada83 compiler). As such, we do not include Numeric_Error from
11327    this list of standard exceptions.  */
11328
11329 static char *standard_exc[] = {
11330   "constraint_error",
11331   "program_error",
11332   "storage_error",
11333   "tasking_error"
11334 };
11335
11336 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11337
11338 /* A structure that describes how to support exception catchpoints
11339    for a given executable.  */
11340
11341 struct exception_support_info
11342 {
11343    /* The name of the symbol to break on in order to insert
11344       a catchpoint on exceptions.  */
11345    const char *catch_exception_sym;
11346
11347    /* The name of the symbol to break on in order to insert
11348       a catchpoint on unhandled exceptions.  */
11349    const char *catch_exception_unhandled_sym;
11350
11351    /* The name of the symbol to break on in order to insert
11352       a catchpoint on failed assertions.  */
11353    const char *catch_assert_sym;
11354
11355    /* Assuming that the inferior just triggered an unhandled exception
11356       catchpoint, this function is responsible for returning the address
11357       in inferior memory where the name of that exception is stored.
11358       Return zero if the address could not be computed.  */
11359    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11360 };
11361
11362 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11363 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11364
11365 /* The following exception support info structure describes how to
11366    implement exception catchpoints with the latest version of the
11367    Ada runtime (as of 2007-03-06).  */
11368
11369 static const struct exception_support_info default_exception_support_info =
11370 {
11371   "__gnat_debug_raise_exception", /* catch_exception_sym */
11372   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11373   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11374   ada_unhandled_exception_name_addr
11375 };
11376
11377 /* The following exception support info structure describes how to
11378    implement exception catchpoints with a slightly older version
11379    of the Ada runtime.  */
11380
11381 static const struct exception_support_info exception_support_info_fallback =
11382 {
11383   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11384   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11385   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11386   ada_unhandled_exception_name_addr_from_raise
11387 };
11388
11389 /* Return nonzero if we can detect the exception support routines
11390    described in EINFO.
11391
11392    This function errors out if an abnormal situation is detected
11393    (for instance, if we find the exception support routines, but
11394    that support is found to be incomplete).  */
11395
11396 static int
11397 ada_has_this_exception_support (const struct exception_support_info *einfo)
11398 {
11399   struct symbol *sym;
11400
11401   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11402      that should be compiled with debugging information.  As a result, we
11403      expect to find that symbol in the symtabs.  */
11404
11405   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11406   if (sym == NULL)
11407     {
11408       /* Perhaps we did not find our symbol because the Ada runtime was
11409          compiled without debugging info, or simply stripped of it.
11410          It happens on some GNU/Linux distributions for instance, where
11411          users have to install a separate debug package in order to get
11412          the runtime's debugging info.  In that situation, let the user
11413          know why we cannot insert an Ada exception catchpoint.
11414
11415          Note: Just for the purpose of inserting our Ada exception
11416          catchpoint, we could rely purely on the associated minimal symbol.
11417          But we would be operating in degraded mode anyway, since we are
11418          still lacking the debugging info needed later on to extract
11419          the name of the exception being raised (this name is printed in
11420          the catchpoint message, and is also used when trying to catch
11421          a specific exception).  We do not handle this case for now.  */
11422       struct bound_minimal_symbol msym
11423         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11424
11425       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11426         error (_("Your Ada runtime appears to be missing some debugging "
11427                  "information.\nCannot insert Ada exception catchpoint "
11428                  "in this configuration."));
11429
11430       return 0;
11431     }
11432
11433   /* Make sure that the symbol we found corresponds to a function.  */
11434
11435   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11436     error (_("Symbol \"%s\" is not a function (class = %d)"),
11437            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11438
11439   return 1;
11440 }
11441
11442 /* Inspect the Ada runtime and determine which exception info structure
11443    should be used to provide support for exception catchpoints.
11444
11445    This function will always set the per-inferior exception_info,
11446    or raise an error.  */
11447
11448 static void
11449 ada_exception_support_info_sniffer (void)
11450 {
11451   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11452
11453   /* If the exception info is already known, then no need to recompute it.  */
11454   if (data->exception_info != NULL)
11455     return;
11456
11457   /* Check the latest (default) exception support info.  */
11458   if (ada_has_this_exception_support (&default_exception_support_info))
11459     {
11460       data->exception_info = &default_exception_support_info;
11461       return;
11462     }
11463
11464   /* Try our fallback exception suport info.  */
11465   if (ada_has_this_exception_support (&exception_support_info_fallback))
11466     {
11467       data->exception_info = &exception_support_info_fallback;
11468       return;
11469     }
11470
11471   /* Sometimes, it is normal for us to not be able to find the routine
11472      we are looking for.  This happens when the program is linked with
11473      the shared version of the GNAT runtime, and the program has not been
11474      started yet.  Inform the user of these two possible causes if
11475      applicable.  */
11476
11477   if (ada_update_initial_language (language_unknown) != language_ada)
11478     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11479
11480   /* If the symbol does not exist, then check that the program is
11481      already started, to make sure that shared libraries have been
11482      loaded.  If it is not started, this may mean that the symbol is
11483      in a shared library.  */
11484
11485   if (ptid_get_pid (inferior_ptid) == 0)
11486     error (_("Unable to insert catchpoint. Try to start the program first."));
11487
11488   /* At this point, we know that we are debugging an Ada program and
11489      that the inferior has been started, but we still are not able to
11490      find the run-time symbols.  That can mean that we are in
11491      configurable run time mode, or that a-except as been optimized
11492      out by the linker...  In any case, at this point it is not worth
11493      supporting this feature.  */
11494
11495   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11496 }
11497
11498 /* True iff FRAME is very likely to be that of a function that is
11499    part of the runtime system.  This is all very heuristic, but is
11500    intended to be used as advice as to what frames are uninteresting
11501    to most users.  */
11502
11503 static int
11504 is_known_support_routine (struct frame_info *frame)
11505 {
11506   struct symtab_and_line sal;
11507   char *func_name;
11508   enum language func_lang;
11509   int i;
11510   const char *fullname;
11511
11512   /* If this code does not have any debugging information (no symtab),
11513      This cannot be any user code.  */
11514
11515   find_frame_sal (frame, &sal);
11516   if (sal.symtab == NULL)
11517     return 1;
11518
11519   /* If there is a symtab, but the associated source file cannot be
11520      located, then assume this is not user code:  Selecting a frame
11521      for which we cannot display the code would not be very helpful
11522      for the user.  This should also take care of case such as VxWorks
11523      where the kernel has some debugging info provided for a few units.  */
11524
11525   fullname = symtab_to_fullname (sal.symtab);
11526   if (access (fullname, R_OK) != 0)
11527     return 1;
11528
11529   /* Check the unit filename againt the Ada runtime file naming.
11530      We also check the name of the objfile against the name of some
11531      known system libraries that sometimes come with debugging info
11532      too.  */
11533
11534   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11535     {
11536       re_comp (known_runtime_file_name_patterns[i]);
11537       if (re_exec (lbasename (sal.symtab->filename)))
11538         return 1;
11539       if (SYMTAB_OBJFILE (sal.symtab) != NULL
11540           && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11541         return 1;
11542     }
11543
11544   /* Check whether the function is a GNAT-generated entity.  */
11545
11546   find_frame_funname (frame, &func_name, &func_lang, NULL);
11547   if (func_name == NULL)
11548     return 1;
11549
11550   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11551     {
11552       re_comp (known_auxiliary_function_name_patterns[i]);
11553       if (re_exec (func_name))
11554         {
11555           xfree (func_name);
11556           return 1;
11557         }
11558     }
11559
11560   xfree (func_name);
11561   return 0;
11562 }
11563
11564 /* Find the first frame that contains debugging information and that is not
11565    part of the Ada run-time, starting from FI and moving upward.  */
11566
11567 void
11568 ada_find_printable_frame (struct frame_info *fi)
11569 {
11570   for (; fi != NULL; fi = get_prev_frame (fi))
11571     {
11572       if (!is_known_support_routine (fi))
11573         {
11574           select_frame (fi);
11575           break;
11576         }
11577     }
11578
11579 }
11580
11581 /* Assuming that the inferior just triggered an unhandled exception
11582    catchpoint, return the address in inferior memory where the name
11583    of the exception is stored.
11584    
11585    Return zero if the address could not be computed.  */
11586
11587 static CORE_ADDR
11588 ada_unhandled_exception_name_addr (void)
11589 {
11590   return parse_and_eval_address ("e.full_name");
11591 }
11592
11593 /* Same as ada_unhandled_exception_name_addr, except that this function
11594    should be used when the inferior uses an older version of the runtime,
11595    where the exception name needs to be extracted from a specific frame
11596    several frames up in the callstack.  */
11597
11598 static CORE_ADDR
11599 ada_unhandled_exception_name_addr_from_raise (void)
11600 {
11601   int frame_level;
11602   struct frame_info *fi;
11603   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11604   struct cleanup *old_chain;
11605
11606   /* To determine the name of this exception, we need to select
11607      the frame corresponding to RAISE_SYM_NAME.  This frame is
11608      at least 3 levels up, so we simply skip the first 3 frames
11609      without checking the name of their associated function.  */
11610   fi = get_current_frame ();
11611   for (frame_level = 0; frame_level < 3; frame_level += 1)
11612     if (fi != NULL)
11613       fi = get_prev_frame (fi); 
11614
11615   old_chain = make_cleanup (null_cleanup, NULL);
11616   while (fi != NULL)
11617     {
11618       char *func_name;
11619       enum language func_lang;
11620
11621       find_frame_funname (fi, &func_name, &func_lang, NULL);
11622       if (func_name != NULL)
11623         {
11624           make_cleanup (xfree, func_name);
11625
11626           if (strcmp (func_name,
11627                       data->exception_info->catch_exception_sym) == 0)
11628             break; /* We found the frame we were looking for...  */
11629           fi = get_prev_frame (fi);
11630         }
11631     }
11632   do_cleanups (old_chain);
11633
11634   if (fi == NULL)
11635     return 0;
11636
11637   select_frame (fi);
11638   return parse_and_eval_address ("id.full_name");
11639 }
11640
11641 /* Assuming the inferior just triggered an Ada exception catchpoint
11642    (of any type), return the address in inferior memory where the name
11643    of the exception is stored, if applicable.
11644
11645    Return zero if the address could not be computed, or if not relevant.  */
11646
11647 static CORE_ADDR
11648 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11649                            struct breakpoint *b)
11650 {
11651   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11652
11653   switch (ex)
11654     {
11655       case ada_catch_exception:
11656         return (parse_and_eval_address ("e.full_name"));
11657         break;
11658
11659       case ada_catch_exception_unhandled:
11660         return data->exception_info->unhandled_exception_name_addr ();
11661         break;
11662       
11663       case ada_catch_assert:
11664         return 0;  /* Exception name is not relevant in this case.  */
11665         break;
11666
11667       default:
11668         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11669         break;
11670     }
11671
11672   return 0; /* Should never be reached.  */
11673 }
11674
11675 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11676    any error that ada_exception_name_addr_1 might cause to be thrown.
11677    When an error is intercepted, a warning with the error message is printed,
11678    and zero is returned.  */
11679
11680 static CORE_ADDR
11681 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11682                          struct breakpoint *b)
11683 {
11684   volatile struct gdb_exception e;
11685   CORE_ADDR result = 0;
11686
11687   TRY_CATCH (e, RETURN_MASK_ERROR)
11688     {
11689       result = ada_exception_name_addr_1 (ex, b);
11690     }
11691
11692   if (e.reason < 0)
11693     {
11694       warning (_("failed to get exception name: %s"), e.message);
11695       return 0;
11696     }
11697
11698   return result;
11699 }
11700
11701 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11702
11703 /* Ada catchpoints.
11704
11705    In the case of catchpoints on Ada exceptions, the catchpoint will
11706    stop the target on every exception the program throws.  When a user
11707    specifies the name of a specific exception, we translate this
11708    request into a condition expression (in text form), and then parse
11709    it into an expression stored in each of the catchpoint's locations.
11710    We then use this condition to check whether the exception that was
11711    raised is the one the user is interested in.  If not, then the
11712    target is resumed again.  We store the name of the requested
11713    exception, in order to be able to re-set the condition expression
11714    when symbols change.  */
11715
11716 /* An instance of this type is used to represent an Ada catchpoint
11717    breakpoint location.  It includes a "struct bp_location" as a kind
11718    of base class; users downcast to "struct bp_location *" when
11719    needed.  */
11720
11721 struct ada_catchpoint_location
11722 {
11723   /* The base class.  */
11724   struct bp_location base;
11725
11726   /* The condition that checks whether the exception that was raised
11727      is the specific exception the user specified on catchpoint
11728      creation.  */
11729   struct expression *excep_cond_expr;
11730 };
11731
11732 /* Implement the DTOR method in the bp_location_ops structure for all
11733    Ada exception catchpoint kinds.  */
11734
11735 static void
11736 ada_catchpoint_location_dtor (struct bp_location *bl)
11737 {
11738   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11739
11740   xfree (al->excep_cond_expr);
11741 }
11742
11743 /* The vtable to be used in Ada catchpoint locations.  */
11744
11745 static const struct bp_location_ops ada_catchpoint_location_ops =
11746 {
11747   ada_catchpoint_location_dtor
11748 };
11749
11750 /* An instance of this type is used to represent an Ada catchpoint.
11751    It includes a "struct breakpoint" as a kind of base class; users
11752    downcast to "struct breakpoint *" when needed.  */
11753
11754 struct ada_catchpoint
11755 {
11756   /* The base class.  */
11757   struct breakpoint base;
11758
11759   /* The name of the specific exception the user specified.  */
11760   char *excep_string;
11761 };
11762
11763 /* Parse the exception condition string in the context of each of the
11764    catchpoint's locations, and store them for later evaluation.  */
11765
11766 static void
11767 create_excep_cond_exprs (struct ada_catchpoint *c)
11768 {
11769   struct cleanup *old_chain;
11770   struct bp_location *bl;
11771   char *cond_string;
11772
11773   /* Nothing to do if there's no specific exception to catch.  */
11774   if (c->excep_string == NULL)
11775     return;
11776
11777   /* Same if there are no locations... */
11778   if (c->base.loc == NULL)
11779     return;
11780
11781   /* Compute the condition expression in text form, from the specific
11782      expection we want to catch.  */
11783   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11784   old_chain = make_cleanup (xfree, cond_string);
11785
11786   /* Iterate over all the catchpoint's locations, and parse an
11787      expression for each.  */
11788   for (bl = c->base.loc; bl != NULL; bl = bl->next)
11789     {
11790       struct ada_catchpoint_location *ada_loc
11791         = (struct ada_catchpoint_location *) bl;
11792       struct expression *exp = NULL;
11793
11794       if (!bl->shlib_disabled)
11795         {
11796           volatile struct gdb_exception e;
11797           const char *s;
11798
11799           s = cond_string;
11800           TRY_CATCH (e, RETURN_MASK_ERROR)
11801             {
11802               exp = parse_exp_1 (&s, bl->address,
11803                                  block_for_pc (bl->address), 0);
11804             }
11805           if (e.reason < 0)
11806             {
11807               warning (_("failed to reevaluate internal exception condition "
11808                          "for catchpoint %d: %s"),
11809                        c->base.number, e.message);
11810               /* There is a bug in GCC on sparc-solaris when building with
11811                  optimization which causes EXP to change unexpectedly
11812                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11813                  The problem should be fixed starting with GCC 4.9.
11814                  In the meantime, work around it by forcing EXP back
11815                  to NULL.  */
11816               exp = NULL;
11817             }
11818         }
11819
11820       ada_loc->excep_cond_expr = exp;
11821     }
11822
11823   do_cleanups (old_chain);
11824 }
11825
11826 /* Implement the DTOR method in the breakpoint_ops structure for all
11827    exception catchpoint kinds.  */
11828
11829 static void
11830 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11831 {
11832   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11833
11834   xfree (c->excep_string);
11835
11836   bkpt_breakpoint_ops.dtor (b);
11837 }
11838
11839 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11840    structure for all exception catchpoint kinds.  */
11841
11842 static struct bp_location *
11843 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
11844                              struct breakpoint *self)
11845 {
11846   struct ada_catchpoint_location *loc;
11847
11848   loc = XNEW (struct ada_catchpoint_location);
11849   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11850   loc->excep_cond_expr = NULL;
11851   return &loc->base;
11852 }
11853
11854 /* Implement the RE_SET method in the breakpoint_ops structure for all
11855    exception catchpoint kinds.  */
11856
11857 static void
11858 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11859 {
11860   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11861
11862   /* Call the base class's method.  This updates the catchpoint's
11863      locations.  */
11864   bkpt_breakpoint_ops.re_set (b);
11865
11866   /* Reparse the exception conditional expressions.  One for each
11867      location.  */
11868   create_excep_cond_exprs (c);
11869 }
11870
11871 /* Returns true if we should stop for this breakpoint hit.  If the
11872    user specified a specific exception, we only want to cause a stop
11873    if the program thrown that exception.  */
11874
11875 static int
11876 should_stop_exception (const struct bp_location *bl)
11877 {
11878   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11879   const struct ada_catchpoint_location *ada_loc
11880     = (const struct ada_catchpoint_location *) bl;
11881   volatile struct gdb_exception ex;
11882   int stop;
11883
11884   /* With no specific exception, should always stop.  */
11885   if (c->excep_string == NULL)
11886     return 1;
11887
11888   if (ada_loc->excep_cond_expr == NULL)
11889     {
11890       /* We will have a NULL expression if back when we were creating
11891          the expressions, this location's had failed to parse.  */
11892       return 1;
11893     }
11894
11895   stop = 1;
11896   TRY_CATCH (ex, RETURN_MASK_ALL)
11897     {
11898       struct value *mark;
11899
11900       mark = value_mark ();
11901       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11902       value_free_to_mark (mark);
11903     }
11904   if (ex.reason < 0)
11905     exception_fprintf (gdb_stderr, ex,
11906                        _("Error in testing exception condition:\n"));
11907   return stop;
11908 }
11909
11910 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
11911    for all exception catchpoint kinds.  */
11912
11913 static void
11914 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11915 {
11916   bs->stop = should_stop_exception (bs->bp_location_at);
11917 }
11918
11919 /* Implement the PRINT_IT method in the breakpoint_ops structure
11920    for all exception catchpoint kinds.  */
11921
11922 static enum print_stop_action
11923 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11924 {
11925   struct ui_out *uiout = current_uiout;
11926   struct breakpoint *b = bs->breakpoint_at;
11927
11928   annotate_catchpoint (b->number);
11929
11930   if (ui_out_is_mi_like_p (uiout))
11931     {
11932       ui_out_field_string (uiout, "reason",
11933                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11934       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11935     }
11936
11937   ui_out_text (uiout,
11938                b->disposition == disp_del ? "\nTemporary catchpoint "
11939                                           : "\nCatchpoint ");
11940   ui_out_field_int (uiout, "bkptno", b->number);
11941   ui_out_text (uiout, ", ");
11942
11943   switch (ex)
11944     {
11945       case ada_catch_exception:
11946       case ada_catch_exception_unhandled:
11947         {
11948           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11949           char exception_name[256];
11950
11951           if (addr != 0)
11952             {
11953               read_memory (addr, (gdb_byte *) exception_name,
11954                            sizeof (exception_name) - 1);
11955               exception_name [sizeof (exception_name) - 1] = '\0';
11956             }
11957           else
11958             {
11959               /* For some reason, we were unable to read the exception
11960                  name.  This could happen if the Runtime was compiled
11961                  without debugging info, for instance.  In that case,
11962                  just replace the exception name by the generic string
11963                  "exception" - it will read as "an exception" in the
11964                  notification we are about to print.  */
11965               memcpy (exception_name, "exception", sizeof ("exception"));
11966             }
11967           /* In the case of unhandled exception breakpoints, we print
11968              the exception name as "unhandled EXCEPTION_NAME", to make
11969              it clearer to the user which kind of catchpoint just got
11970              hit.  We used ui_out_text to make sure that this extra
11971              info does not pollute the exception name in the MI case.  */
11972           if (ex == ada_catch_exception_unhandled)
11973             ui_out_text (uiout, "unhandled ");
11974           ui_out_field_string (uiout, "exception-name", exception_name);
11975         }
11976         break;
11977       case ada_catch_assert:
11978         /* In this case, the name of the exception is not really
11979            important.  Just print "failed assertion" to make it clearer
11980            that his program just hit an assertion-failure catchpoint.
11981            We used ui_out_text because this info does not belong in
11982            the MI output.  */
11983         ui_out_text (uiout, "failed assertion");
11984         break;
11985     }
11986   ui_out_text (uiout, " at ");
11987   ada_find_printable_frame (get_current_frame ());
11988
11989   return PRINT_SRC_AND_LOC;
11990 }
11991
11992 /* Implement the PRINT_ONE method in the breakpoint_ops structure
11993    for all exception catchpoint kinds.  */
11994
11995 static void
11996 print_one_exception (enum ada_exception_catchpoint_kind ex,
11997                      struct breakpoint *b, struct bp_location **last_loc)
11998
11999   struct ui_out *uiout = current_uiout;
12000   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12001   struct value_print_options opts;
12002
12003   get_user_print_options (&opts);
12004   if (opts.addressprint)
12005     {
12006       annotate_field (4);
12007       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
12008     }
12009
12010   annotate_field (5);
12011   *last_loc = b->loc;
12012   switch (ex)
12013     {
12014       case ada_catch_exception:
12015         if (c->excep_string != NULL)
12016           {
12017             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12018
12019             ui_out_field_string (uiout, "what", msg);
12020             xfree (msg);
12021           }
12022         else
12023           ui_out_field_string (uiout, "what", "all Ada exceptions");
12024         
12025         break;
12026
12027       case ada_catch_exception_unhandled:
12028         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12029         break;
12030       
12031       case ada_catch_assert:
12032         ui_out_field_string (uiout, "what", "failed Ada assertions");
12033         break;
12034
12035       default:
12036         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12037         break;
12038     }
12039 }
12040
12041 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12042    for all exception catchpoint kinds.  */
12043
12044 static void
12045 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12046                          struct breakpoint *b)
12047 {
12048   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12049   struct ui_out *uiout = current_uiout;
12050
12051   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12052                                                  : _("Catchpoint "));
12053   ui_out_field_int (uiout, "bkptno", b->number);
12054   ui_out_text (uiout, ": ");
12055
12056   switch (ex)
12057     {
12058       case ada_catch_exception:
12059         if (c->excep_string != NULL)
12060           {
12061             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12062             struct cleanup *old_chain = make_cleanup (xfree, info);
12063
12064             ui_out_text (uiout, info);
12065             do_cleanups (old_chain);
12066           }
12067         else
12068           ui_out_text (uiout, _("all Ada exceptions"));
12069         break;
12070
12071       case ada_catch_exception_unhandled:
12072         ui_out_text (uiout, _("unhandled Ada exceptions"));
12073         break;
12074       
12075       case ada_catch_assert:
12076         ui_out_text (uiout, _("failed Ada assertions"));
12077         break;
12078
12079       default:
12080         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12081         break;
12082     }
12083 }
12084
12085 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12086    for all exception catchpoint kinds.  */
12087
12088 static void
12089 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12090                           struct breakpoint *b, struct ui_file *fp)
12091 {
12092   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12093
12094   switch (ex)
12095     {
12096       case ada_catch_exception:
12097         fprintf_filtered (fp, "catch exception");
12098         if (c->excep_string != NULL)
12099           fprintf_filtered (fp, " %s", c->excep_string);
12100         break;
12101
12102       case ada_catch_exception_unhandled:
12103         fprintf_filtered (fp, "catch exception unhandled");
12104         break;
12105
12106       case ada_catch_assert:
12107         fprintf_filtered (fp, "catch assert");
12108         break;
12109
12110       default:
12111         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12112     }
12113   print_recreate_thread (b, fp);
12114 }
12115
12116 /* Virtual table for "catch exception" breakpoints.  */
12117
12118 static void
12119 dtor_catch_exception (struct breakpoint *b)
12120 {
12121   dtor_exception (ada_catch_exception, b);
12122 }
12123
12124 static struct bp_location *
12125 allocate_location_catch_exception (struct breakpoint *self)
12126 {
12127   return allocate_location_exception (ada_catch_exception, self);
12128 }
12129
12130 static void
12131 re_set_catch_exception (struct breakpoint *b)
12132 {
12133   re_set_exception (ada_catch_exception, b);
12134 }
12135
12136 static void
12137 check_status_catch_exception (bpstat bs)
12138 {
12139   check_status_exception (ada_catch_exception, bs);
12140 }
12141
12142 static enum print_stop_action
12143 print_it_catch_exception (bpstat bs)
12144 {
12145   return print_it_exception (ada_catch_exception, bs);
12146 }
12147
12148 static void
12149 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12150 {
12151   print_one_exception (ada_catch_exception, b, last_loc);
12152 }
12153
12154 static void
12155 print_mention_catch_exception (struct breakpoint *b)
12156 {
12157   print_mention_exception (ada_catch_exception, b);
12158 }
12159
12160 static void
12161 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12162 {
12163   print_recreate_exception (ada_catch_exception, b, fp);
12164 }
12165
12166 static struct breakpoint_ops catch_exception_breakpoint_ops;
12167
12168 /* Virtual table for "catch exception unhandled" breakpoints.  */
12169
12170 static void
12171 dtor_catch_exception_unhandled (struct breakpoint *b)
12172 {
12173   dtor_exception (ada_catch_exception_unhandled, b);
12174 }
12175
12176 static struct bp_location *
12177 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12178 {
12179   return allocate_location_exception (ada_catch_exception_unhandled, self);
12180 }
12181
12182 static void
12183 re_set_catch_exception_unhandled (struct breakpoint *b)
12184 {
12185   re_set_exception (ada_catch_exception_unhandled, b);
12186 }
12187
12188 static void
12189 check_status_catch_exception_unhandled (bpstat bs)
12190 {
12191   check_status_exception (ada_catch_exception_unhandled, bs);
12192 }
12193
12194 static enum print_stop_action
12195 print_it_catch_exception_unhandled (bpstat bs)
12196 {
12197   return print_it_exception (ada_catch_exception_unhandled, bs);
12198 }
12199
12200 static void
12201 print_one_catch_exception_unhandled (struct breakpoint *b,
12202                                      struct bp_location **last_loc)
12203 {
12204   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12205 }
12206
12207 static void
12208 print_mention_catch_exception_unhandled (struct breakpoint *b)
12209 {
12210   print_mention_exception (ada_catch_exception_unhandled, b);
12211 }
12212
12213 static void
12214 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12215                                           struct ui_file *fp)
12216 {
12217   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12218 }
12219
12220 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12221
12222 /* Virtual table for "catch assert" breakpoints.  */
12223
12224 static void
12225 dtor_catch_assert (struct breakpoint *b)
12226 {
12227   dtor_exception (ada_catch_assert, b);
12228 }
12229
12230 static struct bp_location *
12231 allocate_location_catch_assert (struct breakpoint *self)
12232 {
12233   return allocate_location_exception (ada_catch_assert, self);
12234 }
12235
12236 static void
12237 re_set_catch_assert (struct breakpoint *b)
12238 {
12239   re_set_exception (ada_catch_assert, b);
12240 }
12241
12242 static void
12243 check_status_catch_assert (bpstat bs)
12244 {
12245   check_status_exception (ada_catch_assert, bs);
12246 }
12247
12248 static enum print_stop_action
12249 print_it_catch_assert (bpstat bs)
12250 {
12251   return print_it_exception (ada_catch_assert, bs);
12252 }
12253
12254 static void
12255 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12256 {
12257   print_one_exception (ada_catch_assert, b, last_loc);
12258 }
12259
12260 static void
12261 print_mention_catch_assert (struct breakpoint *b)
12262 {
12263   print_mention_exception (ada_catch_assert, b);
12264 }
12265
12266 static void
12267 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12268 {
12269   print_recreate_exception (ada_catch_assert, b, fp);
12270 }
12271
12272 static struct breakpoint_ops catch_assert_breakpoint_ops;
12273
12274 /* Return a newly allocated copy of the first space-separated token
12275    in ARGSP, and then adjust ARGSP to point immediately after that
12276    token.
12277
12278    Return NULL if ARGPS does not contain any more tokens.  */
12279
12280 static char *
12281 ada_get_next_arg (char **argsp)
12282 {
12283   char *args = *argsp;
12284   char *end;
12285   char *result;
12286
12287   args = skip_spaces (args);
12288   if (args[0] == '\0')
12289     return NULL; /* No more arguments.  */
12290   
12291   /* Find the end of the current argument.  */
12292
12293   end = skip_to_space (args);
12294
12295   /* Adjust ARGSP to point to the start of the next argument.  */
12296
12297   *argsp = end;
12298
12299   /* Make a copy of the current argument and return it.  */
12300
12301   result = xmalloc (end - args + 1);
12302   strncpy (result, args, end - args);
12303   result[end - args] = '\0';
12304   
12305   return result;
12306 }
12307
12308 /* Split the arguments specified in a "catch exception" command.  
12309    Set EX to the appropriate catchpoint type.
12310    Set EXCEP_STRING to the name of the specific exception if
12311    specified by the user.
12312    If a condition is found at the end of the arguments, the condition
12313    expression is stored in COND_STRING (memory must be deallocated
12314    after use).  Otherwise COND_STRING is set to NULL.  */
12315
12316 static void
12317 catch_ada_exception_command_split (char *args,
12318                                    enum ada_exception_catchpoint_kind *ex,
12319                                    char **excep_string,
12320                                    char **cond_string)
12321 {
12322   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12323   char *exception_name;
12324   char *cond = NULL;
12325
12326   exception_name = ada_get_next_arg (&args);
12327   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12328     {
12329       /* This is not an exception name; this is the start of a condition
12330          expression for a catchpoint on all exceptions.  So, "un-get"
12331          this token, and set exception_name to NULL.  */
12332       xfree (exception_name);
12333       exception_name = NULL;
12334       args -= 2;
12335     }
12336   make_cleanup (xfree, exception_name);
12337
12338   /* Check to see if we have a condition.  */
12339
12340   args = skip_spaces (args);
12341   if (strncmp (args, "if", 2) == 0
12342       && (isspace (args[2]) || args[2] == '\0'))
12343     {
12344       args += 2;
12345       args = skip_spaces (args);
12346
12347       if (args[0] == '\0')
12348         error (_("Condition missing after `if' keyword"));
12349       cond = xstrdup (args);
12350       make_cleanup (xfree, cond);
12351
12352       args += strlen (args);
12353     }
12354
12355   /* Check that we do not have any more arguments.  Anything else
12356      is unexpected.  */
12357
12358   if (args[0] != '\0')
12359     error (_("Junk at end of expression"));
12360
12361   discard_cleanups (old_chain);
12362
12363   if (exception_name == NULL)
12364     {
12365       /* Catch all exceptions.  */
12366       *ex = ada_catch_exception;
12367       *excep_string = NULL;
12368     }
12369   else if (strcmp (exception_name, "unhandled") == 0)
12370     {
12371       /* Catch unhandled exceptions.  */
12372       *ex = ada_catch_exception_unhandled;
12373       *excep_string = NULL;
12374     }
12375   else
12376     {
12377       /* Catch a specific exception.  */
12378       *ex = ada_catch_exception;
12379       *excep_string = exception_name;
12380     }
12381   *cond_string = cond;
12382 }
12383
12384 /* Return the name of the symbol on which we should break in order to
12385    implement a catchpoint of the EX kind.  */
12386
12387 static const char *
12388 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12389 {
12390   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12391
12392   gdb_assert (data->exception_info != NULL);
12393
12394   switch (ex)
12395     {
12396       case ada_catch_exception:
12397         return (data->exception_info->catch_exception_sym);
12398         break;
12399       case ada_catch_exception_unhandled:
12400         return (data->exception_info->catch_exception_unhandled_sym);
12401         break;
12402       case ada_catch_assert:
12403         return (data->exception_info->catch_assert_sym);
12404         break;
12405       default:
12406         internal_error (__FILE__, __LINE__,
12407                         _("unexpected catchpoint kind (%d)"), ex);
12408     }
12409 }
12410
12411 /* Return the breakpoint ops "virtual table" used for catchpoints
12412    of the EX kind.  */
12413
12414 static const struct breakpoint_ops *
12415 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12416 {
12417   switch (ex)
12418     {
12419       case ada_catch_exception:
12420         return (&catch_exception_breakpoint_ops);
12421         break;
12422       case ada_catch_exception_unhandled:
12423         return (&catch_exception_unhandled_breakpoint_ops);
12424         break;
12425       case ada_catch_assert:
12426         return (&catch_assert_breakpoint_ops);
12427         break;
12428       default:
12429         internal_error (__FILE__, __LINE__,
12430                         _("unexpected catchpoint kind (%d)"), ex);
12431     }
12432 }
12433
12434 /* Return the condition that will be used to match the current exception
12435    being raised with the exception that the user wants to catch.  This
12436    assumes that this condition is used when the inferior just triggered
12437    an exception catchpoint.
12438    
12439    The string returned is a newly allocated string that needs to be
12440    deallocated later.  */
12441
12442 static char *
12443 ada_exception_catchpoint_cond_string (const char *excep_string)
12444 {
12445   int i;
12446
12447   /* The standard exceptions are a special case.  They are defined in
12448      runtime units that have been compiled without debugging info; if
12449      EXCEP_STRING is the not-fully-qualified name of a standard
12450      exception (e.g. "constraint_error") then, during the evaluation
12451      of the condition expression, the symbol lookup on this name would
12452      *not* return this standard exception.  The catchpoint condition
12453      may then be set only on user-defined exceptions which have the
12454      same not-fully-qualified name (e.g. my_package.constraint_error).
12455
12456      To avoid this unexcepted behavior, these standard exceptions are
12457      systematically prefixed by "standard".  This means that "catch
12458      exception constraint_error" is rewritten into "catch exception
12459      standard.constraint_error".
12460
12461      If an exception named contraint_error is defined in another package of
12462      the inferior program, then the only way to specify this exception as a
12463      breakpoint condition is to use its fully-qualified named:
12464      e.g. my_package.constraint_error.  */
12465
12466   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12467     {
12468       if (strcmp (standard_exc [i], excep_string) == 0)
12469         {
12470           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12471                              excep_string);
12472         }
12473     }
12474   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12475 }
12476
12477 /* Return the symtab_and_line that should be used to insert an exception
12478    catchpoint of the TYPE kind.
12479
12480    EXCEP_STRING should contain the name of a specific exception that
12481    the catchpoint should catch, or NULL otherwise.
12482
12483    ADDR_STRING returns the name of the function where the real
12484    breakpoint that implements the catchpoints is set, depending on the
12485    type of catchpoint we need to create.  */
12486
12487 static struct symtab_and_line
12488 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12489                    char **addr_string, const struct breakpoint_ops **ops)
12490 {
12491   const char *sym_name;
12492   struct symbol *sym;
12493
12494   /* First, find out which exception support info to use.  */
12495   ada_exception_support_info_sniffer ();
12496
12497   /* Then lookup the function on which we will break in order to catch
12498      the Ada exceptions requested by the user.  */
12499   sym_name = ada_exception_sym_name (ex);
12500   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12501
12502   /* We can assume that SYM is not NULL at this stage.  If the symbol
12503      did not exist, ada_exception_support_info_sniffer would have
12504      raised an exception.
12505
12506      Also, ada_exception_support_info_sniffer should have already
12507      verified that SYM is a function symbol.  */
12508   gdb_assert (sym != NULL);
12509   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12510
12511   /* Set ADDR_STRING.  */
12512   *addr_string = xstrdup (sym_name);
12513
12514   /* Set OPS.  */
12515   *ops = ada_exception_breakpoint_ops (ex);
12516
12517   return find_function_start_sal (sym, 1);
12518 }
12519
12520 /* Create an Ada exception catchpoint.
12521
12522    EX_KIND is the kind of exception catchpoint to be created.
12523
12524    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12525    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12526    of the exception to which this catchpoint applies.  When not NULL,
12527    the string must be allocated on the heap, and its deallocation
12528    is no longer the responsibility of the caller.
12529
12530    COND_STRING, if not NULL, is the catchpoint condition.  This string
12531    must be allocated on the heap, and its deallocation is no longer
12532    the responsibility of the caller.
12533
12534    TEMPFLAG, if nonzero, means that the underlying breakpoint
12535    should be temporary.
12536
12537    FROM_TTY is the usual argument passed to all commands implementations.  */
12538
12539 void
12540 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12541                                  enum ada_exception_catchpoint_kind ex_kind,
12542                                  char *excep_string,
12543                                  char *cond_string,
12544                                  int tempflag,
12545                                  int disabled,
12546                                  int from_tty)
12547 {
12548   struct ada_catchpoint *c;
12549   char *addr_string = NULL;
12550   const struct breakpoint_ops *ops = NULL;
12551   struct symtab_and_line sal
12552     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12553
12554   c = XNEW (struct ada_catchpoint);
12555   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12556                                  ops, tempflag, disabled, from_tty);
12557   c->excep_string = excep_string;
12558   create_excep_cond_exprs (c);
12559   if (cond_string != NULL)
12560     set_breakpoint_condition (&c->base, cond_string, from_tty);
12561   install_breakpoint (0, &c->base, 1);
12562 }
12563
12564 /* Implement the "catch exception" command.  */
12565
12566 static void
12567 catch_ada_exception_command (char *arg, int from_tty,
12568                              struct cmd_list_element *command)
12569 {
12570   struct gdbarch *gdbarch = get_current_arch ();
12571   int tempflag;
12572   enum ada_exception_catchpoint_kind ex_kind;
12573   char *excep_string = NULL;
12574   char *cond_string = NULL;
12575
12576   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12577
12578   if (!arg)
12579     arg = "";
12580   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12581                                      &cond_string);
12582   create_ada_exception_catchpoint (gdbarch, ex_kind,
12583                                    excep_string, cond_string,
12584                                    tempflag, 1 /* enabled */,
12585                                    from_tty);
12586 }
12587
12588 /* Split the arguments specified in a "catch assert" command.
12589
12590    ARGS contains the command's arguments (or the empty string if
12591    no arguments were passed).
12592
12593    If ARGS contains a condition, set COND_STRING to that condition
12594    (the memory needs to be deallocated after use).  */
12595
12596 static void
12597 catch_ada_assert_command_split (char *args, char **cond_string)
12598 {
12599   args = skip_spaces (args);
12600
12601   /* Check whether a condition was provided.  */
12602   if (strncmp (args, "if", 2) == 0
12603       && (isspace (args[2]) || args[2] == '\0'))
12604     {
12605       args += 2;
12606       args = skip_spaces (args);
12607       if (args[0] == '\0')
12608         error (_("condition missing after `if' keyword"));
12609       *cond_string = xstrdup (args);
12610     }
12611
12612   /* Otherwise, there should be no other argument at the end of
12613      the command.  */
12614   else if (args[0] != '\0')
12615     error (_("Junk at end of arguments."));
12616 }
12617
12618 /* Implement the "catch assert" command.  */
12619
12620 static void
12621 catch_assert_command (char *arg, int from_tty,
12622                       struct cmd_list_element *command)
12623 {
12624   struct gdbarch *gdbarch = get_current_arch ();
12625   int tempflag;
12626   char *cond_string = NULL;
12627
12628   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12629
12630   if (!arg)
12631     arg = "";
12632   catch_ada_assert_command_split (arg, &cond_string);
12633   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12634                                    NULL, cond_string,
12635                                    tempflag, 1 /* enabled */,
12636                                    from_tty);
12637 }
12638
12639 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12640
12641 static int
12642 ada_is_exception_sym (struct symbol *sym)
12643 {
12644   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12645
12646   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12647           && SYMBOL_CLASS (sym) != LOC_BLOCK
12648           && SYMBOL_CLASS (sym) != LOC_CONST
12649           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12650           && type_name != NULL && strcmp (type_name, "exception") == 0);
12651 }
12652
12653 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12654    Ada exception object.  This matches all exceptions except the ones
12655    defined by the Ada language.  */
12656
12657 static int
12658 ada_is_non_standard_exception_sym (struct symbol *sym)
12659 {
12660   int i;
12661
12662   if (!ada_is_exception_sym (sym))
12663     return 0;
12664
12665   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12666     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12667       return 0;  /* A standard exception.  */
12668
12669   /* Numeric_Error is also a standard exception, so exclude it.
12670      See the STANDARD_EXC description for more details as to why
12671      this exception is not listed in that array.  */
12672   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12673     return 0;
12674
12675   return 1;
12676 }
12677
12678 /* A helper function for qsort, comparing two struct ada_exc_info
12679    objects.
12680
12681    The comparison is determined first by exception name, and then
12682    by exception address.  */
12683
12684 static int
12685 compare_ada_exception_info (const void *a, const void *b)
12686 {
12687   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12688   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12689   int result;
12690
12691   result = strcmp (exc_a->name, exc_b->name);
12692   if (result != 0)
12693     return result;
12694
12695   if (exc_a->addr < exc_b->addr)
12696     return -1;
12697   if (exc_a->addr > exc_b->addr)
12698     return 1;
12699
12700   return 0;
12701 }
12702
12703 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12704    routine, but keeping the first SKIP elements untouched.
12705
12706    All duplicates are also removed.  */
12707
12708 static void
12709 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12710                                       int skip)
12711 {
12712   struct ada_exc_info *to_sort
12713     = VEC_address (ada_exc_info, *exceptions) + skip;
12714   int to_sort_len
12715     = VEC_length (ada_exc_info, *exceptions) - skip;
12716   int i, j;
12717
12718   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12719          compare_ada_exception_info);
12720
12721   for (i = 1, j = 1; i < to_sort_len; i++)
12722     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12723       to_sort[j++] = to_sort[i];
12724   to_sort_len = j;
12725   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12726 }
12727
12728 /* A function intended as the "name_matcher" callback in the struct
12729    quick_symbol_functions' expand_symtabs_matching method.
12730
12731    SEARCH_NAME is the symbol's search name.
12732
12733    If USER_DATA is not NULL, it is a pointer to a regext_t object
12734    used to match the symbol (by natural name).  Otherwise, when USER_DATA
12735    is null, no filtering is performed, and all symbols are a positive
12736    match.  */
12737
12738 static int
12739 ada_exc_search_name_matches (const char *search_name, void *user_data)
12740 {
12741   regex_t *preg = user_data;
12742
12743   if (preg == NULL)
12744     return 1;
12745
12746   /* In Ada, the symbol "search name" is a linkage name, whereas
12747      the regular expression used to do the matching refers to
12748      the natural name.  So match against the decoded name.  */
12749   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12750 }
12751
12752 /* Add all exceptions defined by the Ada standard whose name match
12753    a regular expression.
12754
12755    If PREG is not NULL, then this regexp_t object is used to
12756    perform the symbol name matching.  Otherwise, no name-based
12757    filtering is performed.
12758
12759    EXCEPTIONS is a vector of exceptions to which matching exceptions
12760    gets pushed.  */
12761
12762 static void
12763 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12764 {
12765   int i;
12766
12767   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12768     {
12769       if (preg == NULL
12770           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12771         {
12772           struct bound_minimal_symbol msymbol
12773             = ada_lookup_simple_minsym (standard_exc[i]);
12774
12775           if (msymbol.minsym != NULL)
12776             {
12777               struct ada_exc_info info
12778                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12779
12780               VEC_safe_push (ada_exc_info, *exceptions, &info);
12781             }
12782         }
12783     }
12784 }
12785
12786 /* Add all Ada exceptions defined locally and accessible from the given
12787    FRAME.
12788
12789    If PREG is not NULL, then this regexp_t object is used to
12790    perform the symbol name matching.  Otherwise, no name-based
12791    filtering is performed.
12792
12793    EXCEPTIONS is a vector of exceptions to which matching exceptions
12794    gets pushed.  */
12795
12796 static void
12797 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12798                                VEC(ada_exc_info) **exceptions)
12799 {
12800   const struct block *block = get_frame_block (frame, 0);
12801
12802   while (block != 0)
12803     {
12804       struct block_iterator iter;
12805       struct symbol *sym;
12806
12807       ALL_BLOCK_SYMBOLS (block, iter, sym)
12808         {
12809           switch (SYMBOL_CLASS (sym))
12810             {
12811             case LOC_TYPEDEF:
12812             case LOC_BLOCK:
12813             case LOC_CONST:
12814               break;
12815             default:
12816               if (ada_is_exception_sym (sym))
12817                 {
12818                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12819                                               SYMBOL_VALUE_ADDRESS (sym)};
12820
12821                   VEC_safe_push (ada_exc_info, *exceptions, &info);
12822                 }
12823             }
12824         }
12825       if (BLOCK_FUNCTION (block) != NULL)
12826         break;
12827       block = BLOCK_SUPERBLOCK (block);
12828     }
12829 }
12830
12831 /* Add all exceptions defined globally whose name name match
12832    a regular expression, excluding standard exceptions.
12833
12834    The reason we exclude standard exceptions is that they need
12835    to be handled separately: Standard exceptions are defined inside
12836    a runtime unit which is normally not compiled with debugging info,
12837    and thus usually do not show up in our symbol search.  However,
12838    if the unit was in fact built with debugging info, we need to
12839    exclude them because they would duplicate the entry we found
12840    during the special loop that specifically searches for those
12841    standard exceptions.
12842
12843    If PREG is not NULL, then this regexp_t object is used to
12844    perform the symbol name matching.  Otherwise, no name-based
12845    filtering is performed.
12846
12847    EXCEPTIONS is a vector of exceptions to which matching exceptions
12848    gets pushed.  */
12849
12850 static void
12851 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12852 {
12853   struct objfile *objfile;
12854   struct symtab *s;
12855
12856   expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12857                            VARIABLES_DOMAIN, preg);
12858
12859   ALL_PRIMARY_SYMTABS (objfile, s)
12860     {
12861       const struct blockvector *bv = SYMTAB_BLOCKVECTOR (s);
12862       int i;
12863
12864       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12865         {
12866           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12867           struct block_iterator iter;
12868           struct symbol *sym;
12869
12870           ALL_BLOCK_SYMBOLS (b, iter, sym)
12871             if (ada_is_non_standard_exception_sym (sym)
12872                 && (preg == NULL
12873                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12874                                 0, NULL, 0) == 0))
12875               {
12876                 struct ada_exc_info info
12877                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12878
12879                 VEC_safe_push (ada_exc_info, *exceptions, &info);
12880               }
12881         }
12882     }
12883 }
12884
12885 /* Implements ada_exceptions_list with the regular expression passed
12886    as a regex_t, rather than a string.
12887
12888    If not NULL, PREG is used to filter out exceptions whose names
12889    do not match.  Otherwise, all exceptions are listed.  */
12890
12891 static VEC(ada_exc_info) *
12892 ada_exceptions_list_1 (regex_t *preg)
12893 {
12894   VEC(ada_exc_info) *result = NULL;
12895   struct cleanup *old_chain
12896     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12897   int prev_len;
12898
12899   /* First, list the known standard exceptions.  These exceptions
12900      need to be handled separately, as they are usually defined in
12901      runtime units that have been compiled without debugging info.  */
12902
12903   ada_add_standard_exceptions (preg, &result);
12904
12905   /* Next, find all exceptions whose scope is local and accessible
12906      from the currently selected frame.  */
12907
12908   if (has_stack_frames ())
12909     {
12910       prev_len = VEC_length (ada_exc_info, result);
12911       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12912                                      &result);
12913       if (VEC_length (ada_exc_info, result) > prev_len)
12914         sort_remove_dups_ada_exceptions_list (&result, prev_len);
12915     }
12916
12917   /* Add all exceptions whose scope is global.  */
12918
12919   prev_len = VEC_length (ada_exc_info, result);
12920   ada_add_global_exceptions (preg, &result);
12921   if (VEC_length (ada_exc_info, result) > prev_len)
12922     sort_remove_dups_ada_exceptions_list (&result, prev_len);
12923
12924   discard_cleanups (old_chain);
12925   return result;
12926 }
12927
12928 /* Return a vector of ada_exc_info.
12929
12930    If REGEXP is NULL, all exceptions are included in the result.
12931    Otherwise, it should contain a valid regular expression,
12932    and only the exceptions whose names match that regular expression
12933    are included in the result.
12934
12935    The exceptions are sorted in the following order:
12936      - Standard exceptions (defined by the Ada language), in
12937        alphabetical order;
12938      - Exceptions only visible from the current frame, in
12939        alphabetical order;
12940      - Exceptions whose scope is global, in alphabetical order.  */
12941
12942 VEC(ada_exc_info) *
12943 ada_exceptions_list (const char *regexp)
12944 {
12945   VEC(ada_exc_info) *result = NULL;
12946   struct cleanup *old_chain = NULL;
12947   regex_t reg;
12948
12949   if (regexp != NULL)
12950     old_chain = compile_rx_or_error (&reg, regexp,
12951                                      _("invalid regular expression"));
12952
12953   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12954
12955   if (old_chain != NULL)
12956     do_cleanups (old_chain);
12957   return result;
12958 }
12959
12960 /* Implement the "info exceptions" command.  */
12961
12962 static void
12963 info_exceptions_command (char *regexp, int from_tty)
12964 {
12965   VEC(ada_exc_info) *exceptions;
12966   struct cleanup *cleanup;
12967   struct gdbarch *gdbarch = get_current_arch ();
12968   int ix;
12969   struct ada_exc_info *info;
12970
12971   exceptions = ada_exceptions_list (regexp);
12972   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12973
12974   if (regexp != NULL)
12975     printf_filtered
12976       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12977   else
12978     printf_filtered (_("All defined Ada exceptions:\n"));
12979
12980   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12981     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12982
12983   do_cleanups (cleanup);
12984 }
12985
12986                                 /* Operators */
12987 /* Information about operators given special treatment in functions
12988    below.  */
12989 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
12990
12991 #define ADA_OPERATORS \
12992     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12993     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12994     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12995     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12996     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12997     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12998     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12999     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13000     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13001     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13002     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13003     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13004     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13005     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13006     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
13007     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13008     OP_DEFN (OP_OTHERS, 1, 1, 0) \
13009     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13010     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
13011
13012 static void
13013 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13014                      int *argsp)
13015 {
13016   switch (exp->elts[pc - 1].opcode)
13017     {
13018     default:
13019       operator_length_standard (exp, pc, oplenp, argsp);
13020       break;
13021
13022 #define OP_DEFN(op, len, args, binop) \
13023     case op: *oplenp = len; *argsp = args; break;
13024       ADA_OPERATORS;
13025 #undef OP_DEFN
13026
13027     case OP_AGGREGATE:
13028       *oplenp = 3;
13029       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13030       break;
13031
13032     case OP_CHOICES:
13033       *oplenp = 3;
13034       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13035       break;
13036     }
13037 }
13038
13039 /* Implementation of the exp_descriptor method operator_check.  */
13040
13041 static int
13042 ada_operator_check (struct expression *exp, int pos,
13043                     int (*objfile_func) (struct objfile *objfile, void *data),
13044                     void *data)
13045 {
13046   const union exp_element *const elts = exp->elts;
13047   struct type *type = NULL;
13048
13049   switch (elts[pos].opcode)
13050     {
13051       case UNOP_IN_RANGE:
13052       case UNOP_QUAL:
13053         type = elts[pos + 1].type;
13054         break;
13055
13056       default:
13057         return operator_check_standard (exp, pos, objfile_func, data);
13058     }
13059
13060   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13061
13062   if (type && TYPE_OBJFILE (type)
13063       && (*objfile_func) (TYPE_OBJFILE (type), data))
13064     return 1;
13065
13066   return 0;
13067 }
13068
13069 static char *
13070 ada_op_name (enum exp_opcode opcode)
13071 {
13072   switch (opcode)
13073     {
13074     default:
13075       return op_name_standard (opcode);
13076
13077 #define OP_DEFN(op, len, args, binop) case op: return #op;
13078       ADA_OPERATORS;
13079 #undef OP_DEFN
13080
13081     case OP_AGGREGATE:
13082       return "OP_AGGREGATE";
13083     case OP_CHOICES:
13084       return "OP_CHOICES";
13085     case OP_NAME:
13086       return "OP_NAME";
13087     }
13088 }
13089
13090 /* As for operator_length, but assumes PC is pointing at the first
13091    element of the operator, and gives meaningful results only for the 
13092    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13093
13094 static void
13095 ada_forward_operator_length (struct expression *exp, int pc,
13096                              int *oplenp, int *argsp)
13097 {
13098   switch (exp->elts[pc].opcode)
13099     {
13100     default:
13101       *oplenp = *argsp = 0;
13102       break;
13103
13104 #define OP_DEFN(op, len, args, binop) \
13105     case op: *oplenp = len; *argsp = args; break;
13106       ADA_OPERATORS;
13107 #undef OP_DEFN
13108
13109     case OP_AGGREGATE:
13110       *oplenp = 3;
13111       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13112       break;
13113
13114     case OP_CHOICES:
13115       *oplenp = 3;
13116       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13117       break;
13118
13119     case OP_STRING:
13120     case OP_NAME:
13121       {
13122         int len = longest_to_int (exp->elts[pc + 1].longconst);
13123
13124         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13125         *argsp = 0;
13126         break;
13127       }
13128     }
13129 }
13130
13131 static int
13132 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13133 {
13134   enum exp_opcode op = exp->elts[elt].opcode;
13135   int oplen, nargs;
13136   int pc = elt;
13137   int i;
13138
13139   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13140
13141   switch (op)
13142     {
13143       /* Ada attributes ('Foo).  */
13144     case OP_ATR_FIRST:
13145     case OP_ATR_LAST:
13146     case OP_ATR_LENGTH:
13147     case OP_ATR_IMAGE:
13148     case OP_ATR_MAX:
13149     case OP_ATR_MIN:
13150     case OP_ATR_MODULUS:
13151     case OP_ATR_POS:
13152     case OP_ATR_SIZE:
13153     case OP_ATR_TAG:
13154     case OP_ATR_VAL:
13155       break;
13156
13157     case UNOP_IN_RANGE:
13158     case UNOP_QUAL:
13159       /* XXX: gdb_sprint_host_address, type_sprint */
13160       fprintf_filtered (stream, _("Type @"));
13161       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13162       fprintf_filtered (stream, " (");
13163       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13164       fprintf_filtered (stream, ")");
13165       break;
13166     case BINOP_IN_BOUNDS:
13167       fprintf_filtered (stream, " (%d)",
13168                         longest_to_int (exp->elts[pc + 2].longconst));
13169       break;
13170     case TERNOP_IN_RANGE:
13171       break;
13172
13173     case OP_AGGREGATE:
13174     case OP_OTHERS:
13175     case OP_DISCRETE_RANGE:
13176     case OP_POSITIONAL:
13177     case OP_CHOICES:
13178       break;
13179
13180     case OP_NAME:
13181     case OP_STRING:
13182       {
13183         char *name = &exp->elts[elt + 2].string;
13184         int len = longest_to_int (exp->elts[elt + 1].longconst);
13185
13186         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13187         break;
13188       }
13189
13190     default:
13191       return dump_subexp_body_standard (exp, stream, elt);
13192     }
13193
13194   elt += oplen;
13195   for (i = 0; i < nargs; i += 1)
13196     elt = dump_subexp (exp, stream, elt);
13197
13198   return elt;
13199 }
13200
13201 /* The Ada extension of print_subexp (q.v.).  */
13202
13203 static void
13204 ada_print_subexp (struct expression *exp, int *pos,
13205                   struct ui_file *stream, enum precedence prec)
13206 {
13207   int oplen, nargs, i;
13208   int pc = *pos;
13209   enum exp_opcode op = exp->elts[pc].opcode;
13210
13211   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13212
13213   *pos += oplen;
13214   switch (op)
13215     {
13216     default:
13217       *pos -= oplen;
13218       print_subexp_standard (exp, pos, stream, prec);
13219       return;
13220
13221     case OP_VAR_VALUE:
13222       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13223       return;
13224
13225     case BINOP_IN_BOUNDS:
13226       /* XXX: sprint_subexp */
13227       print_subexp (exp, pos, stream, PREC_SUFFIX);
13228       fputs_filtered (" in ", stream);
13229       print_subexp (exp, pos, stream, PREC_SUFFIX);
13230       fputs_filtered ("'range", stream);
13231       if (exp->elts[pc + 1].longconst > 1)
13232         fprintf_filtered (stream, "(%ld)",
13233                           (long) exp->elts[pc + 1].longconst);
13234       return;
13235
13236     case TERNOP_IN_RANGE:
13237       if (prec >= PREC_EQUAL)
13238         fputs_filtered ("(", stream);
13239       /* XXX: sprint_subexp */
13240       print_subexp (exp, pos, stream, PREC_SUFFIX);
13241       fputs_filtered (" in ", stream);
13242       print_subexp (exp, pos, stream, PREC_EQUAL);
13243       fputs_filtered (" .. ", stream);
13244       print_subexp (exp, pos, stream, PREC_EQUAL);
13245       if (prec >= PREC_EQUAL)
13246         fputs_filtered (")", stream);
13247       return;
13248
13249     case OP_ATR_FIRST:
13250     case OP_ATR_LAST:
13251     case OP_ATR_LENGTH:
13252     case OP_ATR_IMAGE:
13253     case OP_ATR_MAX:
13254     case OP_ATR_MIN:
13255     case OP_ATR_MODULUS:
13256     case OP_ATR_POS:
13257     case OP_ATR_SIZE:
13258     case OP_ATR_TAG:
13259     case OP_ATR_VAL:
13260       if (exp->elts[*pos].opcode == OP_TYPE)
13261         {
13262           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13263             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13264                            &type_print_raw_options);
13265           *pos += 3;
13266         }
13267       else
13268         print_subexp (exp, pos, stream, PREC_SUFFIX);
13269       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13270       if (nargs > 1)
13271         {
13272           int tem;
13273
13274           for (tem = 1; tem < nargs; tem += 1)
13275             {
13276               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13277               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13278             }
13279           fputs_filtered (")", stream);
13280         }
13281       return;
13282
13283     case UNOP_QUAL:
13284       type_print (exp->elts[pc + 1].type, "", stream, 0);
13285       fputs_filtered ("'(", stream);
13286       print_subexp (exp, pos, stream, PREC_PREFIX);
13287       fputs_filtered (")", stream);
13288       return;
13289
13290     case UNOP_IN_RANGE:
13291       /* XXX: sprint_subexp */
13292       print_subexp (exp, pos, stream, PREC_SUFFIX);
13293       fputs_filtered (" in ", stream);
13294       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13295                      &type_print_raw_options);
13296       return;
13297
13298     case OP_DISCRETE_RANGE:
13299       print_subexp (exp, pos, stream, PREC_SUFFIX);
13300       fputs_filtered ("..", stream);
13301       print_subexp (exp, pos, stream, PREC_SUFFIX);
13302       return;
13303
13304     case OP_OTHERS:
13305       fputs_filtered ("others => ", stream);
13306       print_subexp (exp, pos, stream, PREC_SUFFIX);
13307       return;
13308
13309     case OP_CHOICES:
13310       for (i = 0; i < nargs-1; i += 1)
13311         {
13312           if (i > 0)
13313             fputs_filtered ("|", stream);
13314           print_subexp (exp, pos, stream, PREC_SUFFIX);
13315         }
13316       fputs_filtered (" => ", stream);
13317       print_subexp (exp, pos, stream, PREC_SUFFIX);
13318       return;
13319       
13320     case OP_POSITIONAL:
13321       print_subexp (exp, pos, stream, PREC_SUFFIX);
13322       return;
13323
13324     case OP_AGGREGATE:
13325       fputs_filtered ("(", stream);
13326       for (i = 0; i < nargs; i += 1)
13327         {
13328           if (i > 0)
13329             fputs_filtered (", ", stream);
13330           print_subexp (exp, pos, stream, PREC_SUFFIX);
13331         }
13332       fputs_filtered (")", stream);
13333       return;
13334     }
13335 }
13336
13337 /* Table mapping opcodes into strings for printing operators
13338    and precedences of the operators.  */
13339
13340 static const struct op_print ada_op_print_tab[] = {
13341   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13342   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13343   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13344   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13345   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13346   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13347   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13348   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13349   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13350   {">=", BINOP_GEQ, PREC_ORDER, 0},
13351   {">", BINOP_GTR, PREC_ORDER, 0},
13352   {"<", BINOP_LESS, PREC_ORDER, 0},
13353   {">>", BINOP_RSH, PREC_SHIFT, 0},
13354   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13355   {"+", BINOP_ADD, PREC_ADD, 0},
13356   {"-", BINOP_SUB, PREC_ADD, 0},
13357   {"&", BINOP_CONCAT, PREC_ADD, 0},
13358   {"*", BINOP_MUL, PREC_MUL, 0},
13359   {"/", BINOP_DIV, PREC_MUL, 0},
13360   {"rem", BINOP_REM, PREC_MUL, 0},
13361   {"mod", BINOP_MOD, PREC_MUL, 0},
13362   {"**", BINOP_EXP, PREC_REPEAT, 0},
13363   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13364   {"-", UNOP_NEG, PREC_PREFIX, 0},
13365   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13366   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13367   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13368   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13369   {".all", UNOP_IND, PREC_SUFFIX, 1},
13370   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13371   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13372   {NULL, 0, 0, 0}
13373 };
13374 \f
13375 enum ada_primitive_types {
13376   ada_primitive_type_int,
13377   ada_primitive_type_long,
13378   ada_primitive_type_short,
13379   ada_primitive_type_char,
13380   ada_primitive_type_float,
13381   ada_primitive_type_double,
13382   ada_primitive_type_void,
13383   ada_primitive_type_long_long,
13384   ada_primitive_type_long_double,
13385   ada_primitive_type_natural,
13386   ada_primitive_type_positive,
13387   ada_primitive_type_system_address,
13388   nr_ada_primitive_types
13389 };
13390
13391 static void
13392 ada_language_arch_info (struct gdbarch *gdbarch,
13393                         struct language_arch_info *lai)
13394 {
13395   const struct builtin_type *builtin = builtin_type (gdbarch);
13396
13397   lai->primitive_type_vector
13398     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13399                               struct type *);
13400
13401   lai->primitive_type_vector [ada_primitive_type_int]
13402     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13403                          0, "integer");
13404   lai->primitive_type_vector [ada_primitive_type_long]
13405     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13406                          0, "long_integer");
13407   lai->primitive_type_vector [ada_primitive_type_short]
13408     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13409                          0, "short_integer");
13410   lai->string_char_type
13411     = lai->primitive_type_vector [ada_primitive_type_char]
13412     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13413   lai->primitive_type_vector [ada_primitive_type_float]
13414     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13415                        "float", NULL);
13416   lai->primitive_type_vector [ada_primitive_type_double]
13417     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13418                        "long_float", NULL);
13419   lai->primitive_type_vector [ada_primitive_type_long_long]
13420     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13421                          0, "long_long_integer");
13422   lai->primitive_type_vector [ada_primitive_type_long_double]
13423     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13424                        "long_long_float", NULL);
13425   lai->primitive_type_vector [ada_primitive_type_natural]
13426     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13427                          0, "natural");
13428   lai->primitive_type_vector [ada_primitive_type_positive]
13429     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13430                          0, "positive");
13431   lai->primitive_type_vector [ada_primitive_type_void]
13432     = builtin->builtin_void;
13433
13434   lai->primitive_type_vector [ada_primitive_type_system_address]
13435     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13436   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13437     = "system__address";
13438
13439   lai->bool_type_symbol = NULL;
13440   lai->bool_type_default = builtin->builtin_bool;
13441 }
13442 \f
13443                                 /* Language vector */
13444
13445 /* Not really used, but needed in the ada_language_defn.  */
13446
13447 static void
13448 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13449 {
13450   ada_emit_char (c, type, stream, quoter, 1);
13451 }
13452
13453 static int
13454 parse (struct parser_state *ps)
13455 {
13456   warnings_issued = 0;
13457   return ada_parse (ps);
13458 }
13459
13460 static const struct exp_descriptor ada_exp_descriptor = {
13461   ada_print_subexp,
13462   ada_operator_length,
13463   ada_operator_check,
13464   ada_op_name,
13465   ada_dump_subexp_body,
13466   ada_evaluate_subexp
13467 };
13468
13469 /* Implement the "la_get_symbol_name_cmp" language_defn method
13470    for Ada.  */
13471
13472 static symbol_name_cmp_ftype
13473 ada_get_symbol_name_cmp (const char *lookup_name)
13474 {
13475   if (should_use_wild_match (lookup_name))
13476     return wild_match;
13477   else
13478     return compare_names;
13479 }
13480
13481 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13482
13483 static struct value *
13484 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13485 {
13486   const struct block *frame_block = NULL;
13487   struct symbol *renaming_sym = NULL;
13488
13489   /* The only case where default_read_var_value is not sufficient
13490      is when VAR is a renaming...  */
13491   if (frame)
13492     frame_block = get_frame_block (frame, NULL);
13493   if (frame_block)
13494     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13495   if (renaming_sym != NULL)
13496     return ada_read_renaming_var_value (renaming_sym, frame_block);
13497
13498   /* This is a typical case where we expect the default_read_var_value
13499      function to work.  */
13500   return default_read_var_value (var, frame);
13501 }
13502
13503 const struct language_defn ada_language_defn = {
13504   "ada",                        /* Language name */
13505   "Ada",
13506   language_ada,
13507   range_check_off,
13508   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13509                                    that's not quite what this means.  */
13510   array_row_major,
13511   macro_expansion_no,
13512   &ada_exp_descriptor,
13513   parse,
13514   ada_error,
13515   resolve,
13516   ada_printchar,                /* Print a character constant */
13517   ada_printstr,                 /* Function to print string constant */
13518   emit_char,                    /* Function to print single char (not used) */
13519   ada_print_type,               /* Print a type using appropriate syntax */
13520   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13521   ada_val_print,                /* Print a value using appropriate syntax */
13522   ada_value_print,              /* Print a top-level value */
13523   ada_read_var_value,           /* la_read_var_value */
13524   NULL,                         /* Language specific skip_trampoline */
13525   NULL,                         /* name_of_this */
13526   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13527   basic_lookup_transparent_type,        /* lookup_transparent_type */
13528   ada_la_decode,                /* Language specific symbol demangler */
13529   NULL,                         /* Language specific
13530                                    class_name_from_physname */
13531   ada_op_print_tab,             /* expression operators for printing */
13532   0,                            /* c-style arrays */
13533   1,                            /* String lower bound */
13534   ada_get_gdb_completer_word_break_characters,
13535   ada_make_symbol_completion_list,
13536   ada_language_arch_info,
13537   ada_print_array_index,
13538   default_pass_by_reference,
13539   c_get_string,
13540   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
13541   ada_iterate_over_symbols,
13542   &ada_varobj_ops,
13543   LANG_MAGIC
13544 };
13545
13546 /* Provide a prototype to silence -Wmissing-prototypes.  */
13547 extern initialize_file_ftype _initialize_ada_language;
13548
13549 /* Command-list for the "set/show ada" prefix command.  */
13550 static struct cmd_list_element *set_ada_list;
13551 static struct cmd_list_element *show_ada_list;
13552
13553 /* Implement the "set ada" prefix command.  */
13554
13555 static void
13556 set_ada_command (char *arg, int from_tty)
13557 {
13558   printf_unfiltered (_(\
13559 "\"set ada\" must be followed by the name of a setting.\n"));
13560   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
13561 }
13562
13563 /* Implement the "show ada" prefix command.  */
13564
13565 static void
13566 show_ada_command (char *args, int from_tty)
13567 {
13568   cmd_show_list (show_ada_list, from_tty, "");
13569 }
13570
13571 static void
13572 initialize_ada_catchpoint_ops (void)
13573 {
13574   struct breakpoint_ops *ops;
13575
13576   initialize_breakpoint_ops ();
13577
13578   ops = &catch_exception_breakpoint_ops;
13579   *ops = bkpt_breakpoint_ops;
13580   ops->dtor = dtor_catch_exception;
13581   ops->allocate_location = allocate_location_catch_exception;
13582   ops->re_set = re_set_catch_exception;
13583   ops->check_status = check_status_catch_exception;
13584   ops->print_it = print_it_catch_exception;
13585   ops->print_one = print_one_catch_exception;
13586   ops->print_mention = print_mention_catch_exception;
13587   ops->print_recreate = print_recreate_catch_exception;
13588
13589   ops = &catch_exception_unhandled_breakpoint_ops;
13590   *ops = bkpt_breakpoint_ops;
13591   ops->dtor = dtor_catch_exception_unhandled;
13592   ops->allocate_location = allocate_location_catch_exception_unhandled;
13593   ops->re_set = re_set_catch_exception_unhandled;
13594   ops->check_status = check_status_catch_exception_unhandled;
13595   ops->print_it = print_it_catch_exception_unhandled;
13596   ops->print_one = print_one_catch_exception_unhandled;
13597   ops->print_mention = print_mention_catch_exception_unhandled;
13598   ops->print_recreate = print_recreate_catch_exception_unhandled;
13599
13600   ops = &catch_assert_breakpoint_ops;
13601   *ops = bkpt_breakpoint_ops;
13602   ops->dtor = dtor_catch_assert;
13603   ops->allocate_location = allocate_location_catch_assert;
13604   ops->re_set = re_set_catch_assert;
13605   ops->check_status = check_status_catch_assert;
13606   ops->print_it = print_it_catch_assert;
13607   ops->print_one = print_one_catch_assert;
13608   ops->print_mention = print_mention_catch_assert;
13609   ops->print_recreate = print_recreate_catch_assert;
13610 }
13611
13612 /* This module's 'new_objfile' observer.  */
13613
13614 static void
13615 ada_new_objfile_observer (struct objfile *objfile)
13616 {
13617   ada_clear_symbol_cache ();
13618 }
13619
13620 /* This module's 'free_objfile' observer.  */
13621
13622 static void
13623 ada_free_objfile_observer (struct objfile *objfile)
13624 {
13625   ada_clear_symbol_cache ();
13626 }
13627
13628 void
13629 _initialize_ada_language (void)
13630 {
13631   add_language (&ada_language_defn);
13632
13633   initialize_ada_catchpoint_ops ();
13634
13635   add_prefix_cmd ("ada", no_class, set_ada_command,
13636                   _("Prefix command for changing Ada-specfic settings"),
13637                   &set_ada_list, "set ada ", 0, &setlist);
13638
13639   add_prefix_cmd ("ada", no_class, show_ada_command,
13640                   _("Generic command for showing Ada-specific settings."),
13641                   &show_ada_list, "show ada ", 0, &showlist);
13642
13643   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13644                            &trust_pad_over_xvs, _("\
13645 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13646 Show whether an optimization trusting PAD types over XVS types is activated"),
13647                            _("\
13648 This is related to the encoding used by the GNAT compiler.  The debugger\n\
13649 should normally trust the contents of PAD types, but certain older versions\n\
13650 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13651 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
13652 work around this bug.  It is always safe to turn this option \"off\", but\n\
13653 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13654 this option to \"off\" unless necessary."),
13655                             NULL, NULL, &set_ada_list, &show_ada_list);
13656
13657   add_catch_command ("exception", _("\
13658 Catch Ada exceptions, when raised.\n\
13659 With an argument, catch only exceptions with the given name."),
13660                      catch_ada_exception_command,
13661                      NULL,
13662                      CATCH_PERMANENT,
13663                      CATCH_TEMPORARY);
13664   add_catch_command ("assert", _("\
13665 Catch failed Ada assertions, when raised.\n\
13666 With an argument, catch only exceptions with the given name."),
13667                      catch_assert_command,
13668                      NULL,
13669                      CATCH_PERMANENT,
13670                      CATCH_TEMPORARY);
13671
13672   varsize_limit = 65536;
13673
13674   add_info ("exceptions", info_exceptions_command,
13675             _("\
13676 List all Ada exception names.\n\
13677 If a regular expression is passed as an argument, only those matching\n\
13678 the regular expression are listed."));
13679
13680   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13681                   _("Set Ada maintenance-related variables."),
13682                   &maint_set_ada_cmdlist, "maintenance set ada ",
13683                   0/*allow-unknown*/, &maintenance_set_cmdlist);
13684
13685   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13686                   _("Show Ada maintenance-related variables"),
13687                   &maint_show_ada_cmdlist, "maintenance show ada ",
13688                   0/*allow-unknown*/, &maintenance_show_cmdlist);
13689
13690   add_setshow_boolean_cmd
13691     ("ignore-descriptive-types", class_maintenance,
13692      &ada_ignore_descriptive_types_p,
13693      _("Set whether descriptive types generated by GNAT should be ignored."),
13694      _("Show whether descriptive types generated by GNAT should be ignored."),
13695      _("\
13696 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13697 DWARF attribute."),
13698      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13699
13700   obstack_init (&symbol_list_obstack);
13701
13702   decoded_names_store = htab_create_alloc
13703     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13704      NULL, xcalloc, xfree);
13705
13706   /* The ada-lang observers.  */
13707   observer_attach_new_objfile (ada_new_objfile_observer);
13708   observer_attach_free_objfile (ada_free_objfile_observer);
13709   observer_attach_inferior_exit (ada_inferior_exit);
13710
13711   /* Setup various context-specific data.  */
13712   ada_inferior_data
13713     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13714   ada_pspace_data_handle
13715     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
13716 }