Replace copyreloc-main.c with copyreloc-main.S
[platform/upstream/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 static struct type *
2152 constrained_packed_array_type (struct type *type, long *elt_bits)
2153 {
2154   struct type *new_elt_type;
2155   struct type *new_type;
2156   struct type *index_type_desc;
2157   struct type *index_type;
2158   LONGEST low_bound, high_bound;
2159
2160   type = ada_check_typedef (type);
2161   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2162     return type;
2163
2164   index_type_desc = ada_find_parallel_type (type, "___XA");
2165   if (index_type_desc)
2166     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2167                                       NULL);
2168   else
2169     index_type = TYPE_INDEX_TYPE (type);
2170
2171   new_type = alloc_type_copy (type);
2172   new_elt_type =
2173     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2174                                    elt_bits);
2175   create_array_type (new_type, new_elt_type, index_type);
2176   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2177   TYPE_NAME (new_type) = ada_type_name (type);
2178
2179   if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2180     low_bound = high_bound = 0;
2181   if (high_bound < low_bound)
2182     *elt_bits = TYPE_LENGTH (new_type) = 0;
2183   else
2184     {
2185       *elt_bits *= (high_bound - low_bound + 1);
2186       TYPE_LENGTH (new_type) =
2187         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2188     }
2189
2190   TYPE_FIXED_INSTANCE (new_type) = 1;
2191   return new_type;
2192 }
2193
2194 /* The array type encoded by TYPE, where
2195    ada_is_constrained_packed_array_type (TYPE).  */
2196
2197 static struct type *
2198 decode_constrained_packed_array_type (struct type *type)
2199 {
2200   const char *raw_name = ada_type_name (ada_check_typedef (type));
2201   char *name;
2202   const char *tail;
2203   struct type *shadow_type;
2204   long bits;
2205
2206   if (!raw_name)
2207     raw_name = ada_type_name (desc_base_type (type));
2208
2209   if (!raw_name)
2210     return NULL;
2211
2212   name = (char *) alloca (strlen (raw_name) + 1);
2213   tail = strstr (raw_name, "___XP");
2214   type = desc_base_type (type);
2215
2216   memcpy (name, raw_name, tail - raw_name);
2217   name[tail - raw_name] = '\000';
2218
2219   shadow_type = ada_find_parallel_type_with_name (type, name);
2220
2221   if (shadow_type == NULL)
2222     {
2223       lim_warning (_("could not find bounds information on packed array"));
2224       return NULL;
2225     }
2226   CHECK_TYPEDEF (shadow_type);
2227
2228   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2229     {
2230       lim_warning (_("could not understand bounds "
2231                      "information on packed array"));
2232       return NULL;
2233     }
2234
2235   bits = decode_packed_array_bitsize (type);
2236   return constrained_packed_array_type (shadow_type, &bits);
2237 }
2238
2239 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2240    array, returns a simple array that denotes that array.  Its type is a
2241    standard GDB array type except that the BITSIZEs of the array
2242    target types are set to the number of bits in each element, and the
2243    type length is set appropriately.  */
2244
2245 static struct value *
2246 decode_constrained_packed_array (struct value *arr)
2247 {
2248   struct type *type;
2249
2250   /* If our value is a pointer, then dereference it. Likewise if
2251      the value is a reference.  Make sure that this operation does not
2252      cause the target type to be fixed, as this would indirectly cause
2253      this array to be decoded.  The rest of the routine assumes that
2254      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2255      and "value_ind" routines to perform the dereferencing, as opposed
2256      to using "ada_coerce_ref" or "ada_value_ind".  */
2257   arr = coerce_ref (arr);
2258   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2259     arr = value_ind (arr);
2260
2261   type = decode_constrained_packed_array_type (value_type (arr));
2262   if (type == NULL)
2263     {
2264       error (_("can't unpack array"));
2265       return NULL;
2266     }
2267
2268   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2269       && ada_is_modular_type (value_type (arr)))
2270     {
2271        /* This is a (right-justified) modular type representing a packed
2272          array with no wrapper.  In order to interpret the value through
2273          the (left-justified) packed array type we just built, we must
2274          first left-justify it.  */
2275       int bit_size, bit_pos;
2276       ULONGEST mod;
2277
2278       mod = ada_modulus (value_type (arr)) - 1;
2279       bit_size = 0;
2280       while (mod > 0)
2281         {
2282           bit_size += 1;
2283           mod >>= 1;
2284         }
2285       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2286       arr = ada_value_primitive_packed_val (arr, NULL,
2287                                             bit_pos / HOST_CHAR_BIT,
2288                                             bit_pos % HOST_CHAR_BIT,
2289                                             bit_size,
2290                                             type);
2291     }
2292
2293   return coerce_unspec_val_to_type (arr, type);
2294 }
2295
2296
2297 /* The value of the element of packed array ARR at the ARITY indices
2298    given in IND.   ARR must be a simple array.  */
2299
2300 static struct value *
2301 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2302 {
2303   int i;
2304   int bits, elt_off, bit_off;
2305   long elt_total_bit_offset;
2306   struct type *elt_type;
2307   struct value *v;
2308
2309   bits = 0;
2310   elt_total_bit_offset = 0;
2311   elt_type = ada_check_typedef (value_type (arr));
2312   for (i = 0; i < arity; i += 1)
2313     {
2314       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2315           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2316         error
2317           (_("attempt to do packed indexing of "
2318              "something other than a packed array"));
2319       else
2320         {
2321           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2322           LONGEST lowerbound, upperbound;
2323           LONGEST idx;
2324
2325           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2326             {
2327               lim_warning (_("don't know bounds of array"));
2328               lowerbound = upperbound = 0;
2329             }
2330
2331           idx = pos_atr (ind[i]);
2332           if (idx < lowerbound || idx > upperbound)
2333             lim_warning (_("packed array index %ld out of bounds"),
2334                          (long) idx);
2335           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2336           elt_total_bit_offset += (idx - lowerbound) * bits;
2337           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2338         }
2339     }
2340   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2341   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2342
2343   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2344                                       bits, elt_type);
2345   return v;
2346 }
2347
2348 /* Non-zero iff TYPE includes negative integer values.  */
2349
2350 static int
2351 has_negatives (struct type *type)
2352 {
2353   switch (TYPE_CODE (type))
2354     {
2355     default:
2356       return 0;
2357     case TYPE_CODE_INT:
2358       return !TYPE_UNSIGNED (type);
2359     case TYPE_CODE_RANGE:
2360       return TYPE_LOW_BOUND (type) < 0;
2361     }
2362 }
2363
2364
2365 /* Create a new value of type TYPE from the contents of OBJ starting
2366    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2367    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2368    assigning through the result will set the field fetched from.
2369    VALADDR is ignored unless OBJ is NULL, in which case,
2370    VALADDR+OFFSET must address the start of storage containing the 
2371    packed value.  The value returned  in this case is never an lval.
2372    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2373
2374 struct value *
2375 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2376                                 long offset, int bit_offset, int bit_size,
2377                                 struct type *type)
2378 {
2379   struct value *v;
2380   int src,                      /* Index into the source area */
2381     targ,                       /* Index into the target area */
2382     srcBitsLeft,                /* Number of source bits left to move */
2383     nsrc, ntarg,                /* Number of source and target bytes */
2384     unusedLS,                   /* Number of bits in next significant
2385                                    byte of source that are unused */
2386     accumSize;                  /* Number of meaningful bits in accum */
2387   unsigned char *bytes;         /* First byte containing data to unpack */
2388   unsigned char *unpacked;
2389   unsigned long accum;          /* Staging area for bits being transferred */
2390   unsigned char sign;
2391   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2392   /* Transmit bytes from least to most significant; delta is the direction
2393      the indices move.  */
2394   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2395
2396   type = ada_check_typedef (type);
2397
2398   if (obj == NULL)
2399     {
2400       v = allocate_value (type);
2401       bytes = (unsigned char *) (valaddr + offset);
2402     }
2403   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2404     {
2405       v = value_at (type, value_address (obj));
2406       type = value_type (v);
2407       bytes = (unsigned char *) alloca (len);
2408       read_memory (value_address (v) + offset, bytes, len);
2409     }
2410   else
2411     {
2412       v = allocate_value (type);
2413       bytes = (unsigned char *) value_contents (obj) + offset;
2414     }
2415
2416   if (obj != NULL)
2417     {
2418       long new_offset = offset;
2419
2420       set_value_component_location (v, obj);
2421       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2422       set_value_bitsize (v, bit_size);
2423       if (value_bitpos (v) >= HOST_CHAR_BIT)
2424         {
2425           ++new_offset;
2426           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2427         }
2428       set_value_offset (v, new_offset);
2429
2430       /* Also set the parent value.  This is needed when trying to
2431          assign a new value (in inferior memory).  */
2432       set_value_parent (v, obj);
2433     }
2434   else
2435     set_value_bitsize (v, bit_size);
2436   unpacked = (unsigned char *) value_contents (v);
2437
2438   srcBitsLeft = bit_size;
2439   nsrc = len;
2440   ntarg = TYPE_LENGTH (type);
2441   sign = 0;
2442   if (bit_size == 0)
2443     {
2444       memset (unpacked, 0, TYPE_LENGTH (type));
2445       return v;
2446     }
2447   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2448     {
2449       src = len - 1;
2450       if (has_negatives (type)
2451           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2452         sign = ~0;
2453
2454       unusedLS =
2455         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2456         % HOST_CHAR_BIT;
2457
2458       switch (TYPE_CODE (type))
2459         {
2460         case TYPE_CODE_ARRAY:
2461         case TYPE_CODE_UNION:
2462         case TYPE_CODE_STRUCT:
2463           /* Non-scalar values must be aligned at a byte boundary...  */
2464           accumSize =
2465             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2466           /* ... And are placed at the beginning (most-significant) bytes
2467              of the target.  */
2468           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2469           ntarg = targ + 1;
2470           break;
2471         default:
2472           accumSize = 0;
2473           targ = TYPE_LENGTH (type) - 1;
2474           break;
2475         }
2476     }
2477   else
2478     {
2479       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2480
2481       src = targ = 0;
2482       unusedLS = bit_offset;
2483       accumSize = 0;
2484
2485       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2486         sign = ~0;
2487     }
2488
2489   accum = 0;
2490   while (nsrc > 0)
2491     {
2492       /* Mask for removing bits of the next source byte that are not
2493          part of the value.  */
2494       unsigned int unusedMSMask =
2495         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2496         1;
2497       /* Sign-extend bits for this byte.  */
2498       unsigned int signMask = sign & ~unusedMSMask;
2499
2500       accum |=
2501         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2502       accumSize += HOST_CHAR_BIT - unusedLS;
2503       if (accumSize >= HOST_CHAR_BIT)
2504         {
2505           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2506           accumSize -= HOST_CHAR_BIT;
2507           accum >>= HOST_CHAR_BIT;
2508           ntarg -= 1;
2509           targ += delta;
2510         }
2511       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2512       unusedLS = 0;
2513       nsrc -= 1;
2514       src += delta;
2515     }
2516   while (ntarg > 0)
2517     {
2518       accum |= sign << accumSize;
2519       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2520       accumSize -= HOST_CHAR_BIT;
2521       accum >>= HOST_CHAR_BIT;
2522       ntarg -= 1;
2523       targ += delta;
2524     }
2525
2526   return v;
2527 }
2528
2529 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2530    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2531    not overlap.  */
2532 static void
2533 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2534            int src_offset, int n, int bits_big_endian_p)
2535 {
2536   unsigned int accum, mask;
2537   int accum_bits, chunk_size;
2538
2539   target += targ_offset / HOST_CHAR_BIT;
2540   targ_offset %= HOST_CHAR_BIT;
2541   source += src_offset / HOST_CHAR_BIT;
2542   src_offset %= HOST_CHAR_BIT;
2543   if (bits_big_endian_p)
2544     {
2545       accum = (unsigned char) *source;
2546       source += 1;
2547       accum_bits = HOST_CHAR_BIT - src_offset;
2548
2549       while (n > 0)
2550         {
2551           int unused_right;
2552
2553           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2554           accum_bits += HOST_CHAR_BIT;
2555           source += 1;
2556           chunk_size = HOST_CHAR_BIT - targ_offset;
2557           if (chunk_size > n)
2558             chunk_size = n;
2559           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2560           mask = ((1 << chunk_size) - 1) << unused_right;
2561           *target =
2562             (*target & ~mask)
2563             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2564           n -= chunk_size;
2565           accum_bits -= chunk_size;
2566           target += 1;
2567           targ_offset = 0;
2568         }
2569     }
2570   else
2571     {
2572       accum = (unsigned char) *source >> src_offset;
2573       source += 1;
2574       accum_bits = HOST_CHAR_BIT - src_offset;
2575
2576       while (n > 0)
2577         {
2578           accum = accum + ((unsigned char) *source << accum_bits);
2579           accum_bits += HOST_CHAR_BIT;
2580           source += 1;
2581           chunk_size = HOST_CHAR_BIT - targ_offset;
2582           if (chunk_size > n)
2583             chunk_size = n;
2584           mask = ((1 << chunk_size) - 1) << targ_offset;
2585           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2586           n -= chunk_size;
2587           accum_bits -= chunk_size;
2588           accum >>= chunk_size;
2589           target += 1;
2590           targ_offset = 0;
2591         }
2592     }
2593 }
2594
2595 /* Store the contents of FROMVAL into the location of TOVAL.
2596    Return a new value with the location of TOVAL and contents of
2597    FROMVAL.   Handles assignment into packed fields that have
2598    floating-point or non-scalar types.  */
2599
2600 static struct value *
2601 ada_value_assign (struct value *toval, struct value *fromval)
2602 {
2603   struct type *type = value_type (toval);
2604   int bits = value_bitsize (toval);
2605
2606   toval = ada_coerce_ref (toval);
2607   fromval = ada_coerce_ref (fromval);
2608
2609   if (ada_is_direct_array_type (value_type (toval)))
2610     toval = ada_coerce_to_simple_array (toval);
2611   if (ada_is_direct_array_type (value_type (fromval)))
2612     fromval = ada_coerce_to_simple_array (fromval);
2613
2614   if (!deprecated_value_modifiable (toval))
2615     error (_("Left operand of assignment is not a modifiable lvalue."));
2616
2617   if (VALUE_LVAL (toval) == lval_memory
2618       && bits > 0
2619       && (TYPE_CODE (type) == TYPE_CODE_FLT
2620           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2621     {
2622       int len = (value_bitpos (toval)
2623                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2624       int from_size;
2625       gdb_byte *buffer = alloca (len);
2626       struct value *val;
2627       CORE_ADDR to_addr = value_address (toval);
2628
2629       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2630         fromval = value_cast (type, fromval);
2631
2632       read_memory (to_addr, buffer, len);
2633       from_size = value_bitsize (fromval);
2634       if (from_size == 0)
2635         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2636       if (gdbarch_bits_big_endian (get_type_arch (type)))
2637         move_bits (buffer, value_bitpos (toval),
2638                    value_contents (fromval), from_size - bits, bits, 1);
2639       else
2640         move_bits (buffer, value_bitpos (toval),
2641                    value_contents (fromval), 0, bits, 0);
2642       write_memory_with_notification (to_addr, buffer, len);
2643
2644       val = value_copy (toval);
2645       memcpy (value_contents_raw (val), value_contents (fromval),
2646               TYPE_LENGTH (type));
2647       deprecated_set_value_type (val, type);
2648
2649       return val;
2650     }
2651
2652   return value_assign (toval, fromval);
2653 }
2654
2655
2656 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2657  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2658  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2659  * COMPONENT, and not the inferior's memory.  The current contents 
2660  * of COMPONENT are ignored.  */
2661 static void
2662 value_assign_to_component (struct value *container, struct value *component,
2663                            struct value *val)
2664 {
2665   LONGEST offset_in_container =
2666     (LONGEST)  (value_address (component) - value_address (container));
2667   int bit_offset_in_container = 
2668     value_bitpos (component) - value_bitpos (container);
2669   int bits;
2670   
2671   val = value_cast (value_type (component), val);
2672
2673   if (value_bitsize (component) == 0)
2674     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2675   else
2676     bits = value_bitsize (component);
2677
2678   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2679     move_bits (value_contents_writeable (container) + offset_in_container, 
2680                value_bitpos (container) + bit_offset_in_container,
2681                value_contents (val),
2682                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2683                bits, 1);
2684   else
2685     move_bits (value_contents_writeable (container) + offset_in_container, 
2686                value_bitpos (container) + bit_offset_in_container,
2687                value_contents (val), 0, bits, 0);
2688 }              
2689                         
2690 /* The value of the element of array ARR at the ARITY indices given in IND.
2691    ARR may be either a simple array, GNAT array descriptor, or pointer
2692    thereto.  */
2693
2694 struct value *
2695 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2696 {
2697   int k;
2698   struct value *elt;
2699   struct type *elt_type;
2700
2701   elt = ada_coerce_to_simple_array (arr);
2702
2703   elt_type = ada_check_typedef (value_type (elt));
2704   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2705       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2706     return value_subscript_packed (elt, arity, ind);
2707
2708   for (k = 0; k < arity; k += 1)
2709     {
2710       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2711         error (_("too many subscripts (%d expected)"), k);
2712       elt = value_subscript (elt, pos_atr (ind[k]));
2713     }
2714   return elt;
2715 }
2716
2717 /* Assuming ARR is a pointer to a GDB array, the value of the element
2718    of *ARR at the ARITY indices given in IND.
2719    Does not read the entire array into memory.  */
2720
2721 static struct value *
2722 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2723 {
2724   int k;
2725   struct type *type
2726     = check_typedef (value_enclosing_type (ada_value_ind (arr)));
2727
2728   for (k = 0; k < arity; k += 1)
2729     {
2730       LONGEST lwb, upb;
2731
2732       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2733         error (_("too many subscripts (%d expected)"), k);
2734       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2735                         value_copy (arr));
2736       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2737       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2738       type = TYPE_TARGET_TYPE (type);
2739     }
2740
2741   return value_ind (arr);
2742 }
2743
2744 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2745    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2746    elements starting at index LOW.  The lower bound of this array is LOW, as
2747    per Ada rules.  */
2748 static struct value *
2749 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2750                           int low, int high)
2751 {
2752   struct type *type0 = ada_check_typedef (type);
2753   CORE_ADDR base = value_as_address (array_ptr)
2754     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2755        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2756   struct type *index_type
2757     = create_static_range_type (NULL,
2758                                 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2759                                 low, high);
2760   struct type *slice_type =
2761     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2762
2763   return value_at_lazy (slice_type, base);
2764 }
2765
2766
2767 static struct value *
2768 ada_value_slice (struct value *array, int low, int high)
2769 {
2770   struct type *type = ada_check_typedef (value_type (array));
2771   struct type *index_type
2772     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2773   struct type *slice_type =
2774     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2775
2776   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2777 }
2778
2779 /* If type is a record type in the form of a standard GNAT array
2780    descriptor, returns the number of dimensions for type.  If arr is a
2781    simple array, returns the number of "array of"s that prefix its
2782    type designation.  Otherwise, returns 0.  */
2783
2784 int
2785 ada_array_arity (struct type *type)
2786 {
2787   int arity;
2788
2789   if (type == NULL)
2790     return 0;
2791
2792   type = desc_base_type (type);
2793
2794   arity = 0;
2795   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2796     return desc_arity (desc_bounds_type (type));
2797   else
2798     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2799       {
2800         arity += 1;
2801         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2802       }
2803
2804   return arity;
2805 }
2806
2807 /* If TYPE is a record type in the form of a standard GNAT array
2808    descriptor or a simple array type, returns the element type for
2809    TYPE after indexing by NINDICES indices, or by all indices if
2810    NINDICES is -1.  Otherwise, returns NULL.  */
2811
2812 struct type *
2813 ada_array_element_type (struct type *type, int nindices)
2814 {
2815   type = desc_base_type (type);
2816
2817   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2818     {
2819       int k;
2820       struct type *p_array_type;
2821
2822       p_array_type = desc_data_target_type (type);
2823
2824       k = ada_array_arity (type);
2825       if (k == 0)
2826         return NULL;
2827
2828       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2829       if (nindices >= 0 && k > nindices)
2830         k = nindices;
2831       while (k > 0 && p_array_type != NULL)
2832         {
2833           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2834           k -= 1;
2835         }
2836       return p_array_type;
2837     }
2838   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2839     {
2840       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2841         {
2842           type = TYPE_TARGET_TYPE (type);
2843           nindices -= 1;
2844         }
2845       return type;
2846     }
2847
2848   return NULL;
2849 }
2850
2851 /* The type of nth index in arrays of given type (n numbering from 1).
2852    Does not examine memory.  Throws an error if N is invalid or TYPE
2853    is not an array type.  NAME is the name of the Ada attribute being
2854    evaluated ('range, 'first, 'last, or 'length); it is used in building
2855    the error message.  */
2856
2857 static struct type *
2858 ada_index_type (struct type *type, int n, const char *name)
2859 {
2860   struct type *result_type;
2861
2862   type = desc_base_type (type);
2863
2864   if (n < 0 || n > ada_array_arity (type))
2865     error (_("invalid dimension number to '%s"), name);
2866
2867   if (ada_is_simple_array_type (type))
2868     {
2869       int i;
2870
2871       for (i = 1; i < n; i += 1)
2872         type = TYPE_TARGET_TYPE (type);
2873       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2874       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2875          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2876          perhaps stabsread.c would make more sense.  */
2877       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2878         result_type = NULL;
2879     }
2880   else
2881     {
2882       result_type = desc_index_type (desc_bounds_type (type), n);
2883       if (result_type == NULL)
2884         error (_("attempt to take bound of something that is not an array"));
2885     }
2886
2887   return result_type;
2888 }
2889
2890 /* Given that arr is an array type, returns the lower bound of the
2891    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2892    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2893    array-descriptor type.  It works for other arrays with bounds supplied
2894    by run-time quantities other than discriminants.  */
2895
2896 static LONGEST
2897 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2898 {
2899   struct type *type, *index_type_desc, *index_type;
2900   int i;
2901
2902   gdb_assert (which == 0 || which == 1);
2903
2904   if (ada_is_constrained_packed_array_type (arr_type))
2905     arr_type = decode_constrained_packed_array_type (arr_type);
2906
2907   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2908     return (LONGEST) - which;
2909
2910   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2911     type = TYPE_TARGET_TYPE (arr_type);
2912   else
2913     type = arr_type;
2914
2915   index_type_desc = ada_find_parallel_type (type, "___XA");
2916   ada_fixup_array_indexes_type (index_type_desc);
2917   if (index_type_desc != NULL)
2918     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2919                                       NULL);
2920   else
2921     {
2922       struct type *elt_type = check_typedef (type);
2923
2924       for (i = 1; i < n; i++)
2925         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2926
2927       index_type = TYPE_INDEX_TYPE (elt_type);
2928     }
2929
2930   return
2931     (LONGEST) (which == 0
2932                ? ada_discrete_type_low_bound (index_type)
2933                : ada_discrete_type_high_bound (index_type));
2934 }
2935
2936 /* Given that arr is an array value, returns the lower bound of the
2937    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2938    WHICH is 1.  This routine will also work for arrays with bounds
2939    supplied by run-time quantities other than discriminants.  */
2940
2941 static LONGEST
2942 ada_array_bound (struct value *arr, int n, int which)
2943 {
2944   struct type *arr_type;
2945
2946   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2947     arr = value_ind (arr);
2948   arr_type = value_enclosing_type (arr);
2949
2950   if (ada_is_constrained_packed_array_type (arr_type))
2951     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2952   else if (ada_is_simple_array_type (arr_type))
2953     return ada_array_bound_from_type (arr_type, n, which);
2954   else
2955     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2956 }
2957
2958 /* Given that arr is an array value, returns the length of the
2959    nth index.  This routine will also work for arrays with bounds
2960    supplied by run-time quantities other than discriminants.
2961    Does not work for arrays indexed by enumeration types with representation
2962    clauses at the moment.  */
2963
2964 static LONGEST
2965 ada_array_length (struct value *arr, int n)
2966 {
2967   struct type *arr_type;
2968
2969   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2970     arr = value_ind (arr);
2971   arr_type = value_enclosing_type (arr);
2972
2973   if (ada_is_constrained_packed_array_type (arr_type))
2974     return ada_array_length (decode_constrained_packed_array (arr), n);
2975
2976   if (ada_is_simple_array_type (arr_type))
2977     return (ada_array_bound_from_type (arr_type, n, 1)
2978             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2979   else
2980     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2981             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2982 }
2983
2984 /* An empty array whose type is that of ARR_TYPE (an array type),
2985    with bounds LOW to LOW-1.  */
2986
2987 static struct value *
2988 empty_array (struct type *arr_type, int low)
2989 {
2990   struct type *arr_type0 = ada_check_typedef (arr_type);
2991   struct type *index_type
2992     = create_static_range_type
2993         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
2994   struct type *elt_type = ada_array_element_type (arr_type0, 1);
2995
2996   return allocate_value (create_array_type (NULL, elt_type, index_type));
2997 }
2998 \f
2999
3000                                 /* Name resolution */
3001
3002 /* The "decoded" name for the user-definable Ada operator corresponding
3003    to OP.  */
3004
3005 static const char *
3006 ada_decoded_op_name (enum exp_opcode op)
3007 {
3008   int i;
3009
3010   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3011     {
3012       if (ada_opname_table[i].op == op)
3013         return ada_opname_table[i].decoded;
3014     }
3015   error (_("Could not find operator name for opcode"));
3016 }
3017
3018
3019 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3020    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3021    undefined namespace) and converts operators that are
3022    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3023    non-null, it provides a preferred result type [at the moment, only
3024    type void has any effect---causing procedures to be preferred over
3025    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3026    return type is preferred.  May change (expand) *EXP.  */
3027
3028 static void
3029 resolve (struct expression **expp, int void_context_p)
3030 {
3031   struct type *context_type = NULL;
3032   int pc = 0;
3033
3034   if (void_context_p)
3035     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3036
3037   resolve_subexp (expp, &pc, 1, context_type);
3038 }
3039
3040 /* Resolve the operator of the subexpression beginning at
3041    position *POS of *EXPP.  "Resolving" consists of replacing
3042    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3043    with their resolutions, replacing built-in operators with
3044    function calls to user-defined operators, where appropriate, and,
3045    when DEPROCEDURE_P is non-zero, converting function-valued variables
3046    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3047    are as in ada_resolve, above.  */
3048
3049 static struct value *
3050 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3051                 struct type *context_type)
3052 {
3053   int pc = *pos;
3054   int i;
3055   struct expression *exp;       /* Convenience: == *expp.  */
3056   enum exp_opcode op = (*expp)->elts[pc].opcode;
3057   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3058   int nargs;                    /* Number of operands.  */
3059   int oplen;
3060
3061   argvec = NULL;
3062   nargs = 0;
3063   exp = *expp;
3064
3065   /* Pass one: resolve operands, saving their types and updating *pos,
3066      if needed.  */
3067   switch (op)
3068     {
3069     case OP_FUNCALL:
3070       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3071           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3072         *pos += 7;
3073       else
3074         {
3075           *pos += 3;
3076           resolve_subexp (expp, pos, 0, NULL);
3077         }
3078       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3079       break;
3080
3081     case UNOP_ADDR:
3082       *pos += 1;
3083       resolve_subexp (expp, pos, 0, NULL);
3084       break;
3085
3086     case UNOP_QUAL:
3087       *pos += 3;
3088       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3089       break;
3090
3091     case OP_ATR_MODULUS:
3092     case OP_ATR_SIZE:
3093     case OP_ATR_TAG:
3094     case OP_ATR_FIRST:
3095     case OP_ATR_LAST:
3096     case OP_ATR_LENGTH:
3097     case OP_ATR_POS:
3098     case OP_ATR_VAL:
3099     case OP_ATR_MIN:
3100     case OP_ATR_MAX:
3101     case TERNOP_IN_RANGE:
3102     case BINOP_IN_BOUNDS:
3103     case UNOP_IN_RANGE:
3104     case OP_AGGREGATE:
3105     case OP_OTHERS:
3106     case OP_CHOICES:
3107     case OP_POSITIONAL:
3108     case OP_DISCRETE_RANGE:
3109     case OP_NAME:
3110       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3111       *pos += oplen;
3112       break;
3113
3114     case BINOP_ASSIGN:
3115       {
3116         struct value *arg1;
3117
3118         *pos += 1;
3119         arg1 = resolve_subexp (expp, pos, 0, NULL);
3120         if (arg1 == NULL)
3121           resolve_subexp (expp, pos, 1, NULL);
3122         else
3123           resolve_subexp (expp, pos, 1, value_type (arg1));
3124         break;
3125       }
3126
3127     case UNOP_CAST:
3128       *pos += 3;
3129       nargs = 1;
3130       break;
3131
3132     case BINOP_ADD:
3133     case BINOP_SUB:
3134     case BINOP_MUL:
3135     case BINOP_DIV:
3136     case BINOP_REM:
3137     case BINOP_MOD:
3138     case BINOP_EXP:
3139     case BINOP_CONCAT:
3140     case BINOP_LOGICAL_AND:
3141     case BINOP_LOGICAL_OR:
3142     case BINOP_BITWISE_AND:
3143     case BINOP_BITWISE_IOR:
3144     case BINOP_BITWISE_XOR:
3145
3146     case BINOP_EQUAL:
3147     case BINOP_NOTEQUAL:
3148     case BINOP_LESS:
3149     case BINOP_GTR:
3150     case BINOP_LEQ:
3151     case BINOP_GEQ:
3152
3153     case BINOP_REPEAT:
3154     case BINOP_SUBSCRIPT:
3155     case BINOP_COMMA:
3156       *pos += 1;
3157       nargs = 2;
3158       break;
3159
3160     case UNOP_NEG:
3161     case UNOP_PLUS:
3162     case UNOP_LOGICAL_NOT:
3163     case UNOP_ABS:
3164     case UNOP_IND:
3165       *pos += 1;
3166       nargs = 1;
3167       break;
3168
3169     case OP_LONG:
3170     case OP_DOUBLE:
3171     case OP_VAR_VALUE:
3172       *pos += 4;
3173       break;
3174
3175     case OP_TYPE:
3176     case OP_BOOL:
3177     case OP_LAST:
3178     case OP_INTERNALVAR:
3179       *pos += 3;
3180       break;
3181
3182     case UNOP_MEMVAL:
3183       *pos += 3;
3184       nargs = 1;
3185       break;
3186
3187     case OP_REGISTER:
3188       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3189       break;
3190
3191     case STRUCTOP_STRUCT:
3192       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3193       nargs = 1;
3194       break;
3195
3196     case TERNOP_SLICE:
3197       *pos += 1;
3198       nargs = 3;
3199       break;
3200
3201     case OP_STRING:
3202       break;
3203
3204     default:
3205       error (_("Unexpected operator during name resolution"));
3206     }
3207
3208   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3209   for (i = 0; i < nargs; i += 1)
3210     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3211   argvec[i] = NULL;
3212   exp = *expp;
3213
3214   /* Pass two: perform any resolution on principal operator.  */
3215   switch (op)
3216     {
3217     default:
3218       break;
3219
3220     case OP_VAR_VALUE:
3221       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3222         {
3223           struct ada_symbol_info *candidates;
3224           int n_candidates;
3225
3226           n_candidates =
3227             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3228                                     (exp->elts[pc + 2].symbol),
3229                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3230                                     &candidates);
3231
3232           if (n_candidates > 1)
3233             {
3234               /* Types tend to get re-introduced locally, so if there
3235                  are any local symbols that are not types, first filter
3236                  out all types.  */
3237               int j;
3238               for (j = 0; j < n_candidates; j += 1)
3239                 switch (SYMBOL_CLASS (candidates[j].sym))
3240                   {
3241                   case LOC_REGISTER:
3242                   case LOC_ARG:
3243                   case LOC_REF_ARG:
3244                   case LOC_REGPARM_ADDR:
3245                   case LOC_LOCAL:
3246                   case LOC_COMPUTED:
3247                     goto FoundNonType;
3248                   default:
3249                     break;
3250                   }
3251             FoundNonType:
3252               if (j < n_candidates)
3253                 {
3254                   j = 0;
3255                   while (j < n_candidates)
3256                     {
3257                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3258                         {
3259                           candidates[j] = candidates[n_candidates - 1];
3260                           n_candidates -= 1;
3261                         }
3262                       else
3263                         j += 1;
3264                     }
3265                 }
3266             }
3267
3268           if (n_candidates == 0)
3269             error (_("No definition found for %s"),
3270                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3271           else if (n_candidates == 1)
3272             i = 0;
3273           else if (deprocedure_p
3274                    && !is_nonfunction (candidates, n_candidates))
3275             {
3276               i = ada_resolve_function
3277                 (candidates, n_candidates, NULL, 0,
3278                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3279                  context_type);
3280               if (i < 0)
3281                 error (_("Could not find a match for %s"),
3282                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3283             }
3284           else
3285             {
3286               printf_filtered (_("Multiple matches for %s\n"),
3287                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3288               user_select_syms (candidates, n_candidates, 1);
3289               i = 0;
3290             }
3291
3292           exp->elts[pc + 1].block = candidates[i].block;
3293           exp->elts[pc + 2].symbol = candidates[i].sym;
3294           if (innermost_block == NULL
3295               || contained_in (candidates[i].block, innermost_block))
3296             innermost_block = candidates[i].block;
3297         }
3298
3299       if (deprocedure_p
3300           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3301               == TYPE_CODE_FUNC))
3302         {
3303           replace_operator_with_call (expp, pc, 0, 0,
3304                                       exp->elts[pc + 2].symbol,
3305                                       exp->elts[pc + 1].block);
3306           exp = *expp;
3307         }
3308       break;
3309
3310     case OP_FUNCALL:
3311       {
3312         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3313             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3314           {
3315             struct ada_symbol_info *candidates;
3316             int n_candidates;
3317
3318             n_candidates =
3319               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3320                                       (exp->elts[pc + 5].symbol),
3321                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3322                                       &candidates);
3323             if (n_candidates == 1)
3324               i = 0;
3325             else
3326               {
3327                 i = ada_resolve_function
3328                   (candidates, n_candidates,
3329                    argvec, nargs,
3330                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3331                    context_type);
3332                 if (i < 0)
3333                   error (_("Could not find a match for %s"),
3334                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3335               }
3336
3337             exp->elts[pc + 4].block = candidates[i].block;
3338             exp->elts[pc + 5].symbol = candidates[i].sym;
3339             if (innermost_block == NULL
3340                 || contained_in (candidates[i].block, innermost_block))
3341               innermost_block = candidates[i].block;
3342           }
3343       }
3344       break;
3345     case BINOP_ADD:
3346     case BINOP_SUB:
3347     case BINOP_MUL:
3348     case BINOP_DIV:
3349     case BINOP_REM:
3350     case BINOP_MOD:
3351     case BINOP_CONCAT:
3352     case BINOP_BITWISE_AND:
3353     case BINOP_BITWISE_IOR:
3354     case BINOP_BITWISE_XOR:
3355     case BINOP_EQUAL:
3356     case BINOP_NOTEQUAL:
3357     case BINOP_LESS:
3358     case BINOP_GTR:
3359     case BINOP_LEQ:
3360     case BINOP_GEQ:
3361     case BINOP_EXP:
3362     case UNOP_NEG:
3363     case UNOP_PLUS:
3364     case UNOP_LOGICAL_NOT:
3365     case UNOP_ABS:
3366       if (possible_user_operator_p (op, argvec))
3367         {
3368           struct ada_symbol_info *candidates;
3369           int n_candidates;
3370
3371           n_candidates =
3372             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3373                                     (struct block *) NULL, VAR_DOMAIN,
3374                                     &candidates);
3375           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3376                                     ada_decoded_op_name (op), NULL);
3377           if (i < 0)
3378             break;
3379
3380           replace_operator_with_call (expp, pc, nargs, 1,
3381                                       candidates[i].sym, candidates[i].block);
3382           exp = *expp;
3383         }
3384       break;
3385
3386     case OP_TYPE:
3387     case OP_REGISTER:
3388       return NULL;
3389     }
3390
3391   *pos = pc;
3392   return evaluate_subexp_type (exp, pos);
3393 }
3394
3395 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3396    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3397    a non-pointer.  */
3398 /* The term "match" here is rather loose.  The match is heuristic and
3399    liberal.  */
3400
3401 static int
3402 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3403 {
3404   ftype = ada_check_typedef (ftype);
3405   atype = ada_check_typedef (atype);
3406
3407   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3408     ftype = TYPE_TARGET_TYPE (ftype);
3409   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3410     atype = TYPE_TARGET_TYPE (atype);
3411
3412   switch (TYPE_CODE (ftype))
3413     {
3414     default:
3415       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3416     case TYPE_CODE_PTR:
3417       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3418         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3419                                TYPE_TARGET_TYPE (atype), 0);
3420       else
3421         return (may_deref
3422                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3423     case TYPE_CODE_INT:
3424     case TYPE_CODE_ENUM:
3425     case TYPE_CODE_RANGE:
3426       switch (TYPE_CODE (atype))
3427         {
3428         case TYPE_CODE_INT:
3429         case TYPE_CODE_ENUM:
3430         case TYPE_CODE_RANGE:
3431           return 1;
3432         default:
3433           return 0;
3434         }
3435
3436     case TYPE_CODE_ARRAY:
3437       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3438               || ada_is_array_descriptor_type (atype));
3439
3440     case TYPE_CODE_STRUCT:
3441       if (ada_is_array_descriptor_type (ftype))
3442         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3443                 || ada_is_array_descriptor_type (atype));
3444       else
3445         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3446                 && !ada_is_array_descriptor_type (atype));
3447
3448     case TYPE_CODE_UNION:
3449     case TYPE_CODE_FLT:
3450       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3451     }
3452 }
3453
3454 /* Return non-zero if the formals of FUNC "sufficiently match" the
3455    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3456    may also be an enumeral, in which case it is treated as a 0-
3457    argument function.  */
3458
3459 static int
3460 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3461 {
3462   int i;
3463   struct type *func_type = SYMBOL_TYPE (func);
3464
3465   if (SYMBOL_CLASS (func) == LOC_CONST
3466       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3467     return (n_actuals == 0);
3468   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3469     return 0;
3470
3471   if (TYPE_NFIELDS (func_type) != n_actuals)
3472     return 0;
3473
3474   for (i = 0; i < n_actuals; i += 1)
3475     {
3476       if (actuals[i] == NULL)
3477         return 0;
3478       else
3479         {
3480           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3481                                                                    i));
3482           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3483
3484           if (!ada_type_match (ftype, atype, 1))
3485             return 0;
3486         }
3487     }
3488   return 1;
3489 }
3490
3491 /* False iff function type FUNC_TYPE definitely does not produce a value
3492    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3493    FUNC_TYPE is not a valid function type with a non-null return type
3494    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3495
3496 static int
3497 return_match (struct type *func_type, struct type *context_type)
3498 {
3499   struct type *return_type;
3500
3501   if (func_type == NULL)
3502     return 1;
3503
3504   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3505     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3506   else
3507     return_type = get_base_type (func_type);
3508   if (return_type == NULL)
3509     return 1;
3510
3511   context_type = get_base_type (context_type);
3512
3513   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3514     return context_type == NULL || return_type == context_type;
3515   else if (context_type == NULL)
3516     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3517   else
3518     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3519 }
3520
3521
3522 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3523    function (if any) that matches the types of the NARGS arguments in
3524    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3525    that returns that type, then eliminate matches that don't.  If
3526    CONTEXT_TYPE is void and there is at least one match that does not
3527    return void, eliminate all matches that do.
3528
3529    Asks the user if there is more than one match remaining.  Returns -1
3530    if there is no such symbol or none is selected.  NAME is used
3531    solely for messages.  May re-arrange and modify SYMS in
3532    the process; the index returned is for the modified vector.  */
3533
3534 static int
3535 ada_resolve_function (struct ada_symbol_info syms[],
3536                       int nsyms, struct value **args, int nargs,
3537                       const char *name, struct type *context_type)
3538 {
3539   int fallback;
3540   int k;
3541   int m;                        /* Number of hits */
3542
3543   m = 0;
3544   /* In the first pass of the loop, we only accept functions matching
3545      context_type.  If none are found, we add a second pass of the loop
3546      where every function is accepted.  */
3547   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3548     {
3549       for (k = 0; k < nsyms; k += 1)
3550         {
3551           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3552
3553           if (ada_args_match (syms[k].sym, args, nargs)
3554               && (fallback || return_match (type, context_type)))
3555             {
3556               syms[m] = syms[k];
3557               m += 1;
3558             }
3559         }
3560     }
3561
3562   if (m == 0)
3563     return -1;
3564   else if (m > 1)
3565     {
3566       printf_filtered (_("Multiple matches for %s\n"), name);
3567       user_select_syms (syms, m, 1);
3568       return 0;
3569     }
3570   return 0;
3571 }
3572
3573 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3574    in a listing of choices during disambiguation (see sort_choices, below).
3575    The idea is that overloadings of a subprogram name from the
3576    same package should sort in their source order.  We settle for ordering
3577    such symbols by their trailing number (__N  or $N).  */
3578
3579 static int
3580 encoded_ordered_before (const char *N0, const char *N1)
3581 {
3582   if (N1 == NULL)
3583     return 0;
3584   else if (N0 == NULL)
3585     return 1;
3586   else
3587     {
3588       int k0, k1;
3589
3590       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3591         ;
3592       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3593         ;
3594       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3595           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3596         {
3597           int n0, n1;
3598
3599           n0 = k0;
3600           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3601             n0 -= 1;
3602           n1 = k1;
3603           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3604             n1 -= 1;
3605           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3606             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3607         }
3608       return (strcmp (N0, N1) < 0);
3609     }
3610 }
3611
3612 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3613    encoded names.  */
3614
3615 static void
3616 sort_choices (struct ada_symbol_info syms[], int nsyms)
3617 {
3618   int i;
3619
3620   for (i = 1; i < nsyms; i += 1)
3621     {
3622       struct ada_symbol_info sym = syms[i];
3623       int j;
3624
3625       for (j = i - 1; j >= 0; j -= 1)
3626         {
3627           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3628                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3629             break;
3630           syms[j + 1] = syms[j];
3631         }
3632       syms[j + 1] = sym;
3633     }
3634 }
3635
3636 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3637    by asking the user (if necessary), returning the number selected, 
3638    and setting the first elements of SYMS items.  Error if no symbols
3639    selected.  */
3640
3641 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3642    to be re-integrated one of these days.  */
3643
3644 int
3645 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3646 {
3647   int i;
3648   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3649   int n_chosen;
3650   int first_choice = (max_results == 1) ? 1 : 2;
3651   const char *select_mode = multiple_symbols_select_mode ();
3652
3653   if (max_results < 1)
3654     error (_("Request to select 0 symbols!"));
3655   if (nsyms <= 1)
3656     return nsyms;
3657
3658   if (select_mode == multiple_symbols_cancel)
3659     error (_("\
3660 canceled because the command is ambiguous\n\
3661 See set/show multiple-symbol."));
3662   
3663   /* If select_mode is "all", then return all possible symbols.
3664      Only do that if more than one symbol can be selected, of course.
3665      Otherwise, display the menu as usual.  */
3666   if (select_mode == multiple_symbols_all && max_results > 1)
3667     return nsyms;
3668
3669   printf_unfiltered (_("[0] cancel\n"));
3670   if (max_results > 1)
3671     printf_unfiltered (_("[1] all\n"));
3672
3673   sort_choices (syms, nsyms);
3674
3675   for (i = 0; i < nsyms; i += 1)
3676     {
3677       if (syms[i].sym == NULL)
3678         continue;
3679
3680       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3681         {
3682           struct symtab_and_line sal =
3683             find_function_start_sal (syms[i].sym, 1);
3684
3685           if (sal.symtab == NULL)
3686             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3687                                i + first_choice,
3688                                SYMBOL_PRINT_NAME (syms[i].sym),
3689                                sal.line);
3690           else
3691             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3692                                SYMBOL_PRINT_NAME (syms[i].sym),
3693                                symtab_to_filename_for_display (sal.symtab),
3694                                sal.line);
3695           continue;
3696         }
3697       else
3698         {
3699           int is_enumeral =
3700             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3701              && SYMBOL_TYPE (syms[i].sym) != NULL
3702              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3703           struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
3704
3705           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3706             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3707                                i + first_choice,
3708                                SYMBOL_PRINT_NAME (syms[i].sym),
3709                                symtab_to_filename_for_display (symtab),
3710                                SYMBOL_LINE (syms[i].sym));
3711           else if (is_enumeral
3712                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3713             {
3714               printf_unfiltered (("[%d] "), i + first_choice);
3715               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3716                               gdb_stdout, -1, 0, &type_print_raw_options);
3717               printf_unfiltered (_("'(%s) (enumeral)\n"),
3718                                  SYMBOL_PRINT_NAME (syms[i].sym));
3719             }
3720           else if (symtab != NULL)
3721             printf_unfiltered (is_enumeral
3722                                ? _("[%d] %s in %s (enumeral)\n")
3723                                : _("[%d] %s at %s:?\n"),
3724                                i + first_choice,
3725                                SYMBOL_PRINT_NAME (syms[i].sym),
3726                                symtab_to_filename_for_display (symtab));
3727           else
3728             printf_unfiltered (is_enumeral
3729                                ? _("[%d] %s (enumeral)\n")
3730                                : _("[%d] %s at ?\n"),
3731                                i + first_choice,
3732                                SYMBOL_PRINT_NAME (syms[i].sym));
3733         }
3734     }
3735
3736   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3737                              "overload-choice");
3738
3739   for (i = 0; i < n_chosen; i += 1)
3740     syms[i] = syms[chosen[i]];
3741
3742   return n_chosen;
3743 }
3744
3745 /* Read and validate a set of numeric choices from the user in the
3746    range 0 .. N_CHOICES-1.  Place the results in increasing
3747    order in CHOICES[0 .. N-1], and return N.
3748
3749    The user types choices as a sequence of numbers on one line
3750    separated by blanks, encoding them as follows:
3751
3752      + A choice of 0 means to cancel the selection, throwing an error.
3753      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3754      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3755
3756    The user is not allowed to choose more than MAX_RESULTS values.
3757
3758    ANNOTATION_SUFFIX, if present, is used to annotate the input
3759    prompts (for use with the -f switch).  */
3760
3761 int
3762 get_selections (int *choices, int n_choices, int max_results,
3763                 int is_all_choice, char *annotation_suffix)
3764 {
3765   char *args;
3766   char *prompt;
3767   int n_chosen;
3768   int first_choice = is_all_choice ? 2 : 1;
3769
3770   prompt = getenv ("PS2");
3771   if (prompt == NULL)
3772     prompt = "> ";
3773
3774   args = command_line_input (prompt, 0, annotation_suffix);
3775
3776   if (args == NULL)
3777     error_no_arg (_("one or more choice numbers"));
3778
3779   n_chosen = 0;
3780
3781   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3782      order, as given in args.  Choices are validated.  */
3783   while (1)
3784     {
3785       char *args2;
3786       int choice, j;
3787
3788       args = skip_spaces (args);
3789       if (*args == '\0' && n_chosen == 0)
3790         error_no_arg (_("one or more choice numbers"));
3791       else if (*args == '\0')
3792         break;
3793
3794       choice = strtol (args, &args2, 10);
3795       if (args == args2 || choice < 0
3796           || choice > n_choices + first_choice - 1)
3797         error (_("Argument must be choice number"));
3798       args = args2;
3799
3800       if (choice == 0)
3801         error (_("cancelled"));
3802
3803       if (choice < first_choice)
3804         {
3805           n_chosen = n_choices;
3806           for (j = 0; j < n_choices; j += 1)
3807             choices[j] = j;
3808           break;
3809         }
3810       choice -= first_choice;
3811
3812       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3813         {
3814         }
3815
3816       if (j < 0 || choice != choices[j])
3817         {
3818           int k;
3819
3820           for (k = n_chosen - 1; k > j; k -= 1)
3821             choices[k + 1] = choices[k];
3822           choices[j + 1] = choice;
3823           n_chosen += 1;
3824         }
3825     }
3826
3827   if (n_chosen > max_results)
3828     error (_("Select no more than %d of the above"), max_results);
3829
3830   return n_chosen;
3831 }
3832
3833 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3834    on the function identified by SYM and BLOCK, and taking NARGS
3835    arguments.  Update *EXPP as needed to hold more space.  */
3836
3837 static void
3838 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3839                             int oplen, struct symbol *sym,
3840                             const struct block *block)
3841 {
3842   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3843      symbol, -oplen for operator being replaced).  */
3844   struct expression *newexp = (struct expression *)
3845     xzalloc (sizeof (struct expression)
3846              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3847   struct expression *exp = *expp;
3848
3849   newexp->nelts = exp->nelts + 7 - oplen;
3850   newexp->language_defn = exp->language_defn;
3851   newexp->gdbarch = exp->gdbarch;
3852   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3853   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3854           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3855
3856   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3857   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3858
3859   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3860   newexp->elts[pc + 4].block = block;
3861   newexp->elts[pc + 5].symbol = sym;
3862
3863   *expp = newexp;
3864   xfree (exp);
3865 }
3866
3867 /* Type-class predicates */
3868
3869 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3870    or FLOAT).  */
3871
3872 static int
3873 numeric_type_p (struct type *type)
3874 {
3875   if (type == NULL)
3876     return 0;
3877   else
3878     {
3879       switch (TYPE_CODE (type))
3880         {
3881         case TYPE_CODE_INT:
3882         case TYPE_CODE_FLT:
3883           return 1;
3884         case TYPE_CODE_RANGE:
3885           return (type == TYPE_TARGET_TYPE (type)
3886                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3887         default:
3888           return 0;
3889         }
3890     }
3891 }
3892
3893 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3894
3895 static int
3896 integer_type_p (struct type *type)
3897 {
3898   if (type == NULL)
3899     return 0;
3900   else
3901     {
3902       switch (TYPE_CODE (type))
3903         {
3904         case TYPE_CODE_INT:
3905           return 1;
3906         case TYPE_CODE_RANGE:
3907           return (type == TYPE_TARGET_TYPE (type)
3908                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3909         default:
3910           return 0;
3911         }
3912     }
3913 }
3914
3915 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3916
3917 static int
3918 scalar_type_p (struct type *type)
3919 {
3920   if (type == NULL)
3921     return 0;
3922   else
3923     {
3924       switch (TYPE_CODE (type))
3925         {
3926         case TYPE_CODE_INT:
3927         case TYPE_CODE_RANGE:
3928         case TYPE_CODE_ENUM:
3929         case TYPE_CODE_FLT:
3930           return 1;
3931         default:
3932           return 0;
3933         }
3934     }
3935 }
3936
3937 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3938
3939 static int
3940 discrete_type_p (struct type *type)
3941 {
3942   if (type == NULL)
3943     return 0;
3944   else
3945     {
3946       switch (TYPE_CODE (type))
3947         {
3948         case TYPE_CODE_INT:
3949         case TYPE_CODE_RANGE:
3950         case TYPE_CODE_ENUM:
3951         case TYPE_CODE_BOOL:
3952           return 1;
3953         default:
3954           return 0;
3955         }
3956     }
3957 }
3958
3959 /* Returns non-zero if OP with operands in the vector ARGS could be
3960    a user-defined function.  Errs on the side of pre-defined operators
3961    (i.e., result 0).  */
3962
3963 static int
3964 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3965 {
3966   struct type *type0 =
3967     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3968   struct type *type1 =
3969     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3970
3971   if (type0 == NULL)
3972     return 0;
3973
3974   switch (op)
3975     {
3976     default:
3977       return 0;
3978
3979     case BINOP_ADD:
3980     case BINOP_SUB:
3981     case BINOP_MUL:
3982     case BINOP_DIV:
3983       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3984
3985     case BINOP_REM:
3986     case BINOP_MOD:
3987     case BINOP_BITWISE_AND:
3988     case BINOP_BITWISE_IOR:
3989     case BINOP_BITWISE_XOR:
3990       return (!(integer_type_p (type0) && integer_type_p (type1)));
3991
3992     case BINOP_EQUAL:
3993     case BINOP_NOTEQUAL:
3994     case BINOP_LESS:
3995     case BINOP_GTR:
3996     case BINOP_LEQ:
3997     case BINOP_GEQ:
3998       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3999
4000     case BINOP_CONCAT:
4001       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4002
4003     case BINOP_EXP:
4004       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4005
4006     case UNOP_NEG:
4007     case UNOP_PLUS:
4008     case UNOP_LOGICAL_NOT:
4009     case UNOP_ABS:
4010       return (!numeric_type_p (type0));
4011
4012     }
4013 }
4014 \f
4015                                 /* Renaming */
4016
4017 /* NOTES: 
4018
4019    1. In the following, we assume that a renaming type's name may
4020       have an ___XD suffix.  It would be nice if this went away at some
4021       point.
4022    2. We handle both the (old) purely type-based representation of 
4023       renamings and the (new) variable-based encoding.  At some point,
4024       it is devoutly to be hoped that the former goes away 
4025       (FIXME: hilfinger-2007-07-09).
4026    3. Subprogram renamings are not implemented, although the XRS
4027       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4028
4029 /* If SYM encodes a renaming, 
4030
4031        <renaming> renames <renamed entity>,
4032
4033    sets *LEN to the length of the renamed entity's name,
4034    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4035    the string describing the subcomponent selected from the renamed
4036    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4037    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4038    are undefined).  Otherwise, returns a value indicating the category
4039    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4040    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4041    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4042    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4043    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4044    may be NULL, in which case they are not assigned.
4045
4046    [Currently, however, GCC does not generate subprogram renamings.]  */
4047
4048 enum ada_renaming_category
4049 ada_parse_renaming (struct symbol *sym,
4050                     const char **renamed_entity, int *len, 
4051                     const char **renaming_expr)
4052 {
4053   enum ada_renaming_category kind;
4054   const char *info;
4055   const char *suffix;
4056
4057   if (sym == NULL)
4058     return ADA_NOT_RENAMING;
4059   switch (SYMBOL_CLASS (sym)) 
4060     {
4061     default:
4062       return ADA_NOT_RENAMING;
4063     case LOC_TYPEDEF:
4064       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4065                                        renamed_entity, len, renaming_expr);
4066     case LOC_LOCAL:
4067     case LOC_STATIC:
4068     case LOC_COMPUTED:
4069     case LOC_OPTIMIZED_OUT:
4070       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4071       if (info == NULL)
4072         return ADA_NOT_RENAMING;
4073       switch (info[5])
4074         {
4075         case '_':
4076           kind = ADA_OBJECT_RENAMING;
4077           info += 6;
4078           break;
4079         case 'E':
4080           kind = ADA_EXCEPTION_RENAMING;
4081           info += 7;
4082           break;
4083         case 'P':
4084           kind = ADA_PACKAGE_RENAMING;
4085           info += 7;
4086           break;
4087         case 'S':
4088           kind = ADA_SUBPROGRAM_RENAMING;
4089           info += 7;
4090           break;
4091         default:
4092           return ADA_NOT_RENAMING;
4093         }
4094     }
4095
4096   if (renamed_entity != NULL)
4097     *renamed_entity = info;
4098   suffix = strstr (info, "___XE");
4099   if (suffix == NULL || suffix == info)
4100     return ADA_NOT_RENAMING;
4101   if (len != NULL)
4102     *len = strlen (info) - strlen (suffix);
4103   suffix += 5;
4104   if (renaming_expr != NULL)
4105     *renaming_expr = suffix;
4106   return kind;
4107 }
4108
4109 /* Assuming TYPE encodes a renaming according to the old encoding in
4110    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4111    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4112    ADA_NOT_RENAMING otherwise.  */
4113 static enum ada_renaming_category
4114 parse_old_style_renaming (struct type *type,
4115                           const char **renamed_entity, int *len, 
4116                           const char **renaming_expr)
4117 {
4118   enum ada_renaming_category kind;
4119   const char *name;
4120   const char *info;
4121   const char *suffix;
4122
4123   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4124       || TYPE_NFIELDS (type) != 1)
4125     return ADA_NOT_RENAMING;
4126
4127   name = type_name_no_tag (type);
4128   if (name == NULL)
4129     return ADA_NOT_RENAMING;
4130   
4131   name = strstr (name, "___XR");
4132   if (name == NULL)
4133     return ADA_NOT_RENAMING;
4134   switch (name[5])
4135     {
4136     case '\0':
4137     case '_':
4138       kind = ADA_OBJECT_RENAMING;
4139       break;
4140     case 'E':
4141       kind = ADA_EXCEPTION_RENAMING;
4142       break;
4143     case 'P':
4144       kind = ADA_PACKAGE_RENAMING;
4145       break;
4146     case 'S':
4147       kind = ADA_SUBPROGRAM_RENAMING;
4148       break;
4149     default:
4150       return ADA_NOT_RENAMING;
4151     }
4152
4153   info = TYPE_FIELD_NAME (type, 0);
4154   if (info == NULL)
4155     return ADA_NOT_RENAMING;
4156   if (renamed_entity != NULL)
4157     *renamed_entity = info;
4158   suffix = strstr (info, "___XE");
4159   if (renaming_expr != NULL)
4160     *renaming_expr = suffix + 5;
4161   if (suffix == NULL || suffix == info)
4162     return ADA_NOT_RENAMING;
4163   if (len != NULL)
4164     *len = suffix - info;
4165   return kind;
4166 }
4167
4168 /* Compute the value of the given RENAMING_SYM, which is expected to
4169    be a symbol encoding a renaming expression.  BLOCK is the block
4170    used to evaluate the renaming.  */
4171
4172 static struct value *
4173 ada_read_renaming_var_value (struct symbol *renaming_sym,
4174                              const struct block *block)
4175 {
4176   const char *sym_name;
4177   struct expression *expr;
4178   struct value *value;
4179   struct cleanup *old_chain = NULL;
4180
4181   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4182   expr = parse_exp_1 (&sym_name, 0, block, 0);
4183   old_chain = make_cleanup (free_current_contents, &expr);
4184   value = evaluate_expression (expr);
4185
4186   do_cleanups (old_chain);
4187   return value;
4188 }
4189 \f
4190
4191                                 /* Evaluation: Function Calls */
4192
4193 /* Return an lvalue containing the value VAL.  This is the identity on
4194    lvalues, and otherwise has the side-effect of allocating memory
4195    in the inferior where a copy of the value contents is copied.  */
4196
4197 static struct value *
4198 ensure_lval (struct value *val)
4199 {
4200   if (VALUE_LVAL (val) == not_lval
4201       || VALUE_LVAL (val) == lval_internalvar)
4202     {
4203       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4204       const CORE_ADDR addr =
4205         value_as_long (value_allocate_space_in_inferior (len));
4206
4207       set_value_address (val, addr);
4208       VALUE_LVAL (val) = lval_memory;
4209       write_memory (addr, value_contents (val), len);
4210     }
4211
4212   return val;
4213 }
4214
4215 /* Return the value ACTUAL, converted to be an appropriate value for a
4216    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4217    allocating any necessary descriptors (fat pointers), or copies of
4218    values not residing in memory, updating it as needed.  */
4219
4220 struct value *
4221 ada_convert_actual (struct value *actual, struct type *formal_type0)
4222 {
4223   struct type *actual_type = ada_check_typedef (value_type (actual));
4224   struct type *formal_type = ada_check_typedef (formal_type0);
4225   struct type *formal_target =
4226     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4227     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4228   struct type *actual_target =
4229     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4230     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4231
4232   if (ada_is_array_descriptor_type (formal_target)
4233       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4234     return make_array_descriptor (formal_type, actual);
4235   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4236            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4237     {
4238       struct value *result;
4239
4240       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4241           && ada_is_array_descriptor_type (actual_target))
4242         result = desc_data (actual);
4243       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4244         {
4245           if (VALUE_LVAL (actual) != lval_memory)
4246             {
4247               struct value *val;
4248
4249               actual_type = ada_check_typedef (value_type (actual));
4250               val = allocate_value (actual_type);
4251               memcpy ((char *) value_contents_raw (val),
4252                       (char *) value_contents (actual),
4253                       TYPE_LENGTH (actual_type));
4254               actual = ensure_lval (val);
4255             }
4256           result = value_addr (actual);
4257         }
4258       else
4259         return actual;
4260       return value_cast_pointers (formal_type, result, 0);
4261     }
4262   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4263     return ada_value_ind (actual);
4264
4265   return actual;
4266 }
4267
4268 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4269    type TYPE.  This is usually an inefficient no-op except on some targets
4270    (such as AVR) where the representation of a pointer and an address
4271    differs.  */
4272
4273 static CORE_ADDR
4274 value_pointer (struct value *value, struct type *type)
4275 {
4276   struct gdbarch *gdbarch = get_type_arch (type);
4277   unsigned len = TYPE_LENGTH (type);
4278   gdb_byte *buf = alloca (len);
4279   CORE_ADDR addr;
4280
4281   addr = value_address (value);
4282   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4283   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4284   return addr;
4285 }
4286
4287
4288 /* Push a descriptor of type TYPE for array value ARR on the stack at
4289    *SP, updating *SP to reflect the new descriptor.  Return either
4290    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4291    to-descriptor type rather than a descriptor type), a struct value *
4292    representing a pointer to this descriptor.  */
4293
4294 static struct value *
4295 make_array_descriptor (struct type *type, struct value *arr)
4296 {
4297   struct type *bounds_type = desc_bounds_type (type);
4298   struct type *desc_type = desc_base_type (type);
4299   struct value *descriptor = allocate_value (desc_type);
4300   struct value *bounds = allocate_value (bounds_type);
4301   int i;
4302
4303   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4304        i > 0; i -= 1)
4305     {
4306       modify_field (value_type (bounds), value_contents_writeable (bounds),
4307                     ada_array_bound (arr, i, 0),
4308                     desc_bound_bitpos (bounds_type, i, 0),
4309                     desc_bound_bitsize (bounds_type, i, 0));
4310       modify_field (value_type (bounds), value_contents_writeable (bounds),
4311                     ada_array_bound (arr, i, 1),
4312                     desc_bound_bitpos (bounds_type, i, 1),
4313                     desc_bound_bitsize (bounds_type, i, 1));
4314     }
4315
4316   bounds = ensure_lval (bounds);
4317
4318   modify_field (value_type (descriptor),
4319                 value_contents_writeable (descriptor),
4320                 value_pointer (ensure_lval (arr),
4321                                TYPE_FIELD_TYPE (desc_type, 0)),
4322                 fat_pntr_data_bitpos (desc_type),
4323                 fat_pntr_data_bitsize (desc_type));
4324
4325   modify_field (value_type (descriptor),
4326                 value_contents_writeable (descriptor),
4327                 value_pointer (bounds,
4328                                TYPE_FIELD_TYPE (desc_type, 1)),
4329                 fat_pntr_bounds_bitpos (desc_type),
4330                 fat_pntr_bounds_bitsize (desc_type));
4331
4332   descriptor = ensure_lval (descriptor);
4333
4334   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4335     return value_addr (descriptor);
4336   else
4337     return descriptor;
4338 }
4339 \f
4340                                 /* Symbol Cache Module */
4341
4342 /* Performance measurements made as of 2010-01-15 indicate that
4343    this cache does bring some noticeable improvements.  Depending
4344    on the type of entity being printed, the cache can make it as much
4345    as an order of magnitude faster than without it.
4346
4347    The descriptive type DWARF extension has significantly reduced
4348    the need for this cache, at least when DWARF is being used.  However,
4349    even in this case, some expensive name-based symbol searches are still
4350    sometimes necessary - to find an XVZ variable, mostly.  */
4351
4352 /* Initialize the contents of SYM_CACHE.  */
4353
4354 static void
4355 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4356 {
4357   obstack_init (&sym_cache->cache_space);
4358   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4359 }
4360
4361 /* Free the memory used by SYM_CACHE.  */
4362
4363 static void
4364 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4365 {
4366   obstack_free (&sym_cache->cache_space, NULL);
4367   xfree (sym_cache);
4368 }
4369
4370 /* Return the symbol cache associated to the given program space PSPACE.
4371    If not allocated for this PSPACE yet, allocate and initialize one.  */
4372
4373 static struct ada_symbol_cache *
4374 ada_get_symbol_cache (struct program_space *pspace)
4375 {
4376   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4377   struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4378
4379   if (sym_cache == NULL)
4380     {
4381       sym_cache = XCNEW (struct ada_symbol_cache);
4382       ada_init_symbol_cache (sym_cache);
4383     }
4384
4385   return sym_cache;
4386 }
4387
4388 /* Clear all entries from the symbol cache.  */
4389
4390 static void
4391 ada_clear_symbol_cache (void)
4392 {
4393   struct ada_symbol_cache *sym_cache
4394     = ada_get_symbol_cache (current_program_space);
4395
4396   obstack_free (&sym_cache->cache_space, NULL);
4397   ada_init_symbol_cache (sym_cache);
4398 }
4399
4400 /* Search our cache for an entry matching NAME and NAMESPACE.
4401    Return it if found, or NULL otherwise.  */
4402
4403 static struct cache_entry **
4404 find_entry (const char *name, domain_enum namespace)
4405 {
4406   struct ada_symbol_cache *sym_cache
4407     = ada_get_symbol_cache (current_program_space);
4408   int h = msymbol_hash (name) % HASH_SIZE;
4409   struct cache_entry **e;
4410
4411   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4412     {
4413       if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4414         return e;
4415     }
4416   return NULL;
4417 }
4418
4419 /* Search the symbol cache for an entry matching NAME and NAMESPACE.
4420    Return 1 if found, 0 otherwise.
4421
4422    If an entry was found and SYM is not NULL, set *SYM to the entry's
4423    SYM.  Same principle for BLOCK if not NULL.  */
4424
4425 static int
4426 lookup_cached_symbol (const char *name, domain_enum namespace,
4427                       struct symbol **sym, const struct block **block)
4428 {
4429   struct cache_entry **e = find_entry (name, namespace);
4430
4431   if (e == NULL)
4432     return 0;
4433   if (sym != NULL)
4434     *sym = (*e)->sym;
4435   if (block != NULL)
4436     *block = (*e)->block;
4437   return 1;
4438 }
4439
4440 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4441    in domain NAMESPACE, save this result in our symbol cache.  */
4442
4443 static void
4444 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
4445               const struct block *block)
4446 {
4447   struct ada_symbol_cache *sym_cache
4448     = ada_get_symbol_cache (current_program_space);
4449   int h;
4450   char *copy;
4451   struct cache_entry *e;
4452
4453   /* If the symbol is a local symbol, then do not cache it, as a search
4454      for that symbol depends on the context.  To determine whether
4455      the symbol is local or not, we check the block where we found it
4456      against the global and static blocks of its associated symtab.  */
4457   if (sym
4458       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), GLOBAL_BLOCK) != block
4459       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), STATIC_BLOCK) != block)
4460     return;
4461
4462   h = msymbol_hash (name) % HASH_SIZE;
4463   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4464                                             sizeof (*e));
4465   e->next = sym_cache->root[h];
4466   sym_cache->root[h] = e;
4467   e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4468   strcpy (copy, name);
4469   e->sym = sym;
4470   e->namespace = namespace;
4471   e->block = block;
4472 }
4473 \f
4474                                 /* Symbol Lookup */
4475
4476 /* Return nonzero if wild matching should be used when searching for
4477    all symbols matching LOOKUP_NAME.
4478
4479    LOOKUP_NAME is expected to be a symbol name after transformation
4480    for Ada lookups (see ada_name_for_lookup).  */
4481
4482 static int
4483 should_use_wild_match (const char *lookup_name)
4484 {
4485   return (strstr (lookup_name, "__") == NULL);
4486 }
4487
4488 /* Return the result of a standard (literal, C-like) lookup of NAME in
4489    given DOMAIN, visible from lexical block BLOCK.  */
4490
4491 static struct symbol *
4492 standard_lookup (const char *name, const struct block *block,
4493                  domain_enum domain)
4494 {
4495   /* Initialize it just to avoid a GCC false warning.  */
4496   struct symbol *sym = NULL;
4497
4498   if (lookup_cached_symbol (name, domain, &sym, NULL))
4499     return sym;
4500   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4501   cache_symbol (name, domain, sym, block_found);
4502   return sym;
4503 }
4504
4505
4506 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4507    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4508    since they contend in overloading in the same way.  */
4509 static int
4510 is_nonfunction (struct ada_symbol_info syms[], int n)
4511 {
4512   int i;
4513
4514   for (i = 0; i < n; i += 1)
4515     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4516         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4517             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4518       return 1;
4519
4520   return 0;
4521 }
4522
4523 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4524    struct types.  Otherwise, they may not.  */
4525
4526 static int
4527 equiv_types (struct type *type0, struct type *type1)
4528 {
4529   if (type0 == type1)
4530     return 1;
4531   if (type0 == NULL || type1 == NULL
4532       || TYPE_CODE (type0) != TYPE_CODE (type1))
4533     return 0;
4534   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4535        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4536       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4537       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4538     return 1;
4539
4540   return 0;
4541 }
4542
4543 /* True iff SYM0 represents the same entity as SYM1, or one that is
4544    no more defined than that of SYM1.  */
4545
4546 static int
4547 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4548 {
4549   if (sym0 == sym1)
4550     return 1;
4551   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4552       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4553     return 0;
4554
4555   switch (SYMBOL_CLASS (sym0))
4556     {
4557     case LOC_UNDEF:
4558       return 1;
4559     case LOC_TYPEDEF:
4560       {
4561         struct type *type0 = SYMBOL_TYPE (sym0);
4562         struct type *type1 = SYMBOL_TYPE (sym1);
4563         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4564         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4565         int len0 = strlen (name0);
4566
4567         return
4568           TYPE_CODE (type0) == TYPE_CODE (type1)
4569           && (equiv_types (type0, type1)
4570               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4571                   && strncmp (name1 + len0, "___XV", 5) == 0));
4572       }
4573     case LOC_CONST:
4574       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4575         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4576     default:
4577       return 0;
4578     }
4579 }
4580
4581 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4582    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4583
4584 static void
4585 add_defn_to_vec (struct obstack *obstackp,
4586                  struct symbol *sym,
4587                  const struct block *block)
4588 {
4589   int i;
4590   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4591
4592   /* Do not try to complete stub types, as the debugger is probably
4593      already scanning all symbols matching a certain name at the
4594      time when this function is called.  Trying to replace the stub
4595      type by its associated full type will cause us to restart a scan
4596      which may lead to an infinite recursion.  Instead, the client
4597      collecting the matching symbols will end up collecting several
4598      matches, with at least one of them complete.  It can then filter
4599      out the stub ones if needed.  */
4600
4601   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4602     {
4603       if (lesseq_defined_than (sym, prevDefns[i].sym))
4604         return;
4605       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4606         {
4607           prevDefns[i].sym = sym;
4608           prevDefns[i].block = block;
4609           return;
4610         }
4611     }
4612
4613   {
4614     struct ada_symbol_info info;
4615
4616     info.sym = sym;
4617     info.block = block;
4618     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4619   }
4620 }
4621
4622 /* Number of ada_symbol_info structures currently collected in 
4623    current vector in *OBSTACKP.  */
4624
4625 static int
4626 num_defns_collected (struct obstack *obstackp)
4627 {
4628   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4629 }
4630
4631 /* Vector of ada_symbol_info structures currently collected in current 
4632    vector in *OBSTACKP.  If FINISH, close off the vector and return
4633    its final address.  */
4634
4635 static struct ada_symbol_info *
4636 defns_collected (struct obstack *obstackp, int finish)
4637 {
4638   if (finish)
4639     return obstack_finish (obstackp);
4640   else
4641     return (struct ada_symbol_info *) obstack_base (obstackp);
4642 }
4643
4644 /* Return a bound minimal symbol matching NAME according to Ada
4645    decoding rules.  Returns an invalid symbol if there is no such
4646    minimal symbol.  Names prefixed with "standard__" are handled
4647    specially: "standard__" is first stripped off, and only static and
4648    global symbols are searched.  */
4649
4650 struct bound_minimal_symbol
4651 ada_lookup_simple_minsym (const char *name)
4652 {
4653   struct bound_minimal_symbol result;
4654   struct objfile *objfile;
4655   struct minimal_symbol *msymbol;
4656   const int wild_match_p = should_use_wild_match (name);
4657
4658   memset (&result, 0, sizeof (result));
4659
4660   /* Special case: If the user specifies a symbol name inside package
4661      Standard, do a non-wild matching of the symbol name without
4662      the "standard__" prefix.  This was primarily introduced in order
4663      to allow the user to specifically access the standard exceptions
4664      using, for instance, Standard.Constraint_Error when Constraint_Error
4665      is ambiguous (due to the user defining its own Constraint_Error
4666      entity inside its program).  */
4667   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4668     name += sizeof ("standard__") - 1;
4669
4670   ALL_MSYMBOLS (objfile, msymbol)
4671   {
4672     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4673         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4674       {
4675         result.minsym = msymbol;
4676         result.objfile = objfile;
4677         break;
4678       }
4679   }
4680
4681   return result;
4682 }
4683
4684 /* For all subprograms that statically enclose the subprogram of the
4685    selected frame, add symbols matching identifier NAME in DOMAIN
4686    and their blocks to the list of data in OBSTACKP, as for
4687    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4688    with a wildcard prefix.  */
4689
4690 static void
4691 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4692                                   const char *name, domain_enum namespace,
4693                                   int wild_match_p)
4694 {
4695 }
4696
4697 /* True if TYPE is definitely an artificial type supplied to a symbol
4698    for which no debugging information was given in the symbol file.  */
4699
4700 static int
4701 is_nondebugging_type (struct type *type)
4702 {
4703   const char *name = ada_type_name (type);
4704
4705   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4706 }
4707
4708 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4709    that are deemed "identical" for practical purposes.
4710
4711    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4712    types and that their number of enumerals is identical (in other
4713    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4714
4715 static int
4716 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4717 {
4718   int i;
4719
4720   /* The heuristic we use here is fairly conservative.  We consider
4721      that 2 enumerate types are identical if they have the same
4722      number of enumerals and that all enumerals have the same
4723      underlying value and name.  */
4724
4725   /* All enums in the type should have an identical underlying value.  */
4726   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4727     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4728       return 0;
4729
4730   /* All enumerals should also have the same name (modulo any numerical
4731      suffix).  */
4732   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4733     {
4734       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4735       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4736       int len_1 = strlen (name_1);
4737       int len_2 = strlen (name_2);
4738
4739       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4740       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4741       if (len_1 != len_2
4742           || strncmp (TYPE_FIELD_NAME (type1, i),
4743                       TYPE_FIELD_NAME (type2, i),
4744                       len_1) != 0)
4745         return 0;
4746     }
4747
4748   return 1;
4749 }
4750
4751 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4752    that are deemed "identical" for practical purposes.  Sometimes,
4753    enumerals are not strictly identical, but their types are so similar
4754    that they can be considered identical.
4755
4756    For instance, consider the following code:
4757
4758       type Color is (Black, Red, Green, Blue, White);
4759       type RGB_Color is new Color range Red .. Blue;
4760
4761    Type RGB_Color is a subrange of an implicit type which is a copy
4762    of type Color. If we call that implicit type RGB_ColorB ("B" is
4763    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4764    As a result, when an expression references any of the enumeral
4765    by name (Eg. "print green"), the expression is technically
4766    ambiguous and the user should be asked to disambiguate. But
4767    doing so would only hinder the user, since it wouldn't matter
4768    what choice he makes, the outcome would always be the same.
4769    So, for practical purposes, we consider them as the same.  */
4770
4771 static int
4772 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4773 {
4774   int i;
4775
4776   /* Before performing a thorough comparison check of each type,
4777      we perform a series of inexpensive checks.  We expect that these
4778      checks will quickly fail in the vast majority of cases, and thus
4779      help prevent the unnecessary use of a more expensive comparison.
4780      Said comparison also expects us to make some of these checks
4781      (see ada_identical_enum_types_p).  */
4782
4783   /* Quick check: All symbols should have an enum type.  */
4784   for (i = 0; i < nsyms; i++)
4785     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4786       return 0;
4787
4788   /* Quick check: They should all have the same value.  */
4789   for (i = 1; i < nsyms; i++)
4790     if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4791       return 0;
4792
4793   /* Quick check: They should all have the same number of enumerals.  */
4794   for (i = 1; i < nsyms; i++)
4795     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4796         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4797       return 0;
4798
4799   /* All the sanity checks passed, so we might have a set of
4800      identical enumeration types.  Perform a more complete
4801      comparison of the type of each symbol.  */
4802   for (i = 1; i < nsyms; i++)
4803     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4804                                      SYMBOL_TYPE (syms[0].sym)))
4805       return 0;
4806
4807   return 1;
4808 }
4809
4810 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4811    duplicate other symbols in the list (The only case I know of where
4812    this happens is when object files containing stabs-in-ecoff are
4813    linked with files containing ordinary ecoff debugging symbols (or no
4814    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4815    Returns the number of items in the modified list.  */
4816
4817 static int
4818 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4819 {
4820   int i, j;
4821
4822   /* We should never be called with less than 2 symbols, as there
4823      cannot be any extra symbol in that case.  But it's easy to
4824      handle, since we have nothing to do in that case.  */
4825   if (nsyms < 2)
4826     return nsyms;
4827
4828   i = 0;
4829   while (i < nsyms)
4830     {
4831       int remove_p = 0;
4832
4833       /* If two symbols have the same name and one of them is a stub type,
4834          the get rid of the stub.  */
4835
4836       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4837           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4838         {
4839           for (j = 0; j < nsyms; j++)
4840             {
4841               if (j != i
4842                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4843                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4844                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4845                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4846                 remove_p = 1;
4847             }
4848         }
4849
4850       /* Two symbols with the same name, same class and same address
4851          should be identical.  */
4852
4853       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4854           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4855           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4856         {
4857           for (j = 0; j < nsyms; j += 1)
4858             {
4859               if (i != j
4860                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4861                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4862                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4863                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4864                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4865                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4866                 remove_p = 1;
4867             }
4868         }
4869       
4870       if (remove_p)
4871         {
4872           for (j = i + 1; j < nsyms; j += 1)
4873             syms[j - 1] = syms[j];
4874           nsyms -= 1;
4875         }
4876
4877       i += 1;
4878     }
4879
4880   /* If all the remaining symbols are identical enumerals, then
4881      just keep the first one and discard the rest.
4882
4883      Unlike what we did previously, we do not discard any entry
4884      unless they are ALL identical.  This is because the symbol
4885      comparison is not a strict comparison, but rather a practical
4886      comparison.  If all symbols are considered identical, then
4887      we can just go ahead and use the first one and discard the rest.
4888      But if we cannot reduce the list to a single element, we have
4889      to ask the user to disambiguate anyways.  And if we have to
4890      present a multiple-choice menu, it's less confusing if the list
4891      isn't missing some choices that were identical and yet distinct.  */
4892   if (symbols_are_identical_enums (syms, nsyms))
4893     nsyms = 1;
4894
4895   return nsyms;
4896 }
4897
4898 /* Given a type that corresponds to a renaming entity, use the type name
4899    to extract the scope (package name or function name, fully qualified,
4900    and following the GNAT encoding convention) where this renaming has been
4901    defined.  The string returned needs to be deallocated after use.  */
4902
4903 static char *
4904 xget_renaming_scope (struct type *renaming_type)
4905 {
4906   /* The renaming types adhere to the following convention:
4907      <scope>__<rename>___<XR extension>.
4908      So, to extract the scope, we search for the "___XR" extension,
4909      and then backtrack until we find the first "__".  */
4910
4911   const char *name = type_name_no_tag (renaming_type);
4912   char *suffix = strstr (name, "___XR");
4913   char *last;
4914   int scope_len;
4915   char *scope;
4916
4917   /* Now, backtrack a bit until we find the first "__".  Start looking
4918      at suffix - 3, as the <rename> part is at least one character long.  */
4919
4920   for (last = suffix - 3; last > name; last--)
4921     if (last[0] == '_' && last[1] == '_')
4922       break;
4923
4924   /* Make a copy of scope and return it.  */
4925
4926   scope_len = last - name;
4927   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4928
4929   strncpy (scope, name, scope_len);
4930   scope[scope_len] = '\0';
4931
4932   return scope;
4933 }
4934
4935 /* Return nonzero if NAME corresponds to a package name.  */
4936
4937 static int
4938 is_package_name (const char *name)
4939 {
4940   /* Here, We take advantage of the fact that no symbols are generated
4941      for packages, while symbols are generated for each function.
4942      So the condition for NAME represent a package becomes equivalent
4943      to NAME not existing in our list of symbols.  There is only one
4944      small complication with library-level functions (see below).  */
4945
4946   char *fun_name;
4947
4948   /* If it is a function that has not been defined at library level,
4949      then we should be able to look it up in the symbols.  */
4950   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4951     return 0;
4952
4953   /* Library-level function names start with "_ada_".  See if function
4954      "_ada_" followed by NAME can be found.  */
4955
4956   /* Do a quick check that NAME does not contain "__", since library-level
4957      functions names cannot contain "__" in them.  */
4958   if (strstr (name, "__") != NULL)
4959     return 0;
4960
4961   fun_name = xstrprintf ("_ada_%s", name);
4962
4963   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4964 }
4965
4966 /* Return nonzero if SYM corresponds to a renaming entity that is
4967    not visible from FUNCTION_NAME.  */
4968
4969 static int
4970 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
4971 {
4972   char *scope;
4973   struct cleanup *old_chain;
4974
4975   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4976     return 0;
4977
4978   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4979   old_chain = make_cleanup (xfree, scope);
4980
4981   /* If the rename has been defined in a package, then it is visible.  */
4982   if (is_package_name (scope))
4983     {
4984       do_cleanups (old_chain);
4985       return 0;
4986     }
4987
4988   /* Check that the rename is in the current function scope by checking
4989      that its name starts with SCOPE.  */
4990
4991   /* If the function name starts with "_ada_", it means that it is
4992      a library-level function.  Strip this prefix before doing the
4993      comparison, as the encoding for the renaming does not contain
4994      this prefix.  */
4995   if (strncmp (function_name, "_ada_", 5) == 0)
4996     function_name += 5;
4997
4998   {
4999     int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
5000
5001     do_cleanups (old_chain);
5002     return is_invisible;
5003   }
5004 }
5005
5006 /* Remove entries from SYMS that corresponds to a renaming entity that
5007    is not visible from the function associated with CURRENT_BLOCK or
5008    that is superfluous due to the presence of more specific renaming
5009    information.  Places surviving symbols in the initial entries of
5010    SYMS and returns the number of surviving symbols.
5011    
5012    Rationale:
5013    First, in cases where an object renaming is implemented as a
5014    reference variable, GNAT may produce both the actual reference
5015    variable and the renaming encoding.  In this case, we discard the
5016    latter.
5017
5018    Second, GNAT emits a type following a specified encoding for each renaming
5019    entity.  Unfortunately, STABS currently does not support the definition
5020    of types that are local to a given lexical block, so all renamings types
5021    are emitted at library level.  As a consequence, if an application
5022    contains two renaming entities using the same name, and a user tries to
5023    print the value of one of these entities, the result of the ada symbol
5024    lookup will also contain the wrong renaming type.
5025
5026    This function partially covers for this limitation by attempting to
5027    remove from the SYMS list renaming symbols that should be visible
5028    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5029    method with the current information available.  The implementation
5030    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5031    
5032       - When the user tries to print a rename in a function while there
5033         is another rename entity defined in a package:  Normally, the
5034         rename in the function has precedence over the rename in the
5035         package, so the latter should be removed from the list.  This is
5036         currently not the case.
5037         
5038       - This function will incorrectly remove valid renames if
5039         the CURRENT_BLOCK corresponds to a function which symbol name
5040         has been changed by an "Export" pragma.  As a consequence,
5041         the user will be unable to print such rename entities.  */
5042
5043 static int
5044 remove_irrelevant_renamings (struct ada_symbol_info *syms,
5045                              int nsyms, const struct block *current_block)
5046 {
5047   struct symbol *current_function;
5048   const char *current_function_name;
5049   int i;
5050   int is_new_style_renaming;
5051
5052   /* If there is both a renaming foo___XR... encoded as a variable and
5053      a simple variable foo in the same block, discard the latter.
5054      First, zero out such symbols, then compress.  */
5055   is_new_style_renaming = 0;
5056   for (i = 0; i < nsyms; i += 1)
5057     {
5058       struct symbol *sym = syms[i].sym;
5059       const struct block *block = syms[i].block;
5060       const char *name;
5061       const char *suffix;
5062
5063       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5064         continue;
5065       name = SYMBOL_LINKAGE_NAME (sym);
5066       suffix = strstr (name, "___XR");
5067
5068       if (suffix != NULL)
5069         {
5070           int name_len = suffix - name;
5071           int j;
5072
5073           is_new_style_renaming = 1;
5074           for (j = 0; j < nsyms; j += 1)
5075             if (i != j && syms[j].sym != NULL
5076                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5077                             name_len) == 0
5078                 && block == syms[j].block)
5079               syms[j].sym = NULL;
5080         }
5081     }
5082   if (is_new_style_renaming)
5083     {
5084       int j, k;
5085
5086       for (j = k = 0; j < nsyms; j += 1)
5087         if (syms[j].sym != NULL)
5088             {
5089               syms[k] = syms[j];
5090               k += 1;
5091             }
5092       return k;
5093     }
5094
5095   /* Extract the function name associated to CURRENT_BLOCK.
5096      Abort if unable to do so.  */
5097
5098   if (current_block == NULL)
5099     return nsyms;
5100
5101   current_function = block_linkage_function (current_block);
5102   if (current_function == NULL)
5103     return nsyms;
5104
5105   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5106   if (current_function_name == NULL)
5107     return nsyms;
5108
5109   /* Check each of the symbols, and remove it from the list if it is
5110      a type corresponding to a renaming that is out of the scope of
5111      the current block.  */
5112
5113   i = 0;
5114   while (i < nsyms)
5115     {
5116       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5117           == ADA_OBJECT_RENAMING
5118           && old_renaming_is_invisible (syms[i].sym, current_function_name))
5119         {
5120           int j;
5121
5122           for (j = i + 1; j < nsyms; j += 1)
5123             syms[j - 1] = syms[j];
5124           nsyms -= 1;
5125         }
5126       else
5127         i += 1;
5128     }
5129
5130   return nsyms;
5131 }
5132
5133 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5134    whose name and domain match NAME and DOMAIN respectively.
5135    If no match was found, then extend the search to "enclosing"
5136    routines (in other words, if we're inside a nested function,
5137    search the symbols defined inside the enclosing functions).
5138    If WILD_MATCH_P is nonzero, perform the naming matching in
5139    "wild" mode (see function "wild_match" for more info).
5140
5141    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5142
5143 static void
5144 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5145                        const struct block *block, domain_enum domain,
5146                        int wild_match_p)
5147 {
5148   int block_depth = 0;
5149
5150   while (block != NULL)
5151     {
5152       block_depth += 1;
5153       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5154                              wild_match_p);
5155
5156       /* If we found a non-function match, assume that's the one.  */
5157       if (is_nonfunction (defns_collected (obstackp, 0),
5158                           num_defns_collected (obstackp)))
5159         return;
5160
5161       block = BLOCK_SUPERBLOCK (block);
5162     }
5163
5164   /* If no luck so far, try to find NAME as a local symbol in some lexically
5165      enclosing subprogram.  */
5166   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5167     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5168 }
5169
5170 /* An object of this type is used as the user_data argument when
5171    calling the map_matching_symbols method.  */
5172
5173 struct match_data
5174 {
5175   struct objfile *objfile;
5176   struct obstack *obstackp;
5177   struct symbol *arg_sym;
5178   int found_sym;
5179 };
5180
5181 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5182    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5183    containing the obstack that collects the symbol list, the file that SYM
5184    must come from, a flag indicating whether a non-argument symbol has
5185    been found in the current block, and the last argument symbol
5186    passed in SYM within the current block (if any).  When SYM is null,
5187    marking the end of a block, the argument symbol is added if no
5188    other has been found.  */
5189
5190 static int
5191 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5192 {
5193   struct match_data *data = (struct match_data *) data0;
5194   
5195   if (sym == NULL)
5196     {
5197       if (!data->found_sym && data->arg_sym != NULL) 
5198         add_defn_to_vec (data->obstackp,
5199                          fixup_symbol_section (data->arg_sym, data->objfile),
5200                          block);
5201       data->found_sym = 0;
5202       data->arg_sym = NULL;
5203     }
5204   else 
5205     {
5206       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5207         return 0;
5208       else if (SYMBOL_IS_ARGUMENT (sym))
5209         data->arg_sym = sym;
5210       else
5211         {
5212           data->found_sym = 1;
5213           add_defn_to_vec (data->obstackp,
5214                            fixup_symbol_section (sym, data->objfile),
5215                            block);
5216         }
5217     }
5218   return 0;
5219 }
5220
5221 /* Implements compare_names, but only applying the comparision using
5222    the given CASING.  */
5223
5224 static int
5225 compare_names_with_case (const char *string1, const char *string2,
5226                          enum case_sensitivity casing)
5227 {
5228   while (*string1 != '\0' && *string2 != '\0')
5229     {
5230       char c1, c2;
5231
5232       if (isspace (*string1) || isspace (*string2))
5233         return strcmp_iw_ordered (string1, string2);
5234
5235       if (casing == case_sensitive_off)
5236         {
5237           c1 = tolower (*string1);
5238           c2 = tolower (*string2);
5239         }
5240       else
5241         {
5242           c1 = *string1;
5243           c2 = *string2;
5244         }
5245       if (c1 != c2)
5246         break;
5247
5248       string1 += 1;
5249       string2 += 1;
5250     }
5251
5252   switch (*string1)
5253     {
5254     case '(':
5255       return strcmp_iw_ordered (string1, string2);
5256     case '_':
5257       if (*string2 == '\0')
5258         {
5259           if (is_name_suffix (string1))
5260             return 0;
5261           else
5262             return 1;
5263         }
5264       /* FALLTHROUGH */
5265     default:
5266       if (*string2 == '(')
5267         return strcmp_iw_ordered (string1, string2);
5268       else
5269         {
5270           if (casing == case_sensitive_off)
5271             return tolower (*string1) - tolower (*string2);
5272           else
5273             return *string1 - *string2;
5274         }
5275     }
5276 }
5277
5278 /* Compare STRING1 to STRING2, with results as for strcmp.
5279    Compatible with strcmp_iw_ordered in that...
5280
5281        strcmp_iw_ordered (STRING1, STRING2) <= 0
5282
5283    ... implies...
5284
5285        compare_names (STRING1, STRING2) <= 0
5286
5287    (they may differ as to what symbols compare equal).  */
5288
5289 static int
5290 compare_names (const char *string1, const char *string2)
5291 {
5292   int result;
5293
5294   /* Similar to what strcmp_iw_ordered does, we need to perform
5295      a case-insensitive comparison first, and only resort to
5296      a second, case-sensitive, comparison if the first one was
5297      not sufficient to differentiate the two strings.  */
5298
5299   result = compare_names_with_case (string1, string2, case_sensitive_off);
5300   if (result == 0)
5301     result = compare_names_with_case (string1, string2, case_sensitive_on);
5302
5303   return result;
5304 }
5305
5306 /* Add to OBSTACKP all non-local symbols whose name and domain match
5307    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5308    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5309
5310 static void
5311 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5312                       domain_enum domain, int global,
5313                       int is_wild_match)
5314 {
5315   struct objfile *objfile;
5316   struct match_data data;
5317
5318   memset (&data, 0, sizeof data);
5319   data.obstackp = obstackp;
5320
5321   ALL_OBJFILES (objfile)
5322     {
5323       data.objfile = objfile;
5324
5325       if (is_wild_match)
5326         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5327                                                aux_add_nonlocal_symbols, &data,
5328                                                wild_match, NULL);
5329       else
5330         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5331                                                aux_add_nonlocal_symbols, &data,
5332                                                full_match, compare_names);
5333     }
5334
5335   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5336     {
5337       ALL_OBJFILES (objfile)
5338         {
5339           char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5340           strcpy (name1, "_ada_");
5341           strcpy (name1 + sizeof ("_ada_") - 1, name);
5342           data.objfile = objfile;
5343           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5344                                                  global,
5345                                                  aux_add_nonlocal_symbols,
5346                                                  &data,
5347                                                  full_match, compare_names);
5348         }
5349     }           
5350 }
5351
5352 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5353    non-zero, enclosing scope and in global scopes, returning the number of
5354    matches.
5355    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5356    indicating the symbols found and the blocks and symbol tables (if
5357    any) in which they were found.  This vector is transient---good only to
5358    the next call of ada_lookup_symbol_list.
5359
5360    When full_search is non-zero, any non-function/non-enumeral
5361    symbol match within the nest of blocks whose innermost member is BLOCK0,
5362    is the one match returned (no other matches in that or
5363    enclosing blocks is returned).  If there are any matches in or
5364    surrounding BLOCK0, then these alone are returned.
5365
5366    Names prefixed with "standard__" are handled specially: "standard__"
5367    is first stripped off, and only static and global symbols are searched.  */
5368
5369 static int
5370 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5371                                domain_enum namespace,
5372                                struct ada_symbol_info **results,
5373                                int full_search)
5374 {
5375   struct symbol *sym;
5376   const struct block *block;
5377   const char *name;
5378   const int wild_match_p = should_use_wild_match (name0);
5379   int cacheIfUnique;
5380   int ndefns;
5381
5382   obstack_free (&symbol_list_obstack, NULL);
5383   obstack_init (&symbol_list_obstack);
5384
5385   cacheIfUnique = 0;
5386
5387   /* Search specified block and its superiors.  */
5388
5389   name = name0;
5390   block = block0;
5391
5392   /* Special case: If the user specifies a symbol name inside package
5393      Standard, do a non-wild matching of the symbol name without
5394      the "standard__" prefix.  This was primarily introduced in order
5395      to allow the user to specifically access the standard exceptions
5396      using, for instance, Standard.Constraint_Error when Constraint_Error
5397      is ambiguous (due to the user defining its own Constraint_Error
5398      entity inside its program).  */
5399   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5400     {
5401       block = NULL;
5402       name = name0 + sizeof ("standard__") - 1;
5403     }
5404
5405   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5406
5407   if (block != NULL)
5408     {
5409       if (full_search)
5410         {
5411           ada_add_local_symbols (&symbol_list_obstack, name, block,
5412                                  namespace, wild_match_p);
5413         }
5414       else
5415         {
5416           /* In the !full_search case we're are being called by
5417              ada_iterate_over_symbols, and we don't want to search
5418              superblocks.  */
5419           ada_add_block_symbols (&symbol_list_obstack, block, name,
5420                                  namespace, NULL, wild_match_p);
5421         }
5422       if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5423         goto done;
5424     }
5425
5426   /* No non-global symbols found.  Check our cache to see if we have
5427      already performed this search before.  If we have, then return
5428      the same result.  */
5429
5430   cacheIfUnique = 1;
5431   if (lookup_cached_symbol (name0, namespace, &sym, &block))
5432     {
5433       if (sym != NULL)
5434         add_defn_to_vec (&symbol_list_obstack, sym, block);
5435       goto done;
5436     }
5437
5438   /* Search symbols from all global blocks.  */
5439  
5440   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5441                         wild_match_p);
5442
5443   /* Now add symbols from all per-file blocks if we've gotten no hits
5444      (not strictly correct, but perhaps better than an error).  */
5445
5446   if (num_defns_collected (&symbol_list_obstack) == 0)
5447     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5448                           wild_match_p);
5449
5450 done:
5451   ndefns = num_defns_collected (&symbol_list_obstack);
5452   *results = defns_collected (&symbol_list_obstack, 1);
5453
5454   ndefns = remove_extra_symbols (*results, ndefns);
5455
5456   if (ndefns == 0 && full_search)
5457     cache_symbol (name0, namespace, NULL, NULL);
5458
5459   if (ndefns == 1 && full_search && cacheIfUnique)
5460     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
5461
5462   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5463
5464   return ndefns;
5465 }
5466
5467 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5468    in global scopes, returning the number of matches, and setting *RESULTS
5469    to a vector of (SYM,BLOCK) tuples.
5470    See ada_lookup_symbol_list_worker for further details.  */
5471
5472 int
5473 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5474                         domain_enum domain, struct ada_symbol_info **results)
5475 {
5476   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5477 }
5478
5479 /* Implementation of the la_iterate_over_symbols method.  */
5480
5481 static void
5482 ada_iterate_over_symbols (const struct block *block,
5483                           const char *name, domain_enum domain,
5484                           symbol_found_callback_ftype *callback,
5485                           void *data)
5486 {
5487   int ndefs, i;
5488   struct ada_symbol_info *results;
5489
5490   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5491   for (i = 0; i < ndefs; ++i)
5492     {
5493       if (! (*callback) (results[i].sym, data))
5494         break;
5495     }
5496 }
5497
5498 /* If NAME is the name of an entity, return a string that should
5499    be used to look that entity up in Ada units.  This string should
5500    be deallocated after use using xfree.
5501
5502    NAME can have any form that the "break" or "print" commands might
5503    recognize.  In other words, it does not have to be the "natural"
5504    name, or the "encoded" name.  */
5505
5506 char *
5507 ada_name_for_lookup (const char *name)
5508 {
5509   char *canon;
5510   int nlen = strlen (name);
5511
5512   if (name[0] == '<' && name[nlen - 1] == '>')
5513     {
5514       canon = xmalloc (nlen - 1);
5515       memcpy (canon, name + 1, nlen - 2);
5516       canon[nlen - 2] = '\0';
5517     }
5518   else
5519     canon = xstrdup (ada_encode (ada_fold_name (name)));
5520   return canon;
5521 }
5522
5523 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5524    to 1, but choosing the first symbol found if there are multiple
5525    choices.
5526
5527    The result is stored in *INFO, which must be non-NULL.
5528    If no match is found, INFO->SYM is set to NULL.  */
5529
5530 void
5531 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5532                            domain_enum namespace,
5533                            struct ada_symbol_info *info)
5534 {
5535   struct ada_symbol_info *candidates;
5536   int n_candidates;
5537
5538   gdb_assert (info != NULL);
5539   memset (info, 0, sizeof (struct ada_symbol_info));
5540
5541   n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
5542   if (n_candidates == 0)
5543     return;
5544
5545   *info = candidates[0];
5546   info->sym = fixup_symbol_section (info->sym, NULL);
5547 }
5548
5549 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5550    scope and in global scopes, or NULL if none.  NAME is folded and
5551    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5552    choosing the first symbol if there are multiple choices.
5553    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5554
5555 struct symbol *
5556 ada_lookup_symbol (const char *name, const struct block *block0,
5557                    domain_enum namespace, int *is_a_field_of_this)
5558 {
5559   struct ada_symbol_info info;
5560
5561   if (is_a_field_of_this != NULL)
5562     *is_a_field_of_this = 0;
5563
5564   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5565                              block0, namespace, &info);
5566   return info.sym;
5567 }
5568
5569 static struct symbol *
5570 ada_lookup_symbol_nonlocal (const char *name,
5571                             const struct block *block,
5572                             const domain_enum domain)
5573 {
5574   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5575 }
5576
5577
5578 /* True iff STR is a possible encoded suffix of a normal Ada name
5579    that is to be ignored for matching purposes.  Suffixes of parallel
5580    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5581    are given by any of the regular expressions:
5582
5583    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5584    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5585    TKB              [subprogram suffix for task bodies]
5586    _E[0-9]+[bs]$    [protected object entry suffixes]
5587    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5588
5589    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5590    match is performed.  This sequence is used to differentiate homonyms,
5591    is an optional part of a valid name suffix.  */
5592
5593 static int
5594 is_name_suffix (const char *str)
5595 {
5596   int k;
5597   const char *matching;
5598   const int len = strlen (str);
5599
5600   /* Skip optional leading __[0-9]+.  */
5601
5602   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5603     {
5604       str += 3;
5605       while (isdigit (str[0]))
5606         str += 1;
5607     }
5608   
5609   /* [.$][0-9]+ */
5610
5611   if (str[0] == '.' || str[0] == '$')
5612     {
5613       matching = str + 1;
5614       while (isdigit (matching[0]))
5615         matching += 1;
5616       if (matching[0] == '\0')
5617         return 1;
5618     }
5619
5620   /* ___[0-9]+ */
5621
5622   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5623     {
5624       matching = str + 3;
5625       while (isdigit (matching[0]))
5626         matching += 1;
5627       if (matching[0] == '\0')
5628         return 1;
5629     }
5630
5631   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5632
5633   if (strcmp (str, "TKB") == 0)
5634     return 1;
5635
5636 #if 0
5637   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5638      with a N at the end.  Unfortunately, the compiler uses the same
5639      convention for other internal types it creates.  So treating
5640      all entity names that end with an "N" as a name suffix causes
5641      some regressions.  For instance, consider the case of an enumerated
5642      type.  To support the 'Image attribute, it creates an array whose
5643      name ends with N.
5644      Having a single character like this as a suffix carrying some
5645      information is a bit risky.  Perhaps we should change the encoding
5646      to be something like "_N" instead.  In the meantime, do not do
5647      the following check.  */
5648   /* Protected Object Subprograms */
5649   if (len == 1 && str [0] == 'N')
5650     return 1;
5651 #endif
5652
5653   /* _E[0-9]+[bs]$ */
5654   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5655     {
5656       matching = str + 3;
5657       while (isdigit (matching[0]))
5658         matching += 1;
5659       if ((matching[0] == 'b' || matching[0] == 's')
5660           && matching [1] == '\0')
5661         return 1;
5662     }
5663
5664   /* ??? We should not modify STR directly, as we are doing below.  This
5665      is fine in this case, but may become problematic later if we find
5666      that this alternative did not work, and want to try matching
5667      another one from the begining of STR.  Since we modified it, we
5668      won't be able to find the begining of the string anymore!  */
5669   if (str[0] == 'X')
5670     {
5671       str += 1;
5672       while (str[0] != '_' && str[0] != '\0')
5673         {
5674           if (str[0] != 'n' && str[0] != 'b')
5675             return 0;
5676           str += 1;
5677         }
5678     }
5679
5680   if (str[0] == '\000')
5681     return 1;
5682
5683   if (str[0] == '_')
5684     {
5685       if (str[1] != '_' || str[2] == '\000')
5686         return 0;
5687       if (str[2] == '_')
5688         {
5689           if (strcmp (str + 3, "JM") == 0)
5690             return 1;
5691           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5692              the LJM suffix in favor of the JM one.  But we will
5693              still accept LJM as a valid suffix for a reasonable
5694              amount of time, just to allow ourselves to debug programs
5695              compiled using an older version of GNAT.  */
5696           if (strcmp (str + 3, "LJM") == 0)
5697             return 1;
5698           if (str[3] != 'X')
5699             return 0;
5700           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5701               || str[4] == 'U' || str[4] == 'P')
5702             return 1;
5703           if (str[4] == 'R' && str[5] != 'T')
5704             return 1;
5705           return 0;
5706         }
5707       if (!isdigit (str[2]))
5708         return 0;
5709       for (k = 3; str[k] != '\0'; k += 1)
5710         if (!isdigit (str[k]) && str[k] != '_')
5711           return 0;
5712       return 1;
5713     }
5714   if (str[0] == '$' && isdigit (str[1]))
5715     {
5716       for (k = 2; str[k] != '\0'; k += 1)
5717         if (!isdigit (str[k]) && str[k] != '_')
5718           return 0;
5719       return 1;
5720     }
5721   return 0;
5722 }
5723
5724 /* Return non-zero if the string starting at NAME and ending before
5725    NAME_END contains no capital letters.  */
5726
5727 static int
5728 is_valid_name_for_wild_match (const char *name0)
5729 {
5730   const char *decoded_name = ada_decode (name0);
5731   int i;
5732
5733   /* If the decoded name starts with an angle bracket, it means that
5734      NAME0 does not follow the GNAT encoding format.  It should then
5735      not be allowed as a possible wild match.  */
5736   if (decoded_name[0] == '<')
5737     return 0;
5738
5739   for (i=0; decoded_name[i] != '\0'; i++)
5740     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5741       return 0;
5742
5743   return 1;
5744 }
5745
5746 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5747    that could start a simple name.  Assumes that *NAMEP points into
5748    the string beginning at NAME0.  */
5749
5750 static int
5751 advance_wild_match (const char **namep, const char *name0, int target0)
5752 {
5753   const char *name = *namep;
5754
5755   while (1)
5756     {
5757       int t0, t1;
5758
5759       t0 = *name;
5760       if (t0 == '_')
5761         {
5762           t1 = name[1];
5763           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5764             {
5765               name += 1;
5766               if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5767                 break;
5768               else
5769                 name += 1;
5770             }
5771           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5772                                  || name[2] == target0))
5773             {
5774               name += 2;
5775               break;
5776             }
5777           else
5778             return 0;
5779         }
5780       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5781         name += 1;
5782       else
5783         return 0;
5784     }
5785
5786   *namep = name;
5787   return 1;
5788 }
5789
5790 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5791    informational suffixes of NAME (i.e., for which is_name_suffix is
5792    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5793
5794 static int
5795 wild_match (const char *name, const char *patn)
5796 {
5797   const char *p;
5798   const char *name0 = name;
5799
5800   while (1)
5801     {
5802       const char *match = name;
5803
5804       if (*name == *patn)
5805         {
5806           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5807             if (*p != *name)
5808               break;
5809           if (*p == '\0' && is_name_suffix (name))
5810             return match != name0 && !is_valid_name_for_wild_match (name0);
5811
5812           if (name[-1] == '_')
5813             name -= 1;
5814         }
5815       if (!advance_wild_match (&name, name0, *patn))
5816         return 1;
5817     }
5818 }
5819
5820 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5821    informational suffix.  */
5822
5823 static int
5824 full_match (const char *sym_name, const char *search_name)
5825 {
5826   return !match_name (sym_name, search_name, 0);
5827 }
5828
5829
5830 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5831    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5832    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5833    OBJFILE is the section containing BLOCK.  */
5834
5835 static void
5836 ada_add_block_symbols (struct obstack *obstackp,
5837                        const struct block *block, const char *name,
5838                        domain_enum domain, struct objfile *objfile,
5839                        int wild)
5840 {
5841   struct block_iterator iter;
5842   int name_len = strlen (name);
5843   /* A matching argument symbol, if any.  */
5844   struct symbol *arg_sym;
5845   /* Set true when we find a matching non-argument symbol.  */
5846   int found_sym;
5847   struct symbol *sym;
5848
5849   arg_sym = NULL;
5850   found_sym = 0;
5851   if (wild)
5852     {
5853       for (sym = block_iter_match_first (block, name, wild_match, &iter);
5854            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5855       {
5856         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5857                                    SYMBOL_DOMAIN (sym), domain)
5858             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5859           {
5860             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5861               continue;
5862             else if (SYMBOL_IS_ARGUMENT (sym))
5863               arg_sym = sym;
5864             else
5865               {
5866                 found_sym = 1;
5867                 add_defn_to_vec (obstackp,
5868                                  fixup_symbol_section (sym, objfile),
5869                                  block);
5870               }
5871           }
5872       }
5873     }
5874   else
5875     {
5876      for (sym = block_iter_match_first (block, name, full_match, &iter);
5877           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5878       {
5879         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5880                                    SYMBOL_DOMAIN (sym), domain))
5881           {
5882             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5883               {
5884                 if (SYMBOL_IS_ARGUMENT (sym))
5885                   arg_sym = sym;
5886                 else
5887                   {
5888                     found_sym = 1;
5889                     add_defn_to_vec (obstackp,
5890                                      fixup_symbol_section (sym, objfile),
5891                                      block);
5892                   }
5893               }
5894           }
5895       }
5896     }
5897
5898   if (!found_sym && arg_sym != NULL)
5899     {
5900       add_defn_to_vec (obstackp,
5901                        fixup_symbol_section (arg_sym, objfile),
5902                        block);
5903     }
5904
5905   if (!wild)
5906     {
5907       arg_sym = NULL;
5908       found_sym = 0;
5909
5910       ALL_BLOCK_SYMBOLS (block, iter, sym)
5911       {
5912         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5913                                    SYMBOL_DOMAIN (sym), domain))
5914           {
5915             int cmp;
5916
5917             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5918             if (cmp == 0)
5919               {
5920                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5921                 if (cmp == 0)
5922                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5923                                  name_len);
5924               }
5925
5926             if (cmp == 0
5927                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5928               {
5929                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5930                   {
5931                     if (SYMBOL_IS_ARGUMENT (sym))
5932                       arg_sym = sym;
5933                     else
5934                       {
5935                         found_sym = 1;
5936                         add_defn_to_vec (obstackp,
5937                                          fixup_symbol_section (sym, objfile),
5938                                          block);
5939                       }
5940                   }
5941               }
5942           }
5943       }
5944
5945       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5946          They aren't parameters, right?  */
5947       if (!found_sym && arg_sym != NULL)
5948         {
5949           add_defn_to_vec (obstackp,
5950                            fixup_symbol_section (arg_sym, objfile),
5951                            block);
5952         }
5953     }
5954 }
5955 \f
5956
5957                                 /* Symbol Completion */
5958
5959 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5960    name in a form that's appropriate for the completion.  The result
5961    does not need to be deallocated, but is only good until the next call.
5962
5963    TEXT_LEN is equal to the length of TEXT.
5964    Perform a wild match if WILD_MATCH_P is set.
5965    ENCODED_P should be set if TEXT represents the start of a symbol name
5966    in its encoded form.  */
5967
5968 static const char *
5969 symbol_completion_match (const char *sym_name,
5970                          const char *text, int text_len,
5971                          int wild_match_p, int encoded_p)
5972 {
5973   const int verbatim_match = (text[0] == '<');
5974   int match = 0;
5975
5976   if (verbatim_match)
5977     {
5978       /* Strip the leading angle bracket.  */
5979       text = text + 1;
5980       text_len--;
5981     }
5982
5983   /* First, test against the fully qualified name of the symbol.  */
5984
5985   if (strncmp (sym_name, text, text_len) == 0)
5986     match = 1;
5987
5988   if (match && !encoded_p)
5989     {
5990       /* One needed check before declaring a positive match is to verify
5991          that iff we are doing a verbatim match, the decoded version
5992          of the symbol name starts with '<'.  Otherwise, this symbol name
5993          is not a suitable completion.  */
5994       const char *sym_name_copy = sym_name;
5995       int has_angle_bracket;
5996
5997       sym_name = ada_decode (sym_name);
5998       has_angle_bracket = (sym_name[0] == '<');
5999       match = (has_angle_bracket == verbatim_match);
6000       sym_name = sym_name_copy;
6001     }
6002
6003   if (match && !verbatim_match)
6004     {
6005       /* When doing non-verbatim match, another check that needs to
6006          be done is to verify that the potentially matching symbol name
6007          does not include capital letters, because the ada-mode would
6008          not be able to understand these symbol names without the
6009          angle bracket notation.  */
6010       const char *tmp;
6011
6012       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6013       if (*tmp != '\0')
6014         match = 0;
6015     }
6016
6017   /* Second: Try wild matching...  */
6018
6019   if (!match && wild_match_p)
6020     {
6021       /* Since we are doing wild matching, this means that TEXT
6022          may represent an unqualified symbol name.  We therefore must
6023          also compare TEXT against the unqualified name of the symbol.  */
6024       sym_name = ada_unqualified_name (ada_decode (sym_name));
6025
6026       if (strncmp (sym_name, text, text_len) == 0)
6027         match = 1;
6028     }
6029
6030   /* Finally: If we found a mach, prepare the result to return.  */
6031
6032   if (!match)
6033     return NULL;
6034
6035   if (verbatim_match)
6036     sym_name = add_angle_brackets (sym_name);
6037
6038   if (!encoded_p)
6039     sym_name = ada_decode (sym_name);
6040
6041   return sym_name;
6042 }
6043
6044 /* A companion function to ada_make_symbol_completion_list().
6045    Check if SYM_NAME represents a symbol which name would be suitable
6046    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6047    it is appended at the end of the given string vector SV.
6048
6049    ORIG_TEXT is the string original string from the user command
6050    that needs to be completed.  WORD is the entire command on which
6051    completion should be performed.  These two parameters are used to
6052    determine which part of the symbol name should be added to the
6053    completion vector.
6054    if WILD_MATCH_P is set, then wild matching is performed.
6055    ENCODED_P should be set if TEXT represents a symbol name in its
6056    encoded formed (in which case the completion should also be
6057    encoded).  */
6058
6059 static void
6060 symbol_completion_add (VEC(char_ptr) **sv,
6061                        const char *sym_name,
6062                        const char *text, int text_len,
6063                        const char *orig_text, const char *word,
6064                        int wild_match_p, int encoded_p)
6065 {
6066   const char *match = symbol_completion_match (sym_name, text, text_len,
6067                                                wild_match_p, encoded_p);
6068   char *completion;
6069
6070   if (match == NULL)
6071     return;
6072
6073   /* We found a match, so add the appropriate completion to the given
6074      string vector.  */
6075
6076   if (word == orig_text)
6077     {
6078       completion = xmalloc (strlen (match) + 5);
6079       strcpy (completion, match);
6080     }
6081   else if (word > orig_text)
6082     {
6083       /* Return some portion of sym_name.  */
6084       completion = xmalloc (strlen (match) + 5);
6085       strcpy (completion, match + (word - orig_text));
6086     }
6087   else
6088     {
6089       /* Return some of ORIG_TEXT plus sym_name.  */
6090       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6091       strncpy (completion, word, orig_text - word);
6092       completion[orig_text - word] = '\0';
6093       strcat (completion, match);
6094     }
6095
6096   VEC_safe_push (char_ptr, *sv, completion);
6097 }
6098
6099 /* An object of this type is passed as the user_data argument to the
6100    expand_symtabs_matching method.  */
6101 struct add_partial_datum
6102 {
6103   VEC(char_ptr) **completions;
6104   const char *text;
6105   int text_len;
6106   const char *text0;
6107   const char *word;
6108   int wild_match;
6109   int encoded;
6110 };
6111
6112 /* A callback for expand_symtabs_matching.  */
6113
6114 static int
6115 ada_complete_symbol_matcher (const char *name, void *user_data)
6116 {
6117   struct add_partial_datum *data = user_data;
6118   
6119   return symbol_completion_match (name, data->text, data->text_len,
6120                                   data->wild_match, data->encoded) != NULL;
6121 }
6122
6123 /* Return a list of possible symbol names completing TEXT0.  WORD is
6124    the entire command on which completion is made.  */
6125
6126 static VEC (char_ptr) *
6127 ada_make_symbol_completion_list (const char *text0, const char *word,
6128                                  enum type_code code)
6129 {
6130   char *text;
6131   int text_len;
6132   int wild_match_p;
6133   int encoded_p;
6134   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6135   struct symbol *sym;
6136   struct symtab *s;
6137   struct minimal_symbol *msymbol;
6138   struct objfile *objfile;
6139   const struct block *b, *surrounding_static_block = 0;
6140   int i;
6141   struct block_iterator iter;
6142   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6143
6144   gdb_assert (code == TYPE_CODE_UNDEF);
6145
6146   if (text0[0] == '<')
6147     {
6148       text = xstrdup (text0);
6149       make_cleanup (xfree, text);
6150       text_len = strlen (text);
6151       wild_match_p = 0;
6152       encoded_p = 1;
6153     }
6154   else
6155     {
6156       text = xstrdup (ada_encode (text0));
6157       make_cleanup (xfree, text);
6158       text_len = strlen (text);
6159       for (i = 0; i < text_len; i++)
6160         text[i] = tolower (text[i]);
6161
6162       encoded_p = (strstr (text0, "__") != NULL);
6163       /* If the name contains a ".", then the user is entering a fully
6164          qualified entity name, and the match must not be done in wild
6165          mode.  Similarly, if the user wants to complete what looks like
6166          an encoded name, the match must not be done in wild mode.  */
6167       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6168     }
6169
6170   /* First, look at the partial symtab symbols.  */
6171   {
6172     struct add_partial_datum data;
6173
6174     data.completions = &completions;
6175     data.text = text;
6176     data.text_len = text_len;
6177     data.text0 = text0;
6178     data.word = word;
6179     data.wild_match = wild_match_p;
6180     data.encoded = encoded_p;
6181     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6182                              &data);
6183   }
6184
6185   /* At this point scan through the misc symbol vectors and add each
6186      symbol you find to the list.  Eventually we want to ignore
6187      anything that isn't a text symbol (everything else will be
6188      handled by the psymtab code above).  */
6189
6190   ALL_MSYMBOLS (objfile, msymbol)
6191   {
6192     QUIT;
6193     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6194                            text, text_len, text0, word, wild_match_p,
6195                            encoded_p);
6196   }
6197
6198   /* Search upwards from currently selected frame (so that we can
6199      complete on local vars.  */
6200
6201   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6202     {
6203       if (!BLOCK_SUPERBLOCK (b))
6204         surrounding_static_block = b;   /* For elmin of dups */
6205
6206       ALL_BLOCK_SYMBOLS (b, iter, sym)
6207       {
6208         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6209                                text, text_len, text0, word,
6210                                wild_match_p, encoded_p);
6211       }
6212     }
6213
6214   /* Go through the symtabs and check the externs and statics for
6215      symbols which match.  */
6216
6217   ALL_SYMTABS (objfile, s)
6218   {
6219     QUIT;
6220     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
6221     ALL_BLOCK_SYMBOLS (b, iter, sym)
6222     {
6223       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6224                              text, text_len, text0, word,
6225                              wild_match_p, encoded_p);
6226     }
6227   }
6228
6229   ALL_SYMTABS (objfile, s)
6230   {
6231     QUIT;
6232     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
6233     /* Don't do this block twice.  */
6234     if (b == surrounding_static_block)
6235       continue;
6236     ALL_BLOCK_SYMBOLS (b, iter, sym)
6237     {
6238       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6239                              text, text_len, text0, word,
6240                              wild_match_p, encoded_p);
6241     }
6242   }
6243
6244   do_cleanups (old_chain);
6245   return completions;
6246 }
6247
6248                                 /* Field Access */
6249
6250 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6251    for tagged types.  */
6252
6253 static int
6254 ada_is_dispatch_table_ptr_type (struct type *type)
6255 {
6256   const char *name;
6257
6258   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6259     return 0;
6260
6261   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6262   if (name == NULL)
6263     return 0;
6264
6265   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6266 }
6267
6268 /* Return non-zero if TYPE is an interface tag.  */
6269
6270 static int
6271 ada_is_interface_tag (struct type *type)
6272 {
6273   const char *name = TYPE_NAME (type);
6274
6275   if (name == NULL)
6276     return 0;
6277
6278   return (strcmp (name, "ada__tags__interface_tag") == 0);
6279 }
6280
6281 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6282    to be invisible to users.  */
6283
6284 int
6285 ada_is_ignored_field (struct type *type, int field_num)
6286 {
6287   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6288     return 1;
6289
6290   /* Check the name of that field.  */
6291   {
6292     const char *name = TYPE_FIELD_NAME (type, field_num);
6293
6294     /* Anonymous field names should not be printed.
6295        brobecker/2007-02-20: I don't think this can actually happen
6296        but we don't want to print the value of annonymous fields anyway.  */
6297     if (name == NULL)
6298       return 1;
6299
6300     /* Normally, fields whose name start with an underscore ("_")
6301        are fields that have been internally generated by the compiler,
6302        and thus should not be printed.  The "_parent" field is special,
6303        however: This is a field internally generated by the compiler
6304        for tagged types, and it contains the components inherited from
6305        the parent type.  This field should not be printed as is, but
6306        should not be ignored either.  */
6307     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6308       return 1;
6309   }
6310
6311   /* If this is the dispatch table of a tagged type or an interface tag,
6312      then ignore.  */
6313   if (ada_is_tagged_type (type, 1)
6314       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6315           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6316     return 1;
6317
6318   /* Not a special field, so it should not be ignored.  */
6319   return 0;
6320 }
6321
6322 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6323    pointer or reference type whose ultimate target has a tag field.  */
6324
6325 int
6326 ada_is_tagged_type (struct type *type, int refok)
6327 {
6328   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6329 }
6330
6331 /* True iff TYPE represents the type of X'Tag */
6332
6333 int
6334 ada_is_tag_type (struct type *type)
6335 {
6336   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6337     return 0;
6338   else
6339     {
6340       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6341
6342       return (name != NULL
6343               && strcmp (name, "ada__tags__dispatch_table") == 0);
6344     }
6345 }
6346
6347 /* The type of the tag on VAL.  */
6348
6349 struct type *
6350 ada_tag_type (struct value *val)
6351 {
6352   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6353 }
6354
6355 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6356    retired at Ada 05).  */
6357
6358 static int
6359 is_ada95_tag (struct value *tag)
6360 {
6361   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6362 }
6363
6364 /* The value of the tag on VAL.  */
6365
6366 struct value *
6367 ada_value_tag (struct value *val)
6368 {
6369   return ada_value_struct_elt (val, "_tag", 0);
6370 }
6371
6372 /* The value of the tag on the object of type TYPE whose contents are
6373    saved at VALADDR, if it is non-null, or is at memory address
6374    ADDRESS.  */
6375
6376 static struct value *
6377 value_tag_from_contents_and_address (struct type *type,
6378                                      const gdb_byte *valaddr,
6379                                      CORE_ADDR address)
6380 {
6381   int tag_byte_offset;
6382   struct type *tag_type;
6383
6384   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6385                          NULL, NULL, NULL))
6386     {
6387       const gdb_byte *valaddr1 = ((valaddr == NULL)
6388                                   ? NULL
6389                                   : valaddr + tag_byte_offset);
6390       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6391
6392       return value_from_contents_and_address (tag_type, valaddr1, address1);
6393     }
6394   return NULL;
6395 }
6396
6397 static struct type *
6398 type_from_tag (struct value *tag)
6399 {
6400   const char *type_name = ada_tag_name (tag);
6401
6402   if (type_name != NULL)
6403     return ada_find_any_type (ada_encode (type_name));
6404   return NULL;
6405 }
6406
6407 /* Given a value OBJ of a tagged type, return a value of this
6408    type at the base address of the object.  The base address, as
6409    defined in Ada.Tags, it is the address of the primary tag of
6410    the object, and therefore where the field values of its full
6411    view can be fetched.  */
6412
6413 struct value *
6414 ada_tag_value_at_base_address (struct value *obj)
6415 {
6416   volatile struct gdb_exception e;
6417   struct value *val;
6418   LONGEST offset_to_top = 0;
6419   struct type *ptr_type, *obj_type;
6420   struct value *tag;
6421   CORE_ADDR base_address;
6422
6423   obj_type = value_type (obj);
6424
6425   /* It is the responsability of the caller to deref pointers.  */
6426
6427   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6428       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6429     return obj;
6430
6431   tag = ada_value_tag (obj);
6432   if (!tag)
6433     return obj;
6434
6435   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6436
6437   if (is_ada95_tag (tag))
6438     return obj;
6439
6440   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6441   ptr_type = lookup_pointer_type (ptr_type);
6442   val = value_cast (ptr_type, tag);
6443   if (!val)
6444     return obj;
6445
6446   /* It is perfectly possible that an exception be raised while
6447      trying to determine the base address, just like for the tag;
6448      see ada_tag_name for more details.  We do not print the error
6449      message for the same reason.  */
6450
6451   TRY_CATCH (e, RETURN_MASK_ERROR)
6452     {
6453       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6454     }
6455
6456   if (e.reason < 0)
6457     return obj;
6458
6459   /* If offset is null, nothing to do.  */
6460
6461   if (offset_to_top == 0)
6462     return obj;
6463
6464   /* -1 is a special case in Ada.Tags; however, what should be done
6465      is not quite clear from the documentation.  So do nothing for
6466      now.  */
6467
6468   if (offset_to_top == -1)
6469     return obj;
6470
6471   base_address = value_address (obj) - offset_to_top;
6472   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6473
6474   /* Make sure that we have a proper tag at the new address.
6475      Otherwise, offset_to_top is bogus (which can happen when
6476      the object is not initialized yet).  */
6477
6478   if (!tag)
6479     return obj;
6480
6481   obj_type = type_from_tag (tag);
6482
6483   if (!obj_type)
6484     return obj;
6485
6486   return value_from_contents_and_address (obj_type, NULL, base_address);
6487 }
6488
6489 /* Return the "ada__tags__type_specific_data" type.  */
6490
6491 static struct type *
6492 ada_get_tsd_type (struct inferior *inf)
6493 {
6494   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6495
6496   if (data->tsd_type == 0)
6497     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6498   return data->tsd_type;
6499 }
6500
6501 /* Return the TSD (type-specific data) associated to the given TAG.
6502    TAG is assumed to be the tag of a tagged-type entity.
6503
6504    May return NULL if we are unable to get the TSD.  */
6505
6506 static struct value *
6507 ada_get_tsd_from_tag (struct value *tag)
6508 {
6509   struct value *val;
6510   struct type *type;
6511
6512   /* First option: The TSD is simply stored as a field of our TAG.
6513      Only older versions of GNAT would use this format, but we have
6514      to test it first, because there are no visible markers for
6515      the current approach except the absence of that field.  */
6516
6517   val = ada_value_struct_elt (tag, "tsd", 1);
6518   if (val)
6519     return val;
6520
6521   /* Try the second representation for the dispatch table (in which
6522      there is no explicit 'tsd' field in the referent of the tag pointer,
6523      and instead the tsd pointer is stored just before the dispatch
6524      table.  */
6525
6526   type = ada_get_tsd_type (current_inferior());
6527   if (type == NULL)
6528     return NULL;
6529   type = lookup_pointer_type (lookup_pointer_type (type));
6530   val = value_cast (type, tag);
6531   if (val == NULL)
6532     return NULL;
6533   return value_ind (value_ptradd (val, -1));
6534 }
6535
6536 /* Given the TSD of a tag (type-specific data), return a string
6537    containing the name of the associated type.
6538
6539    The returned value is good until the next call.  May return NULL
6540    if we are unable to determine the tag name.  */
6541
6542 static char *
6543 ada_tag_name_from_tsd (struct value *tsd)
6544 {
6545   static char name[1024];
6546   char *p;
6547   struct value *val;
6548
6549   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6550   if (val == NULL)
6551     return NULL;
6552   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6553   for (p = name; *p != '\0'; p += 1)
6554     if (isalpha (*p))
6555       *p = tolower (*p);
6556   return name;
6557 }
6558
6559 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6560    a C string.
6561
6562    Return NULL if the TAG is not an Ada tag, or if we were unable to
6563    determine the name of that tag.  The result is good until the next
6564    call.  */
6565
6566 const char *
6567 ada_tag_name (struct value *tag)
6568 {
6569   volatile struct gdb_exception e;
6570   char *name = NULL;
6571
6572   if (!ada_is_tag_type (value_type (tag)))
6573     return NULL;
6574
6575   /* It is perfectly possible that an exception be raised while trying
6576      to determine the TAG's name, even under normal circumstances:
6577      The associated variable may be uninitialized or corrupted, for
6578      instance. We do not let any exception propagate past this point.
6579      instead we return NULL.
6580
6581      We also do not print the error message either (which often is very
6582      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6583      the caller print a more meaningful message if necessary.  */
6584   TRY_CATCH (e, RETURN_MASK_ERROR)
6585     {
6586       struct value *tsd = ada_get_tsd_from_tag (tag);
6587
6588       if (tsd != NULL)
6589         name = ada_tag_name_from_tsd (tsd);
6590     }
6591
6592   return name;
6593 }
6594
6595 /* The parent type of TYPE, or NULL if none.  */
6596
6597 struct type *
6598 ada_parent_type (struct type *type)
6599 {
6600   int i;
6601
6602   type = ada_check_typedef (type);
6603
6604   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6605     return NULL;
6606
6607   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6608     if (ada_is_parent_field (type, i))
6609       {
6610         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6611
6612         /* If the _parent field is a pointer, then dereference it.  */
6613         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6614           parent_type = TYPE_TARGET_TYPE (parent_type);
6615         /* If there is a parallel XVS type, get the actual base type.  */
6616         parent_type = ada_get_base_type (parent_type);
6617
6618         return ada_check_typedef (parent_type);
6619       }
6620
6621   return NULL;
6622 }
6623
6624 /* True iff field number FIELD_NUM of structure type TYPE contains the
6625    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6626    a structure type with at least FIELD_NUM+1 fields.  */
6627
6628 int
6629 ada_is_parent_field (struct type *type, int field_num)
6630 {
6631   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6632
6633   return (name != NULL
6634           && (strncmp (name, "PARENT", 6) == 0
6635               || strncmp (name, "_parent", 7) == 0));
6636 }
6637
6638 /* True iff field number FIELD_NUM of structure type TYPE is a
6639    transparent wrapper field (which should be silently traversed when doing
6640    field selection and flattened when printing).  Assumes TYPE is a
6641    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6642    structures.  */
6643
6644 int
6645 ada_is_wrapper_field (struct type *type, int field_num)
6646 {
6647   const char *name = TYPE_FIELD_NAME (type, field_num);
6648
6649   return (name != NULL
6650           && (strncmp (name, "PARENT", 6) == 0
6651               || strcmp (name, "REP") == 0
6652               || strncmp (name, "_parent", 7) == 0
6653               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6654 }
6655
6656 /* True iff field number FIELD_NUM of structure or union type TYPE
6657    is a variant wrapper.  Assumes TYPE is a structure type with at least
6658    FIELD_NUM+1 fields.  */
6659
6660 int
6661 ada_is_variant_part (struct type *type, int field_num)
6662 {
6663   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6664
6665   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6666           || (is_dynamic_field (type, field_num)
6667               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
6668                   == TYPE_CODE_UNION)));
6669 }
6670
6671 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6672    whose discriminants are contained in the record type OUTER_TYPE,
6673    returns the type of the controlling discriminant for the variant.
6674    May return NULL if the type could not be found.  */
6675
6676 struct type *
6677 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6678 {
6679   char *name = ada_variant_discrim_name (var_type);
6680
6681   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6682 }
6683
6684 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6685    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6686    represents a 'when others' clause; otherwise 0.  */
6687
6688 int
6689 ada_is_others_clause (struct type *type, int field_num)
6690 {
6691   const char *name = TYPE_FIELD_NAME (type, field_num);
6692
6693   return (name != NULL && name[0] == 'O');
6694 }
6695
6696 /* Assuming that TYPE0 is the type of the variant part of a record,
6697    returns the name of the discriminant controlling the variant.
6698    The value is valid until the next call to ada_variant_discrim_name.  */
6699
6700 char *
6701 ada_variant_discrim_name (struct type *type0)
6702 {
6703   static char *result = NULL;
6704   static size_t result_len = 0;
6705   struct type *type;
6706   const char *name;
6707   const char *discrim_end;
6708   const char *discrim_start;
6709
6710   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6711     type = TYPE_TARGET_TYPE (type0);
6712   else
6713     type = type0;
6714
6715   name = ada_type_name (type);
6716
6717   if (name == NULL || name[0] == '\000')
6718     return "";
6719
6720   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6721        discrim_end -= 1)
6722     {
6723       if (strncmp (discrim_end, "___XVN", 6) == 0)
6724         break;
6725     }
6726   if (discrim_end == name)
6727     return "";
6728
6729   for (discrim_start = discrim_end; discrim_start != name + 3;
6730        discrim_start -= 1)
6731     {
6732       if (discrim_start == name + 1)
6733         return "";
6734       if ((discrim_start > name + 3
6735            && strncmp (discrim_start - 3, "___", 3) == 0)
6736           || discrim_start[-1] == '.')
6737         break;
6738     }
6739
6740   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6741   strncpy (result, discrim_start, discrim_end - discrim_start);
6742   result[discrim_end - discrim_start] = '\0';
6743   return result;
6744 }
6745
6746 /* Scan STR for a subtype-encoded number, beginning at position K.
6747    Put the position of the character just past the number scanned in
6748    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6749    Return 1 if there was a valid number at the given position, and 0
6750    otherwise.  A "subtype-encoded" number consists of the absolute value
6751    in decimal, followed by the letter 'm' to indicate a negative number.
6752    Assumes 0m does not occur.  */
6753
6754 int
6755 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6756 {
6757   ULONGEST RU;
6758
6759   if (!isdigit (str[k]))
6760     return 0;
6761
6762   /* Do it the hard way so as not to make any assumption about
6763      the relationship of unsigned long (%lu scan format code) and
6764      LONGEST.  */
6765   RU = 0;
6766   while (isdigit (str[k]))
6767     {
6768       RU = RU * 10 + (str[k] - '0');
6769       k += 1;
6770     }
6771
6772   if (str[k] == 'm')
6773     {
6774       if (R != NULL)
6775         *R = (-(LONGEST) (RU - 1)) - 1;
6776       k += 1;
6777     }
6778   else if (R != NULL)
6779     *R = (LONGEST) RU;
6780
6781   /* NOTE on the above: Technically, C does not say what the results of
6782      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6783      number representable as a LONGEST (although either would probably work
6784      in most implementations).  When RU>0, the locution in the then branch
6785      above is always equivalent to the negative of RU.  */
6786
6787   if (new_k != NULL)
6788     *new_k = k;
6789   return 1;
6790 }
6791
6792 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6793    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6794    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6795
6796 int
6797 ada_in_variant (LONGEST val, struct type *type, int field_num)
6798 {
6799   const char *name = TYPE_FIELD_NAME (type, field_num);
6800   int p;
6801
6802   p = 0;
6803   while (1)
6804     {
6805       switch (name[p])
6806         {
6807         case '\0':
6808           return 0;
6809         case 'S':
6810           {
6811             LONGEST W;
6812
6813             if (!ada_scan_number (name, p + 1, &W, &p))
6814               return 0;
6815             if (val == W)
6816               return 1;
6817             break;
6818           }
6819         case 'R':
6820           {
6821             LONGEST L, U;
6822
6823             if (!ada_scan_number (name, p + 1, &L, &p)
6824                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6825               return 0;
6826             if (val >= L && val <= U)
6827               return 1;
6828             break;
6829           }
6830         case 'O':
6831           return 1;
6832         default:
6833           return 0;
6834         }
6835     }
6836 }
6837
6838 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6839
6840 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6841    ARG_TYPE, extract and return the value of one of its (non-static)
6842    fields.  FIELDNO says which field.   Differs from value_primitive_field
6843    only in that it can handle packed values of arbitrary type.  */
6844
6845 static struct value *
6846 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6847                            struct type *arg_type)
6848 {
6849   struct type *type;
6850
6851   arg_type = ada_check_typedef (arg_type);
6852   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6853
6854   /* Handle packed fields.  */
6855
6856   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6857     {
6858       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6859       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6860
6861       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6862                                              offset + bit_pos / 8,
6863                                              bit_pos % 8, bit_size, type);
6864     }
6865   else
6866     return value_primitive_field (arg1, offset, fieldno, arg_type);
6867 }
6868
6869 /* Find field with name NAME in object of type TYPE.  If found, 
6870    set the following for each argument that is non-null:
6871     - *FIELD_TYPE_P to the field's type; 
6872     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6873       an object of that type;
6874     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6875     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6876       0 otherwise;
6877    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6878    fields up to but not including the desired field, or by the total
6879    number of fields if not found.   A NULL value of NAME never
6880    matches; the function just counts visible fields in this case.
6881    
6882    Returns 1 if found, 0 otherwise.  */
6883
6884 static int
6885 find_struct_field (const char *name, struct type *type, int offset,
6886                    struct type **field_type_p,
6887                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6888                    int *index_p)
6889 {
6890   int i;
6891
6892   type = ada_check_typedef (type);
6893
6894   if (field_type_p != NULL)
6895     *field_type_p = NULL;
6896   if (byte_offset_p != NULL)
6897     *byte_offset_p = 0;
6898   if (bit_offset_p != NULL)
6899     *bit_offset_p = 0;
6900   if (bit_size_p != NULL)
6901     *bit_size_p = 0;
6902
6903   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6904     {
6905       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6906       int fld_offset = offset + bit_pos / 8;
6907       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6908
6909       if (t_field_name == NULL)
6910         continue;
6911
6912       else if (name != NULL && field_name_match (t_field_name, name))
6913         {
6914           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6915
6916           if (field_type_p != NULL)
6917             *field_type_p = TYPE_FIELD_TYPE (type, i);
6918           if (byte_offset_p != NULL)
6919             *byte_offset_p = fld_offset;
6920           if (bit_offset_p != NULL)
6921             *bit_offset_p = bit_pos % 8;
6922           if (bit_size_p != NULL)
6923             *bit_size_p = bit_size;
6924           return 1;
6925         }
6926       else if (ada_is_wrapper_field (type, i))
6927         {
6928           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6929                                  field_type_p, byte_offset_p, bit_offset_p,
6930                                  bit_size_p, index_p))
6931             return 1;
6932         }
6933       else if (ada_is_variant_part (type, i))
6934         {
6935           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6936              fixed type?? */
6937           int j;
6938           struct type *field_type
6939             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6940
6941           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6942             {
6943               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6944                                      fld_offset
6945                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6946                                      field_type_p, byte_offset_p,
6947                                      bit_offset_p, bit_size_p, index_p))
6948                 return 1;
6949             }
6950         }
6951       else if (index_p != NULL)
6952         *index_p += 1;
6953     }
6954   return 0;
6955 }
6956
6957 /* Number of user-visible fields in record type TYPE.  */
6958
6959 static int
6960 num_visible_fields (struct type *type)
6961 {
6962   int n;
6963
6964   n = 0;
6965   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6966   return n;
6967 }
6968
6969 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6970    and search in it assuming it has (class) type TYPE.
6971    If found, return value, else return NULL.
6972
6973    Searches recursively through wrapper fields (e.g., '_parent').  */
6974
6975 static struct value *
6976 ada_search_struct_field (char *name, struct value *arg, int offset,
6977                          struct type *type)
6978 {
6979   int i;
6980
6981   type = ada_check_typedef (type);
6982   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6983     {
6984       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6985
6986       if (t_field_name == NULL)
6987         continue;
6988
6989       else if (field_name_match (t_field_name, name))
6990         return ada_value_primitive_field (arg, offset, i, type);
6991
6992       else if (ada_is_wrapper_field (type, i))
6993         {
6994           struct value *v =     /* Do not let indent join lines here.  */
6995             ada_search_struct_field (name, arg,
6996                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
6997                                      TYPE_FIELD_TYPE (type, i));
6998
6999           if (v != NULL)
7000             return v;
7001         }
7002
7003       else if (ada_is_variant_part (type, i))
7004         {
7005           /* PNH: Do we ever get here?  See find_struct_field.  */
7006           int j;
7007           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7008                                                                         i));
7009           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7010
7011           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7012             {
7013               struct value *v = ada_search_struct_field /* Force line
7014                                                            break.  */
7015                 (name, arg,
7016                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7017                  TYPE_FIELD_TYPE (field_type, j));
7018
7019               if (v != NULL)
7020                 return v;
7021             }
7022         }
7023     }
7024   return NULL;
7025 }
7026
7027 static struct value *ada_index_struct_field_1 (int *, struct value *,
7028                                                int, struct type *);
7029
7030
7031 /* Return field #INDEX in ARG, where the index is that returned by
7032  * find_struct_field through its INDEX_P argument.  Adjust the address
7033  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7034  * If found, return value, else return NULL.  */
7035
7036 static struct value *
7037 ada_index_struct_field (int index, struct value *arg, int offset,
7038                         struct type *type)
7039 {
7040   return ada_index_struct_field_1 (&index, arg, offset, type);
7041 }
7042
7043
7044 /* Auxiliary function for ada_index_struct_field.  Like
7045  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7046  * *INDEX_P.  */
7047
7048 static struct value *
7049 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7050                           struct type *type)
7051 {
7052   int i;
7053   type = ada_check_typedef (type);
7054
7055   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7056     {
7057       if (TYPE_FIELD_NAME (type, i) == NULL)
7058         continue;
7059       else if (ada_is_wrapper_field (type, i))
7060         {
7061           struct value *v =     /* Do not let indent join lines here.  */
7062             ada_index_struct_field_1 (index_p, arg,
7063                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7064                                       TYPE_FIELD_TYPE (type, i));
7065
7066           if (v != NULL)
7067             return v;
7068         }
7069
7070       else if (ada_is_variant_part (type, i))
7071         {
7072           /* PNH: Do we ever get here?  See ada_search_struct_field,
7073              find_struct_field.  */
7074           error (_("Cannot assign this kind of variant record"));
7075         }
7076       else if (*index_p == 0)
7077         return ada_value_primitive_field (arg, offset, i, type);
7078       else
7079         *index_p -= 1;
7080     }
7081   return NULL;
7082 }
7083
7084 /* Given ARG, a value of type (pointer or reference to a)*
7085    structure/union, extract the component named NAME from the ultimate
7086    target structure/union and return it as a value with its
7087    appropriate type.
7088
7089    The routine searches for NAME among all members of the structure itself
7090    and (recursively) among all members of any wrapper members
7091    (e.g., '_parent').
7092
7093    If NO_ERR, then simply return NULL in case of error, rather than 
7094    calling error.  */
7095
7096 struct value *
7097 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7098 {
7099   struct type *t, *t1;
7100   struct value *v;
7101
7102   v = NULL;
7103   t1 = t = ada_check_typedef (value_type (arg));
7104   if (TYPE_CODE (t) == TYPE_CODE_REF)
7105     {
7106       t1 = TYPE_TARGET_TYPE (t);
7107       if (t1 == NULL)
7108         goto BadValue;
7109       t1 = ada_check_typedef (t1);
7110       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7111         {
7112           arg = coerce_ref (arg);
7113           t = t1;
7114         }
7115     }
7116
7117   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7118     {
7119       t1 = TYPE_TARGET_TYPE (t);
7120       if (t1 == NULL)
7121         goto BadValue;
7122       t1 = ada_check_typedef (t1);
7123       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7124         {
7125           arg = value_ind (arg);
7126           t = t1;
7127         }
7128       else
7129         break;
7130     }
7131
7132   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7133     goto BadValue;
7134
7135   if (t1 == t)
7136     v = ada_search_struct_field (name, arg, 0, t);
7137   else
7138     {
7139       int bit_offset, bit_size, byte_offset;
7140       struct type *field_type;
7141       CORE_ADDR address;
7142
7143       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7144         address = value_address (ada_value_ind (arg));
7145       else
7146         address = value_address (ada_coerce_ref (arg));
7147
7148       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7149       if (find_struct_field (name, t1, 0,
7150                              &field_type, &byte_offset, &bit_offset,
7151                              &bit_size, NULL))
7152         {
7153           if (bit_size != 0)
7154             {
7155               if (TYPE_CODE (t) == TYPE_CODE_REF)
7156                 arg = ada_coerce_ref (arg);
7157               else
7158                 arg = ada_value_ind (arg);
7159               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7160                                                   bit_offset, bit_size,
7161                                                   field_type);
7162             }
7163           else
7164             v = value_at_lazy (field_type, address + byte_offset);
7165         }
7166     }
7167
7168   if (v != NULL || no_err)
7169     return v;
7170   else
7171     error (_("There is no member named %s."), name);
7172
7173  BadValue:
7174   if (no_err)
7175     return NULL;
7176   else
7177     error (_("Attempt to extract a component of "
7178              "a value that is not a record."));
7179 }
7180
7181 /* Given a type TYPE, look up the type of the component of type named NAME.
7182    If DISPP is non-null, add its byte displacement from the beginning of a
7183    structure (pointed to by a value) of type TYPE to *DISPP (does not
7184    work for packed fields).
7185
7186    Matches any field whose name has NAME as a prefix, possibly
7187    followed by "___".
7188
7189    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7190    be a (pointer or reference)+ to a struct or union, and the
7191    ultimate target type will be searched.
7192
7193    Looks recursively into variant clauses and parent types.
7194
7195    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7196    TYPE is not a type of the right kind.  */
7197
7198 static struct type *
7199 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7200                             int noerr, int *dispp)
7201 {
7202   int i;
7203
7204   if (name == NULL)
7205     goto BadName;
7206
7207   if (refok && type != NULL)
7208     while (1)
7209       {
7210         type = ada_check_typedef (type);
7211         if (TYPE_CODE (type) != TYPE_CODE_PTR
7212             && TYPE_CODE (type) != TYPE_CODE_REF)
7213           break;
7214         type = TYPE_TARGET_TYPE (type);
7215       }
7216
7217   if (type == NULL
7218       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7219           && TYPE_CODE (type) != TYPE_CODE_UNION))
7220     {
7221       if (noerr)
7222         return NULL;
7223       else
7224         {
7225           target_terminal_ours ();
7226           gdb_flush (gdb_stdout);
7227           if (type == NULL)
7228             error (_("Type (null) is not a structure or union type"));
7229           else
7230             {
7231               /* XXX: type_sprint */
7232               fprintf_unfiltered (gdb_stderr, _("Type "));
7233               type_print (type, "", gdb_stderr, -1);
7234               error (_(" is not a structure or union type"));
7235             }
7236         }
7237     }
7238
7239   type = to_static_fixed_type (type);
7240
7241   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7242     {
7243       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7244       struct type *t;
7245       int disp;
7246
7247       if (t_field_name == NULL)
7248         continue;
7249
7250       else if (field_name_match (t_field_name, name))
7251         {
7252           if (dispp != NULL)
7253             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7254           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7255         }
7256
7257       else if (ada_is_wrapper_field (type, i))
7258         {
7259           disp = 0;
7260           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7261                                           0, 1, &disp);
7262           if (t != NULL)
7263             {
7264               if (dispp != NULL)
7265                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7266               return t;
7267             }
7268         }
7269
7270       else if (ada_is_variant_part (type, i))
7271         {
7272           int j;
7273           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7274                                                                         i));
7275
7276           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7277             {
7278               /* FIXME pnh 2008/01/26: We check for a field that is
7279                  NOT wrapped in a struct, since the compiler sometimes
7280                  generates these for unchecked variant types.  Revisit
7281                  if the compiler changes this practice.  */
7282               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7283               disp = 0;
7284               if (v_field_name != NULL 
7285                   && field_name_match (v_field_name, name))
7286                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7287               else
7288                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7289                                                                  j),
7290                                                 name, 0, 1, &disp);
7291
7292               if (t != NULL)
7293                 {
7294                   if (dispp != NULL)
7295                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7296                   return t;
7297                 }
7298             }
7299         }
7300
7301     }
7302
7303 BadName:
7304   if (!noerr)
7305     {
7306       target_terminal_ours ();
7307       gdb_flush (gdb_stdout);
7308       if (name == NULL)
7309         {
7310           /* XXX: type_sprint */
7311           fprintf_unfiltered (gdb_stderr, _("Type "));
7312           type_print (type, "", gdb_stderr, -1);
7313           error (_(" has no component named <null>"));
7314         }
7315       else
7316         {
7317           /* XXX: type_sprint */
7318           fprintf_unfiltered (gdb_stderr, _("Type "));
7319           type_print (type, "", gdb_stderr, -1);
7320           error (_(" has no component named %s"), name);
7321         }
7322     }
7323
7324   return NULL;
7325 }
7326
7327 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7328    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7329    represents an unchecked union (that is, the variant part of a
7330    record that is named in an Unchecked_Union pragma).  */
7331
7332 static int
7333 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7334 {
7335   char *discrim_name = ada_variant_discrim_name (var_type);
7336
7337   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7338           == NULL);
7339 }
7340
7341
7342 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7343    within a value of type OUTER_TYPE that is stored in GDB at
7344    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7345    numbering from 0) is applicable.  Returns -1 if none are.  */
7346
7347 int
7348 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7349                            const gdb_byte *outer_valaddr)
7350 {
7351   int others_clause;
7352   int i;
7353   char *discrim_name = ada_variant_discrim_name (var_type);
7354   struct value *outer;
7355   struct value *discrim;
7356   LONGEST discrim_val;
7357
7358   /* Using plain value_from_contents_and_address here causes problems
7359      because we will end up trying to resolve a type that is currently
7360      being constructed.  */
7361   outer = value_from_contents_and_address_unresolved (outer_type,
7362                                                       outer_valaddr, 0);
7363   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7364   if (discrim == NULL)
7365     return -1;
7366   discrim_val = value_as_long (discrim);
7367
7368   others_clause = -1;
7369   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7370     {
7371       if (ada_is_others_clause (var_type, i))
7372         others_clause = i;
7373       else if (ada_in_variant (discrim_val, var_type, i))
7374         return i;
7375     }
7376
7377   return others_clause;
7378 }
7379 \f
7380
7381
7382                                 /* Dynamic-Sized Records */
7383
7384 /* Strategy: The type ostensibly attached to a value with dynamic size
7385    (i.e., a size that is not statically recorded in the debugging
7386    data) does not accurately reflect the size or layout of the value.
7387    Our strategy is to convert these values to values with accurate,
7388    conventional types that are constructed on the fly.  */
7389
7390 /* There is a subtle and tricky problem here.  In general, we cannot
7391    determine the size of dynamic records without its data.  However,
7392    the 'struct value' data structure, which GDB uses to represent
7393    quantities in the inferior process (the target), requires the size
7394    of the type at the time of its allocation in order to reserve space
7395    for GDB's internal copy of the data.  That's why the
7396    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7397    rather than struct value*s.
7398
7399    However, GDB's internal history variables ($1, $2, etc.) are
7400    struct value*s containing internal copies of the data that are not, in
7401    general, the same as the data at their corresponding addresses in
7402    the target.  Fortunately, the types we give to these values are all
7403    conventional, fixed-size types (as per the strategy described
7404    above), so that we don't usually have to perform the
7405    'to_fixed_xxx_type' conversions to look at their values.
7406    Unfortunately, there is one exception: if one of the internal
7407    history variables is an array whose elements are unconstrained
7408    records, then we will need to create distinct fixed types for each
7409    element selected.  */
7410
7411 /* The upshot of all of this is that many routines take a (type, host
7412    address, target address) triple as arguments to represent a value.
7413    The host address, if non-null, is supposed to contain an internal
7414    copy of the relevant data; otherwise, the program is to consult the
7415    target at the target address.  */
7416
7417 /* Assuming that VAL0 represents a pointer value, the result of
7418    dereferencing it.  Differs from value_ind in its treatment of
7419    dynamic-sized types.  */
7420
7421 struct value *
7422 ada_value_ind (struct value *val0)
7423 {
7424   struct value *val = value_ind (val0);
7425
7426   if (ada_is_tagged_type (value_type (val), 0))
7427     val = ada_tag_value_at_base_address (val);
7428
7429   return ada_to_fixed_value (val);
7430 }
7431
7432 /* The value resulting from dereferencing any "reference to"
7433    qualifiers on VAL0.  */
7434
7435 static struct value *
7436 ada_coerce_ref (struct value *val0)
7437 {
7438   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7439     {
7440       struct value *val = val0;
7441
7442       val = coerce_ref (val);
7443
7444       if (ada_is_tagged_type (value_type (val), 0))
7445         val = ada_tag_value_at_base_address (val);
7446
7447       return ada_to_fixed_value (val);
7448     }
7449   else
7450     return val0;
7451 }
7452
7453 /* Return OFF rounded upward if necessary to a multiple of
7454    ALIGNMENT (a power of 2).  */
7455
7456 static unsigned int
7457 align_value (unsigned int off, unsigned int alignment)
7458 {
7459   return (off + alignment - 1) & ~(alignment - 1);
7460 }
7461
7462 /* Return the bit alignment required for field #F of template type TYPE.  */
7463
7464 static unsigned int
7465 field_alignment (struct type *type, int f)
7466 {
7467   const char *name = TYPE_FIELD_NAME (type, f);
7468   int len;
7469   int align_offset;
7470
7471   /* The field name should never be null, unless the debugging information
7472      is somehow malformed.  In this case, we assume the field does not
7473      require any alignment.  */
7474   if (name == NULL)
7475     return 1;
7476
7477   len = strlen (name);
7478
7479   if (!isdigit (name[len - 1]))
7480     return 1;
7481
7482   if (isdigit (name[len - 2]))
7483     align_offset = len - 2;
7484   else
7485     align_offset = len - 1;
7486
7487   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7488     return TARGET_CHAR_BIT;
7489
7490   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7491 }
7492
7493 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7494
7495 static struct symbol *
7496 ada_find_any_type_symbol (const char *name)
7497 {
7498   struct symbol *sym;
7499
7500   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7501   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7502     return sym;
7503
7504   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7505   return sym;
7506 }
7507
7508 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7509    solely for types defined by debug info, it will not search the GDB
7510    primitive types.  */
7511
7512 static struct type *
7513 ada_find_any_type (const char *name)
7514 {
7515   struct symbol *sym = ada_find_any_type_symbol (name);
7516
7517   if (sym != NULL)
7518     return SYMBOL_TYPE (sym);
7519
7520   return NULL;
7521 }
7522
7523 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7524    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7525    symbol, in which case it is returned.  Otherwise, this looks for
7526    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7527    Return symbol if found, and NULL otherwise.  */
7528
7529 struct symbol *
7530 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7531 {
7532   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7533   struct symbol *sym;
7534
7535   if (strstr (name, "___XR") != NULL)
7536      return name_sym;
7537
7538   sym = find_old_style_renaming_symbol (name, block);
7539
7540   if (sym != NULL)
7541     return sym;
7542
7543   /* Not right yet.  FIXME pnh 7/20/2007.  */
7544   sym = ada_find_any_type_symbol (name);
7545   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7546     return sym;
7547   else
7548     return NULL;
7549 }
7550
7551 static struct symbol *
7552 find_old_style_renaming_symbol (const char *name, const struct block *block)
7553 {
7554   const struct symbol *function_sym = block_linkage_function (block);
7555   char *rename;
7556
7557   if (function_sym != NULL)
7558     {
7559       /* If the symbol is defined inside a function, NAME is not fully
7560          qualified.  This means we need to prepend the function name
7561          as well as adding the ``___XR'' suffix to build the name of
7562          the associated renaming symbol.  */
7563       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7564       /* Function names sometimes contain suffixes used
7565          for instance to qualify nested subprograms.  When building
7566          the XR type name, we need to make sure that this suffix is
7567          not included.  So do not include any suffix in the function
7568          name length below.  */
7569       int function_name_len = ada_name_prefix_len (function_name);
7570       const int rename_len = function_name_len + 2      /*  "__" */
7571         + strlen (name) + 6 /* "___XR\0" */ ;
7572
7573       /* Strip the suffix if necessary.  */
7574       ada_remove_trailing_digits (function_name, &function_name_len);
7575       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7576       ada_remove_Xbn_suffix (function_name, &function_name_len);
7577
7578       /* Library-level functions are a special case, as GNAT adds
7579          a ``_ada_'' prefix to the function name to avoid namespace
7580          pollution.  However, the renaming symbols themselves do not
7581          have this prefix, so we need to skip this prefix if present.  */
7582       if (function_name_len > 5 /* "_ada_" */
7583           && strstr (function_name, "_ada_") == function_name)
7584         {
7585           function_name += 5;
7586           function_name_len -= 5;
7587         }
7588
7589       rename = (char *) alloca (rename_len * sizeof (char));
7590       strncpy (rename, function_name, function_name_len);
7591       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7592                  "__%s___XR", name);
7593     }
7594   else
7595     {
7596       const int rename_len = strlen (name) + 6;
7597
7598       rename = (char *) alloca (rename_len * sizeof (char));
7599       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7600     }
7601
7602   return ada_find_any_type_symbol (rename);
7603 }
7604
7605 /* Because of GNAT encoding conventions, several GDB symbols may match a
7606    given type name.  If the type denoted by TYPE0 is to be preferred to
7607    that of TYPE1 for purposes of type printing, return non-zero;
7608    otherwise return 0.  */
7609
7610 int
7611 ada_prefer_type (struct type *type0, struct type *type1)
7612 {
7613   if (type1 == NULL)
7614     return 1;
7615   else if (type0 == NULL)
7616     return 0;
7617   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7618     return 1;
7619   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7620     return 0;
7621   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7622     return 1;
7623   else if (ada_is_constrained_packed_array_type (type0))
7624     return 1;
7625   else if (ada_is_array_descriptor_type (type0)
7626            && !ada_is_array_descriptor_type (type1))
7627     return 1;
7628   else
7629     {
7630       const char *type0_name = type_name_no_tag (type0);
7631       const char *type1_name = type_name_no_tag (type1);
7632
7633       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7634           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7635         return 1;
7636     }
7637   return 0;
7638 }
7639
7640 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7641    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
7642
7643 const char *
7644 ada_type_name (struct type *type)
7645 {
7646   if (type == NULL)
7647     return NULL;
7648   else if (TYPE_NAME (type) != NULL)
7649     return TYPE_NAME (type);
7650   else
7651     return TYPE_TAG_NAME (type);
7652 }
7653
7654 /* Search the list of "descriptive" types associated to TYPE for a type
7655    whose name is NAME.  */
7656
7657 static struct type *
7658 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7659 {
7660   struct type *result;
7661
7662   if (ada_ignore_descriptive_types_p)
7663     return NULL;
7664
7665   /* If there no descriptive-type info, then there is no parallel type
7666      to be found.  */
7667   if (!HAVE_GNAT_AUX_INFO (type))
7668     return NULL;
7669
7670   result = TYPE_DESCRIPTIVE_TYPE (type);
7671   while (result != NULL)
7672     {
7673       const char *result_name = ada_type_name (result);
7674
7675       if (result_name == NULL)
7676         {
7677           warning (_("unexpected null name on descriptive type"));
7678           return NULL;
7679         }
7680
7681       /* If the names match, stop.  */
7682       if (strcmp (result_name, name) == 0)
7683         break;
7684
7685       /* Otherwise, look at the next item on the list, if any.  */
7686       if (HAVE_GNAT_AUX_INFO (result))
7687         result = TYPE_DESCRIPTIVE_TYPE (result);
7688       else
7689         result = NULL;
7690     }
7691
7692   /* If we didn't find a match, see whether this is a packed array.  With
7693      older compilers, the descriptive type information is either absent or
7694      irrelevant when it comes to packed arrays so the above lookup fails.
7695      Fall back to using a parallel lookup by name in this case.  */
7696   if (result == NULL && ada_is_constrained_packed_array_type (type))
7697     return ada_find_any_type (name);
7698
7699   return result;
7700 }
7701
7702 /* Find a parallel type to TYPE with the specified NAME, using the
7703    descriptive type taken from the debugging information, if available,
7704    and otherwise using the (slower) name-based method.  */
7705
7706 static struct type *
7707 ada_find_parallel_type_with_name (struct type *type, const char *name)
7708 {
7709   struct type *result = NULL;
7710
7711   if (HAVE_GNAT_AUX_INFO (type))
7712     result = find_parallel_type_by_descriptive_type (type, name);
7713   else
7714     result = ada_find_any_type (name);
7715
7716   return result;
7717 }
7718
7719 /* Same as above, but specify the name of the parallel type by appending
7720    SUFFIX to the name of TYPE.  */
7721
7722 struct type *
7723 ada_find_parallel_type (struct type *type, const char *suffix)
7724 {
7725   char *name;
7726   const char *typename = ada_type_name (type);
7727   int len;
7728
7729   if (typename == NULL)
7730     return NULL;
7731
7732   len = strlen (typename);
7733
7734   name = (char *) alloca (len + strlen (suffix) + 1);
7735
7736   strcpy (name, typename);
7737   strcpy (name + len, suffix);
7738
7739   return ada_find_parallel_type_with_name (type, name);
7740 }
7741
7742 /* If TYPE is a variable-size record type, return the corresponding template
7743    type describing its fields.  Otherwise, return NULL.  */
7744
7745 static struct type *
7746 dynamic_template_type (struct type *type)
7747 {
7748   type = ada_check_typedef (type);
7749
7750   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7751       || ada_type_name (type) == NULL)
7752     return NULL;
7753   else
7754     {
7755       int len = strlen (ada_type_name (type));
7756
7757       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7758         return type;
7759       else
7760         return ada_find_parallel_type (type, "___XVE");
7761     }
7762 }
7763
7764 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7765    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7766
7767 static int
7768 is_dynamic_field (struct type *templ_type, int field_num)
7769 {
7770   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7771
7772   return name != NULL
7773     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7774     && strstr (name, "___XVL") != NULL;
7775 }
7776
7777 /* The index of the variant field of TYPE, or -1 if TYPE does not
7778    represent a variant record type.  */
7779
7780 static int
7781 variant_field_index (struct type *type)
7782 {
7783   int f;
7784
7785   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7786     return -1;
7787
7788   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7789     {
7790       if (ada_is_variant_part (type, f))
7791         return f;
7792     }
7793   return -1;
7794 }
7795
7796 /* A record type with no fields.  */
7797
7798 static struct type *
7799 empty_record (struct type *template)
7800 {
7801   struct type *type = alloc_type_copy (template);
7802
7803   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7804   TYPE_NFIELDS (type) = 0;
7805   TYPE_FIELDS (type) = NULL;
7806   INIT_CPLUS_SPECIFIC (type);
7807   TYPE_NAME (type) = "<empty>";
7808   TYPE_TAG_NAME (type) = NULL;
7809   TYPE_LENGTH (type) = 0;
7810   return type;
7811 }
7812
7813 /* An ordinary record type (with fixed-length fields) that describes
7814    the value of type TYPE at VALADDR or ADDRESS (see comments at
7815    the beginning of this section) VAL according to GNAT conventions.
7816    DVAL0 should describe the (portion of a) record that contains any
7817    necessary discriminants.  It should be NULL if value_type (VAL) is
7818    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7819    variant field (unless unchecked) is replaced by a particular branch
7820    of the variant.
7821
7822    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7823    length are not statically known are discarded.  As a consequence,
7824    VALADDR, ADDRESS and DVAL0 are ignored.
7825
7826    NOTE: Limitations: For now, we assume that dynamic fields and
7827    variants occupy whole numbers of bytes.  However, they need not be
7828    byte-aligned.  */
7829
7830 struct type *
7831 ada_template_to_fixed_record_type_1 (struct type *type,
7832                                      const gdb_byte *valaddr,
7833                                      CORE_ADDR address, struct value *dval0,
7834                                      int keep_dynamic_fields)
7835 {
7836   struct value *mark = value_mark ();
7837   struct value *dval;
7838   struct type *rtype;
7839   int nfields, bit_len;
7840   int variant_field;
7841   long off;
7842   int fld_bit_len;
7843   int f;
7844
7845   /* Compute the number of fields in this record type that are going
7846      to be processed: unless keep_dynamic_fields, this includes only
7847      fields whose position and length are static will be processed.  */
7848   if (keep_dynamic_fields)
7849     nfields = TYPE_NFIELDS (type);
7850   else
7851     {
7852       nfields = 0;
7853       while (nfields < TYPE_NFIELDS (type)
7854              && !ada_is_variant_part (type, nfields)
7855              && !is_dynamic_field (type, nfields))
7856         nfields++;
7857     }
7858
7859   rtype = alloc_type_copy (type);
7860   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7861   INIT_CPLUS_SPECIFIC (rtype);
7862   TYPE_NFIELDS (rtype) = nfields;
7863   TYPE_FIELDS (rtype) = (struct field *)
7864     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7865   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7866   TYPE_NAME (rtype) = ada_type_name (type);
7867   TYPE_TAG_NAME (rtype) = NULL;
7868   TYPE_FIXED_INSTANCE (rtype) = 1;
7869
7870   off = 0;
7871   bit_len = 0;
7872   variant_field = -1;
7873
7874   for (f = 0; f < nfields; f += 1)
7875     {
7876       off = align_value (off, field_alignment (type, f))
7877         + TYPE_FIELD_BITPOS (type, f);
7878       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7879       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7880
7881       if (ada_is_variant_part (type, f))
7882         {
7883           variant_field = f;
7884           fld_bit_len = 0;
7885         }
7886       else if (is_dynamic_field (type, f))
7887         {
7888           const gdb_byte *field_valaddr = valaddr;
7889           CORE_ADDR field_address = address;
7890           struct type *field_type =
7891             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7892
7893           if (dval0 == NULL)
7894             {
7895               /* rtype's length is computed based on the run-time
7896                  value of discriminants.  If the discriminants are not
7897                  initialized, the type size may be completely bogus and
7898                  GDB may fail to allocate a value for it.  So check the
7899                  size first before creating the value.  */
7900               check_size (rtype);
7901               /* Using plain value_from_contents_and_address here
7902                  causes problems because we will end up trying to
7903                  resolve a type that is currently being
7904                  constructed.  */
7905               dval = value_from_contents_and_address_unresolved (rtype,
7906                                                                  valaddr,
7907                                                                  address);
7908               rtype = value_type (dval);
7909             }
7910           else
7911             dval = dval0;
7912
7913           /* If the type referenced by this field is an aligner type, we need
7914              to unwrap that aligner type, because its size might not be set.
7915              Keeping the aligner type would cause us to compute the wrong
7916              size for this field, impacting the offset of the all the fields
7917              that follow this one.  */
7918           if (ada_is_aligner_type (field_type))
7919             {
7920               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7921
7922               field_valaddr = cond_offset_host (field_valaddr, field_offset);
7923               field_address = cond_offset_target (field_address, field_offset);
7924               field_type = ada_aligned_type (field_type);
7925             }
7926
7927           field_valaddr = cond_offset_host (field_valaddr,
7928                                             off / TARGET_CHAR_BIT);
7929           field_address = cond_offset_target (field_address,
7930                                               off / TARGET_CHAR_BIT);
7931
7932           /* Get the fixed type of the field.  Note that, in this case,
7933              we do not want to get the real type out of the tag: if
7934              the current field is the parent part of a tagged record,
7935              we will get the tag of the object.  Clearly wrong: the real
7936              type of the parent is not the real type of the child.  We
7937              would end up in an infinite loop.  */
7938           field_type = ada_get_base_type (field_type);
7939           field_type = ada_to_fixed_type (field_type, field_valaddr,
7940                                           field_address, dval, 0);
7941           /* If the field size is already larger than the maximum
7942              object size, then the record itself will necessarily
7943              be larger than the maximum object size.  We need to make
7944              this check now, because the size might be so ridiculously
7945              large (due to an uninitialized variable in the inferior)
7946              that it would cause an overflow when adding it to the
7947              record size.  */
7948           check_size (field_type);
7949
7950           TYPE_FIELD_TYPE (rtype, f) = field_type;
7951           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7952           /* The multiplication can potentially overflow.  But because
7953              the field length has been size-checked just above, and
7954              assuming that the maximum size is a reasonable value,
7955              an overflow should not happen in practice.  So rather than
7956              adding overflow recovery code to this already complex code,
7957              we just assume that it's not going to happen.  */
7958           fld_bit_len =
7959             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7960         }
7961       else
7962         {
7963           /* Note: If this field's type is a typedef, it is important
7964              to preserve the typedef layer.
7965
7966              Otherwise, we might be transforming a typedef to a fat
7967              pointer (encoding a pointer to an unconstrained array),
7968              into a basic fat pointer (encoding an unconstrained
7969              array).  As both types are implemented using the same
7970              structure, the typedef is the only clue which allows us
7971              to distinguish between the two options.  Stripping it
7972              would prevent us from printing this field appropriately.  */
7973           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
7974           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7975           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7976             fld_bit_len =
7977               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7978           else
7979             {
7980               struct type *field_type = TYPE_FIELD_TYPE (type, f);
7981
7982               /* We need to be careful of typedefs when computing
7983                  the length of our field.  If this is a typedef,
7984                  get the length of the target type, not the length
7985                  of the typedef.  */
7986               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7987                 field_type = ada_typedef_target_type (field_type);
7988
7989               fld_bit_len =
7990                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7991             }
7992         }
7993       if (off + fld_bit_len > bit_len)
7994         bit_len = off + fld_bit_len;
7995       off += fld_bit_len;
7996       TYPE_LENGTH (rtype) =
7997         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7998     }
7999
8000   /* We handle the variant part, if any, at the end because of certain
8001      odd cases in which it is re-ordered so as NOT to be the last field of
8002      the record.  This can happen in the presence of representation
8003      clauses.  */
8004   if (variant_field >= 0)
8005     {
8006       struct type *branch_type;
8007
8008       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8009
8010       if (dval0 == NULL)
8011         {
8012           /* Using plain value_from_contents_and_address here causes
8013              problems because we will end up trying to resolve a type
8014              that is currently being constructed.  */
8015           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8016                                                              address);
8017           rtype = value_type (dval);
8018         }
8019       else
8020         dval = dval0;
8021
8022       branch_type =
8023         to_fixed_variant_branch_type
8024         (TYPE_FIELD_TYPE (type, variant_field),
8025          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8026          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8027       if (branch_type == NULL)
8028         {
8029           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8030             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8031           TYPE_NFIELDS (rtype) -= 1;
8032         }
8033       else
8034         {
8035           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8036           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8037           fld_bit_len =
8038             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8039             TARGET_CHAR_BIT;
8040           if (off + fld_bit_len > bit_len)
8041             bit_len = off + fld_bit_len;
8042           TYPE_LENGTH (rtype) =
8043             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8044         }
8045     }
8046
8047   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8048      should contain the alignment of that record, which should be a strictly
8049      positive value.  If null or negative, then something is wrong, most
8050      probably in the debug info.  In that case, we don't round up the size
8051      of the resulting type.  If this record is not part of another structure,
8052      the current RTYPE length might be good enough for our purposes.  */
8053   if (TYPE_LENGTH (type) <= 0)
8054     {
8055       if (TYPE_NAME (rtype))
8056         warning (_("Invalid type size for `%s' detected: %d."),
8057                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8058       else
8059         warning (_("Invalid type size for <unnamed> detected: %d."),
8060                  TYPE_LENGTH (type));
8061     }
8062   else
8063     {
8064       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8065                                          TYPE_LENGTH (type));
8066     }
8067
8068   value_free_to_mark (mark);
8069   if (TYPE_LENGTH (rtype) > varsize_limit)
8070     error (_("record type with dynamic size is larger than varsize-limit"));
8071   return rtype;
8072 }
8073
8074 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8075    of 1.  */
8076
8077 static struct type *
8078 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8079                                CORE_ADDR address, struct value *dval0)
8080 {
8081   return ada_template_to_fixed_record_type_1 (type, valaddr,
8082                                               address, dval0, 1);
8083 }
8084
8085 /* An ordinary record type in which ___XVL-convention fields and
8086    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8087    static approximations, containing all possible fields.  Uses
8088    no runtime values.  Useless for use in values, but that's OK,
8089    since the results are used only for type determinations.   Works on both
8090    structs and unions.  Representation note: to save space, we memorize
8091    the result of this function in the TYPE_TARGET_TYPE of the
8092    template type.  */
8093
8094 static struct type *
8095 template_to_static_fixed_type (struct type *type0)
8096 {
8097   struct type *type;
8098   int nfields;
8099   int f;
8100
8101   if (TYPE_TARGET_TYPE (type0) != NULL)
8102     return TYPE_TARGET_TYPE (type0);
8103
8104   nfields = TYPE_NFIELDS (type0);
8105   type = type0;
8106
8107   for (f = 0; f < nfields; f += 1)
8108     {
8109       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
8110       struct type *new_type;
8111
8112       if (is_dynamic_field (type0, f))
8113         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8114       else
8115         new_type = static_unwrap_type (field_type);
8116       if (type == type0 && new_type != field_type)
8117         {
8118           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8119           TYPE_CODE (type) = TYPE_CODE (type0);
8120           INIT_CPLUS_SPECIFIC (type);
8121           TYPE_NFIELDS (type) = nfields;
8122           TYPE_FIELDS (type) = (struct field *)
8123             TYPE_ALLOC (type, nfields * sizeof (struct field));
8124           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8125                   sizeof (struct field) * nfields);
8126           TYPE_NAME (type) = ada_type_name (type0);
8127           TYPE_TAG_NAME (type) = NULL;
8128           TYPE_FIXED_INSTANCE (type) = 1;
8129           TYPE_LENGTH (type) = 0;
8130         }
8131       TYPE_FIELD_TYPE (type, f) = new_type;
8132       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8133     }
8134   return type;
8135 }
8136
8137 /* Given an object of type TYPE whose contents are at VALADDR and
8138    whose address in memory is ADDRESS, returns a revision of TYPE,
8139    which should be a non-dynamic-sized record, in which the variant
8140    part, if any, is replaced with the appropriate branch.  Looks
8141    for discriminant values in DVAL0, which can be NULL if the record
8142    contains the necessary discriminant values.  */
8143
8144 static struct type *
8145 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8146                                    CORE_ADDR address, struct value *dval0)
8147 {
8148   struct value *mark = value_mark ();
8149   struct value *dval;
8150   struct type *rtype;
8151   struct type *branch_type;
8152   int nfields = TYPE_NFIELDS (type);
8153   int variant_field = variant_field_index (type);
8154
8155   if (variant_field == -1)
8156     return type;
8157
8158   if (dval0 == NULL)
8159     {
8160       dval = value_from_contents_and_address (type, valaddr, address);
8161       type = value_type (dval);
8162     }
8163   else
8164     dval = dval0;
8165
8166   rtype = alloc_type_copy (type);
8167   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8168   INIT_CPLUS_SPECIFIC (rtype);
8169   TYPE_NFIELDS (rtype) = nfields;
8170   TYPE_FIELDS (rtype) =
8171     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8172   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8173           sizeof (struct field) * nfields);
8174   TYPE_NAME (rtype) = ada_type_name (type);
8175   TYPE_TAG_NAME (rtype) = NULL;
8176   TYPE_FIXED_INSTANCE (rtype) = 1;
8177   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8178
8179   branch_type = to_fixed_variant_branch_type
8180     (TYPE_FIELD_TYPE (type, variant_field),
8181      cond_offset_host (valaddr,
8182                        TYPE_FIELD_BITPOS (type, variant_field)
8183                        / TARGET_CHAR_BIT),
8184      cond_offset_target (address,
8185                          TYPE_FIELD_BITPOS (type, variant_field)
8186                          / TARGET_CHAR_BIT), dval);
8187   if (branch_type == NULL)
8188     {
8189       int f;
8190
8191       for (f = variant_field + 1; f < nfields; f += 1)
8192         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8193       TYPE_NFIELDS (rtype) -= 1;
8194     }
8195   else
8196     {
8197       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8198       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8199       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8200       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8201     }
8202   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8203
8204   value_free_to_mark (mark);
8205   return rtype;
8206 }
8207
8208 /* An ordinary record type (with fixed-length fields) that describes
8209    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8210    beginning of this section].   Any necessary discriminants' values
8211    should be in DVAL, a record value; it may be NULL if the object
8212    at ADDR itself contains any necessary discriminant values.
8213    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8214    values from the record are needed.  Except in the case that DVAL,
8215    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8216    unchecked) is replaced by a particular branch of the variant.
8217
8218    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8219    is questionable and may be removed.  It can arise during the
8220    processing of an unconstrained-array-of-record type where all the
8221    variant branches have exactly the same size.  This is because in
8222    such cases, the compiler does not bother to use the XVS convention
8223    when encoding the record.  I am currently dubious of this
8224    shortcut and suspect the compiler should be altered.  FIXME.  */
8225
8226 static struct type *
8227 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8228                       CORE_ADDR address, struct value *dval)
8229 {
8230   struct type *templ_type;
8231
8232   if (TYPE_FIXED_INSTANCE (type0))
8233     return type0;
8234
8235   templ_type = dynamic_template_type (type0);
8236
8237   if (templ_type != NULL)
8238     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8239   else if (variant_field_index (type0) >= 0)
8240     {
8241       if (dval == NULL && valaddr == NULL && address == 0)
8242         return type0;
8243       return to_record_with_fixed_variant_part (type0, valaddr, address,
8244                                                 dval);
8245     }
8246   else
8247     {
8248       TYPE_FIXED_INSTANCE (type0) = 1;
8249       return type0;
8250     }
8251
8252 }
8253
8254 /* An ordinary record type (with fixed-length fields) that describes
8255    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8256    union type.  Any necessary discriminants' values should be in DVAL,
8257    a record value.  That is, this routine selects the appropriate
8258    branch of the union at ADDR according to the discriminant value
8259    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8260    it represents a variant subject to a pragma Unchecked_Union.  */
8261
8262 static struct type *
8263 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8264                               CORE_ADDR address, struct value *dval)
8265 {
8266   int which;
8267   struct type *templ_type;
8268   struct type *var_type;
8269
8270   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8271     var_type = TYPE_TARGET_TYPE (var_type0);
8272   else
8273     var_type = var_type0;
8274
8275   templ_type = ada_find_parallel_type (var_type, "___XVU");
8276
8277   if (templ_type != NULL)
8278     var_type = templ_type;
8279
8280   if (is_unchecked_variant (var_type, value_type (dval)))
8281       return var_type0;
8282   which =
8283     ada_which_variant_applies (var_type,
8284                                value_type (dval), value_contents (dval));
8285
8286   if (which < 0)
8287     return empty_record (var_type);
8288   else if (is_dynamic_field (var_type, which))
8289     return to_fixed_record_type
8290       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8291        valaddr, address, dval);
8292   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8293     return
8294       to_fixed_record_type
8295       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8296   else
8297     return TYPE_FIELD_TYPE (var_type, which);
8298 }
8299
8300 /* Assuming that TYPE0 is an array type describing the type of a value
8301    at ADDR, and that DVAL describes a record containing any
8302    discriminants used in TYPE0, returns a type for the value that
8303    contains no dynamic components (that is, no components whose sizes
8304    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8305    true, gives an error message if the resulting type's size is over
8306    varsize_limit.  */
8307
8308 static struct type *
8309 to_fixed_array_type (struct type *type0, struct value *dval,
8310                      int ignore_too_big)
8311 {
8312   struct type *index_type_desc;
8313   struct type *result;
8314   int constrained_packed_array_p;
8315
8316   type0 = ada_check_typedef (type0);
8317   if (TYPE_FIXED_INSTANCE (type0))
8318     return type0;
8319
8320   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8321   if (constrained_packed_array_p)
8322     type0 = decode_constrained_packed_array_type (type0);
8323
8324   index_type_desc = ada_find_parallel_type (type0, "___XA");
8325   ada_fixup_array_indexes_type (index_type_desc);
8326   if (index_type_desc == NULL)
8327     {
8328       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8329
8330       /* NOTE: elt_type---the fixed version of elt_type0---should never
8331          depend on the contents of the array in properly constructed
8332          debugging data.  */
8333       /* Create a fixed version of the array element type.
8334          We're not providing the address of an element here,
8335          and thus the actual object value cannot be inspected to do
8336          the conversion.  This should not be a problem, since arrays of
8337          unconstrained objects are not allowed.  In particular, all
8338          the elements of an array of a tagged type should all be of
8339          the same type specified in the debugging info.  No need to
8340          consult the object tag.  */
8341       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8342
8343       /* Make sure we always create a new array type when dealing with
8344          packed array types, since we're going to fix-up the array
8345          type length and element bitsize a little further down.  */
8346       if (elt_type0 == elt_type && !constrained_packed_array_p)
8347         result = type0;
8348       else
8349         result = create_array_type (alloc_type_copy (type0),
8350                                     elt_type, TYPE_INDEX_TYPE (type0));
8351     }
8352   else
8353     {
8354       int i;
8355       struct type *elt_type0;
8356
8357       elt_type0 = type0;
8358       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8359         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8360
8361       /* NOTE: result---the fixed version of elt_type0---should never
8362          depend on the contents of the array in properly constructed
8363          debugging data.  */
8364       /* Create a fixed version of the array element type.
8365          We're not providing the address of an element here,
8366          and thus the actual object value cannot be inspected to do
8367          the conversion.  This should not be a problem, since arrays of
8368          unconstrained objects are not allowed.  In particular, all
8369          the elements of an array of a tagged type should all be of
8370          the same type specified in the debugging info.  No need to
8371          consult the object tag.  */
8372       result =
8373         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8374
8375       elt_type0 = type0;
8376       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8377         {
8378           struct type *range_type =
8379             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8380
8381           result = create_array_type (alloc_type_copy (elt_type0),
8382                                       result, range_type);
8383           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8384         }
8385       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8386         error (_("array type with dynamic size is larger than varsize-limit"));
8387     }
8388
8389   /* We want to preserve the type name.  This can be useful when
8390      trying to get the type name of a value that has already been
8391      printed (for instance, if the user did "print VAR; whatis $".  */
8392   TYPE_NAME (result) = TYPE_NAME (type0);
8393
8394   if (constrained_packed_array_p)
8395     {
8396       /* So far, the resulting type has been created as if the original
8397          type was a regular (non-packed) array type.  As a result, the
8398          bitsize of the array elements needs to be set again, and the array
8399          length needs to be recomputed based on that bitsize.  */
8400       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8401       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8402
8403       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8404       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8405       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8406         TYPE_LENGTH (result)++;
8407     }
8408
8409   TYPE_FIXED_INSTANCE (result) = 1;
8410   return result;
8411 }
8412
8413
8414 /* A standard type (containing no dynamically sized components)
8415    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8416    DVAL describes a record containing any discriminants used in TYPE0,
8417    and may be NULL if there are none, or if the object of type TYPE at
8418    ADDRESS or in VALADDR contains these discriminants.
8419    
8420    If CHECK_TAG is not null, in the case of tagged types, this function
8421    attempts to locate the object's tag and use it to compute the actual
8422    type.  However, when ADDRESS is null, we cannot use it to determine the
8423    location of the tag, and therefore compute the tagged type's actual type.
8424    So we return the tagged type without consulting the tag.  */
8425    
8426 static struct type *
8427 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8428                    CORE_ADDR address, struct value *dval, int check_tag)
8429 {
8430   type = ada_check_typedef (type);
8431   switch (TYPE_CODE (type))
8432     {
8433     default:
8434       return type;
8435     case TYPE_CODE_STRUCT:
8436       {
8437         struct type *static_type = to_static_fixed_type (type);
8438         struct type *fixed_record_type =
8439           to_fixed_record_type (type, valaddr, address, NULL);
8440
8441         /* If STATIC_TYPE is a tagged type and we know the object's address,
8442            then we can determine its tag, and compute the object's actual
8443            type from there.  Note that we have to use the fixed record
8444            type (the parent part of the record may have dynamic fields
8445            and the way the location of _tag is expressed may depend on
8446            them).  */
8447
8448         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8449           {
8450             struct value *tag =
8451               value_tag_from_contents_and_address
8452               (fixed_record_type,
8453                valaddr,
8454                address);
8455             struct type *real_type = type_from_tag (tag);
8456             struct value *obj =
8457               value_from_contents_and_address (fixed_record_type,
8458                                                valaddr,
8459                                                address);
8460             fixed_record_type = value_type (obj);
8461             if (real_type != NULL)
8462               return to_fixed_record_type
8463                 (real_type, NULL,
8464                  value_address (ada_tag_value_at_base_address (obj)), NULL);
8465           }
8466
8467         /* Check to see if there is a parallel ___XVZ variable.
8468            If there is, then it provides the actual size of our type.  */
8469         else if (ada_type_name (fixed_record_type) != NULL)
8470           {
8471             const char *name = ada_type_name (fixed_record_type);
8472             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8473             int xvz_found = 0;
8474             LONGEST size;
8475
8476             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8477             size = get_int_var_value (xvz_name, &xvz_found);
8478             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8479               {
8480                 fixed_record_type = copy_type (fixed_record_type);
8481                 TYPE_LENGTH (fixed_record_type) = size;
8482
8483                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8484                    observed this when the debugging info is STABS, and
8485                    apparently it is something that is hard to fix.
8486
8487                    In practice, we don't need the actual type definition
8488                    at all, because the presence of the XVZ variable allows us
8489                    to assume that there must be a XVS type as well, which we
8490                    should be able to use later, when we need the actual type
8491                    definition.
8492
8493                    In the meantime, pretend that the "fixed" type we are
8494                    returning is NOT a stub, because this can cause trouble
8495                    when using this type to create new types targeting it.
8496                    Indeed, the associated creation routines often check
8497                    whether the target type is a stub and will try to replace
8498                    it, thus using a type with the wrong size.  This, in turn,
8499                    might cause the new type to have the wrong size too.
8500                    Consider the case of an array, for instance, where the size
8501                    of the array is computed from the number of elements in
8502                    our array multiplied by the size of its element.  */
8503                 TYPE_STUB (fixed_record_type) = 0;
8504               }
8505           }
8506         return fixed_record_type;
8507       }
8508     case TYPE_CODE_ARRAY:
8509       return to_fixed_array_type (type, dval, 1);
8510     case TYPE_CODE_UNION:
8511       if (dval == NULL)
8512         return type;
8513       else
8514         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8515     }
8516 }
8517
8518 /* The same as ada_to_fixed_type_1, except that it preserves the type
8519    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8520
8521    The typedef layer needs be preserved in order to differentiate between
8522    arrays and array pointers when both types are implemented using the same
8523    fat pointer.  In the array pointer case, the pointer is encoded as
8524    a typedef of the pointer type.  For instance, considering:
8525
8526           type String_Access is access String;
8527           S1 : String_Access := null;
8528
8529    To the debugger, S1 is defined as a typedef of type String.  But
8530    to the user, it is a pointer.  So if the user tries to print S1,
8531    we should not dereference the array, but print the array address
8532    instead.
8533
8534    If we didn't preserve the typedef layer, we would lose the fact that
8535    the type is to be presented as a pointer (needs de-reference before
8536    being printed).  And we would also use the source-level type name.  */
8537
8538 struct type *
8539 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8540                    CORE_ADDR address, struct value *dval, int check_tag)
8541
8542 {
8543   struct type *fixed_type =
8544     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8545
8546   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8547       then preserve the typedef layer.
8548
8549       Implementation note: We can only check the main-type portion of
8550       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8551       from TYPE now returns a type that has the same instance flags
8552       as TYPE.  For instance, if TYPE is a "typedef const", and its
8553       target type is a "struct", then the typedef elimination will return
8554       a "const" version of the target type.  See check_typedef for more
8555       details about how the typedef layer elimination is done.
8556
8557       brobecker/2010-11-19: It seems to me that the only case where it is
8558       useful to preserve the typedef layer is when dealing with fat pointers.
8559       Perhaps, we could add a check for that and preserve the typedef layer
8560       only in that situation.  But this seems unecessary so far, probably
8561       because we call check_typedef/ada_check_typedef pretty much everywhere.
8562       */
8563   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8564       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8565           == TYPE_MAIN_TYPE (fixed_type)))
8566     return type;
8567
8568   return fixed_type;
8569 }
8570
8571 /* A standard (static-sized) type corresponding as well as possible to
8572    TYPE0, but based on no runtime data.  */
8573
8574 static struct type *
8575 to_static_fixed_type (struct type *type0)
8576 {
8577   struct type *type;
8578
8579   if (type0 == NULL)
8580     return NULL;
8581
8582   if (TYPE_FIXED_INSTANCE (type0))
8583     return type0;
8584
8585   type0 = ada_check_typedef (type0);
8586
8587   switch (TYPE_CODE (type0))
8588     {
8589     default:
8590       return type0;
8591     case TYPE_CODE_STRUCT:
8592       type = dynamic_template_type (type0);
8593       if (type != NULL)
8594         return template_to_static_fixed_type (type);
8595       else
8596         return template_to_static_fixed_type (type0);
8597     case TYPE_CODE_UNION:
8598       type = ada_find_parallel_type (type0, "___XVU");
8599       if (type != NULL)
8600         return template_to_static_fixed_type (type);
8601       else
8602         return template_to_static_fixed_type (type0);
8603     }
8604 }
8605
8606 /* A static approximation of TYPE with all type wrappers removed.  */
8607
8608 static struct type *
8609 static_unwrap_type (struct type *type)
8610 {
8611   if (ada_is_aligner_type (type))
8612     {
8613       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8614       if (ada_type_name (type1) == NULL)
8615         TYPE_NAME (type1) = ada_type_name (type);
8616
8617       return static_unwrap_type (type1);
8618     }
8619   else
8620     {
8621       struct type *raw_real_type = ada_get_base_type (type);
8622
8623       if (raw_real_type == type)
8624         return type;
8625       else
8626         return to_static_fixed_type (raw_real_type);
8627     }
8628 }
8629
8630 /* In some cases, incomplete and private types require
8631    cross-references that are not resolved as records (for example,
8632       type Foo;
8633       type FooP is access Foo;
8634       V: FooP;
8635       type Foo is array ...;
8636    ).  In these cases, since there is no mechanism for producing
8637    cross-references to such types, we instead substitute for FooP a
8638    stub enumeration type that is nowhere resolved, and whose tag is
8639    the name of the actual type.  Call these types "non-record stubs".  */
8640
8641 /* A type equivalent to TYPE that is not a non-record stub, if one
8642    exists, otherwise TYPE.  */
8643
8644 struct type *
8645 ada_check_typedef (struct type *type)
8646 {
8647   if (type == NULL)
8648     return NULL;
8649
8650   /* If our type is a typedef type of a fat pointer, then we're done.
8651      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8652      what allows us to distinguish between fat pointers that represent
8653      array types, and fat pointers that represent array access types
8654      (in both cases, the compiler implements them as fat pointers).  */
8655   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8656       && is_thick_pntr (ada_typedef_target_type (type)))
8657     return type;
8658
8659   CHECK_TYPEDEF (type);
8660   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8661       || !TYPE_STUB (type)
8662       || TYPE_TAG_NAME (type) == NULL)
8663     return type;
8664   else
8665     {
8666       const char *name = TYPE_TAG_NAME (type);
8667       struct type *type1 = ada_find_any_type (name);
8668
8669       if (type1 == NULL)
8670         return type;
8671
8672       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8673          stubs pointing to arrays, as we don't create symbols for array
8674          types, only for the typedef-to-array types).  If that's the case,
8675          strip the typedef layer.  */
8676       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8677         type1 = ada_check_typedef (type1);
8678
8679       return type1;
8680     }
8681 }
8682
8683 /* A value representing the data at VALADDR/ADDRESS as described by
8684    type TYPE0, but with a standard (static-sized) type that correctly
8685    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8686    type, then return VAL0 [this feature is simply to avoid redundant
8687    creation of struct values].  */
8688
8689 static struct value *
8690 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8691                            struct value *val0)
8692 {
8693   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8694
8695   if (type == type0 && val0 != NULL)
8696     return val0;
8697   else
8698     return value_from_contents_and_address (type, 0, address);
8699 }
8700
8701 /* A value representing VAL, but with a standard (static-sized) type
8702    that correctly describes it.  Does not necessarily create a new
8703    value.  */
8704
8705 struct value *
8706 ada_to_fixed_value (struct value *val)
8707 {
8708   val = unwrap_value (val);
8709   val = ada_to_fixed_value_create (value_type (val),
8710                                       value_address (val),
8711                                       val);
8712   return val;
8713 }
8714 \f
8715
8716 /* Attributes */
8717
8718 /* Table mapping attribute numbers to names.
8719    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8720
8721 static const char *attribute_names[] = {
8722   "<?>",
8723
8724   "first",
8725   "last",
8726   "length",
8727   "image",
8728   "max",
8729   "min",
8730   "modulus",
8731   "pos",
8732   "size",
8733   "tag",
8734   "val",
8735   0
8736 };
8737
8738 const char *
8739 ada_attribute_name (enum exp_opcode n)
8740 {
8741   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8742     return attribute_names[n - OP_ATR_FIRST + 1];
8743   else
8744     return attribute_names[0];
8745 }
8746
8747 /* Evaluate the 'POS attribute applied to ARG.  */
8748
8749 static LONGEST
8750 pos_atr (struct value *arg)
8751 {
8752   struct value *val = coerce_ref (arg);
8753   struct type *type = value_type (val);
8754
8755   if (!discrete_type_p (type))
8756     error (_("'POS only defined on discrete types"));
8757
8758   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8759     {
8760       int i;
8761       LONGEST v = value_as_long (val);
8762
8763       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8764         {
8765           if (v == TYPE_FIELD_ENUMVAL (type, i))
8766             return i;
8767         }
8768       error (_("enumeration value is invalid: can't find 'POS"));
8769     }
8770   else
8771     return value_as_long (val);
8772 }
8773
8774 static struct value *
8775 value_pos_atr (struct type *type, struct value *arg)
8776 {
8777   return value_from_longest (type, pos_atr (arg));
8778 }
8779
8780 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8781
8782 static struct value *
8783 value_val_atr (struct type *type, struct value *arg)
8784 {
8785   if (!discrete_type_p (type))
8786     error (_("'VAL only defined on discrete types"));
8787   if (!integer_type_p (value_type (arg)))
8788     error (_("'VAL requires integral argument"));
8789
8790   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8791     {
8792       long pos = value_as_long (arg);
8793
8794       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8795         error (_("argument to 'VAL out of range"));
8796       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8797     }
8798   else
8799     return value_from_longest (type, value_as_long (arg));
8800 }
8801 \f
8802
8803                                 /* Evaluation */
8804
8805 /* True if TYPE appears to be an Ada character type.
8806    [At the moment, this is true only for Character and Wide_Character;
8807    It is a heuristic test that could stand improvement].  */
8808
8809 int
8810 ada_is_character_type (struct type *type)
8811 {
8812   const char *name;
8813
8814   /* If the type code says it's a character, then assume it really is,
8815      and don't check any further.  */
8816   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8817     return 1;
8818   
8819   /* Otherwise, assume it's a character type iff it is a discrete type
8820      with a known character type name.  */
8821   name = ada_type_name (type);
8822   return (name != NULL
8823           && (TYPE_CODE (type) == TYPE_CODE_INT
8824               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8825           && (strcmp (name, "character") == 0
8826               || strcmp (name, "wide_character") == 0
8827               || strcmp (name, "wide_wide_character") == 0
8828               || strcmp (name, "unsigned char") == 0));
8829 }
8830
8831 /* True if TYPE appears to be an Ada string type.  */
8832
8833 int
8834 ada_is_string_type (struct type *type)
8835 {
8836   type = ada_check_typedef (type);
8837   if (type != NULL
8838       && TYPE_CODE (type) != TYPE_CODE_PTR
8839       && (ada_is_simple_array_type (type)
8840           || ada_is_array_descriptor_type (type))
8841       && ada_array_arity (type) == 1)
8842     {
8843       struct type *elttype = ada_array_element_type (type, 1);
8844
8845       return ada_is_character_type (elttype);
8846     }
8847   else
8848     return 0;
8849 }
8850
8851 /* The compiler sometimes provides a parallel XVS type for a given
8852    PAD type.  Normally, it is safe to follow the PAD type directly,
8853    but older versions of the compiler have a bug that causes the offset
8854    of its "F" field to be wrong.  Following that field in that case
8855    would lead to incorrect results, but this can be worked around
8856    by ignoring the PAD type and using the associated XVS type instead.
8857
8858    Set to True if the debugger should trust the contents of PAD types.
8859    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8860 static int trust_pad_over_xvs = 1;
8861
8862 /* True if TYPE is a struct type introduced by the compiler to force the
8863    alignment of a value.  Such types have a single field with a
8864    distinctive name.  */
8865
8866 int
8867 ada_is_aligner_type (struct type *type)
8868 {
8869   type = ada_check_typedef (type);
8870
8871   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8872     return 0;
8873
8874   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8875           && TYPE_NFIELDS (type) == 1
8876           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8877 }
8878
8879 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8880    the parallel type.  */
8881
8882 struct type *
8883 ada_get_base_type (struct type *raw_type)
8884 {
8885   struct type *real_type_namer;
8886   struct type *raw_real_type;
8887
8888   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8889     return raw_type;
8890
8891   if (ada_is_aligner_type (raw_type))
8892     /* The encoding specifies that we should always use the aligner type.
8893        So, even if this aligner type has an associated XVS type, we should
8894        simply ignore it.
8895
8896        According to the compiler gurus, an XVS type parallel to an aligner
8897        type may exist because of a stabs limitation.  In stabs, aligner
8898        types are empty because the field has a variable-sized type, and
8899        thus cannot actually be used as an aligner type.  As a result,
8900        we need the associated parallel XVS type to decode the type.
8901        Since the policy in the compiler is to not change the internal
8902        representation based on the debugging info format, we sometimes
8903        end up having a redundant XVS type parallel to the aligner type.  */
8904     return raw_type;
8905
8906   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8907   if (real_type_namer == NULL
8908       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8909       || TYPE_NFIELDS (real_type_namer) != 1)
8910     return raw_type;
8911
8912   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8913     {
8914       /* This is an older encoding form where the base type needs to be
8915          looked up by name.  We prefer the newer enconding because it is
8916          more efficient.  */
8917       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8918       if (raw_real_type == NULL)
8919         return raw_type;
8920       else
8921         return raw_real_type;
8922     }
8923
8924   /* The field in our XVS type is a reference to the base type.  */
8925   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
8926 }
8927
8928 /* The type of value designated by TYPE, with all aligners removed.  */
8929
8930 struct type *
8931 ada_aligned_type (struct type *type)
8932 {
8933   if (ada_is_aligner_type (type))
8934     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8935   else
8936     return ada_get_base_type (type);
8937 }
8938
8939
8940 /* The address of the aligned value in an object at address VALADDR
8941    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
8942
8943 const gdb_byte *
8944 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
8945 {
8946   if (ada_is_aligner_type (type))
8947     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8948                                    valaddr +
8949                                    TYPE_FIELD_BITPOS (type,
8950                                                       0) / TARGET_CHAR_BIT);
8951   else
8952     return valaddr;
8953 }
8954
8955
8956
8957 /* The printed representation of an enumeration literal with encoded
8958    name NAME.  The value is good to the next call of ada_enum_name.  */
8959 const char *
8960 ada_enum_name (const char *name)
8961 {
8962   static char *result;
8963   static size_t result_len = 0;
8964   char *tmp;
8965
8966   /* First, unqualify the enumeration name:
8967      1. Search for the last '.' character.  If we find one, then skip
8968      all the preceding characters, the unqualified name starts
8969      right after that dot.
8970      2. Otherwise, we may be debugging on a target where the compiler
8971      translates dots into "__".  Search forward for double underscores,
8972      but stop searching when we hit an overloading suffix, which is
8973      of the form "__" followed by digits.  */
8974
8975   tmp = strrchr (name, '.');
8976   if (tmp != NULL)
8977     name = tmp + 1;
8978   else
8979     {
8980       while ((tmp = strstr (name, "__")) != NULL)
8981         {
8982           if (isdigit (tmp[2]))
8983             break;
8984           else
8985             name = tmp + 2;
8986         }
8987     }
8988
8989   if (name[0] == 'Q')
8990     {
8991       int v;
8992
8993       if (name[1] == 'U' || name[1] == 'W')
8994         {
8995           if (sscanf (name + 2, "%x", &v) != 1)
8996             return name;
8997         }
8998       else
8999         return name;
9000
9001       GROW_VECT (result, result_len, 16);
9002       if (isascii (v) && isprint (v))
9003         xsnprintf (result, result_len, "'%c'", v);
9004       else if (name[1] == 'U')
9005         xsnprintf (result, result_len, "[\"%02x\"]", v);
9006       else
9007         xsnprintf (result, result_len, "[\"%04x\"]", v);
9008
9009       return result;
9010     }
9011   else
9012     {
9013       tmp = strstr (name, "__");
9014       if (tmp == NULL)
9015         tmp = strstr (name, "$");
9016       if (tmp != NULL)
9017         {
9018           GROW_VECT (result, result_len, tmp - name + 1);
9019           strncpy (result, name, tmp - name);
9020           result[tmp - name] = '\0';
9021           return result;
9022         }
9023
9024       return name;
9025     }
9026 }
9027
9028 /* Evaluate the subexpression of EXP starting at *POS as for
9029    evaluate_type, updating *POS to point just past the evaluated
9030    expression.  */
9031
9032 static struct value *
9033 evaluate_subexp_type (struct expression *exp, int *pos)
9034 {
9035   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9036 }
9037
9038 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9039    value it wraps.  */
9040
9041 static struct value *
9042 unwrap_value (struct value *val)
9043 {
9044   struct type *type = ada_check_typedef (value_type (val));
9045
9046   if (ada_is_aligner_type (type))
9047     {
9048       struct value *v = ada_value_struct_elt (val, "F", 0);
9049       struct type *val_type = ada_check_typedef (value_type (v));
9050
9051       if (ada_type_name (val_type) == NULL)
9052         TYPE_NAME (val_type) = ada_type_name (type);
9053
9054       return unwrap_value (v);
9055     }
9056   else
9057     {
9058       struct type *raw_real_type =
9059         ada_check_typedef (ada_get_base_type (type));
9060
9061       /* If there is no parallel XVS or XVE type, then the value is
9062          already unwrapped.  Return it without further modification.  */
9063       if ((type == raw_real_type)
9064           && ada_find_parallel_type (type, "___XVE") == NULL)
9065         return val;
9066
9067       return
9068         coerce_unspec_val_to_type
9069         (val, ada_to_fixed_type (raw_real_type, 0,
9070                                  value_address (val),
9071                                  NULL, 1));
9072     }
9073 }
9074
9075 static struct value *
9076 cast_to_fixed (struct type *type, struct value *arg)
9077 {
9078   LONGEST val;
9079
9080   if (type == value_type (arg))
9081     return arg;
9082   else if (ada_is_fixed_point_type (value_type (arg)))
9083     val = ada_float_to_fixed (type,
9084                               ada_fixed_to_float (value_type (arg),
9085                                                   value_as_long (arg)));
9086   else
9087     {
9088       DOUBLEST argd = value_as_double (arg);
9089
9090       val = ada_float_to_fixed (type, argd);
9091     }
9092
9093   return value_from_longest (type, val);
9094 }
9095
9096 static struct value *
9097 cast_from_fixed (struct type *type, struct value *arg)
9098 {
9099   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9100                                      value_as_long (arg));
9101
9102   return value_from_double (type, val);
9103 }
9104
9105 /* Given two array types T1 and T2, return nonzero iff both arrays
9106    contain the same number of elements.  */
9107
9108 static int
9109 ada_same_array_size_p (struct type *t1, struct type *t2)
9110 {
9111   LONGEST lo1, hi1, lo2, hi2;
9112
9113   /* Get the array bounds in order to verify that the size of
9114      the two arrays match.  */
9115   if (!get_array_bounds (t1, &lo1, &hi1)
9116       || !get_array_bounds (t2, &lo2, &hi2))
9117     error (_("unable to determine array bounds"));
9118
9119   /* To make things easier for size comparison, normalize a bit
9120      the case of empty arrays by making sure that the difference
9121      between upper bound and lower bound is always -1.  */
9122   if (lo1 > hi1)
9123     hi1 = lo1 - 1;
9124   if (lo2 > hi2)
9125     hi2 = lo2 - 1;
9126
9127   return (hi1 - lo1 == hi2 - lo2);
9128 }
9129
9130 /* Assuming that VAL is an array of integrals, and TYPE represents
9131    an array with the same number of elements, but with wider integral
9132    elements, return an array "casted" to TYPE.  In practice, this
9133    means that the returned array is built by casting each element
9134    of the original array into TYPE's (wider) element type.  */
9135
9136 static struct value *
9137 ada_promote_array_of_integrals (struct type *type, struct value *val)
9138 {
9139   struct type *elt_type = TYPE_TARGET_TYPE (type);
9140   LONGEST lo, hi;
9141   struct value *res;
9142   LONGEST i;
9143
9144   /* Verify that both val and type are arrays of scalars, and
9145      that the size of val's elements is smaller than the size
9146      of type's element.  */
9147   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9148   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9149   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9150   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9151   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9152               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9153
9154   if (!get_array_bounds (type, &lo, &hi))
9155     error (_("unable to determine array bounds"));
9156
9157   res = allocate_value (type);
9158
9159   /* Promote each array element.  */
9160   for (i = 0; i < hi - lo + 1; i++)
9161     {
9162       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9163
9164       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9165               value_contents_all (elt), TYPE_LENGTH (elt_type));
9166     }
9167
9168   return res;
9169 }
9170
9171 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9172    return the converted value.  */
9173
9174 static struct value *
9175 coerce_for_assign (struct type *type, struct value *val)
9176 {
9177   struct type *type2 = value_type (val);
9178
9179   if (type == type2)
9180     return val;
9181
9182   type2 = ada_check_typedef (type2);
9183   type = ada_check_typedef (type);
9184
9185   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9186       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9187     {
9188       val = ada_value_ind (val);
9189       type2 = value_type (val);
9190     }
9191
9192   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9193       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9194     {
9195       if (!ada_same_array_size_p (type, type2))
9196         error (_("cannot assign arrays of different length"));
9197
9198       if (is_integral_type (TYPE_TARGET_TYPE (type))
9199           && is_integral_type (TYPE_TARGET_TYPE (type2))
9200           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9201                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9202         {
9203           /* Allow implicit promotion of the array elements to
9204              a wider type.  */
9205           return ada_promote_array_of_integrals (type, val);
9206         }
9207
9208       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9209           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9210         error (_("Incompatible types in assignment"));
9211       deprecated_set_value_type (val, type);
9212     }
9213   return val;
9214 }
9215
9216 static struct value *
9217 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9218 {
9219   struct value *val;
9220   struct type *type1, *type2;
9221   LONGEST v, v1, v2;
9222
9223   arg1 = coerce_ref (arg1);
9224   arg2 = coerce_ref (arg2);
9225   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9226   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9227
9228   if (TYPE_CODE (type1) != TYPE_CODE_INT
9229       || TYPE_CODE (type2) != TYPE_CODE_INT)
9230     return value_binop (arg1, arg2, op);
9231
9232   switch (op)
9233     {
9234     case BINOP_MOD:
9235     case BINOP_DIV:
9236     case BINOP_REM:
9237       break;
9238     default:
9239       return value_binop (arg1, arg2, op);
9240     }
9241
9242   v2 = value_as_long (arg2);
9243   if (v2 == 0)
9244     error (_("second operand of %s must not be zero."), op_string (op));
9245
9246   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9247     return value_binop (arg1, arg2, op);
9248
9249   v1 = value_as_long (arg1);
9250   switch (op)
9251     {
9252     case BINOP_DIV:
9253       v = v1 / v2;
9254       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9255         v += v > 0 ? -1 : 1;
9256       break;
9257     case BINOP_REM:
9258       v = v1 % v2;
9259       if (v * v1 < 0)
9260         v -= v2;
9261       break;
9262     default:
9263       /* Should not reach this point.  */
9264       v = 0;
9265     }
9266
9267   val = allocate_value (type1);
9268   store_unsigned_integer (value_contents_raw (val),
9269                           TYPE_LENGTH (value_type (val)),
9270                           gdbarch_byte_order (get_type_arch (type1)), v);
9271   return val;
9272 }
9273
9274 static int
9275 ada_value_equal (struct value *arg1, struct value *arg2)
9276 {
9277   if (ada_is_direct_array_type (value_type (arg1))
9278       || ada_is_direct_array_type (value_type (arg2)))
9279     {
9280       /* Automatically dereference any array reference before
9281          we attempt to perform the comparison.  */
9282       arg1 = ada_coerce_ref (arg1);
9283       arg2 = ada_coerce_ref (arg2);
9284       
9285       arg1 = ada_coerce_to_simple_array (arg1);
9286       arg2 = ada_coerce_to_simple_array (arg2);
9287       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9288           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9289         error (_("Attempt to compare array with non-array"));
9290       /* FIXME: The following works only for types whose
9291          representations use all bits (no padding or undefined bits)
9292          and do not have user-defined equality.  */
9293       return
9294         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9295         && memcmp (value_contents (arg1), value_contents (arg2),
9296                    TYPE_LENGTH (value_type (arg1))) == 0;
9297     }
9298   return value_equal (arg1, arg2);
9299 }
9300
9301 /* Total number of component associations in the aggregate starting at
9302    index PC in EXP.  Assumes that index PC is the start of an
9303    OP_AGGREGATE.  */
9304
9305 static int
9306 num_component_specs (struct expression *exp, int pc)
9307 {
9308   int n, m, i;
9309
9310   m = exp->elts[pc + 1].longconst;
9311   pc += 3;
9312   n = 0;
9313   for (i = 0; i < m; i += 1)
9314     {
9315       switch (exp->elts[pc].opcode) 
9316         {
9317         default:
9318           n += 1;
9319           break;
9320         case OP_CHOICES:
9321           n += exp->elts[pc + 1].longconst;
9322           break;
9323         }
9324       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9325     }
9326   return n;
9327 }
9328
9329 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9330    component of LHS (a simple array or a record), updating *POS past
9331    the expression, assuming that LHS is contained in CONTAINER.  Does
9332    not modify the inferior's memory, nor does it modify LHS (unless
9333    LHS == CONTAINER).  */
9334
9335 static void
9336 assign_component (struct value *container, struct value *lhs, LONGEST index,
9337                   struct expression *exp, int *pos)
9338 {
9339   struct value *mark = value_mark ();
9340   struct value *elt;
9341
9342   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9343     {
9344       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9345       struct value *index_val = value_from_longest (index_type, index);
9346
9347       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9348     }
9349   else
9350     {
9351       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9352       elt = ada_to_fixed_value (elt);
9353     }
9354
9355   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9356     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9357   else
9358     value_assign_to_component (container, elt, 
9359                                ada_evaluate_subexp (NULL, exp, pos, 
9360                                                     EVAL_NORMAL));
9361
9362   value_free_to_mark (mark);
9363 }
9364
9365 /* Assuming that LHS represents an lvalue having a record or array
9366    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9367    of that aggregate's value to LHS, advancing *POS past the
9368    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9369    lvalue containing LHS (possibly LHS itself).  Does not modify
9370    the inferior's memory, nor does it modify the contents of 
9371    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9372
9373 static struct value *
9374 assign_aggregate (struct value *container, 
9375                   struct value *lhs, struct expression *exp, 
9376                   int *pos, enum noside noside)
9377 {
9378   struct type *lhs_type;
9379   int n = exp->elts[*pos+1].longconst;
9380   LONGEST low_index, high_index;
9381   int num_specs;
9382   LONGEST *indices;
9383   int max_indices, num_indices;
9384   int i;
9385
9386   *pos += 3;
9387   if (noside != EVAL_NORMAL)
9388     {
9389       for (i = 0; i < n; i += 1)
9390         ada_evaluate_subexp (NULL, exp, pos, noside);
9391       return container;
9392     }
9393
9394   container = ada_coerce_ref (container);
9395   if (ada_is_direct_array_type (value_type (container)))
9396     container = ada_coerce_to_simple_array (container);
9397   lhs = ada_coerce_ref (lhs);
9398   if (!deprecated_value_modifiable (lhs))
9399     error (_("Left operand of assignment is not a modifiable lvalue."));
9400
9401   lhs_type = value_type (lhs);
9402   if (ada_is_direct_array_type (lhs_type))
9403     {
9404       lhs = ada_coerce_to_simple_array (lhs);
9405       lhs_type = value_type (lhs);
9406       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9407       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9408     }
9409   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9410     {
9411       low_index = 0;
9412       high_index = num_visible_fields (lhs_type) - 1;
9413     }
9414   else
9415     error (_("Left-hand side must be array or record."));
9416
9417   num_specs = num_component_specs (exp, *pos - 3);
9418   max_indices = 4 * num_specs + 4;
9419   indices = alloca (max_indices * sizeof (indices[0]));
9420   indices[0] = indices[1] = low_index - 1;
9421   indices[2] = indices[3] = high_index + 1;
9422   num_indices = 4;
9423
9424   for (i = 0; i < n; i += 1)
9425     {
9426       switch (exp->elts[*pos].opcode)
9427         {
9428           case OP_CHOICES:
9429             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9430                                            &num_indices, max_indices,
9431                                            low_index, high_index);
9432             break;
9433           case OP_POSITIONAL:
9434             aggregate_assign_positional (container, lhs, exp, pos, indices,
9435                                          &num_indices, max_indices,
9436                                          low_index, high_index);
9437             break;
9438           case OP_OTHERS:
9439             if (i != n-1)
9440               error (_("Misplaced 'others' clause"));
9441             aggregate_assign_others (container, lhs, exp, pos, indices, 
9442                                      num_indices, low_index, high_index);
9443             break;
9444           default:
9445             error (_("Internal error: bad aggregate clause"));
9446         }
9447     }
9448
9449   return container;
9450 }
9451               
9452 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9453    construct at *POS, updating *POS past the construct, given that
9454    the positions are relative to lower bound LOW, where HIGH is the 
9455    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9456    updating *NUM_INDICES as needed.  CONTAINER is as for
9457    assign_aggregate.  */
9458 static void
9459 aggregate_assign_positional (struct value *container,
9460                              struct value *lhs, struct expression *exp,
9461                              int *pos, LONGEST *indices, int *num_indices,
9462                              int max_indices, LONGEST low, LONGEST high) 
9463 {
9464   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9465   
9466   if (ind - 1 == high)
9467     warning (_("Extra components in aggregate ignored."));
9468   if (ind <= high)
9469     {
9470       add_component_interval (ind, ind, indices, num_indices, max_indices);
9471       *pos += 3;
9472       assign_component (container, lhs, ind, exp, pos);
9473     }
9474   else
9475     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9476 }
9477
9478 /* Assign into the components of LHS indexed by the OP_CHOICES
9479    construct at *POS, updating *POS past the construct, given that
9480    the allowable indices are LOW..HIGH.  Record the indices assigned
9481    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9482    needed.  CONTAINER is as for assign_aggregate.  */
9483 static void
9484 aggregate_assign_from_choices (struct value *container,
9485                                struct value *lhs, struct expression *exp,
9486                                int *pos, LONGEST *indices, int *num_indices,
9487                                int max_indices, LONGEST low, LONGEST high) 
9488 {
9489   int j;
9490   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9491   int choice_pos, expr_pc;
9492   int is_array = ada_is_direct_array_type (value_type (lhs));
9493
9494   choice_pos = *pos += 3;
9495
9496   for (j = 0; j < n_choices; j += 1)
9497     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9498   expr_pc = *pos;
9499   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9500   
9501   for (j = 0; j < n_choices; j += 1)
9502     {
9503       LONGEST lower, upper;
9504       enum exp_opcode op = exp->elts[choice_pos].opcode;
9505
9506       if (op == OP_DISCRETE_RANGE)
9507         {
9508           choice_pos += 1;
9509           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9510                                                       EVAL_NORMAL));
9511           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
9512                                                       EVAL_NORMAL));
9513         }
9514       else if (is_array)
9515         {
9516           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
9517                                                       EVAL_NORMAL));
9518           upper = lower;
9519         }
9520       else
9521         {
9522           int ind;
9523           const char *name;
9524
9525           switch (op)
9526             {
9527             case OP_NAME:
9528               name = &exp->elts[choice_pos + 2].string;
9529               break;
9530             case OP_VAR_VALUE:
9531               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9532               break;
9533             default:
9534               error (_("Invalid record component association."));
9535             }
9536           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9537           ind = 0;
9538           if (! find_struct_field (name, value_type (lhs), 0, 
9539                                    NULL, NULL, NULL, NULL, &ind))
9540             error (_("Unknown component name: %s."), name);
9541           lower = upper = ind;
9542         }
9543
9544       if (lower <= upper && (lower < low || upper > high))
9545         error (_("Index in component association out of bounds."));
9546
9547       add_component_interval (lower, upper, indices, num_indices,
9548                               max_indices);
9549       while (lower <= upper)
9550         {
9551           int pos1;
9552
9553           pos1 = expr_pc;
9554           assign_component (container, lhs, lower, exp, &pos1);
9555           lower += 1;
9556         }
9557     }
9558 }
9559
9560 /* Assign the value of the expression in the OP_OTHERS construct in
9561    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9562    have not been previously assigned.  The index intervals already assigned
9563    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
9564    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9565 static void
9566 aggregate_assign_others (struct value *container,
9567                          struct value *lhs, struct expression *exp,
9568                          int *pos, LONGEST *indices, int num_indices,
9569                          LONGEST low, LONGEST high) 
9570 {
9571   int i;
9572   int expr_pc = *pos + 1;
9573   
9574   for (i = 0; i < num_indices - 2; i += 2)
9575     {
9576       LONGEST ind;
9577
9578       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9579         {
9580           int localpos;
9581
9582           localpos = expr_pc;
9583           assign_component (container, lhs, ind, exp, &localpos);
9584         }
9585     }
9586   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9587 }
9588
9589 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
9590    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9591    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9592    MAX_SIZE.  The resulting intervals do not overlap.  */
9593 static void
9594 add_component_interval (LONGEST low, LONGEST high, 
9595                         LONGEST* indices, int *size, int max_size)
9596 {
9597   int i, j;
9598
9599   for (i = 0; i < *size; i += 2) {
9600     if (high >= indices[i] && low <= indices[i + 1])
9601       {
9602         int kh;
9603
9604         for (kh = i + 2; kh < *size; kh += 2)
9605           if (high < indices[kh])
9606             break;
9607         if (low < indices[i])
9608           indices[i] = low;
9609         indices[i + 1] = indices[kh - 1];
9610         if (high > indices[i + 1])
9611           indices[i + 1] = high;
9612         memcpy (indices + i + 2, indices + kh, *size - kh);
9613         *size -= kh - i - 2;
9614         return;
9615       }
9616     else if (high < indices[i])
9617       break;
9618   }
9619         
9620   if (*size == max_size)
9621     error (_("Internal error: miscounted aggregate components."));
9622   *size += 2;
9623   for (j = *size-1; j >= i+2; j -= 1)
9624     indices[j] = indices[j - 2];
9625   indices[i] = low;
9626   indices[i + 1] = high;
9627 }
9628
9629 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9630    is different.  */
9631
9632 static struct value *
9633 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9634 {
9635   if (type == ada_check_typedef (value_type (arg2)))
9636     return arg2;
9637
9638   if (ada_is_fixed_point_type (type))
9639     return (cast_to_fixed (type, arg2));
9640
9641   if (ada_is_fixed_point_type (value_type (arg2)))
9642     return cast_from_fixed (type, arg2);
9643
9644   return value_cast (type, arg2);
9645 }
9646
9647 /*  Evaluating Ada expressions, and printing their result.
9648     ------------------------------------------------------
9649
9650     1. Introduction:
9651     ----------------
9652
9653     We usually evaluate an Ada expression in order to print its value.
9654     We also evaluate an expression in order to print its type, which
9655     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9656     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9657     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9658     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9659     similar.
9660
9661     Evaluating expressions is a little more complicated for Ada entities
9662     than it is for entities in languages such as C.  The main reason for
9663     this is that Ada provides types whose definition might be dynamic.
9664     One example of such types is variant records.  Or another example
9665     would be an array whose bounds can only be known at run time.
9666
9667     The following description is a general guide as to what should be
9668     done (and what should NOT be done) in order to evaluate an expression
9669     involving such types, and when.  This does not cover how the semantic
9670     information is encoded by GNAT as this is covered separatly.  For the
9671     document used as the reference for the GNAT encoding, see exp_dbug.ads
9672     in the GNAT sources.
9673
9674     Ideally, we should embed each part of this description next to its
9675     associated code.  Unfortunately, the amount of code is so vast right
9676     now that it's hard to see whether the code handling a particular
9677     situation might be duplicated or not.  One day, when the code is
9678     cleaned up, this guide might become redundant with the comments
9679     inserted in the code, and we might want to remove it.
9680
9681     2. ``Fixing'' an Entity, the Simple Case:
9682     -----------------------------------------
9683
9684     When evaluating Ada expressions, the tricky issue is that they may
9685     reference entities whose type contents and size are not statically
9686     known.  Consider for instance a variant record:
9687
9688        type Rec (Empty : Boolean := True) is record
9689           case Empty is
9690              when True => null;
9691              when False => Value : Integer;
9692           end case;
9693        end record;
9694        Yes : Rec := (Empty => False, Value => 1);
9695        No  : Rec := (empty => True);
9696
9697     The size and contents of that record depends on the value of the
9698     descriminant (Rec.Empty).  At this point, neither the debugging
9699     information nor the associated type structure in GDB are able to
9700     express such dynamic types.  So what the debugger does is to create
9701     "fixed" versions of the type that applies to the specific object.
9702     We also informally refer to this opperation as "fixing" an object,
9703     which means creating its associated fixed type.
9704
9705     Example: when printing the value of variable "Yes" above, its fixed
9706     type would look like this:
9707
9708        type Rec is record
9709           Empty : Boolean;
9710           Value : Integer;
9711        end record;
9712
9713     On the other hand, if we printed the value of "No", its fixed type
9714     would become:
9715
9716        type Rec is record
9717           Empty : Boolean;
9718        end record;
9719
9720     Things become a little more complicated when trying to fix an entity
9721     with a dynamic type that directly contains another dynamic type,
9722     such as an array of variant records, for instance.  There are
9723     two possible cases: Arrays, and records.
9724
9725     3. ``Fixing'' Arrays:
9726     ---------------------
9727
9728     The type structure in GDB describes an array in terms of its bounds,
9729     and the type of its elements.  By design, all elements in the array
9730     have the same type and we cannot represent an array of variant elements
9731     using the current type structure in GDB.  When fixing an array,
9732     we cannot fix the array element, as we would potentially need one
9733     fixed type per element of the array.  As a result, the best we can do
9734     when fixing an array is to produce an array whose bounds and size
9735     are correct (allowing us to read it from memory), but without having
9736     touched its element type.  Fixing each element will be done later,
9737     when (if) necessary.
9738
9739     Arrays are a little simpler to handle than records, because the same
9740     amount of memory is allocated for each element of the array, even if
9741     the amount of space actually used by each element differs from element
9742     to element.  Consider for instance the following array of type Rec:
9743
9744        type Rec_Array is array (1 .. 2) of Rec;
9745
9746     The actual amount of memory occupied by each element might be different
9747     from element to element, depending on the value of their discriminant.
9748     But the amount of space reserved for each element in the array remains
9749     fixed regardless.  So we simply need to compute that size using
9750     the debugging information available, from which we can then determine
9751     the array size (we multiply the number of elements of the array by
9752     the size of each element).
9753
9754     The simplest case is when we have an array of a constrained element
9755     type. For instance, consider the following type declarations:
9756
9757         type Bounded_String (Max_Size : Integer) is
9758            Length : Integer;
9759            Buffer : String (1 .. Max_Size);
9760         end record;
9761         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9762
9763     In this case, the compiler describes the array as an array of
9764     variable-size elements (identified by its XVS suffix) for which
9765     the size can be read in the parallel XVZ variable.
9766
9767     In the case of an array of an unconstrained element type, the compiler
9768     wraps the array element inside a private PAD type.  This type should not
9769     be shown to the user, and must be "unwrap"'ed before printing.  Note
9770     that we also use the adjective "aligner" in our code to designate
9771     these wrapper types.
9772
9773     In some cases, the size allocated for each element is statically
9774     known.  In that case, the PAD type already has the correct size,
9775     and the array element should remain unfixed.
9776
9777     But there are cases when this size is not statically known.
9778     For instance, assuming that "Five" is an integer variable:
9779
9780         type Dynamic is array (1 .. Five) of Integer;
9781         type Wrapper (Has_Length : Boolean := False) is record
9782            Data : Dynamic;
9783            case Has_Length is
9784               when True => Length : Integer;
9785               when False => null;
9786            end case;
9787         end record;
9788         type Wrapper_Array is array (1 .. 2) of Wrapper;
9789
9790         Hello : Wrapper_Array := (others => (Has_Length => True,
9791                                              Data => (others => 17),
9792                                              Length => 1));
9793
9794
9795     The debugging info would describe variable Hello as being an
9796     array of a PAD type.  The size of that PAD type is not statically
9797     known, but can be determined using a parallel XVZ variable.
9798     In that case, a copy of the PAD type with the correct size should
9799     be used for the fixed array.
9800
9801     3. ``Fixing'' record type objects:
9802     ----------------------------------
9803
9804     Things are slightly different from arrays in the case of dynamic
9805     record types.  In this case, in order to compute the associated
9806     fixed type, we need to determine the size and offset of each of
9807     its components.  This, in turn, requires us to compute the fixed
9808     type of each of these components.
9809
9810     Consider for instance the example:
9811
9812         type Bounded_String (Max_Size : Natural) is record
9813            Str : String (1 .. Max_Size);
9814            Length : Natural;
9815         end record;
9816         My_String : Bounded_String (Max_Size => 10);
9817
9818     In that case, the position of field "Length" depends on the size
9819     of field Str, which itself depends on the value of the Max_Size
9820     discriminant.  In order to fix the type of variable My_String,
9821     we need to fix the type of field Str.  Therefore, fixing a variant
9822     record requires us to fix each of its components.
9823
9824     However, if a component does not have a dynamic size, the component
9825     should not be fixed.  In particular, fields that use a PAD type
9826     should not fixed.  Here is an example where this might happen
9827     (assuming type Rec above):
9828
9829        type Container (Big : Boolean) is record
9830           First : Rec;
9831           After : Integer;
9832           case Big is
9833              when True => Another : Integer;
9834              when False => null;
9835           end case;
9836        end record;
9837        My_Container : Container := (Big => False,
9838                                     First => (Empty => True),
9839                                     After => 42);
9840
9841     In that example, the compiler creates a PAD type for component First,
9842     whose size is constant, and then positions the component After just
9843     right after it.  The offset of component After is therefore constant
9844     in this case.
9845
9846     The debugger computes the position of each field based on an algorithm
9847     that uses, among other things, the actual position and size of the field
9848     preceding it.  Let's now imagine that the user is trying to print
9849     the value of My_Container.  If the type fixing was recursive, we would
9850     end up computing the offset of field After based on the size of the
9851     fixed version of field First.  And since in our example First has
9852     only one actual field, the size of the fixed type is actually smaller
9853     than the amount of space allocated to that field, and thus we would
9854     compute the wrong offset of field After.
9855
9856     To make things more complicated, we need to watch out for dynamic
9857     components of variant records (identified by the ___XVL suffix in
9858     the component name).  Even if the target type is a PAD type, the size
9859     of that type might not be statically known.  So the PAD type needs
9860     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9861     we might end up with the wrong size for our component.  This can be
9862     observed with the following type declarations:
9863
9864         type Octal is new Integer range 0 .. 7;
9865         type Octal_Array is array (Positive range <>) of Octal;
9866         pragma Pack (Octal_Array);
9867
9868         type Octal_Buffer (Size : Positive) is record
9869            Buffer : Octal_Array (1 .. Size);
9870            Length : Integer;
9871         end record;
9872
9873     In that case, Buffer is a PAD type whose size is unset and needs
9874     to be computed by fixing the unwrapped type.
9875
9876     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9877     ----------------------------------------------------------
9878
9879     Lastly, when should the sub-elements of an entity that remained unfixed
9880     thus far, be actually fixed?
9881
9882     The answer is: Only when referencing that element.  For instance
9883     when selecting one component of a record, this specific component
9884     should be fixed at that point in time.  Or when printing the value
9885     of a record, each component should be fixed before its value gets
9886     printed.  Similarly for arrays, the element of the array should be
9887     fixed when printing each element of the array, or when extracting
9888     one element out of that array.  On the other hand, fixing should
9889     not be performed on the elements when taking a slice of an array!
9890
9891     Note that one of the side-effects of miscomputing the offset and
9892     size of each field is that we end up also miscomputing the size
9893     of the containing type.  This can have adverse results when computing
9894     the value of an entity.  GDB fetches the value of an entity based
9895     on the size of its type, and thus a wrong size causes GDB to fetch
9896     the wrong amount of memory.  In the case where the computed size is
9897     too small, GDB fetches too little data to print the value of our
9898     entiry.  Results in this case as unpredicatble, as we usually read
9899     past the buffer containing the data =:-o.  */
9900
9901 /* Implement the evaluate_exp routine in the exp_descriptor structure
9902    for the Ada language.  */
9903
9904 static struct value *
9905 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9906                      int *pos, enum noside noside)
9907 {
9908   enum exp_opcode op;
9909   int tem;
9910   int pc;
9911   int preeval_pos;
9912   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9913   struct type *type;
9914   int nargs, oplen;
9915   struct value **argvec;
9916
9917   pc = *pos;
9918   *pos += 1;
9919   op = exp->elts[pc].opcode;
9920
9921   switch (op)
9922     {
9923     default:
9924       *pos -= 1;
9925       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9926
9927       if (noside == EVAL_NORMAL)
9928         arg1 = unwrap_value (arg1);
9929
9930       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9931          then we need to perform the conversion manually, because
9932          evaluate_subexp_standard doesn't do it.  This conversion is
9933          necessary in Ada because the different kinds of float/fixed
9934          types in Ada have different representations.
9935
9936          Similarly, we need to perform the conversion from OP_LONG
9937          ourselves.  */
9938       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9939         arg1 = ada_value_cast (expect_type, arg1, noside);
9940
9941       return arg1;
9942
9943     case OP_STRING:
9944       {
9945         struct value *result;
9946
9947         *pos -= 1;
9948         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9949         /* The result type will have code OP_STRING, bashed there from 
9950            OP_ARRAY.  Bash it back.  */
9951         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9952           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
9953         return result;
9954       }
9955
9956     case UNOP_CAST:
9957       (*pos) += 2;
9958       type = exp->elts[pc + 1].type;
9959       arg1 = evaluate_subexp (type, exp, pos, noside);
9960       if (noside == EVAL_SKIP)
9961         goto nosideret;
9962       arg1 = ada_value_cast (type, arg1, noside);
9963       return arg1;
9964
9965     case UNOP_QUAL:
9966       (*pos) += 2;
9967       type = exp->elts[pc + 1].type;
9968       return ada_evaluate_subexp (type, exp, pos, noside);
9969
9970     case BINOP_ASSIGN:
9971       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9972       if (exp->elts[*pos].opcode == OP_AGGREGATE)
9973         {
9974           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9975           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9976             return arg1;
9977           return ada_value_assign (arg1, arg1);
9978         }
9979       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9980          except if the lhs of our assignment is a convenience variable.
9981          In the case of assigning to a convenience variable, the lhs
9982          should be exactly the result of the evaluation of the rhs.  */
9983       type = value_type (arg1);
9984       if (VALUE_LVAL (arg1) == lval_internalvar)
9985          type = NULL;
9986       arg2 = evaluate_subexp (type, exp, pos, noside);
9987       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9988         return arg1;
9989       if (ada_is_fixed_point_type (value_type (arg1)))
9990         arg2 = cast_to_fixed (value_type (arg1), arg2);
9991       else if (ada_is_fixed_point_type (value_type (arg2)))
9992         error
9993           (_("Fixed-point values must be assigned to fixed-point variables"));
9994       else
9995         arg2 = coerce_for_assign (value_type (arg1), arg2);
9996       return ada_value_assign (arg1, arg2);
9997
9998     case BINOP_ADD:
9999       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10000       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10001       if (noside == EVAL_SKIP)
10002         goto nosideret;
10003       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10004         return (value_from_longest
10005                  (value_type (arg1),
10006                   value_as_long (arg1) + value_as_long (arg2)));
10007       if ((ada_is_fixed_point_type (value_type (arg1))
10008            || ada_is_fixed_point_type (value_type (arg2)))
10009           && value_type (arg1) != value_type (arg2))
10010         error (_("Operands of fixed-point addition must have the same type"));
10011       /* Do the addition, and cast the result to the type of the first
10012          argument.  We cannot cast the result to a reference type, so if
10013          ARG1 is a reference type, find its underlying type.  */
10014       type = value_type (arg1);
10015       while (TYPE_CODE (type) == TYPE_CODE_REF)
10016         type = TYPE_TARGET_TYPE (type);
10017       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10018       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10019
10020     case BINOP_SUB:
10021       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10022       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10023       if (noside == EVAL_SKIP)
10024         goto nosideret;
10025       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10026         return (value_from_longest
10027                  (value_type (arg1),
10028                   value_as_long (arg1) - value_as_long (arg2)));
10029       if ((ada_is_fixed_point_type (value_type (arg1))
10030            || ada_is_fixed_point_type (value_type (arg2)))
10031           && value_type (arg1) != value_type (arg2))
10032         error (_("Operands of fixed-point subtraction "
10033                  "must have the same type"));
10034       /* Do the substraction, and cast the result to the type of the first
10035          argument.  We cannot cast the result to a reference type, so if
10036          ARG1 is a reference type, find its underlying type.  */
10037       type = value_type (arg1);
10038       while (TYPE_CODE (type) == TYPE_CODE_REF)
10039         type = TYPE_TARGET_TYPE (type);
10040       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10041       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10042
10043     case BINOP_MUL:
10044     case BINOP_DIV:
10045     case BINOP_REM:
10046     case BINOP_MOD:
10047       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10048       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10049       if (noside == EVAL_SKIP)
10050         goto nosideret;
10051       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10052         {
10053           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10054           return value_zero (value_type (arg1), not_lval);
10055         }
10056       else
10057         {
10058           type = builtin_type (exp->gdbarch)->builtin_double;
10059           if (ada_is_fixed_point_type (value_type (arg1)))
10060             arg1 = cast_from_fixed (type, arg1);
10061           if (ada_is_fixed_point_type (value_type (arg2)))
10062             arg2 = cast_from_fixed (type, arg2);
10063           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10064           return ada_value_binop (arg1, arg2, op);
10065         }
10066
10067     case BINOP_EQUAL:
10068     case BINOP_NOTEQUAL:
10069       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10070       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10071       if (noside == EVAL_SKIP)
10072         goto nosideret;
10073       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10074         tem = 0;
10075       else
10076         {
10077           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10078           tem = ada_value_equal (arg1, arg2);
10079         }
10080       if (op == BINOP_NOTEQUAL)
10081         tem = !tem;
10082       type = language_bool_type (exp->language_defn, exp->gdbarch);
10083       return value_from_longest (type, (LONGEST) tem);
10084
10085     case UNOP_NEG:
10086       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10087       if (noside == EVAL_SKIP)
10088         goto nosideret;
10089       else if (ada_is_fixed_point_type (value_type (arg1)))
10090         return value_cast (value_type (arg1), value_neg (arg1));
10091       else
10092         {
10093           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10094           return value_neg (arg1);
10095         }
10096
10097     case BINOP_LOGICAL_AND:
10098     case BINOP_LOGICAL_OR:
10099     case UNOP_LOGICAL_NOT:
10100       {
10101         struct value *val;
10102
10103         *pos -= 1;
10104         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10105         type = language_bool_type (exp->language_defn, exp->gdbarch);
10106         return value_cast (type, val);
10107       }
10108
10109     case BINOP_BITWISE_AND:
10110     case BINOP_BITWISE_IOR:
10111     case BINOP_BITWISE_XOR:
10112       {
10113         struct value *val;
10114
10115         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10116         *pos = pc;
10117         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10118
10119         return value_cast (value_type (arg1), val);
10120       }
10121
10122     case OP_VAR_VALUE:
10123       *pos -= 1;
10124
10125       if (noside == EVAL_SKIP)
10126         {
10127           *pos += 4;
10128           goto nosideret;
10129         }
10130
10131       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10132         /* Only encountered when an unresolved symbol occurs in a
10133            context other than a function call, in which case, it is
10134            invalid.  */
10135         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10136                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10137
10138       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10139         {
10140           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10141           /* Check to see if this is a tagged type.  We also need to handle
10142              the case where the type is a reference to a tagged type, but
10143              we have to be careful to exclude pointers to tagged types.
10144              The latter should be shown as usual (as a pointer), whereas
10145              a reference should mostly be transparent to the user.  */
10146           if (ada_is_tagged_type (type, 0)
10147               || (TYPE_CODE (type) == TYPE_CODE_REF
10148                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10149             {
10150               /* Tagged types are a little special in the fact that the real
10151                  type is dynamic and can only be determined by inspecting the
10152                  object's tag.  This means that we need to get the object's
10153                  value first (EVAL_NORMAL) and then extract the actual object
10154                  type from its tag.
10155
10156                  Note that we cannot skip the final step where we extract
10157                  the object type from its tag, because the EVAL_NORMAL phase
10158                  results in dynamic components being resolved into fixed ones.
10159                  This can cause problems when trying to print the type
10160                  description of tagged types whose parent has a dynamic size:
10161                  We use the type name of the "_parent" component in order
10162                  to print the name of the ancestor type in the type description.
10163                  If that component had a dynamic size, the resolution into
10164                  a fixed type would result in the loss of that type name,
10165                  thus preventing us from printing the name of the ancestor
10166                  type in the type description.  */
10167               arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10168
10169               if (TYPE_CODE (type) != TYPE_CODE_REF)
10170                 {
10171                   struct type *actual_type;
10172
10173                   actual_type = type_from_tag (ada_value_tag (arg1));
10174                   if (actual_type == NULL)
10175                     /* If, for some reason, we were unable to determine
10176                        the actual type from the tag, then use the static
10177                        approximation that we just computed as a fallback.
10178                        This can happen if the debugging information is
10179                        incomplete, for instance.  */
10180                     actual_type = type;
10181                   return value_zero (actual_type, not_lval);
10182                 }
10183               else
10184                 {
10185                   /* In the case of a ref, ada_coerce_ref takes care
10186                      of determining the actual type.  But the evaluation
10187                      should return a ref as it should be valid to ask
10188                      for its address; so rebuild a ref after coerce.  */
10189                   arg1 = ada_coerce_ref (arg1);
10190                   return value_ref (arg1);
10191                 }
10192             }
10193
10194           /* Records and unions for which GNAT encodings have been
10195              generated need to be statically fixed as well.
10196              Otherwise, non-static fixing produces a type where
10197              all dynamic properties are removed, which prevents "ptype"
10198              from being able to completely describe the type.
10199              For instance, a case statement in a variant record would be
10200              replaced by the relevant components based on the actual
10201              value of the discriminants.  */
10202           if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10203                && dynamic_template_type (type) != NULL)
10204               || (TYPE_CODE (type) == TYPE_CODE_UNION
10205                   && ada_find_parallel_type (type, "___XVU") != NULL))
10206             {
10207               *pos += 4;
10208               return value_zero (to_static_fixed_type (type), not_lval);
10209             }
10210         }
10211
10212       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10213       return ada_to_fixed_value (arg1);
10214
10215     case OP_FUNCALL:
10216       (*pos) += 2;
10217
10218       /* Allocate arg vector, including space for the function to be
10219          called in argvec[0] and a terminating NULL.  */
10220       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10221       argvec =
10222         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10223
10224       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10225           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10226         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10227                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10228       else
10229         {
10230           for (tem = 0; tem <= nargs; tem += 1)
10231             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10232           argvec[tem] = 0;
10233
10234           if (noside == EVAL_SKIP)
10235             goto nosideret;
10236         }
10237
10238       if (ada_is_constrained_packed_array_type
10239           (desc_base_type (value_type (argvec[0]))))
10240         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10241       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10242                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10243         /* This is a packed array that has already been fixed, and
10244            therefore already coerced to a simple array.  Nothing further
10245            to do.  */
10246         ;
10247       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10248                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10249                    && VALUE_LVAL (argvec[0]) == lval_memory))
10250         argvec[0] = value_addr (argvec[0]);
10251
10252       type = ada_check_typedef (value_type (argvec[0]));
10253
10254       /* Ada allows us to implicitly dereference arrays when subscripting
10255          them.  So, if this is an array typedef (encoding use for array
10256          access types encoded as fat pointers), strip it now.  */
10257       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10258         type = ada_typedef_target_type (type);
10259
10260       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10261         {
10262           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10263             {
10264             case TYPE_CODE_FUNC:
10265               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10266               break;
10267             case TYPE_CODE_ARRAY:
10268               break;
10269             case TYPE_CODE_STRUCT:
10270               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10271                 argvec[0] = ada_value_ind (argvec[0]);
10272               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10273               break;
10274             default:
10275               error (_("cannot subscript or call something of type `%s'"),
10276                      ada_type_name (value_type (argvec[0])));
10277               break;
10278             }
10279         }
10280
10281       switch (TYPE_CODE (type))
10282         {
10283         case TYPE_CODE_FUNC:
10284           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10285             {
10286               struct type *rtype = TYPE_TARGET_TYPE (type);
10287
10288               if (TYPE_GNU_IFUNC (type))
10289                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10290               return allocate_value (rtype);
10291             }
10292           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10293         case TYPE_CODE_INTERNAL_FUNCTION:
10294           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10295             /* We don't know anything about what the internal
10296                function might return, but we have to return
10297                something.  */
10298             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10299                                not_lval);
10300           else
10301             return call_internal_function (exp->gdbarch, exp->language_defn,
10302                                            argvec[0], nargs, argvec + 1);
10303
10304         case TYPE_CODE_STRUCT:
10305           {
10306             int arity;
10307
10308             arity = ada_array_arity (type);
10309             type = ada_array_element_type (type, nargs);
10310             if (type == NULL)
10311               error (_("cannot subscript or call a record"));
10312             if (arity != nargs)
10313               error (_("wrong number of subscripts; expecting %d"), arity);
10314             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10315               return value_zero (ada_aligned_type (type), lval_memory);
10316             return
10317               unwrap_value (ada_value_subscript
10318                             (argvec[0], nargs, argvec + 1));
10319           }
10320         case TYPE_CODE_ARRAY:
10321           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10322             {
10323               type = ada_array_element_type (type, nargs);
10324               if (type == NULL)
10325                 error (_("element type of array unknown"));
10326               else
10327                 return value_zero (ada_aligned_type (type), lval_memory);
10328             }
10329           return
10330             unwrap_value (ada_value_subscript
10331                           (ada_coerce_to_simple_array (argvec[0]),
10332                            nargs, argvec + 1));
10333         case TYPE_CODE_PTR:     /* Pointer to array */
10334           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10335             {
10336               type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10337               type = ada_array_element_type (type, nargs);
10338               if (type == NULL)
10339                 error (_("element type of array unknown"));
10340               else
10341                 return value_zero (ada_aligned_type (type), lval_memory);
10342             }
10343           return
10344             unwrap_value (ada_value_ptr_subscript (argvec[0],
10345                                                    nargs, argvec + 1));
10346
10347         default:
10348           error (_("Attempt to index or call something other than an "
10349                    "array or function"));
10350         }
10351
10352     case TERNOP_SLICE:
10353       {
10354         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10355         struct value *low_bound_val =
10356           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10357         struct value *high_bound_val =
10358           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10359         LONGEST low_bound;
10360         LONGEST high_bound;
10361
10362         low_bound_val = coerce_ref (low_bound_val);
10363         high_bound_val = coerce_ref (high_bound_val);
10364         low_bound = pos_atr (low_bound_val);
10365         high_bound = pos_atr (high_bound_val);
10366
10367         if (noside == EVAL_SKIP)
10368           goto nosideret;
10369
10370         /* If this is a reference to an aligner type, then remove all
10371            the aligners.  */
10372         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10373             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10374           TYPE_TARGET_TYPE (value_type (array)) =
10375             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10376
10377         if (ada_is_constrained_packed_array_type (value_type (array)))
10378           error (_("cannot slice a packed array"));
10379
10380         /* If this is a reference to an array or an array lvalue,
10381            convert to a pointer.  */
10382         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10383             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10384                 && VALUE_LVAL (array) == lval_memory))
10385           array = value_addr (array);
10386
10387         if (noside == EVAL_AVOID_SIDE_EFFECTS
10388             && ada_is_array_descriptor_type (ada_check_typedef
10389                                              (value_type (array))))
10390           return empty_array (ada_type_of_array (array, 0), low_bound);
10391
10392         array = ada_coerce_to_simple_array_ptr (array);
10393
10394         /* If we have more than one level of pointer indirection,
10395            dereference the value until we get only one level.  */
10396         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10397                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10398                      == TYPE_CODE_PTR))
10399           array = value_ind (array);
10400
10401         /* Make sure we really do have an array type before going further,
10402            to avoid a SEGV when trying to get the index type or the target
10403            type later down the road if the debug info generated by
10404            the compiler is incorrect or incomplete.  */
10405         if (!ada_is_simple_array_type (value_type (array)))
10406           error (_("cannot take slice of non-array"));
10407
10408         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10409             == TYPE_CODE_PTR)
10410           {
10411             struct type *type0 = ada_check_typedef (value_type (array));
10412
10413             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10414               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10415             else
10416               {
10417                 struct type *arr_type0 =
10418                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10419
10420                 return ada_value_slice_from_ptr (array, arr_type0,
10421                                                  longest_to_int (low_bound),
10422                                                  longest_to_int (high_bound));
10423               }
10424           }
10425         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10426           return array;
10427         else if (high_bound < low_bound)
10428           return empty_array (value_type (array), low_bound);
10429         else
10430           return ada_value_slice (array, longest_to_int (low_bound),
10431                                   longest_to_int (high_bound));
10432       }
10433
10434     case UNOP_IN_RANGE:
10435       (*pos) += 2;
10436       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10437       type = check_typedef (exp->elts[pc + 1].type);
10438
10439       if (noside == EVAL_SKIP)
10440         goto nosideret;
10441
10442       switch (TYPE_CODE (type))
10443         {
10444         default:
10445           lim_warning (_("Membership test incompletely implemented; "
10446                          "always returns true"));
10447           type = language_bool_type (exp->language_defn, exp->gdbarch);
10448           return value_from_longest (type, (LONGEST) 1);
10449
10450         case TYPE_CODE_RANGE:
10451           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10452           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10453           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10454           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10455           type = language_bool_type (exp->language_defn, exp->gdbarch);
10456           return
10457             value_from_longest (type,
10458                                 (value_less (arg1, arg3)
10459                                  || value_equal (arg1, arg3))
10460                                 && (value_less (arg2, arg1)
10461                                     || value_equal (arg2, arg1)));
10462         }
10463
10464     case BINOP_IN_BOUNDS:
10465       (*pos) += 2;
10466       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10467       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10468
10469       if (noside == EVAL_SKIP)
10470         goto nosideret;
10471
10472       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10473         {
10474           type = language_bool_type (exp->language_defn, exp->gdbarch);
10475           return value_zero (type, not_lval);
10476         }
10477
10478       tem = longest_to_int (exp->elts[pc + 1].longconst);
10479
10480       type = ada_index_type (value_type (arg2), tem, "range");
10481       if (!type)
10482         type = value_type (arg1);
10483
10484       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10485       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10486
10487       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10488       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10489       type = language_bool_type (exp->language_defn, exp->gdbarch);
10490       return
10491         value_from_longest (type,
10492                             (value_less (arg1, arg3)
10493                              || value_equal (arg1, arg3))
10494                             && (value_less (arg2, arg1)
10495                                 || value_equal (arg2, arg1)));
10496
10497     case TERNOP_IN_RANGE:
10498       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10499       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10500       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10501
10502       if (noside == EVAL_SKIP)
10503         goto nosideret;
10504
10505       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10506       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10507       type = language_bool_type (exp->language_defn, exp->gdbarch);
10508       return
10509         value_from_longest (type,
10510                             (value_less (arg1, arg3)
10511                              || value_equal (arg1, arg3))
10512                             && (value_less (arg2, arg1)
10513                                 || value_equal (arg2, arg1)));
10514
10515     case OP_ATR_FIRST:
10516     case OP_ATR_LAST:
10517     case OP_ATR_LENGTH:
10518       {
10519         struct type *type_arg;
10520
10521         if (exp->elts[*pos].opcode == OP_TYPE)
10522           {
10523             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10524             arg1 = NULL;
10525             type_arg = check_typedef (exp->elts[pc + 2].type);
10526           }
10527         else
10528           {
10529             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10530             type_arg = NULL;
10531           }
10532
10533         if (exp->elts[*pos].opcode != OP_LONG)
10534           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10535         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10536         *pos += 4;
10537
10538         if (noside == EVAL_SKIP)
10539           goto nosideret;
10540
10541         if (type_arg == NULL)
10542           {
10543             arg1 = ada_coerce_ref (arg1);
10544
10545             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10546               arg1 = ada_coerce_to_simple_array (arg1);
10547
10548             if (op == OP_ATR_LENGTH)
10549               type = builtin_type (exp->gdbarch)->builtin_int;
10550             else
10551               {
10552                 type = ada_index_type (value_type (arg1), tem,
10553                                        ada_attribute_name (op));
10554                 if (type == NULL)
10555                   type = builtin_type (exp->gdbarch)->builtin_int;
10556               }
10557
10558             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10559               return allocate_value (type);
10560
10561             switch (op)
10562               {
10563               default:          /* Should never happen.  */
10564                 error (_("unexpected attribute encountered"));
10565               case OP_ATR_FIRST:
10566                 return value_from_longest
10567                         (type, ada_array_bound (arg1, tem, 0));
10568               case OP_ATR_LAST:
10569                 return value_from_longest
10570                         (type, ada_array_bound (arg1, tem, 1));
10571               case OP_ATR_LENGTH:
10572                 return value_from_longest
10573                         (type, ada_array_length (arg1, tem));
10574               }
10575           }
10576         else if (discrete_type_p (type_arg))
10577           {
10578             struct type *range_type;
10579             const char *name = ada_type_name (type_arg);
10580
10581             range_type = NULL;
10582             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10583               range_type = to_fixed_range_type (type_arg, NULL);
10584             if (range_type == NULL)
10585               range_type = type_arg;
10586             switch (op)
10587               {
10588               default:
10589                 error (_("unexpected attribute encountered"));
10590               case OP_ATR_FIRST:
10591                 return value_from_longest 
10592                   (range_type, ada_discrete_type_low_bound (range_type));
10593               case OP_ATR_LAST:
10594                 return value_from_longest
10595                   (range_type, ada_discrete_type_high_bound (range_type));
10596               case OP_ATR_LENGTH:
10597                 error (_("the 'length attribute applies only to array types"));
10598               }
10599           }
10600         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10601           error (_("unimplemented type attribute"));
10602         else
10603           {
10604             LONGEST low, high;
10605
10606             if (ada_is_constrained_packed_array_type (type_arg))
10607               type_arg = decode_constrained_packed_array_type (type_arg);
10608
10609             if (op == OP_ATR_LENGTH)
10610               type = builtin_type (exp->gdbarch)->builtin_int;
10611             else
10612               {
10613                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10614                 if (type == NULL)
10615                   type = builtin_type (exp->gdbarch)->builtin_int;
10616               }
10617
10618             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10619               return allocate_value (type);
10620
10621             switch (op)
10622               {
10623               default:
10624                 error (_("unexpected attribute encountered"));
10625               case OP_ATR_FIRST:
10626                 low = ada_array_bound_from_type (type_arg, tem, 0);
10627                 return value_from_longest (type, low);
10628               case OP_ATR_LAST:
10629                 high = ada_array_bound_from_type (type_arg, tem, 1);
10630                 return value_from_longest (type, high);
10631               case OP_ATR_LENGTH:
10632                 low = ada_array_bound_from_type (type_arg, tem, 0);
10633                 high = ada_array_bound_from_type (type_arg, tem, 1);
10634                 return value_from_longest (type, high - low + 1);
10635               }
10636           }
10637       }
10638
10639     case OP_ATR_TAG:
10640       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10641       if (noside == EVAL_SKIP)
10642         goto nosideret;
10643
10644       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10645         return value_zero (ada_tag_type (arg1), not_lval);
10646
10647       return ada_value_tag (arg1);
10648
10649     case OP_ATR_MIN:
10650     case OP_ATR_MAX:
10651       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10652       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10653       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10654       if (noside == EVAL_SKIP)
10655         goto nosideret;
10656       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10657         return value_zero (value_type (arg1), not_lval);
10658       else
10659         {
10660           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10661           return value_binop (arg1, arg2,
10662                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10663         }
10664
10665     case OP_ATR_MODULUS:
10666       {
10667         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10668
10669         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10670         if (noside == EVAL_SKIP)
10671           goto nosideret;
10672
10673         if (!ada_is_modular_type (type_arg))
10674           error (_("'modulus must be applied to modular type"));
10675
10676         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10677                                    ada_modulus (type_arg));
10678       }
10679
10680
10681     case OP_ATR_POS:
10682       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10683       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10684       if (noside == EVAL_SKIP)
10685         goto nosideret;
10686       type = builtin_type (exp->gdbarch)->builtin_int;
10687       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10688         return value_zero (type, not_lval);
10689       else
10690         return value_pos_atr (type, arg1);
10691
10692     case OP_ATR_SIZE:
10693       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10694       type = value_type (arg1);
10695
10696       /* If the argument is a reference, then dereference its type, since
10697          the user is really asking for the size of the actual object,
10698          not the size of the pointer.  */
10699       if (TYPE_CODE (type) == TYPE_CODE_REF)
10700         type = TYPE_TARGET_TYPE (type);
10701
10702       if (noside == EVAL_SKIP)
10703         goto nosideret;
10704       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10705         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10706       else
10707         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10708                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10709
10710     case OP_ATR_VAL:
10711       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10712       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10713       type = exp->elts[pc + 2].type;
10714       if (noside == EVAL_SKIP)
10715         goto nosideret;
10716       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10717         return value_zero (type, not_lval);
10718       else
10719         return value_val_atr (type, arg1);
10720
10721     case BINOP_EXP:
10722       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10723       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10724       if (noside == EVAL_SKIP)
10725         goto nosideret;
10726       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10727         return value_zero (value_type (arg1), not_lval);
10728       else
10729         {
10730           /* For integer exponentiation operations,
10731              only promote the first argument.  */
10732           if (is_integral_type (value_type (arg2)))
10733             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10734           else
10735             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10736
10737           return value_binop (arg1, arg2, op);
10738         }
10739
10740     case UNOP_PLUS:
10741       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10742       if (noside == EVAL_SKIP)
10743         goto nosideret;
10744       else
10745         return arg1;
10746
10747     case UNOP_ABS:
10748       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10749       if (noside == EVAL_SKIP)
10750         goto nosideret;
10751       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10752       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10753         return value_neg (arg1);
10754       else
10755         return arg1;
10756
10757     case UNOP_IND:
10758       preeval_pos = *pos;
10759       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10760       if (noside == EVAL_SKIP)
10761         goto nosideret;
10762       type = ada_check_typedef (value_type (arg1));
10763       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10764         {
10765           if (ada_is_array_descriptor_type (type))
10766             /* GDB allows dereferencing GNAT array descriptors.  */
10767             {
10768               struct type *arrType = ada_type_of_array (arg1, 0);
10769
10770               if (arrType == NULL)
10771                 error (_("Attempt to dereference null array pointer."));
10772               return value_at_lazy (arrType, 0);
10773             }
10774           else if (TYPE_CODE (type) == TYPE_CODE_PTR
10775                    || TYPE_CODE (type) == TYPE_CODE_REF
10776                    /* In C you can dereference an array to get the 1st elt.  */
10777                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10778             {
10779             /* As mentioned in the OP_VAR_VALUE case, tagged types can
10780                only be determined by inspecting the object's tag.
10781                This means that we need to evaluate completely the
10782                expression in order to get its type.  */
10783
10784               if ((TYPE_CODE (type) == TYPE_CODE_REF
10785                    || TYPE_CODE (type) == TYPE_CODE_PTR)
10786                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10787                 {
10788                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10789                                           EVAL_NORMAL);
10790                   type = value_type (ada_value_ind (arg1));
10791                 }
10792               else
10793                 {
10794                   type = to_static_fixed_type
10795                     (ada_aligned_type
10796                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10797                 }
10798               check_size (type);
10799               return value_zero (type, lval_memory);
10800             }
10801           else if (TYPE_CODE (type) == TYPE_CODE_INT)
10802             {
10803               /* GDB allows dereferencing an int.  */
10804               if (expect_type == NULL)
10805                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10806                                    lval_memory);
10807               else
10808                 {
10809                   expect_type = 
10810                     to_static_fixed_type (ada_aligned_type (expect_type));
10811                   return value_zero (expect_type, lval_memory);
10812                 }
10813             }
10814           else
10815             error (_("Attempt to take contents of a non-pointer value."));
10816         }
10817       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
10818       type = ada_check_typedef (value_type (arg1));
10819
10820       if (TYPE_CODE (type) == TYPE_CODE_INT)
10821           /* GDB allows dereferencing an int.  If we were given
10822              the expect_type, then use that as the target type.
10823              Otherwise, assume that the target type is an int.  */
10824         {
10825           if (expect_type != NULL)
10826             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10827                                               arg1));
10828           else
10829             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10830                                   (CORE_ADDR) value_as_address (arg1));
10831         }
10832
10833       if (ada_is_array_descriptor_type (type))
10834         /* GDB allows dereferencing GNAT array descriptors.  */
10835         return ada_coerce_to_simple_array (arg1);
10836       else
10837         return ada_value_ind (arg1);
10838
10839     case STRUCTOP_STRUCT:
10840       tem = longest_to_int (exp->elts[pc + 1].longconst);
10841       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10842       preeval_pos = *pos;
10843       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10844       if (noside == EVAL_SKIP)
10845         goto nosideret;
10846       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10847         {
10848           struct type *type1 = value_type (arg1);
10849
10850           if (ada_is_tagged_type (type1, 1))
10851             {
10852               type = ada_lookup_struct_elt_type (type1,
10853                                                  &exp->elts[pc + 2].string,
10854                                                  1, 1, NULL);
10855
10856               /* If the field is not found, check if it exists in the
10857                  extension of this object's type. This means that we
10858                  need to evaluate completely the expression.  */
10859
10860               if (type == NULL)
10861                 {
10862                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10863                                           EVAL_NORMAL);
10864                   arg1 = ada_value_struct_elt (arg1,
10865                                                &exp->elts[pc + 2].string,
10866                                                0);
10867                   arg1 = unwrap_value (arg1);
10868                   type = value_type (ada_to_fixed_value (arg1));
10869                 }
10870             }
10871           else
10872             type =
10873               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10874                                           0, NULL);
10875
10876           return value_zero (ada_aligned_type (type), lval_memory);
10877         }
10878       else
10879         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10880         arg1 = unwrap_value (arg1);
10881         return ada_to_fixed_value (arg1);
10882
10883     case OP_TYPE:
10884       /* The value is not supposed to be used.  This is here to make it
10885          easier to accommodate expressions that contain types.  */
10886       (*pos) += 2;
10887       if (noside == EVAL_SKIP)
10888         goto nosideret;
10889       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10890         return allocate_value (exp->elts[pc + 1].type);
10891       else
10892         error (_("Attempt to use a type name as an expression"));
10893
10894     case OP_AGGREGATE:
10895     case OP_CHOICES:
10896     case OP_OTHERS:
10897     case OP_DISCRETE_RANGE:
10898     case OP_POSITIONAL:
10899     case OP_NAME:
10900       if (noside == EVAL_NORMAL)
10901         switch (op) 
10902           {
10903           case OP_NAME:
10904             error (_("Undefined name, ambiguous name, or renaming used in "
10905                      "component association: %s."), &exp->elts[pc+2].string);
10906           case OP_AGGREGATE:
10907             error (_("Aggregates only allowed on the right of an assignment"));
10908           default:
10909             internal_error (__FILE__, __LINE__,
10910                             _("aggregate apparently mangled"));
10911           }
10912
10913       ada_forward_operator_length (exp, pc, &oplen, &nargs);
10914       *pos += oplen - 1;
10915       for (tem = 0; tem < nargs; tem += 1) 
10916         ada_evaluate_subexp (NULL, exp, pos, noside);
10917       goto nosideret;
10918     }
10919
10920 nosideret:
10921   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
10922 }
10923 \f
10924
10925                                 /* Fixed point */
10926
10927 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
10928    type name that encodes the 'small and 'delta information.
10929    Otherwise, return NULL.  */
10930
10931 static const char *
10932 fixed_type_info (struct type *type)
10933 {
10934   const char *name = ada_type_name (type);
10935   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10936
10937   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10938     {
10939       const char *tail = strstr (name, "___XF_");
10940
10941       if (tail == NULL)
10942         return NULL;
10943       else
10944         return tail + 5;
10945     }
10946   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10947     return fixed_type_info (TYPE_TARGET_TYPE (type));
10948   else
10949     return NULL;
10950 }
10951
10952 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
10953
10954 int
10955 ada_is_fixed_point_type (struct type *type)
10956 {
10957   return fixed_type_info (type) != NULL;
10958 }
10959
10960 /* Return non-zero iff TYPE represents a System.Address type.  */
10961
10962 int
10963 ada_is_system_address_type (struct type *type)
10964 {
10965   return (TYPE_NAME (type)
10966           && strcmp (TYPE_NAME (type), "system__address") == 0);
10967 }
10968
10969 /* Assuming that TYPE is the representation of an Ada fixed-point
10970    type, return its delta, or -1 if the type is malformed and the
10971    delta cannot be determined.  */
10972
10973 DOUBLEST
10974 ada_delta (struct type *type)
10975 {
10976   const char *encoding = fixed_type_info (type);
10977   DOUBLEST num, den;
10978
10979   /* Strictly speaking, num and den are encoded as integer.  However,
10980      they may not fit into a long, and they will have to be converted
10981      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10982   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10983               &num, &den) < 2)
10984     return -1.0;
10985   else
10986     return num / den;
10987 }
10988
10989 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
10990    factor ('SMALL value) associated with the type.  */
10991
10992 static DOUBLEST
10993 scaling_factor (struct type *type)
10994 {
10995   const char *encoding = fixed_type_info (type);
10996   DOUBLEST num0, den0, num1, den1;
10997   int n;
10998
10999   /* Strictly speaking, num's and den's are encoded as integer.  However,
11000      they may not fit into a long, and they will have to be converted
11001      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11002   n = sscanf (encoding,
11003               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11004               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11005               &num0, &den0, &num1, &den1);
11006
11007   if (n < 2)
11008     return 1.0;
11009   else if (n == 4)
11010     return num1 / den1;
11011   else
11012     return num0 / den0;
11013 }
11014
11015
11016 /* Assuming that X is the representation of a value of fixed-point
11017    type TYPE, return its floating-point equivalent.  */
11018
11019 DOUBLEST
11020 ada_fixed_to_float (struct type *type, LONGEST x)
11021 {
11022   return (DOUBLEST) x *scaling_factor (type);
11023 }
11024
11025 /* The representation of a fixed-point value of type TYPE
11026    corresponding to the value X.  */
11027
11028 LONGEST
11029 ada_float_to_fixed (struct type *type, DOUBLEST x)
11030 {
11031   return (LONGEST) (x / scaling_factor (type) + 0.5);
11032 }
11033
11034 \f
11035
11036                                 /* Range types */
11037
11038 /* Scan STR beginning at position K for a discriminant name, and
11039    return the value of that discriminant field of DVAL in *PX.  If
11040    PNEW_K is not null, put the position of the character beyond the
11041    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11042    not alter *PX and *PNEW_K if unsuccessful.  */
11043
11044 static int
11045 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
11046                     int *pnew_k)
11047 {
11048   static char *bound_buffer = NULL;
11049   static size_t bound_buffer_len = 0;
11050   char *bound;
11051   char *pend;
11052   struct value *bound_val;
11053
11054   if (dval == NULL || str == NULL || str[k] == '\0')
11055     return 0;
11056
11057   pend = strstr (str + k, "__");
11058   if (pend == NULL)
11059     {
11060       bound = str + k;
11061       k += strlen (bound);
11062     }
11063   else
11064     {
11065       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
11066       bound = bound_buffer;
11067       strncpy (bound_buffer, str + k, pend - (str + k));
11068       bound[pend - (str + k)] = '\0';
11069       k = pend - str;
11070     }
11071
11072   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11073   if (bound_val == NULL)
11074     return 0;
11075
11076   *px = value_as_long (bound_val);
11077   if (pnew_k != NULL)
11078     *pnew_k = k;
11079   return 1;
11080 }
11081
11082 /* Value of variable named NAME in the current environment.  If
11083    no such variable found, then if ERR_MSG is null, returns 0, and
11084    otherwise causes an error with message ERR_MSG.  */
11085
11086 static struct value *
11087 get_var_value (char *name, char *err_msg)
11088 {
11089   struct ada_symbol_info *syms;
11090   int nsyms;
11091
11092   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11093                                   &syms);
11094
11095   if (nsyms != 1)
11096     {
11097       if (err_msg == NULL)
11098         return 0;
11099       else
11100         error (("%s"), err_msg);
11101     }
11102
11103   return value_of_variable (syms[0].sym, syms[0].block);
11104 }
11105
11106 /* Value of integer variable named NAME in the current environment.  If
11107    no such variable found, returns 0, and sets *FLAG to 0.  If
11108    successful, sets *FLAG to 1.  */
11109
11110 LONGEST
11111 get_int_var_value (char *name, int *flag)
11112 {
11113   struct value *var_val = get_var_value (name, 0);
11114
11115   if (var_val == 0)
11116     {
11117       if (flag != NULL)
11118         *flag = 0;
11119       return 0;
11120     }
11121   else
11122     {
11123       if (flag != NULL)
11124         *flag = 1;
11125       return value_as_long (var_val);
11126     }
11127 }
11128
11129
11130 /* Return a range type whose base type is that of the range type named
11131    NAME in the current environment, and whose bounds are calculated
11132    from NAME according to the GNAT range encoding conventions.
11133    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11134    corresponding range type from debug information; fall back to using it
11135    if symbol lookup fails.  If a new type must be created, allocate it
11136    like ORIG_TYPE was.  The bounds information, in general, is encoded
11137    in NAME, the base type given in the named range type.  */
11138
11139 static struct type *
11140 to_fixed_range_type (struct type *raw_type, struct value *dval)
11141 {
11142   const char *name;
11143   struct type *base_type;
11144   char *subtype_info;
11145
11146   gdb_assert (raw_type != NULL);
11147   gdb_assert (TYPE_NAME (raw_type) != NULL);
11148
11149   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11150     base_type = TYPE_TARGET_TYPE (raw_type);
11151   else
11152     base_type = raw_type;
11153
11154   name = TYPE_NAME (raw_type);
11155   subtype_info = strstr (name, "___XD");
11156   if (subtype_info == NULL)
11157     {
11158       LONGEST L = ada_discrete_type_low_bound (raw_type);
11159       LONGEST U = ada_discrete_type_high_bound (raw_type);
11160
11161       if (L < INT_MIN || U > INT_MAX)
11162         return raw_type;
11163       else
11164         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11165                                          L, U);
11166     }
11167   else
11168     {
11169       static char *name_buf = NULL;
11170       static size_t name_len = 0;
11171       int prefix_len = subtype_info - name;
11172       LONGEST L, U;
11173       struct type *type;
11174       char *bounds_str;
11175       int n;
11176
11177       GROW_VECT (name_buf, name_len, prefix_len + 5);
11178       strncpy (name_buf, name, prefix_len);
11179       name_buf[prefix_len] = '\0';
11180
11181       subtype_info += 5;
11182       bounds_str = strchr (subtype_info, '_');
11183       n = 1;
11184
11185       if (*subtype_info == 'L')
11186         {
11187           if (!ada_scan_number (bounds_str, n, &L, &n)
11188               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11189             return raw_type;
11190           if (bounds_str[n] == '_')
11191             n += 2;
11192           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11193             n += 1;
11194           subtype_info += 1;
11195         }
11196       else
11197         {
11198           int ok;
11199
11200           strcpy (name_buf + prefix_len, "___L");
11201           L = get_int_var_value (name_buf, &ok);
11202           if (!ok)
11203             {
11204               lim_warning (_("Unknown lower bound, using 1."));
11205               L = 1;
11206             }
11207         }
11208
11209       if (*subtype_info == 'U')
11210         {
11211           if (!ada_scan_number (bounds_str, n, &U, &n)
11212               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11213             return raw_type;
11214         }
11215       else
11216         {
11217           int ok;
11218
11219           strcpy (name_buf + prefix_len, "___U");
11220           U = get_int_var_value (name_buf, &ok);
11221           if (!ok)
11222             {
11223               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11224               U = L;
11225             }
11226         }
11227
11228       type = create_static_range_type (alloc_type_copy (raw_type),
11229                                        base_type, L, U);
11230       TYPE_NAME (type) = name;
11231       return type;
11232     }
11233 }
11234
11235 /* True iff NAME is the name of a range type.  */
11236
11237 int
11238 ada_is_range_type_name (const char *name)
11239 {
11240   return (name != NULL && strstr (name, "___XD"));
11241 }
11242 \f
11243
11244                                 /* Modular types */
11245
11246 /* True iff TYPE is an Ada modular type.  */
11247
11248 int
11249 ada_is_modular_type (struct type *type)
11250 {
11251   struct type *subranged_type = get_base_type (type);
11252
11253   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11254           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11255           && TYPE_UNSIGNED (subranged_type));
11256 }
11257
11258 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11259
11260 ULONGEST
11261 ada_modulus (struct type *type)
11262 {
11263   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11264 }
11265 \f
11266
11267 /* Ada exception catchpoint support:
11268    ---------------------------------
11269
11270    We support 3 kinds of exception catchpoints:
11271      . catchpoints on Ada exceptions
11272      . catchpoints on unhandled Ada exceptions
11273      . catchpoints on failed assertions
11274
11275    Exceptions raised during failed assertions, or unhandled exceptions
11276    could perfectly be caught with the general catchpoint on Ada exceptions.
11277    However, we can easily differentiate these two special cases, and having
11278    the option to distinguish these two cases from the rest can be useful
11279    to zero-in on certain situations.
11280
11281    Exception catchpoints are a specialized form of breakpoint,
11282    since they rely on inserting breakpoints inside known routines
11283    of the GNAT runtime.  The implementation therefore uses a standard
11284    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11285    of breakpoint_ops.
11286
11287    Support in the runtime for exception catchpoints have been changed
11288    a few times already, and these changes affect the implementation
11289    of these catchpoints.  In order to be able to support several
11290    variants of the runtime, we use a sniffer that will determine
11291    the runtime variant used by the program being debugged.  */
11292
11293 /* Ada's standard exceptions.
11294
11295    The Ada 83 standard also defined Numeric_Error.  But there so many
11296    situations where it was unclear from the Ada 83 Reference Manual
11297    (RM) whether Constraint_Error or Numeric_Error should be raised,
11298    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11299    Interpretation saying that anytime the RM says that Numeric_Error
11300    should be raised, the implementation may raise Constraint_Error.
11301    Ada 95 went one step further and pretty much removed Numeric_Error
11302    from the list of standard exceptions (it made it a renaming of
11303    Constraint_Error, to help preserve compatibility when compiling
11304    an Ada83 compiler). As such, we do not include Numeric_Error from
11305    this list of standard exceptions.  */
11306
11307 static char *standard_exc[] = {
11308   "constraint_error",
11309   "program_error",
11310   "storage_error",
11311   "tasking_error"
11312 };
11313
11314 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11315
11316 /* A structure that describes how to support exception catchpoints
11317    for a given executable.  */
11318
11319 struct exception_support_info
11320 {
11321    /* The name of the symbol to break on in order to insert
11322       a catchpoint on exceptions.  */
11323    const char *catch_exception_sym;
11324
11325    /* The name of the symbol to break on in order to insert
11326       a catchpoint on unhandled exceptions.  */
11327    const char *catch_exception_unhandled_sym;
11328
11329    /* The name of the symbol to break on in order to insert
11330       a catchpoint on failed assertions.  */
11331    const char *catch_assert_sym;
11332
11333    /* Assuming that the inferior just triggered an unhandled exception
11334       catchpoint, this function is responsible for returning the address
11335       in inferior memory where the name of that exception is stored.
11336       Return zero if the address could not be computed.  */
11337    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11338 };
11339
11340 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11341 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11342
11343 /* The following exception support info structure describes how to
11344    implement exception catchpoints with the latest version of the
11345    Ada runtime (as of 2007-03-06).  */
11346
11347 static const struct exception_support_info default_exception_support_info =
11348 {
11349   "__gnat_debug_raise_exception", /* catch_exception_sym */
11350   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11351   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11352   ada_unhandled_exception_name_addr
11353 };
11354
11355 /* The following exception support info structure describes how to
11356    implement exception catchpoints with a slightly older version
11357    of the Ada runtime.  */
11358
11359 static const struct exception_support_info exception_support_info_fallback =
11360 {
11361   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11362   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11363   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11364   ada_unhandled_exception_name_addr_from_raise
11365 };
11366
11367 /* Return nonzero if we can detect the exception support routines
11368    described in EINFO.
11369
11370    This function errors out if an abnormal situation is detected
11371    (for instance, if we find the exception support routines, but
11372    that support is found to be incomplete).  */
11373
11374 static int
11375 ada_has_this_exception_support (const struct exception_support_info *einfo)
11376 {
11377   struct symbol *sym;
11378
11379   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11380      that should be compiled with debugging information.  As a result, we
11381      expect to find that symbol in the symtabs.  */
11382
11383   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11384   if (sym == NULL)
11385     {
11386       /* Perhaps we did not find our symbol because the Ada runtime was
11387          compiled without debugging info, or simply stripped of it.
11388          It happens on some GNU/Linux distributions for instance, where
11389          users have to install a separate debug package in order to get
11390          the runtime's debugging info.  In that situation, let the user
11391          know why we cannot insert an Ada exception catchpoint.
11392
11393          Note: Just for the purpose of inserting our Ada exception
11394          catchpoint, we could rely purely on the associated minimal symbol.
11395          But we would be operating in degraded mode anyway, since we are
11396          still lacking the debugging info needed later on to extract
11397          the name of the exception being raised (this name is printed in
11398          the catchpoint message, and is also used when trying to catch
11399          a specific exception).  We do not handle this case for now.  */
11400       struct bound_minimal_symbol msym
11401         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11402
11403       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11404         error (_("Your Ada runtime appears to be missing some debugging "
11405                  "information.\nCannot insert Ada exception catchpoint "
11406                  "in this configuration."));
11407
11408       return 0;
11409     }
11410
11411   /* Make sure that the symbol we found corresponds to a function.  */
11412
11413   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11414     error (_("Symbol \"%s\" is not a function (class = %d)"),
11415            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11416
11417   return 1;
11418 }
11419
11420 /* Inspect the Ada runtime and determine which exception info structure
11421    should be used to provide support for exception catchpoints.
11422
11423    This function will always set the per-inferior exception_info,
11424    or raise an error.  */
11425
11426 static void
11427 ada_exception_support_info_sniffer (void)
11428 {
11429   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11430
11431   /* If the exception info is already known, then no need to recompute it.  */
11432   if (data->exception_info != NULL)
11433     return;
11434
11435   /* Check the latest (default) exception support info.  */
11436   if (ada_has_this_exception_support (&default_exception_support_info))
11437     {
11438       data->exception_info = &default_exception_support_info;
11439       return;
11440     }
11441
11442   /* Try our fallback exception suport info.  */
11443   if (ada_has_this_exception_support (&exception_support_info_fallback))
11444     {
11445       data->exception_info = &exception_support_info_fallback;
11446       return;
11447     }
11448
11449   /* Sometimes, it is normal for us to not be able to find the routine
11450      we are looking for.  This happens when the program is linked with
11451      the shared version of the GNAT runtime, and the program has not been
11452      started yet.  Inform the user of these two possible causes if
11453      applicable.  */
11454
11455   if (ada_update_initial_language (language_unknown) != language_ada)
11456     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11457
11458   /* If the symbol does not exist, then check that the program is
11459      already started, to make sure that shared libraries have been
11460      loaded.  If it is not started, this may mean that the symbol is
11461      in a shared library.  */
11462
11463   if (ptid_get_pid (inferior_ptid) == 0)
11464     error (_("Unable to insert catchpoint. Try to start the program first."));
11465
11466   /* At this point, we know that we are debugging an Ada program and
11467      that the inferior has been started, but we still are not able to
11468      find the run-time symbols.  That can mean that we are in
11469      configurable run time mode, or that a-except as been optimized
11470      out by the linker...  In any case, at this point it is not worth
11471      supporting this feature.  */
11472
11473   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11474 }
11475
11476 /* True iff FRAME is very likely to be that of a function that is
11477    part of the runtime system.  This is all very heuristic, but is
11478    intended to be used as advice as to what frames are uninteresting
11479    to most users.  */
11480
11481 static int
11482 is_known_support_routine (struct frame_info *frame)
11483 {
11484   struct symtab_and_line sal;
11485   char *func_name;
11486   enum language func_lang;
11487   int i;
11488   const char *fullname;
11489
11490   /* If this code does not have any debugging information (no symtab),
11491      This cannot be any user code.  */
11492
11493   find_frame_sal (frame, &sal);
11494   if (sal.symtab == NULL)
11495     return 1;
11496
11497   /* If there is a symtab, but the associated source file cannot be
11498      located, then assume this is not user code:  Selecting a frame
11499      for which we cannot display the code would not be very helpful
11500      for the user.  This should also take care of case such as VxWorks
11501      where the kernel has some debugging info provided for a few units.  */
11502
11503   fullname = symtab_to_fullname (sal.symtab);
11504   if (access (fullname, R_OK) != 0)
11505     return 1;
11506
11507   /* Check the unit filename againt the Ada runtime file naming.
11508      We also check the name of the objfile against the name of some
11509      known system libraries that sometimes come with debugging info
11510      too.  */
11511
11512   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11513     {
11514       re_comp (known_runtime_file_name_patterns[i]);
11515       if (re_exec (lbasename (sal.symtab->filename)))
11516         return 1;
11517       if (sal.symtab->objfile != NULL
11518           && re_exec (objfile_name (sal.symtab->objfile)))
11519         return 1;
11520     }
11521
11522   /* Check whether the function is a GNAT-generated entity.  */
11523
11524   find_frame_funname (frame, &func_name, &func_lang, NULL);
11525   if (func_name == NULL)
11526     return 1;
11527
11528   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11529     {
11530       re_comp (known_auxiliary_function_name_patterns[i]);
11531       if (re_exec (func_name))
11532         {
11533           xfree (func_name);
11534           return 1;
11535         }
11536     }
11537
11538   xfree (func_name);
11539   return 0;
11540 }
11541
11542 /* Find the first frame that contains debugging information and that is not
11543    part of the Ada run-time, starting from FI and moving upward.  */
11544
11545 void
11546 ada_find_printable_frame (struct frame_info *fi)
11547 {
11548   for (; fi != NULL; fi = get_prev_frame (fi))
11549     {
11550       if (!is_known_support_routine (fi))
11551         {
11552           select_frame (fi);
11553           break;
11554         }
11555     }
11556
11557 }
11558
11559 /* Assuming that the inferior just triggered an unhandled exception
11560    catchpoint, return the address in inferior memory where the name
11561    of the exception is stored.
11562    
11563    Return zero if the address could not be computed.  */
11564
11565 static CORE_ADDR
11566 ada_unhandled_exception_name_addr (void)
11567 {
11568   return parse_and_eval_address ("e.full_name");
11569 }
11570
11571 /* Same as ada_unhandled_exception_name_addr, except that this function
11572    should be used when the inferior uses an older version of the runtime,
11573    where the exception name needs to be extracted from a specific frame
11574    several frames up in the callstack.  */
11575
11576 static CORE_ADDR
11577 ada_unhandled_exception_name_addr_from_raise (void)
11578 {
11579   int frame_level;
11580   struct frame_info *fi;
11581   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11582   struct cleanup *old_chain;
11583
11584   /* To determine the name of this exception, we need to select
11585      the frame corresponding to RAISE_SYM_NAME.  This frame is
11586      at least 3 levels up, so we simply skip the first 3 frames
11587      without checking the name of their associated function.  */
11588   fi = get_current_frame ();
11589   for (frame_level = 0; frame_level < 3; frame_level += 1)
11590     if (fi != NULL)
11591       fi = get_prev_frame (fi); 
11592
11593   old_chain = make_cleanup (null_cleanup, NULL);
11594   while (fi != NULL)
11595     {
11596       char *func_name;
11597       enum language func_lang;
11598
11599       find_frame_funname (fi, &func_name, &func_lang, NULL);
11600       if (func_name != NULL)
11601         {
11602           make_cleanup (xfree, func_name);
11603
11604           if (strcmp (func_name,
11605                       data->exception_info->catch_exception_sym) == 0)
11606             break; /* We found the frame we were looking for...  */
11607           fi = get_prev_frame (fi);
11608         }
11609     }
11610   do_cleanups (old_chain);
11611
11612   if (fi == NULL)
11613     return 0;
11614
11615   select_frame (fi);
11616   return parse_and_eval_address ("id.full_name");
11617 }
11618
11619 /* Assuming the inferior just triggered an Ada exception catchpoint
11620    (of any type), return the address in inferior memory where the name
11621    of the exception is stored, if applicable.
11622
11623    Return zero if the address could not be computed, or if not relevant.  */
11624
11625 static CORE_ADDR
11626 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11627                            struct breakpoint *b)
11628 {
11629   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11630
11631   switch (ex)
11632     {
11633       case ada_catch_exception:
11634         return (parse_and_eval_address ("e.full_name"));
11635         break;
11636
11637       case ada_catch_exception_unhandled:
11638         return data->exception_info->unhandled_exception_name_addr ();
11639         break;
11640       
11641       case ada_catch_assert:
11642         return 0;  /* Exception name is not relevant in this case.  */
11643         break;
11644
11645       default:
11646         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11647         break;
11648     }
11649
11650   return 0; /* Should never be reached.  */
11651 }
11652
11653 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11654    any error that ada_exception_name_addr_1 might cause to be thrown.
11655    When an error is intercepted, a warning with the error message is printed,
11656    and zero is returned.  */
11657
11658 static CORE_ADDR
11659 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11660                          struct breakpoint *b)
11661 {
11662   volatile struct gdb_exception e;
11663   CORE_ADDR result = 0;
11664
11665   TRY_CATCH (e, RETURN_MASK_ERROR)
11666     {
11667       result = ada_exception_name_addr_1 (ex, b);
11668     }
11669
11670   if (e.reason < 0)
11671     {
11672       warning (_("failed to get exception name: %s"), e.message);
11673       return 0;
11674     }
11675
11676   return result;
11677 }
11678
11679 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11680
11681 /* Ada catchpoints.
11682
11683    In the case of catchpoints on Ada exceptions, the catchpoint will
11684    stop the target on every exception the program throws.  When a user
11685    specifies the name of a specific exception, we translate this
11686    request into a condition expression (in text form), and then parse
11687    it into an expression stored in each of the catchpoint's locations.
11688    We then use this condition to check whether the exception that was
11689    raised is the one the user is interested in.  If not, then the
11690    target is resumed again.  We store the name of the requested
11691    exception, in order to be able to re-set the condition expression
11692    when symbols change.  */
11693
11694 /* An instance of this type is used to represent an Ada catchpoint
11695    breakpoint location.  It includes a "struct bp_location" as a kind
11696    of base class; users downcast to "struct bp_location *" when
11697    needed.  */
11698
11699 struct ada_catchpoint_location
11700 {
11701   /* The base class.  */
11702   struct bp_location base;
11703
11704   /* The condition that checks whether the exception that was raised
11705      is the specific exception the user specified on catchpoint
11706      creation.  */
11707   struct expression *excep_cond_expr;
11708 };
11709
11710 /* Implement the DTOR method in the bp_location_ops structure for all
11711    Ada exception catchpoint kinds.  */
11712
11713 static void
11714 ada_catchpoint_location_dtor (struct bp_location *bl)
11715 {
11716   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11717
11718   xfree (al->excep_cond_expr);
11719 }
11720
11721 /* The vtable to be used in Ada catchpoint locations.  */
11722
11723 static const struct bp_location_ops ada_catchpoint_location_ops =
11724 {
11725   ada_catchpoint_location_dtor
11726 };
11727
11728 /* An instance of this type is used to represent an Ada catchpoint.
11729    It includes a "struct breakpoint" as a kind of base class; users
11730    downcast to "struct breakpoint *" when needed.  */
11731
11732 struct ada_catchpoint
11733 {
11734   /* The base class.  */
11735   struct breakpoint base;
11736
11737   /* The name of the specific exception the user specified.  */
11738   char *excep_string;
11739 };
11740
11741 /* Parse the exception condition string in the context of each of the
11742    catchpoint's locations, and store them for later evaluation.  */
11743
11744 static void
11745 create_excep_cond_exprs (struct ada_catchpoint *c)
11746 {
11747   struct cleanup *old_chain;
11748   struct bp_location *bl;
11749   char *cond_string;
11750
11751   /* Nothing to do if there's no specific exception to catch.  */
11752   if (c->excep_string == NULL)
11753     return;
11754
11755   /* Same if there are no locations... */
11756   if (c->base.loc == NULL)
11757     return;
11758
11759   /* Compute the condition expression in text form, from the specific
11760      expection we want to catch.  */
11761   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11762   old_chain = make_cleanup (xfree, cond_string);
11763
11764   /* Iterate over all the catchpoint's locations, and parse an
11765      expression for each.  */
11766   for (bl = c->base.loc; bl != NULL; bl = bl->next)
11767     {
11768       struct ada_catchpoint_location *ada_loc
11769         = (struct ada_catchpoint_location *) bl;
11770       struct expression *exp = NULL;
11771
11772       if (!bl->shlib_disabled)
11773         {
11774           volatile struct gdb_exception e;
11775           const char *s;
11776
11777           s = cond_string;
11778           TRY_CATCH (e, RETURN_MASK_ERROR)
11779             {
11780               exp = parse_exp_1 (&s, bl->address,
11781                                  block_for_pc (bl->address), 0);
11782             }
11783           if (e.reason < 0)
11784             {
11785               warning (_("failed to reevaluate internal exception condition "
11786                          "for catchpoint %d: %s"),
11787                        c->base.number, e.message);
11788               /* There is a bug in GCC on sparc-solaris when building with
11789                  optimization which causes EXP to change unexpectedly
11790                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11791                  The problem should be fixed starting with GCC 4.9.
11792                  In the meantime, work around it by forcing EXP back
11793                  to NULL.  */
11794               exp = NULL;
11795             }
11796         }
11797
11798       ada_loc->excep_cond_expr = exp;
11799     }
11800
11801   do_cleanups (old_chain);
11802 }
11803
11804 /* Implement the DTOR method in the breakpoint_ops structure for all
11805    exception catchpoint kinds.  */
11806
11807 static void
11808 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11809 {
11810   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11811
11812   xfree (c->excep_string);
11813
11814   bkpt_breakpoint_ops.dtor (b);
11815 }
11816
11817 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11818    structure for all exception catchpoint kinds.  */
11819
11820 static struct bp_location *
11821 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
11822                              struct breakpoint *self)
11823 {
11824   struct ada_catchpoint_location *loc;
11825
11826   loc = XNEW (struct ada_catchpoint_location);
11827   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11828   loc->excep_cond_expr = NULL;
11829   return &loc->base;
11830 }
11831
11832 /* Implement the RE_SET method in the breakpoint_ops structure for all
11833    exception catchpoint kinds.  */
11834
11835 static void
11836 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11837 {
11838   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11839
11840   /* Call the base class's method.  This updates the catchpoint's
11841      locations.  */
11842   bkpt_breakpoint_ops.re_set (b);
11843
11844   /* Reparse the exception conditional expressions.  One for each
11845      location.  */
11846   create_excep_cond_exprs (c);
11847 }
11848
11849 /* Returns true if we should stop for this breakpoint hit.  If the
11850    user specified a specific exception, we only want to cause a stop
11851    if the program thrown that exception.  */
11852
11853 static int
11854 should_stop_exception (const struct bp_location *bl)
11855 {
11856   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11857   const struct ada_catchpoint_location *ada_loc
11858     = (const struct ada_catchpoint_location *) bl;
11859   volatile struct gdb_exception ex;
11860   int stop;
11861
11862   /* With no specific exception, should always stop.  */
11863   if (c->excep_string == NULL)
11864     return 1;
11865
11866   if (ada_loc->excep_cond_expr == NULL)
11867     {
11868       /* We will have a NULL expression if back when we were creating
11869          the expressions, this location's had failed to parse.  */
11870       return 1;
11871     }
11872
11873   stop = 1;
11874   TRY_CATCH (ex, RETURN_MASK_ALL)
11875     {
11876       struct value *mark;
11877
11878       mark = value_mark ();
11879       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11880       value_free_to_mark (mark);
11881     }
11882   if (ex.reason < 0)
11883     exception_fprintf (gdb_stderr, ex,
11884                        _("Error in testing exception condition:\n"));
11885   return stop;
11886 }
11887
11888 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
11889    for all exception catchpoint kinds.  */
11890
11891 static void
11892 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11893 {
11894   bs->stop = should_stop_exception (bs->bp_location_at);
11895 }
11896
11897 /* Implement the PRINT_IT method in the breakpoint_ops structure
11898    for all exception catchpoint kinds.  */
11899
11900 static enum print_stop_action
11901 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11902 {
11903   struct ui_out *uiout = current_uiout;
11904   struct breakpoint *b = bs->breakpoint_at;
11905
11906   annotate_catchpoint (b->number);
11907
11908   if (ui_out_is_mi_like_p (uiout))
11909     {
11910       ui_out_field_string (uiout, "reason",
11911                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11912       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11913     }
11914
11915   ui_out_text (uiout,
11916                b->disposition == disp_del ? "\nTemporary catchpoint "
11917                                           : "\nCatchpoint ");
11918   ui_out_field_int (uiout, "bkptno", b->number);
11919   ui_out_text (uiout, ", ");
11920
11921   switch (ex)
11922     {
11923       case ada_catch_exception:
11924       case ada_catch_exception_unhandled:
11925         {
11926           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11927           char exception_name[256];
11928
11929           if (addr != 0)
11930             {
11931               read_memory (addr, (gdb_byte *) exception_name,
11932                            sizeof (exception_name) - 1);
11933               exception_name [sizeof (exception_name) - 1] = '\0';
11934             }
11935           else
11936             {
11937               /* For some reason, we were unable to read the exception
11938                  name.  This could happen if the Runtime was compiled
11939                  without debugging info, for instance.  In that case,
11940                  just replace the exception name by the generic string
11941                  "exception" - it will read as "an exception" in the
11942                  notification we are about to print.  */
11943               memcpy (exception_name, "exception", sizeof ("exception"));
11944             }
11945           /* In the case of unhandled exception breakpoints, we print
11946              the exception name as "unhandled EXCEPTION_NAME", to make
11947              it clearer to the user which kind of catchpoint just got
11948              hit.  We used ui_out_text to make sure that this extra
11949              info does not pollute the exception name in the MI case.  */
11950           if (ex == ada_catch_exception_unhandled)
11951             ui_out_text (uiout, "unhandled ");
11952           ui_out_field_string (uiout, "exception-name", exception_name);
11953         }
11954         break;
11955       case ada_catch_assert:
11956         /* In this case, the name of the exception is not really
11957            important.  Just print "failed assertion" to make it clearer
11958            that his program just hit an assertion-failure catchpoint.
11959            We used ui_out_text because this info does not belong in
11960            the MI output.  */
11961         ui_out_text (uiout, "failed assertion");
11962         break;
11963     }
11964   ui_out_text (uiout, " at ");
11965   ada_find_printable_frame (get_current_frame ());
11966
11967   return PRINT_SRC_AND_LOC;
11968 }
11969
11970 /* Implement the PRINT_ONE method in the breakpoint_ops structure
11971    for all exception catchpoint kinds.  */
11972
11973 static void
11974 print_one_exception (enum ada_exception_catchpoint_kind ex,
11975                      struct breakpoint *b, struct bp_location **last_loc)
11976
11977   struct ui_out *uiout = current_uiout;
11978   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11979   struct value_print_options opts;
11980
11981   get_user_print_options (&opts);
11982   if (opts.addressprint)
11983     {
11984       annotate_field (4);
11985       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
11986     }
11987
11988   annotate_field (5);
11989   *last_loc = b->loc;
11990   switch (ex)
11991     {
11992       case ada_catch_exception:
11993         if (c->excep_string != NULL)
11994           {
11995             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11996
11997             ui_out_field_string (uiout, "what", msg);
11998             xfree (msg);
11999           }
12000         else
12001           ui_out_field_string (uiout, "what", "all Ada exceptions");
12002         
12003         break;
12004
12005       case ada_catch_exception_unhandled:
12006         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12007         break;
12008       
12009       case ada_catch_assert:
12010         ui_out_field_string (uiout, "what", "failed Ada assertions");
12011         break;
12012
12013       default:
12014         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12015         break;
12016     }
12017 }
12018
12019 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12020    for all exception catchpoint kinds.  */
12021
12022 static void
12023 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12024                          struct breakpoint *b)
12025 {
12026   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12027   struct ui_out *uiout = current_uiout;
12028
12029   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12030                                                  : _("Catchpoint "));
12031   ui_out_field_int (uiout, "bkptno", b->number);
12032   ui_out_text (uiout, ": ");
12033
12034   switch (ex)
12035     {
12036       case ada_catch_exception:
12037         if (c->excep_string != NULL)
12038           {
12039             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12040             struct cleanup *old_chain = make_cleanup (xfree, info);
12041
12042             ui_out_text (uiout, info);
12043             do_cleanups (old_chain);
12044           }
12045         else
12046           ui_out_text (uiout, _("all Ada exceptions"));
12047         break;
12048
12049       case ada_catch_exception_unhandled:
12050         ui_out_text (uiout, _("unhandled Ada exceptions"));
12051         break;
12052       
12053       case ada_catch_assert:
12054         ui_out_text (uiout, _("failed Ada assertions"));
12055         break;
12056
12057       default:
12058         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12059         break;
12060     }
12061 }
12062
12063 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12064    for all exception catchpoint kinds.  */
12065
12066 static void
12067 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12068                           struct breakpoint *b, struct ui_file *fp)
12069 {
12070   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12071
12072   switch (ex)
12073     {
12074       case ada_catch_exception:
12075         fprintf_filtered (fp, "catch exception");
12076         if (c->excep_string != NULL)
12077           fprintf_filtered (fp, " %s", c->excep_string);
12078         break;
12079
12080       case ada_catch_exception_unhandled:
12081         fprintf_filtered (fp, "catch exception unhandled");
12082         break;
12083
12084       case ada_catch_assert:
12085         fprintf_filtered (fp, "catch assert");
12086         break;
12087
12088       default:
12089         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12090     }
12091   print_recreate_thread (b, fp);
12092 }
12093
12094 /* Virtual table for "catch exception" breakpoints.  */
12095
12096 static void
12097 dtor_catch_exception (struct breakpoint *b)
12098 {
12099   dtor_exception (ada_catch_exception, b);
12100 }
12101
12102 static struct bp_location *
12103 allocate_location_catch_exception (struct breakpoint *self)
12104 {
12105   return allocate_location_exception (ada_catch_exception, self);
12106 }
12107
12108 static void
12109 re_set_catch_exception (struct breakpoint *b)
12110 {
12111   re_set_exception (ada_catch_exception, b);
12112 }
12113
12114 static void
12115 check_status_catch_exception (bpstat bs)
12116 {
12117   check_status_exception (ada_catch_exception, bs);
12118 }
12119
12120 static enum print_stop_action
12121 print_it_catch_exception (bpstat bs)
12122 {
12123   return print_it_exception (ada_catch_exception, bs);
12124 }
12125
12126 static void
12127 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12128 {
12129   print_one_exception (ada_catch_exception, b, last_loc);
12130 }
12131
12132 static void
12133 print_mention_catch_exception (struct breakpoint *b)
12134 {
12135   print_mention_exception (ada_catch_exception, b);
12136 }
12137
12138 static void
12139 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12140 {
12141   print_recreate_exception (ada_catch_exception, b, fp);
12142 }
12143
12144 static struct breakpoint_ops catch_exception_breakpoint_ops;
12145
12146 /* Virtual table for "catch exception unhandled" breakpoints.  */
12147
12148 static void
12149 dtor_catch_exception_unhandled (struct breakpoint *b)
12150 {
12151   dtor_exception (ada_catch_exception_unhandled, b);
12152 }
12153
12154 static struct bp_location *
12155 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12156 {
12157   return allocate_location_exception (ada_catch_exception_unhandled, self);
12158 }
12159
12160 static void
12161 re_set_catch_exception_unhandled (struct breakpoint *b)
12162 {
12163   re_set_exception (ada_catch_exception_unhandled, b);
12164 }
12165
12166 static void
12167 check_status_catch_exception_unhandled (bpstat bs)
12168 {
12169   check_status_exception (ada_catch_exception_unhandled, bs);
12170 }
12171
12172 static enum print_stop_action
12173 print_it_catch_exception_unhandled (bpstat bs)
12174 {
12175   return print_it_exception (ada_catch_exception_unhandled, bs);
12176 }
12177
12178 static void
12179 print_one_catch_exception_unhandled (struct breakpoint *b,
12180                                      struct bp_location **last_loc)
12181 {
12182   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12183 }
12184
12185 static void
12186 print_mention_catch_exception_unhandled (struct breakpoint *b)
12187 {
12188   print_mention_exception (ada_catch_exception_unhandled, b);
12189 }
12190
12191 static void
12192 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12193                                           struct ui_file *fp)
12194 {
12195   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12196 }
12197
12198 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12199
12200 /* Virtual table for "catch assert" breakpoints.  */
12201
12202 static void
12203 dtor_catch_assert (struct breakpoint *b)
12204 {
12205   dtor_exception (ada_catch_assert, b);
12206 }
12207
12208 static struct bp_location *
12209 allocate_location_catch_assert (struct breakpoint *self)
12210 {
12211   return allocate_location_exception (ada_catch_assert, self);
12212 }
12213
12214 static void
12215 re_set_catch_assert (struct breakpoint *b)
12216 {
12217   re_set_exception (ada_catch_assert, b);
12218 }
12219
12220 static void
12221 check_status_catch_assert (bpstat bs)
12222 {
12223   check_status_exception (ada_catch_assert, bs);
12224 }
12225
12226 static enum print_stop_action
12227 print_it_catch_assert (bpstat bs)
12228 {
12229   return print_it_exception (ada_catch_assert, bs);
12230 }
12231
12232 static void
12233 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12234 {
12235   print_one_exception (ada_catch_assert, b, last_loc);
12236 }
12237
12238 static void
12239 print_mention_catch_assert (struct breakpoint *b)
12240 {
12241   print_mention_exception (ada_catch_assert, b);
12242 }
12243
12244 static void
12245 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12246 {
12247   print_recreate_exception (ada_catch_assert, b, fp);
12248 }
12249
12250 static struct breakpoint_ops catch_assert_breakpoint_ops;
12251
12252 /* Return a newly allocated copy of the first space-separated token
12253    in ARGSP, and then adjust ARGSP to point immediately after that
12254    token.
12255
12256    Return NULL if ARGPS does not contain any more tokens.  */
12257
12258 static char *
12259 ada_get_next_arg (char **argsp)
12260 {
12261   char *args = *argsp;
12262   char *end;
12263   char *result;
12264
12265   args = skip_spaces (args);
12266   if (args[0] == '\0')
12267     return NULL; /* No more arguments.  */
12268   
12269   /* Find the end of the current argument.  */
12270
12271   end = skip_to_space (args);
12272
12273   /* Adjust ARGSP to point to the start of the next argument.  */
12274
12275   *argsp = end;
12276
12277   /* Make a copy of the current argument and return it.  */
12278
12279   result = xmalloc (end - args + 1);
12280   strncpy (result, args, end - args);
12281   result[end - args] = '\0';
12282   
12283   return result;
12284 }
12285
12286 /* Split the arguments specified in a "catch exception" command.  
12287    Set EX to the appropriate catchpoint type.
12288    Set EXCEP_STRING to the name of the specific exception if
12289    specified by the user.
12290    If a condition is found at the end of the arguments, the condition
12291    expression is stored in COND_STRING (memory must be deallocated
12292    after use).  Otherwise COND_STRING is set to NULL.  */
12293
12294 static void
12295 catch_ada_exception_command_split (char *args,
12296                                    enum ada_exception_catchpoint_kind *ex,
12297                                    char **excep_string,
12298                                    char **cond_string)
12299 {
12300   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12301   char *exception_name;
12302   char *cond = NULL;
12303
12304   exception_name = ada_get_next_arg (&args);
12305   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12306     {
12307       /* This is not an exception name; this is the start of a condition
12308          expression for a catchpoint on all exceptions.  So, "un-get"
12309          this token, and set exception_name to NULL.  */
12310       xfree (exception_name);
12311       exception_name = NULL;
12312       args -= 2;
12313     }
12314   make_cleanup (xfree, exception_name);
12315
12316   /* Check to see if we have a condition.  */
12317
12318   args = skip_spaces (args);
12319   if (strncmp (args, "if", 2) == 0
12320       && (isspace (args[2]) || args[2] == '\0'))
12321     {
12322       args += 2;
12323       args = skip_spaces (args);
12324
12325       if (args[0] == '\0')
12326         error (_("Condition missing after `if' keyword"));
12327       cond = xstrdup (args);
12328       make_cleanup (xfree, cond);
12329
12330       args += strlen (args);
12331     }
12332
12333   /* Check that we do not have any more arguments.  Anything else
12334      is unexpected.  */
12335
12336   if (args[0] != '\0')
12337     error (_("Junk at end of expression"));
12338
12339   discard_cleanups (old_chain);
12340
12341   if (exception_name == NULL)
12342     {
12343       /* Catch all exceptions.  */
12344       *ex = ada_catch_exception;
12345       *excep_string = NULL;
12346     }
12347   else if (strcmp (exception_name, "unhandled") == 0)
12348     {
12349       /* Catch unhandled exceptions.  */
12350       *ex = ada_catch_exception_unhandled;
12351       *excep_string = NULL;
12352     }
12353   else
12354     {
12355       /* Catch a specific exception.  */
12356       *ex = ada_catch_exception;
12357       *excep_string = exception_name;
12358     }
12359   *cond_string = cond;
12360 }
12361
12362 /* Return the name of the symbol on which we should break in order to
12363    implement a catchpoint of the EX kind.  */
12364
12365 static const char *
12366 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12367 {
12368   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12369
12370   gdb_assert (data->exception_info != NULL);
12371
12372   switch (ex)
12373     {
12374       case ada_catch_exception:
12375         return (data->exception_info->catch_exception_sym);
12376         break;
12377       case ada_catch_exception_unhandled:
12378         return (data->exception_info->catch_exception_unhandled_sym);
12379         break;
12380       case ada_catch_assert:
12381         return (data->exception_info->catch_assert_sym);
12382         break;
12383       default:
12384         internal_error (__FILE__, __LINE__,
12385                         _("unexpected catchpoint kind (%d)"), ex);
12386     }
12387 }
12388
12389 /* Return the breakpoint ops "virtual table" used for catchpoints
12390    of the EX kind.  */
12391
12392 static const struct breakpoint_ops *
12393 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12394 {
12395   switch (ex)
12396     {
12397       case ada_catch_exception:
12398         return (&catch_exception_breakpoint_ops);
12399         break;
12400       case ada_catch_exception_unhandled:
12401         return (&catch_exception_unhandled_breakpoint_ops);
12402         break;
12403       case ada_catch_assert:
12404         return (&catch_assert_breakpoint_ops);
12405         break;
12406       default:
12407         internal_error (__FILE__, __LINE__,
12408                         _("unexpected catchpoint kind (%d)"), ex);
12409     }
12410 }
12411
12412 /* Return the condition that will be used to match the current exception
12413    being raised with the exception that the user wants to catch.  This
12414    assumes that this condition is used when the inferior just triggered
12415    an exception catchpoint.
12416    
12417    The string returned is a newly allocated string that needs to be
12418    deallocated later.  */
12419
12420 static char *
12421 ada_exception_catchpoint_cond_string (const char *excep_string)
12422 {
12423   int i;
12424
12425   /* The standard exceptions are a special case.  They are defined in
12426      runtime units that have been compiled without debugging info; if
12427      EXCEP_STRING is the not-fully-qualified name of a standard
12428      exception (e.g. "constraint_error") then, during the evaluation
12429      of the condition expression, the symbol lookup on this name would
12430      *not* return this standard exception.  The catchpoint condition
12431      may then be set only on user-defined exceptions which have the
12432      same not-fully-qualified name (e.g. my_package.constraint_error).
12433
12434      To avoid this unexcepted behavior, these standard exceptions are
12435      systematically prefixed by "standard".  This means that "catch
12436      exception constraint_error" is rewritten into "catch exception
12437      standard.constraint_error".
12438
12439      If an exception named contraint_error is defined in another package of
12440      the inferior program, then the only way to specify this exception as a
12441      breakpoint condition is to use its fully-qualified named:
12442      e.g. my_package.constraint_error.  */
12443
12444   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12445     {
12446       if (strcmp (standard_exc [i], excep_string) == 0)
12447         {
12448           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12449                              excep_string);
12450         }
12451     }
12452   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12453 }
12454
12455 /* Return the symtab_and_line that should be used to insert an exception
12456    catchpoint of the TYPE kind.
12457
12458    EXCEP_STRING should contain the name of a specific exception that
12459    the catchpoint should catch, or NULL otherwise.
12460
12461    ADDR_STRING returns the name of the function where the real
12462    breakpoint that implements the catchpoints is set, depending on the
12463    type of catchpoint we need to create.  */
12464
12465 static struct symtab_and_line
12466 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12467                    char **addr_string, const struct breakpoint_ops **ops)
12468 {
12469   const char *sym_name;
12470   struct symbol *sym;
12471
12472   /* First, find out which exception support info to use.  */
12473   ada_exception_support_info_sniffer ();
12474
12475   /* Then lookup the function on which we will break in order to catch
12476      the Ada exceptions requested by the user.  */
12477   sym_name = ada_exception_sym_name (ex);
12478   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12479
12480   /* We can assume that SYM is not NULL at this stage.  If the symbol
12481      did not exist, ada_exception_support_info_sniffer would have
12482      raised an exception.
12483
12484      Also, ada_exception_support_info_sniffer should have already
12485      verified that SYM is a function symbol.  */
12486   gdb_assert (sym != NULL);
12487   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12488
12489   /* Set ADDR_STRING.  */
12490   *addr_string = xstrdup (sym_name);
12491
12492   /* Set OPS.  */
12493   *ops = ada_exception_breakpoint_ops (ex);
12494
12495   return find_function_start_sal (sym, 1);
12496 }
12497
12498 /* Create an Ada exception catchpoint.
12499
12500    EX_KIND is the kind of exception catchpoint to be created.
12501
12502    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12503    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12504    of the exception to which this catchpoint applies.  When not NULL,
12505    the string must be allocated on the heap, and its deallocation
12506    is no longer the responsibility of the caller.
12507
12508    COND_STRING, if not NULL, is the catchpoint condition.  This string
12509    must be allocated on the heap, and its deallocation is no longer
12510    the responsibility of the caller.
12511
12512    TEMPFLAG, if nonzero, means that the underlying breakpoint
12513    should be temporary.
12514
12515    FROM_TTY is the usual argument passed to all commands implementations.  */
12516
12517 void
12518 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12519                                  enum ada_exception_catchpoint_kind ex_kind,
12520                                  char *excep_string,
12521                                  char *cond_string,
12522                                  int tempflag,
12523                                  int disabled,
12524                                  int from_tty)
12525 {
12526   struct ada_catchpoint *c;
12527   char *addr_string = NULL;
12528   const struct breakpoint_ops *ops = NULL;
12529   struct symtab_and_line sal
12530     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12531
12532   c = XNEW (struct ada_catchpoint);
12533   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12534                                  ops, tempflag, disabled, from_tty);
12535   c->excep_string = excep_string;
12536   create_excep_cond_exprs (c);
12537   if (cond_string != NULL)
12538     set_breakpoint_condition (&c->base, cond_string, from_tty);
12539   install_breakpoint (0, &c->base, 1);
12540 }
12541
12542 /* Implement the "catch exception" command.  */
12543
12544 static void
12545 catch_ada_exception_command (char *arg, int from_tty,
12546                              struct cmd_list_element *command)
12547 {
12548   struct gdbarch *gdbarch = get_current_arch ();
12549   int tempflag;
12550   enum ada_exception_catchpoint_kind ex_kind;
12551   char *excep_string = NULL;
12552   char *cond_string = NULL;
12553
12554   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12555
12556   if (!arg)
12557     arg = "";
12558   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12559                                      &cond_string);
12560   create_ada_exception_catchpoint (gdbarch, ex_kind,
12561                                    excep_string, cond_string,
12562                                    tempflag, 1 /* enabled */,
12563                                    from_tty);
12564 }
12565
12566 /* Split the arguments specified in a "catch assert" command.
12567
12568    ARGS contains the command's arguments (or the empty string if
12569    no arguments were passed).
12570
12571    If ARGS contains a condition, set COND_STRING to that condition
12572    (the memory needs to be deallocated after use).  */
12573
12574 static void
12575 catch_ada_assert_command_split (char *args, char **cond_string)
12576 {
12577   args = skip_spaces (args);
12578
12579   /* Check whether a condition was provided.  */
12580   if (strncmp (args, "if", 2) == 0
12581       && (isspace (args[2]) || args[2] == '\0'))
12582     {
12583       args += 2;
12584       args = skip_spaces (args);
12585       if (args[0] == '\0')
12586         error (_("condition missing after `if' keyword"));
12587       *cond_string = xstrdup (args);
12588     }
12589
12590   /* Otherwise, there should be no other argument at the end of
12591      the command.  */
12592   else if (args[0] != '\0')
12593     error (_("Junk at end of arguments."));
12594 }
12595
12596 /* Implement the "catch assert" command.  */
12597
12598 static void
12599 catch_assert_command (char *arg, int from_tty,
12600                       struct cmd_list_element *command)
12601 {
12602   struct gdbarch *gdbarch = get_current_arch ();
12603   int tempflag;
12604   char *cond_string = NULL;
12605
12606   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12607
12608   if (!arg)
12609     arg = "";
12610   catch_ada_assert_command_split (arg, &cond_string);
12611   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12612                                    NULL, cond_string,
12613                                    tempflag, 1 /* enabled */,
12614                                    from_tty);
12615 }
12616
12617 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12618
12619 static int
12620 ada_is_exception_sym (struct symbol *sym)
12621 {
12622   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12623
12624   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12625           && SYMBOL_CLASS (sym) != LOC_BLOCK
12626           && SYMBOL_CLASS (sym) != LOC_CONST
12627           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12628           && type_name != NULL && strcmp (type_name, "exception") == 0);
12629 }
12630
12631 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12632    Ada exception object.  This matches all exceptions except the ones
12633    defined by the Ada language.  */
12634
12635 static int
12636 ada_is_non_standard_exception_sym (struct symbol *sym)
12637 {
12638   int i;
12639
12640   if (!ada_is_exception_sym (sym))
12641     return 0;
12642
12643   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12644     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12645       return 0;  /* A standard exception.  */
12646
12647   /* Numeric_Error is also a standard exception, so exclude it.
12648      See the STANDARD_EXC description for more details as to why
12649      this exception is not listed in that array.  */
12650   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12651     return 0;
12652
12653   return 1;
12654 }
12655
12656 /* A helper function for qsort, comparing two struct ada_exc_info
12657    objects.
12658
12659    The comparison is determined first by exception name, and then
12660    by exception address.  */
12661
12662 static int
12663 compare_ada_exception_info (const void *a, const void *b)
12664 {
12665   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12666   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12667   int result;
12668
12669   result = strcmp (exc_a->name, exc_b->name);
12670   if (result != 0)
12671     return result;
12672
12673   if (exc_a->addr < exc_b->addr)
12674     return -1;
12675   if (exc_a->addr > exc_b->addr)
12676     return 1;
12677
12678   return 0;
12679 }
12680
12681 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12682    routine, but keeping the first SKIP elements untouched.
12683
12684    All duplicates are also removed.  */
12685
12686 static void
12687 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12688                                       int skip)
12689 {
12690   struct ada_exc_info *to_sort
12691     = VEC_address (ada_exc_info, *exceptions) + skip;
12692   int to_sort_len
12693     = VEC_length (ada_exc_info, *exceptions) - skip;
12694   int i, j;
12695
12696   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12697          compare_ada_exception_info);
12698
12699   for (i = 1, j = 1; i < to_sort_len; i++)
12700     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12701       to_sort[j++] = to_sort[i];
12702   to_sort_len = j;
12703   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12704 }
12705
12706 /* A function intended as the "name_matcher" callback in the struct
12707    quick_symbol_functions' expand_symtabs_matching method.
12708
12709    SEARCH_NAME is the symbol's search name.
12710
12711    If USER_DATA is not NULL, it is a pointer to a regext_t object
12712    used to match the symbol (by natural name).  Otherwise, when USER_DATA
12713    is null, no filtering is performed, and all symbols are a positive
12714    match.  */
12715
12716 static int
12717 ada_exc_search_name_matches (const char *search_name, void *user_data)
12718 {
12719   regex_t *preg = user_data;
12720
12721   if (preg == NULL)
12722     return 1;
12723
12724   /* In Ada, the symbol "search name" is a linkage name, whereas
12725      the regular expression used to do the matching refers to
12726      the natural name.  So match against the decoded name.  */
12727   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12728 }
12729
12730 /* Add all exceptions defined by the Ada standard whose name match
12731    a regular expression.
12732
12733    If PREG is not NULL, then this regexp_t object is used to
12734    perform the symbol name matching.  Otherwise, no name-based
12735    filtering is performed.
12736
12737    EXCEPTIONS is a vector of exceptions to which matching exceptions
12738    gets pushed.  */
12739
12740 static void
12741 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12742 {
12743   int i;
12744
12745   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12746     {
12747       if (preg == NULL
12748           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12749         {
12750           struct bound_minimal_symbol msymbol
12751             = ada_lookup_simple_minsym (standard_exc[i]);
12752
12753           if (msymbol.minsym != NULL)
12754             {
12755               struct ada_exc_info info
12756                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12757
12758               VEC_safe_push (ada_exc_info, *exceptions, &info);
12759             }
12760         }
12761     }
12762 }
12763
12764 /* Add all Ada exceptions defined locally and accessible from the given
12765    FRAME.
12766
12767    If PREG is not NULL, then this regexp_t object is used to
12768    perform the symbol name matching.  Otherwise, no name-based
12769    filtering is performed.
12770
12771    EXCEPTIONS is a vector of exceptions to which matching exceptions
12772    gets pushed.  */
12773
12774 static void
12775 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12776                                VEC(ada_exc_info) **exceptions)
12777 {
12778   const struct block *block = get_frame_block (frame, 0);
12779
12780   while (block != 0)
12781     {
12782       struct block_iterator iter;
12783       struct symbol *sym;
12784
12785       ALL_BLOCK_SYMBOLS (block, iter, sym)
12786         {
12787           switch (SYMBOL_CLASS (sym))
12788             {
12789             case LOC_TYPEDEF:
12790             case LOC_BLOCK:
12791             case LOC_CONST:
12792               break;
12793             default:
12794               if (ada_is_exception_sym (sym))
12795                 {
12796                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12797                                               SYMBOL_VALUE_ADDRESS (sym)};
12798
12799                   VEC_safe_push (ada_exc_info, *exceptions, &info);
12800                 }
12801             }
12802         }
12803       if (BLOCK_FUNCTION (block) != NULL)
12804         break;
12805       block = BLOCK_SUPERBLOCK (block);
12806     }
12807 }
12808
12809 /* Add all exceptions defined globally whose name name match
12810    a regular expression, excluding standard exceptions.
12811
12812    The reason we exclude standard exceptions is that they need
12813    to be handled separately: Standard exceptions are defined inside
12814    a runtime unit which is normally not compiled with debugging info,
12815    and thus usually do not show up in our symbol search.  However,
12816    if the unit was in fact built with debugging info, we need to
12817    exclude them because they would duplicate the entry we found
12818    during the special loop that specifically searches for those
12819    standard exceptions.
12820
12821    If PREG is not NULL, then this regexp_t object is used to
12822    perform the symbol name matching.  Otherwise, no name-based
12823    filtering is performed.
12824
12825    EXCEPTIONS is a vector of exceptions to which matching exceptions
12826    gets pushed.  */
12827
12828 static void
12829 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12830 {
12831   struct objfile *objfile;
12832   struct symtab *s;
12833
12834   expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12835                            VARIABLES_DOMAIN, preg);
12836
12837   ALL_PRIMARY_SYMTABS (objfile, s)
12838     {
12839       const struct blockvector *bv = BLOCKVECTOR (s);
12840       int i;
12841
12842       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12843         {
12844           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12845           struct block_iterator iter;
12846           struct symbol *sym;
12847
12848           ALL_BLOCK_SYMBOLS (b, iter, sym)
12849             if (ada_is_non_standard_exception_sym (sym)
12850                 && (preg == NULL
12851                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12852                                 0, NULL, 0) == 0))
12853               {
12854                 struct ada_exc_info info
12855                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12856
12857                 VEC_safe_push (ada_exc_info, *exceptions, &info);
12858               }
12859         }
12860     }
12861 }
12862
12863 /* Implements ada_exceptions_list with the regular expression passed
12864    as a regex_t, rather than a string.
12865
12866    If not NULL, PREG is used to filter out exceptions whose names
12867    do not match.  Otherwise, all exceptions are listed.  */
12868
12869 static VEC(ada_exc_info) *
12870 ada_exceptions_list_1 (regex_t *preg)
12871 {
12872   VEC(ada_exc_info) *result = NULL;
12873   struct cleanup *old_chain
12874     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12875   int prev_len;
12876
12877   /* First, list the known standard exceptions.  These exceptions
12878      need to be handled separately, as they are usually defined in
12879      runtime units that have been compiled without debugging info.  */
12880
12881   ada_add_standard_exceptions (preg, &result);
12882
12883   /* Next, find all exceptions whose scope is local and accessible
12884      from the currently selected frame.  */
12885
12886   if (has_stack_frames ())
12887     {
12888       prev_len = VEC_length (ada_exc_info, result);
12889       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12890                                      &result);
12891       if (VEC_length (ada_exc_info, result) > prev_len)
12892         sort_remove_dups_ada_exceptions_list (&result, prev_len);
12893     }
12894
12895   /* Add all exceptions whose scope is global.  */
12896
12897   prev_len = VEC_length (ada_exc_info, result);
12898   ada_add_global_exceptions (preg, &result);
12899   if (VEC_length (ada_exc_info, result) > prev_len)
12900     sort_remove_dups_ada_exceptions_list (&result, prev_len);
12901
12902   discard_cleanups (old_chain);
12903   return result;
12904 }
12905
12906 /* Return a vector of ada_exc_info.
12907
12908    If REGEXP is NULL, all exceptions are included in the result.
12909    Otherwise, it should contain a valid regular expression,
12910    and only the exceptions whose names match that regular expression
12911    are included in the result.
12912
12913    The exceptions are sorted in the following order:
12914      - Standard exceptions (defined by the Ada language), in
12915        alphabetical order;
12916      - Exceptions only visible from the current frame, in
12917        alphabetical order;
12918      - Exceptions whose scope is global, in alphabetical order.  */
12919
12920 VEC(ada_exc_info) *
12921 ada_exceptions_list (const char *regexp)
12922 {
12923   VEC(ada_exc_info) *result = NULL;
12924   struct cleanup *old_chain = NULL;
12925   regex_t reg;
12926
12927   if (regexp != NULL)
12928     old_chain = compile_rx_or_error (&reg, regexp,
12929                                      _("invalid regular expression"));
12930
12931   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12932
12933   if (old_chain != NULL)
12934     do_cleanups (old_chain);
12935   return result;
12936 }
12937
12938 /* Implement the "info exceptions" command.  */
12939
12940 static void
12941 info_exceptions_command (char *regexp, int from_tty)
12942 {
12943   VEC(ada_exc_info) *exceptions;
12944   struct cleanup *cleanup;
12945   struct gdbarch *gdbarch = get_current_arch ();
12946   int ix;
12947   struct ada_exc_info *info;
12948
12949   exceptions = ada_exceptions_list (regexp);
12950   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12951
12952   if (regexp != NULL)
12953     printf_filtered
12954       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12955   else
12956     printf_filtered (_("All defined Ada exceptions:\n"));
12957
12958   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12959     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12960
12961   do_cleanups (cleanup);
12962 }
12963
12964                                 /* Operators */
12965 /* Information about operators given special treatment in functions
12966    below.  */
12967 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
12968
12969 #define ADA_OPERATORS \
12970     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12971     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12972     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12973     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12974     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12975     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12976     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12977     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12978     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12979     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12980     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12981     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12982     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
12983     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
12984     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
12985     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
12986     OP_DEFN (OP_OTHERS, 1, 1, 0) \
12987     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
12988     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
12989
12990 static void
12991 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
12992                      int *argsp)
12993 {
12994   switch (exp->elts[pc - 1].opcode)
12995     {
12996     default:
12997       operator_length_standard (exp, pc, oplenp, argsp);
12998       break;
12999
13000 #define OP_DEFN(op, len, args, binop) \
13001     case op: *oplenp = len; *argsp = args; break;
13002       ADA_OPERATORS;
13003 #undef OP_DEFN
13004
13005     case OP_AGGREGATE:
13006       *oplenp = 3;
13007       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13008       break;
13009
13010     case OP_CHOICES:
13011       *oplenp = 3;
13012       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13013       break;
13014     }
13015 }
13016
13017 /* Implementation of the exp_descriptor method operator_check.  */
13018
13019 static int
13020 ada_operator_check (struct expression *exp, int pos,
13021                     int (*objfile_func) (struct objfile *objfile, void *data),
13022                     void *data)
13023 {
13024   const union exp_element *const elts = exp->elts;
13025   struct type *type = NULL;
13026
13027   switch (elts[pos].opcode)
13028     {
13029       case UNOP_IN_RANGE:
13030       case UNOP_QUAL:
13031         type = elts[pos + 1].type;
13032         break;
13033
13034       default:
13035         return operator_check_standard (exp, pos, objfile_func, data);
13036     }
13037
13038   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13039
13040   if (type && TYPE_OBJFILE (type)
13041       && (*objfile_func) (TYPE_OBJFILE (type), data))
13042     return 1;
13043
13044   return 0;
13045 }
13046
13047 static char *
13048 ada_op_name (enum exp_opcode opcode)
13049 {
13050   switch (opcode)
13051     {
13052     default:
13053       return op_name_standard (opcode);
13054
13055 #define OP_DEFN(op, len, args, binop) case op: return #op;
13056       ADA_OPERATORS;
13057 #undef OP_DEFN
13058
13059     case OP_AGGREGATE:
13060       return "OP_AGGREGATE";
13061     case OP_CHOICES:
13062       return "OP_CHOICES";
13063     case OP_NAME:
13064       return "OP_NAME";
13065     }
13066 }
13067
13068 /* As for operator_length, but assumes PC is pointing at the first
13069    element of the operator, and gives meaningful results only for the 
13070    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13071
13072 static void
13073 ada_forward_operator_length (struct expression *exp, int pc,
13074                              int *oplenp, int *argsp)
13075 {
13076   switch (exp->elts[pc].opcode)
13077     {
13078     default:
13079       *oplenp = *argsp = 0;
13080       break;
13081
13082 #define OP_DEFN(op, len, args, binop) \
13083     case op: *oplenp = len; *argsp = args; break;
13084       ADA_OPERATORS;
13085 #undef OP_DEFN
13086
13087     case OP_AGGREGATE:
13088       *oplenp = 3;
13089       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13090       break;
13091
13092     case OP_CHOICES:
13093       *oplenp = 3;
13094       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13095       break;
13096
13097     case OP_STRING:
13098     case OP_NAME:
13099       {
13100         int len = longest_to_int (exp->elts[pc + 1].longconst);
13101
13102         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13103         *argsp = 0;
13104         break;
13105       }
13106     }
13107 }
13108
13109 static int
13110 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13111 {
13112   enum exp_opcode op = exp->elts[elt].opcode;
13113   int oplen, nargs;
13114   int pc = elt;
13115   int i;
13116
13117   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13118
13119   switch (op)
13120     {
13121       /* Ada attributes ('Foo).  */
13122     case OP_ATR_FIRST:
13123     case OP_ATR_LAST:
13124     case OP_ATR_LENGTH:
13125     case OP_ATR_IMAGE:
13126     case OP_ATR_MAX:
13127     case OP_ATR_MIN:
13128     case OP_ATR_MODULUS:
13129     case OP_ATR_POS:
13130     case OP_ATR_SIZE:
13131     case OP_ATR_TAG:
13132     case OP_ATR_VAL:
13133       break;
13134
13135     case UNOP_IN_RANGE:
13136     case UNOP_QUAL:
13137       /* XXX: gdb_sprint_host_address, type_sprint */
13138       fprintf_filtered (stream, _("Type @"));
13139       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13140       fprintf_filtered (stream, " (");
13141       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13142       fprintf_filtered (stream, ")");
13143       break;
13144     case BINOP_IN_BOUNDS:
13145       fprintf_filtered (stream, " (%d)",
13146                         longest_to_int (exp->elts[pc + 2].longconst));
13147       break;
13148     case TERNOP_IN_RANGE:
13149       break;
13150
13151     case OP_AGGREGATE:
13152     case OP_OTHERS:
13153     case OP_DISCRETE_RANGE:
13154     case OP_POSITIONAL:
13155     case OP_CHOICES:
13156       break;
13157
13158     case OP_NAME:
13159     case OP_STRING:
13160       {
13161         char *name = &exp->elts[elt + 2].string;
13162         int len = longest_to_int (exp->elts[elt + 1].longconst);
13163
13164         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13165         break;
13166       }
13167
13168     default:
13169       return dump_subexp_body_standard (exp, stream, elt);
13170     }
13171
13172   elt += oplen;
13173   for (i = 0; i < nargs; i += 1)
13174     elt = dump_subexp (exp, stream, elt);
13175
13176   return elt;
13177 }
13178
13179 /* The Ada extension of print_subexp (q.v.).  */
13180
13181 static void
13182 ada_print_subexp (struct expression *exp, int *pos,
13183                   struct ui_file *stream, enum precedence prec)
13184 {
13185   int oplen, nargs, i;
13186   int pc = *pos;
13187   enum exp_opcode op = exp->elts[pc].opcode;
13188
13189   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13190
13191   *pos += oplen;
13192   switch (op)
13193     {
13194     default:
13195       *pos -= oplen;
13196       print_subexp_standard (exp, pos, stream, prec);
13197       return;
13198
13199     case OP_VAR_VALUE:
13200       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13201       return;
13202
13203     case BINOP_IN_BOUNDS:
13204       /* XXX: sprint_subexp */
13205       print_subexp (exp, pos, stream, PREC_SUFFIX);
13206       fputs_filtered (" in ", stream);
13207       print_subexp (exp, pos, stream, PREC_SUFFIX);
13208       fputs_filtered ("'range", stream);
13209       if (exp->elts[pc + 1].longconst > 1)
13210         fprintf_filtered (stream, "(%ld)",
13211                           (long) exp->elts[pc + 1].longconst);
13212       return;
13213
13214     case TERNOP_IN_RANGE:
13215       if (prec >= PREC_EQUAL)
13216         fputs_filtered ("(", stream);
13217       /* XXX: sprint_subexp */
13218       print_subexp (exp, pos, stream, PREC_SUFFIX);
13219       fputs_filtered (" in ", stream);
13220       print_subexp (exp, pos, stream, PREC_EQUAL);
13221       fputs_filtered (" .. ", stream);
13222       print_subexp (exp, pos, stream, PREC_EQUAL);
13223       if (prec >= PREC_EQUAL)
13224         fputs_filtered (")", stream);
13225       return;
13226
13227     case OP_ATR_FIRST:
13228     case OP_ATR_LAST:
13229     case OP_ATR_LENGTH:
13230     case OP_ATR_IMAGE:
13231     case OP_ATR_MAX:
13232     case OP_ATR_MIN:
13233     case OP_ATR_MODULUS:
13234     case OP_ATR_POS:
13235     case OP_ATR_SIZE:
13236     case OP_ATR_TAG:
13237     case OP_ATR_VAL:
13238       if (exp->elts[*pos].opcode == OP_TYPE)
13239         {
13240           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13241             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13242                            &type_print_raw_options);
13243           *pos += 3;
13244         }
13245       else
13246         print_subexp (exp, pos, stream, PREC_SUFFIX);
13247       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13248       if (nargs > 1)
13249         {
13250           int tem;
13251
13252           for (tem = 1; tem < nargs; tem += 1)
13253             {
13254               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13255               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13256             }
13257           fputs_filtered (")", stream);
13258         }
13259       return;
13260
13261     case UNOP_QUAL:
13262       type_print (exp->elts[pc + 1].type, "", stream, 0);
13263       fputs_filtered ("'(", stream);
13264       print_subexp (exp, pos, stream, PREC_PREFIX);
13265       fputs_filtered (")", stream);
13266       return;
13267
13268     case UNOP_IN_RANGE:
13269       /* XXX: sprint_subexp */
13270       print_subexp (exp, pos, stream, PREC_SUFFIX);
13271       fputs_filtered (" in ", stream);
13272       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13273                      &type_print_raw_options);
13274       return;
13275
13276     case OP_DISCRETE_RANGE:
13277       print_subexp (exp, pos, stream, PREC_SUFFIX);
13278       fputs_filtered ("..", stream);
13279       print_subexp (exp, pos, stream, PREC_SUFFIX);
13280       return;
13281
13282     case OP_OTHERS:
13283       fputs_filtered ("others => ", stream);
13284       print_subexp (exp, pos, stream, PREC_SUFFIX);
13285       return;
13286
13287     case OP_CHOICES:
13288       for (i = 0; i < nargs-1; i += 1)
13289         {
13290           if (i > 0)
13291             fputs_filtered ("|", stream);
13292           print_subexp (exp, pos, stream, PREC_SUFFIX);
13293         }
13294       fputs_filtered (" => ", stream);
13295       print_subexp (exp, pos, stream, PREC_SUFFIX);
13296       return;
13297       
13298     case OP_POSITIONAL:
13299       print_subexp (exp, pos, stream, PREC_SUFFIX);
13300       return;
13301
13302     case OP_AGGREGATE:
13303       fputs_filtered ("(", stream);
13304       for (i = 0; i < nargs; i += 1)
13305         {
13306           if (i > 0)
13307             fputs_filtered (", ", stream);
13308           print_subexp (exp, pos, stream, PREC_SUFFIX);
13309         }
13310       fputs_filtered (")", stream);
13311       return;
13312     }
13313 }
13314
13315 /* Table mapping opcodes into strings for printing operators
13316    and precedences of the operators.  */
13317
13318 static const struct op_print ada_op_print_tab[] = {
13319   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13320   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13321   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13322   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13323   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13324   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13325   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13326   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13327   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13328   {">=", BINOP_GEQ, PREC_ORDER, 0},
13329   {">", BINOP_GTR, PREC_ORDER, 0},
13330   {"<", BINOP_LESS, PREC_ORDER, 0},
13331   {">>", BINOP_RSH, PREC_SHIFT, 0},
13332   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13333   {"+", BINOP_ADD, PREC_ADD, 0},
13334   {"-", BINOP_SUB, PREC_ADD, 0},
13335   {"&", BINOP_CONCAT, PREC_ADD, 0},
13336   {"*", BINOP_MUL, PREC_MUL, 0},
13337   {"/", BINOP_DIV, PREC_MUL, 0},
13338   {"rem", BINOP_REM, PREC_MUL, 0},
13339   {"mod", BINOP_MOD, PREC_MUL, 0},
13340   {"**", BINOP_EXP, PREC_REPEAT, 0},
13341   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13342   {"-", UNOP_NEG, PREC_PREFIX, 0},
13343   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13344   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13345   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13346   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13347   {".all", UNOP_IND, PREC_SUFFIX, 1},
13348   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13349   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13350   {NULL, 0, 0, 0}
13351 };
13352 \f
13353 enum ada_primitive_types {
13354   ada_primitive_type_int,
13355   ada_primitive_type_long,
13356   ada_primitive_type_short,
13357   ada_primitive_type_char,
13358   ada_primitive_type_float,
13359   ada_primitive_type_double,
13360   ada_primitive_type_void,
13361   ada_primitive_type_long_long,
13362   ada_primitive_type_long_double,
13363   ada_primitive_type_natural,
13364   ada_primitive_type_positive,
13365   ada_primitive_type_system_address,
13366   nr_ada_primitive_types
13367 };
13368
13369 static void
13370 ada_language_arch_info (struct gdbarch *gdbarch,
13371                         struct language_arch_info *lai)
13372 {
13373   const struct builtin_type *builtin = builtin_type (gdbarch);
13374
13375   lai->primitive_type_vector
13376     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13377                               struct type *);
13378
13379   lai->primitive_type_vector [ada_primitive_type_int]
13380     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13381                          0, "integer");
13382   lai->primitive_type_vector [ada_primitive_type_long]
13383     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13384                          0, "long_integer");
13385   lai->primitive_type_vector [ada_primitive_type_short]
13386     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13387                          0, "short_integer");
13388   lai->string_char_type
13389     = lai->primitive_type_vector [ada_primitive_type_char]
13390     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13391   lai->primitive_type_vector [ada_primitive_type_float]
13392     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13393                        "float", NULL);
13394   lai->primitive_type_vector [ada_primitive_type_double]
13395     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13396                        "long_float", NULL);
13397   lai->primitive_type_vector [ada_primitive_type_long_long]
13398     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13399                          0, "long_long_integer");
13400   lai->primitive_type_vector [ada_primitive_type_long_double]
13401     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13402                        "long_long_float", NULL);
13403   lai->primitive_type_vector [ada_primitive_type_natural]
13404     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13405                          0, "natural");
13406   lai->primitive_type_vector [ada_primitive_type_positive]
13407     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13408                          0, "positive");
13409   lai->primitive_type_vector [ada_primitive_type_void]
13410     = builtin->builtin_void;
13411
13412   lai->primitive_type_vector [ada_primitive_type_system_address]
13413     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13414   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13415     = "system__address";
13416
13417   lai->bool_type_symbol = NULL;
13418   lai->bool_type_default = builtin->builtin_bool;
13419 }
13420 \f
13421                                 /* Language vector */
13422
13423 /* Not really used, but needed in the ada_language_defn.  */
13424
13425 static void
13426 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13427 {
13428   ada_emit_char (c, type, stream, quoter, 1);
13429 }
13430
13431 static int
13432 parse (struct parser_state *ps)
13433 {
13434   warnings_issued = 0;
13435   return ada_parse (ps);
13436 }
13437
13438 static const struct exp_descriptor ada_exp_descriptor = {
13439   ada_print_subexp,
13440   ada_operator_length,
13441   ada_operator_check,
13442   ada_op_name,
13443   ada_dump_subexp_body,
13444   ada_evaluate_subexp
13445 };
13446
13447 /* Implement the "la_get_symbol_name_cmp" language_defn method
13448    for Ada.  */
13449
13450 static symbol_name_cmp_ftype
13451 ada_get_symbol_name_cmp (const char *lookup_name)
13452 {
13453   if (should_use_wild_match (lookup_name))
13454     return wild_match;
13455   else
13456     return compare_names;
13457 }
13458
13459 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13460
13461 static struct value *
13462 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13463 {
13464   const struct block *frame_block = NULL;
13465   struct symbol *renaming_sym = NULL;
13466
13467   /* The only case where default_read_var_value is not sufficient
13468      is when VAR is a renaming...  */
13469   if (frame)
13470     frame_block = get_frame_block (frame, NULL);
13471   if (frame_block)
13472     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13473   if (renaming_sym != NULL)
13474     return ada_read_renaming_var_value (renaming_sym, frame_block);
13475
13476   /* This is a typical case where we expect the default_read_var_value
13477      function to work.  */
13478   return default_read_var_value (var, frame);
13479 }
13480
13481 const struct language_defn ada_language_defn = {
13482   "ada",                        /* Language name */
13483   "Ada",
13484   language_ada,
13485   range_check_off,
13486   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13487                                    that's not quite what this means.  */
13488   array_row_major,
13489   macro_expansion_no,
13490   &ada_exp_descriptor,
13491   parse,
13492   ada_error,
13493   resolve,
13494   ada_printchar,                /* Print a character constant */
13495   ada_printstr,                 /* Function to print string constant */
13496   emit_char,                    /* Function to print single char (not used) */
13497   ada_print_type,               /* Print a type using appropriate syntax */
13498   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13499   ada_val_print,                /* Print a value using appropriate syntax */
13500   ada_value_print,              /* Print a top-level value */
13501   ada_read_var_value,           /* la_read_var_value */
13502   NULL,                         /* Language specific skip_trampoline */
13503   NULL,                         /* name_of_this */
13504   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13505   basic_lookup_transparent_type,        /* lookup_transparent_type */
13506   ada_la_decode,                /* Language specific symbol demangler */
13507   NULL,                         /* Language specific
13508                                    class_name_from_physname */
13509   ada_op_print_tab,             /* expression operators for printing */
13510   0,                            /* c-style arrays */
13511   1,                            /* String lower bound */
13512   ada_get_gdb_completer_word_break_characters,
13513   ada_make_symbol_completion_list,
13514   ada_language_arch_info,
13515   ada_print_array_index,
13516   default_pass_by_reference,
13517   c_get_string,
13518   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
13519   ada_iterate_over_symbols,
13520   &ada_varobj_ops,
13521   LANG_MAGIC
13522 };
13523
13524 /* Provide a prototype to silence -Wmissing-prototypes.  */
13525 extern initialize_file_ftype _initialize_ada_language;
13526
13527 /* Command-list for the "set/show ada" prefix command.  */
13528 static struct cmd_list_element *set_ada_list;
13529 static struct cmd_list_element *show_ada_list;
13530
13531 /* Implement the "set ada" prefix command.  */
13532
13533 static void
13534 set_ada_command (char *arg, int from_tty)
13535 {
13536   printf_unfiltered (_(\
13537 "\"set ada\" must be followed by the name of a setting.\n"));
13538   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
13539 }
13540
13541 /* Implement the "show ada" prefix command.  */
13542
13543 static void
13544 show_ada_command (char *args, int from_tty)
13545 {
13546   cmd_show_list (show_ada_list, from_tty, "");
13547 }
13548
13549 static void
13550 initialize_ada_catchpoint_ops (void)
13551 {
13552   struct breakpoint_ops *ops;
13553
13554   initialize_breakpoint_ops ();
13555
13556   ops = &catch_exception_breakpoint_ops;
13557   *ops = bkpt_breakpoint_ops;
13558   ops->dtor = dtor_catch_exception;
13559   ops->allocate_location = allocate_location_catch_exception;
13560   ops->re_set = re_set_catch_exception;
13561   ops->check_status = check_status_catch_exception;
13562   ops->print_it = print_it_catch_exception;
13563   ops->print_one = print_one_catch_exception;
13564   ops->print_mention = print_mention_catch_exception;
13565   ops->print_recreate = print_recreate_catch_exception;
13566
13567   ops = &catch_exception_unhandled_breakpoint_ops;
13568   *ops = bkpt_breakpoint_ops;
13569   ops->dtor = dtor_catch_exception_unhandled;
13570   ops->allocate_location = allocate_location_catch_exception_unhandled;
13571   ops->re_set = re_set_catch_exception_unhandled;
13572   ops->check_status = check_status_catch_exception_unhandled;
13573   ops->print_it = print_it_catch_exception_unhandled;
13574   ops->print_one = print_one_catch_exception_unhandled;
13575   ops->print_mention = print_mention_catch_exception_unhandled;
13576   ops->print_recreate = print_recreate_catch_exception_unhandled;
13577
13578   ops = &catch_assert_breakpoint_ops;
13579   *ops = bkpt_breakpoint_ops;
13580   ops->dtor = dtor_catch_assert;
13581   ops->allocate_location = allocate_location_catch_assert;
13582   ops->re_set = re_set_catch_assert;
13583   ops->check_status = check_status_catch_assert;
13584   ops->print_it = print_it_catch_assert;
13585   ops->print_one = print_one_catch_assert;
13586   ops->print_mention = print_mention_catch_assert;
13587   ops->print_recreate = print_recreate_catch_assert;
13588 }
13589
13590 /* This module's 'new_objfile' observer.  */
13591
13592 static void
13593 ada_new_objfile_observer (struct objfile *objfile)
13594 {
13595   ada_clear_symbol_cache ();
13596 }
13597
13598 /* This module's 'free_objfile' observer.  */
13599
13600 static void
13601 ada_free_objfile_observer (struct objfile *objfile)
13602 {
13603   ada_clear_symbol_cache ();
13604 }
13605
13606 void
13607 _initialize_ada_language (void)
13608 {
13609   add_language (&ada_language_defn);
13610
13611   initialize_ada_catchpoint_ops ();
13612
13613   add_prefix_cmd ("ada", no_class, set_ada_command,
13614                   _("Prefix command for changing Ada-specfic settings"),
13615                   &set_ada_list, "set ada ", 0, &setlist);
13616
13617   add_prefix_cmd ("ada", no_class, show_ada_command,
13618                   _("Generic command for showing Ada-specific settings."),
13619                   &show_ada_list, "show ada ", 0, &showlist);
13620
13621   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13622                            &trust_pad_over_xvs, _("\
13623 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13624 Show whether an optimization trusting PAD types over XVS types is activated"),
13625                            _("\
13626 This is related to the encoding used by the GNAT compiler.  The debugger\n\
13627 should normally trust the contents of PAD types, but certain older versions\n\
13628 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13629 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
13630 work around this bug.  It is always safe to turn this option \"off\", but\n\
13631 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13632 this option to \"off\" unless necessary."),
13633                             NULL, NULL, &set_ada_list, &show_ada_list);
13634
13635   add_catch_command ("exception", _("\
13636 Catch Ada exceptions, when raised.\n\
13637 With an argument, catch only exceptions with the given name."),
13638                      catch_ada_exception_command,
13639                      NULL,
13640                      CATCH_PERMANENT,
13641                      CATCH_TEMPORARY);
13642   add_catch_command ("assert", _("\
13643 Catch failed Ada assertions, when raised.\n\
13644 With an argument, catch only exceptions with the given name."),
13645                      catch_assert_command,
13646                      NULL,
13647                      CATCH_PERMANENT,
13648                      CATCH_TEMPORARY);
13649
13650   varsize_limit = 65536;
13651
13652   add_info ("exceptions", info_exceptions_command,
13653             _("\
13654 List all Ada exception names.\n\
13655 If a regular expression is passed as an argument, only those matching\n\
13656 the regular expression are listed."));
13657
13658   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13659                   _("Set Ada maintenance-related variables."),
13660                   &maint_set_ada_cmdlist, "maintenance set ada ",
13661                   0/*allow-unknown*/, &maintenance_set_cmdlist);
13662
13663   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13664                   _("Show Ada maintenance-related variables"),
13665                   &maint_show_ada_cmdlist, "maintenance show ada ",
13666                   0/*allow-unknown*/, &maintenance_show_cmdlist);
13667
13668   add_setshow_boolean_cmd
13669     ("ignore-descriptive-types", class_maintenance,
13670      &ada_ignore_descriptive_types_p,
13671      _("Set whether descriptive types generated by GNAT should be ignored."),
13672      _("Show whether descriptive types generated by GNAT should be ignored."),
13673      _("\
13674 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13675 DWARF attribute."),
13676      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13677
13678   obstack_init (&symbol_list_obstack);
13679
13680   decoded_names_store = htab_create_alloc
13681     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13682      NULL, xcalloc, xfree);
13683
13684   /* The ada-lang observers.  */
13685   observer_attach_new_objfile (ada_new_objfile_observer);
13686   observer_attach_free_objfile (ada_free_objfile_observer);
13687   observer_attach_inferior_exit (ada_inferior_exit);
13688
13689   /* Setup various context-specific data.  */
13690   ada_inferior_data
13691     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13692   ada_pspace_data_handle
13693     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
13694 }