Remove user_call_depth
[external/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3    Copyright (C) 1992-2017 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20
21 #include "defs.h"
22 #include <ctype.h>
23 #include "demangle.h"
24 #include "gdb_regex.h"
25 #include "frame.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "gdbcmd.h"
29 #include "expression.h"
30 #include "parser-defs.h"
31 #include "language.h"
32 #include "varobj.h"
33 #include "c-lang.h"
34 #include "inferior.h"
35 #include "symfile.h"
36 #include "objfiles.h"
37 #include "breakpoint.h"
38 #include "gdbcore.h"
39 #include "hashtab.h"
40 #include "gdb_obstack.h"
41 #include "ada-lang.h"
42 #include "completer.h"
43 #include <sys/stat.h>
44 #include "ui-out.h"
45 #include "block.h"
46 #include "infcall.h"
47 #include "dictionary.h"
48 #include "annotate.h"
49 #include "valprint.h"
50 #include "source.h"
51 #include "observer.h"
52 #include "vec.h"
53 #include "stack.h"
54 #include "gdb_vecs.h"
55 #include "typeprint.h"
56 #include "namespace.h"
57
58 #include "psymtab.h"
59 #include "value.h"
60 #include "mi/mi-common.h"
61 #include "arch-utils.h"
62 #include "cli/cli-utils.h"
63 #include "common/function-view.h"
64 #include "common/byte-vector.h"
65
66 /* Define whether or not the C operator '/' truncates towards zero for
67    differently signed operands (truncation direction is undefined in C).
68    Copied from valarith.c.  */
69
70 #ifndef TRUNCATION_TOWARDS_ZERO
71 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
72 #endif
73
74 static struct type *desc_base_type (struct type *);
75
76 static struct type *desc_bounds_type (struct type *);
77
78 static struct value *desc_bounds (struct value *);
79
80 static int fat_pntr_bounds_bitpos (struct type *);
81
82 static int fat_pntr_bounds_bitsize (struct type *);
83
84 static struct type *desc_data_target_type (struct type *);
85
86 static struct value *desc_data (struct value *);
87
88 static int fat_pntr_data_bitpos (struct type *);
89
90 static int fat_pntr_data_bitsize (struct type *);
91
92 static struct value *desc_one_bound (struct value *, int, int);
93
94 static int desc_bound_bitpos (struct type *, int, int);
95
96 static int desc_bound_bitsize (struct type *, int, int);
97
98 static struct type *desc_index_type (struct type *, int);
99
100 static int desc_arity (struct type *);
101
102 static int ada_type_match (struct type *, struct type *, int);
103
104 static int ada_args_match (struct symbol *, struct value **, int);
105
106 static int full_match (const char *, const char *);
107
108 static struct value *make_array_descriptor (struct type *, struct value *);
109
110 static void ada_add_block_symbols (struct obstack *,
111                                    const struct block *, const char *,
112                                    domain_enum, struct objfile *, int);
113
114 static void ada_add_all_symbols (struct obstack *, const struct block *,
115                                  const char *, domain_enum, int, int *);
116
117 static int is_nonfunction (struct block_symbol *, int);
118
119 static void add_defn_to_vec (struct obstack *, struct symbol *,
120                              const struct block *);
121
122 static int num_defns_collected (struct obstack *);
123
124 static struct block_symbol *defns_collected (struct obstack *, int);
125
126 static struct value *resolve_subexp (struct expression **, int *, int,
127                                      struct type *);
128
129 static void replace_operator_with_call (struct expression **, int, int, int,
130                                         struct symbol *, const struct block *);
131
132 static int possible_user_operator_p (enum exp_opcode, struct value **);
133
134 static const char *ada_op_name (enum exp_opcode);
135
136 static const char *ada_decoded_op_name (enum exp_opcode);
137
138 static int numeric_type_p (struct type *);
139
140 static int integer_type_p (struct type *);
141
142 static int scalar_type_p (struct type *);
143
144 static int discrete_type_p (struct type *);
145
146 static enum ada_renaming_category parse_old_style_renaming (struct type *,
147                                                             const char **,
148                                                             int *,
149                                                             const char **);
150
151 static struct symbol *find_old_style_renaming_symbol (const char *,
152                                                       const struct block *);
153
154 static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
155                                                 int, int, int *);
156
157 static struct value *evaluate_subexp_type (struct expression *, int *);
158
159 static struct type *ada_find_parallel_type_with_name (struct type *,
160                                                       const char *);
161
162 static int is_dynamic_field (struct type *, int);
163
164 static struct type *to_fixed_variant_branch_type (struct type *,
165                                                   const gdb_byte *,
166                                                   CORE_ADDR, struct value *);
167
168 static struct type *to_fixed_array_type (struct type *, struct value *, int);
169
170 static struct type *to_fixed_range_type (struct type *, struct value *);
171
172 static struct type *to_static_fixed_type (struct type *);
173 static struct type *static_unwrap_type (struct type *type);
174
175 static struct value *unwrap_value (struct value *);
176
177 static struct type *constrained_packed_array_type (struct type *, long *);
178
179 static struct type *decode_constrained_packed_array_type (struct type *);
180
181 static long decode_packed_array_bitsize (struct type *);
182
183 static struct value *decode_constrained_packed_array (struct value *);
184
185 static int ada_is_packed_array_type  (struct type *);
186
187 static int ada_is_unconstrained_packed_array_type (struct type *);
188
189 static struct value *value_subscript_packed (struct value *, int,
190                                              struct value **);
191
192 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
193
194 static struct value *coerce_unspec_val_to_type (struct value *,
195                                                 struct type *);
196
197 static int lesseq_defined_than (struct symbol *, struct symbol *);
198
199 static int equiv_types (struct type *, struct type *);
200
201 static int is_name_suffix (const char *);
202
203 static int advance_wild_match (const char **, const char *, int);
204
205 static int wild_match (const char *, const char *);
206
207 static struct value *ada_coerce_ref (struct value *);
208
209 static LONGEST pos_atr (struct value *);
210
211 static struct value *value_pos_atr (struct type *, struct value *);
212
213 static struct value *value_val_atr (struct type *, struct value *);
214
215 static struct symbol *standard_lookup (const char *, const struct block *,
216                                        domain_enum);
217
218 static struct value *ada_search_struct_field (const char *, struct value *, int,
219                                               struct type *);
220
221 static struct value *ada_value_primitive_field (struct value *, int, int,
222                                                 struct type *);
223
224 static int find_struct_field (const char *, struct type *, int,
225                               struct type **, int *, int *, int *, int *);
226
227 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
228                                                 struct value *);
229
230 static int ada_resolve_function (struct block_symbol *, int,
231                                  struct value **, int, const char *,
232                                  struct type *);
233
234 static int ada_is_direct_array_type (struct type *);
235
236 static void ada_language_arch_info (struct gdbarch *,
237                                     struct language_arch_info *);
238
239 static struct value *ada_index_struct_field (int, struct value *, int,
240                                              struct type *);
241
242 static struct value *assign_aggregate (struct value *, struct value *, 
243                                        struct expression *,
244                                        int *, enum noside);
245
246 static void aggregate_assign_from_choices (struct value *, struct value *, 
247                                            struct expression *,
248                                            int *, LONGEST *, int *,
249                                            int, LONGEST, LONGEST);
250
251 static void aggregate_assign_positional (struct value *, struct value *,
252                                          struct expression *,
253                                          int *, LONGEST *, int *, int,
254                                          LONGEST, LONGEST);
255
256
257 static void aggregate_assign_others (struct value *, struct value *,
258                                      struct expression *,
259                                      int *, LONGEST *, int, LONGEST, LONGEST);
260
261
262 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
263
264
265 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
266                                           int *, enum noside);
267
268 static void ada_forward_operator_length (struct expression *, int, int *,
269                                          int *);
270
271 static struct type *ada_find_any_type (const char *name);
272 \f
273
274 /* The result of a symbol lookup to be stored in our symbol cache.  */
275
276 struct cache_entry
277 {
278   /* The name used to perform the lookup.  */
279   const char *name;
280   /* The namespace used during the lookup.  */
281   domain_enum domain;
282   /* The symbol returned by the lookup, or NULL if no matching symbol
283      was found.  */
284   struct symbol *sym;
285   /* The block where the symbol was found, or NULL if no matching
286      symbol was found.  */
287   const struct block *block;
288   /* A pointer to the next entry with the same hash.  */
289   struct cache_entry *next;
290 };
291
292 /* The Ada symbol cache, used to store the result of Ada-mode symbol
293    lookups in the course of executing the user's commands.
294
295    The cache is implemented using a simple, fixed-sized hash.
296    The size is fixed on the grounds that there are not likely to be
297    all that many symbols looked up during any given session, regardless
298    of the size of the symbol table.  If we decide to go to a resizable
299    table, let's just use the stuff from libiberty instead.  */
300
301 #define HASH_SIZE 1009
302
303 struct ada_symbol_cache
304 {
305   /* An obstack used to store the entries in our cache.  */
306   struct obstack cache_space;
307
308   /* The root of the hash table used to implement our symbol cache.  */
309   struct cache_entry *root[HASH_SIZE];
310 };
311
312 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
313
314 /* Maximum-sized dynamic type.  */
315 static unsigned int varsize_limit;
316
317 static const 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 = (struct ada_inferior_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 = (struct ada_inferior_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 = ((struct ada_pspace_data *)
461           program_space_data (pspace, ada_pspace_data_handle));
462   if (data == NULL)
463     {
464       data = XCNEW (struct ada_pspace_data);
465       set_program_space_data (pspace, ada_pspace_data_handle, data);
466     }
467
468   return data;
469 }
470
471 /* The cleanup callback for this module's per-program-space data.  */
472
473 static void
474 ada_pspace_data_cleanup (struct program_space *pspace, void *data)
475 {
476   struct ada_pspace_data *pspace_data = (struct ada_pspace_data *) data;
477
478   if (pspace_data->sym_cache != NULL)
479     ada_free_symbol_cache (pspace_data->sym_cache);
480   xfree (pspace_data);
481 }
482
483                         /* Utilities */
484
485 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
486    all typedef layers have been peeled.  Otherwise, return TYPE.
487
488    Normally, we really expect a typedef type to only have 1 typedef layer.
489    In other words, we really expect the target type of a typedef type to be
490    a non-typedef type.  This is particularly true for Ada units, because
491    the language does not have a typedef vs not-typedef distinction.
492    In that respect, the Ada compiler has been trying to eliminate as many
493    typedef definitions in the debugging information, since they generally
494    do not bring any extra information (we still use typedef under certain
495    circumstances related mostly to the GNAT encoding).
496
497    Unfortunately, we have seen situations where the debugging information
498    generated by the compiler leads to such multiple typedef layers.  For
499    instance, consider the following example with stabs:
500
501      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
502      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
503
504    This is an error in the debugging information which causes type
505    pck__float_array___XUP to be defined twice, and the second time,
506    it is defined as a typedef of a typedef.
507
508    This is on the fringe of legality as far as debugging information is
509    concerned, and certainly unexpected.  But it is easy to handle these
510    situations correctly, so we can afford to be lenient in this case.  */
511
512 static struct type *
513 ada_typedef_target_type (struct type *type)
514 {
515   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
516     type = TYPE_TARGET_TYPE (type);
517   return type;
518 }
519
520 /* Given DECODED_NAME a string holding a symbol name in its
521    decoded form (ie using the Ada dotted notation), returns
522    its unqualified name.  */
523
524 static const char *
525 ada_unqualified_name (const char *decoded_name)
526 {
527   const char *result;
528   
529   /* If the decoded name starts with '<', it means that the encoded
530      name does not follow standard naming conventions, and thus that
531      it is not your typical Ada symbol name.  Trying to unqualify it
532      is therefore pointless and possibly erroneous.  */
533   if (decoded_name[0] == '<')
534     return decoded_name;
535
536   result = strrchr (decoded_name, '.');
537   if (result != NULL)
538     result++;                   /* Skip the dot...  */
539   else
540     result = decoded_name;
541
542   return result;
543 }
544
545 /* Return a string starting with '<', followed by STR, and '>'.
546    The result is good until the next call.  */
547
548 static char *
549 add_angle_brackets (const char *str)
550 {
551   static char *result = NULL;
552
553   xfree (result);
554   result = xstrprintf ("<%s>", str);
555   return result;
556 }
557
558 static const char *
559 ada_get_gdb_completer_word_break_characters (void)
560 {
561   return ada_completer_word_break_characters;
562 }
563
564 /* Print an array element index using the Ada syntax.  */
565
566 static void
567 ada_print_array_index (struct value *index_value, struct ui_file *stream,
568                        const struct value_print_options *options)
569 {
570   LA_VALUE_PRINT (index_value, stream, options);
571   fprintf_filtered (stream, " => ");
572 }
573
574 /* Assuming VECT points to an array of *SIZE objects of size
575    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
576    updating *SIZE as necessary and returning the (new) array.  */
577
578 void *
579 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
580 {
581   if (*size < min_size)
582     {
583       *size *= 2;
584       if (*size < min_size)
585         *size = min_size;
586       vect = xrealloc (vect, *size * element_size);
587     }
588   return vect;
589 }
590
591 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
592    suffix of FIELD_NAME beginning "___".  */
593
594 static int
595 field_name_match (const char *field_name, const char *target)
596 {
597   int len = strlen (target);
598
599   return
600     (strncmp (field_name, target, len) == 0
601      && (field_name[len] == '\0'
602          || (startswith (field_name + len, "___")
603              && strcmp (field_name + strlen (field_name) - 6,
604                         "___XVN") != 0)));
605 }
606
607
608 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
609    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
610    and return its index.  This function also handles fields whose name
611    have ___ suffixes because the compiler sometimes alters their name
612    by adding such a suffix to represent fields with certain constraints.
613    If the field could not be found, return a negative number if
614    MAYBE_MISSING is set.  Otherwise raise an error.  */
615
616 int
617 ada_get_field_index (const struct type *type, const char *field_name,
618                      int maybe_missing)
619 {
620   int fieldno;
621   struct type *struct_type = check_typedef ((struct type *) type);
622
623   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
624     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
625       return fieldno;
626
627   if (!maybe_missing)
628     error (_("Unable to find field %s in struct %s.  Aborting"),
629            field_name, TYPE_NAME (struct_type));
630
631   return -1;
632 }
633
634 /* The length of the prefix of NAME prior to any "___" suffix.  */
635
636 int
637 ada_name_prefix_len (const char *name)
638 {
639   if (name == NULL)
640     return 0;
641   else
642     {
643       const char *p = strstr (name, "___");
644
645       if (p == NULL)
646         return strlen (name);
647       else
648         return p - name;
649     }
650 }
651
652 /* Return non-zero if SUFFIX is a suffix of STR.
653    Return zero if STR is null.  */
654
655 static int
656 is_suffix (const char *str, const char *suffix)
657 {
658   int len1, len2;
659
660   if (str == NULL)
661     return 0;
662   len1 = strlen (str);
663   len2 = strlen (suffix);
664   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
665 }
666
667 /* The contents of value VAL, treated as a value of type TYPE.  The
668    result is an lval in memory if VAL is.  */
669
670 static struct value *
671 coerce_unspec_val_to_type (struct value *val, struct type *type)
672 {
673   type = ada_check_typedef (type);
674   if (value_type (val) == type)
675     return val;
676   else
677     {
678       struct value *result;
679
680       /* Make sure that the object size is not unreasonable before
681          trying to allocate some memory for it.  */
682       ada_ensure_varsize_limit (type);
683
684       if (value_lazy (val)
685           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
686         result = allocate_value_lazy (type);
687       else
688         {
689           result = allocate_value (type);
690           value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
691         }
692       set_value_component_location (result, val);
693       set_value_bitsize (result, value_bitsize (val));
694       set_value_bitpos (result, value_bitpos (val));
695       set_value_address (result, value_address (val));
696       return result;
697     }
698 }
699
700 static const gdb_byte *
701 cond_offset_host (const gdb_byte *valaddr, long offset)
702 {
703   if (valaddr == NULL)
704     return NULL;
705   else
706     return valaddr + offset;
707 }
708
709 static CORE_ADDR
710 cond_offset_target (CORE_ADDR address, long offset)
711 {
712   if (address == 0)
713     return 0;
714   else
715     return address + offset;
716 }
717
718 /* Issue a warning (as for the definition of warning in utils.c, but
719    with exactly one argument rather than ...), unless the limit on the
720    number of warnings has passed during the evaluation of the current
721    expression.  */
722
723 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
724    provided by "complaint".  */
725 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
726
727 static void
728 lim_warning (const char *format, ...)
729 {
730   va_list args;
731
732   va_start (args, format);
733   warnings_issued += 1;
734   if (warnings_issued <= warning_limit)
735     vwarning (format, args);
736
737   va_end (args);
738 }
739
740 /* Issue an error if the size of an object of type T is unreasonable,
741    i.e. if it would be a bad idea to allocate a value of this type in
742    GDB.  */
743
744 void
745 ada_ensure_varsize_limit (const struct type *type)
746 {
747   if (TYPE_LENGTH (type) > varsize_limit)
748     error (_("object size is larger than varsize-limit"));
749 }
750
751 /* Maximum value of a SIZE-byte signed integer type.  */
752 static LONGEST
753 max_of_size (int size)
754 {
755   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
756
757   return top_bit | (top_bit - 1);
758 }
759
760 /* Minimum value of a SIZE-byte signed integer type.  */
761 static LONGEST
762 min_of_size (int size)
763 {
764   return -max_of_size (size) - 1;
765 }
766
767 /* Maximum value of a SIZE-byte unsigned integer type.  */
768 static ULONGEST
769 umax_of_size (int size)
770 {
771   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
772
773   return top_bit | (top_bit - 1);
774 }
775
776 /* Maximum value of integral type T, as a signed quantity.  */
777 static LONGEST
778 max_of_type (struct type *t)
779 {
780   if (TYPE_UNSIGNED (t))
781     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
782   else
783     return max_of_size (TYPE_LENGTH (t));
784 }
785
786 /* Minimum value of integral type T, as a signed quantity.  */
787 static LONGEST
788 min_of_type (struct type *t)
789 {
790   if (TYPE_UNSIGNED (t)) 
791     return 0;
792   else
793     return min_of_size (TYPE_LENGTH (t));
794 }
795
796 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
797 LONGEST
798 ada_discrete_type_high_bound (struct type *type)
799 {
800   type = resolve_dynamic_type (type, NULL, 0);
801   switch (TYPE_CODE (type))
802     {
803     case TYPE_CODE_RANGE:
804       return TYPE_HIGH_BOUND (type);
805     case TYPE_CODE_ENUM:
806       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
807     case TYPE_CODE_BOOL:
808       return 1;
809     case TYPE_CODE_CHAR:
810     case TYPE_CODE_INT:
811       return max_of_type (type);
812     default:
813       error (_("Unexpected type in ada_discrete_type_high_bound."));
814     }
815 }
816
817 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
818 LONGEST
819 ada_discrete_type_low_bound (struct type *type)
820 {
821   type = resolve_dynamic_type (type, NULL, 0);
822   switch (TYPE_CODE (type))
823     {
824     case TYPE_CODE_RANGE:
825       return TYPE_LOW_BOUND (type);
826     case TYPE_CODE_ENUM:
827       return TYPE_FIELD_ENUMVAL (type, 0);
828     case TYPE_CODE_BOOL:
829       return 0;
830     case TYPE_CODE_CHAR:
831     case TYPE_CODE_INT:
832       return min_of_type (type);
833     default:
834       error (_("Unexpected type in ada_discrete_type_low_bound."));
835     }
836 }
837
838 /* The identity on non-range types.  For range types, the underlying
839    non-range scalar type.  */
840
841 static struct type *
842 get_base_type (struct type *type)
843 {
844   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
845     {
846       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
847         return type;
848       type = TYPE_TARGET_TYPE (type);
849     }
850   return type;
851 }
852
853 /* Return a decoded version of the given VALUE.  This means returning
854    a value whose type is obtained by applying all the GNAT-specific
855    encondings, making the resulting type a static but standard description
856    of the initial type.  */
857
858 struct value *
859 ada_get_decoded_value (struct value *value)
860 {
861   struct type *type = ada_check_typedef (value_type (value));
862
863   if (ada_is_array_descriptor_type (type)
864       || (ada_is_constrained_packed_array_type (type)
865           && TYPE_CODE (type) != TYPE_CODE_PTR))
866     {
867       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
868         value = ada_coerce_to_simple_array_ptr (value);
869       else
870         value = ada_coerce_to_simple_array (value);
871     }
872   else
873     value = ada_to_fixed_value (value);
874
875   return value;
876 }
877
878 /* Same as ada_get_decoded_value, but with the given TYPE.
879    Because there is no associated actual value for this type,
880    the resulting type might be a best-effort approximation in
881    the case of dynamic types.  */
882
883 struct type *
884 ada_get_decoded_type (struct type *type)
885 {
886   type = to_static_fixed_type (type);
887   if (ada_is_constrained_packed_array_type (type))
888     type = ada_coerce_to_simple_array_type (type);
889   return type;
890 }
891
892 \f
893
894                                 /* Language Selection */
895
896 /* If the main program is in Ada, return language_ada, otherwise return LANG
897    (the main program is in Ada iif the adainit symbol is found).  */
898
899 enum language
900 ada_update_initial_language (enum language lang)
901 {
902   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
903                              (struct objfile *) NULL).minsym != NULL)
904     return language_ada;
905
906   return lang;
907 }
908
909 /* If the main procedure is written in Ada, then return its name.
910    The result is good until the next call.  Return NULL if the main
911    procedure doesn't appear to be in Ada.  */
912
913 char *
914 ada_main_name (void)
915 {
916   struct bound_minimal_symbol msym;
917   static char *main_program_name = NULL;
918
919   /* For Ada, the name of the main procedure is stored in a specific
920      string constant, generated by the binder.  Look for that symbol,
921      extract its address, and then read that string.  If we didn't find
922      that string, then most probably the main procedure is not written
923      in Ada.  */
924   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
925
926   if (msym.minsym != NULL)
927     {
928       CORE_ADDR main_program_name_addr;
929       int err_code;
930
931       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
932       if (main_program_name_addr == 0)
933         error (_("Invalid address for Ada main program name."));
934
935       xfree (main_program_name);
936       target_read_string (main_program_name_addr, &main_program_name,
937                           1024, &err_code);
938
939       if (err_code != 0)
940         return NULL;
941       return main_program_name;
942     }
943
944   /* The main procedure doesn't seem to be in Ada.  */
945   return NULL;
946 }
947 \f
948                                 /* Symbols */
949
950 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
951    of NULLs.  */
952
953 const struct ada_opname_map ada_opname_table[] = {
954   {"Oadd", "\"+\"", BINOP_ADD},
955   {"Osubtract", "\"-\"", BINOP_SUB},
956   {"Omultiply", "\"*\"", BINOP_MUL},
957   {"Odivide", "\"/\"", BINOP_DIV},
958   {"Omod", "\"mod\"", BINOP_MOD},
959   {"Orem", "\"rem\"", BINOP_REM},
960   {"Oexpon", "\"**\"", BINOP_EXP},
961   {"Olt", "\"<\"", BINOP_LESS},
962   {"Ole", "\"<=\"", BINOP_LEQ},
963   {"Ogt", "\">\"", BINOP_GTR},
964   {"Oge", "\">=\"", BINOP_GEQ},
965   {"Oeq", "\"=\"", BINOP_EQUAL},
966   {"One", "\"/=\"", BINOP_NOTEQUAL},
967   {"Oand", "\"and\"", BINOP_BITWISE_AND},
968   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
969   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
970   {"Oconcat", "\"&\"", BINOP_CONCAT},
971   {"Oabs", "\"abs\"", UNOP_ABS},
972   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
973   {"Oadd", "\"+\"", UNOP_PLUS},
974   {"Osubtract", "\"-\"", UNOP_NEG},
975   {NULL, NULL}
976 };
977
978 /* The "encoded" form of DECODED, according to GNAT conventions.
979    The result is valid until the next call to ada_encode.  */
980
981 char *
982 ada_encode (const char *decoded)
983 {
984   static char *encoding_buffer = NULL;
985   static size_t encoding_buffer_size = 0;
986   const char *p;
987   int k;
988
989   if (decoded == NULL)
990     return NULL;
991
992   GROW_VECT (encoding_buffer, encoding_buffer_size,
993              2 * strlen (decoded) + 10);
994
995   k = 0;
996   for (p = decoded; *p != '\0'; p += 1)
997     {
998       if (*p == '.')
999         {
1000           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
1001           k += 2;
1002         }
1003       else if (*p == '"')
1004         {
1005           const struct ada_opname_map *mapping;
1006
1007           for (mapping = ada_opname_table;
1008                mapping->encoded != NULL
1009                && !startswith (p, mapping->decoded); mapping += 1)
1010             ;
1011           if (mapping->encoded == NULL)
1012             error (_("invalid Ada operator name: %s"), p);
1013           strcpy (encoding_buffer + k, mapping->encoded);
1014           k += strlen (mapping->encoded);
1015           break;
1016         }
1017       else
1018         {
1019           encoding_buffer[k] = *p;
1020           k += 1;
1021         }
1022     }
1023
1024   encoding_buffer[k] = '\0';
1025   return encoding_buffer;
1026 }
1027
1028 /* Return NAME folded to lower case, or, if surrounded by single
1029    quotes, unfolded, but with the quotes stripped away.  Result good
1030    to next call.  */
1031
1032 char *
1033 ada_fold_name (const char *name)
1034 {
1035   static char *fold_buffer = NULL;
1036   static size_t fold_buffer_size = 0;
1037
1038   int len = strlen (name);
1039   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1040
1041   if (name[0] == '\'')
1042     {
1043       strncpy (fold_buffer, name + 1, len - 2);
1044       fold_buffer[len - 2] = '\000';
1045     }
1046   else
1047     {
1048       int i;
1049
1050       for (i = 0; i <= len; i += 1)
1051         fold_buffer[i] = tolower (name[i]);
1052     }
1053
1054   return fold_buffer;
1055 }
1056
1057 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1058
1059 static int
1060 is_lower_alphanum (const char c)
1061 {
1062   return (isdigit (c) || (isalpha (c) && islower (c)));
1063 }
1064
1065 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1066    This function saves in LEN the length of that same symbol name but
1067    without either of these suffixes:
1068      . .{DIGIT}+
1069      . ${DIGIT}+
1070      . ___{DIGIT}+
1071      . __{DIGIT}+.
1072
1073    These are suffixes introduced by the compiler for entities such as
1074    nested subprogram for instance, in order to avoid name clashes.
1075    They do not serve any purpose for the debugger.  */
1076
1077 static void
1078 ada_remove_trailing_digits (const char *encoded, int *len)
1079 {
1080   if (*len > 1 && isdigit (encoded[*len - 1]))
1081     {
1082       int i = *len - 2;
1083
1084       while (i > 0 && isdigit (encoded[i]))
1085         i--;
1086       if (i >= 0 && encoded[i] == '.')
1087         *len = i;
1088       else if (i >= 0 && encoded[i] == '$')
1089         *len = i;
1090       else if (i >= 2 && startswith (encoded + i - 2, "___"))
1091         *len = i - 2;
1092       else if (i >= 1 && startswith (encoded + i - 1, "__"))
1093         *len = i - 1;
1094     }
1095 }
1096
1097 /* Remove the suffix introduced by the compiler for protected object
1098    subprograms.  */
1099
1100 static void
1101 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1102 {
1103   /* Remove trailing N.  */
1104
1105   /* Protected entry subprograms are broken into two
1106      separate subprograms: The first one is unprotected, and has
1107      a 'N' suffix; the second is the protected version, and has
1108      the 'P' suffix.  The second calls the first one after handling
1109      the protection.  Since the P subprograms are internally generated,
1110      we leave these names undecoded, giving the user a clue that this
1111      entity is internal.  */
1112
1113   if (*len > 1
1114       && encoded[*len - 1] == 'N'
1115       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1116     *len = *len - 1;
1117 }
1118
1119 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1120
1121 static void
1122 ada_remove_Xbn_suffix (const char *encoded, int *len)
1123 {
1124   int i = *len - 1;
1125
1126   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1127     i--;
1128
1129   if (encoded[i] != 'X')
1130     return;
1131
1132   if (i == 0)
1133     return;
1134
1135   if (isalnum (encoded[i-1]))
1136     *len = i;
1137 }
1138
1139 /* If ENCODED follows the GNAT entity encoding conventions, then return
1140    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1141    replaced by ENCODED.
1142
1143    The resulting string is valid until the next call of ada_decode.
1144    If the string is unchanged by decoding, the original string pointer
1145    is returned.  */
1146
1147 const char *
1148 ada_decode (const char *encoded)
1149 {
1150   int i, j;
1151   int len0;
1152   const char *p;
1153   char *decoded;
1154   int at_start_name;
1155   static char *decoding_buffer = NULL;
1156   static size_t decoding_buffer_size = 0;
1157
1158   /* The name of the Ada main procedure starts with "_ada_".
1159      This prefix is not part of the decoded name, so skip this part
1160      if we see this prefix.  */
1161   if (startswith (encoded, "_ada_"))
1162     encoded += 5;
1163
1164   /* If the name starts with '_', then it is not a properly encoded
1165      name, so do not attempt to decode it.  Similarly, if the name
1166      starts with '<', the name should not be decoded.  */
1167   if (encoded[0] == '_' || encoded[0] == '<')
1168     goto Suppress;
1169
1170   len0 = strlen (encoded);
1171
1172   ada_remove_trailing_digits (encoded, &len0);
1173   ada_remove_po_subprogram_suffix (encoded, &len0);
1174
1175   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1176      the suffix is located before the current "end" of ENCODED.  We want
1177      to avoid re-matching parts of ENCODED that have previously been
1178      marked as discarded (by decrementing LEN0).  */
1179   p = strstr (encoded, "___");
1180   if (p != NULL && p - encoded < len0 - 3)
1181     {
1182       if (p[3] == 'X')
1183         len0 = p - encoded;
1184       else
1185         goto Suppress;
1186     }
1187
1188   /* Remove any trailing TKB suffix.  It tells us that this symbol
1189      is for the body of a task, but that information does not actually
1190      appear in the decoded name.  */
1191
1192   if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
1193     len0 -= 3;
1194
1195   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1196      from the TKB suffix because it is used for non-anonymous task
1197      bodies.  */
1198
1199   if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
1200     len0 -= 2;
1201
1202   /* Remove trailing "B" suffixes.  */
1203   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1204
1205   if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
1206     len0 -= 1;
1207
1208   /* Make decoded big enough for possible expansion by operator name.  */
1209
1210   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1211   decoded = decoding_buffer;
1212
1213   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1214
1215   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1216     {
1217       i = len0 - 2;
1218       while ((i >= 0 && isdigit (encoded[i]))
1219              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1220         i -= 1;
1221       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1222         len0 = i - 1;
1223       else if (encoded[i] == '$')
1224         len0 = i;
1225     }
1226
1227   /* The first few characters that are not alphabetic are not part
1228      of any encoding we use, so we can copy them over verbatim.  */
1229
1230   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1231     decoded[j] = encoded[i];
1232
1233   at_start_name = 1;
1234   while (i < len0)
1235     {
1236       /* Is this a symbol function?  */
1237       if (at_start_name && encoded[i] == 'O')
1238         {
1239           int k;
1240
1241           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1242             {
1243               int op_len = strlen (ada_opname_table[k].encoded);
1244               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1245                             op_len - 1) == 0)
1246                   && !isalnum (encoded[i + op_len]))
1247                 {
1248                   strcpy (decoded + j, ada_opname_table[k].decoded);
1249                   at_start_name = 0;
1250                   i += op_len;
1251                   j += strlen (ada_opname_table[k].decoded);
1252                   break;
1253                 }
1254             }
1255           if (ada_opname_table[k].encoded != NULL)
1256             continue;
1257         }
1258       at_start_name = 0;
1259
1260       /* Replace "TK__" with "__", which will eventually be translated
1261          into "." (just below).  */
1262
1263       if (i < len0 - 4 && startswith (encoded + i, "TK__"))
1264         i += 2;
1265
1266       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1267          be translated into "." (just below).  These are internal names
1268          generated for anonymous blocks inside which our symbol is nested.  */
1269
1270       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1271           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1272           && isdigit (encoded [i+4]))
1273         {
1274           int k = i + 5;
1275           
1276           while (k < len0 && isdigit (encoded[k]))
1277             k++;  /* Skip any extra digit.  */
1278
1279           /* Double-check that the "__B_{DIGITS}+" sequence we found
1280              is indeed followed by "__".  */
1281           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1282             i = k;
1283         }
1284
1285       /* Remove _E{DIGITS}+[sb] */
1286
1287       /* Just as for protected object subprograms, there are 2 categories
1288          of subprograms created by the compiler for each entry.  The first
1289          one implements the actual entry code, and has a suffix following
1290          the convention above; the second one implements the barrier and
1291          uses the same convention as above, except that the 'E' is replaced
1292          by a 'B'.
1293
1294          Just as above, we do not decode the name of barrier functions
1295          to give the user a clue that the code he is debugging has been
1296          internally generated.  */
1297
1298       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1299           && isdigit (encoded[i+2]))
1300         {
1301           int k = i + 3;
1302
1303           while (k < len0 && isdigit (encoded[k]))
1304             k++;
1305
1306           if (k < len0
1307               && (encoded[k] == 'b' || encoded[k] == 's'))
1308             {
1309               k++;
1310               /* Just as an extra precaution, make sure that if this
1311                  suffix is followed by anything else, it is a '_'.
1312                  Otherwise, we matched this sequence by accident.  */
1313               if (k == len0
1314                   || (k < len0 && encoded[k] == '_'))
1315                 i = k;
1316             }
1317         }
1318
1319       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1320          the GNAT front-end in protected object subprograms.  */
1321
1322       if (i < len0 + 3
1323           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1324         {
1325           /* Backtrack a bit up until we reach either the begining of
1326              the encoded name, or "__".  Make sure that we only find
1327              digits or lowercase characters.  */
1328           const char *ptr = encoded + i - 1;
1329
1330           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1331             ptr--;
1332           if (ptr < encoded
1333               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1334             i++;
1335         }
1336
1337       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1338         {
1339           /* This is a X[bn]* sequence not separated from the previous
1340              part of the name with a non-alpha-numeric character (in other
1341              words, immediately following an alpha-numeric character), then
1342              verify that it is placed at the end of the encoded name.  If
1343              not, then the encoding is not valid and we should abort the
1344              decoding.  Otherwise, just skip it, it is used in body-nested
1345              package names.  */
1346           do
1347             i += 1;
1348           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1349           if (i < len0)
1350             goto Suppress;
1351         }
1352       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1353         {
1354          /* Replace '__' by '.'.  */
1355           decoded[j] = '.';
1356           at_start_name = 1;
1357           i += 2;
1358           j += 1;
1359         }
1360       else
1361         {
1362           /* It's a character part of the decoded name, so just copy it
1363              over.  */
1364           decoded[j] = encoded[i];
1365           i += 1;
1366           j += 1;
1367         }
1368     }
1369   decoded[j] = '\000';
1370
1371   /* Decoded names should never contain any uppercase character.
1372      Double-check this, and abort the decoding if we find one.  */
1373
1374   for (i = 0; decoded[i] != '\0'; i += 1)
1375     if (isupper (decoded[i]) || decoded[i] == ' ')
1376       goto Suppress;
1377
1378   if (strcmp (decoded, encoded) == 0)
1379     return encoded;
1380   else
1381     return decoded;
1382
1383 Suppress:
1384   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1385   decoded = decoding_buffer;
1386   if (encoded[0] == '<')
1387     strcpy (decoded, encoded);
1388   else
1389     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1390   return decoded;
1391
1392 }
1393
1394 /* Table for keeping permanent unique copies of decoded names.  Once
1395    allocated, names in this table are never released.  While this is a
1396    storage leak, it should not be significant unless there are massive
1397    changes in the set of decoded names in successive versions of a 
1398    symbol table loaded during a single session.  */
1399 static struct htab *decoded_names_store;
1400
1401 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1402    in the language-specific part of GSYMBOL, if it has not been
1403    previously computed.  Tries to save the decoded name in the same
1404    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1405    in any case, the decoded symbol has a lifetime at least that of
1406    GSYMBOL).
1407    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1408    const, but nevertheless modified to a semantically equivalent form
1409    when a decoded name is cached in it.  */
1410
1411 const char *
1412 ada_decode_symbol (const struct general_symbol_info *arg)
1413 {
1414   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1415   const char **resultp =
1416     &gsymbol->language_specific.demangled_name;
1417
1418   if (!gsymbol->ada_mangled)
1419     {
1420       const char *decoded = ada_decode (gsymbol->name);
1421       struct obstack *obstack = gsymbol->language_specific.obstack;
1422
1423       gsymbol->ada_mangled = 1;
1424
1425       if (obstack != NULL)
1426         *resultp
1427           = (const char *) obstack_copy0 (obstack, decoded, strlen (decoded));
1428       else
1429         {
1430           /* Sometimes, we can't find a corresponding objfile, in
1431              which case, we put the result on the heap.  Since we only
1432              decode when needed, we hope this usually does not cause a
1433              significant memory leak (FIXME).  */
1434
1435           char **slot = (char **) htab_find_slot (decoded_names_store,
1436                                                   decoded, INSERT);
1437
1438           if (*slot == NULL)
1439             *slot = xstrdup (decoded);
1440           *resultp = *slot;
1441         }
1442     }
1443
1444   return *resultp;
1445 }
1446
1447 static char *
1448 ada_la_decode (const char *encoded, int options)
1449 {
1450   return xstrdup (ada_decode (encoded));
1451 }
1452
1453 /* Implement la_sniff_from_mangled_name for Ada.  */
1454
1455 static int
1456 ada_sniff_from_mangled_name (const char *mangled, char **out)
1457 {
1458   const char *demangled = ada_decode (mangled);
1459
1460   *out = NULL;
1461
1462   if (demangled != mangled && demangled != NULL && demangled[0] != '<')
1463     {
1464       /* Set the gsymbol language to Ada, but still return 0.
1465          Two reasons for that:
1466
1467          1. For Ada, we prefer computing the symbol's decoded name
1468          on the fly rather than pre-compute it, in order to save
1469          memory (Ada projects are typically very large).
1470
1471          2. There are some areas in the definition of the GNAT
1472          encoding where, with a bit of bad luck, we might be able
1473          to decode a non-Ada symbol, generating an incorrect
1474          demangled name (Eg: names ending with "TB" for instance
1475          are identified as task bodies and so stripped from
1476          the decoded name returned).
1477
1478          Returning 1, here, but not setting *DEMANGLED, helps us get a
1479          little bit of the best of both worlds.  Because we're last,
1480          we should not affect any of the other languages that were
1481          able to demangle the symbol before us; we get to correctly
1482          tag Ada symbols as such; and even if we incorrectly tagged a
1483          non-Ada symbol, which should be rare, any routing through the
1484          Ada language should be transparent (Ada tries to behave much
1485          like C/C++ with non-Ada symbols).  */
1486       return 1;
1487     }
1488
1489   return 0;
1490 }
1491
1492 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1493    suffixes that encode debugging information or leading _ada_ on
1494    SYM_NAME (see is_name_suffix commentary for the debugging
1495    information that is ignored).  If WILD, then NAME need only match a
1496    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1497    either argument is NULL.  */
1498
1499 static int
1500 match_name (const char *sym_name, const char *name, int wild)
1501 {
1502   if (sym_name == NULL || name == NULL)
1503     return 0;
1504   else if (wild)
1505     return wild_match (sym_name, name) == 0;
1506   else
1507     {
1508       int len_name = strlen (name);
1509
1510       return (strncmp (sym_name, name, len_name) == 0
1511               && is_name_suffix (sym_name + len_name))
1512         || (startswith (sym_name, "_ada_")
1513             && strncmp (sym_name + 5, name, len_name) == 0
1514             && is_name_suffix (sym_name + len_name + 5));
1515     }
1516 }
1517 \f
1518
1519                                 /* Arrays */
1520
1521 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1522    generated by the GNAT compiler to describe the index type used
1523    for each dimension of an array, check whether it follows the latest
1524    known encoding.  If not, fix it up to conform to the latest encoding.
1525    Otherwise, do nothing.  This function also does nothing if
1526    INDEX_DESC_TYPE is NULL.
1527
1528    The GNAT encoding used to describle the array index type evolved a bit.
1529    Initially, the information would be provided through the name of each
1530    field of the structure type only, while the type of these fields was
1531    described as unspecified and irrelevant.  The debugger was then expected
1532    to perform a global type lookup using the name of that field in order
1533    to get access to the full index type description.  Because these global
1534    lookups can be very expensive, the encoding was later enhanced to make
1535    the global lookup unnecessary by defining the field type as being
1536    the full index type description.
1537
1538    The purpose of this routine is to allow us to support older versions
1539    of the compiler by detecting the use of the older encoding, and by
1540    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1541    we essentially replace each field's meaningless type by the associated
1542    index subtype).  */
1543
1544 void
1545 ada_fixup_array_indexes_type (struct type *index_desc_type)
1546 {
1547   int i;
1548
1549   if (index_desc_type == NULL)
1550     return;
1551   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1552
1553   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1554      to check one field only, no need to check them all).  If not, return
1555      now.
1556
1557      If our INDEX_DESC_TYPE was generated using the older encoding,
1558      the field type should be a meaningless integer type whose name
1559      is not equal to the field name.  */
1560   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1561       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1562                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1563     return;
1564
1565   /* Fixup each field of INDEX_DESC_TYPE.  */
1566   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1567    {
1568      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1569      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1570
1571      if (raw_type)
1572        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1573    }
1574 }
1575
1576 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1577
1578 static const char *bound_name[] = {
1579   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1580   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1581 };
1582
1583 /* Maximum number of array dimensions we are prepared to handle.  */
1584
1585 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1586
1587
1588 /* The desc_* routines return primitive portions of array descriptors
1589    (fat pointers).  */
1590
1591 /* The descriptor or array type, if any, indicated by TYPE; removes
1592    level of indirection, if needed.  */
1593
1594 static struct type *
1595 desc_base_type (struct type *type)
1596 {
1597   if (type == NULL)
1598     return NULL;
1599   type = ada_check_typedef (type);
1600   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1601     type = ada_typedef_target_type (type);
1602
1603   if (type != NULL
1604       && (TYPE_CODE (type) == TYPE_CODE_PTR
1605           || TYPE_CODE (type) == TYPE_CODE_REF))
1606     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1607   else
1608     return type;
1609 }
1610
1611 /* True iff TYPE indicates a "thin" array pointer type.  */
1612
1613 static int
1614 is_thin_pntr (struct type *type)
1615 {
1616   return
1617     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1618     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1619 }
1620
1621 /* The descriptor type for thin pointer type TYPE.  */
1622
1623 static struct type *
1624 thin_descriptor_type (struct type *type)
1625 {
1626   struct type *base_type = desc_base_type (type);
1627
1628   if (base_type == NULL)
1629     return NULL;
1630   if (is_suffix (ada_type_name (base_type), "___XVE"))
1631     return base_type;
1632   else
1633     {
1634       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1635
1636       if (alt_type == NULL)
1637         return base_type;
1638       else
1639         return alt_type;
1640     }
1641 }
1642
1643 /* A pointer to the array data for thin-pointer value VAL.  */
1644
1645 static struct value *
1646 thin_data_pntr (struct value *val)
1647 {
1648   struct type *type = ada_check_typedef (value_type (val));
1649   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1650
1651   data_type = lookup_pointer_type (data_type);
1652
1653   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1654     return value_cast (data_type, value_copy (val));
1655   else
1656     return value_from_longest (data_type, value_address (val));
1657 }
1658
1659 /* True iff TYPE indicates a "thick" array pointer type.  */
1660
1661 static int
1662 is_thick_pntr (struct type *type)
1663 {
1664   type = desc_base_type (type);
1665   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1666           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1667 }
1668
1669 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1670    pointer to one, the type of its bounds data; otherwise, NULL.  */
1671
1672 static struct type *
1673 desc_bounds_type (struct type *type)
1674 {
1675   struct type *r;
1676
1677   type = desc_base_type (type);
1678
1679   if (type == NULL)
1680     return NULL;
1681   else if (is_thin_pntr (type))
1682     {
1683       type = thin_descriptor_type (type);
1684       if (type == NULL)
1685         return NULL;
1686       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1687       if (r != NULL)
1688         return ada_check_typedef (r);
1689     }
1690   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1691     {
1692       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1693       if (r != NULL)
1694         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1695     }
1696   return NULL;
1697 }
1698
1699 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1700    one, a pointer to its bounds data.   Otherwise NULL.  */
1701
1702 static struct value *
1703 desc_bounds (struct value *arr)
1704 {
1705   struct type *type = ada_check_typedef (value_type (arr));
1706
1707   if (is_thin_pntr (type))
1708     {
1709       struct type *bounds_type =
1710         desc_bounds_type (thin_descriptor_type (type));
1711       LONGEST addr;
1712
1713       if (bounds_type == NULL)
1714         error (_("Bad GNAT array descriptor"));
1715
1716       /* NOTE: The following calculation is not really kosher, but
1717          since desc_type is an XVE-encoded type (and shouldn't be),
1718          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1719       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1720         addr = value_as_long (arr);
1721       else
1722         addr = value_address (arr);
1723
1724       return
1725         value_from_longest (lookup_pointer_type (bounds_type),
1726                             addr - TYPE_LENGTH (bounds_type));
1727     }
1728
1729   else if (is_thick_pntr (type))
1730     {
1731       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1732                                                _("Bad GNAT array descriptor"));
1733       struct type *p_bounds_type = value_type (p_bounds);
1734
1735       if (p_bounds_type
1736           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1737         {
1738           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1739
1740           if (TYPE_STUB (target_type))
1741             p_bounds = value_cast (lookup_pointer_type
1742                                    (ada_check_typedef (target_type)),
1743                                    p_bounds);
1744         }
1745       else
1746         error (_("Bad GNAT array descriptor"));
1747
1748       return p_bounds;
1749     }
1750   else
1751     return NULL;
1752 }
1753
1754 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1755    position of the field containing the address of the bounds data.  */
1756
1757 static int
1758 fat_pntr_bounds_bitpos (struct type *type)
1759 {
1760   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1761 }
1762
1763 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1764    size of the field containing the address of the bounds data.  */
1765
1766 static int
1767 fat_pntr_bounds_bitsize (struct type *type)
1768 {
1769   type = desc_base_type (type);
1770
1771   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1772     return TYPE_FIELD_BITSIZE (type, 1);
1773   else
1774     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1775 }
1776
1777 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1778    pointer to one, the type of its array data (a array-with-no-bounds type);
1779    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1780    data.  */
1781
1782 static struct type *
1783 desc_data_target_type (struct type *type)
1784 {
1785   type = desc_base_type (type);
1786
1787   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1788   if (is_thin_pntr (type))
1789     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1790   else if (is_thick_pntr (type))
1791     {
1792       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1793
1794       if (data_type
1795           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1796         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1797     }
1798
1799   return NULL;
1800 }
1801
1802 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1803    its array data.  */
1804
1805 static struct value *
1806 desc_data (struct value *arr)
1807 {
1808   struct type *type = value_type (arr);
1809
1810   if (is_thin_pntr (type))
1811     return thin_data_pntr (arr);
1812   else if (is_thick_pntr (type))
1813     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1814                              _("Bad GNAT array descriptor"));
1815   else
1816     return NULL;
1817 }
1818
1819
1820 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1821    position of the field containing the address of the data.  */
1822
1823 static int
1824 fat_pntr_data_bitpos (struct type *type)
1825 {
1826   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1827 }
1828
1829 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1830    size of the field containing the address of the data.  */
1831
1832 static int
1833 fat_pntr_data_bitsize (struct type *type)
1834 {
1835   type = desc_base_type (type);
1836
1837   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1838     return TYPE_FIELD_BITSIZE (type, 0);
1839   else
1840     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1841 }
1842
1843 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1844    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1845    bound, if WHICH is 1.  The first bound is I=1.  */
1846
1847 static struct value *
1848 desc_one_bound (struct value *bounds, int i, int which)
1849 {
1850   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1851                            _("Bad GNAT array descriptor bounds"));
1852 }
1853
1854 /* If BOUNDS is an array-bounds structure type, return the bit position
1855    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1856    bound, if WHICH is 1.  The first bound is I=1.  */
1857
1858 static int
1859 desc_bound_bitpos (struct type *type, int i, int which)
1860 {
1861   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1862 }
1863
1864 /* If BOUNDS is an array-bounds structure type, return the bit field size
1865    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1866    bound, if WHICH is 1.  The first bound is I=1.  */
1867
1868 static int
1869 desc_bound_bitsize (struct type *type, int i, int which)
1870 {
1871   type = desc_base_type (type);
1872
1873   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1874     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1875   else
1876     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1877 }
1878
1879 /* If TYPE is the type of an array-bounds structure, the type of its
1880    Ith bound (numbering from 1).  Otherwise, NULL.  */
1881
1882 static struct type *
1883 desc_index_type (struct type *type, int i)
1884 {
1885   type = desc_base_type (type);
1886
1887   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1888     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1889   else
1890     return NULL;
1891 }
1892
1893 /* The number of index positions in the array-bounds type TYPE.
1894    Return 0 if TYPE is NULL.  */
1895
1896 static int
1897 desc_arity (struct type *type)
1898 {
1899   type = desc_base_type (type);
1900
1901   if (type != NULL)
1902     return TYPE_NFIELDS (type) / 2;
1903   return 0;
1904 }
1905
1906 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1907    an array descriptor type (representing an unconstrained array
1908    type).  */
1909
1910 static int
1911 ada_is_direct_array_type (struct type *type)
1912 {
1913   if (type == NULL)
1914     return 0;
1915   type = ada_check_typedef (type);
1916   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1917           || ada_is_array_descriptor_type (type));
1918 }
1919
1920 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1921  * to one.  */
1922
1923 static int
1924 ada_is_array_type (struct type *type)
1925 {
1926   while (type != NULL 
1927          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1928              || TYPE_CODE (type) == TYPE_CODE_REF))
1929     type = TYPE_TARGET_TYPE (type);
1930   return ada_is_direct_array_type (type);
1931 }
1932
1933 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1934
1935 int
1936 ada_is_simple_array_type (struct type *type)
1937 {
1938   if (type == NULL)
1939     return 0;
1940   type = ada_check_typedef (type);
1941   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1942           || (TYPE_CODE (type) == TYPE_CODE_PTR
1943               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1944                  == TYPE_CODE_ARRAY));
1945 }
1946
1947 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1948
1949 int
1950 ada_is_array_descriptor_type (struct type *type)
1951 {
1952   struct type *data_type = desc_data_target_type (type);
1953
1954   if (type == NULL)
1955     return 0;
1956   type = ada_check_typedef (type);
1957   return (data_type != NULL
1958           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1959           && desc_arity (desc_bounds_type (type)) > 0);
1960 }
1961
1962 /* Non-zero iff type is a partially mal-formed GNAT array
1963    descriptor.  FIXME: This is to compensate for some problems with
1964    debugging output from GNAT.  Re-examine periodically to see if it
1965    is still needed.  */
1966
1967 int
1968 ada_is_bogus_array_descriptor (struct type *type)
1969 {
1970   return
1971     type != NULL
1972     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1973     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1974         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1975     && !ada_is_array_descriptor_type (type);
1976 }
1977
1978
1979 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1980    (fat pointer) returns the type of the array data described---specifically,
1981    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1982    in from the descriptor; otherwise, they are left unspecified.  If
1983    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1984    returns NULL.  The result is simply the type of ARR if ARR is not
1985    a descriptor.  */
1986 struct type *
1987 ada_type_of_array (struct value *arr, int bounds)
1988 {
1989   if (ada_is_constrained_packed_array_type (value_type (arr)))
1990     return decode_constrained_packed_array_type (value_type (arr));
1991
1992   if (!ada_is_array_descriptor_type (value_type (arr)))
1993     return value_type (arr);
1994
1995   if (!bounds)
1996     {
1997       struct type *array_type =
1998         ada_check_typedef (desc_data_target_type (value_type (arr)));
1999
2000       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
2001         TYPE_FIELD_BITSIZE (array_type, 0) =
2002           decode_packed_array_bitsize (value_type (arr));
2003       
2004       return array_type;
2005     }
2006   else
2007     {
2008       struct type *elt_type;
2009       int arity;
2010       struct value *descriptor;
2011
2012       elt_type = ada_array_element_type (value_type (arr), -1);
2013       arity = ada_array_arity (value_type (arr));
2014
2015       if (elt_type == NULL || arity == 0)
2016         return ada_check_typedef (value_type (arr));
2017
2018       descriptor = desc_bounds (arr);
2019       if (value_as_long (descriptor) == 0)
2020         return NULL;
2021       while (arity > 0)
2022         {
2023           struct type *range_type = alloc_type_copy (value_type (arr));
2024           struct type *array_type = alloc_type_copy (value_type (arr));
2025           struct value *low = desc_one_bound (descriptor, arity, 0);
2026           struct value *high = desc_one_bound (descriptor, arity, 1);
2027
2028           arity -= 1;
2029           create_static_range_type (range_type, value_type (low),
2030                                     longest_to_int (value_as_long (low)),
2031                                     longest_to_int (value_as_long (high)));
2032           elt_type = create_array_type (array_type, elt_type, range_type);
2033
2034           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
2035             {
2036               /* We need to store the element packed bitsize, as well as
2037                  recompute the array size, because it was previously
2038                  computed based on the unpacked element size.  */
2039               LONGEST lo = value_as_long (low);
2040               LONGEST hi = value_as_long (high);
2041
2042               TYPE_FIELD_BITSIZE (elt_type, 0) =
2043                 decode_packed_array_bitsize (value_type (arr));
2044               /* If the array has no element, then the size is already
2045                  zero, and does not need to be recomputed.  */
2046               if (lo < hi)
2047                 {
2048                   int array_bitsize =
2049                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2050
2051                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2052                 }
2053             }
2054         }
2055
2056       return lookup_pointer_type (elt_type);
2057     }
2058 }
2059
2060 /* If ARR does not represent an array, returns ARR unchanged.
2061    Otherwise, returns either a standard GDB array with bounds set
2062    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2063    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2064
2065 struct value *
2066 ada_coerce_to_simple_array_ptr (struct value *arr)
2067 {
2068   if (ada_is_array_descriptor_type (value_type (arr)))
2069     {
2070       struct type *arrType = ada_type_of_array (arr, 1);
2071
2072       if (arrType == NULL)
2073         return NULL;
2074       return value_cast (arrType, value_copy (desc_data (arr)));
2075     }
2076   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2077     return decode_constrained_packed_array (arr);
2078   else
2079     return arr;
2080 }
2081
2082 /* If ARR does not represent an array, returns ARR unchanged.
2083    Otherwise, returns a standard GDB array describing ARR (which may
2084    be ARR itself if it already is in the proper form).  */
2085
2086 struct value *
2087 ada_coerce_to_simple_array (struct value *arr)
2088 {
2089   if (ada_is_array_descriptor_type (value_type (arr)))
2090     {
2091       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2092
2093       if (arrVal == NULL)
2094         error (_("Bounds unavailable for null array pointer."));
2095       ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
2096       return value_ind (arrVal);
2097     }
2098   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2099     return decode_constrained_packed_array (arr);
2100   else
2101     return arr;
2102 }
2103
2104 /* If TYPE represents a GNAT array type, return it translated to an
2105    ordinary GDB array type (possibly with BITSIZE fields indicating
2106    packing).  For other types, is the identity.  */
2107
2108 struct type *
2109 ada_coerce_to_simple_array_type (struct type *type)
2110 {
2111   if (ada_is_constrained_packed_array_type (type))
2112     return decode_constrained_packed_array_type (type);
2113
2114   if (ada_is_array_descriptor_type (type))
2115     return ada_check_typedef (desc_data_target_type (type));
2116
2117   return type;
2118 }
2119
2120 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2121
2122 static int
2123 ada_is_packed_array_type  (struct type *type)
2124 {
2125   if (type == NULL)
2126     return 0;
2127   type = desc_base_type (type);
2128   type = ada_check_typedef (type);
2129   return
2130     ada_type_name (type) != NULL
2131     && strstr (ada_type_name (type), "___XP") != NULL;
2132 }
2133
2134 /* Non-zero iff TYPE represents a standard GNAT constrained
2135    packed-array type.  */
2136
2137 int
2138 ada_is_constrained_packed_array_type (struct type *type)
2139 {
2140   return ada_is_packed_array_type (type)
2141     && !ada_is_array_descriptor_type (type);
2142 }
2143
2144 /* Non-zero iff TYPE represents an array descriptor for a
2145    unconstrained packed-array type.  */
2146
2147 static int
2148 ada_is_unconstrained_packed_array_type (struct type *type)
2149 {
2150   return ada_is_packed_array_type (type)
2151     && ada_is_array_descriptor_type (type);
2152 }
2153
2154 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2155    return the size of its elements in bits.  */
2156
2157 static long
2158 decode_packed_array_bitsize (struct type *type)
2159 {
2160   const char *raw_name;
2161   const char *tail;
2162   long bits;
2163
2164   /* Access to arrays implemented as fat pointers are encoded as a typedef
2165      of the fat pointer type.  We need the name of the fat pointer type
2166      to do the decoding, so strip the typedef layer.  */
2167   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2168     type = ada_typedef_target_type (type);
2169
2170   raw_name = ada_type_name (ada_check_typedef (type));
2171   if (!raw_name)
2172     raw_name = ada_type_name (desc_base_type (type));
2173
2174   if (!raw_name)
2175     return 0;
2176
2177   tail = strstr (raw_name, "___XP");
2178   gdb_assert (tail != NULL);
2179
2180   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2181     {
2182       lim_warning
2183         (_("could not understand bit size information on packed array"));
2184       return 0;
2185     }
2186
2187   return bits;
2188 }
2189
2190 /* Given that TYPE is a standard GDB array type with all bounds filled
2191    in, and that the element size of its ultimate scalar constituents
2192    (that is, either its elements, or, if it is an array of arrays, its
2193    elements' elements, etc.) is *ELT_BITS, return an identical type,
2194    but with the bit sizes of its elements (and those of any
2195    constituent arrays) recorded in the BITSIZE components of its
2196    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2197    in bits.
2198
2199    Note that, for arrays whose index type has an XA encoding where
2200    a bound references a record discriminant, getting that discriminant,
2201    and therefore the actual value of that bound, is not possible
2202    because none of the given parameters gives us access to the record.
2203    This function assumes that it is OK in the context where it is being
2204    used to return an array whose bounds are still dynamic and where
2205    the length is arbitrary.  */
2206
2207 static struct type *
2208 constrained_packed_array_type (struct type *type, long *elt_bits)
2209 {
2210   struct type *new_elt_type;
2211   struct type *new_type;
2212   struct type *index_type_desc;
2213   struct type *index_type;
2214   LONGEST low_bound, high_bound;
2215
2216   type = ada_check_typedef (type);
2217   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2218     return type;
2219
2220   index_type_desc = ada_find_parallel_type (type, "___XA");
2221   if (index_type_desc)
2222     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2223                                       NULL);
2224   else
2225     index_type = TYPE_INDEX_TYPE (type);
2226
2227   new_type = alloc_type_copy (type);
2228   new_elt_type =
2229     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2230                                    elt_bits);
2231   create_array_type (new_type, new_elt_type, index_type);
2232   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2233   TYPE_NAME (new_type) = ada_type_name (type);
2234
2235   if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2236        && is_dynamic_type (check_typedef (index_type)))
2237       || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2238     low_bound = high_bound = 0;
2239   if (high_bound < low_bound)
2240     *elt_bits = TYPE_LENGTH (new_type) = 0;
2241   else
2242     {
2243       *elt_bits *= (high_bound - low_bound + 1);
2244       TYPE_LENGTH (new_type) =
2245         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2246     }
2247
2248   TYPE_FIXED_INSTANCE (new_type) = 1;
2249   return new_type;
2250 }
2251
2252 /* The array type encoded by TYPE, where
2253    ada_is_constrained_packed_array_type (TYPE).  */
2254
2255 static struct type *
2256 decode_constrained_packed_array_type (struct type *type)
2257 {
2258   const char *raw_name = ada_type_name (ada_check_typedef (type));
2259   char *name;
2260   const char *tail;
2261   struct type *shadow_type;
2262   long bits;
2263
2264   if (!raw_name)
2265     raw_name = ada_type_name (desc_base_type (type));
2266
2267   if (!raw_name)
2268     return NULL;
2269
2270   name = (char *) alloca (strlen (raw_name) + 1);
2271   tail = strstr (raw_name, "___XP");
2272   type = desc_base_type (type);
2273
2274   memcpy (name, raw_name, tail - raw_name);
2275   name[tail - raw_name] = '\000';
2276
2277   shadow_type = ada_find_parallel_type_with_name (type, name);
2278
2279   if (shadow_type == NULL)
2280     {
2281       lim_warning (_("could not find bounds information on packed array"));
2282       return NULL;
2283     }
2284   shadow_type = check_typedef (shadow_type);
2285
2286   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2287     {
2288       lim_warning (_("could not understand bounds "
2289                      "information on packed array"));
2290       return NULL;
2291     }
2292
2293   bits = decode_packed_array_bitsize (type);
2294   return constrained_packed_array_type (shadow_type, &bits);
2295 }
2296
2297 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2298    array, returns a simple array that denotes that array.  Its type is a
2299    standard GDB array type except that the BITSIZEs of the array
2300    target types are set to the number of bits in each element, and the
2301    type length is set appropriately.  */
2302
2303 static struct value *
2304 decode_constrained_packed_array (struct value *arr)
2305 {
2306   struct type *type;
2307
2308   /* If our value is a pointer, then dereference it. Likewise if
2309      the value is a reference.  Make sure that this operation does not
2310      cause the target type to be fixed, as this would indirectly cause
2311      this array to be decoded.  The rest of the routine assumes that
2312      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2313      and "value_ind" routines to perform the dereferencing, as opposed
2314      to using "ada_coerce_ref" or "ada_value_ind".  */
2315   arr = coerce_ref (arr);
2316   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2317     arr = value_ind (arr);
2318
2319   type = decode_constrained_packed_array_type (value_type (arr));
2320   if (type == NULL)
2321     {
2322       error (_("can't unpack array"));
2323       return NULL;
2324     }
2325
2326   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2327       && ada_is_modular_type (value_type (arr)))
2328     {
2329        /* This is a (right-justified) modular type representing a packed
2330          array with no wrapper.  In order to interpret the value through
2331          the (left-justified) packed array type we just built, we must
2332          first left-justify it.  */
2333       int bit_size, bit_pos;
2334       ULONGEST mod;
2335
2336       mod = ada_modulus (value_type (arr)) - 1;
2337       bit_size = 0;
2338       while (mod > 0)
2339         {
2340           bit_size += 1;
2341           mod >>= 1;
2342         }
2343       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2344       arr = ada_value_primitive_packed_val (arr, NULL,
2345                                             bit_pos / HOST_CHAR_BIT,
2346                                             bit_pos % HOST_CHAR_BIT,
2347                                             bit_size,
2348                                             type);
2349     }
2350
2351   return coerce_unspec_val_to_type (arr, type);
2352 }
2353
2354
2355 /* The value of the element of packed array ARR at the ARITY indices
2356    given in IND.   ARR must be a simple array.  */
2357
2358 static struct value *
2359 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2360 {
2361   int i;
2362   int bits, elt_off, bit_off;
2363   long elt_total_bit_offset;
2364   struct type *elt_type;
2365   struct value *v;
2366
2367   bits = 0;
2368   elt_total_bit_offset = 0;
2369   elt_type = ada_check_typedef (value_type (arr));
2370   for (i = 0; i < arity; i += 1)
2371     {
2372       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2373           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2374         error
2375           (_("attempt to do packed indexing of "
2376              "something other than a packed array"));
2377       else
2378         {
2379           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2380           LONGEST lowerbound, upperbound;
2381           LONGEST idx;
2382
2383           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2384             {
2385               lim_warning (_("don't know bounds of array"));
2386               lowerbound = upperbound = 0;
2387             }
2388
2389           idx = pos_atr (ind[i]);
2390           if (idx < lowerbound || idx > upperbound)
2391             lim_warning (_("packed array index %ld out of bounds"),
2392                          (long) idx);
2393           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2394           elt_total_bit_offset += (idx - lowerbound) * bits;
2395           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2396         }
2397     }
2398   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2399   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2400
2401   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2402                                       bits, elt_type);
2403   return v;
2404 }
2405
2406 /* Non-zero iff TYPE includes negative integer values.  */
2407
2408 static int
2409 has_negatives (struct type *type)
2410 {
2411   switch (TYPE_CODE (type))
2412     {
2413     default:
2414       return 0;
2415     case TYPE_CODE_INT:
2416       return !TYPE_UNSIGNED (type);
2417     case TYPE_CODE_RANGE:
2418       return TYPE_LOW_BOUND (type) < 0;
2419     }
2420 }
2421
2422 /* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
2423    unpack that data into UNPACKED.  UNPACKED_LEN is the size in bytes of
2424    the unpacked buffer.
2425
2426    The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2427    enough to contain at least BIT_OFFSET bits.  If not, an error is raised.
2428
2429    IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2430    zero otherwise.
2431
2432    IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
2433
2434    IS_SCALAR is nonzero if the data corresponds to a signed type.  */
2435
2436 static void
2437 ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2438                           gdb_byte *unpacked, int unpacked_len,
2439                           int is_big_endian, int is_signed_type,
2440                           int is_scalar)
2441 {
2442   int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2443   int src_idx;                  /* Index into the source area */
2444   int src_bytes_left;           /* Number of source bytes left to process.  */
2445   int srcBitsLeft;              /* Number of source bits left to move */
2446   int unusedLS;                 /* Number of bits in next significant
2447                                    byte of source that are unused */
2448
2449   int unpacked_idx;             /* Index into the unpacked buffer */
2450   int unpacked_bytes_left;      /* Number of bytes left to set in unpacked.  */
2451
2452   unsigned long accum;          /* Staging area for bits being transferred */
2453   int accumSize;                /* Number of meaningful bits in accum */
2454   unsigned char sign;
2455
2456   /* Transmit bytes from least to most significant; delta is the direction
2457      the indices move.  */
2458   int delta = is_big_endian ? -1 : 1;
2459
2460   /* Make sure that unpacked is large enough to receive the BIT_SIZE
2461      bits from SRC.  .*/
2462   if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2463     error (_("Cannot unpack %d bits into buffer of %d bytes"),
2464            bit_size, unpacked_len);
2465
2466   srcBitsLeft = bit_size;
2467   src_bytes_left = src_len;
2468   unpacked_bytes_left = unpacked_len;
2469   sign = 0;
2470
2471   if (is_big_endian)
2472     {
2473       src_idx = src_len - 1;
2474       if (is_signed_type
2475           && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2476         sign = ~0;
2477
2478       unusedLS =
2479         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2480         % HOST_CHAR_BIT;
2481
2482       if (is_scalar)
2483         {
2484           accumSize = 0;
2485           unpacked_idx = unpacked_len - 1;
2486         }
2487       else
2488         {
2489           /* Non-scalar values must be aligned at a byte boundary...  */
2490           accumSize =
2491             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2492           /* ... And are placed at the beginning (most-significant) bytes
2493              of the target.  */
2494           unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2495           unpacked_bytes_left = unpacked_idx + 1;
2496         }
2497     }
2498   else
2499     {
2500       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2501
2502       src_idx = unpacked_idx = 0;
2503       unusedLS = bit_offset;
2504       accumSize = 0;
2505
2506       if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
2507         sign = ~0;
2508     }
2509
2510   accum = 0;
2511   while (src_bytes_left > 0)
2512     {
2513       /* Mask for removing bits of the next source byte that are not
2514          part of the value.  */
2515       unsigned int unusedMSMask =
2516         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2517         1;
2518       /* Sign-extend bits for this byte.  */
2519       unsigned int signMask = sign & ~unusedMSMask;
2520
2521       accum |=
2522         (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2523       accumSize += HOST_CHAR_BIT - unusedLS;
2524       if (accumSize >= HOST_CHAR_BIT)
2525         {
2526           unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2527           accumSize -= HOST_CHAR_BIT;
2528           accum >>= HOST_CHAR_BIT;
2529           unpacked_bytes_left -= 1;
2530           unpacked_idx += delta;
2531         }
2532       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2533       unusedLS = 0;
2534       src_bytes_left -= 1;
2535       src_idx += delta;
2536     }
2537   while (unpacked_bytes_left > 0)
2538     {
2539       accum |= sign << accumSize;
2540       unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2541       accumSize -= HOST_CHAR_BIT;
2542       if (accumSize < 0)
2543         accumSize = 0;
2544       accum >>= HOST_CHAR_BIT;
2545       unpacked_bytes_left -= 1;
2546       unpacked_idx += delta;
2547     }
2548 }
2549
2550 /* Create a new value of type TYPE from the contents of OBJ starting
2551    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2552    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2553    assigning through the result will set the field fetched from.
2554    VALADDR is ignored unless OBJ is NULL, in which case,
2555    VALADDR+OFFSET must address the start of storage containing the 
2556    packed value.  The value returned  in this case is never an lval.
2557    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2558
2559 struct value *
2560 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2561                                 long offset, int bit_offset, int bit_size,
2562                                 struct type *type)
2563 {
2564   struct value *v;
2565   const gdb_byte *src;                /* First byte containing data to unpack */
2566   gdb_byte *unpacked;
2567   const int is_scalar = is_scalar_type (type);
2568   const int is_big_endian = gdbarch_bits_big_endian (get_type_arch (type));
2569   gdb::byte_vector staging;
2570
2571   type = ada_check_typedef (type);
2572
2573   if (obj == NULL)
2574     src = valaddr + offset;
2575   else
2576     src = value_contents (obj) + offset;
2577
2578   if (is_dynamic_type (type))
2579     {
2580       /* The length of TYPE might by dynamic, so we need to resolve
2581          TYPE in order to know its actual size, which we then use
2582          to create the contents buffer of the value we return.
2583          The difficulty is that the data containing our object is
2584          packed, and therefore maybe not at a byte boundary.  So, what
2585          we do, is unpack the data into a byte-aligned buffer, and then
2586          use that buffer as our object's value for resolving the type.  */
2587       int staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2588       staging.resize (staging_len);
2589
2590       ada_unpack_from_contents (src, bit_offset, bit_size,
2591                                 staging.data (), staging.size (),
2592                                 is_big_endian, has_negatives (type),
2593                                 is_scalar);
2594       type = resolve_dynamic_type (type, staging.data (), 0);
2595       if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2596         {
2597           /* This happens when the length of the object is dynamic,
2598              and is actually smaller than the space reserved for it.
2599              For instance, in an array of variant records, the bit_size
2600              we're given is the array stride, which is constant and
2601              normally equal to the maximum size of its element.
2602              But, in reality, each element only actually spans a portion
2603              of that stride.  */
2604           bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2605         }
2606     }
2607
2608   if (obj == NULL)
2609     {
2610       v = allocate_value (type);
2611       src = valaddr + offset;
2612     }
2613   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2614     {
2615       int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2616       gdb_byte *buf;
2617
2618       v = value_at (type, value_address (obj) + offset);
2619       buf = (gdb_byte *) alloca (src_len);
2620       read_memory (value_address (v), buf, src_len);
2621       src = buf;
2622     }
2623   else
2624     {
2625       v = allocate_value (type);
2626       src = value_contents (obj) + offset;
2627     }
2628
2629   if (obj != NULL)
2630     {
2631       long new_offset = offset;
2632
2633       set_value_component_location (v, obj);
2634       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2635       set_value_bitsize (v, bit_size);
2636       if (value_bitpos (v) >= HOST_CHAR_BIT)
2637         {
2638           ++new_offset;
2639           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2640         }
2641       set_value_offset (v, new_offset);
2642
2643       /* Also set the parent value.  This is needed when trying to
2644          assign a new value (in inferior memory).  */
2645       set_value_parent (v, obj);
2646     }
2647   else
2648     set_value_bitsize (v, bit_size);
2649   unpacked = value_contents_writeable (v);
2650
2651   if (bit_size == 0)
2652     {
2653       memset (unpacked, 0, TYPE_LENGTH (type));
2654       return v;
2655     }
2656
2657   if (staging.size () == TYPE_LENGTH (type))
2658     {
2659       /* Small short-cut: If we've unpacked the data into a buffer
2660          of the same size as TYPE's length, then we can reuse that,
2661          instead of doing the unpacking again.  */
2662       memcpy (unpacked, staging.data (), staging.size ());
2663     }
2664   else
2665     ada_unpack_from_contents (src, bit_offset, bit_size,
2666                               unpacked, TYPE_LENGTH (type),
2667                               is_big_endian, has_negatives (type), is_scalar);
2668
2669   return v;
2670 }
2671
2672 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2673    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2674    not overlap.  */
2675 static void
2676 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2677            int src_offset, int n, int bits_big_endian_p)
2678 {
2679   unsigned int accum, mask;
2680   int accum_bits, chunk_size;
2681
2682   target += targ_offset / HOST_CHAR_BIT;
2683   targ_offset %= HOST_CHAR_BIT;
2684   source += src_offset / HOST_CHAR_BIT;
2685   src_offset %= HOST_CHAR_BIT;
2686   if (bits_big_endian_p)
2687     {
2688       accum = (unsigned char) *source;
2689       source += 1;
2690       accum_bits = HOST_CHAR_BIT - src_offset;
2691
2692       while (n > 0)
2693         {
2694           int unused_right;
2695
2696           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2697           accum_bits += HOST_CHAR_BIT;
2698           source += 1;
2699           chunk_size = HOST_CHAR_BIT - targ_offset;
2700           if (chunk_size > n)
2701             chunk_size = n;
2702           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2703           mask = ((1 << chunk_size) - 1) << unused_right;
2704           *target =
2705             (*target & ~mask)
2706             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2707           n -= chunk_size;
2708           accum_bits -= chunk_size;
2709           target += 1;
2710           targ_offset = 0;
2711         }
2712     }
2713   else
2714     {
2715       accum = (unsigned char) *source >> src_offset;
2716       source += 1;
2717       accum_bits = HOST_CHAR_BIT - src_offset;
2718
2719       while (n > 0)
2720         {
2721           accum = accum + ((unsigned char) *source << accum_bits);
2722           accum_bits += HOST_CHAR_BIT;
2723           source += 1;
2724           chunk_size = HOST_CHAR_BIT - targ_offset;
2725           if (chunk_size > n)
2726             chunk_size = n;
2727           mask = ((1 << chunk_size) - 1) << targ_offset;
2728           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2729           n -= chunk_size;
2730           accum_bits -= chunk_size;
2731           accum >>= chunk_size;
2732           target += 1;
2733           targ_offset = 0;
2734         }
2735     }
2736 }
2737
2738 /* Store the contents of FROMVAL into the location of TOVAL.
2739    Return a new value with the location of TOVAL and contents of
2740    FROMVAL.   Handles assignment into packed fields that have
2741    floating-point or non-scalar types.  */
2742
2743 static struct value *
2744 ada_value_assign (struct value *toval, struct value *fromval)
2745 {
2746   struct type *type = value_type (toval);
2747   int bits = value_bitsize (toval);
2748
2749   toval = ada_coerce_ref (toval);
2750   fromval = ada_coerce_ref (fromval);
2751
2752   if (ada_is_direct_array_type (value_type (toval)))
2753     toval = ada_coerce_to_simple_array (toval);
2754   if (ada_is_direct_array_type (value_type (fromval)))
2755     fromval = ada_coerce_to_simple_array (fromval);
2756
2757   if (!deprecated_value_modifiable (toval))
2758     error (_("Left operand of assignment is not a modifiable lvalue."));
2759
2760   if (VALUE_LVAL (toval) == lval_memory
2761       && bits > 0
2762       && (TYPE_CODE (type) == TYPE_CODE_FLT
2763           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2764     {
2765       int len = (value_bitpos (toval)
2766                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2767       int from_size;
2768       gdb_byte *buffer = (gdb_byte *) alloca (len);
2769       struct value *val;
2770       CORE_ADDR to_addr = value_address (toval);
2771
2772       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2773         fromval = value_cast (type, fromval);
2774
2775       read_memory (to_addr, buffer, len);
2776       from_size = value_bitsize (fromval);
2777       if (from_size == 0)
2778         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2779       if (gdbarch_bits_big_endian (get_type_arch (type)))
2780         move_bits (buffer, value_bitpos (toval),
2781                    value_contents (fromval), from_size - bits, bits, 1);
2782       else
2783         move_bits (buffer, value_bitpos (toval),
2784                    value_contents (fromval), 0, bits, 0);
2785       write_memory_with_notification (to_addr, buffer, len);
2786
2787       val = value_copy (toval);
2788       memcpy (value_contents_raw (val), value_contents (fromval),
2789               TYPE_LENGTH (type));
2790       deprecated_set_value_type (val, type);
2791
2792       return val;
2793     }
2794
2795   return value_assign (toval, fromval);
2796 }
2797
2798
2799 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2800    CONTAINER, assign the contents of VAL to COMPONENTS's place in
2801    CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not
2802    COMPONENT, and not the inferior's memory.  The current contents
2803    of COMPONENT are ignored.
2804
2805    Although not part of the initial design, this function also works
2806    when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2807    had a null address, and COMPONENT had an address which is equal to
2808    its offset inside CONTAINER.  */
2809
2810 static void
2811 value_assign_to_component (struct value *container, struct value *component,
2812                            struct value *val)
2813 {
2814   LONGEST offset_in_container =
2815     (LONGEST)  (value_address (component) - value_address (container));
2816   int bit_offset_in_container =
2817     value_bitpos (component) - value_bitpos (container);
2818   int bits;
2819
2820   val = value_cast (value_type (component), val);
2821
2822   if (value_bitsize (component) == 0)
2823     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2824   else
2825     bits = value_bitsize (component);
2826
2827   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2828     move_bits (value_contents_writeable (container) + offset_in_container,
2829                value_bitpos (container) + bit_offset_in_container,
2830                value_contents (val),
2831                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2832                bits, 1);
2833   else
2834     move_bits (value_contents_writeable (container) + offset_in_container,
2835                value_bitpos (container) + bit_offset_in_container,
2836                value_contents (val), 0, bits, 0);
2837 }
2838
2839 /* The value of the element of array ARR at the ARITY indices given in IND.
2840    ARR may be either a simple array, GNAT array descriptor, or pointer
2841    thereto.  */
2842
2843 struct value *
2844 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2845 {
2846   int k;
2847   struct value *elt;
2848   struct type *elt_type;
2849
2850   elt = ada_coerce_to_simple_array (arr);
2851
2852   elt_type = ada_check_typedef (value_type (elt));
2853   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2854       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2855     return value_subscript_packed (elt, arity, ind);
2856
2857   for (k = 0; k < arity; k += 1)
2858     {
2859       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2860         error (_("too many subscripts (%d expected)"), k);
2861       elt = value_subscript (elt, pos_atr (ind[k]));
2862     }
2863   return elt;
2864 }
2865
2866 /* Assuming ARR is a pointer to a GDB array, the value of the element
2867    of *ARR at the ARITY indices given in IND.
2868    Does not read the entire array into memory.
2869
2870    Note: Unlike what one would expect, this function is used instead of
2871    ada_value_subscript for basically all non-packed array types.  The reason
2872    for this is that a side effect of doing our own pointer arithmetics instead
2873    of relying on value_subscript is that there is no implicit typedef peeling.
2874    This is important for arrays of array accesses, where it allows us to
2875    preserve the fact that the array's element is an array access, where the
2876    access part os encoded in a typedef layer.  */
2877
2878 static struct value *
2879 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2880 {
2881   int k;
2882   struct value *array_ind = ada_value_ind (arr);
2883   struct type *type
2884     = check_typedef (value_enclosing_type (array_ind));
2885
2886   if (TYPE_CODE (type) == TYPE_CODE_ARRAY
2887       && TYPE_FIELD_BITSIZE (type, 0) > 0)
2888     return value_subscript_packed (array_ind, arity, ind);
2889
2890   for (k = 0; k < arity; k += 1)
2891     {
2892       LONGEST lwb, upb;
2893       struct value *lwb_value;
2894
2895       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2896         error (_("too many subscripts (%d expected)"), k);
2897       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2898                         value_copy (arr));
2899       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2900       lwb_value = value_from_longest (value_type(ind[k]), lwb);
2901       arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value));
2902       type = TYPE_TARGET_TYPE (type);
2903     }
2904
2905   return value_ind (arr);
2906 }
2907
2908 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2909    actual type of ARRAY_PTR is ignored), returns the Ada slice of
2910    HIGH'Pos-LOW'Pos+1 elements starting at index LOW.  The lower bound of
2911    this array is LOW, as per Ada rules.  */
2912 static struct value *
2913 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2914                           int low, int high)
2915 {
2916   struct type *type0 = ada_check_typedef (type);
2917   struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
2918   struct type *index_type
2919     = create_static_range_type (NULL, base_index_type, low, high);
2920   struct type *slice_type =
2921     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2922   int base_low =  ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
2923   LONGEST base_low_pos, low_pos;
2924   CORE_ADDR base;
2925
2926   if (!discrete_position (base_index_type, low, &low_pos)
2927       || !discrete_position (base_index_type, base_low, &base_low_pos))
2928     {
2929       warning (_("unable to get positions in slice, use bounds instead"));
2930       low_pos = low;
2931       base_low_pos = base_low;
2932     }
2933
2934   base = value_as_address (array_ptr)
2935     + ((low_pos - base_low_pos)
2936        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2937   return value_at_lazy (slice_type, base);
2938 }
2939
2940
2941 static struct value *
2942 ada_value_slice (struct value *array, int low, int high)
2943 {
2944   struct type *type = ada_check_typedef (value_type (array));
2945   struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2946   struct type *index_type
2947     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2948   struct type *slice_type =
2949     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2950   LONGEST low_pos, high_pos;
2951
2952   if (!discrete_position (base_index_type, low, &low_pos)
2953       || !discrete_position (base_index_type, high, &high_pos))
2954     {
2955       warning (_("unable to get positions in slice, use bounds instead"));
2956       low_pos = low;
2957       high_pos = high;
2958     }
2959
2960   return value_cast (slice_type,
2961                      value_slice (array, low, high_pos - low_pos + 1));
2962 }
2963
2964 /* If type is a record type in the form of a standard GNAT array
2965    descriptor, returns the number of dimensions for type.  If arr is a
2966    simple array, returns the number of "array of"s that prefix its
2967    type designation.  Otherwise, returns 0.  */
2968
2969 int
2970 ada_array_arity (struct type *type)
2971 {
2972   int arity;
2973
2974   if (type == NULL)
2975     return 0;
2976
2977   type = desc_base_type (type);
2978
2979   arity = 0;
2980   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2981     return desc_arity (desc_bounds_type (type));
2982   else
2983     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2984       {
2985         arity += 1;
2986         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2987       }
2988
2989   return arity;
2990 }
2991
2992 /* If TYPE is a record type in the form of a standard GNAT array
2993    descriptor or a simple array type, returns the element type for
2994    TYPE after indexing by NINDICES indices, or by all indices if
2995    NINDICES is -1.  Otherwise, returns NULL.  */
2996
2997 struct type *
2998 ada_array_element_type (struct type *type, int nindices)
2999 {
3000   type = desc_base_type (type);
3001
3002   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
3003     {
3004       int k;
3005       struct type *p_array_type;
3006
3007       p_array_type = desc_data_target_type (type);
3008
3009       k = ada_array_arity (type);
3010       if (k == 0)
3011         return NULL;
3012
3013       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
3014       if (nindices >= 0 && k > nindices)
3015         k = nindices;
3016       while (k > 0 && p_array_type != NULL)
3017         {
3018           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
3019           k -= 1;
3020         }
3021       return p_array_type;
3022     }
3023   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
3024     {
3025       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
3026         {
3027           type = TYPE_TARGET_TYPE (type);
3028           nindices -= 1;
3029         }
3030       return type;
3031     }
3032
3033   return NULL;
3034 }
3035
3036 /* The type of nth index in arrays of given type (n numbering from 1).
3037    Does not examine memory.  Throws an error if N is invalid or TYPE
3038    is not an array type.  NAME is the name of the Ada attribute being
3039    evaluated ('range, 'first, 'last, or 'length); it is used in building
3040    the error message.  */
3041
3042 static struct type *
3043 ada_index_type (struct type *type, int n, const char *name)
3044 {
3045   struct type *result_type;
3046
3047   type = desc_base_type (type);
3048
3049   if (n < 0 || n > ada_array_arity (type))
3050     error (_("invalid dimension number to '%s"), name);
3051
3052   if (ada_is_simple_array_type (type))
3053     {
3054       int i;
3055
3056       for (i = 1; i < n; i += 1)
3057         type = TYPE_TARGET_TYPE (type);
3058       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
3059       /* FIXME: The stabs type r(0,0);bound;bound in an array type
3060          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
3061          perhaps stabsread.c would make more sense.  */
3062       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
3063         result_type = NULL;
3064     }
3065   else
3066     {
3067       result_type = desc_index_type (desc_bounds_type (type), n);
3068       if (result_type == NULL)
3069         error (_("attempt to take bound of something that is not an array"));
3070     }
3071
3072   return result_type;
3073 }
3074
3075 /* Given that arr is an array type, returns the lower bound of the
3076    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
3077    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
3078    array-descriptor type.  It works for other arrays with bounds supplied
3079    by run-time quantities other than discriminants.  */
3080
3081 static LONGEST
3082 ada_array_bound_from_type (struct type *arr_type, int n, int which)
3083 {
3084   struct type *type, *index_type_desc, *index_type;
3085   int i;
3086
3087   gdb_assert (which == 0 || which == 1);
3088
3089   if (ada_is_constrained_packed_array_type (arr_type))
3090     arr_type = decode_constrained_packed_array_type (arr_type);
3091
3092   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
3093     return (LONGEST) - which;
3094
3095   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
3096     type = TYPE_TARGET_TYPE (arr_type);
3097   else
3098     type = arr_type;
3099
3100   if (TYPE_FIXED_INSTANCE (type))
3101     {
3102       /* The array has already been fixed, so we do not need to
3103          check the parallel ___XA type again.  That encoding has
3104          already been applied, so ignore it now.  */
3105       index_type_desc = NULL;
3106     }
3107   else
3108     {
3109       index_type_desc = ada_find_parallel_type (type, "___XA");
3110       ada_fixup_array_indexes_type (index_type_desc);
3111     }
3112
3113   if (index_type_desc != NULL)
3114     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
3115                                       NULL);
3116   else
3117     {
3118       struct type *elt_type = check_typedef (type);
3119
3120       for (i = 1; i < n; i++)
3121         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
3122
3123       index_type = TYPE_INDEX_TYPE (elt_type);
3124     }
3125
3126   return
3127     (LONGEST) (which == 0
3128                ? ada_discrete_type_low_bound (index_type)
3129                : ada_discrete_type_high_bound (index_type));
3130 }
3131
3132 /* Given that arr is an array value, returns the lower bound of the
3133    nth index (numbering from 1) if WHICH is 0, and the upper bound if
3134    WHICH is 1.  This routine will also work for arrays with bounds
3135    supplied by run-time quantities other than discriminants.  */
3136
3137 static LONGEST
3138 ada_array_bound (struct value *arr, int n, int which)
3139 {
3140   struct type *arr_type;
3141
3142   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3143     arr = value_ind (arr);
3144   arr_type = value_enclosing_type (arr);
3145
3146   if (ada_is_constrained_packed_array_type (arr_type))
3147     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
3148   else if (ada_is_simple_array_type (arr_type))
3149     return ada_array_bound_from_type (arr_type, n, which);
3150   else
3151     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
3152 }
3153
3154 /* Given that arr is an array value, returns the length of the
3155    nth index.  This routine will also work for arrays with bounds
3156    supplied by run-time quantities other than discriminants.
3157    Does not work for arrays indexed by enumeration types with representation
3158    clauses at the moment.  */
3159
3160 static LONGEST
3161 ada_array_length (struct value *arr, int n)
3162 {
3163   struct type *arr_type, *index_type;
3164   int low, high;
3165
3166   if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3167     arr = value_ind (arr);
3168   arr_type = value_enclosing_type (arr);
3169
3170   if (ada_is_constrained_packed_array_type (arr_type))
3171     return ada_array_length (decode_constrained_packed_array (arr), n);
3172
3173   if (ada_is_simple_array_type (arr_type))
3174     {
3175       low = ada_array_bound_from_type (arr_type, n, 0);
3176       high = ada_array_bound_from_type (arr_type, n, 1);
3177     }
3178   else
3179     {
3180       low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3181       high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3182     }
3183
3184   arr_type = check_typedef (arr_type);
3185   index_type = TYPE_INDEX_TYPE (arr_type);
3186   if (index_type != NULL)
3187     {
3188       struct type *base_type;
3189       if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
3190         base_type = TYPE_TARGET_TYPE (index_type);
3191       else
3192         base_type = index_type;
3193
3194       low = pos_atr (value_from_longest (base_type, low));
3195       high = pos_atr (value_from_longest (base_type, high));
3196     }
3197   return high - low + 1;
3198 }
3199
3200 /* An empty array whose type is that of ARR_TYPE (an array type),
3201    with bounds LOW to LOW-1.  */
3202
3203 static struct value *
3204 empty_array (struct type *arr_type, int low)
3205 {
3206   struct type *arr_type0 = ada_check_typedef (arr_type);
3207   struct type *index_type
3208     = create_static_range_type
3209         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
3210   struct type *elt_type = ada_array_element_type (arr_type0, 1);
3211
3212   return allocate_value (create_array_type (NULL, elt_type, index_type));
3213 }
3214 \f
3215
3216                                 /* Name resolution */
3217
3218 /* The "decoded" name for the user-definable Ada operator corresponding
3219    to OP.  */
3220
3221 static const char *
3222 ada_decoded_op_name (enum exp_opcode op)
3223 {
3224   int i;
3225
3226   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3227     {
3228       if (ada_opname_table[i].op == op)
3229         return ada_opname_table[i].decoded;
3230     }
3231   error (_("Could not find operator name for opcode"));
3232 }
3233
3234
3235 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3236    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3237    undefined namespace) and converts operators that are
3238    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3239    non-null, it provides a preferred result type [at the moment, only
3240    type void has any effect---causing procedures to be preferred over
3241    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3242    return type is preferred.  May change (expand) *EXP.  */
3243
3244 static void
3245 resolve (struct expression **expp, int void_context_p)
3246 {
3247   struct type *context_type = NULL;
3248   int pc = 0;
3249
3250   if (void_context_p)
3251     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3252
3253   resolve_subexp (expp, &pc, 1, context_type);
3254 }
3255
3256 /* Resolve the operator of the subexpression beginning at
3257    position *POS of *EXPP.  "Resolving" consists of replacing
3258    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3259    with their resolutions, replacing built-in operators with
3260    function calls to user-defined operators, where appropriate, and,
3261    when DEPROCEDURE_P is non-zero, converting function-valued variables
3262    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3263    are as in ada_resolve, above.  */
3264
3265 static struct value *
3266 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3267                 struct type *context_type)
3268 {
3269   int pc = *pos;
3270   int i;
3271   struct expression *exp;       /* Convenience: == *expp.  */
3272   enum exp_opcode op = (*expp)->elts[pc].opcode;
3273   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3274   int nargs;                    /* Number of operands.  */
3275   int oplen;
3276
3277   argvec = NULL;
3278   nargs = 0;
3279   exp = *expp;
3280
3281   /* Pass one: resolve operands, saving their types and updating *pos,
3282      if needed.  */
3283   switch (op)
3284     {
3285     case OP_FUNCALL:
3286       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3287           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3288         *pos += 7;
3289       else
3290         {
3291           *pos += 3;
3292           resolve_subexp (expp, pos, 0, NULL);
3293         }
3294       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3295       break;
3296
3297     case UNOP_ADDR:
3298       *pos += 1;
3299       resolve_subexp (expp, pos, 0, NULL);
3300       break;
3301
3302     case UNOP_QUAL:
3303       *pos += 3;
3304       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3305       break;
3306
3307     case OP_ATR_MODULUS:
3308     case OP_ATR_SIZE:
3309     case OP_ATR_TAG:
3310     case OP_ATR_FIRST:
3311     case OP_ATR_LAST:
3312     case OP_ATR_LENGTH:
3313     case OP_ATR_POS:
3314     case OP_ATR_VAL:
3315     case OP_ATR_MIN:
3316     case OP_ATR_MAX:
3317     case TERNOP_IN_RANGE:
3318     case BINOP_IN_BOUNDS:
3319     case UNOP_IN_RANGE:
3320     case OP_AGGREGATE:
3321     case OP_OTHERS:
3322     case OP_CHOICES:
3323     case OP_POSITIONAL:
3324     case OP_DISCRETE_RANGE:
3325     case OP_NAME:
3326       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3327       *pos += oplen;
3328       break;
3329
3330     case BINOP_ASSIGN:
3331       {
3332         struct value *arg1;
3333
3334         *pos += 1;
3335         arg1 = resolve_subexp (expp, pos, 0, NULL);
3336         if (arg1 == NULL)
3337           resolve_subexp (expp, pos, 1, NULL);
3338         else
3339           resolve_subexp (expp, pos, 1, value_type (arg1));
3340         break;
3341       }
3342
3343     case UNOP_CAST:
3344       *pos += 3;
3345       nargs = 1;
3346       break;
3347
3348     case BINOP_ADD:
3349     case BINOP_SUB:
3350     case BINOP_MUL:
3351     case BINOP_DIV:
3352     case BINOP_REM:
3353     case BINOP_MOD:
3354     case BINOP_EXP:
3355     case BINOP_CONCAT:
3356     case BINOP_LOGICAL_AND:
3357     case BINOP_LOGICAL_OR:
3358     case BINOP_BITWISE_AND:
3359     case BINOP_BITWISE_IOR:
3360     case BINOP_BITWISE_XOR:
3361
3362     case BINOP_EQUAL:
3363     case BINOP_NOTEQUAL:
3364     case BINOP_LESS:
3365     case BINOP_GTR:
3366     case BINOP_LEQ:
3367     case BINOP_GEQ:
3368
3369     case BINOP_REPEAT:
3370     case BINOP_SUBSCRIPT:
3371     case BINOP_COMMA:
3372       *pos += 1;
3373       nargs = 2;
3374       break;
3375
3376     case UNOP_NEG:
3377     case UNOP_PLUS:
3378     case UNOP_LOGICAL_NOT:
3379     case UNOP_ABS:
3380     case UNOP_IND:
3381       *pos += 1;
3382       nargs = 1;
3383       break;
3384
3385     case OP_LONG:
3386     case OP_DOUBLE:
3387     case OP_VAR_VALUE:
3388       *pos += 4;
3389       break;
3390
3391     case OP_TYPE:
3392     case OP_BOOL:
3393     case OP_LAST:
3394     case OP_INTERNALVAR:
3395       *pos += 3;
3396       break;
3397
3398     case UNOP_MEMVAL:
3399       *pos += 3;
3400       nargs = 1;
3401       break;
3402
3403     case OP_REGISTER:
3404       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3405       break;
3406
3407     case STRUCTOP_STRUCT:
3408       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3409       nargs = 1;
3410       break;
3411
3412     case TERNOP_SLICE:
3413       *pos += 1;
3414       nargs = 3;
3415       break;
3416
3417     case OP_STRING:
3418       break;
3419
3420     default:
3421       error (_("Unexpected operator during name resolution"));
3422     }
3423
3424   argvec = XALLOCAVEC (struct value *, nargs + 1);
3425   for (i = 0; i < nargs; i += 1)
3426     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3427   argvec[i] = NULL;
3428   exp = *expp;
3429
3430   /* Pass two: perform any resolution on principal operator.  */
3431   switch (op)
3432     {
3433     default:
3434       break;
3435
3436     case OP_VAR_VALUE:
3437       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3438         {
3439           struct block_symbol *candidates;
3440           int n_candidates;
3441
3442           n_candidates =
3443             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3444                                     (exp->elts[pc + 2].symbol),
3445                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3446                                     &candidates);
3447
3448           if (n_candidates > 1)
3449             {
3450               /* Types tend to get re-introduced locally, so if there
3451                  are any local symbols that are not types, first filter
3452                  out all types.  */
3453               int j;
3454               for (j = 0; j < n_candidates; j += 1)
3455                 switch (SYMBOL_CLASS (candidates[j].symbol))
3456                   {
3457                   case LOC_REGISTER:
3458                   case LOC_ARG:
3459                   case LOC_REF_ARG:
3460                   case LOC_REGPARM_ADDR:
3461                   case LOC_LOCAL:
3462                   case LOC_COMPUTED:
3463                     goto FoundNonType;
3464                   default:
3465                     break;
3466                   }
3467             FoundNonType:
3468               if (j < n_candidates)
3469                 {
3470                   j = 0;
3471                   while (j < n_candidates)
3472                     {
3473                       if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
3474                         {
3475                           candidates[j] = candidates[n_candidates - 1];
3476                           n_candidates -= 1;
3477                         }
3478                       else
3479                         j += 1;
3480                     }
3481                 }
3482             }
3483
3484           if (n_candidates == 0)
3485             error (_("No definition found for %s"),
3486                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3487           else if (n_candidates == 1)
3488             i = 0;
3489           else if (deprocedure_p
3490                    && !is_nonfunction (candidates, n_candidates))
3491             {
3492               i = ada_resolve_function
3493                 (candidates, n_candidates, NULL, 0,
3494                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3495                  context_type);
3496               if (i < 0)
3497                 error (_("Could not find a match for %s"),
3498                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3499             }
3500           else
3501             {
3502               printf_filtered (_("Multiple matches for %s\n"),
3503                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3504               user_select_syms (candidates, n_candidates, 1);
3505               i = 0;
3506             }
3507
3508           exp->elts[pc + 1].block = candidates[i].block;
3509           exp->elts[pc + 2].symbol = candidates[i].symbol;
3510           if (innermost_block == NULL
3511               || contained_in (candidates[i].block, innermost_block))
3512             innermost_block = candidates[i].block;
3513         }
3514
3515       if (deprocedure_p
3516           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3517               == TYPE_CODE_FUNC))
3518         {
3519           replace_operator_with_call (expp, pc, 0, 0,
3520                                       exp->elts[pc + 2].symbol,
3521                                       exp->elts[pc + 1].block);
3522           exp = *expp;
3523         }
3524       break;
3525
3526     case OP_FUNCALL:
3527       {
3528         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3529             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3530           {
3531             struct block_symbol *candidates;
3532             int n_candidates;
3533
3534             n_candidates =
3535               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3536                                       (exp->elts[pc + 5].symbol),
3537                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3538                                       &candidates);
3539             if (n_candidates == 1)
3540               i = 0;
3541             else
3542               {
3543                 i = ada_resolve_function
3544                   (candidates, n_candidates,
3545                    argvec, nargs,
3546                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3547                    context_type);
3548                 if (i < 0)
3549                   error (_("Could not find a match for %s"),
3550                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3551               }
3552
3553             exp->elts[pc + 4].block = candidates[i].block;
3554             exp->elts[pc + 5].symbol = candidates[i].symbol;
3555             if (innermost_block == NULL
3556                 || contained_in (candidates[i].block, innermost_block))
3557               innermost_block = candidates[i].block;
3558           }
3559       }
3560       break;
3561     case BINOP_ADD:
3562     case BINOP_SUB:
3563     case BINOP_MUL:
3564     case BINOP_DIV:
3565     case BINOP_REM:
3566     case BINOP_MOD:
3567     case BINOP_CONCAT:
3568     case BINOP_BITWISE_AND:
3569     case BINOP_BITWISE_IOR:
3570     case BINOP_BITWISE_XOR:
3571     case BINOP_EQUAL:
3572     case BINOP_NOTEQUAL:
3573     case BINOP_LESS:
3574     case BINOP_GTR:
3575     case BINOP_LEQ:
3576     case BINOP_GEQ:
3577     case BINOP_EXP:
3578     case UNOP_NEG:
3579     case UNOP_PLUS:
3580     case UNOP_LOGICAL_NOT:
3581     case UNOP_ABS:
3582       if (possible_user_operator_p (op, argvec))
3583         {
3584           struct block_symbol *candidates;
3585           int n_candidates;
3586
3587           n_candidates =
3588             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3589                                     (struct block *) NULL, VAR_DOMAIN,
3590                                     &candidates);
3591           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3592                                     ada_decoded_op_name (op), NULL);
3593           if (i < 0)
3594             break;
3595
3596           replace_operator_with_call (expp, pc, nargs, 1,
3597                                       candidates[i].symbol,
3598                                       candidates[i].block);
3599           exp = *expp;
3600         }
3601       break;
3602
3603     case OP_TYPE:
3604     case OP_REGISTER:
3605       return NULL;
3606     }
3607
3608   *pos = pc;
3609   return evaluate_subexp_type (exp, pos);
3610 }
3611
3612 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3613    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3614    a non-pointer.  */
3615 /* The term "match" here is rather loose.  The match is heuristic and
3616    liberal.  */
3617
3618 static int
3619 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3620 {
3621   ftype = ada_check_typedef (ftype);
3622   atype = ada_check_typedef (atype);
3623
3624   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3625     ftype = TYPE_TARGET_TYPE (ftype);
3626   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3627     atype = TYPE_TARGET_TYPE (atype);
3628
3629   switch (TYPE_CODE (ftype))
3630     {
3631     default:
3632       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3633     case TYPE_CODE_PTR:
3634       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3635         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3636                                TYPE_TARGET_TYPE (atype), 0);
3637       else
3638         return (may_deref
3639                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3640     case TYPE_CODE_INT:
3641     case TYPE_CODE_ENUM:
3642     case TYPE_CODE_RANGE:
3643       switch (TYPE_CODE (atype))
3644         {
3645         case TYPE_CODE_INT:
3646         case TYPE_CODE_ENUM:
3647         case TYPE_CODE_RANGE:
3648           return 1;
3649         default:
3650           return 0;
3651         }
3652
3653     case TYPE_CODE_ARRAY:
3654       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3655               || ada_is_array_descriptor_type (atype));
3656
3657     case TYPE_CODE_STRUCT:
3658       if (ada_is_array_descriptor_type (ftype))
3659         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3660                 || ada_is_array_descriptor_type (atype));
3661       else
3662         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3663                 && !ada_is_array_descriptor_type (atype));
3664
3665     case TYPE_CODE_UNION:
3666     case TYPE_CODE_FLT:
3667       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3668     }
3669 }
3670
3671 /* Return non-zero if the formals of FUNC "sufficiently match" the
3672    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3673    may also be an enumeral, in which case it is treated as a 0-
3674    argument function.  */
3675
3676 static int
3677 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3678 {
3679   int i;
3680   struct type *func_type = SYMBOL_TYPE (func);
3681
3682   if (SYMBOL_CLASS (func) == LOC_CONST
3683       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3684     return (n_actuals == 0);
3685   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3686     return 0;
3687
3688   if (TYPE_NFIELDS (func_type) != n_actuals)
3689     return 0;
3690
3691   for (i = 0; i < n_actuals; i += 1)
3692     {
3693       if (actuals[i] == NULL)
3694         return 0;
3695       else
3696         {
3697           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3698                                                                    i));
3699           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3700
3701           if (!ada_type_match (ftype, atype, 1))
3702             return 0;
3703         }
3704     }
3705   return 1;
3706 }
3707
3708 /* False iff function type FUNC_TYPE definitely does not produce a value
3709    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3710    FUNC_TYPE is not a valid function type with a non-null return type
3711    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3712
3713 static int
3714 return_match (struct type *func_type, struct type *context_type)
3715 {
3716   struct type *return_type;
3717
3718   if (func_type == NULL)
3719     return 1;
3720
3721   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3722     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3723   else
3724     return_type = get_base_type (func_type);
3725   if (return_type == NULL)
3726     return 1;
3727
3728   context_type = get_base_type (context_type);
3729
3730   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3731     return context_type == NULL || return_type == context_type;
3732   else if (context_type == NULL)
3733     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3734   else
3735     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3736 }
3737
3738
3739 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3740    function (if any) that matches the types of the NARGS arguments in
3741    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3742    that returns that type, then eliminate matches that don't.  If
3743    CONTEXT_TYPE is void and there is at least one match that does not
3744    return void, eliminate all matches that do.
3745
3746    Asks the user if there is more than one match remaining.  Returns -1
3747    if there is no such symbol or none is selected.  NAME is used
3748    solely for messages.  May re-arrange and modify SYMS in
3749    the process; the index returned is for the modified vector.  */
3750
3751 static int
3752 ada_resolve_function (struct block_symbol syms[],
3753                       int nsyms, struct value **args, int nargs,
3754                       const char *name, struct type *context_type)
3755 {
3756   int fallback;
3757   int k;
3758   int m;                        /* Number of hits */
3759
3760   m = 0;
3761   /* In the first pass of the loop, we only accept functions matching
3762      context_type.  If none are found, we add a second pass of the loop
3763      where every function is accepted.  */
3764   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3765     {
3766       for (k = 0; k < nsyms; k += 1)
3767         {
3768           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
3769
3770           if (ada_args_match (syms[k].symbol, args, nargs)
3771               && (fallback || return_match (type, context_type)))
3772             {
3773               syms[m] = syms[k];
3774               m += 1;
3775             }
3776         }
3777     }
3778
3779   /* If we got multiple matches, ask the user which one to use.  Don't do this
3780      interactive thing during completion, though, as the purpose of the
3781      completion is providing a list of all possible matches.  Prompting the
3782      user to filter it down would be completely unexpected in this case.  */
3783   if (m == 0)
3784     return -1;
3785   else if (m > 1 && !parse_completion)
3786     {
3787       printf_filtered (_("Multiple matches for %s\n"), name);
3788       user_select_syms (syms, m, 1);
3789       return 0;
3790     }
3791   return 0;
3792 }
3793
3794 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3795    in a listing of choices during disambiguation (see sort_choices, below).
3796    The idea is that overloadings of a subprogram name from the
3797    same package should sort in their source order.  We settle for ordering
3798    such symbols by their trailing number (__N  or $N).  */
3799
3800 static int
3801 encoded_ordered_before (const char *N0, const char *N1)
3802 {
3803   if (N1 == NULL)
3804     return 0;
3805   else if (N0 == NULL)
3806     return 1;
3807   else
3808     {
3809       int k0, k1;
3810
3811       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3812         ;
3813       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3814         ;
3815       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3816           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3817         {
3818           int n0, n1;
3819
3820           n0 = k0;
3821           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3822             n0 -= 1;
3823           n1 = k1;
3824           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3825             n1 -= 1;
3826           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3827             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3828         }
3829       return (strcmp (N0, N1) < 0);
3830     }
3831 }
3832
3833 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3834    encoded names.  */
3835
3836 static void
3837 sort_choices (struct block_symbol syms[], int nsyms)
3838 {
3839   int i;
3840
3841   for (i = 1; i < nsyms; i += 1)
3842     {
3843       struct block_symbol sym = syms[i];
3844       int j;
3845
3846       for (j = i - 1; j >= 0; j -= 1)
3847         {
3848           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].symbol),
3849                                       SYMBOL_LINKAGE_NAME (sym.symbol)))
3850             break;
3851           syms[j + 1] = syms[j];
3852         }
3853       syms[j + 1] = sym;
3854     }
3855 }
3856
3857 /* Whether GDB should display formals and return types for functions in the
3858    overloads selection menu.  */
3859 static int print_signatures = 1;
3860
3861 /* Print the signature for SYM on STREAM according to the FLAGS options.  For
3862    all but functions, the signature is just the name of the symbol.  For
3863    functions, this is the name of the function, the list of types for formals
3864    and the return type (if any).  */
3865
3866 static void
3867 ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3868                             const struct type_print_options *flags)
3869 {
3870   struct type *type = SYMBOL_TYPE (sym);
3871
3872   fprintf_filtered (stream, "%s", SYMBOL_PRINT_NAME (sym));
3873   if (!print_signatures
3874       || type == NULL
3875       || TYPE_CODE (type) != TYPE_CODE_FUNC)
3876     return;
3877
3878   if (TYPE_NFIELDS (type) > 0)
3879     {
3880       int i;
3881
3882       fprintf_filtered (stream, " (");
3883       for (i = 0; i < TYPE_NFIELDS (type); ++i)
3884         {
3885           if (i > 0)
3886             fprintf_filtered (stream, "; ");
3887           ada_print_type (TYPE_FIELD_TYPE (type, i), NULL, stream, -1, 0,
3888                           flags);
3889         }
3890       fprintf_filtered (stream, ")");
3891     }
3892   if (TYPE_TARGET_TYPE (type) != NULL
3893       && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
3894     {
3895       fprintf_filtered (stream, " return ");
3896       ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3897     }
3898 }
3899
3900 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3901    by asking the user (if necessary), returning the number selected, 
3902    and setting the first elements of SYMS items.  Error if no symbols
3903    selected.  */
3904
3905 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3906    to be re-integrated one of these days.  */
3907
3908 int
3909 user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
3910 {
3911   int i;
3912   int *chosen = XALLOCAVEC (int , nsyms);
3913   int n_chosen;
3914   int first_choice = (max_results == 1) ? 1 : 2;
3915   const char *select_mode = multiple_symbols_select_mode ();
3916
3917   if (max_results < 1)
3918     error (_("Request to select 0 symbols!"));
3919   if (nsyms <= 1)
3920     return nsyms;
3921
3922   if (select_mode == multiple_symbols_cancel)
3923     error (_("\
3924 canceled because the command is ambiguous\n\
3925 See set/show multiple-symbol."));
3926   
3927   /* If select_mode is "all", then return all possible symbols.
3928      Only do that if more than one symbol can be selected, of course.
3929      Otherwise, display the menu as usual.  */
3930   if (select_mode == multiple_symbols_all && max_results > 1)
3931     return nsyms;
3932
3933   printf_unfiltered (_("[0] cancel\n"));
3934   if (max_results > 1)
3935     printf_unfiltered (_("[1] all\n"));
3936
3937   sort_choices (syms, nsyms);
3938
3939   for (i = 0; i < nsyms; i += 1)
3940     {
3941       if (syms[i].symbol == NULL)
3942         continue;
3943
3944       if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
3945         {
3946           struct symtab_and_line sal =
3947             find_function_start_sal (syms[i].symbol, 1);
3948
3949           printf_unfiltered ("[%d] ", i + first_choice);
3950           ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3951                                       &type_print_raw_options);
3952           if (sal.symtab == NULL)
3953             printf_unfiltered (_(" at <no source file available>:%d\n"),
3954                                sal.line);
3955           else
3956             printf_unfiltered (_(" at %s:%d\n"),
3957                                symtab_to_filename_for_display (sal.symtab),
3958                                sal.line);
3959           continue;
3960         }
3961       else
3962         {
3963           int is_enumeral =
3964             (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3965              && SYMBOL_TYPE (syms[i].symbol) != NULL
3966              && TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) == TYPE_CODE_ENUM);
3967           struct symtab *symtab = NULL;
3968
3969           if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3970             symtab = symbol_symtab (syms[i].symbol);
3971
3972           if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
3973             {
3974               printf_unfiltered ("[%d] ", i + first_choice);
3975               ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3976                                           &type_print_raw_options);
3977               printf_unfiltered (_(" at %s:%d\n"),
3978                                  symtab_to_filename_for_display (symtab),
3979                                  SYMBOL_LINE (syms[i].symbol));
3980             }
3981           else if (is_enumeral
3982                    && TYPE_NAME (SYMBOL_TYPE (syms[i].symbol)) != NULL)
3983             {
3984               printf_unfiltered (("[%d] "), i + first_choice);
3985               ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3986                               gdb_stdout, -1, 0, &type_print_raw_options);
3987               printf_unfiltered (_("'(%s) (enumeral)\n"),
3988                                  SYMBOL_PRINT_NAME (syms[i].symbol));
3989             }
3990           else
3991             {
3992               printf_unfiltered ("[%d] ", i + first_choice);
3993               ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3994                                           &type_print_raw_options);
3995
3996               if (symtab != NULL)
3997                 printf_unfiltered (is_enumeral
3998                                    ? _(" in %s (enumeral)\n")
3999                                    : _(" at %s:?\n"),
4000                                    symtab_to_filename_for_display (symtab));
4001               else
4002                 printf_unfiltered (is_enumeral
4003                                    ? _(" (enumeral)\n")
4004                                    : _(" at ?\n"));
4005             }
4006         }
4007     }
4008
4009   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4010                              "overload-choice");
4011
4012   for (i = 0; i < n_chosen; i += 1)
4013     syms[i] = syms[chosen[i]];
4014
4015   return n_chosen;
4016 }
4017
4018 /* Read and validate a set of numeric choices from the user in the
4019    range 0 .. N_CHOICES-1.  Place the results in increasing
4020    order in CHOICES[0 .. N-1], and return N.
4021
4022    The user types choices as a sequence of numbers on one line
4023    separated by blanks, encoding them as follows:
4024
4025      + A choice of 0 means to cancel the selection, throwing an error.
4026      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
4027      + The user chooses k by typing k+IS_ALL_CHOICE+1.
4028
4029    The user is not allowed to choose more than MAX_RESULTS values.
4030
4031    ANNOTATION_SUFFIX, if present, is used to annotate the input
4032    prompts (for use with the -f switch).  */
4033
4034 int
4035 get_selections (int *choices, int n_choices, int max_results,
4036                 int is_all_choice, const char *annotation_suffix)
4037 {
4038   char *args;
4039   const char *prompt;
4040   int n_chosen;
4041   int first_choice = is_all_choice ? 2 : 1;
4042
4043   prompt = getenv ("PS2");
4044   if (prompt == NULL)
4045     prompt = "> ";
4046
4047   args = command_line_input (prompt, 0, annotation_suffix);
4048
4049   if (args == NULL)
4050     error_no_arg (_("one or more choice numbers"));
4051
4052   n_chosen = 0;
4053
4054   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
4055      order, as given in args.  Choices are validated.  */
4056   while (1)
4057     {
4058       char *args2;
4059       int choice, j;
4060
4061       args = skip_spaces (args);
4062       if (*args == '\0' && n_chosen == 0)
4063         error_no_arg (_("one or more choice numbers"));
4064       else if (*args == '\0')
4065         break;
4066
4067       choice = strtol (args, &args2, 10);
4068       if (args == args2 || choice < 0
4069           || choice > n_choices + first_choice - 1)
4070         error (_("Argument must be choice number"));
4071       args = args2;
4072
4073       if (choice == 0)
4074         error (_("cancelled"));
4075
4076       if (choice < first_choice)
4077         {
4078           n_chosen = n_choices;
4079           for (j = 0; j < n_choices; j += 1)
4080             choices[j] = j;
4081           break;
4082         }
4083       choice -= first_choice;
4084
4085       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4086         {
4087         }
4088
4089       if (j < 0 || choice != choices[j])
4090         {
4091           int k;
4092
4093           for (k = n_chosen - 1; k > j; k -= 1)
4094             choices[k + 1] = choices[k];
4095           choices[j + 1] = choice;
4096           n_chosen += 1;
4097         }
4098     }
4099
4100   if (n_chosen > max_results)
4101     error (_("Select no more than %d of the above"), max_results);
4102
4103   return n_chosen;
4104 }
4105
4106 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
4107    on the function identified by SYM and BLOCK, and taking NARGS
4108    arguments.  Update *EXPP as needed to hold more space.  */
4109
4110 static void
4111 replace_operator_with_call (struct expression **expp, int pc, int nargs,
4112                             int oplen, struct symbol *sym,
4113                             const struct block *block)
4114 {
4115   /* A new expression, with 6 more elements (3 for funcall, 4 for function
4116      symbol, -oplen for operator being replaced).  */
4117   struct expression *newexp = (struct expression *)
4118     xzalloc (sizeof (struct expression)
4119              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
4120   struct expression *exp = *expp;
4121
4122   newexp->nelts = exp->nelts + 7 - oplen;
4123   newexp->language_defn = exp->language_defn;
4124   newexp->gdbarch = exp->gdbarch;
4125   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
4126   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4127           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
4128
4129   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
4130   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
4131
4132   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
4133   newexp->elts[pc + 4].block = block;
4134   newexp->elts[pc + 5].symbol = sym;
4135
4136   *expp = newexp;
4137   xfree (exp);
4138 }
4139
4140 /* Type-class predicates */
4141
4142 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
4143    or FLOAT).  */
4144
4145 static int
4146 numeric_type_p (struct type *type)
4147 {
4148   if (type == NULL)
4149     return 0;
4150   else
4151     {
4152       switch (TYPE_CODE (type))
4153         {
4154         case TYPE_CODE_INT:
4155         case TYPE_CODE_FLT:
4156           return 1;
4157         case TYPE_CODE_RANGE:
4158           return (type == TYPE_TARGET_TYPE (type)
4159                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
4160         default:
4161           return 0;
4162         }
4163     }
4164 }
4165
4166 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
4167
4168 static int
4169 integer_type_p (struct type *type)
4170 {
4171   if (type == NULL)
4172     return 0;
4173   else
4174     {
4175       switch (TYPE_CODE (type))
4176         {
4177         case TYPE_CODE_INT:
4178           return 1;
4179         case TYPE_CODE_RANGE:
4180           return (type == TYPE_TARGET_TYPE (type)
4181                   || integer_type_p (TYPE_TARGET_TYPE (type)));
4182         default:
4183           return 0;
4184         }
4185     }
4186 }
4187
4188 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
4189
4190 static int
4191 scalar_type_p (struct type *type)
4192 {
4193   if (type == NULL)
4194     return 0;
4195   else
4196     {
4197       switch (TYPE_CODE (type))
4198         {
4199         case TYPE_CODE_INT:
4200         case TYPE_CODE_RANGE:
4201         case TYPE_CODE_ENUM:
4202         case TYPE_CODE_FLT:
4203           return 1;
4204         default:
4205           return 0;
4206         }
4207     }
4208 }
4209
4210 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
4211
4212 static int
4213 discrete_type_p (struct type *type)
4214 {
4215   if (type == NULL)
4216     return 0;
4217   else
4218     {
4219       switch (TYPE_CODE (type))
4220         {
4221         case TYPE_CODE_INT:
4222         case TYPE_CODE_RANGE:
4223         case TYPE_CODE_ENUM:
4224         case TYPE_CODE_BOOL:
4225           return 1;
4226         default:
4227           return 0;
4228         }
4229     }
4230 }
4231
4232 /* Returns non-zero if OP with operands in the vector ARGS could be
4233    a user-defined function.  Errs on the side of pre-defined operators
4234    (i.e., result 0).  */
4235
4236 static int
4237 possible_user_operator_p (enum exp_opcode op, struct value *args[])
4238 {
4239   struct type *type0 =
4240     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
4241   struct type *type1 =
4242     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
4243
4244   if (type0 == NULL)
4245     return 0;
4246
4247   switch (op)
4248     {
4249     default:
4250       return 0;
4251
4252     case BINOP_ADD:
4253     case BINOP_SUB:
4254     case BINOP_MUL:
4255     case BINOP_DIV:
4256       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
4257
4258     case BINOP_REM:
4259     case BINOP_MOD:
4260     case BINOP_BITWISE_AND:
4261     case BINOP_BITWISE_IOR:
4262     case BINOP_BITWISE_XOR:
4263       return (!(integer_type_p (type0) && integer_type_p (type1)));
4264
4265     case BINOP_EQUAL:
4266     case BINOP_NOTEQUAL:
4267     case BINOP_LESS:
4268     case BINOP_GTR:
4269     case BINOP_LEQ:
4270     case BINOP_GEQ:
4271       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4272
4273     case BINOP_CONCAT:
4274       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4275
4276     case BINOP_EXP:
4277       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4278
4279     case UNOP_NEG:
4280     case UNOP_PLUS:
4281     case UNOP_LOGICAL_NOT:
4282     case UNOP_ABS:
4283       return (!numeric_type_p (type0));
4284
4285     }
4286 }
4287 \f
4288                                 /* Renaming */
4289
4290 /* NOTES: 
4291
4292    1. In the following, we assume that a renaming type's name may
4293       have an ___XD suffix.  It would be nice if this went away at some
4294       point.
4295    2. We handle both the (old) purely type-based representation of 
4296       renamings and the (new) variable-based encoding.  At some point,
4297       it is devoutly to be hoped that the former goes away 
4298       (FIXME: hilfinger-2007-07-09).
4299    3. Subprogram renamings are not implemented, although the XRS
4300       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4301
4302 /* If SYM encodes a renaming, 
4303
4304        <renaming> renames <renamed entity>,
4305
4306    sets *LEN to the length of the renamed entity's name,
4307    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4308    the string describing the subcomponent selected from the renamed
4309    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4310    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4311    are undefined).  Otherwise, returns a value indicating the category
4312    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4313    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4314    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4315    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4316    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4317    may be NULL, in which case they are not assigned.
4318
4319    [Currently, however, GCC does not generate subprogram renamings.]  */
4320
4321 enum ada_renaming_category
4322 ada_parse_renaming (struct symbol *sym,
4323                     const char **renamed_entity, int *len, 
4324                     const char **renaming_expr)
4325 {
4326   enum ada_renaming_category kind;
4327   const char *info;
4328   const char *suffix;
4329
4330   if (sym == NULL)
4331     return ADA_NOT_RENAMING;
4332   switch (SYMBOL_CLASS (sym)) 
4333     {
4334     default:
4335       return ADA_NOT_RENAMING;
4336     case LOC_TYPEDEF:
4337       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4338                                        renamed_entity, len, renaming_expr);
4339     case LOC_LOCAL:
4340     case LOC_STATIC:
4341     case LOC_COMPUTED:
4342     case LOC_OPTIMIZED_OUT:
4343       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4344       if (info == NULL)
4345         return ADA_NOT_RENAMING;
4346       switch (info[5])
4347         {
4348         case '_':
4349           kind = ADA_OBJECT_RENAMING;
4350           info += 6;
4351           break;
4352         case 'E':
4353           kind = ADA_EXCEPTION_RENAMING;
4354           info += 7;
4355           break;
4356         case 'P':
4357           kind = ADA_PACKAGE_RENAMING;
4358           info += 7;
4359           break;
4360         case 'S':
4361           kind = ADA_SUBPROGRAM_RENAMING;
4362           info += 7;
4363           break;
4364         default:
4365           return ADA_NOT_RENAMING;
4366         }
4367     }
4368
4369   if (renamed_entity != NULL)
4370     *renamed_entity = info;
4371   suffix = strstr (info, "___XE");
4372   if (suffix == NULL || suffix == info)
4373     return ADA_NOT_RENAMING;
4374   if (len != NULL)
4375     *len = strlen (info) - strlen (suffix);
4376   suffix += 5;
4377   if (renaming_expr != NULL)
4378     *renaming_expr = suffix;
4379   return kind;
4380 }
4381
4382 /* Assuming TYPE encodes a renaming according to the old encoding in
4383    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4384    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4385    ADA_NOT_RENAMING otherwise.  */
4386 static enum ada_renaming_category
4387 parse_old_style_renaming (struct type *type,
4388                           const char **renamed_entity, int *len, 
4389                           const char **renaming_expr)
4390 {
4391   enum ada_renaming_category kind;
4392   const char *name;
4393   const char *info;
4394   const char *suffix;
4395
4396   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4397       || TYPE_NFIELDS (type) != 1)
4398     return ADA_NOT_RENAMING;
4399
4400   name = type_name_no_tag (type);
4401   if (name == NULL)
4402     return ADA_NOT_RENAMING;
4403   
4404   name = strstr (name, "___XR");
4405   if (name == NULL)
4406     return ADA_NOT_RENAMING;
4407   switch (name[5])
4408     {
4409     case '\0':
4410     case '_':
4411       kind = ADA_OBJECT_RENAMING;
4412       break;
4413     case 'E':
4414       kind = ADA_EXCEPTION_RENAMING;
4415       break;
4416     case 'P':
4417       kind = ADA_PACKAGE_RENAMING;
4418       break;
4419     case 'S':
4420       kind = ADA_SUBPROGRAM_RENAMING;
4421       break;
4422     default:
4423       return ADA_NOT_RENAMING;
4424     }
4425
4426   info = TYPE_FIELD_NAME (type, 0);
4427   if (info == NULL)
4428     return ADA_NOT_RENAMING;
4429   if (renamed_entity != NULL)
4430     *renamed_entity = info;
4431   suffix = strstr (info, "___XE");
4432   if (renaming_expr != NULL)
4433     *renaming_expr = suffix + 5;
4434   if (suffix == NULL || suffix == info)
4435     return ADA_NOT_RENAMING;
4436   if (len != NULL)
4437     *len = suffix - info;
4438   return kind;
4439 }
4440
4441 /* Compute the value of the given RENAMING_SYM, which is expected to
4442    be a symbol encoding a renaming expression.  BLOCK is the block
4443    used to evaluate the renaming.  */
4444
4445 static struct value *
4446 ada_read_renaming_var_value (struct symbol *renaming_sym,
4447                              const struct block *block)
4448 {
4449   const char *sym_name;
4450
4451   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4452   expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4453   return evaluate_expression (expr.get ());
4454 }
4455 \f
4456
4457                                 /* Evaluation: Function Calls */
4458
4459 /* Return an lvalue containing the value VAL.  This is the identity on
4460    lvalues, and otherwise has the side-effect of allocating memory
4461    in the inferior where a copy of the value contents is copied.  */
4462
4463 static struct value *
4464 ensure_lval (struct value *val)
4465 {
4466   if (VALUE_LVAL (val) == not_lval
4467       || VALUE_LVAL (val) == lval_internalvar)
4468     {
4469       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4470       const CORE_ADDR addr =
4471         value_as_long (value_allocate_space_in_inferior (len));
4472
4473       VALUE_LVAL (val) = lval_memory;
4474       set_value_address (val, addr);
4475       write_memory (addr, value_contents (val), len);
4476     }
4477
4478   return val;
4479 }
4480
4481 /* Return the value ACTUAL, converted to be an appropriate value for a
4482    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4483    allocating any necessary descriptors (fat pointers), or copies of
4484    values not residing in memory, updating it as needed.  */
4485
4486 struct value *
4487 ada_convert_actual (struct value *actual, struct type *formal_type0)
4488 {
4489   struct type *actual_type = ada_check_typedef (value_type (actual));
4490   struct type *formal_type = ada_check_typedef (formal_type0);
4491   struct type *formal_target =
4492     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4493     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4494   struct type *actual_target =
4495     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4496     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4497
4498   if (ada_is_array_descriptor_type (formal_target)
4499       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4500     return make_array_descriptor (formal_type, actual);
4501   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4502            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4503     {
4504       struct value *result;
4505
4506       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4507           && ada_is_array_descriptor_type (actual_target))
4508         result = desc_data (actual);
4509       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4510         {
4511           if (VALUE_LVAL (actual) != lval_memory)
4512             {
4513               struct value *val;
4514
4515               actual_type = ada_check_typedef (value_type (actual));
4516               val = allocate_value (actual_type);
4517               memcpy ((char *) value_contents_raw (val),
4518                       (char *) value_contents (actual),
4519                       TYPE_LENGTH (actual_type));
4520               actual = ensure_lval (val);
4521             }
4522           result = value_addr (actual);
4523         }
4524       else
4525         return actual;
4526       return value_cast_pointers (formal_type, result, 0);
4527     }
4528   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4529     return ada_value_ind (actual);
4530   else if (ada_is_aligner_type (formal_type))
4531     {
4532       /* We need to turn this parameter into an aligner type
4533          as well.  */
4534       struct value *aligner = allocate_value (formal_type);
4535       struct value *component = ada_value_struct_elt (aligner, "F", 0);
4536
4537       value_assign_to_component (aligner, component, actual);
4538       return aligner;
4539     }
4540
4541   return actual;
4542 }
4543
4544 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4545    type TYPE.  This is usually an inefficient no-op except on some targets
4546    (such as AVR) where the representation of a pointer and an address
4547    differs.  */
4548
4549 static CORE_ADDR
4550 value_pointer (struct value *value, struct type *type)
4551 {
4552   struct gdbarch *gdbarch = get_type_arch (type);
4553   unsigned len = TYPE_LENGTH (type);
4554   gdb_byte *buf = (gdb_byte *) alloca (len);
4555   CORE_ADDR addr;
4556
4557   addr = value_address (value);
4558   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4559   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4560   return addr;
4561 }
4562
4563
4564 /* Push a descriptor of type TYPE for array value ARR on the stack at
4565    *SP, updating *SP to reflect the new descriptor.  Return either
4566    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4567    to-descriptor type rather than a descriptor type), a struct value *
4568    representing a pointer to this descriptor.  */
4569
4570 static struct value *
4571 make_array_descriptor (struct type *type, struct value *arr)
4572 {
4573   struct type *bounds_type = desc_bounds_type (type);
4574   struct type *desc_type = desc_base_type (type);
4575   struct value *descriptor = allocate_value (desc_type);
4576   struct value *bounds = allocate_value (bounds_type);
4577   int i;
4578
4579   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4580        i > 0; i -= 1)
4581     {
4582       modify_field (value_type (bounds), value_contents_writeable (bounds),
4583                     ada_array_bound (arr, i, 0),
4584                     desc_bound_bitpos (bounds_type, i, 0),
4585                     desc_bound_bitsize (bounds_type, i, 0));
4586       modify_field (value_type (bounds), value_contents_writeable (bounds),
4587                     ada_array_bound (arr, i, 1),
4588                     desc_bound_bitpos (bounds_type, i, 1),
4589                     desc_bound_bitsize (bounds_type, i, 1));
4590     }
4591
4592   bounds = ensure_lval (bounds);
4593
4594   modify_field (value_type (descriptor),
4595                 value_contents_writeable (descriptor),
4596                 value_pointer (ensure_lval (arr),
4597                                TYPE_FIELD_TYPE (desc_type, 0)),
4598                 fat_pntr_data_bitpos (desc_type),
4599                 fat_pntr_data_bitsize (desc_type));
4600
4601   modify_field (value_type (descriptor),
4602                 value_contents_writeable (descriptor),
4603                 value_pointer (bounds,
4604                                TYPE_FIELD_TYPE (desc_type, 1)),
4605                 fat_pntr_bounds_bitpos (desc_type),
4606                 fat_pntr_bounds_bitsize (desc_type));
4607
4608   descriptor = ensure_lval (descriptor);
4609
4610   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4611     return value_addr (descriptor);
4612   else
4613     return descriptor;
4614 }
4615 \f
4616                                 /* Symbol Cache Module */
4617
4618 /* Performance measurements made as of 2010-01-15 indicate that
4619    this cache does bring some noticeable improvements.  Depending
4620    on the type of entity being printed, the cache can make it as much
4621    as an order of magnitude faster than without it.
4622
4623    The descriptive type DWARF extension has significantly reduced
4624    the need for this cache, at least when DWARF is being used.  However,
4625    even in this case, some expensive name-based symbol searches are still
4626    sometimes necessary - to find an XVZ variable, mostly.  */
4627
4628 /* Initialize the contents of SYM_CACHE.  */
4629
4630 static void
4631 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4632 {
4633   obstack_init (&sym_cache->cache_space);
4634   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4635 }
4636
4637 /* Free the memory used by SYM_CACHE.  */
4638
4639 static void
4640 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4641 {
4642   obstack_free (&sym_cache->cache_space, NULL);
4643   xfree (sym_cache);
4644 }
4645
4646 /* Return the symbol cache associated to the given program space PSPACE.
4647    If not allocated for this PSPACE yet, allocate and initialize one.  */
4648
4649 static struct ada_symbol_cache *
4650 ada_get_symbol_cache (struct program_space *pspace)
4651 {
4652   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4653
4654   if (pspace_data->sym_cache == NULL)
4655     {
4656       pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4657       ada_init_symbol_cache (pspace_data->sym_cache);
4658     }
4659
4660   return pspace_data->sym_cache;
4661 }
4662
4663 /* Clear all entries from the symbol cache.  */
4664
4665 static void
4666 ada_clear_symbol_cache (void)
4667 {
4668   struct ada_symbol_cache *sym_cache
4669     = ada_get_symbol_cache (current_program_space);
4670
4671   obstack_free (&sym_cache->cache_space, NULL);
4672   ada_init_symbol_cache (sym_cache);
4673 }
4674
4675 /* Search our cache for an entry matching NAME and DOMAIN.
4676    Return it if found, or NULL otherwise.  */
4677
4678 static struct cache_entry **
4679 find_entry (const char *name, domain_enum domain)
4680 {
4681   struct ada_symbol_cache *sym_cache
4682     = ada_get_symbol_cache (current_program_space);
4683   int h = msymbol_hash (name) % HASH_SIZE;
4684   struct cache_entry **e;
4685
4686   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4687     {
4688       if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
4689         return e;
4690     }
4691   return NULL;
4692 }
4693
4694 /* Search the symbol cache for an entry matching NAME and DOMAIN.
4695    Return 1 if found, 0 otherwise.
4696
4697    If an entry was found and SYM is not NULL, set *SYM to the entry's
4698    SYM.  Same principle for BLOCK if not NULL.  */
4699
4700 static int
4701 lookup_cached_symbol (const char *name, domain_enum domain,
4702                       struct symbol **sym, const struct block **block)
4703 {
4704   struct cache_entry **e = find_entry (name, domain);
4705
4706   if (e == NULL)
4707     return 0;
4708   if (sym != NULL)
4709     *sym = (*e)->sym;
4710   if (block != NULL)
4711     *block = (*e)->block;
4712   return 1;
4713 }
4714
4715 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4716    in domain DOMAIN, save this result in our symbol cache.  */
4717
4718 static void
4719 cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
4720               const struct block *block)
4721 {
4722   struct ada_symbol_cache *sym_cache
4723     = ada_get_symbol_cache (current_program_space);
4724   int h;
4725   char *copy;
4726   struct cache_entry *e;
4727
4728   /* Symbols for builtin types don't have a block.
4729      For now don't cache such symbols.  */
4730   if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4731     return;
4732
4733   /* If the symbol is a local symbol, then do not cache it, as a search
4734      for that symbol depends on the context.  To determine whether
4735      the symbol is local or not, we check the block where we found it
4736      against the global and static blocks of its associated symtab.  */
4737   if (sym
4738       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4739                             GLOBAL_BLOCK) != block
4740       && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4741                             STATIC_BLOCK) != block)
4742     return;
4743
4744   h = msymbol_hash (name) % HASH_SIZE;
4745   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4746                                             sizeof (*e));
4747   e->next = sym_cache->root[h];
4748   sym_cache->root[h] = e;
4749   e->name = copy
4750     = (char *) obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4751   strcpy (copy, name);
4752   e->sym = sym;
4753   e->domain = domain;
4754   e->block = block;
4755 }
4756 \f
4757                                 /* Symbol Lookup */
4758
4759 /* Return nonzero if wild matching should be used when searching for
4760    all symbols matching LOOKUP_NAME.
4761
4762    LOOKUP_NAME is expected to be a symbol name after transformation
4763    for Ada lookups (see ada_name_for_lookup).  */
4764
4765 static int
4766 should_use_wild_match (const char *lookup_name)
4767 {
4768   return (strstr (lookup_name, "__") == NULL);
4769 }
4770
4771 /* Return the result of a standard (literal, C-like) lookup of NAME in
4772    given DOMAIN, visible from lexical block BLOCK.  */
4773
4774 static struct symbol *
4775 standard_lookup (const char *name, const struct block *block,
4776                  domain_enum domain)
4777 {
4778   /* Initialize it just to avoid a GCC false warning.  */
4779   struct block_symbol sym = {NULL, NULL};
4780
4781   if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4782     return sym.symbol;
4783   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4784   cache_symbol (name, domain, sym.symbol, sym.block);
4785   return sym.symbol;
4786 }
4787
4788
4789 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4790    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4791    since they contend in overloading in the same way.  */
4792 static int
4793 is_nonfunction (struct block_symbol syms[], int n)
4794 {
4795   int i;
4796
4797   for (i = 0; i < n; i += 1)
4798     if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_FUNC
4799         && (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM
4800             || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
4801       return 1;
4802
4803   return 0;
4804 }
4805
4806 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4807    struct types.  Otherwise, they may not.  */
4808
4809 static int
4810 equiv_types (struct type *type0, struct type *type1)
4811 {
4812   if (type0 == type1)
4813     return 1;
4814   if (type0 == NULL || type1 == NULL
4815       || TYPE_CODE (type0) != TYPE_CODE (type1))
4816     return 0;
4817   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4818        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4819       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4820       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4821     return 1;
4822
4823   return 0;
4824 }
4825
4826 /* True iff SYM0 represents the same entity as SYM1, or one that is
4827    no more defined than that of SYM1.  */
4828
4829 static int
4830 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4831 {
4832   if (sym0 == sym1)
4833     return 1;
4834   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4835       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4836     return 0;
4837
4838   switch (SYMBOL_CLASS (sym0))
4839     {
4840     case LOC_UNDEF:
4841       return 1;
4842     case LOC_TYPEDEF:
4843       {
4844         struct type *type0 = SYMBOL_TYPE (sym0);
4845         struct type *type1 = SYMBOL_TYPE (sym1);
4846         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4847         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4848         int len0 = strlen (name0);
4849
4850         return
4851           TYPE_CODE (type0) == TYPE_CODE (type1)
4852           && (equiv_types (type0, type1)
4853               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4854                   && startswith (name1 + len0, "___XV")));
4855       }
4856     case LOC_CONST:
4857       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4858         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4859     default:
4860       return 0;
4861     }
4862 }
4863
4864 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
4865    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4866
4867 static void
4868 add_defn_to_vec (struct obstack *obstackp,
4869                  struct symbol *sym,
4870                  const struct block *block)
4871 {
4872   int i;
4873   struct block_symbol *prevDefns = defns_collected (obstackp, 0);
4874
4875   /* Do not try to complete stub types, as the debugger is probably
4876      already scanning all symbols matching a certain name at the
4877      time when this function is called.  Trying to replace the stub
4878      type by its associated full type will cause us to restart a scan
4879      which may lead to an infinite recursion.  Instead, the client
4880      collecting the matching symbols will end up collecting several
4881      matches, with at least one of them complete.  It can then filter
4882      out the stub ones if needed.  */
4883
4884   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4885     {
4886       if (lesseq_defined_than (sym, prevDefns[i].symbol))
4887         return;
4888       else if (lesseq_defined_than (prevDefns[i].symbol, sym))
4889         {
4890           prevDefns[i].symbol = sym;
4891           prevDefns[i].block = block;
4892           return;
4893         }
4894     }
4895
4896   {
4897     struct block_symbol info;
4898
4899     info.symbol = sym;
4900     info.block = block;
4901     obstack_grow (obstackp, &info, sizeof (struct block_symbol));
4902   }
4903 }
4904
4905 /* Number of block_symbol structures currently collected in current vector in
4906    OBSTACKP.  */
4907
4908 static int
4909 num_defns_collected (struct obstack *obstackp)
4910 {
4911   return obstack_object_size (obstackp) / sizeof (struct block_symbol);
4912 }
4913
4914 /* Vector of block_symbol structures currently collected in current vector in
4915    OBSTACKP.  If FINISH, close off the vector and return its final address.  */
4916
4917 static struct block_symbol *
4918 defns_collected (struct obstack *obstackp, int finish)
4919 {
4920   if (finish)
4921     return (struct block_symbol *) obstack_finish (obstackp);
4922   else
4923     return (struct block_symbol *) obstack_base (obstackp);
4924 }
4925
4926 /* Return a bound minimal symbol matching NAME according to Ada
4927    decoding rules.  Returns an invalid symbol if there is no such
4928    minimal symbol.  Names prefixed with "standard__" are handled
4929    specially: "standard__" is first stripped off, and only static and
4930    global symbols are searched.  */
4931
4932 struct bound_minimal_symbol
4933 ada_lookup_simple_minsym (const char *name)
4934 {
4935   struct bound_minimal_symbol result;
4936   struct objfile *objfile;
4937   struct minimal_symbol *msymbol;
4938   const int wild_match_p = should_use_wild_match (name);
4939
4940   memset (&result, 0, sizeof (result));
4941
4942   /* Special case: If the user specifies a symbol name inside package
4943      Standard, do a non-wild matching of the symbol name without
4944      the "standard__" prefix.  This was primarily introduced in order
4945      to allow the user to specifically access the standard exceptions
4946      using, for instance, Standard.Constraint_Error when Constraint_Error
4947      is ambiguous (due to the user defining its own Constraint_Error
4948      entity inside its program).  */
4949   if (startswith (name, "standard__"))
4950     name += sizeof ("standard__") - 1;
4951
4952   ALL_MSYMBOLS (objfile, msymbol)
4953   {
4954     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4955         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4956       {
4957         result.minsym = msymbol;
4958         result.objfile = objfile;
4959         break;
4960       }
4961   }
4962
4963   return result;
4964 }
4965
4966 /* For all subprograms that statically enclose the subprogram of the
4967    selected frame, add symbols matching identifier NAME in DOMAIN
4968    and their blocks to the list of data in OBSTACKP, as for
4969    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4970    with a wildcard prefix.  */
4971
4972 static void
4973 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4974                                   const char *name, domain_enum domain,
4975                                   int wild_match_p)
4976 {
4977 }
4978
4979 /* True if TYPE is definitely an artificial type supplied to a symbol
4980    for which no debugging information was given in the symbol file.  */
4981
4982 static int
4983 is_nondebugging_type (struct type *type)
4984 {
4985   const char *name = ada_type_name (type);
4986
4987   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4988 }
4989
4990 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4991    that are deemed "identical" for practical purposes.
4992
4993    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4994    types and that their number of enumerals is identical (in other
4995    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4996
4997 static int
4998 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4999 {
5000   int i;
5001
5002   /* The heuristic we use here is fairly conservative.  We consider
5003      that 2 enumerate types are identical if they have the same
5004      number of enumerals and that all enumerals have the same
5005      underlying value and name.  */
5006
5007   /* All enums in the type should have an identical underlying value.  */
5008   for (i = 0; i < TYPE_NFIELDS (type1); i++)
5009     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
5010       return 0;
5011
5012   /* All enumerals should also have the same name (modulo any numerical
5013      suffix).  */
5014   for (i = 0; i < TYPE_NFIELDS (type1); i++)
5015     {
5016       const char *name_1 = TYPE_FIELD_NAME (type1, i);
5017       const char *name_2 = TYPE_FIELD_NAME (type2, i);
5018       int len_1 = strlen (name_1);
5019       int len_2 = strlen (name_2);
5020
5021       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
5022       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
5023       if (len_1 != len_2
5024           || strncmp (TYPE_FIELD_NAME (type1, i),
5025                       TYPE_FIELD_NAME (type2, i),
5026                       len_1) != 0)
5027         return 0;
5028     }
5029
5030   return 1;
5031 }
5032
5033 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
5034    that are deemed "identical" for practical purposes.  Sometimes,
5035    enumerals are not strictly identical, but their types are so similar
5036    that they can be considered identical.
5037
5038    For instance, consider the following code:
5039
5040       type Color is (Black, Red, Green, Blue, White);
5041       type RGB_Color is new Color range Red .. Blue;
5042
5043    Type RGB_Color is a subrange of an implicit type which is a copy
5044    of type Color. If we call that implicit type RGB_ColorB ("B" is
5045    for "Base Type"), then type RGB_ColorB is a copy of type Color.
5046    As a result, when an expression references any of the enumeral
5047    by name (Eg. "print green"), the expression is technically
5048    ambiguous and the user should be asked to disambiguate. But
5049    doing so would only hinder the user, since it wouldn't matter
5050    what choice he makes, the outcome would always be the same.
5051    So, for practical purposes, we consider them as the same.  */
5052
5053 static int
5054 symbols_are_identical_enums (struct block_symbol *syms, int nsyms)
5055 {
5056   int i;
5057
5058   /* Before performing a thorough comparison check of each type,
5059      we perform a series of inexpensive checks.  We expect that these
5060      checks will quickly fail in the vast majority of cases, and thus
5061      help prevent the unnecessary use of a more expensive comparison.
5062      Said comparison also expects us to make some of these checks
5063      (see ada_identical_enum_types_p).  */
5064
5065   /* Quick check: All symbols should have an enum type.  */
5066   for (i = 0; i < nsyms; i++)
5067     if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM)
5068       return 0;
5069
5070   /* Quick check: They should all have the same value.  */
5071   for (i = 1; i < nsyms; i++)
5072     if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
5073       return 0;
5074
5075   /* Quick check: They should all have the same number of enumerals.  */
5076   for (i = 1; i < nsyms; i++)
5077     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].symbol))
5078         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].symbol)))
5079       return 0;
5080
5081   /* All the sanity checks passed, so we might have a set of
5082      identical enumeration types.  Perform a more complete
5083      comparison of the type of each symbol.  */
5084   for (i = 1; i < nsyms; i++)
5085     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
5086                                      SYMBOL_TYPE (syms[0].symbol)))
5087       return 0;
5088
5089   return 1;
5090 }
5091
5092 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
5093    duplicate other symbols in the list (The only case I know of where
5094    this happens is when object files containing stabs-in-ecoff are
5095    linked with files containing ordinary ecoff debugging symbols (or no
5096    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
5097    Returns the number of items in the modified list.  */
5098
5099 static int
5100 remove_extra_symbols (struct block_symbol *syms, int nsyms)
5101 {
5102   int i, j;
5103
5104   /* We should never be called with less than 2 symbols, as there
5105      cannot be any extra symbol in that case.  But it's easy to
5106      handle, since we have nothing to do in that case.  */
5107   if (nsyms < 2)
5108     return nsyms;
5109
5110   i = 0;
5111   while (i < nsyms)
5112     {
5113       int remove_p = 0;
5114
5115       /* If two symbols have the same name and one of them is a stub type,
5116          the get rid of the stub.  */
5117
5118       if (TYPE_STUB (SYMBOL_TYPE (syms[i].symbol))
5119           && SYMBOL_LINKAGE_NAME (syms[i].symbol) != NULL)
5120         {
5121           for (j = 0; j < nsyms; j++)
5122             {
5123               if (j != i
5124                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].symbol))
5125                   && SYMBOL_LINKAGE_NAME (syms[j].symbol) != NULL
5126                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].symbol),
5127                              SYMBOL_LINKAGE_NAME (syms[j].symbol)) == 0)
5128                 remove_p = 1;
5129             }
5130         }
5131
5132       /* Two symbols with the same name, same class and same address
5133          should be identical.  */
5134
5135       else if (SYMBOL_LINKAGE_NAME (syms[i].symbol) != NULL
5136           && SYMBOL_CLASS (syms[i].symbol) == LOC_STATIC
5137           && is_nondebugging_type (SYMBOL_TYPE (syms[i].symbol)))
5138         {
5139           for (j = 0; j < nsyms; j += 1)
5140             {
5141               if (i != j
5142                   && SYMBOL_LINKAGE_NAME (syms[j].symbol) != NULL
5143                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].symbol),
5144                              SYMBOL_LINKAGE_NAME (syms[j].symbol)) == 0
5145                   && SYMBOL_CLASS (syms[i].symbol)
5146                        == SYMBOL_CLASS (syms[j].symbol)
5147                   && SYMBOL_VALUE_ADDRESS (syms[i].symbol)
5148                   == SYMBOL_VALUE_ADDRESS (syms[j].symbol))
5149                 remove_p = 1;
5150             }
5151         }
5152       
5153       if (remove_p)
5154         {
5155           for (j = i + 1; j < nsyms; j += 1)
5156             syms[j - 1] = syms[j];
5157           nsyms -= 1;
5158         }
5159
5160       i += 1;
5161     }
5162
5163   /* If all the remaining symbols are identical enumerals, then
5164      just keep the first one and discard the rest.
5165
5166      Unlike what we did previously, we do not discard any entry
5167      unless they are ALL identical.  This is because the symbol
5168      comparison is not a strict comparison, but rather a practical
5169      comparison.  If all symbols are considered identical, then
5170      we can just go ahead and use the first one and discard the rest.
5171      But if we cannot reduce the list to a single element, we have
5172      to ask the user to disambiguate anyways.  And if we have to
5173      present a multiple-choice menu, it's less confusing if the list
5174      isn't missing some choices that were identical and yet distinct.  */
5175   if (symbols_are_identical_enums (syms, nsyms))
5176     nsyms = 1;
5177
5178   return nsyms;
5179 }
5180
5181 /* Given a type that corresponds to a renaming entity, use the type name
5182    to extract the scope (package name or function name, fully qualified,
5183    and following the GNAT encoding convention) where this renaming has been
5184    defined.  The string returned needs to be deallocated after use.  */
5185
5186 static char *
5187 xget_renaming_scope (struct type *renaming_type)
5188 {
5189   /* The renaming types adhere to the following convention:
5190      <scope>__<rename>___<XR extension>.
5191      So, to extract the scope, we search for the "___XR" extension,
5192      and then backtrack until we find the first "__".  */
5193
5194   const char *name = type_name_no_tag (renaming_type);
5195   const char *suffix = strstr (name, "___XR");
5196   const char *last;
5197   int scope_len;
5198   char *scope;
5199
5200   /* Now, backtrack a bit until we find the first "__".  Start looking
5201      at suffix - 3, as the <rename> part is at least one character long.  */
5202
5203   for (last = suffix - 3; last > name; last--)
5204     if (last[0] == '_' && last[1] == '_')
5205       break;
5206
5207   /* Make a copy of scope and return it.  */
5208
5209   scope_len = last - name;
5210   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
5211
5212   strncpy (scope, name, scope_len);
5213   scope[scope_len] = '\0';
5214
5215   return scope;
5216 }
5217
5218 /* Return nonzero if NAME corresponds to a package name.  */
5219
5220 static int
5221 is_package_name (const char *name)
5222 {
5223   /* Here, We take advantage of the fact that no symbols are generated
5224      for packages, while symbols are generated for each function.
5225      So the condition for NAME represent a package becomes equivalent
5226      to NAME not existing in our list of symbols.  There is only one
5227      small complication with library-level functions (see below).  */
5228
5229   char *fun_name;
5230
5231   /* If it is a function that has not been defined at library level,
5232      then we should be able to look it up in the symbols.  */
5233   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5234     return 0;
5235
5236   /* Library-level function names start with "_ada_".  See if function
5237      "_ada_" followed by NAME can be found.  */
5238
5239   /* Do a quick check that NAME does not contain "__", since library-level
5240      functions names cannot contain "__" in them.  */
5241   if (strstr (name, "__") != NULL)
5242     return 0;
5243
5244   fun_name = xstrprintf ("_ada_%s", name);
5245
5246   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
5247 }
5248
5249 /* Return nonzero if SYM corresponds to a renaming entity that is
5250    not visible from FUNCTION_NAME.  */
5251
5252 static int
5253 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
5254 {
5255   char *scope;
5256   struct cleanup *old_chain;
5257
5258   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5259     return 0;
5260
5261   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
5262   old_chain = make_cleanup (xfree, scope);
5263
5264   /* If the rename has been defined in a package, then it is visible.  */
5265   if (is_package_name (scope))
5266     {
5267       do_cleanups (old_chain);
5268       return 0;
5269     }
5270
5271   /* Check that the rename is in the current function scope by checking
5272      that its name starts with SCOPE.  */
5273
5274   /* If the function name starts with "_ada_", it means that it is
5275      a library-level function.  Strip this prefix before doing the
5276      comparison, as the encoding for the renaming does not contain
5277      this prefix.  */
5278   if (startswith (function_name, "_ada_"))
5279     function_name += 5;
5280
5281   {
5282     int is_invisible = !startswith (function_name, scope);
5283
5284     do_cleanups (old_chain);
5285     return is_invisible;
5286   }
5287 }
5288
5289 /* Remove entries from SYMS that corresponds to a renaming entity that
5290    is not visible from the function associated with CURRENT_BLOCK or
5291    that is superfluous due to the presence of more specific renaming
5292    information.  Places surviving symbols in the initial entries of
5293    SYMS and returns the number of surviving symbols.
5294    
5295    Rationale:
5296    First, in cases where an object renaming is implemented as a
5297    reference variable, GNAT may produce both the actual reference
5298    variable and the renaming encoding.  In this case, we discard the
5299    latter.
5300
5301    Second, GNAT emits a type following a specified encoding for each renaming
5302    entity.  Unfortunately, STABS currently does not support the definition
5303    of types that are local to a given lexical block, so all renamings types
5304    are emitted at library level.  As a consequence, if an application
5305    contains two renaming entities using the same name, and a user tries to
5306    print the value of one of these entities, the result of the ada symbol
5307    lookup will also contain the wrong renaming type.
5308
5309    This function partially covers for this limitation by attempting to
5310    remove from the SYMS list renaming symbols that should be visible
5311    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5312    method with the current information available.  The implementation
5313    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5314    
5315       - When the user tries to print a rename in a function while there
5316         is another rename entity defined in a package:  Normally, the
5317         rename in the function has precedence over the rename in the
5318         package, so the latter should be removed from the list.  This is
5319         currently not the case.
5320         
5321       - This function will incorrectly remove valid renames if
5322         the CURRENT_BLOCK corresponds to a function which symbol name
5323         has been changed by an "Export" pragma.  As a consequence,
5324         the user will be unable to print such rename entities.  */
5325
5326 static int
5327 remove_irrelevant_renamings (struct block_symbol *syms,
5328                              int nsyms, const struct block *current_block)
5329 {
5330   struct symbol *current_function;
5331   const char *current_function_name;
5332   int i;
5333   int is_new_style_renaming;
5334
5335   /* If there is both a renaming foo___XR... encoded as a variable and
5336      a simple variable foo in the same block, discard the latter.
5337      First, zero out such symbols, then compress.  */
5338   is_new_style_renaming = 0;
5339   for (i = 0; i < nsyms; i += 1)
5340     {
5341       struct symbol *sym = syms[i].symbol;
5342       const struct block *block = syms[i].block;
5343       const char *name;
5344       const char *suffix;
5345
5346       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5347         continue;
5348       name = SYMBOL_LINKAGE_NAME (sym);
5349       suffix = strstr (name, "___XR");
5350
5351       if (suffix != NULL)
5352         {
5353           int name_len = suffix - name;
5354           int j;
5355
5356           is_new_style_renaming = 1;
5357           for (j = 0; j < nsyms; j += 1)
5358             if (i != j && syms[j].symbol != NULL
5359                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].symbol),
5360                             name_len) == 0
5361                 && block == syms[j].block)
5362               syms[j].symbol = NULL;
5363         }
5364     }
5365   if (is_new_style_renaming)
5366     {
5367       int j, k;
5368
5369       for (j = k = 0; j < nsyms; j += 1)
5370         if (syms[j].symbol != NULL)
5371             {
5372               syms[k] = syms[j];
5373               k += 1;
5374             }
5375       return k;
5376     }
5377
5378   /* Extract the function name associated to CURRENT_BLOCK.
5379      Abort if unable to do so.  */
5380
5381   if (current_block == NULL)
5382     return nsyms;
5383
5384   current_function = block_linkage_function (current_block);
5385   if (current_function == NULL)
5386     return nsyms;
5387
5388   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5389   if (current_function_name == NULL)
5390     return nsyms;
5391
5392   /* Check each of the symbols, and remove it from the list if it is
5393      a type corresponding to a renaming that is out of the scope of
5394      the current block.  */
5395
5396   i = 0;
5397   while (i < nsyms)
5398     {
5399       if (ada_parse_renaming (syms[i].symbol, NULL, NULL, NULL)
5400           == ADA_OBJECT_RENAMING
5401           && old_renaming_is_invisible (syms[i].symbol, current_function_name))
5402         {
5403           int j;
5404
5405           for (j = i + 1; j < nsyms; j += 1)
5406             syms[j - 1] = syms[j];
5407           nsyms -= 1;
5408         }
5409       else
5410         i += 1;
5411     }
5412
5413   return nsyms;
5414 }
5415
5416 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5417    whose name and domain match NAME and DOMAIN respectively.
5418    If no match was found, then extend the search to "enclosing"
5419    routines (in other words, if we're inside a nested function,
5420    search the symbols defined inside the enclosing functions).
5421    If WILD_MATCH_P is nonzero, perform the naming matching in
5422    "wild" mode (see function "wild_match" for more info).
5423
5424    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5425
5426 static void
5427 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5428                        const struct block *block, domain_enum domain,
5429                        int wild_match_p)
5430 {
5431   int block_depth = 0;
5432
5433   while (block != NULL)
5434     {
5435       block_depth += 1;
5436       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5437                              wild_match_p);
5438
5439       /* If we found a non-function match, assume that's the one.  */
5440       if (is_nonfunction (defns_collected (obstackp, 0),
5441                           num_defns_collected (obstackp)))
5442         return;
5443
5444       block = BLOCK_SUPERBLOCK (block);
5445     }
5446
5447   /* If no luck so far, try to find NAME as a local symbol in some lexically
5448      enclosing subprogram.  */
5449   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5450     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5451 }
5452
5453 /* An object of this type is used as the user_data argument when
5454    calling the map_matching_symbols method.  */
5455
5456 struct match_data
5457 {
5458   struct objfile *objfile;
5459   struct obstack *obstackp;
5460   struct symbol *arg_sym;
5461   int found_sym;
5462 };
5463
5464 /* A callback for add_nonlocal_symbols that adds SYM, found in BLOCK,
5465    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5466    containing the obstack that collects the symbol list, the file that SYM
5467    must come from, a flag indicating whether a non-argument symbol has
5468    been found in the current block, and the last argument symbol
5469    passed in SYM within the current block (if any).  When SYM is null,
5470    marking the end of a block, the argument symbol is added if no
5471    other has been found.  */
5472
5473 static int
5474 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5475 {
5476   struct match_data *data = (struct match_data *) data0;
5477   
5478   if (sym == NULL)
5479     {
5480       if (!data->found_sym && data->arg_sym != NULL) 
5481         add_defn_to_vec (data->obstackp,
5482                          fixup_symbol_section (data->arg_sym, data->objfile),
5483                          block);
5484       data->found_sym = 0;
5485       data->arg_sym = NULL;
5486     }
5487   else 
5488     {
5489       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5490         return 0;
5491       else if (SYMBOL_IS_ARGUMENT (sym))
5492         data->arg_sym = sym;
5493       else
5494         {
5495           data->found_sym = 1;
5496           add_defn_to_vec (data->obstackp,
5497                            fixup_symbol_section (sym, data->objfile),
5498                            block);
5499         }
5500     }
5501   return 0;
5502 }
5503
5504 /* Helper for add_nonlocal_symbols.  Find symbols in DOMAIN which are targetted
5505    by renamings matching NAME in BLOCK.  Add these symbols to OBSTACKP.  If
5506    WILD_MATCH_P is nonzero, perform the naming matching in "wild" mode (see
5507    function "wild_match" for more information).  Return whether we found such
5508    symbols.  */
5509
5510 static int
5511 ada_add_block_renamings (struct obstack *obstackp,
5512                          const struct block *block,
5513                          const char *name,
5514                          domain_enum domain,
5515                          int wild_match_p)
5516 {
5517   struct using_direct *renaming;
5518   int defns_mark = num_defns_collected (obstackp);
5519
5520   for (renaming = block_using (block);
5521        renaming != NULL;
5522        renaming = renaming->next)
5523     {
5524       const char *r_name;
5525       int name_match;
5526
5527       /* Avoid infinite recursions: skip this renaming if we are actually
5528          already traversing it.
5529
5530          Currently, symbol lookup in Ada don't use the namespace machinery from
5531          C++/Fortran support: skip namespace imports that use them.  */
5532       if (renaming->searched
5533           || (renaming->import_src != NULL
5534               && renaming->import_src[0] != '\0')
5535           || (renaming->import_dest != NULL
5536               && renaming->import_dest[0] != '\0'))
5537         continue;
5538       renaming->searched = 1;
5539
5540       /* TODO: here, we perform another name-based symbol lookup, which can
5541          pull its own multiple overloads.  In theory, we should be able to do
5542          better in this case since, in DWARF, DW_AT_import is a DIE reference,
5543          not a simple name.  But in order to do this, we would need to enhance
5544          the DWARF reader to associate a symbol to this renaming, instead of a
5545          name.  So, for now, we do something simpler: re-use the C++/Fortran
5546          namespace machinery.  */
5547       r_name = (renaming->alias != NULL
5548                 ? renaming->alias
5549                 : renaming->declaration);
5550       name_match
5551         = wild_match_p ? wild_match (r_name, name) : strcmp (r_name, name);
5552       if (name_match == 0)
5553         ada_add_all_symbols (obstackp, block, renaming->declaration, domain,
5554                              1, NULL);
5555       renaming->searched = 0;
5556     }
5557   return num_defns_collected (obstackp) != defns_mark;
5558 }
5559
5560 /* Implements compare_names, but only applying the comparision using
5561    the given CASING.  */
5562
5563 static int
5564 compare_names_with_case (const char *string1, const char *string2,
5565                          enum case_sensitivity casing)
5566 {
5567   while (*string1 != '\0' && *string2 != '\0')
5568     {
5569       char c1, c2;
5570
5571       if (isspace (*string1) || isspace (*string2))
5572         return strcmp_iw_ordered (string1, string2);
5573
5574       if (casing == case_sensitive_off)
5575         {
5576           c1 = tolower (*string1);
5577           c2 = tolower (*string2);
5578         }
5579       else
5580         {
5581           c1 = *string1;
5582           c2 = *string2;
5583         }
5584       if (c1 != c2)
5585         break;
5586
5587       string1 += 1;
5588       string2 += 1;
5589     }
5590
5591   switch (*string1)
5592     {
5593     case '(':
5594       return strcmp_iw_ordered (string1, string2);
5595     case '_':
5596       if (*string2 == '\0')
5597         {
5598           if (is_name_suffix (string1))
5599             return 0;
5600           else
5601             return 1;
5602         }
5603       /* FALLTHROUGH */
5604     default:
5605       if (*string2 == '(')
5606         return strcmp_iw_ordered (string1, string2);
5607       else
5608         {
5609           if (casing == case_sensitive_off)
5610             return tolower (*string1) - tolower (*string2);
5611           else
5612             return *string1 - *string2;
5613         }
5614     }
5615 }
5616
5617 /* Compare STRING1 to STRING2, with results as for strcmp.
5618    Compatible with strcmp_iw_ordered in that...
5619
5620        strcmp_iw_ordered (STRING1, STRING2) <= 0
5621
5622    ... implies...
5623
5624        compare_names (STRING1, STRING2) <= 0
5625
5626    (they may differ as to what symbols compare equal).  */
5627
5628 static int
5629 compare_names (const char *string1, const char *string2)
5630 {
5631   int result;
5632
5633   /* Similar to what strcmp_iw_ordered does, we need to perform
5634      a case-insensitive comparison first, and only resort to
5635      a second, case-sensitive, comparison if the first one was
5636      not sufficient to differentiate the two strings.  */
5637
5638   result = compare_names_with_case (string1, string2, case_sensitive_off);
5639   if (result == 0)
5640     result = compare_names_with_case (string1, string2, case_sensitive_on);
5641
5642   return result;
5643 }
5644
5645 /* Add to OBSTACKP all non-local symbols whose name and domain match
5646    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5647    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5648
5649 static void
5650 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5651                       domain_enum domain, int global,
5652                       int is_wild_match)
5653 {
5654   struct objfile *objfile;
5655   struct compunit_symtab *cu;
5656   struct match_data data;
5657
5658   memset (&data, 0, sizeof data);
5659   data.obstackp = obstackp;
5660
5661   ALL_OBJFILES (objfile)
5662     {
5663       data.objfile = objfile;
5664
5665       if (is_wild_match)
5666         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5667                                                aux_add_nonlocal_symbols, &data,
5668                                                wild_match, NULL);
5669       else
5670         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5671                                                aux_add_nonlocal_symbols, &data,
5672                                                full_match, compare_names);
5673
5674       ALL_OBJFILE_COMPUNITS (objfile, cu)
5675         {
5676           const struct block *global_block
5677             = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5678
5679           if (ada_add_block_renamings (obstackp, global_block , name, domain,
5680                                        is_wild_match))
5681             data.found_sym = 1;
5682         }
5683     }
5684
5685   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5686     {
5687       ALL_OBJFILES (objfile)
5688         {
5689           char *name1 = (char *) alloca (strlen (name) + sizeof ("_ada_"));
5690           strcpy (name1, "_ada_");
5691           strcpy (name1 + sizeof ("_ada_") - 1, name);
5692           data.objfile = objfile;
5693           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5694                                                  global,
5695                                                  aux_add_nonlocal_symbols,
5696                                                  &data,
5697                                                  full_match, compare_names);
5698         }
5699     }           
5700 }
5701
5702 /* Find symbols in DOMAIN matching NAME, in BLOCK and, if FULL_SEARCH is
5703    non-zero, enclosing scope and in global scopes, returning the number of
5704    matches.  Add these to OBSTACKP.
5705
5706    When FULL_SEARCH is non-zero, any non-function/non-enumeral
5707    symbol match within the nest of blocks whose innermost member is BLOCK,
5708    is the one match returned (no other matches in that or
5709    enclosing blocks is returned).  If there are any matches in or
5710    surrounding BLOCK, then these alone are returned.
5711
5712    Names prefixed with "standard__" are handled specially: "standard__"
5713    is first stripped off, and only static and global symbols are searched.
5714
5715    If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5716    to lookup global symbols.  */
5717
5718 static void
5719 ada_add_all_symbols (struct obstack *obstackp,
5720                      const struct block *block,
5721                      const char *name,
5722                      domain_enum domain,
5723                      int full_search,
5724                      int *made_global_lookup_p)
5725 {
5726   struct symbol *sym;
5727   const int wild_match_p = should_use_wild_match (name);
5728
5729   if (made_global_lookup_p)
5730     *made_global_lookup_p = 0;
5731
5732   /* Special case: If the user specifies a symbol name inside package
5733      Standard, do a non-wild matching of the symbol name without
5734      the "standard__" prefix.  This was primarily introduced in order
5735      to allow the user to specifically access the standard exceptions
5736      using, for instance, Standard.Constraint_Error when Constraint_Error
5737      is ambiguous (due to the user defining its own Constraint_Error
5738      entity inside its program).  */
5739   if (startswith (name, "standard__"))
5740     {
5741       block = NULL;
5742       name = name + sizeof ("standard__") - 1;
5743     }
5744
5745   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5746
5747   if (block != NULL)
5748     {
5749       if (full_search)
5750         ada_add_local_symbols (obstackp, name, block, domain, wild_match_p);
5751       else
5752         {
5753           /* In the !full_search case we're are being called by
5754              ada_iterate_over_symbols, and we don't want to search
5755              superblocks.  */
5756           ada_add_block_symbols (obstackp, block, name, domain, NULL,
5757                                  wild_match_p);
5758         }
5759       if (num_defns_collected (obstackp) > 0 || !full_search)
5760         return;
5761     }
5762
5763   /* No non-global symbols found.  Check our cache to see if we have
5764      already performed this search before.  If we have, then return
5765      the same result.  */
5766
5767   if (lookup_cached_symbol (name, domain, &sym, &block))
5768     {
5769       if (sym != NULL)
5770         add_defn_to_vec (obstackp, sym, block);
5771       return;
5772     }
5773
5774   if (made_global_lookup_p)
5775     *made_global_lookup_p = 1;
5776
5777   /* Search symbols from all global blocks.  */
5778  
5779   add_nonlocal_symbols (obstackp, name, domain, 1, wild_match_p);
5780
5781   /* Now add symbols from all per-file blocks if we've gotten no hits
5782      (not strictly correct, but perhaps better than an error).  */
5783
5784   if (num_defns_collected (obstackp) == 0)
5785     add_nonlocal_symbols (obstackp, name, domain, 0, wild_match_p);
5786 }
5787
5788 /* Find symbols in DOMAIN matching NAME, in BLOCK and, if full_search is
5789    non-zero, enclosing scope and in global scopes, returning the number of
5790    matches.
5791    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5792    indicating the symbols found and the blocks and symbol tables (if
5793    any) in which they were found.  This vector is transient---good only to
5794    the next call of ada_lookup_symbol_list.
5795
5796    When full_search is non-zero, any non-function/non-enumeral
5797    symbol match within the nest of blocks whose innermost member is BLOCK,
5798    is the one match returned (no other matches in that or
5799    enclosing blocks is returned).  If there are any matches in or
5800    surrounding BLOCK, then these alone are returned.
5801
5802    Names prefixed with "standard__" are handled specially: "standard__"
5803    is first stripped off, and only static and global symbols are searched.  */
5804
5805 static int
5806 ada_lookup_symbol_list_worker (const char *name, const struct block *block,
5807                                domain_enum domain,
5808                                struct block_symbol **results,
5809                                int full_search)
5810 {
5811   const int wild_match_p = should_use_wild_match (name);
5812   int syms_from_global_search;
5813   int ndefns;
5814
5815   obstack_free (&symbol_list_obstack, NULL);
5816   obstack_init (&symbol_list_obstack);
5817   ada_add_all_symbols (&symbol_list_obstack, block, name, domain,
5818                        full_search, &syms_from_global_search);
5819
5820   ndefns = num_defns_collected (&symbol_list_obstack);
5821   *results = defns_collected (&symbol_list_obstack, 1);
5822
5823   ndefns = remove_extra_symbols (*results, ndefns);
5824
5825   if (ndefns == 0 && full_search && syms_from_global_search)
5826     cache_symbol (name, domain, NULL, NULL);
5827
5828   if (ndefns == 1 && full_search && syms_from_global_search)
5829     cache_symbol (name, domain, (*results)[0].symbol, (*results)[0].block);
5830
5831   ndefns = remove_irrelevant_renamings (*results, ndefns, block);
5832   return ndefns;
5833 }
5834
5835 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5836    in global scopes, returning the number of matches, and setting *RESULTS
5837    to a vector of (SYM,BLOCK) tuples.
5838    See ada_lookup_symbol_list_worker for further details.  */
5839
5840 int
5841 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5842                         domain_enum domain, struct block_symbol **results)
5843 {
5844   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5845 }
5846
5847 /* Implementation of the la_iterate_over_symbols method.  */
5848
5849 static void
5850 ada_iterate_over_symbols
5851   (const struct block *block, const char *name, domain_enum domain,
5852    gdb::function_view<symbol_found_callback_ftype> callback)
5853 {
5854   int ndefs, i;
5855   struct block_symbol *results;
5856
5857   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5858   for (i = 0; i < ndefs; ++i)
5859     {
5860       if (!callback (results[i].symbol))
5861         break;
5862     }
5863 }
5864
5865 /* If NAME is the name of an entity, return a string that should
5866    be used to look that entity up in Ada units.
5867
5868    NAME can have any form that the "break" or "print" commands might
5869    recognize.  In other words, it does not have to be the "natural"
5870    name, or the "encoded" name.  */
5871
5872 std::string
5873 ada_name_for_lookup (const char *name)
5874 {
5875   int nlen = strlen (name);
5876
5877   if (name[0] == '<' && name[nlen - 1] == '>')
5878     return std::string (name + 1, nlen - 2);
5879   else
5880     return ada_encode (ada_fold_name (name));
5881 }
5882
5883 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5884    to 1, but choosing the first symbol found if there are multiple
5885    choices.
5886
5887    The result is stored in *INFO, which must be non-NULL.
5888    If no match is found, INFO->SYM is set to NULL.  */
5889
5890 void
5891 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5892                            domain_enum domain,
5893                            struct block_symbol *info)
5894 {
5895   struct block_symbol *candidates;
5896   int n_candidates;
5897
5898   gdb_assert (info != NULL);
5899   memset (info, 0, sizeof (struct block_symbol));
5900
5901   n_candidates = ada_lookup_symbol_list (name, block, domain, &candidates);
5902   if (n_candidates == 0)
5903     return;
5904
5905   *info = candidates[0];
5906   info->symbol = fixup_symbol_section (info->symbol, NULL);
5907 }
5908
5909 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5910    scope and in global scopes, or NULL if none.  NAME is folded and
5911    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5912    choosing the first symbol if there are multiple choices.
5913    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5914
5915 struct block_symbol
5916 ada_lookup_symbol (const char *name, const struct block *block0,
5917                    domain_enum domain, int *is_a_field_of_this)
5918 {
5919   struct block_symbol info;
5920
5921   if (is_a_field_of_this != NULL)
5922     *is_a_field_of_this = 0;
5923
5924   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5925                              block0, domain, &info);
5926   return info;
5927 }
5928
5929 static struct block_symbol
5930 ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5931                             const char *name,
5932                             const struct block *block,
5933                             const domain_enum domain)
5934 {
5935   struct block_symbol sym;
5936
5937   sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5938   if (sym.symbol != NULL)
5939     return sym;
5940
5941   /* If we haven't found a match at this point, try the primitive
5942      types.  In other languages, this search is performed before
5943      searching for global symbols in order to short-circuit that
5944      global-symbol search if it happens that the name corresponds
5945      to a primitive type.  But we cannot do the same in Ada, because
5946      it is perfectly legitimate for a program to declare a type which
5947      has the same name as a standard type.  If looking up a type in
5948      that situation, we have traditionally ignored the primitive type
5949      in favor of user-defined types.  This is why, unlike most other
5950      languages, we search the primitive types this late and only after
5951      having searched the global symbols without success.  */
5952
5953   if (domain == VAR_DOMAIN)
5954     {
5955       struct gdbarch *gdbarch;
5956
5957       if (block == NULL)
5958         gdbarch = target_gdbarch ();
5959       else
5960         gdbarch = block_gdbarch (block);
5961       sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5962       if (sym.symbol != NULL)
5963         return sym;
5964     }
5965
5966   return (struct block_symbol) {NULL, NULL};
5967 }
5968
5969
5970 /* True iff STR is a possible encoded suffix of a normal Ada name
5971    that is to be ignored for matching purposes.  Suffixes of parallel
5972    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5973    are given by any of the regular expressions:
5974
5975    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5976    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5977    TKB              [subprogram suffix for task bodies]
5978    _E[0-9]+[bs]$    [protected object entry suffixes]
5979    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5980
5981    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5982    match is performed.  This sequence is used to differentiate homonyms,
5983    is an optional part of a valid name suffix.  */
5984
5985 static int
5986 is_name_suffix (const char *str)
5987 {
5988   int k;
5989   const char *matching;
5990   const int len = strlen (str);
5991
5992   /* Skip optional leading __[0-9]+.  */
5993
5994   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5995     {
5996       str += 3;
5997       while (isdigit (str[0]))
5998         str += 1;
5999     }
6000   
6001   /* [.$][0-9]+ */
6002
6003   if (str[0] == '.' || str[0] == '$')
6004     {
6005       matching = str + 1;
6006       while (isdigit (matching[0]))
6007         matching += 1;
6008       if (matching[0] == '\0')
6009         return 1;
6010     }
6011
6012   /* ___[0-9]+ */
6013
6014   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
6015     {
6016       matching = str + 3;
6017       while (isdigit (matching[0]))
6018         matching += 1;
6019       if (matching[0] == '\0')
6020         return 1;
6021     }
6022
6023   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
6024
6025   if (strcmp (str, "TKB") == 0)
6026     return 1;
6027
6028 #if 0
6029   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
6030      with a N at the end.  Unfortunately, the compiler uses the same
6031      convention for other internal types it creates.  So treating
6032      all entity names that end with an "N" as a name suffix causes
6033      some regressions.  For instance, consider the case of an enumerated
6034      type.  To support the 'Image attribute, it creates an array whose
6035      name ends with N.
6036      Having a single character like this as a suffix carrying some
6037      information is a bit risky.  Perhaps we should change the encoding
6038      to be something like "_N" instead.  In the meantime, do not do
6039      the following check.  */
6040   /* Protected Object Subprograms */
6041   if (len == 1 && str [0] == 'N')
6042     return 1;
6043 #endif
6044
6045   /* _E[0-9]+[bs]$ */
6046   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
6047     {
6048       matching = str + 3;
6049       while (isdigit (matching[0]))
6050         matching += 1;
6051       if ((matching[0] == 'b' || matching[0] == 's')
6052           && matching [1] == '\0')
6053         return 1;
6054     }
6055
6056   /* ??? We should not modify STR directly, as we are doing below.  This
6057      is fine in this case, but may become problematic later if we find
6058      that this alternative did not work, and want to try matching
6059      another one from the begining of STR.  Since we modified it, we
6060      won't be able to find the begining of the string anymore!  */
6061   if (str[0] == 'X')
6062     {
6063       str += 1;
6064       while (str[0] != '_' && str[0] != '\0')
6065         {
6066           if (str[0] != 'n' && str[0] != 'b')
6067             return 0;
6068           str += 1;
6069         }
6070     }
6071
6072   if (str[0] == '\000')
6073     return 1;
6074
6075   if (str[0] == '_')
6076     {
6077       if (str[1] != '_' || str[2] == '\000')
6078         return 0;
6079       if (str[2] == '_')
6080         {
6081           if (strcmp (str + 3, "JM") == 0)
6082             return 1;
6083           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
6084              the LJM suffix in favor of the JM one.  But we will
6085              still accept LJM as a valid suffix for a reasonable
6086              amount of time, just to allow ourselves to debug programs
6087              compiled using an older version of GNAT.  */
6088           if (strcmp (str + 3, "LJM") == 0)
6089             return 1;
6090           if (str[3] != 'X')
6091             return 0;
6092           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
6093               || str[4] == 'U' || str[4] == 'P')
6094             return 1;
6095           if (str[4] == 'R' && str[5] != 'T')
6096             return 1;
6097           return 0;
6098         }
6099       if (!isdigit (str[2]))
6100         return 0;
6101       for (k = 3; str[k] != '\0'; k += 1)
6102         if (!isdigit (str[k]) && str[k] != '_')
6103           return 0;
6104       return 1;
6105     }
6106   if (str[0] == '$' && isdigit (str[1]))
6107     {
6108       for (k = 2; str[k] != '\0'; k += 1)
6109         if (!isdigit (str[k]) && str[k] != '_')
6110           return 0;
6111       return 1;
6112     }
6113   return 0;
6114 }
6115
6116 /* Return non-zero if the string starting at NAME and ending before
6117    NAME_END contains no capital letters.  */
6118
6119 static int
6120 is_valid_name_for_wild_match (const char *name0)
6121 {
6122   const char *decoded_name = ada_decode (name0);
6123   int i;
6124
6125   /* If the decoded name starts with an angle bracket, it means that
6126      NAME0 does not follow the GNAT encoding format.  It should then
6127      not be allowed as a possible wild match.  */
6128   if (decoded_name[0] == '<')
6129     return 0;
6130
6131   for (i=0; decoded_name[i] != '\0'; i++)
6132     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
6133       return 0;
6134
6135   return 1;
6136 }
6137
6138 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
6139    that could start a simple name.  Assumes that *NAMEP points into
6140    the string beginning at NAME0.  */
6141
6142 static int
6143 advance_wild_match (const char **namep, const char *name0, int target0)
6144 {
6145   const char *name = *namep;
6146
6147   while (1)
6148     {
6149       int t0, t1;
6150
6151       t0 = *name;
6152       if (t0 == '_')
6153         {
6154           t1 = name[1];
6155           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
6156             {
6157               name += 1;
6158               if (name == name0 + 5 && startswith (name0, "_ada"))
6159                 break;
6160               else
6161                 name += 1;
6162             }
6163           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
6164                                  || name[2] == target0))
6165             {
6166               name += 2;
6167               break;
6168             }
6169           else
6170             return 0;
6171         }
6172       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
6173         name += 1;
6174       else
6175         return 0;
6176     }
6177
6178   *namep = name;
6179   return 1;
6180 }
6181
6182 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
6183    informational suffixes of NAME (i.e., for which is_name_suffix is
6184    true).  Assumes that PATN is a lower-cased Ada simple name.  */
6185
6186 static int
6187 wild_match (const char *name, const char *patn)
6188 {
6189   const char *p;
6190   const char *name0 = name;
6191
6192   while (1)
6193     {
6194       const char *match = name;
6195
6196       if (*name == *patn)
6197         {
6198           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6199             if (*p != *name)
6200               break;
6201           if (*p == '\0' && is_name_suffix (name))
6202             return match != name0 && !is_valid_name_for_wild_match (name0);
6203
6204           if (name[-1] == '_')
6205             name -= 1;
6206         }
6207       if (!advance_wild_match (&name, name0, *patn))
6208         return 1;
6209     }
6210 }
6211
6212 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
6213    informational suffix.  */
6214
6215 static int
6216 full_match (const char *sym_name, const char *search_name)
6217 {
6218   return !match_name (sym_name, search_name, 0);
6219 }
6220
6221
6222 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
6223    vector *defn_symbols, updating the list of symbols in OBSTACKP 
6224    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
6225    OBJFILE is the section containing BLOCK.  */
6226
6227 static void
6228 ada_add_block_symbols (struct obstack *obstackp,
6229                        const struct block *block, const char *name,
6230                        domain_enum domain, struct objfile *objfile,
6231                        int wild)
6232 {
6233   struct block_iterator iter;
6234   int name_len = strlen (name);
6235   /* A matching argument symbol, if any.  */
6236   struct symbol *arg_sym;
6237   /* Set true when we find a matching non-argument symbol.  */
6238   int found_sym;
6239   struct symbol *sym;
6240
6241   arg_sym = NULL;
6242   found_sym = 0;
6243   if (wild)
6244     {
6245       for (sym = block_iter_match_first (block, name, wild_match, &iter);
6246            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
6247       {
6248         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6249                                    SYMBOL_DOMAIN (sym), domain)
6250             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
6251           {
6252             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
6253               continue;
6254             else if (SYMBOL_IS_ARGUMENT (sym))
6255               arg_sym = sym;
6256             else
6257               {
6258                 found_sym = 1;
6259                 add_defn_to_vec (obstackp,
6260                                  fixup_symbol_section (sym, objfile),
6261                                  block);
6262               }
6263           }
6264       }
6265     }
6266   else
6267     {
6268      for (sym = block_iter_match_first (block, name, full_match, &iter);
6269           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
6270       {
6271         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6272                                    SYMBOL_DOMAIN (sym), domain))
6273           {
6274             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6275               {
6276                 if (SYMBOL_IS_ARGUMENT (sym))
6277                   arg_sym = sym;
6278                 else
6279                   {
6280                     found_sym = 1;
6281                     add_defn_to_vec (obstackp,
6282                                      fixup_symbol_section (sym, objfile),
6283                                      block);
6284                   }
6285               }
6286           }
6287       }
6288     }
6289
6290   /* Handle renamings.  */
6291
6292   if (ada_add_block_renamings (obstackp, block, name, domain, wild))
6293     found_sym = 1;
6294
6295   if (!found_sym && arg_sym != NULL)
6296     {
6297       add_defn_to_vec (obstackp,
6298                        fixup_symbol_section (arg_sym, objfile),
6299                        block);
6300     }
6301
6302   if (!wild)
6303     {
6304       arg_sym = NULL;
6305       found_sym = 0;
6306
6307       ALL_BLOCK_SYMBOLS (block, iter, sym)
6308       {
6309         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6310                                    SYMBOL_DOMAIN (sym), domain))
6311           {
6312             int cmp;
6313
6314             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
6315             if (cmp == 0)
6316               {
6317                 cmp = !startswith (SYMBOL_LINKAGE_NAME (sym), "_ada_");
6318                 if (cmp == 0)
6319                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
6320                                  name_len);
6321               }
6322
6323             if (cmp == 0
6324                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
6325               {
6326                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6327                   {
6328                     if (SYMBOL_IS_ARGUMENT (sym))
6329                       arg_sym = sym;
6330                     else
6331                       {
6332                         found_sym = 1;
6333                         add_defn_to_vec (obstackp,
6334                                          fixup_symbol_section (sym, objfile),
6335                                          block);
6336                       }
6337                   }
6338               }
6339           }
6340       }
6341
6342       /* NOTE: This really shouldn't be needed for _ada_ symbols.
6343          They aren't parameters, right?  */
6344       if (!found_sym && arg_sym != NULL)
6345         {
6346           add_defn_to_vec (obstackp,
6347                            fixup_symbol_section (arg_sym, objfile),
6348                            block);
6349         }
6350     }
6351 }
6352 \f
6353
6354                                 /* Symbol Completion */
6355
6356 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
6357    name in a form that's appropriate for the completion.  The result
6358    does not need to be deallocated, but is only good until the next call.
6359
6360    TEXT_LEN is equal to the length of TEXT.
6361    Perform a wild match if WILD_MATCH_P is set.
6362    ENCODED_P should be set if TEXT represents the start of a symbol name
6363    in its encoded form.  */
6364
6365 static const char *
6366 symbol_completion_match (const char *sym_name,
6367                          const char *text, int text_len,
6368                          int wild_match_p, int encoded_p)
6369 {
6370   const int verbatim_match = (text[0] == '<');
6371   int match = 0;
6372
6373   if (verbatim_match)
6374     {
6375       /* Strip the leading angle bracket.  */
6376       text = text + 1;
6377       text_len--;
6378     }
6379
6380   /* First, test against the fully qualified name of the symbol.  */
6381
6382   if (strncmp (sym_name, text, text_len) == 0)
6383     match = 1;
6384
6385   if (match && !encoded_p)
6386     {
6387       /* One needed check before declaring a positive match is to verify
6388          that iff we are doing a verbatim match, the decoded version
6389          of the symbol name starts with '<'.  Otherwise, this symbol name
6390          is not a suitable completion.  */
6391       const char *sym_name_copy = sym_name;
6392       int has_angle_bracket;
6393
6394       sym_name = ada_decode (sym_name);
6395       has_angle_bracket = (sym_name[0] == '<');
6396       match = (has_angle_bracket == verbatim_match);
6397       sym_name = sym_name_copy;
6398     }
6399
6400   if (match && !verbatim_match)
6401     {
6402       /* When doing non-verbatim match, another check that needs to
6403          be done is to verify that the potentially matching symbol name
6404          does not include capital letters, because the ada-mode would
6405          not be able to understand these symbol names without the
6406          angle bracket notation.  */
6407       const char *tmp;
6408
6409       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6410       if (*tmp != '\0')
6411         match = 0;
6412     }
6413
6414   /* Second: Try wild matching...  */
6415
6416   if (!match && wild_match_p)
6417     {
6418       /* Since we are doing wild matching, this means that TEXT
6419          may represent an unqualified symbol name.  We therefore must
6420          also compare TEXT against the unqualified name of the symbol.  */
6421       sym_name = ada_unqualified_name (ada_decode (sym_name));
6422
6423       if (strncmp (sym_name, text, text_len) == 0)
6424         match = 1;
6425     }
6426
6427   /* Finally: If we found a mach, prepare the result to return.  */
6428
6429   if (!match)
6430     return NULL;
6431
6432   if (verbatim_match)
6433     sym_name = add_angle_brackets (sym_name);
6434
6435   if (!encoded_p)
6436     sym_name = ada_decode (sym_name);
6437
6438   return sym_name;
6439 }
6440
6441 /* A companion function to ada_collect_symbol_completion_matches().
6442    Check if SYM_NAME represents a symbol which name would be suitable
6443    to complete TEXT (TEXT_LEN is the length of TEXT), in which case it
6444    is added as a completion match to TRACKER.
6445
6446    ORIG_TEXT is the string original string from the user command
6447    that needs to be completed.  WORD is the entire command on which
6448    completion should be performed.  These two parameters are used to
6449    determine which part of the symbol name should be added to the
6450    completion vector.
6451    if WILD_MATCH_P is set, then wild matching is performed.
6452    ENCODED_P should be set if TEXT represents a symbol name in its
6453    encoded formed (in which case the completion should also be
6454    encoded).  */
6455
6456 static void
6457 symbol_completion_add (completion_tracker &tracker,
6458                        const char *sym_name,
6459                        const char *text, int text_len,
6460                        const char *orig_text, const char *word,
6461                        int wild_match_p, int encoded_p)
6462 {
6463   const char *match = symbol_completion_match (sym_name, text, text_len,
6464                                                wild_match_p, encoded_p);
6465   char *completion;
6466
6467   if (match == NULL)
6468     return;
6469
6470   /* We found a match, so add the appropriate completion to the given
6471      string vector.  */
6472
6473   if (word == orig_text)
6474     {
6475       completion = (char *) xmalloc (strlen (match) + 5);
6476       strcpy (completion, match);
6477     }
6478   else if (word > orig_text)
6479     {
6480       /* Return some portion of sym_name.  */
6481       completion = (char *) xmalloc (strlen (match) + 5);
6482       strcpy (completion, match + (word - orig_text));
6483     }
6484   else
6485     {
6486       /* Return some of ORIG_TEXT plus sym_name.  */
6487       completion = (char *) xmalloc (strlen (match) + (orig_text - word) + 5);
6488       strncpy (completion, word, orig_text - word);
6489       completion[orig_text - word] = '\0';
6490       strcat (completion, match);
6491     }
6492
6493   tracker.add_completion (gdb::unique_xmalloc_ptr<char> (completion));
6494 }
6495
6496 /* Add the list of possible symbol names completing TEXT0 to TRACKER.
6497    WORD is the entire command on which completion is made.  */
6498
6499 static void
6500 ada_collect_symbol_completion_matches (completion_tracker &tracker,
6501                                        complete_symbol_mode mode,
6502                                        const char *text0, const char *word,
6503                                        enum type_code code)
6504 {
6505   char *text;
6506   int text_len;
6507   int wild_match_p;
6508   int encoded_p;
6509   struct symbol *sym;
6510   struct compunit_symtab *s;
6511   struct minimal_symbol *msymbol;
6512   struct objfile *objfile;
6513   const struct block *b, *surrounding_static_block = 0;
6514   int i;
6515   struct block_iterator iter;
6516   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6517
6518   gdb_assert (code == TYPE_CODE_UNDEF);
6519
6520   if (text0[0] == '<')
6521     {
6522       text = xstrdup (text0);
6523       make_cleanup (xfree, text);
6524       text_len = strlen (text);
6525       wild_match_p = 0;
6526       encoded_p = 1;
6527     }
6528   else
6529     {
6530       text = xstrdup (ada_encode (text0));
6531       make_cleanup (xfree, text);
6532       text_len = strlen (text);
6533       for (i = 0; i < text_len; i++)
6534         text[i] = tolower (text[i]);
6535
6536       encoded_p = (strstr (text0, "__") != NULL);
6537       /* If the name contains a ".", then the user is entering a fully
6538          qualified entity name, and the match must not be done in wild
6539          mode.  Similarly, if the user wants to complete what looks like
6540          an encoded name, the match must not be done in wild mode.  */
6541       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6542     }
6543
6544   /* First, look at the partial symtab symbols.  */
6545   expand_symtabs_matching (NULL,
6546                            [&] (const char *symname)
6547                            {
6548                              return symbol_completion_match (symname,
6549                                                              text, text_len,
6550                                                              wild_match_p,
6551                                                              encoded_p);
6552                            },
6553                            NULL,
6554                            ALL_DOMAIN);
6555
6556   /* At this point scan through the misc symbol vectors and add each
6557      symbol you find to the list.  Eventually we want to ignore
6558      anything that isn't a text symbol (everything else will be
6559      handled by the psymtab code above).  */
6560
6561   ALL_MSYMBOLS (objfile, msymbol)
6562   {
6563     QUIT;
6564     symbol_completion_add (tracker, MSYMBOL_LINKAGE_NAME (msymbol),
6565                            text, text_len, text0, word, wild_match_p,
6566                            encoded_p);
6567   }
6568
6569   /* Search upwards from currently selected frame (so that we can
6570      complete on local vars.  */
6571
6572   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6573     {
6574       if (!BLOCK_SUPERBLOCK (b))
6575         surrounding_static_block = b;   /* For elmin of dups */
6576
6577       ALL_BLOCK_SYMBOLS (b, iter, sym)
6578       {
6579         symbol_completion_add (tracker, SYMBOL_LINKAGE_NAME (sym),
6580                                text, text_len, text0, word,
6581                                wild_match_p, encoded_p);
6582       }
6583     }
6584
6585   /* Go through the symtabs and check the externs and statics for
6586      symbols which match.  */
6587
6588   ALL_COMPUNITS (objfile, s)
6589   {
6590     QUIT;
6591     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
6592     ALL_BLOCK_SYMBOLS (b, iter, sym)
6593     {
6594       symbol_completion_add (tracker, SYMBOL_LINKAGE_NAME (sym),
6595                              text, text_len, text0, word,
6596                              wild_match_p, encoded_p);
6597     }
6598   }
6599
6600   ALL_COMPUNITS (objfile, s)
6601   {
6602     QUIT;
6603     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
6604     /* Don't do this block twice.  */
6605     if (b == surrounding_static_block)
6606       continue;
6607     ALL_BLOCK_SYMBOLS (b, iter, sym)
6608     {
6609       symbol_completion_add (tracker, SYMBOL_LINKAGE_NAME (sym),
6610                              text, text_len, text0, word,
6611                              wild_match_p, encoded_p);
6612     }
6613   }
6614
6615   do_cleanups (old_chain);
6616 }
6617
6618                                 /* Field Access */
6619
6620 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6621    for tagged types.  */
6622
6623 static int
6624 ada_is_dispatch_table_ptr_type (struct type *type)
6625 {
6626   const char *name;
6627
6628   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6629     return 0;
6630
6631   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6632   if (name == NULL)
6633     return 0;
6634
6635   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6636 }
6637
6638 /* Return non-zero if TYPE is an interface tag.  */
6639
6640 static int
6641 ada_is_interface_tag (struct type *type)
6642 {
6643   const char *name = TYPE_NAME (type);
6644
6645   if (name == NULL)
6646     return 0;
6647
6648   return (strcmp (name, "ada__tags__interface_tag") == 0);
6649 }
6650
6651 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6652    to be invisible to users.  */
6653
6654 int
6655 ada_is_ignored_field (struct type *type, int field_num)
6656 {
6657   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6658     return 1;
6659
6660   /* Check the name of that field.  */
6661   {
6662     const char *name = TYPE_FIELD_NAME (type, field_num);
6663
6664     /* Anonymous field names should not be printed.
6665        brobecker/2007-02-20: I don't think this can actually happen
6666        but we don't want to print the value of annonymous fields anyway.  */
6667     if (name == NULL)
6668       return 1;
6669
6670     /* Normally, fields whose name start with an underscore ("_")
6671        are fields that have been internally generated by the compiler,
6672        and thus should not be printed.  The "_parent" field is special,
6673        however: This is a field internally generated by the compiler
6674        for tagged types, and it contains the components inherited from
6675        the parent type.  This field should not be printed as is, but
6676        should not be ignored either.  */
6677     if (name[0] == '_' && !startswith (name, "_parent"))
6678       return 1;
6679   }
6680
6681   /* If this is the dispatch table of a tagged type or an interface tag,
6682      then ignore.  */
6683   if (ada_is_tagged_type (type, 1)
6684       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6685           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6686     return 1;
6687
6688   /* Not a special field, so it should not be ignored.  */
6689   return 0;
6690 }
6691
6692 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6693    pointer or reference type whose ultimate target has a tag field.  */
6694
6695 int
6696 ada_is_tagged_type (struct type *type, int refok)
6697 {
6698   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6699 }
6700
6701 /* True iff TYPE represents the type of X'Tag */
6702
6703 int
6704 ada_is_tag_type (struct type *type)
6705 {
6706   type = ada_check_typedef (type);
6707
6708   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6709     return 0;
6710   else
6711     {
6712       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6713
6714       return (name != NULL
6715               && strcmp (name, "ada__tags__dispatch_table") == 0);
6716     }
6717 }
6718
6719 /* The type of the tag on VAL.  */
6720
6721 struct type *
6722 ada_tag_type (struct value *val)
6723 {
6724   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6725 }
6726
6727 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6728    retired at Ada 05).  */
6729
6730 static int
6731 is_ada95_tag (struct value *tag)
6732 {
6733   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6734 }
6735
6736 /* The value of the tag on VAL.  */
6737
6738 struct value *
6739 ada_value_tag (struct value *val)
6740 {
6741   return ada_value_struct_elt (val, "_tag", 0);
6742 }
6743
6744 /* The value of the tag on the object of type TYPE whose contents are
6745    saved at VALADDR, if it is non-null, or is at memory address
6746    ADDRESS.  */
6747
6748 static struct value *
6749 value_tag_from_contents_and_address (struct type *type,
6750                                      const gdb_byte *valaddr,
6751                                      CORE_ADDR address)
6752 {
6753   int tag_byte_offset;
6754   struct type *tag_type;
6755
6756   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6757                          NULL, NULL, NULL))
6758     {
6759       const gdb_byte *valaddr1 = ((valaddr == NULL)
6760                                   ? NULL
6761                                   : valaddr + tag_byte_offset);
6762       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6763
6764       return value_from_contents_and_address (tag_type, valaddr1, address1);
6765     }
6766   return NULL;
6767 }
6768
6769 static struct type *
6770 type_from_tag (struct value *tag)
6771 {
6772   const char *type_name = ada_tag_name (tag);
6773
6774   if (type_name != NULL)
6775     return ada_find_any_type (ada_encode (type_name));
6776   return NULL;
6777 }
6778
6779 /* Given a value OBJ of a tagged type, return a value of this
6780    type at the base address of the object.  The base address, as
6781    defined in Ada.Tags, it is the address of the primary tag of
6782    the object, and therefore where the field values of its full
6783    view can be fetched.  */
6784
6785 struct value *
6786 ada_tag_value_at_base_address (struct value *obj)
6787 {
6788   struct value *val;
6789   LONGEST offset_to_top = 0;
6790   struct type *ptr_type, *obj_type;
6791   struct value *tag;
6792   CORE_ADDR base_address;
6793
6794   obj_type = value_type (obj);
6795
6796   /* It is the responsability of the caller to deref pointers.  */
6797
6798   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6799       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6800     return obj;
6801
6802   tag = ada_value_tag (obj);
6803   if (!tag)
6804     return obj;
6805
6806   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6807
6808   if (is_ada95_tag (tag))
6809     return obj;
6810
6811   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6812   ptr_type = lookup_pointer_type (ptr_type);
6813   val = value_cast (ptr_type, tag);
6814   if (!val)
6815     return obj;
6816
6817   /* It is perfectly possible that an exception be raised while
6818      trying to determine the base address, just like for the tag;
6819      see ada_tag_name for more details.  We do not print the error
6820      message for the same reason.  */
6821
6822   TRY
6823     {
6824       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6825     }
6826
6827   CATCH (e, RETURN_MASK_ERROR)
6828     {
6829       return obj;
6830     }
6831   END_CATCH
6832
6833   /* If offset is null, nothing to do.  */
6834
6835   if (offset_to_top == 0)
6836     return obj;
6837
6838   /* -1 is a special case in Ada.Tags; however, what should be done
6839      is not quite clear from the documentation.  So do nothing for
6840      now.  */
6841
6842   if (offset_to_top == -1)
6843     return obj;
6844
6845   base_address = value_address (obj) - offset_to_top;
6846   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6847
6848   /* Make sure that we have a proper tag at the new address.
6849      Otherwise, offset_to_top is bogus (which can happen when
6850      the object is not initialized yet).  */
6851
6852   if (!tag)
6853     return obj;
6854
6855   obj_type = type_from_tag (tag);
6856
6857   if (!obj_type)
6858     return obj;
6859
6860   return value_from_contents_and_address (obj_type, NULL, base_address);
6861 }
6862
6863 /* Return the "ada__tags__type_specific_data" type.  */
6864
6865 static struct type *
6866 ada_get_tsd_type (struct inferior *inf)
6867 {
6868   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6869
6870   if (data->tsd_type == 0)
6871     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6872   return data->tsd_type;
6873 }
6874
6875 /* Return the TSD (type-specific data) associated to the given TAG.
6876    TAG is assumed to be the tag of a tagged-type entity.
6877
6878    May return NULL if we are unable to get the TSD.  */
6879
6880 static struct value *
6881 ada_get_tsd_from_tag (struct value *tag)
6882 {
6883   struct value *val;
6884   struct type *type;
6885
6886   /* First option: The TSD is simply stored as a field of our TAG.
6887      Only older versions of GNAT would use this format, but we have
6888      to test it first, because there are no visible markers for
6889      the current approach except the absence of that field.  */
6890
6891   val = ada_value_struct_elt (tag, "tsd", 1);
6892   if (val)
6893     return val;
6894
6895   /* Try the second representation for the dispatch table (in which
6896      there is no explicit 'tsd' field in the referent of the tag pointer,
6897      and instead the tsd pointer is stored just before the dispatch
6898      table.  */
6899
6900   type = ada_get_tsd_type (current_inferior());
6901   if (type == NULL)
6902     return NULL;
6903   type = lookup_pointer_type (lookup_pointer_type (type));
6904   val = value_cast (type, tag);
6905   if (val == NULL)
6906     return NULL;
6907   return value_ind (value_ptradd (val, -1));
6908 }
6909
6910 /* Given the TSD of a tag (type-specific data), return a string
6911    containing the name of the associated type.
6912
6913    The returned value is good until the next call.  May return NULL
6914    if we are unable to determine the tag name.  */
6915
6916 static char *
6917 ada_tag_name_from_tsd (struct value *tsd)
6918 {
6919   static char name[1024];
6920   char *p;
6921   struct value *val;
6922
6923   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6924   if (val == NULL)
6925     return NULL;
6926   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6927   for (p = name; *p != '\0'; p += 1)
6928     if (isalpha (*p))
6929       *p = tolower (*p);
6930   return name;
6931 }
6932
6933 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6934    a C string.
6935
6936    Return NULL if the TAG is not an Ada tag, or if we were unable to
6937    determine the name of that tag.  The result is good until the next
6938    call.  */
6939
6940 const char *
6941 ada_tag_name (struct value *tag)
6942 {
6943   char *name = NULL;
6944
6945   if (!ada_is_tag_type (value_type (tag)))
6946     return NULL;
6947
6948   /* It is perfectly possible that an exception be raised while trying
6949      to determine the TAG's name, even under normal circumstances:
6950      The associated variable may be uninitialized or corrupted, for
6951      instance. We do not let any exception propagate past this point.
6952      instead we return NULL.
6953
6954      We also do not print the error message either (which often is very
6955      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6956      the caller print a more meaningful message if necessary.  */
6957   TRY
6958     {
6959       struct value *tsd = ada_get_tsd_from_tag (tag);
6960
6961       if (tsd != NULL)
6962         name = ada_tag_name_from_tsd (tsd);
6963     }
6964   CATCH (e, RETURN_MASK_ERROR)
6965     {
6966     }
6967   END_CATCH
6968
6969   return name;
6970 }
6971
6972 /* The parent type of TYPE, or NULL if none.  */
6973
6974 struct type *
6975 ada_parent_type (struct type *type)
6976 {
6977   int i;
6978
6979   type = ada_check_typedef (type);
6980
6981   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6982     return NULL;
6983
6984   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6985     if (ada_is_parent_field (type, i))
6986       {
6987         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6988
6989         /* If the _parent field is a pointer, then dereference it.  */
6990         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6991           parent_type = TYPE_TARGET_TYPE (parent_type);
6992         /* If there is a parallel XVS type, get the actual base type.  */
6993         parent_type = ada_get_base_type (parent_type);
6994
6995         return ada_check_typedef (parent_type);
6996       }
6997
6998   return NULL;
6999 }
7000
7001 /* True iff field number FIELD_NUM of structure type TYPE contains the
7002    parent-type (inherited) fields of a derived type.  Assumes TYPE is
7003    a structure type with at least FIELD_NUM+1 fields.  */
7004
7005 int
7006 ada_is_parent_field (struct type *type, int field_num)
7007 {
7008   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
7009
7010   return (name != NULL
7011           && (startswith (name, "PARENT")
7012               || startswith (name, "_parent")));
7013 }
7014
7015 /* True iff field number FIELD_NUM of structure type TYPE is a
7016    transparent wrapper field (which should be silently traversed when doing
7017    field selection and flattened when printing).  Assumes TYPE is a
7018    structure type with at least FIELD_NUM+1 fields.  Such fields are always
7019    structures.  */
7020
7021 int
7022 ada_is_wrapper_field (struct type *type, int field_num)
7023 {
7024   const char *name = TYPE_FIELD_NAME (type, field_num);
7025
7026   if (name != NULL && strcmp (name, "RETVAL") == 0)
7027     {
7028       /* This happens in functions with "out" or "in out" parameters
7029          which are passed by copy.  For such functions, GNAT describes
7030          the function's return type as being a struct where the return
7031          value is in a field called RETVAL, and where the other "out"
7032          or "in out" parameters are fields of that struct.  This is not
7033          a wrapper.  */
7034       return 0;
7035     }
7036
7037   return (name != NULL
7038           && (startswith (name, "PARENT")
7039               || strcmp (name, "REP") == 0
7040               || startswith (name, "_parent")
7041               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
7042 }
7043
7044 /* True iff field number FIELD_NUM of structure or union type TYPE
7045    is a variant wrapper.  Assumes TYPE is a structure type with at least
7046    FIELD_NUM+1 fields.  */
7047
7048 int
7049 ada_is_variant_part (struct type *type, int field_num)
7050 {
7051   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
7052
7053   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
7054           || (is_dynamic_field (type, field_num)
7055               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
7056                   == TYPE_CODE_UNION)));
7057 }
7058
7059 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
7060    whose discriminants are contained in the record type OUTER_TYPE,
7061    returns the type of the controlling discriminant for the variant.
7062    May return NULL if the type could not be found.  */
7063
7064 struct type *
7065 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
7066 {
7067   const char *name = ada_variant_discrim_name (var_type);
7068
7069   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
7070 }
7071
7072 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
7073    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
7074    represents a 'when others' clause; otherwise 0.  */
7075
7076 int
7077 ada_is_others_clause (struct type *type, int field_num)
7078 {
7079   const char *name = TYPE_FIELD_NAME (type, field_num);
7080
7081   return (name != NULL && name[0] == 'O');
7082 }
7083
7084 /* Assuming that TYPE0 is the type of the variant part of a record,
7085    returns the name of the discriminant controlling the variant.
7086    The value is valid until the next call to ada_variant_discrim_name.  */
7087
7088 const char *
7089 ada_variant_discrim_name (struct type *type0)
7090 {
7091   static char *result = NULL;
7092   static size_t result_len = 0;
7093   struct type *type;
7094   const char *name;
7095   const char *discrim_end;
7096   const char *discrim_start;
7097
7098   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
7099     type = TYPE_TARGET_TYPE (type0);
7100   else
7101     type = type0;
7102
7103   name = ada_type_name (type);
7104
7105   if (name == NULL || name[0] == '\000')
7106     return "";
7107
7108   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
7109        discrim_end -= 1)
7110     {
7111       if (startswith (discrim_end, "___XVN"))
7112         break;
7113     }
7114   if (discrim_end == name)
7115     return "";
7116
7117   for (discrim_start = discrim_end; discrim_start != name + 3;
7118        discrim_start -= 1)
7119     {
7120       if (discrim_start == name + 1)
7121         return "";
7122       if ((discrim_start > name + 3
7123            && startswith (discrim_start - 3, "___"))
7124           || discrim_start[-1] == '.')
7125         break;
7126     }
7127
7128   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
7129   strncpy (result, discrim_start, discrim_end - discrim_start);
7130   result[discrim_end - discrim_start] = '\0';
7131   return result;
7132 }
7133
7134 /* Scan STR for a subtype-encoded number, beginning at position K.
7135    Put the position of the character just past the number scanned in
7136    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
7137    Return 1 if there was a valid number at the given position, and 0
7138    otherwise.  A "subtype-encoded" number consists of the absolute value
7139    in decimal, followed by the letter 'm' to indicate a negative number.
7140    Assumes 0m does not occur.  */
7141
7142 int
7143 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
7144 {
7145   ULONGEST RU;
7146
7147   if (!isdigit (str[k]))
7148     return 0;
7149
7150   /* Do it the hard way so as not to make any assumption about
7151      the relationship of unsigned long (%lu scan format code) and
7152      LONGEST.  */
7153   RU = 0;
7154   while (isdigit (str[k]))
7155     {
7156       RU = RU * 10 + (str[k] - '0');
7157       k += 1;
7158     }
7159
7160   if (str[k] == 'm')
7161     {
7162       if (R != NULL)
7163         *R = (-(LONGEST) (RU - 1)) - 1;
7164       k += 1;
7165     }
7166   else if (R != NULL)
7167     *R = (LONGEST) RU;
7168
7169   /* NOTE on the above: Technically, C does not say what the results of
7170      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
7171      number representable as a LONGEST (although either would probably work
7172      in most implementations).  When RU>0, the locution in the then branch
7173      above is always equivalent to the negative of RU.  */
7174
7175   if (new_k != NULL)
7176     *new_k = k;
7177   return 1;
7178 }
7179
7180 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
7181    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
7182    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
7183
7184 int
7185 ada_in_variant (LONGEST val, struct type *type, int field_num)
7186 {
7187   const char *name = TYPE_FIELD_NAME (type, field_num);
7188   int p;
7189
7190   p = 0;
7191   while (1)
7192     {
7193       switch (name[p])
7194         {
7195         case '\0':
7196           return 0;
7197         case 'S':
7198           {
7199             LONGEST W;
7200
7201             if (!ada_scan_number (name, p + 1, &W, &p))
7202               return 0;
7203             if (val == W)
7204               return 1;
7205             break;
7206           }
7207         case 'R':
7208           {
7209             LONGEST L, U;
7210
7211             if (!ada_scan_number (name, p + 1, &L, &p)
7212                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
7213               return 0;
7214             if (val >= L && val <= U)
7215               return 1;
7216             break;
7217           }
7218         case 'O':
7219           return 1;
7220         default:
7221           return 0;
7222         }
7223     }
7224 }
7225
7226 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
7227
7228 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
7229    ARG_TYPE, extract and return the value of one of its (non-static)
7230    fields.  FIELDNO says which field.   Differs from value_primitive_field
7231    only in that it can handle packed values of arbitrary type.  */
7232
7233 static struct value *
7234 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
7235                            struct type *arg_type)
7236 {
7237   struct type *type;
7238
7239   arg_type = ada_check_typedef (arg_type);
7240   type = TYPE_FIELD_TYPE (arg_type, fieldno);
7241
7242   /* Handle packed fields.  */
7243
7244   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
7245     {
7246       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
7247       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
7248
7249       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
7250                                              offset + bit_pos / 8,
7251                                              bit_pos % 8, bit_size, type);
7252     }
7253   else
7254     return value_primitive_field (arg1, offset, fieldno, arg_type);
7255 }
7256
7257 /* Find field with name NAME in object of type TYPE.  If found, 
7258    set the following for each argument that is non-null:
7259     - *FIELD_TYPE_P to the field's type; 
7260     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
7261       an object of that type;
7262     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
7263     - *BIT_SIZE_P to its size in bits if the field is packed, and 
7264       0 otherwise;
7265    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
7266    fields up to but not including the desired field, or by the total
7267    number of fields if not found.   A NULL value of NAME never
7268    matches; the function just counts visible fields in this case.
7269    
7270    Returns 1 if found, 0 otherwise.  */
7271
7272 static int
7273 find_struct_field (const char *name, struct type *type, int offset,
7274                    struct type **field_type_p,
7275                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
7276                    int *index_p)
7277 {
7278   int i;
7279
7280   type = ada_check_typedef (type);
7281
7282   if (field_type_p != NULL)
7283     *field_type_p = NULL;
7284   if (byte_offset_p != NULL)
7285     *byte_offset_p = 0;
7286   if (bit_offset_p != NULL)
7287     *bit_offset_p = 0;
7288   if (bit_size_p != NULL)
7289     *bit_size_p = 0;
7290
7291   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7292     {
7293       int bit_pos = TYPE_FIELD_BITPOS (type, i);
7294       int fld_offset = offset + bit_pos / 8;
7295       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7296
7297       if (t_field_name == NULL)
7298         continue;
7299
7300       else if (name != NULL && field_name_match (t_field_name, name))
7301         {
7302           int bit_size = TYPE_FIELD_BITSIZE (type, i);
7303
7304           if (field_type_p != NULL)
7305             *field_type_p = TYPE_FIELD_TYPE (type, i);
7306           if (byte_offset_p != NULL)
7307             *byte_offset_p = fld_offset;
7308           if (bit_offset_p != NULL)
7309             *bit_offset_p = bit_pos % 8;
7310           if (bit_size_p != NULL)
7311             *bit_size_p = bit_size;
7312           return 1;
7313         }
7314       else if (ada_is_wrapper_field (type, i))
7315         {
7316           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7317                                  field_type_p, byte_offset_p, bit_offset_p,
7318                                  bit_size_p, index_p))
7319             return 1;
7320         }
7321       else if (ada_is_variant_part (type, i))
7322         {
7323           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
7324              fixed type?? */
7325           int j;
7326           struct type *field_type
7327             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7328
7329           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7330             {
7331               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7332                                      fld_offset
7333                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
7334                                      field_type_p, byte_offset_p,
7335                                      bit_offset_p, bit_size_p, index_p))
7336                 return 1;
7337             }
7338         }
7339       else if (index_p != NULL)
7340         *index_p += 1;
7341     }
7342   return 0;
7343 }
7344
7345 /* Number of user-visible fields in record type TYPE.  */
7346
7347 static int
7348 num_visible_fields (struct type *type)
7349 {
7350   int n;
7351
7352   n = 0;
7353   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7354   return n;
7355 }
7356
7357 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
7358    and search in it assuming it has (class) type TYPE.
7359    If found, return value, else return NULL.
7360
7361    Searches recursively through wrapper fields (e.g., '_parent').  */
7362
7363 static struct value *
7364 ada_search_struct_field (const char *name, struct value *arg, int offset,
7365                          struct type *type)
7366 {
7367   int i;
7368
7369   type = ada_check_typedef (type);
7370   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7371     {
7372       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7373
7374       if (t_field_name == NULL)
7375         continue;
7376
7377       else if (field_name_match (t_field_name, name))
7378         return ada_value_primitive_field (arg, offset, i, type);
7379
7380       else if (ada_is_wrapper_field (type, i))
7381         {
7382           struct value *v =     /* Do not let indent join lines here.  */
7383             ada_search_struct_field (name, arg,
7384                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
7385                                      TYPE_FIELD_TYPE (type, i));
7386
7387           if (v != NULL)
7388             return v;
7389         }
7390
7391       else if (ada_is_variant_part (type, i))
7392         {
7393           /* PNH: Do we ever get here?  See find_struct_field.  */
7394           int j;
7395           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7396                                                                         i));
7397           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7398
7399           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7400             {
7401               struct value *v = ada_search_struct_field /* Force line
7402                                                            break.  */
7403                 (name, arg,
7404                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7405                  TYPE_FIELD_TYPE (field_type, j));
7406
7407               if (v != NULL)
7408                 return v;
7409             }
7410         }
7411     }
7412   return NULL;
7413 }
7414
7415 static struct value *ada_index_struct_field_1 (int *, struct value *,
7416                                                int, struct type *);
7417
7418
7419 /* Return field #INDEX in ARG, where the index is that returned by
7420  * find_struct_field through its INDEX_P argument.  Adjust the address
7421  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7422  * If found, return value, else return NULL.  */
7423
7424 static struct value *
7425 ada_index_struct_field (int index, struct value *arg, int offset,
7426                         struct type *type)
7427 {
7428   return ada_index_struct_field_1 (&index, arg, offset, type);
7429 }
7430
7431
7432 /* Auxiliary function for ada_index_struct_field.  Like
7433  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7434  * *INDEX_P.  */
7435
7436 static struct value *
7437 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7438                           struct type *type)
7439 {
7440   int i;
7441   type = ada_check_typedef (type);
7442
7443   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7444     {
7445       if (TYPE_FIELD_NAME (type, i) == NULL)
7446         continue;
7447       else if (ada_is_wrapper_field (type, i))
7448         {
7449           struct value *v =     /* Do not let indent join lines here.  */
7450             ada_index_struct_field_1 (index_p, arg,
7451                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7452                                       TYPE_FIELD_TYPE (type, i));
7453
7454           if (v != NULL)
7455             return v;
7456         }
7457
7458       else if (ada_is_variant_part (type, i))
7459         {
7460           /* PNH: Do we ever get here?  See ada_search_struct_field,
7461              find_struct_field.  */
7462           error (_("Cannot assign this kind of variant record"));
7463         }
7464       else if (*index_p == 0)
7465         return ada_value_primitive_field (arg, offset, i, type);
7466       else
7467         *index_p -= 1;
7468     }
7469   return NULL;
7470 }
7471
7472 /* Given ARG, a value of type (pointer or reference to a)*
7473    structure/union, extract the component named NAME from the ultimate
7474    target structure/union and return it as a value with its
7475    appropriate type.
7476
7477    The routine searches for NAME among all members of the structure itself
7478    and (recursively) among all members of any wrapper members
7479    (e.g., '_parent').
7480
7481    If NO_ERR, then simply return NULL in case of error, rather than 
7482    calling error.  */
7483
7484 struct value *
7485 ada_value_struct_elt (struct value *arg, const char *name, int no_err)
7486 {
7487   struct type *t, *t1;
7488   struct value *v;
7489
7490   v = NULL;
7491   t1 = t = ada_check_typedef (value_type (arg));
7492   if (TYPE_CODE (t) == TYPE_CODE_REF)
7493     {
7494       t1 = TYPE_TARGET_TYPE (t);
7495       if (t1 == NULL)
7496         goto BadValue;
7497       t1 = ada_check_typedef (t1);
7498       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7499         {
7500           arg = coerce_ref (arg);
7501           t = t1;
7502         }
7503     }
7504
7505   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7506     {
7507       t1 = TYPE_TARGET_TYPE (t);
7508       if (t1 == NULL)
7509         goto BadValue;
7510       t1 = ada_check_typedef (t1);
7511       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7512         {
7513           arg = value_ind (arg);
7514           t = t1;
7515         }
7516       else
7517         break;
7518     }
7519
7520   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7521     goto BadValue;
7522
7523   if (t1 == t)
7524     v = ada_search_struct_field (name, arg, 0, t);
7525   else
7526     {
7527       int bit_offset, bit_size, byte_offset;
7528       struct type *field_type;
7529       CORE_ADDR address;
7530
7531       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7532         address = value_address (ada_value_ind (arg));
7533       else
7534         address = value_address (ada_coerce_ref (arg));
7535
7536       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7537       if (find_struct_field (name, t1, 0,
7538                              &field_type, &byte_offset, &bit_offset,
7539                              &bit_size, NULL))
7540         {
7541           if (bit_size != 0)
7542             {
7543               if (TYPE_CODE (t) == TYPE_CODE_REF)
7544                 arg = ada_coerce_ref (arg);
7545               else
7546                 arg = ada_value_ind (arg);
7547               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7548                                                   bit_offset, bit_size,
7549                                                   field_type);
7550             }
7551           else
7552             v = value_at_lazy (field_type, address + byte_offset);
7553         }
7554     }
7555
7556   if (v != NULL || no_err)
7557     return v;
7558   else
7559     error (_("There is no member named %s."), name);
7560
7561  BadValue:
7562   if (no_err)
7563     return NULL;
7564   else
7565     error (_("Attempt to extract a component of "
7566              "a value that is not a record."));
7567 }
7568
7569 /* Return a string representation of type TYPE.  */
7570
7571 static std::string
7572 type_as_string (struct type *type)
7573 {
7574   string_file tmp_stream;
7575
7576   type_print (type, "", &tmp_stream, -1);
7577
7578   return std::move (tmp_stream.string ());
7579 }
7580
7581 /* Given a type TYPE, look up the type of the component of type named NAME.
7582    If DISPP is non-null, add its byte displacement from the beginning of a
7583    structure (pointed to by a value) of type TYPE to *DISPP (does not
7584    work for packed fields).
7585
7586    Matches any field whose name has NAME as a prefix, possibly
7587    followed by "___".
7588
7589    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7590    be a (pointer or reference)+ to a struct or union, and the
7591    ultimate target type will be searched.
7592
7593    Looks recursively into variant clauses and parent types.
7594
7595    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7596    TYPE is not a type of the right kind.  */
7597
7598 static struct type *
7599 ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
7600                             int noerr, int *dispp)
7601 {
7602   int i;
7603
7604   if (name == NULL)
7605     goto BadName;
7606
7607   if (refok && type != NULL)
7608     while (1)
7609       {
7610         type = ada_check_typedef (type);
7611         if (TYPE_CODE (type) != TYPE_CODE_PTR
7612             && TYPE_CODE (type) != TYPE_CODE_REF)
7613           break;
7614         type = TYPE_TARGET_TYPE (type);
7615       }
7616
7617   if (type == NULL
7618       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7619           && TYPE_CODE (type) != TYPE_CODE_UNION))
7620     {
7621       if (noerr)
7622         return NULL;
7623
7624       error (_("Type %s is not a structure or union type"),
7625              type != NULL ? type_as_string (type).c_str () : _("(null)"));
7626     }
7627
7628   type = to_static_fixed_type (type);
7629
7630   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7631     {
7632       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7633       struct type *t;
7634       int disp;
7635
7636       if (t_field_name == NULL)
7637         continue;
7638
7639       else if (field_name_match (t_field_name, name))
7640         {
7641           if (dispp != NULL)
7642             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7643           return TYPE_FIELD_TYPE (type, i);
7644         }
7645
7646       else if (ada_is_wrapper_field (type, i))
7647         {
7648           disp = 0;
7649           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7650                                           0, 1, &disp);
7651           if (t != NULL)
7652             {
7653               if (dispp != NULL)
7654                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7655               return t;
7656             }
7657         }
7658
7659       else if (ada_is_variant_part (type, i))
7660         {
7661           int j;
7662           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7663                                                                         i));
7664
7665           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7666             {
7667               /* FIXME pnh 2008/01/26: We check for a field that is
7668                  NOT wrapped in a struct, since the compiler sometimes
7669                  generates these for unchecked variant types.  Revisit
7670                  if the compiler changes this practice.  */
7671               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7672               disp = 0;
7673               if (v_field_name != NULL 
7674                   && field_name_match (v_field_name, name))
7675                 t = TYPE_FIELD_TYPE (field_type, j);
7676               else
7677                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7678                                                                  j),
7679                                                 name, 0, 1, &disp);
7680
7681               if (t != NULL)
7682                 {
7683                   if (dispp != NULL)
7684                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7685                   return t;
7686                 }
7687             }
7688         }
7689
7690     }
7691
7692 BadName:
7693   if (!noerr)
7694     {
7695       const char *name_str = name != NULL ? name : _("<null>");
7696
7697       error (_("Type %s has no component named %s"),
7698              type_as_string (type).c_str (), name_str);
7699     }
7700
7701   return NULL;
7702 }
7703
7704 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7705    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7706    represents an unchecked union (that is, the variant part of a
7707    record that is named in an Unchecked_Union pragma).  */
7708
7709 static int
7710 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7711 {
7712   const char *discrim_name = ada_variant_discrim_name (var_type);
7713
7714   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7715           == NULL);
7716 }
7717
7718
7719 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7720    within a value of type OUTER_TYPE that is stored in GDB at
7721    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7722    numbering from 0) is applicable.  Returns -1 if none are.  */
7723
7724 int
7725 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7726                            const gdb_byte *outer_valaddr)
7727 {
7728   int others_clause;
7729   int i;
7730   const char *discrim_name = ada_variant_discrim_name (var_type);
7731   struct value *outer;
7732   struct value *discrim;
7733   LONGEST discrim_val;
7734
7735   /* Using plain value_from_contents_and_address here causes problems
7736      because we will end up trying to resolve a type that is currently
7737      being constructed.  */
7738   outer = value_from_contents_and_address_unresolved (outer_type,
7739                                                       outer_valaddr, 0);
7740   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7741   if (discrim == NULL)
7742     return -1;
7743   discrim_val = value_as_long (discrim);
7744
7745   others_clause = -1;
7746   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7747     {
7748       if (ada_is_others_clause (var_type, i))
7749         others_clause = i;
7750       else if (ada_in_variant (discrim_val, var_type, i))
7751         return i;
7752     }
7753
7754   return others_clause;
7755 }
7756 \f
7757
7758
7759                                 /* Dynamic-Sized Records */
7760
7761 /* Strategy: The type ostensibly attached to a value with dynamic size
7762    (i.e., a size that is not statically recorded in the debugging
7763    data) does not accurately reflect the size or layout of the value.
7764    Our strategy is to convert these values to values with accurate,
7765    conventional types that are constructed on the fly.  */
7766
7767 /* There is a subtle and tricky problem here.  In general, we cannot
7768    determine the size of dynamic records without its data.  However,
7769    the 'struct value' data structure, which GDB uses to represent
7770    quantities in the inferior process (the target), requires the size
7771    of the type at the time of its allocation in order to reserve space
7772    for GDB's internal copy of the data.  That's why the
7773    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7774    rather than struct value*s.
7775
7776    However, GDB's internal history variables ($1, $2, etc.) are
7777    struct value*s containing internal copies of the data that are not, in
7778    general, the same as the data at their corresponding addresses in
7779    the target.  Fortunately, the types we give to these values are all
7780    conventional, fixed-size types (as per the strategy described
7781    above), so that we don't usually have to perform the
7782    'to_fixed_xxx_type' conversions to look at their values.
7783    Unfortunately, there is one exception: if one of the internal
7784    history variables is an array whose elements are unconstrained
7785    records, then we will need to create distinct fixed types for each
7786    element selected.  */
7787
7788 /* The upshot of all of this is that many routines take a (type, host
7789    address, target address) triple as arguments to represent a value.
7790    The host address, if non-null, is supposed to contain an internal
7791    copy of the relevant data; otherwise, the program is to consult the
7792    target at the target address.  */
7793
7794 /* Assuming that VAL0 represents a pointer value, the result of
7795    dereferencing it.  Differs from value_ind in its treatment of
7796    dynamic-sized types.  */
7797
7798 struct value *
7799 ada_value_ind (struct value *val0)
7800 {
7801   struct value *val = value_ind (val0);
7802
7803   if (ada_is_tagged_type (value_type (val), 0))
7804     val = ada_tag_value_at_base_address (val);
7805
7806   return ada_to_fixed_value (val);
7807 }
7808
7809 /* The value resulting from dereferencing any "reference to"
7810    qualifiers on VAL0.  */
7811
7812 static struct value *
7813 ada_coerce_ref (struct value *val0)
7814 {
7815   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7816     {
7817       struct value *val = val0;
7818
7819       val = coerce_ref (val);
7820
7821       if (ada_is_tagged_type (value_type (val), 0))
7822         val = ada_tag_value_at_base_address (val);
7823
7824       return ada_to_fixed_value (val);
7825     }
7826   else
7827     return val0;
7828 }
7829
7830 /* Return OFF rounded upward if necessary to a multiple of
7831    ALIGNMENT (a power of 2).  */
7832
7833 static unsigned int
7834 align_value (unsigned int off, unsigned int alignment)
7835 {
7836   return (off + alignment - 1) & ~(alignment - 1);
7837 }
7838
7839 /* Return the bit alignment required for field #F of template type TYPE.  */
7840
7841 static unsigned int
7842 field_alignment (struct type *type, int f)
7843 {
7844   const char *name = TYPE_FIELD_NAME (type, f);
7845   int len;
7846   int align_offset;
7847
7848   /* The field name should never be null, unless the debugging information
7849      is somehow malformed.  In this case, we assume the field does not
7850      require any alignment.  */
7851   if (name == NULL)
7852     return 1;
7853
7854   len = strlen (name);
7855
7856   if (!isdigit (name[len - 1]))
7857     return 1;
7858
7859   if (isdigit (name[len - 2]))
7860     align_offset = len - 2;
7861   else
7862     align_offset = len - 1;
7863
7864   if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
7865     return TARGET_CHAR_BIT;
7866
7867   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7868 }
7869
7870 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7871
7872 static struct symbol *
7873 ada_find_any_type_symbol (const char *name)
7874 {
7875   struct symbol *sym;
7876
7877   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7878   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7879     return sym;
7880
7881   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7882   return sym;
7883 }
7884
7885 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7886    solely for types defined by debug info, it will not search the GDB
7887    primitive types.  */
7888
7889 static struct type *
7890 ada_find_any_type (const char *name)
7891 {
7892   struct symbol *sym = ada_find_any_type_symbol (name);
7893
7894   if (sym != NULL)
7895     return SYMBOL_TYPE (sym);
7896
7897   return NULL;
7898 }
7899
7900 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7901    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7902    symbol, in which case it is returned.  Otherwise, this looks for
7903    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7904    Return symbol if found, and NULL otherwise.  */
7905
7906 struct symbol *
7907 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7908 {
7909   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7910   struct symbol *sym;
7911
7912   if (strstr (name, "___XR") != NULL)
7913      return name_sym;
7914
7915   sym = find_old_style_renaming_symbol (name, block);
7916
7917   if (sym != NULL)
7918     return sym;
7919
7920   /* Not right yet.  FIXME pnh 7/20/2007.  */
7921   sym = ada_find_any_type_symbol (name);
7922   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7923     return sym;
7924   else
7925     return NULL;
7926 }
7927
7928 static struct symbol *
7929 find_old_style_renaming_symbol (const char *name, const struct block *block)
7930 {
7931   const struct symbol *function_sym = block_linkage_function (block);
7932   char *rename;
7933
7934   if (function_sym != NULL)
7935     {
7936       /* If the symbol is defined inside a function, NAME is not fully
7937          qualified.  This means we need to prepend the function name
7938          as well as adding the ``___XR'' suffix to build the name of
7939          the associated renaming symbol.  */
7940       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7941       /* Function names sometimes contain suffixes used
7942          for instance to qualify nested subprograms.  When building
7943          the XR type name, we need to make sure that this suffix is
7944          not included.  So do not include any suffix in the function
7945          name length below.  */
7946       int function_name_len = ada_name_prefix_len (function_name);
7947       const int rename_len = function_name_len + 2      /*  "__" */
7948         + strlen (name) + 6 /* "___XR\0" */ ;
7949
7950       /* Strip the suffix if necessary.  */
7951       ada_remove_trailing_digits (function_name, &function_name_len);
7952       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7953       ada_remove_Xbn_suffix (function_name, &function_name_len);
7954
7955       /* Library-level functions are a special case, as GNAT adds
7956          a ``_ada_'' prefix to the function name to avoid namespace
7957          pollution.  However, the renaming symbols themselves do not
7958          have this prefix, so we need to skip this prefix if present.  */
7959       if (function_name_len > 5 /* "_ada_" */
7960           && strstr (function_name, "_ada_") == function_name)
7961         {
7962           function_name += 5;
7963           function_name_len -= 5;
7964         }
7965
7966       rename = (char *) alloca (rename_len * sizeof (char));
7967       strncpy (rename, function_name, function_name_len);
7968       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7969                  "__%s___XR", name);
7970     }
7971   else
7972     {
7973       const int rename_len = strlen (name) + 6;
7974
7975       rename = (char *) alloca (rename_len * sizeof (char));
7976       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7977     }
7978
7979   return ada_find_any_type_symbol (rename);
7980 }
7981
7982 /* Because of GNAT encoding conventions, several GDB symbols may match a
7983    given type name.  If the type denoted by TYPE0 is to be preferred to
7984    that of TYPE1 for purposes of type printing, return non-zero;
7985    otherwise return 0.  */
7986
7987 int
7988 ada_prefer_type (struct type *type0, struct type *type1)
7989 {
7990   if (type1 == NULL)
7991     return 1;
7992   else if (type0 == NULL)
7993     return 0;
7994   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7995     return 1;
7996   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7997     return 0;
7998   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7999     return 1;
8000   else if (ada_is_constrained_packed_array_type (type0))
8001     return 1;
8002   else if (ada_is_array_descriptor_type (type0)
8003            && !ada_is_array_descriptor_type (type1))
8004     return 1;
8005   else
8006     {
8007       const char *type0_name = type_name_no_tag (type0);
8008       const char *type1_name = type_name_no_tag (type1);
8009
8010       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
8011           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
8012         return 1;
8013     }
8014   return 0;
8015 }
8016
8017 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
8018    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
8019
8020 const char *
8021 ada_type_name (struct type *type)
8022 {
8023   if (type == NULL)
8024     return NULL;
8025   else if (TYPE_NAME (type) != NULL)
8026     return TYPE_NAME (type);
8027   else
8028     return TYPE_TAG_NAME (type);
8029 }
8030
8031 /* Search the list of "descriptive" types associated to TYPE for a type
8032    whose name is NAME.  */
8033
8034 static struct type *
8035 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
8036 {
8037   struct type *result, *tmp;
8038
8039   if (ada_ignore_descriptive_types_p)
8040     return NULL;
8041
8042   /* If there no descriptive-type info, then there is no parallel type
8043      to be found.  */
8044   if (!HAVE_GNAT_AUX_INFO (type))
8045     return NULL;
8046
8047   result = TYPE_DESCRIPTIVE_TYPE (type);
8048   while (result != NULL)
8049     {
8050       const char *result_name = ada_type_name (result);
8051
8052       if (result_name == NULL)
8053         {
8054           warning (_("unexpected null name on descriptive type"));
8055           return NULL;
8056         }
8057
8058       /* If the names match, stop.  */
8059       if (strcmp (result_name, name) == 0)
8060         break;
8061
8062       /* Otherwise, look at the next item on the list, if any.  */
8063       if (HAVE_GNAT_AUX_INFO (result))
8064         tmp = TYPE_DESCRIPTIVE_TYPE (result);
8065       else
8066         tmp = NULL;
8067
8068       /* If not found either, try after having resolved the typedef.  */
8069       if (tmp != NULL)
8070         result = tmp;
8071       else
8072         {
8073           result = check_typedef (result);
8074           if (HAVE_GNAT_AUX_INFO (result))
8075             result = TYPE_DESCRIPTIVE_TYPE (result);
8076           else
8077             result = NULL;
8078         }
8079     }
8080
8081   /* If we didn't find a match, see whether this is a packed array.  With
8082      older compilers, the descriptive type information is either absent or
8083      irrelevant when it comes to packed arrays so the above lookup fails.
8084      Fall back to using a parallel lookup by name in this case.  */
8085   if (result == NULL && ada_is_constrained_packed_array_type (type))
8086     return ada_find_any_type (name);
8087
8088   return result;
8089 }
8090
8091 /* Find a parallel type to TYPE with the specified NAME, using the
8092    descriptive type taken from the debugging information, if available,
8093    and otherwise using the (slower) name-based method.  */
8094
8095 static struct type *
8096 ada_find_parallel_type_with_name (struct type *type, const char *name)
8097 {
8098   struct type *result = NULL;
8099
8100   if (HAVE_GNAT_AUX_INFO (type))
8101     result = find_parallel_type_by_descriptive_type (type, name);
8102   else
8103     result = ada_find_any_type (name);
8104
8105   return result;
8106 }
8107
8108 /* Same as above, but specify the name of the parallel type by appending
8109    SUFFIX to the name of TYPE.  */
8110
8111 struct type *
8112 ada_find_parallel_type (struct type *type, const char *suffix)
8113 {
8114   char *name;
8115   const char *type_name = ada_type_name (type);
8116   int len;
8117
8118   if (type_name == NULL)
8119     return NULL;
8120
8121   len = strlen (type_name);
8122
8123   name = (char *) alloca (len + strlen (suffix) + 1);
8124
8125   strcpy (name, type_name);
8126   strcpy (name + len, suffix);
8127
8128   return ada_find_parallel_type_with_name (type, name);
8129 }
8130
8131 /* If TYPE is a variable-size record type, return the corresponding template
8132    type describing its fields.  Otherwise, return NULL.  */
8133
8134 static struct type *
8135 dynamic_template_type (struct type *type)
8136 {
8137   type = ada_check_typedef (type);
8138
8139   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
8140       || ada_type_name (type) == NULL)
8141     return NULL;
8142   else
8143     {
8144       int len = strlen (ada_type_name (type));
8145
8146       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
8147         return type;
8148       else
8149         return ada_find_parallel_type (type, "___XVE");
8150     }
8151 }
8152
8153 /* Assuming that TEMPL_TYPE is a union or struct type, returns
8154    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
8155
8156 static int
8157 is_dynamic_field (struct type *templ_type, int field_num)
8158 {
8159   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
8160
8161   return name != NULL
8162     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
8163     && strstr (name, "___XVL") != NULL;
8164 }
8165
8166 /* The index of the variant field of TYPE, or -1 if TYPE does not
8167    represent a variant record type.  */
8168
8169 static int
8170 variant_field_index (struct type *type)
8171 {
8172   int f;
8173
8174   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
8175     return -1;
8176
8177   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
8178     {
8179       if (ada_is_variant_part (type, f))
8180         return f;
8181     }
8182   return -1;
8183 }
8184
8185 /* A record type with no fields.  */
8186
8187 static struct type *
8188 empty_record (struct type *templ)
8189 {
8190   struct type *type = alloc_type_copy (templ);
8191
8192   TYPE_CODE (type) = TYPE_CODE_STRUCT;
8193   TYPE_NFIELDS (type) = 0;
8194   TYPE_FIELDS (type) = NULL;
8195   INIT_CPLUS_SPECIFIC (type);
8196   TYPE_NAME (type) = "<empty>";
8197   TYPE_TAG_NAME (type) = NULL;
8198   TYPE_LENGTH (type) = 0;
8199   return type;
8200 }
8201
8202 /* An ordinary record type (with fixed-length fields) that describes
8203    the value of type TYPE at VALADDR or ADDRESS (see comments at
8204    the beginning of this section) VAL according to GNAT conventions.
8205    DVAL0 should describe the (portion of a) record that contains any
8206    necessary discriminants.  It should be NULL if value_type (VAL) is
8207    an outer-level type (i.e., as opposed to a branch of a variant.)  A
8208    variant field (unless unchecked) is replaced by a particular branch
8209    of the variant.
8210
8211    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
8212    length are not statically known are discarded.  As a consequence,
8213    VALADDR, ADDRESS and DVAL0 are ignored.
8214
8215    NOTE: Limitations: For now, we assume that dynamic fields and
8216    variants occupy whole numbers of bytes.  However, they need not be
8217    byte-aligned.  */
8218
8219 struct type *
8220 ada_template_to_fixed_record_type_1 (struct type *type,
8221                                      const gdb_byte *valaddr,
8222                                      CORE_ADDR address, struct value *dval0,
8223                                      int keep_dynamic_fields)
8224 {
8225   struct value *mark = value_mark ();
8226   struct value *dval;
8227   struct type *rtype;
8228   int nfields, bit_len;
8229   int variant_field;
8230   long off;
8231   int fld_bit_len;
8232   int f;
8233
8234   /* Compute the number of fields in this record type that are going
8235      to be processed: unless keep_dynamic_fields, this includes only
8236      fields whose position and length are static will be processed.  */
8237   if (keep_dynamic_fields)
8238     nfields = TYPE_NFIELDS (type);
8239   else
8240     {
8241       nfields = 0;
8242       while (nfields < TYPE_NFIELDS (type)
8243              && !ada_is_variant_part (type, nfields)
8244              && !is_dynamic_field (type, nfields))
8245         nfields++;
8246     }
8247
8248   rtype = alloc_type_copy (type);
8249   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8250   INIT_CPLUS_SPECIFIC (rtype);
8251   TYPE_NFIELDS (rtype) = nfields;
8252   TYPE_FIELDS (rtype) = (struct field *)
8253     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8254   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
8255   TYPE_NAME (rtype) = ada_type_name (type);
8256   TYPE_TAG_NAME (rtype) = NULL;
8257   TYPE_FIXED_INSTANCE (rtype) = 1;
8258
8259   off = 0;
8260   bit_len = 0;
8261   variant_field = -1;
8262
8263   for (f = 0; f < nfields; f += 1)
8264     {
8265       off = align_value (off, field_alignment (type, f))
8266         + TYPE_FIELD_BITPOS (type, f);
8267       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
8268       TYPE_FIELD_BITSIZE (rtype, f) = 0;
8269
8270       if (ada_is_variant_part (type, f))
8271         {
8272           variant_field = f;
8273           fld_bit_len = 0;
8274         }
8275       else if (is_dynamic_field (type, f))
8276         {
8277           const gdb_byte *field_valaddr = valaddr;
8278           CORE_ADDR field_address = address;
8279           struct type *field_type =
8280             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
8281
8282           if (dval0 == NULL)
8283             {
8284               /* rtype's length is computed based on the run-time
8285                  value of discriminants.  If the discriminants are not
8286                  initialized, the type size may be completely bogus and
8287                  GDB may fail to allocate a value for it.  So check the
8288                  size first before creating the value.  */
8289               ada_ensure_varsize_limit (rtype);
8290               /* Using plain value_from_contents_and_address here
8291                  causes problems because we will end up trying to
8292                  resolve a type that is currently being
8293                  constructed.  */
8294               dval = value_from_contents_and_address_unresolved (rtype,
8295                                                                  valaddr,
8296                                                                  address);
8297               rtype = value_type (dval);
8298             }
8299           else
8300             dval = dval0;
8301
8302           /* If the type referenced by this field is an aligner type, we need
8303              to unwrap that aligner type, because its size might not be set.
8304              Keeping the aligner type would cause us to compute the wrong
8305              size for this field, impacting the offset of the all the fields
8306              that follow this one.  */
8307           if (ada_is_aligner_type (field_type))
8308             {
8309               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8310
8311               field_valaddr = cond_offset_host (field_valaddr, field_offset);
8312               field_address = cond_offset_target (field_address, field_offset);
8313               field_type = ada_aligned_type (field_type);
8314             }
8315
8316           field_valaddr = cond_offset_host (field_valaddr,
8317                                             off / TARGET_CHAR_BIT);
8318           field_address = cond_offset_target (field_address,
8319                                               off / TARGET_CHAR_BIT);
8320
8321           /* Get the fixed type of the field.  Note that, in this case,
8322              we do not want to get the real type out of the tag: if
8323              the current field is the parent part of a tagged record,
8324              we will get the tag of the object.  Clearly wrong: the real
8325              type of the parent is not the real type of the child.  We
8326              would end up in an infinite loop.  */
8327           field_type = ada_get_base_type (field_type);
8328           field_type = ada_to_fixed_type (field_type, field_valaddr,
8329                                           field_address, dval, 0);
8330           /* If the field size is already larger than the maximum
8331              object size, then the record itself will necessarily
8332              be larger than the maximum object size.  We need to make
8333              this check now, because the size might be so ridiculously
8334              large (due to an uninitialized variable in the inferior)
8335              that it would cause an overflow when adding it to the
8336              record size.  */
8337           ada_ensure_varsize_limit (field_type);
8338
8339           TYPE_FIELD_TYPE (rtype, f) = field_type;
8340           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8341           /* The multiplication can potentially overflow.  But because
8342              the field length has been size-checked just above, and
8343              assuming that the maximum size is a reasonable value,
8344              an overflow should not happen in practice.  So rather than
8345              adding overflow recovery code to this already complex code,
8346              we just assume that it's not going to happen.  */
8347           fld_bit_len =
8348             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8349         }
8350       else
8351         {
8352           /* Note: If this field's type is a typedef, it is important
8353              to preserve the typedef layer.
8354
8355              Otherwise, we might be transforming a typedef to a fat
8356              pointer (encoding a pointer to an unconstrained array),
8357              into a basic fat pointer (encoding an unconstrained
8358              array).  As both types are implemented using the same
8359              structure, the typedef is the only clue which allows us
8360              to distinguish between the two options.  Stripping it
8361              would prevent us from printing this field appropriately.  */
8362           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
8363           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8364           if (TYPE_FIELD_BITSIZE (type, f) > 0)
8365             fld_bit_len =
8366               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8367           else
8368             {
8369               struct type *field_type = TYPE_FIELD_TYPE (type, f);
8370
8371               /* We need to be careful of typedefs when computing
8372                  the length of our field.  If this is a typedef,
8373                  get the length of the target type, not the length
8374                  of the typedef.  */
8375               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8376                 field_type = ada_typedef_target_type (field_type);
8377
8378               fld_bit_len =
8379                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8380             }
8381         }
8382       if (off + fld_bit_len > bit_len)
8383         bit_len = off + fld_bit_len;
8384       off += fld_bit_len;
8385       TYPE_LENGTH (rtype) =
8386         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8387     }
8388
8389   /* We handle the variant part, if any, at the end because of certain
8390      odd cases in which it is re-ordered so as NOT to be the last field of
8391      the record.  This can happen in the presence of representation
8392      clauses.  */
8393   if (variant_field >= 0)
8394     {
8395       struct type *branch_type;
8396
8397       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8398
8399       if (dval0 == NULL)
8400         {
8401           /* Using plain value_from_contents_and_address here causes
8402              problems because we will end up trying to resolve a type
8403              that is currently being constructed.  */
8404           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8405                                                              address);
8406           rtype = value_type (dval);
8407         }
8408       else
8409         dval = dval0;
8410
8411       branch_type =
8412         to_fixed_variant_branch_type
8413         (TYPE_FIELD_TYPE (type, variant_field),
8414          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8415          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8416       if (branch_type == NULL)
8417         {
8418           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8419             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8420           TYPE_NFIELDS (rtype) -= 1;
8421         }
8422       else
8423         {
8424           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8425           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8426           fld_bit_len =
8427             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8428             TARGET_CHAR_BIT;
8429           if (off + fld_bit_len > bit_len)
8430             bit_len = off + fld_bit_len;
8431           TYPE_LENGTH (rtype) =
8432             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8433         }
8434     }
8435
8436   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8437      should contain the alignment of that record, which should be a strictly
8438      positive value.  If null or negative, then something is wrong, most
8439      probably in the debug info.  In that case, we don't round up the size
8440      of the resulting type.  If this record is not part of another structure,
8441      the current RTYPE length might be good enough for our purposes.  */
8442   if (TYPE_LENGTH (type) <= 0)
8443     {
8444       if (TYPE_NAME (rtype))
8445         warning (_("Invalid type size for `%s' detected: %d."),
8446                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8447       else
8448         warning (_("Invalid type size for <unnamed> detected: %d."),
8449                  TYPE_LENGTH (type));
8450     }
8451   else
8452     {
8453       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8454                                          TYPE_LENGTH (type));
8455     }
8456
8457   value_free_to_mark (mark);
8458   if (TYPE_LENGTH (rtype) > varsize_limit)
8459     error (_("record type with dynamic size is larger than varsize-limit"));
8460   return rtype;
8461 }
8462
8463 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8464    of 1.  */
8465
8466 static struct type *
8467 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8468                                CORE_ADDR address, struct value *dval0)
8469 {
8470   return ada_template_to_fixed_record_type_1 (type, valaddr,
8471                                               address, dval0, 1);
8472 }
8473
8474 /* An ordinary record type in which ___XVL-convention fields and
8475    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8476    static approximations, containing all possible fields.  Uses
8477    no runtime values.  Useless for use in values, but that's OK,
8478    since the results are used only for type determinations.   Works on both
8479    structs and unions.  Representation note: to save space, we memorize
8480    the result of this function in the TYPE_TARGET_TYPE of the
8481    template type.  */
8482
8483 static struct type *
8484 template_to_static_fixed_type (struct type *type0)
8485 {
8486   struct type *type;
8487   int nfields;
8488   int f;
8489
8490   /* No need no do anything if the input type is already fixed.  */
8491   if (TYPE_FIXED_INSTANCE (type0))
8492     return type0;
8493
8494   /* Likewise if we already have computed the static approximation.  */
8495   if (TYPE_TARGET_TYPE (type0) != NULL)
8496     return TYPE_TARGET_TYPE (type0);
8497
8498   /* Don't clone TYPE0 until we are sure we are going to need a copy.  */
8499   type = type0;
8500   nfields = TYPE_NFIELDS (type0);
8501
8502   /* Whether or not we cloned TYPE0, cache the result so that we don't do
8503      recompute all over next time.  */
8504   TYPE_TARGET_TYPE (type0) = type;
8505
8506   for (f = 0; f < nfields; f += 1)
8507     {
8508       struct type *field_type = TYPE_FIELD_TYPE (type0, f);
8509       struct type *new_type;
8510
8511       if (is_dynamic_field (type0, f))
8512         {
8513           field_type = ada_check_typedef (field_type);
8514           new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8515         }
8516       else
8517         new_type = static_unwrap_type (field_type);
8518
8519       if (new_type != field_type)
8520         {
8521           /* Clone TYPE0 only the first time we get a new field type.  */
8522           if (type == type0)
8523             {
8524               TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8525               TYPE_CODE (type) = TYPE_CODE (type0);
8526               INIT_CPLUS_SPECIFIC (type);
8527               TYPE_NFIELDS (type) = nfields;
8528               TYPE_FIELDS (type) = (struct field *)
8529                 TYPE_ALLOC (type, nfields * sizeof (struct field));
8530               memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8531                       sizeof (struct field) * nfields);
8532               TYPE_NAME (type) = ada_type_name (type0);
8533               TYPE_TAG_NAME (type) = NULL;
8534               TYPE_FIXED_INSTANCE (type) = 1;
8535               TYPE_LENGTH (type) = 0;
8536             }
8537           TYPE_FIELD_TYPE (type, f) = new_type;
8538           TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8539         }
8540     }
8541
8542   return type;
8543 }
8544
8545 /* Given an object of type TYPE whose contents are at VALADDR and
8546    whose address in memory is ADDRESS, returns a revision of TYPE,
8547    which should be a non-dynamic-sized record, in which the variant
8548    part, if any, is replaced with the appropriate branch.  Looks
8549    for discriminant values in DVAL0, which can be NULL if the record
8550    contains the necessary discriminant values.  */
8551
8552 static struct type *
8553 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8554                                    CORE_ADDR address, struct value *dval0)
8555 {
8556   struct value *mark = value_mark ();
8557   struct value *dval;
8558   struct type *rtype;
8559   struct type *branch_type;
8560   int nfields = TYPE_NFIELDS (type);
8561   int variant_field = variant_field_index (type);
8562
8563   if (variant_field == -1)
8564     return type;
8565
8566   if (dval0 == NULL)
8567     {
8568       dval = value_from_contents_and_address (type, valaddr, address);
8569       type = value_type (dval);
8570     }
8571   else
8572     dval = dval0;
8573
8574   rtype = alloc_type_copy (type);
8575   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8576   INIT_CPLUS_SPECIFIC (rtype);
8577   TYPE_NFIELDS (rtype) = nfields;
8578   TYPE_FIELDS (rtype) =
8579     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8580   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8581           sizeof (struct field) * nfields);
8582   TYPE_NAME (rtype) = ada_type_name (type);
8583   TYPE_TAG_NAME (rtype) = NULL;
8584   TYPE_FIXED_INSTANCE (rtype) = 1;
8585   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8586
8587   branch_type = to_fixed_variant_branch_type
8588     (TYPE_FIELD_TYPE (type, variant_field),
8589      cond_offset_host (valaddr,
8590                        TYPE_FIELD_BITPOS (type, variant_field)
8591                        / TARGET_CHAR_BIT),
8592      cond_offset_target (address,
8593                          TYPE_FIELD_BITPOS (type, variant_field)
8594                          / TARGET_CHAR_BIT), dval);
8595   if (branch_type == NULL)
8596     {
8597       int f;
8598
8599       for (f = variant_field + 1; f < nfields; f += 1)
8600         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8601       TYPE_NFIELDS (rtype) -= 1;
8602     }
8603   else
8604     {
8605       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8606       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8607       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8608       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8609     }
8610   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8611
8612   value_free_to_mark (mark);
8613   return rtype;
8614 }
8615
8616 /* An ordinary record type (with fixed-length fields) that describes
8617    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8618    beginning of this section].   Any necessary discriminants' values
8619    should be in DVAL, a record value; it may be NULL if the object
8620    at ADDR itself contains any necessary discriminant values.
8621    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8622    values from the record are needed.  Except in the case that DVAL,
8623    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8624    unchecked) is replaced by a particular branch of the variant.
8625
8626    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8627    is questionable and may be removed.  It can arise during the
8628    processing of an unconstrained-array-of-record type where all the
8629    variant branches have exactly the same size.  This is because in
8630    such cases, the compiler does not bother to use the XVS convention
8631    when encoding the record.  I am currently dubious of this
8632    shortcut and suspect the compiler should be altered.  FIXME.  */
8633
8634 static struct type *
8635 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8636                       CORE_ADDR address, struct value *dval)
8637 {
8638   struct type *templ_type;
8639
8640   if (TYPE_FIXED_INSTANCE (type0))
8641     return type0;
8642
8643   templ_type = dynamic_template_type (type0);
8644
8645   if (templ_type != NULL)
8646     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8647   else if (variant_field_index (type0) >= 0)
8648     {
8649       if (dval == NULL && valaddr == NULL && address == 0)
8650         return type0;
8651       return to_record_with_fixed_variant_part (type0, valaddr, address,
8652                                                 dval);
8653     }
8654   else
8655     {
8656       TYPE_FIXED_INSTANCE (type0) = 1;
8657       return type0;
8658     }
8659
8660 }
8661
8662 /* An ordinary record type (with fixed-length fields) that describes
8663    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8664    union type.  Any necessary discriminants' values should be in DVAL,
8665    a record value.  That is, this routine selects the appropriate
8666    branch of the union at ADDR according to the discriminant value
8667    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8668    it represents a variant subject to a pragma Unchecked_Union.  */
8669
8670 static struct type *
8671 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8672                               CORE_ADDR address, struct value *dval)
8673 {
8674   int which;
8675   struct type *templ_type;
8676   struct type *var_type;
8677
8678   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8679     var_type = TYPE_TARGET_TYPE (var_type0);
8680   else
8681     var_type = var_type0;
8682
8683   templ_type = ada_find_parallel_type (var_type, "___XVU");
8684
8685   if (templ_type != NULL)
8686     var_type = templ_type;
8687
8688   if (is_unchecked_variant (var_type, value_type (dval)))
8689       return var_type0;
8690   which =
8691     ada_which_variant_applies (var_type,
8692                                value_type (dval), value_contents (dval));
8693
8694   if (which < 0)
8695     return empty_record (var_type);
8696   else if (is_dynamic_field (var_type, which))
8697     return to_fixed_record_type
8698       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8699        valaddr, address, dval);
8700   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8701     return
8702       to_fixed_record_type
8703       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8704   else
8705     return TYPE_FIELD_TYPE (var_type, which);
8706 }
8707
8708 /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8709    ENCODING_TYPE, a type following the GNAT conventions for discrete
8710    type encodings, only carries redundant information.  */
8711
8712 static int
8713 ada_is_redundant_range_encoding (struct type *range_type,
8714                                  struct type *encoding_type)
8715 {
8716   struct type *fixed_range_type;
8717   const char *bounds_str;
8718   int n;
8719   LONGEST lo, hi;
8720
8721   gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8722
8723   if (TYPE_CODE (get_base_type (range_type))
8724       != TYPE_CODE (get_base_type (encoding_type)))
8725     {
8726       /* The compiler probably used a simple base type to describe
8727          the range type instead of the range's actual base type,
8728          expecting us to get the real base type from the encoding
8729          anyway.  In this situation, the encoding cannot be ignored
8730          as redundant.  */
8731       return 0;
8732     }
8733
8734   if (is_dynamic_type (range_type))
8735     return 0;
8736
8737   if (TYPE_NAME (encoding_type) == NULL)
8738     return 0;
8739
8740   bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8741   if (bounds_str == NULL)
8742     return 0;
8743
8744   n = 8; /* Skip "___XDLU_".  */
8745   if (!ada_scan_number (bounds_str, n, &lo, &n))
8746     return 0;
8747   if (TYPE_LOW_BOUND (range_type) != lo)
8748     return 0;
8749
8750   n += 2; /* Skip the "__" separator between the two bounds.  */
8751   if (!ada_scan_number (bounds_str, n, &hi, &n))
8752     return 0;
8753   if (TYPE_HIGH_BOUND (range_type) != hi)
8754     return 0;
8755
8756   return 1;
8757 }
8758
8759 /* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8760    a type following the GNAT encoding for describing array type
8761    indices, only carries redundant information.  */
8762
8763 static int
8764 ada_is_redundant_index_type_desc (struct type *array_type,
8765                                   struct type *desc_type)
8766 {
8767   struct type *this_layer = check_typedef (array_type);
8768   int i;
8769
8770   for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8771     {
8772       if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8773                                             TYPE_FIELD_TYPE (desc_type, i)))
8774         return 0;
8775       this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8776     }
8777
8778   return 1;
8779 }
8780
8781 /* Assuming that TYPE0 is an array type describing the type of a value
8782    at ADDR, and that DVAL describes a record containing any
8783    discriminants used in TYPE0, returns a type for the value that
8784    contains no dynamic components (that is, no components whose sizes
8785    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8786    true, gives an error message if the resulting type's size is over
8787    varsize_limit.  */
8788
8789 static struct type *
8790 to_fixed_array_type (struct type *type0, struct value *dval,
8791                      int ignore_too_big)
8792 {
8793   struct type *index_type_desc;
8794   struct type *result;
8795   int constrained_packed_array_p;
8796   static const char *xa_suffix = "___XA";
8797
8798   type0 = ada_check_typedef (type0);
8799   if (TYPE_FIXED_INSTANCE (type0))
8800     return type0;
8801
8802   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8803   if (constrained_packed_array_p)
8804     type0 = decode_constrained_packed_array_type (type0);
8805
8806   index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8807
8808   /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8809      encoding suffixed with 'P' may still be generated.  If so,
8810      it should be used to find the XA type.  */
8811
8812   if (index_type_desc == NULL)
8813     {
8814       const char *type_name = ada_type_name (type0);
8815
8816       if (type_name != NULL)
8817         {
8818           const int len = strlen (type_name);
8819           char *name = (char *) alloca (len + strlen (xa_suffix));
8820
8821           if (type_name[len - 1] == 'P')
8822             {
8823               strcpy (name, type_name);
8824               strcpy (name + len - 1, xa_suffix);
8825               index_type_desc = ada_find_parallel_type_with_name (type0, name);
8826             }
8827         }
8828     }
8829
8830   ada_fixup_array_indexes_type (index_type_desc);
8831   if (index_type_desc != NULL
8832       && ada_is_redundant_index_type_desc (type0, index_type_desc))
8833     {
8834       /* Ignore this ___XA parallel type, as it does not bring any
8835          useful information.  This allows us to avoid creating fixed
8836          versions of the array's index types, which would be identical
8837          to the original ones.  This, in turn, can also help avoid
8838          the creation of fixed versions of the array itself.  */
8839       index_type_desc = NULL;
8840     }
8841
8842   if (index_type_desc == NULL)
8843     {
8844       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8845
8846       /* NOTE: elt_type---the fixed version of elt_type0---should never
8847          depend on the contents of the array in properly constructed
8848          debugging data.  */
8849       /* Create a fixed version of the array element type.
8850          We're not providing the address of an element here,
8851          and thus the actual object value cannot be inspected to do
8852          the conversion.  This should not be a problem, since arrays of
8853          unconstrained objects are not allowed.  In particular, all
8854          the elements of an array of a tagged type should all be of
8855          the same type specified in the debugging info.  No need to
8856          consult the object tag.  */
8857       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8858
8859       /* Make sure we always create a new array type when dealing with
8860          packed array types, since we're going to fix-up the array
8861          type length and element bitsize a little further down.  */
8862       if (elt_type0 == elt_type && !constrained_packed_array_p)
8863         result = type0;
8864       else
8865         result = create_array_type (alloc_type_copy (type0),
8866                                     elt_type, TYPE_INDEX_TYPE (type0));
8867     }
8868   else
8869     {
8870       int i;
8871       struct type *elt_type0;
8872
8873       elt_type0 = type0;
8874       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8875         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8876
8877       /* NOTE: result---the fixed version of elt_type0---should never
8878          depend on the contents of the array in properly constructed
8879          debugging data.  */
8880       /* Create a fixed version of the array element type.
8881          We're not providing the address of an element here,
8882          and thus the actual object value cannot be inspected to do
8883          the conversion.  This should not be a problem, since arrays of
8884          unconstrained objects are not allowed.  In particular, all
8885          the elements of an array of a tagged type should all be of
8886          the same type specified in the debugging info.  No need to
8887          consult the object tag.  */
8888       result =
8889         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8890
8891       elt_type0 = type0;
8892       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8893         {
8894           struct type *range_type =
8895             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8896
8897           result = create_array_type (alloc_type_copy (elt_type0),
8898                                       result, range_type);
8899           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8900         }
8901       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8902         error (_("array type with dynamic size is larger than varsize-limit"));
8903     }
8904
8905   /* We want to preserve the type name.  This can be useful when
8906      trying to get the type name of a value that has already been
8907      printed (for instance, if the user did "print VAR; whatis $".  */
8908   TYPE_NAME (result) = TYPE_NAME (type0);
8909
8910   if (constrained_packed_array_p)
8911     {
8912       /* So far, the resulting type has been created as if the original
8913          type was a regular (non-packed) array type.  As a result, the
8914          bitsize of the array elements needs to be set again, and the array
8915          length needs to be recomputed based on that bitsize.  */
8916       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8917       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8918
8919       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8920       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8921       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8922         TYPE_LENGTH (result)++;
8923     }
8924
8925   TYPE_FIXED_INSTANCE (result) = 1;
8926   return result;
8927 }
8928
8929
8930 /* A standard type (containing no dynamically sized components)
8931    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8932    DVAL describes a record containing any discriminants used in TYPE0,
8933    and may be NULL if there are none, or if the object of type TYPE at
8934    ADDRESS or in VALADDR contains these discriminants.
8935    
8936    If CHECK_TAG is not null, in the case of tagged types, this function
8937    attempts to locate the object's tag and use it to compute the actual
8938    type.  However, when ADDRESS is null, we cannot use it to determine the
8939    location of the tag, and therefore compute the tagged type's actual type.
8940    So we return the tagged type without consulting the tag.  */
8941    
8942 static struct type *
8943 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8944                    CORE_ADDR address, struct value *dval, int check_tag)
8945 {
8946   type = ada_check_typedef (type);
8947   switch (TYPE_CODE (type))
8948     {
8949     default:
8950       return type;
8951     case TYPE_CODE_STRUCT:
8952       {
8953         struct type *static_type = to_static_fixed_type (type);
8954         struct type *fixed_record_type =
8955           to_fixed_record_type (type, valaddr, address, NULL);
8956
8957         /* If STATIC_TYPE is a tagged type and we know the object's address,
8958            then we can determine its tag, and compute the object's actual
8959            type from there.  Note that we have to use the fixed record
8960            type (the parent part of the record may have dynamic fields
8961            and the way the location of _tag is expressed may depend on
8962            them).  */
8963
8964         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8965           {
8966             struct value *tag =
8967               value_tag_from_contents_and_address
8968               (fixed_record_type,
8969                valaddr,
8970                address);
8971             struct type *real_type = type_from_tag (tag);
8972             struct value *obj =
8973               value_from_contents_and_address (fixed_record_type,
8974                                                valaddr,
8975                                                address);
8976             fixed_record_type = value_type (obj);
8977             if (real_type != NULL)
8978               return to_fixed_record_type
8979                 (real_type, NULL,
8980                  value_address (ada_tag_value_at_base_address (obj)), NULL);
8981           }
8982
8983         /* Check to see if there is a parallel ___XVZ variable.
8984            If there is, then it provides the actual size of our type.  */
8985         else if (ada_type_name (fixed_record_type) != NULL)
8986           {
8987             const char *name = ada_type_name (fixed_record_type);
8988             char *xvz_name
8989               = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
8990             LONGEST size;
8991
8992             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8993             if (get_int_var_value (xvz_name, size)
8994                 && TYPE_LENGTH (fixed_record_type) != size)
8995               {
8996                 fixed_record_type = copy_type (fixed_record_type);
8997                 TYPE_LENGTH (fixed_record_type) = size;
8998
8999                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
9000                    observed this when the debugging info is STABS, and
9001                    apparently it is something that is hard to fix.
9002
9003                    In practice, we don't need the actual type definition
9004                    at all, because the presence of the XVZ variable allows us
9005                    to assume that there must be a XVS type as well, which we
9006                    should be able to use later, when we need the actual type
9007                    definition.
9008
9009                    In the meantime, pretend that the "fixed" type we are
9010                    returning is NOT a stub, because this can cause trouble
9011                    when using this type to create new types targeting it.
9012                    Indeed, the associated creation routines often check
9013                    whether the target type is a stub and will try to replace
9014                    it, thus using a type with the wrong size.  This, in turn,
9015                    might cause the new type to have the wrong size too.
9016                    Consider the case of an array, for instance, where the size
9017                    of the array is computed from the number of elements in
9018                    our array multiplied by the size of its element.  */
9019                 TYPE_STUB (fixed_record_type) = 0;
9020               }
9021           }
9022         return fixed_record_type;
9023       }
9024     case TYPE_CODE_ARRAY:
9025       return to_fixed_array_type (type, dval, 1);
9026     case TYPE_CODE_UNION:
9027       if (dval == NULL)
9028         return type;
9029       else
9030         return to_fixed_variant_branch_type (type, valaddr, address, dval);
9031     }
9032 }
9033
9034 /* The same as ada_to_fixed_type_1, except that it preserves the type
9035    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
9036
9037    The typedef layer needs be preserved in order to differentiate between
9038    arrays and array pointers when both types are implemented using the same
9039    fat pointer.  In the array pointer case, the pointer is encoded as
9040    a typedef of the pointer type.  For instance, considering:
9041
9042           type String_Access is access String;
9043           S1 : String_Access := null;
9044
9045    To the debugger, S1 is defined as a typedef of type String.  But
9046    to the user, it is a pointer.  So if the user tries to print S1,
9047    we should not dereference the array, but print the array address
9048    instead.
9049
9050    If we didn't preserve the typedef layer, we would lose the fact that
9051    the type is to be presented as a pointer (needs de-reference before
9052    being printed).  And we would also use the source-level type name.  */
9053
9054 struct type *
9055 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
9056                    CORE_ADDR address, struct value *dval, int check_tag)
9057
9058 {
9059   struct type *fixed_type =
9060     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
9061
9062   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
9063       then preserve the typedef layer.
9064
9065       Implementation note: We can only check the main-type portion of
9066       the TYPE and FIXED_TYPE, because eliminating the typedef layer
9067       from TYPE now returns a type that has the same instance flags
9068       as TYPE.  For instance, if TYPE is a "typedef const", and its
9069       target type is a "struct", then the typedef elimination will return
9070       a "const" version of the target type.  See check_typedef for more
9071       details about how the typedef layer elimination is done.
9072
9073       brobecker/2010-11-19: It seems to me that the only case where it is
9074       useful to preserve the typedef layer is when dealing with fat pointers.
9075       Perhaps, we could add a check for that and preserve the typedef layer
9076       only in that situation.  But this seems unecessary so far, probably
9077       because we call check_typedef/ada_check_typedef pretty much everywhere.
9078       */
9079   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
9080       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
9081           == TYPE_MAIN_TYPE (fixed_type)))
9082     return type;
9083
9084   return fixed_type;
9085 }
9086
9087 /* A standard (static-sized) type corresponding as well as possible to
9088    TYPE0, but based on no runtime data.  */
9089
9090 static struct type *
9091 to_static_fixed_type (struct type *type0)
9092 {
9093   struct type *type;
9094
9095   if (type0 == NULL)
9096     return NULL;
9097
9098   if (TYPE_FIXED_INSTANCE (type0))
9099     return type0;
9100
9101   type0 = ada_check_typedef (type0);
9102
9103   switch (TYPE_CODE (type0))
9104     {
9105     default:
9106       return type0;
9107     case TYPE_CODE_STRUCT:
9108       type = dynamic_template_type (type0);
9109       if (type != NULL)
9110         return template_to_static_fixed_type (type);
9111       else
9112         return template_to_static_fixed_type (type0);
9113     case TYPE_CODE_UNION:
9114       type = ada_find_parallel_type (type0, "___XVU");
9115       if (type != NULL)
9116         return template_to_static_fixed_type (type);
9117       else
9118         return template_to_static_fixed_type (type0);
9119     }
9120 }
9121
9122 /* A static approximation of TYPE with all type wrappers removed.  */
9123
9124 static struct type *
9125 static_unwrap_type (struct type *type)
9126 {
9127   if (ada_is_aligner_type (type))
9128     {
9129       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
9130       if (ada_type_name (type1) == NULL)
9131         TYPE_NAME (type1) = ada_type_name (type);
9132
9133       return static_unwrap_type (type1);
9134     }
9135   else
9136     {
9137       struct type *raw_real_type = ada_get_base_type (type);
9138
9139       if (raw_real_type == type)
9140         return type;
9141       else
9142         return to_static_fixed_type (raw_real_type);
9143     }
9144 }
9145
9146 /* In some cases, incomplete and private types require
9147    cross-references that are not resolved as records (for example,
9148       type Foo;
9149       type FooP is access Foo;
9150       V: FooP;
9151       type Foo is array ...;
9152    ).  In these cases, since there is no mechanism for producing
9153    cross-references to such types, we instead substitute for FooP a
9154    stub enumeration type that is nowhere resolved, and whose tag is
9155    the name of the actual type.  Call these types "non-record stubs".  */
9156
9157 /* A type equivalent to TYPE that is not a non-record stub, if one
9158    exists, otherwise TYPE.  */
9159
9160 struct type *
9161 ada_check_typedef (struct type *type)
9162 {
9163   if (type == NULL)
9164     return NULL;
9165
9166   /* If our type is a typedef type of a fat pointer, then we're done.
9167      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
9168      what allows us to distinguish between fat pointers that represent
9169      array types, and fat pointers that represent array access types
9170      (in both cases, the compiler implements them as fat pointers).  */
9171   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
9172       && is_thick_pntr (ada_typedef_target_type (type)))
9173     return type;
9174
9175   type = check_typedef (type);
9176   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
9177       || !TYPE_STUB (type)
9178       || TYPE_TAG_NAME (type) == NULL)
9179     return type;
9180   else
9181     {
9182       const char *name = TYPE_TAG_NAME (type);
9183       struct type *type1 = ada_find_any_type (name);
9184
9185       if (type1 == NULL)
9186         return type;
9187
9188       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
9189          stubs pointing to arrays, as we don't create symbols for array
9190          types, only for the typedef-to-array types).  If that's the case,
9191          strip the typedef layer.  */
9192       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
9193         type1 = ada_check_typedef (type1);
9194
9195       return type1;
9196     }
9197 }
9198
9199 /* A value representing the data at VALADDR/ADDRESS as described by
9200    type TYPE0, but with a standard (static-sized) type that correctly
9201    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
9202    type, then return VAL0 [this feature is simply to avoid redundant
9203    creation of struct values].  */
9204
9205 static struct value *
9206 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
9207                            struct value *val0)
9208 {
9209   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
9210
9211   if (type == type0 && val0 != NULL)
9212     return val0;
9213   else
9214     return value_from_contents_and_address (type, 0, address);
9215 }
9216
9217 /* A value representing VAL, but with a standard (static-sized) type
9218    that correctly describes it.  Does not necessarily create a new
9219    value.  */
9220
9221 struct value *
9222 ada_to_fixed_value (struct value *val)
9223 {
9224   val = unwrap_value (val);
9225   val = ada_to_fixed_value_create (value_type (val),
9226                                       value_address (val),
9227                                       val);
9228   return val;
9229 }
9230 \f
9231
9232 /* Attributes */
9233
9234 /* Table mapping attribute numbers to names.
9235    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
9236
9237 static const char *attribute_names[] = {
9238   "<?>",
9239
9240   "first",
9241   "last",
9242   "length",
9243   "image",
9244   "max",
9245   "min",
9246   "modulus",
9247   "pos",
9248   "size",
9249   "tag",
9250   "val",
9251   0
9252 };
9253
9254 const char *
9255 ada_attribute_name (enum exp_opcode n)
9256 {
9257   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
9258     return attribute_names[n - OP_ATR_FIRST + 1];
9259   else
9260     return attribute_names[0];
9261 }
9262
9263 /* Evaluate the 'POS attribute applied to ARG.  */
9264
9265 static LONGEST
9266 pos_atr (struct value *arg)
9267 {
9268   struct value *val = coerce_ref (arg);
9269   struct type *type = value_type (val);
9270   LONGEST result;
9271
9272   if (!discrete_type_p (type))
9273     error (_("'POS only defined on discrete types"));
9274
9275   if (!discrete_position (type, value_as_long (val), &result))
9276     error (_("enumeration value is invalid: can't find 'POS"));
9277
9278   return result;
9279 }
9280
9281 static struct value *
9282 value_pos_atr (struct type *type, struct value *arg)
9283 {
9284   return value_from_longest (type, pos_atr (arg));
9285 }
9286
9287 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
9288
9289 static struct value *
9290 value_val_atr (struct type *type, struct value *arg)
9291 {
9292   if (!discrete_type_p (type))
9293     error (_("'VAL only defined on discrete types"));
9294   if (!integer_type_p (value_type (arg)))
9295     error (_("'VAL requires integral argument"));
9296
9297   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
9298     {
9299       long pos = value_as_long (arg);
9300
9301       if (pos < 0 || pos >= TYPE_NFIELDS (type))
9302         error (_("argument to 'VAL out of range"));
9303       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
9304     }
9305   else
9306     return value_from_longest (type, value_as_long (arg));
9307 }
9308 \f
9309
9310                                 /* Evaluation */
9311
9312 /* True if TYPE appears to be an Ada character type.
9313    [At the moment, this is true only for Character and Wide_Character;
9314    It is a heuristic test that could stand improvement].  */
9315
9316 int
9317 ada_is_character_type (struct type *type)
9318 {
9319   const char *name;
9320
9321   /* If the type code says it's a character, then assume it really is,
9322      and don't check any further.  */
9323   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
9324     return 1;
9325   
9326   /* Otherwise, assume it's a character type iff it is a discrete type
9327      with a known character type name.  */
9328   name = ada_type_name (type);
9329   return (name != NULL
9330           && (TYPE_CODE (type) == TYPE_CODE_INT
9331               || TYPE_CODE (type) == TYPE_CODE_RANGE)
9332           && (strcmp (name, "character") == 0
9333               || strcmp (name, "wide_character") == 0
9334               || strcmp (name, "wide_wide_character") == 0
9335               || strcmp (name, "unsigned char") == 0));
9336 }
9337
9338 /* True if TYPE appears to be an Ada string type.  */
9339
9340 int
9341 ada_is_string_type (struct type *type)
9342 {
9343   type = ada_check_typedef (type);
9344   if (type != NULL
9345       && TYPE_CODE (type) != TYPE_CODE_PTR
9346       && (ada_is_simple_array_type (type)
9347           || ada_is_array_descriptor_type (type))
9348       && ada_array_arity (type) == 1)
9349     {
9350       struct type *elttype = ada_array_element_type (type, 1);
9351
9352       return ada_is_character_type (elttype);
9353     }
9354   else
9355     return 0;
9356 }
9357
9358 /* The compiler sometimes provides a parallel XVS type for a given
9359    PAD type.  Normally, it is safe to follow the PAD type directly,
9360    but older versions of the compiler have a bug that causes the offset
9361    of its "F" field to be wrong.  Following that field in that case
9362    would lead to incorrect results, but this can be worked around
9363    by ignoring the PAD type and using the associated XVS type instead.
9364
9365    Set to True if the debugger should trust the contents of PAD types.
9366    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
9367 static int trust_pad_over_xvs = 1;
9368
9369 /* True if TYPE is a struct type introduced by the compiler to force the
9370    alignment of a value.  Such types have a single field with a
9371    distinctive name.  */
9372
9373 int
9374 ada_is_aligner_type (struct type *type)
9375 {
9376   type = ada_check_typedef (type);
9377
9378   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
9379     return 0;
9380
9381   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
9382           && TYPE_NFIELDS (type) == 1
9383           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
9384 }
9385
9386 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
9387    the parallel type.  */
9388
9389 struct type *
9390 ada_get_base_type (struct type *raw_type)
9391 {
9392   struct type *real_type_namer;
9393   struct type *raw_real_type;
9394
9395   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9396     return raw_type;
9397
9398   if (ada_is_aligner_type (raw_type))
9399     /* The encoding specifies that we should always use the aligner type.
9400        So, even if this aligner type has an associated XVS type, we should
9401        simply ignore it.
9402
9403        According to the compiler gurus, an XVS type parallel to an aligner
9404        type may exist because of a stabs limitation.  In stabs, aligner
9405        types are empty because the field has a variable-sized type, and
9406        thus cannot actually be used as an aligner type.  As a result,
9407        we need the associated parallel XVS type to decode the type.
9408        Since the policy in the compiler is to not change the internal
9409        representation based on the debugging info format, we sometimes
9410        end up having a redundant XVS type parallel to the aligner type.  */
9411     return raw_type;
9412
9413   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
9414   if (real_type_namer == NULL
9415       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9416       || TYPE_NFIELDS (real_type_namer) != 1)
9417     return raw_type;
9418
9419   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9420     {
9421       /* This is an older encoding form where the base type needs to be
9422          looked up by name.  We prefer the newer enconding because it is
9423          more efficient.  */
9424       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9425       if (raw_real_type == NULL)
9426         return raw_type;
9427       else
9428         return raw_real_type;
9429     }
9430
9431   /* The field in our XVS type is a reference to the base type.  */
9432   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
9433 }
9434
9435 /* The type of value designated by TYPE, with all aligners removed.  */
9436
9437 struct type *
9438 ada_aligned_type (struct type *type)
9439 {
9440   if (ada_is_aligner_type (type))
9441     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9442   else
9443     return ada_get_base_type (type);
9444 }
9445
9446
9447 /* The address of the aligned value in an object at address VALADDR
9448    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
9449
9450 const gdb_byte *
9451 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
9452 {
9453   if (ada_is_aligner_type (type))
9454     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
9455                                    valaddr +
9456                                    TYPE_FIELD_BITPOS (type,
9457                                                       0) / TARGET_CHAR_BIT);
9458   else
9459     return valaddr;
9460 }
9461
9462
9463
9464 /* The printed representation of an enumeration literal with encoded
9465    name NAME.  The value is good to the next call of ada_enum_name.  */
9466 const char *
9467 ada_enum_name (const char *name)
9468 {
9469   static char *result;
9470   static size_t result_len = 0;
9471   const char *tmp;
9472
9473   /* First, unqualify the enumeration name:
9474      1. Search for the last '.' character.  If we find one, then skip
9475      all the preceding characters, the unqualified name starts
9476      right after that dot.
9477      2. Otherwise, we may be debugging on a target where the compiler
9478      translates dots into "__".  Search forward for double underscores,
9479      but stop searching when we hit an overloading suffix, which is
9480      of the form "__" followed by digits.  */
9481
9482   tmp = strrchr (name, '.');
9483   if (tmp != NULL)
9484     name = tmp + 1;
9485   else
9486     {
9487       while ((tmp = strstr (name, "__")) != NULL)
9488         {
9489           if (isdigit (tmp[2]))
9490             break;
9491           else
9492             name = tmp + 2;
9493         }
9494     }
9495
9496   if (name[0] == 'Q')
9497     {
9498       int v;
9499
9500       if (name[1] == 'U' || name[1] == 'W')
9501         {
9502           if (sscanf (name + 2, "%x", &v) != 1)
9503             return name;
9504         }
9505       else
9506         return name;
9507
9508       GROW_VECT (result, result_len, 16);
9509       if (isascii (v) && isprint (v))
9510         xsnprintf (result, result_len, "'%c'", v);
9511       else if (name[1] == 'U')
9512         xsnprintf (result, result_len, "[\"%02x\"]", v);
9513       else
9514         xsnprintf (result, result_len, "[\"%04x\"]", v);
9515
9516       return result;
9517     }
9518   else
9519     {
9520       tmp = strstr (name, "__");
9521       if (tmp == NULL)
9522         tmp = strstr (name, "$");
9523       if (tmp != NULL)
9524         {
9525           GROW_VECT (result, result_len, tmp - name + 1);
9526           strncpy (result, name, tmp - name);
9527           result[tmp - name] = '\0';
9528           return result;
9529         }
9530
9531       return name;
9532     }
9533 }
9534
9535 /* Evaluate the subexpression of EXP starting at *POS as for
9536    evaluate_type, updating *POS to point just past the evaluated
9537    expression.  */
9538
9539 static struct value *
9540 evaluate_subexp_type (struct expression *exp, int *pos)
9541 {
9542   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9543 }
9544
9545 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9546    value it wraps.  */
9547
9548 static struct value *
9549 unwrap_value (struct value *val)
9550 {
9551   struct type *type = ada_check_typedef (value_type (val));
9552
9553   if (ada_is_aligner_type (type))
9554     {
9555       struct value *v = ada_value_struct_elt (val, "F", 0);
9556       struct type *val_type = ada_check_typedef (value_type (v));
9557
9558       if (ada_type_name (val_type) == NULL)
9559         TYPE_NAME (val_type) = ada_type_name (type);
9560
9561       return unwrap_value (v);
9562     }
9563   else
9564     {
9565       struct type *raw_real_type =
9566         ada_check_typedef (ada_get_base_type (type));
9567
9568       /* If there is no parallel XVS or XVE type, then the value is
9569          already unwrapped.  Return it without further modification.  */
9570       if ((type == raw_real_type)
9571           && ada_find_parallel_type (type, "___XVE") == NULL)
9572         return val;
9573
9574       return
9575         coerce_unspec_val_to_type
9576         (val, ada_to_fixed_type (raw_real_type, 0,
9577                                  value_address (val),
9578                                  NULL, 1));
9579     }
9580 }
9581
9582 static struct value *
9583 cast_to_fixed (struct type *type, struct value *arg)
9584 {
9585   LONGEST val;
9586
9587   if (type == value_type (arg))
9588     return arg;
9589   else if (ada_is_fixed_point_type (value_type (arg)))
9590     val = ada_float_to_fixed (type,
9591                               ada_fixed_to_float (value_type (arg),
9592                                                   value_as_long (arg)));
9593   else
9594     {
9595       DOUBLEST argd = value_as_double (arg);
9596
9597       val = ada_float_to_fixed (type, argd);
9598     }
9599
9600   return value_from_longest (type, val);
9601 }
9602
9603 static struct value *
9604 cast_from_fixed (struct type *type, struct value *arg)
9605 {
9606   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9607                                      value_as_long (arg));
9608
9609   return value_from_double (type, val);
9610 }
9611
9612 /* Given two array types T1 and T2, return nonzero iff both arrays
9613    contain the same number of elements.  */
9614
9615 static int
9616 ada_same_array_size_p (struct type *t1, struct type *t2)
9617 {
9618   LONGEST lo1, hi1, lo2, hi2;
9619
9620   /* Get the array bounds in order to verify that the size of
9621      the two arrays match.  */
9622   if (!get_array_bounds (t1, &lo1, &hi1)
9623       || !get_array_bounds (t2, &lo2, &hi2))
9624     error (_("unable to determine array bounds"));
9625
9626   /* To make things easier for size comparison, normalize a bit
9627      the case of empty arrays by making sure that the difference
9628      between upper bound and lower bound is always -1.  */
9629   if (lo1 > hi1)
9630     hi1 = lo1 - 1;
9631   if (lo2 > hi2)
9632     hi2 = lo2 - 1;
9633
9634   return (hi1 - lo1 == hi2 - lo2);
9635 }
9636
9637 /* Assuming that VAL is an array of integrals, and TYPE represents
9638    an array with the same number of elements, but with wider integral
9639    elements, return an array "casted" to TYPE.  In practice, this
9640    means that the returned array is built by casting each element
9641    of the original array into TYPE's (wider) element type.  */
9642
9643 static struct value *
9644 ada_promote_array_of_integrals (struct type *type, struct value *val)
9645 {
9646   struct type *elt_type = TYPE_TARGET_TYPE (type);
9647   LONGEST lo, hi;
9648   struct value *res;
9649   LONGEST i;
9650
9651   /* Verify that both val and type are arrays of scalars, and
9652      that the size of val's elements is smaller than the size
9653      of type's element.  */
9654   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9655   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9656   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9657   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9658   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9659               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9660
9661   if (!get_array_bounds (type, &lo, &hi))
9662     error (_("unable to determine array bounds"));
9663
9664   res = allocate_value (type);
9665
9666   /* Promote each array element.  */
9667   for (i = 0; i < hi - lo + 1; i++)
9668     {
9669       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9670
9671       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9672               value_contents_all (elt), TYPE_LENGTH (elt_type));
9673     }
9674
9675   return res;
9676 }
9677
9678 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9679    return the converted value.  */
9680
9681 static struct value *
9682 coerce_for_assign (struct type *type, struct value *val)
9683 {
9684   struct type *type2 = value_type (val);
9685
9686   if (type == type2)
9687     return val;
9688
9689   type2 = ada_check_typedef (type2);
9690   type = ada_check_typedef (type);
9691
9692   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9693       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9694     {
9695       val = ada_value_ind (val);
9696       type2 = value_type (val);
9697     }
9698
9699   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9700       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9701     {
9702       if (!ada_same_array_size_p (type, type2))
9703         error (_("cannot assign arrays of different length"));
9704
9705       if (is_integral_type (TYPE_TARGET_TYPE (type))
9706           && is_integral_type (TYPE_TARGET_TYPE (type2))
9707           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9708                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9709         {
9710           /* Allow implicit promotion of the array elements to
9711              a wider type.  */
9712           return ada_promote_array_of_integrals (type, val);
9713         }
9714
9715       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9716           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9717         error (_("Incompatible types in assignment"));
9718       deprecated_set_value_type (val, type);
9719     }
9720   return val;
9721 }
9722
9723 static struct value *
9724 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9725 {
9726   struct value *val;
9727   struct type *type1, *type2;
9728   LONGEST v, v1, v2;
9729
9730   arg1 = coerce_ref (arg1);
9731   arg2 = coerce_ref (arg2);
9732   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9733   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9734
9735   if (TYPE_CODE (type1) != TYPE_CODE_INT
9736       || TYPE_CODE (type2) != TYPE_CODE_INT)
9737     return value_binop (arg1, arg2, op);
9738
9739   switch (op)
9740     {
9741     case BINOP_MOD:
9742     case BINOP_DIV:
9743     case BINOP_REM:
9744       break;
9745     default:
9746       return value_binop (arg1, arg2, op);
9747     }
9748
9749   v2 = value_as_long (arg2);
9750   if (v2 == 0)
9751     error (_("second operand of %s must not be zero."), op_string (op));
9752
9753   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9754     return value_binop (arg1, arg2, op);
9755
9756   v1 = value_as_long (arg1);
9757   switch (op)
9758     {
9759     case BINOP_DIV:
9760       v = v1 / v2;
9761       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9762         v += v > 0 ? -1 : 1;
9763       break;
9764     case BINOP_REM:
9765       v = v1 % v2;
9766       if (v * v1 < 0)
9767         v -= v2;
9768       break;
9769     default:
9770       /* Should not reach this point.  */
9771       v = 0;
9772     }
9773
9774   val = allocate_value (type1);
9775   store_unsigned_integer (value_contents_raw (val),
9776                           TYPE_LENGTH (value_type (val)),
9777                           gdbarch_byte_order (get_type_arch (type1)), v);
9778   return val;
9779 }
9780
9781 static int
9782 ada_value_equal (struct value *arg1, struct value *arg2)
9783 {
9784   if (ada_is_direct_array_type (value_type (arg1))
9785       || ada_is_direct_array_type (value_type (arg2)))
9786     {
9787       /* Automatically dereference any array reference before
9788          we attempt to perform the comparison.  */
9789       arg1 = ada_coerce_ref (arg1);
9790       arg2 = ada_coerce_ref (arg2);
9791       
9792       arg1 = ada_coerce_to_simple_array (arg1);
9793       arg2 = ada_coerce_to_simple_array (arg2);
9794       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9795           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9796         error (_("Attempt to compare array with non-array"));
9797       /* FIXME: The following works only for types whose
9798          representations use all bits (no padding or undefined bits)
9799          and do not have user-defined equality.  */
9800       return
9801         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9802         && memcmp (value_contents (arg1), value_contents (arg2),
9803                    TYPE_LENGTH (value_type (arg1))) == 0;
9804     }
9805   return value_equal (arg1, arg2);
9806 }
9807
9808 /* Total number of component associations in the aggregate starting at
9809    index PC in EXP.  Assumes that index PC is the start of an
9810    OP_AGGREGATE.  */
9811
9812 static int
9813 num_component_specs (struct expression *exp, int pc)
9814 {
9815   int n, m, i;
9816
9817   m = exp->elts[pc + 1].longconst;
9818   pc += 3;
9819   n = 0;
9820   for (i = 0; i < m; i += 1)
9821     {
9822       switch (exp->elts[pc].opcode) 
9823         {
9824         default:
9825           n += 1;
9826           break;
9827         case OP_CHOICES:
9828           n += exp->elts[pc + 1].longconst;
9829           break;
9830         }
9831       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9832     }
9833   return n;
9834 }
9835
9836 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9837    component of LHS (a simple array or a record), updating *POS past
9838    the expression, assuming that LHS is contained in CONTAINER.  Does
9839    not modify the inferior's memory, nor does it modify LHS (unless
9840    LHS == CONTAINER).  */
9841
9842 static void
9843 assign_component (struct value *container, struct value *lhs, LONGEST index,
9844                   struct expression *exp, int *pos)
9845 {
9846   struct value *mark = value_mark ();
9847   struct value *elt;
9848
9849   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9850     {
9851       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9852       struct value *index_val = value_from_longest (index_type, index);
9853
9854       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9855     }
9856   else
9857     {
9858       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9859       elt = ada_to_fixed_value (elt);
9860     }
9861
9862   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9863     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9864   else
9865     value_assign_to_component (container, elt, 
9866                                ada_evaluate_subexp (NULL, exp, pos, 
9867                                                     EVAL_NORMAL));
9868
9869   value_free_to_mark (mark);
9870 }
9871
9872 /* Assuming that LHS represents an lvalue having a record or array
9873    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9874    of that aggregate's value to LHS, advancing *POS past the
9875    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9876    lvalue containing LHS (possibly LHS itself).  Does not modify
9877    the inferior's memory, nor does it modify the contents of 
9878    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9879
9880 static struct value *
9881 assign_aggregate (struct value *container, 
9882                   struct value *lhs, struct expression *exp, 
9883                   int *pos, enum noside noside)
9884 {
9885   struct type *lhs_type;
9886   int n = exp->elts[*pos+1].longconst;
9887   LONGEST low_index, high_index;
9888   int num_specs;
9889   LONGEST *indices;
9890   int max_indices, num_indices;
9891   int i;
9892
9893   *pos += 3;
9894   if (noside != EVAL_NORMAL)
9895     {
9896       for (i = 0; i < n; i += 1)
9897         ada_evaluate_subexp (NULL, exp, pos, noside);
9898       return container;
9899     }
9900
9901   container = ada_coerce_ref (container);
9902   if (ada_is_direct_array_type (value_type (container)))
9903     container = ada_coerce_to_simple_array (container);
9904   lhs = ada_coerce_ref (lhs);
9905   if (!deprecated_value_modifiable (lhs))
9906     error (_("Left operand of assignment is not a modifiable lvalue."));
9907
9908   lhs_type = value_type (lhs);
9909   if (ada_is_direct_array_type (lhs_type))
9910     {
9911       lhs = ada_coerce_to_simple_array (lhs);
9912       lhs_type = value_type (lhs);
9913       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9914       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9915     }
9916   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9917     {
9918       low_index = 0;
9919       high_index = num_visible_fields (lhs_type) - 1;
9920     }
9921   else
9922     error (_("Left-hand side must be array or record."));
9923
9924   num_specs = num_component_specs (exp, *pos - 3);
9925   max_indices = 4 * num_specs + 4;
9926   indices = XALLOCAVEC (LONGEST, max_indices);
9927   indices[0] = indices[1] = low_index - 1;
9928   indices[2] = indices[3] = high_index + 1;
9929   num_indices = 4;
9930
9931   for (i = 0; i < n; i += 1)
9932     {
9933       switch (exp->elts[*pos].opcode)
9934         {
9935           case OP_CHOICES:
9936             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9937                                            &num_indices, max_indices,
9938                                            low_index, high_index);
9939             break;
9940           case OP_POSITIONAL:
9941             aggregate_assign_positional (container, lhs, exp, pos, indices,
9942                                          &num_indices, max_indices,
9943                                          low_index, high_index);
9944             break;
9945           case OP_OTHERS:
9946             if (i != n-1)
9947               error (_("Misplaced 'others' clause"));
9948             aggregate_assign_others (container, lhs, exp, pos, indices, 
9949                                      num_indices, low_index, high_index);
9950             break;
9951           default:
9952             error (_("Internal error: bad aggregate clause"));
9953         }
9954     }
9955
9956   return container;
9957 }
9958               
9959 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9960    construct at *POS, updating *POS past the construct, given that
9961    the positions are relative to lower bound LOW, where HIGH is the 
9962    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9963    updating *NUM_INDICES as needed.  CONTAINER is as for
9964    assign_aggregate.  */
9965 static void
9966 aggregate_assign_positional (struct value *container,
9967                              struct value *lhs, struct expression *exp,
9968                              int *pos, LONGEST *indices, int *num_indices,
9969                              int max_indices, LONGEST low, LONGEST high) 
9970 {
9971   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9972   
9973   if (ind - 1 == high)
9974     warning (_("Extra components in aggregate ignored."));
9975   if (ind <= high)
9976     {
9977       add_component_interval (ind, ind, indices, num_indices, max_indices);
9978       *pos += 3;
9979       assign_component (container, lhs, ind, exp, pos);
9980     }
9981   else
9982     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9983 }
9984
9985 /* Assign into the components of LHS indexed by the OP_CHOICES
9986    construct at *POS, updating *POS past the construct, given that
9987    the allowable indices are LOW..HIGH.  Record the indices assigned
9988    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9989    needed.  CONTAINER is as for assign_aggregate.  */
9990 static void
9991 aggregate_assign_from_choices (struct value *container,
9992                                struct value *lhs, struct expression *exp,
9993                                int *pos, LONGEST *indices, int *num_indices,
9994                                int max_indices, LONGEST low, LONGEST high) 
9995 {
9996   int j;
9997   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9998   int choice_pos, expr_pc;
9999   int is_array = ada_is_direct_array_type (value_type (lhs));
10000
10001   choice_pos = *pos += 3;
10002
10003   for (j = 0; j < n_choices; j += 1)
10004     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10005   expr_pc = *pos;
10006   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10007   
10008   for (j = 0; j < n_choices; j += 1)
10009     {
10010       LONGEST lower, upper;
10011       enum exp_opcode op = exp->elts[choice_pos].opcode;
10012
10013       if (op == OP_DISCRETE_RANGE)
10014         {
10015           choice_pos += 1;
10016           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
10017                                                       EVAL_NORMAL));
10018           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
10019                                                       EVAL_NORMAL));
10020         }
10021       else if (is_array)
10022         {
10023           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
10024                                                       EVAL_NORMAL));
10025           upper = lower;
10026         }
10027       else
10028         {
10029           int ind;
10030           const char *name;
10031
10032           switch (op)
10033             {
10034             case OP_NAME:
10035               name = &exp->elts[choice_pos + 2].string;
10036               break;
10037             case OP_VAR_VALUE:
10038               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
10039               break;
10040             default:
10041               error (_("Invalid record component association."));
10042             }
10043           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
10044           ind = 0;
10045           if (! find_struct_field (name, value_type (lhs), 0, 
10046                                    NULL, NULL, NULL, NULL, &ind))
10047             error (_("Unknown component name: %s."), name);
10048           lower = upper = ind;
10049         }
10050
10051       if (lower <= upper && (lower < low || upper > high))
10052         error (_("Index in component association out of bounds."));
10053
10054       add_component_interval (lower, upper, indices, num_indices,
10055                               max_indices);
10056       while (lower <= upper)
10057         {
10058           int pos1;
10059
10060           pos1 = expr_pc;
10061           assign_component (container, lhs, lower, exp, &pos1);
10062           lower += 1;
10063         }
10064     }
10065 }
10066
10067 /* Assign the value of the expression in the OP_OTHERS construct in
10068    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
10069    have not been previously assigned.  The index intervals already assigned
10070    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
10071    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
10072 static void
10073 aggregate_assign_others (struct value *container,
10074                          struct value *lhs, struct expression *exp,
10075                          int *pos, LONGEST *indices, int num_indices,
10076                          LONGEST low, LONGEST high) 
10077 {
10078   int i;
10079   int expr_pc = *pos + 1;
10080   
10081   for (i = 0; i < num_indices - 2; i += 2)
10082     {
10083       LONGEST ind;
10084
10085       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
10086         {
10087           int localpos;
10088
10089           localpos = expr_pc;
10090           assign_component (container, lhs, ind, exp, &localpos);
10091         }
10092     }
10093   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10094 }
10095
10096 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
10097    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
10098    modifying *SIZE as needed.  It is an error if *SIZE exceeds
10099    MAX_SIZE.  The resulting intervals do not overlap.  */
10100 static void
10101 add_component_interval (LONGEST low, LONGEST high, 
10102                         LONGEST* indices, int *size, int max_size)
10103 {
10104   int i, j;
10105
10106   for (i = 0; i < *size; i += 2) {
10107     if (high >= indices[i] && low <= indices[i + 1])
10108       {
10109         int kh;
10110
10111         for (kh = i + 2; kh < *size; kh += 2)
10112           if (high < indices[kh])
10113             break;
10114         if (low < indices[i])
10115           indices[i] = low;
10116         indices[i + 1] = indices[kh - 1];
10117         if (high > indices[i + 1])
10118           indices[i + 1] = high;
10119         memcpy (indices + i + 2, indices + kh, *size - kh);
10120         *size -= kh - i - 2;
10121         return;
10122       }
10123     else if (high < indices[i])
10124       break;
10125   }
10126         
10127   if (*size == max_size)
10128     error (_("Internal error: miscounted aggregate components."));
10129   *size += 2;
10130   for (j = *size-1; j >= i+2; j -= 1)
10131     indices[j] = indices[j - 2];
10132   indices[i] = low;
10133   indices[i + 1] = high;
10134 }
10135
10136 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
10137    is different.  */
10138
10139 static struct value *
10140 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
10141 {
10142   if (type == ada_check_typedef (value_type (arg2)))
10143     return arg2;
10144
10145   if (ada_is_fixed_point_type (type))
10146     return (cast_to_fixed (type, arg2));
10147
10148   if (ada_is_fixed_point_type (value_type (arg2)))
10149     return cast_from_fixed (type, arg2);
10150
10151   return value_cast (type, arg2);
10152 }
10153
10154 /*  Evaluating Ada expressions, and printing their result.
10155     ------------------------------------------------------
10156
10157     1. Introduction:
10158     ----------------
10159
10160     We usually evaluate an Ada expression in order to print its value.
10161     We also evaluate an expression in order to print its type, which
10162     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
10163     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
10164     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
10165     the evaluation compared to the EVAL_NORMAL, but is otherwise very
10166     similar.
10167
10168     Evaluating expressions is a little more complicated for Ada entities
10169     than it is for entities in languages such as C.  The main reason for
10170     this is that Ada provides types whose definition might be dynamic.
10171     One example of such types is variant records.  Or another example
10172     would be an array whose bounds can only be known at run time.
10173
10174     The following description is a general guide as to what should be
10175     done (and what should NOT be done) in order to evaluate an expression
10176     involving such types, and when.  This does not cover how the semantic
10177     information is encoded by GNAT as this is covered separatly.  For the
10178     document used as the reference for the GNAT encoding, see exp_dbug.ads
10179     in the GNAT sources.
10180
10181     Ideally, we should embed each part of this description next to its
10182     associated code.  Unfortunately, the amount of code is so vast right
10183     now that it's hard to see whether the code handling a particular
10184     situation might be duplicated or not.  One day, when the code is
10185     cleaned up, this guide might become redundant with the comments
10186     inserted in the code, and we might want to remove it.
10187
10188     2. ``Fixing'' an Entity, the Simple Case:
10189     -----------------------------------------
10190
10191     When evaluating Ada expressions, the tricky issue is that they may
10192     reference entities whose type contents and size are not statically
10193     known.  Consider for instance a variant record:
10194
10195        type Rec (Empty : Boolean := True) is record
10196           case Empty is
10197              when True => null;
10198              when False => Value : Integer;
10199           end case;
10200        end record;
10201        Yes : Rec := (Empty => False, Value => 1);
10202        No  : Rec := (empty => True);
10203
10204     The size and contents of that record depends on the value of the
10205     descriminant (Rec.Empty).  At this point, neither the debugging
10206     information nor the associated type structure in GDB are able to
10207     express such dynamic types.  So what the debugger does is to create
10208     "fixed" versions of the type that applies to the specific object.
10209     We also informally refer to this opperation as "fixing" an object,
10210     which means creating its associated fixed type.
10211
10212     Example: when printing the value of variable "Yes" above, its fixed
10213     type would look like this:
10214
10215        type Rec is record
10216           Empty : Boolean;
10217           Value : Integer;
10218        end record;
10219
10220     On the other hand, if we printed the value of "No", its fixed type
10221     would become:
10222
10223        type Rec is record
10224           Empty : Boolean;
10225        end record;
10226
10227     Things become a little more complicated when trying to fix an entity
10228     with a dynamic type that directly contains another dynamic type,
10229     such as an array of variant records, for instance.  There are
10230     two possible cases: Arrays, and records.
10231
10232     3. ``Fixing'' Arrays:
10233     ---------------------
10234
10235     The type structure in GDB describes an array in terms of its bounds,
10236     and the type of its elements.  By design, all elements in the array
10237     have the same type and we cannot represent an array of variant elements
10238     using the current type structure in GDB.  When fixing an array,
10239     we cannot fix the array element, as we would potentially need one
10240     fixed type per element of the array.  As a result, the best we can do
10241     when fixing an array is to produce an array whose bounds and size
10242     are correct (allowing us to read it from memory), but without having
10243     touched its element type.  Fixing each element will be done later,
10244     when (if) necessary.
10245
10246     Arrays are a little simpler to handle than records, because the same
10247     amount of memory is allocated for each element of the array, even if
10248     the amount of space actually used by each element differs from element
10249     to element.  Consider for instance the following array of type Rec:
10250
10251        type Rec_Array is array (1 .. 2) of Rec;
10252
10253     The actual amount of memory occupied by each element might be different
10254     from element to element, depending on the value of their discriminant.
10255     But the amount of space reserved for each element in the array remains
10256     fixed regardless.  So we simply need to compute that size using
10257     the debugging information available, from which we can then determine
10258     the array size (we multiply the number of elements of the array by
10259     the size of each element).
10260
10261     The simplest case is when we have an array of a constrained element
10262     type. For instance, consider the following type declarations:
10263
10264         type Bounded_String (Max_Size : Integer) is
10265            Length : Integer;
10266            Buffer : String (1 .. Max_Size);
10267         end record;
10268         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
10269
10270     In this case, the compiler describes the array as an array of
10271     variable-size elements (identified by its XVS suffix) for which
10272     the size can be read in the parallel XVZ variable.
10273
10274     In the case of an array of an unconstrained element type, the compiler
10275     wraps the array element inside a private PAD type.  This type should not
10276     be shown to the user, and must be "unwrap"'ed before printing.  Note
10277     that we also use the adjective "aligner" in our code to designate
10278     these wrapper types.
10279
10280     In some cases, the size allocated for each element is statically
10281     known.  In that case, the PAD type already has the correct size,
10282     and the array element should remain unfixed.
10283
10284     But there are cases when this size is not statically known.
10285     For instance, assuming that "Five" is an integer variable:
10286
10287         type Dynamic is array (1 .. Five) of Integer;
10288         type Wrapper (Has_Length : Boolean := False) is record
10289            Data : Dynamic;
10290            case Has_Length is
10291               when True => Length : Integer;
10292               when False => null;
10293            end case;
10294         end record;
10295         type Wrapper_Array is array (1 .. 2) of Wrapper;
10296
10297         Hello : Wrapper_Array := (others => (Has_Length => True,
10298                                              Data => (others => 17),
10299                                              Length => 1));
10300
10301
10302     The debugging info would describe variable Hello as being an
10303     array of a PAD type.  The size of that PAD type is not statically
10304     known, but can be determined using a parallel XVZ variable.
10305     In that case, a copy of the PAD type with the correct size should
10306     be used for the fixed array.
10307
10308     3. ``Fixing'' record type objects:
10309     ----------------------------------
10310
10311     Things are slightly different from arrays in the case of dynamic
10312     record types.  In this case, in order to compute the associated
10313     fixed type, we need to determine the size and offset of each of
10314     its components.  This, in turn, requires us to compute the fixed
10315     type of each of these components.
10316
10317     Consider for instance the example:
10318
10319         type Bounded_String (Max_Size : Natural) is record
10320            Str : String (1 .. Max_Size);
10321            Length : Natural;
10322         end record;
10323         My_String : Bounded_String (Max_Size => 10);
10324
10325     In that case, the position of field "Length" depends on the size
10326     of field Str, which itself depends on the value of the Max_Size
10327     discriminant.  In order to fix the type of variable My_String,
10328     we need to fix the type of field Str.  Therefore, fixing a variant
10329     record requires us to fix each of its components.
10330
10331     However, if a component does not have a dynamic size, the component
10332     should not be fixed.  In particular, fields that use a PAD type
10333     should not fixed.  Here is an example where this might happen
10334     (assuming type Rec above):
10335
10336        type Container (Big : Boolean) is record
10337           First : Rec;
10338           After : Integer;
10339           case Big is
10340              when True => Another : Integer;
10341              when False => null;
10342           end case;
10343        end record;
10344        My_Container : Container := (Big => False,
10345                                     First => (Empty => True),
10346                                     After => 42);
10347
10348     In that example, the compiler creates a PAD type for component First,
10349     whose size is constant, and then positions the component After just
10350     right after it.  The offset of component After is therefore constant
10351     in this case.
10352
10353     The debugger computes the position of each field based on an algorithm
10354     that uses, among other things, the actual position and size of the field
10355     preceding it.  Let's now imagine that the user is trying to print
10356     the value of My_Container.  If the type fixing was recursive, we would
10357     end up computing the offset of field After based on the size of the
10358     fixed version of field First.  And since in our example First has
10359     only one actual field, the size of the fixed type is actually smaller
10360     than the amount of space allocated to that field, and thus we would
10361     compute the wrong offset of field After.
10362
10363     To make things more complicated, we need to watch out for dynamic
10364     components of variant records (identified by the ___XVL suffix in
10365     the component name).  Even if the target type is a PAD type, the size
10366     of that type might not be statically known.  So the PAD type needs
10367     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
10368     we might end up with the wrong size for our component.  This can be
10369     observed with the following type declarations:
10370
10371         type Octal is new Integer range 0 .. 7;
10372         type Octal_Array is array (Positive range <>) of Octal;
10373         pragma Pack (Octal_Array);
10374
10375         type Octal_Buffer (Size : Positive) is record
10376            Buffer : Octal_Array (1 .. Size);
10377            Length : Integer;
10378         end record;
10379
10380     In that case, Buffer is a PAD type whose size is unset and needs
10381     to be computed by fixing the unwrapped type.
10382
10383     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10384     ----------------------------------------------------------
10385
10386     Lastly, when should the sub-elements of an entity that remained unfixed
10387     thus far, be actually fixed?
10388
10389     The answer is: Only when referencing that element.  For instance
10390     when selecting one component of a record, this specific component
10391     should be fixed at that point in time.  Or when printing the value
10392     of a record, each component should be fixed before its value gets
10393     printed.  Similarly for arrays, the element of the array should be
10394     fixed when printing each element of the array, or when extracting
10395     one element out of that array.  On the other hand, fixing should
10396     not be performed on the elements when taking a slice of an array!
10397
10398     Note that one of the side-effects of miscomputing the offset and
10399     size of each field is that we end up also miscomputing the size
10400     of the containing type.  This can have adverse results when computing
10401     the value of an entity.  GDB fetches the value of an entity based
10402     on the size of its type, and thus a wrong size causes GDB to fetch
10403     the wrong amount of memory.  In the case where the computed size is
10404     too small, GDB fetches too little data to print the value of our
10405     entiry.  Results in this case as unpredicatble, as we usually read
10406     past the buffer containing the data =:-o.  */
10407
10408 /* Implement the evaluate_exp routine in the exp_descriptor structure
10409    for the Ada language.  */
10410
10411 static struct value *
10412 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
10413                      int *pos, enum noside noside)
10414 {
10415   enum exp_opcode op;
10416   int tem;
10417   int pc;
10418   int preeval_pos;
10419   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10420   struct type *type;
10421   int nargs, oplen;
10422   struct value **argvec;
10423
10424   pc = *pos;
10425   *pos += 1;
10426   op = exp->elts[pc].opcode;
10427
10428   switch (op)
10429     {
10430     default:
10431       *pos -= 1;
10432       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10433
10434       if (noside == EVAL_NORMAL)
10435         arg1 = unwrap_value (arg1);
10436
10437       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10438          then we need to perform the conversion manually, because
10439          evaluate_subexp_standard doesn't do it.  This conversion is
10440          necessary in Ada because the different kinds of float/fixed
10441          types in Ada have different representations.
10442
10443          Similarly, we need to perform the conversion from OP_LONG
10444          ourselves.  */
10445       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10446         arg1 = ada_value_cast (expect_type, arg1, noside);
10447
10448       return arg1;
10449
10450     case OP_STRING:
10451       {
10452         struct value *result;
10453
10454         *pos -= 1;
10455         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10456         /* The result type will have code OP_STRING, bashed there from 
10457            OP_ARRAY.  Bash it back.  */
10458         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10459           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
10460         return result;
10461       }
10462
10463     case UNOP_CAST:
10464       (*pos) += 2;
10465       type = exp->elts[pc + 1].type;
10466       arg1 = evaluate_subexp (type, exp, pos, noside);
10467       if (noside == EVAL_SKIP)
10468         goto nosideret;
10469       arg1 = ada_value_cast (type, arg1, noside);
10470       return arg1;
10471
10472     case UNOP_QUAL:
10473       (*pos) += 2;
10474       type = exp->elts[pc + 1].type;
10475       return ada_evaluate_subexp (type, exp, pos, noside);
10476
10477     case BINOP_ASSIGN:
10478       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10479       if (exp->elts[*pos].opcode == OP_AGGREGATE)
10480         {
10481           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10482           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10483             return arg1;
10484           return ada_value_assign (arg1, arg1);
10485         }
10486       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10487          except if the lhs of our assignment is a convenience variable.
10488          In the case of assigning to a convenience variable, the lhs
10489          should be exactly the result of the evaluation of the rhs.  */
10490       type = value_type (arg1);
10491       if (VALUE_LVAL (arg1) == lval_internalvar)
10492          type = NULL;
10493       arg2 = evaluate_subexp (type, exp, pos, noside);
10494       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10495         return arg1;
10496       if (ada_is_fixed_point_type (value_type (arg1)))
10497         arg2 = cast_to_fixed (value_type (arg1), arg2);
10498       else if (ada_is_fixed_point_type (value_type (arg2)))
10499         error
10500           (_("Fixed-point values must be assigned to fixed-point variables"));
10501       else
10502         arg2 = coerce_for_assign (value_type (arg1), arg2);
10503       return ada_value_assign (arg1, arg2);
10504
10505     case BINOP_ADD:
10506       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10507       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10508       if (noside == EVAL_SKIP)
10509         goto nosideret;
10510       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10511         return (value_from_longest
10512                  (value_type (arg1),
10513                   value_as_long (arg1) + value_as_long (arg2)));
10514       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10515         return (value_from_longest
10516                  (value_type (arg2),
10517                   value_as_long (arg1) + value_as_long (arg2)));
10518       if ((ada_is_fixed_point_type (value_type (arg1))
10519            || ada_is_fixed_point_type (value_type (arg2)))
10520           && value_type (arg1) != value_type (arg2))
10521         error (_("Operands of fixed-point addition must have the same type"));
10522       /* Do the addition, and cast the result to the type of the first
10523          argument.  We cannot cast the result to a reference type, so if
10524          ARG1 is a reference type, find its underlying type.  */
10525       type = value_type (arg1);
10526       while (TYPE_CODE (type) == TYPE_CODE_REF)
10527         type = TYPE_TARGET_TYPE (type);
10528       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10529       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10530
10531     case BINOP_SUB:
10532       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10533       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10534       if (noside == EVAL_SKIP)
10535         goto nosideret;
10536       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10537         return (value_from_longest
10538                  (value_type (arg1),
10539                   value_as_long (arg1) - value_as_long (arg2)));
10540       if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10541         return (value_from_longest
10542                  (value_type (arg2),
10543                   value_as_long (arg1) - value_as_long (arg2)));
10544       if ((ada_is_fixed_point_type (value_type (arg1))
10545            || ada_is_fixed_point_type (value_type (arg2)))
10546           && value_type (arg1) != value_type (arg2))
10547         error (_("Operands of fixed-point subtraction "
10548                  "must have the same type"));
10549       /* Do the substraction, and cast the result to the type of the first
10550          argument.  We cannot cast the result to a reference type, so if
10551          ARG1 is a reference type, find its underlying type.  */
10552       type = value_type (arg1);
10553       while (TYPE_CODE (type) == TYPE_CODE_REF)
10554         type = TYPE_TARGET_TYPE (type);
10555       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10556       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10557
10558     case BINOP_MUL:
10559     case BINOP_DIV:
10560     case BINOP_REM:
10561     case BINOP_MOD:
10562       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10563       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10564       if (noside == EVAL_SKIP)
10565         goto nosideret;
10566       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10567         {
10568           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10569           return value_zero (value_type (arg1), not_lval);
10570         }
10571       else
10572         {
10573           type = builtin_type (exp->gdbarch)->builtin_double;
10574           if (ada_is_fixed_point_type (value_type (arg1)))
10575             arg1 = cast_from_fixed (type, arg1);
10576           if (ada_is_fixed_point_type (value_type (arg2)))
10577             arg2 = cast_from_fixed (type, arg2);
10578           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10579           return ada_value_binop (arg1, arg2, op);
10580         }
10581
10582     case BINOP_EQUAL:
10583     case BINOP_NOTEQUAL:
10584       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10585       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10586       if (noside == EVAL_SKIP)
10587         goto nosideret;
10588       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10589         tem = 0;
10590       else
10591         {
10592           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10593           tem = ada_value_equal (arg1, arg2);
10594         }
10595       if (op == BINOP_NOTEQUAL)
10596         tem = !tem;
10597       type = language_bool_type (exp->language_defn, exp->gdbarch);
10598       return value_from_longest (type, (LONGEST) tem);
10599
10600     case UNOP_NEG:
10601       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10602       if (noside == EVAL_SKIP)
10603         goto nosideret;
10604       else if (ada_is_fixed_point_type (value_type (arg1)))
10605         return value_cast (value_type (arg1), value_neg (arg1));
10606       else
10607         {
10608           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10609           return value_neg (arg1);
10610         }
10611
10612     case BINOP_LOGICAL_AND:
10613     case BINOP_LOGICAL_OR:
10614     case UNOP_LOGICAL_NOT:
10615       {
10616         struct value *val;
10617
10618         *pos -= 1;
10619         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10620         type = language_bool_type (exp->language_defn, exp->gdbarch);
10621         return value_cast (type, val);
10622       }
10623
10624     case BINOP_BITWISE_AND:
10625     case BINOP_BITWISE_IOR:
10626     case BINOP_BITWISE_XOR:
10627       {
10628         struct value *val;
10629
10630         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10631         *pos = pc;
10632         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10633
10634         return value_cast (value_type (arg1), val);
10635       }
10636
10637     case OP_VAR_VALUE:
10638       *pos -= 1;
10639
10640       if (noside == EVAL_SKIP)
10641         {
10642           *pos += 4;
10643           goto nosideret;
10644         }
10645
10646       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10647         /* Only encountered when an unresolved symbol occurs in a
10648            context other than a function call, in which case, it is
10649            invalid.  */
10650         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10651                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10652
10653       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10654         {
10655           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10656           /* Check to see if this is a tagged type.  We also need to handle
10657              the case where the type is a reference to a tagged type, but
10658              we have to be careful to exclude pointers to tagged types.
10659              The latter should be shown as usual (as a pointer), whereas
10660              a reference should mostly be transparent to the user.  */
10661           if (ada_is_tagged_type (type, 0)
10662               || (TYPE_CODE (type) == TYPE_CODE_REF
10663                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10664             {
10665               /* Tagged types are a little special in the fact that the real
10666                  type is dynamic and can only be determined by inspecting the
10667                  object's tag.  This means that we need to get the object's
10668                  value first (EVAL_NORMAL) and then extract the actual object
10669                  type from its tag.
10670
10671                  Note that we cannot skip the final step where we extract
10672                  the object type from its tag, because the EVAL_NORMAL phase
10673                  results in dynamic components being resolved into fixed ones.
10674                  This can cause problems when trying to print the type
10675                  description of tagged types whose parent has a dynamic size:
10676                  We use the type name of the "_parent" component in order
10677                  to print the name of the ancestor type in the type description.
10678                  If that component had a dynamic size, the resolution into
10679                  a fixed type would result in the loss of that type name,
10680                  thus preventing us from printing the name of the ancestor
10681                  type in the type description.  */
10682               arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10683
10684               if (TYPE_CODE (type) != TYPE_CODE_REF)
10685                 {
10686                   struct type *actual_type;
10687
10688                   actual_type = type_from_tag (ada_value_tag (arg1));
10689                   if (actual_type == NULL)
10690                     /* If, for some reason, we were unable to determine
10691                        the actual type from the tag, then use the static
10692                        approximation that we just computed as a fallback.
10693                        This can happen if the debugging information is
10694                        incomplete, for instance.  */
10695                     actual_type = type;
10696                   return value_zero (actual_type, not_lval);
10697                 }
10698               else
10699                 {
10700                   /* In the case of a ref, ada_coerce_ref takes care
10701                      of determining the actual type.  But the evaluation
10702                      should return a ref as it should be valid to ask
10703                      for its address; so rebuild a ref after coerce.  */
10704                   arg1 = ada_coerce_ref (arg1);
10705                   return value_ref (arg1, TYPE_CODE_REF);
10706                 }
10707             }
10708
10709           /* Records and unions for which GNAT encodings have been
10710              generated need to be statically fixed as well.
10711              Otherwise, non-static fixing produces a type where
10712              all dynamic properties are removed, which prevents "ptype"
10713              from being able to completely describe the type.
10714              For instance, a case statement in a variant record would be
10715              replaced by the relevant components based on the actual
10716              value of the discriminants.  */
10717           if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10718                && dynamic_template_type (type) != NULL)
10719               || (TYPE_CODE (type) == TYPE_CODE_UNION
10720                   && ada_find_parallel_type (type, "___XVU") != NULL))
10721             {
10722               *pos += 4;
10723               return value_zero (to_static_fixed_type (type), not_lval);
10724             }
10725         }
10726
10727       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10728       return ada_to_fixed_value (arg1);
10729
10730     case OP_FUNCALL:
10731       (*pos) += 2;
10732
10733       /* Allocate arg vector, including space for the function to be
10734          called in argvec[0] and a terminating NULL.  */
10735       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10736       argvec = XALLOCAVEC (struct value *, nargs + 2);
10737
10738       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10739           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10740         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10741                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10742       else
10743         {
10744           for (tem = 0; tem <= nargs; tem += 1)
10745             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10746           argvec[tem] = 0;
10747
10748           if (noside == EVAL_SKIP)
10749             goto nosideret;
10750         }
10751
10752       if (ada_is_constrained_packed_array_type
10753           (desc_base_type (value_type (argvec[0]))))
10754         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10755       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10756                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10757         /* This is a packed array that has already been fixed, and
10758            therefore already coerced to a simple array.  Nothing further
10759            to do.  */
10760         ;
10761       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF)
10762         {
10763           /* Make sure we dereference references so that all the code below
10764              feels like it's really handling the referenced value.  Wrapping
10765              types (for alignment) may be there, so make sure we strip them as
10766              well.  */
10767           argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10768         }
10769       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10770                && VALUE_LVAL (argvec[0]) == lval_memory)
10771         argvec[0] = value_addr (argvec[0]);
10772
10773       type = ada_check_typedef (value_type (argvec[0]));
10774
10775       /* Ada allows us to implicitly dereference arrays when subscripting
10776          them.  So, if this is an array typedef (encoding use for array
10777          access types encoded as fat pointers), strip it now.  */
10778       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10779         type = ada_typedef_target_type (type);
10780
10781       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10782         {
10783           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10784             {
10785             case TYPE_CODE_FUNC:
10786               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10787               break;
10788             case TYPE_CODE_ARRAY:
10789               break;
10790             case TYPE_CODE_STRUCT:
10791               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10792                 argvec[0] = ada_value_ind (argvec[0]);
10793               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10794               break;
10795             default:
10796               error (_("cannot subscript or call something of type `%s'"),
10797                      ada_type_name (value_type (argvec[0])));
10798               break;
10799             }
10800         }
10801
10802       switch (TYPE_CODE (type))
10803         {
10804         case TYPE_CODE_FUNC:
10805           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10806             {
10807               struct type *rtype = TYPE_TARGET_TYPE (type);
10808
10809               if (TYPE_GNU_IFUNC (type))
10810                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10811               return allocate_value (rtype);
10812             }
10813           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10814         case TYPE_CODE_INTERNAL_FUNCTION:
10815           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10816             /* We don't know anything about what the internal
10817                function might return, but we have to return
10818                something.  */
10819             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10820                                not_lval);
10821           else
10822             return call_internal_function (exp->gdbarch, exp->language_defn,
10823                                            argvec[0], nargs, argvec + 1);
10824
10825         case TYPE_CODE_STRUCT:
10826           {
10827             int arity;
10828
10829             arity = ada_array_arity (type);
10830             type = ada_array_element_type (type, nargs);
10831             if (type == NULL)
10832               error (_("cannot subscript or call a record"));
10833             if (arity != nargs)
10834               error (_("wrong number of subscripts; expecting %d"), arity);
10835             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10836               return value_zero (ada_aligned_type (type), lval_memory);
10837             return
10838               unwrap_value (ada_value_subscript
10839                             (argvec[0], nargs, argvec + 1));
10840           }
10841         case TYPE_CODE_ARRAY:
10842           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10843             {
10844               type = ada_array_element_type (type, nargs);
10845               if (type == NULL)
10846                 error (_("element type of array unknown"));
10847               else
10848                 return value_zero (ada_aligned_type (type), lval_memory);
10849             }
10850           return
10851             unwrap_value (ada_value_subscript
10852                           (ada_coerce_to_simple_array (argvec[0]),
10853                            nargs, argvec + 1));
10854         case TYPE_CODE_PTR:     /* Pointer to array */
10855           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10856             {
10857               type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10858               type = ada_array_element_type (type, nargs);
10859               if (type == NULL)
10860                 error (_("element type of array unknown"));
10861               else
10862                 return value_zero (ada_aligned_type (type), lval_memory);
10863             }
10864           return
10865             unwrap_value (ada_value_ptr_subscript (argvec[0],
10866                                                    nargs, argvec + 1));
10867
10868         default:
10869           error (_("Attempt to index or call something other than an "
10870                    "array or function"));
10871         }
10872
10873     case TERNOP_SLICE:
10874       {
10875         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10876         struct value *low_bound_val =
10877           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10878         struct value *high_bound_val =
10879           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10880         LONGEST low_bound;
10881         LONGEST high_bound;
10882
10883         low_bound_val = coerce_ref (low_bound_val);
10884         high_bound_val = coerce_ref (high_bound_val);
10885         low_bound = value_as_long (low_bound_val);
10886         high_bound = value_as_long (high_bound_val);
10887
10888         if (noside == EVAL_SKIP)
10889           goto nosideret;
10890
10891         /* If this is a reference to an aligner type, then remove all
10892            the aligners.  */
10893         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10894             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10895           TYPE_TARGET_TYPE (value_type (array)) =
10896             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10897
10898         if (ada_is_constrained_packed_array_type (value_type (array)))
10899           error (_("cannot slice a packed array"));
10900
10901         /* If this is a reference to an array or an array lvalue,
10902            convert to a pointer.  */
10903         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10904             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10905                 && VALUE_LVAL (array) == lval_memory))
10906           array = value_addr (array);
10907
10908         if (noside == EVAL_AVOID_SIDE_EFFECTS
10909             && ada_is_array_descriptor_type (ada_check_typedef
10910                                              (value_type (array))))
10911           return empty_array (ada_type_of_array (array, 0), low_bound);
10912
10913         array = ada_coerce_to_simple_array_ptr (array);
10914
10915         /* If we have more than one level of pointer indirection,
10916            dereference the value until we get only one level.  */
10917         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10918                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10919                      == TYPE_CODE_PTR))
10920           array = value_ind (array);
10921
10922         /* Make sure we really do have an array type before going further,
10923            to avoid a SEGV when trying to get the index type or the target
10924            type later down the road if the debug info generated by
10925            the compiler is incorrect or incomplete.  */
10926         if (!ada_is_simple_array_type (value_type (array)))
10927           error (_("cannot take slice of non-array"));
10928
10929         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10930             == TYPE_CODE_PTR)
10931           {
10932             struct type *type0 = ada_check_typedef (value_type (array));
10933
10934             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10935               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10936             else
10937               {
10938                 struct type *arr_type0 =
10939                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10940
10941                 return ada_value_slice_from_ptr (array, arr_type0,
10942                                                  longest_to_int (low_bound),
10943                                                  longest_to_int (high_bound));
10944               }
10945           }
10946         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10947           return array;
10948         else if (high_bound < low_bound)
10949           return empty_array (value_type (array), low_bound);
10950         else
10951           return ada_value_slice (array, longest_to_int (low_bound),
10952                                   longest_to_int (high_bound));
10953       }
10954
10955     case UNOP_IN_RANGE:
10956       (*pos) += 2;
10957       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10958       type = check_typedef (exp->elts[pc + 1].type);
10959
10960       if (noside == EVAL_SKIP)
10961         goto nosideret;
10962
10963       switch (TYPE_CODE (type))
10964         {
10965         default:
10966           lim_warning (_("Membership test incompletely implemented; "
10967                          "always returns true"));
10968           type = language_bool_type (exp->language_defn, exp->gdbarch);
10969           return value_from_longest (type, (LONGEST) 1);
10970
10971         case TYPE_CODE_RANGE:
10972           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10973           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10974           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10975           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10976           type = language_bool_type (exp->language_defn, exp->gdbarch);
10977           return
10978             value_from_longest (type,
10979                                 (value_less (arg1, arg3)
10980                                  || value_equal (arg1, arg3))
10981                                 && (value_less (arg2, arg1)
10982                                     || value_equal (arg2, arg1)));
10983         }
10984
10985     case BINOP_IN_BOUNDS:
10986       (*pos) += 2;
10987       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10988       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10989
10990       if (noside == EVAL_SKIP)
10991         goto nosideret;
10992
10993       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10994         {
10995           type = language_bool_type (exp->language_defn, exp->gdbarch);
10996           return value_zero (type, not_lval);
10997         }
10998
10999       tem = longest_to_int (exp->elts[pc + 1].longconst);
11000
11001       type = ada_index_type (value_type (arg2), tem, "range");
11002       if (!type)
11003         type = value_type (arg1);
11004
11005       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
11006       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
11007
11008       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11009       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
11010       type = language_bool_type (exp->language_defn, exp->gdbarch);
11011       return
11012         value_from_longest (type,
11013                             (value_less (arg1, arg3)
11014                              || value_equal (arg1, arg3))
11015                             && (value_less (arg2, arg1)
11016                                 || value_equal (arg2, arg1)));
11017
11018     case TERNOP_IN_RANGE:
11019       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11020       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11021       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11022
11023       if (noside == EVAL_SKIP)
11024         goto nosideret;
11025
11026       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11027       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
11028       type = language_bool_type (exp->language_defn, exp->gdbarch);
11029       return
11030         value_from_longest (type,
11031                             (value_less (arg1, arg3)
11032                              || value_equal (arg1, arg3))
11033                             && (value_less (arg2, arg1)
11034                                 || value_equal (arg2, arg1)));
11035
11036     case OP_ATR_FIRST:
11037     case OP_ATR_LAST:
11038     case OP_ATR_LENGTH:
11039       {
11040         struct type *type_arg;
11041
11042         if (exp->elts[*pos].opcode == OP_TYPE)
11043           {
11044             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11045             arg1 = NULL;
11046             type_arg = check_typedef (exp->elts[pc + 2].type);
11047           }
11048         else
11049           {
11050             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11051             type_arg = NULL;
11052           }
11053
11054         if (exp->elts[*pos].opcode != OP_LONG)
11055           error (_("Invalid operand to '%s"), ada_attribute_name (op));
11056         tem = longest_to_int (exp->elts[*pos + 2].longconst);
11057         *pos += 4;
11058
11059         if (noside == EVAL_SKIP)
11060           goto nosideret;
11061
11062         if (type_arg == NULL)
11063           {
11064             arg1 = ada_coerce_ref (arg1);
11065
11066             if (ada_is_constrained_packed_array_type (value_type (arg1)))
11067               arg1 = ada_coerce_to_simple_array (arg1);
11068
11069             if (op == OP_ATR_LENGTH)
11070               type = builtin_type (exp->gdbarch)->builtin_int;
11071             else
11072               {
11073                 type = ada_index_type (value_type (arg1), tem,
11074                                        ada_attribute_name (op));
11075                 if (type == NULL)
11076                   type = builtin_type (exp->gdbarch)->builtin_int;
11077               }
11078
11079             if (noside == EVAL_AVOID_SIDE_EFFECTS)
11080               return allocate_value (type);
11081
11082             switch (op)
11083               {
11084               default:          /* Should never happen.  */
11085                 error (_("unexpected attribute encountered"));
11086               case OP_ATR_FIRST:
11087                 return value_from_longest
11088                         (type, ada_array_bound (arg1, tem, 0));
11089               case OP_ATR_LAST:
11090                 return value_from_longest
11091                         (type, ada_array_bound (arg1, tem, 1));
11092               case OP_ATR_LENGTH:
11093                 return value_from_longest
11094                         (type, ada_array_length (arg1, tem));
11095               }
11096           }
11097         else if (discrete_type_p (type_arg))
11098           {
11099             struct type *range_type;
11100             const char *name = ada_type_name (type_arg);
11101
11102             range_type = NULL;
11103             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
11104               range_type = to_fixed_range_type (type_arg, NULL);
11105             if (range_type == NULL)
11106               range_type = type_arg;
11107             switch (op)
11108               {
11109               default:
11110                 error (_("unexpected attribute encountered"));
11111               case OP_ATR_FIRST:
11112                 return value_from_longest 
11113                   (range_type, ada_discrete_type_low_bound (range_type));
11114               case OP_ATR_LAST:
11115                 return value_from_longest
11116                   (range_type, ada_discrete_type_high_bound (range_type));
11117               case OP_ATR_LENGTH:
11118                 error (_("the 'length attribute applies only to array types"));
11119               }
11120           }
11121         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
11122           error (_("unimplemented type attribute"));
11123         else
11124           {
11125             LONGEST low, high;
11126
11127             if (ada_is_constrained_packed_array_type (type_arg))
11128               type_arg = decode_constrained_packed_array_type (type_arg);
11129
11130             if (op == OP_ATR_LENGTH)
11131               type = builtin_type (exp->gdbarch)->builtin_int;
11132             else
11133               {
11134                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
11135                 if (type == NULL)
11136                   type = builtin_type (exp->gdbarch)->builtin_int;
11137               }
11138
11139             if (noside == EVAL_AVOID_SIDE_EFFECTS)
11140               return allocate_value (type);
11141
11142             switch (op)
11143               {
11144               default:
11145                 error (_("unexpected attribute encountered"));
11146               case OP_ATR_FIRST:
11147                 low = ada_array_bound_from_type (type_arg, tem, 0);
11148                 return value_from_longest (type, low);
11149               case OP_ATR_LAST:
11150                 high = ada_array_bound_from_type (type_arg, tem, 1);
11151                 return value_from_longest (type, high);
11152               case OP_ATR_LENGTH:
11153                 low = ada_array_bound_from_type (type_arg, tem, 0);
11154                 high = ada_array_bound_from_type (type_arg, tem, 1);
11155                 return value_from_longest (type, high - low + 1);
11156               }
11157           }
11158       }
11159
11160     case OP_ATR_TAG:
11161       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11162       if (noside == EVAL_SKIP)
11163         goto nosideret;
11164
11165       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11166         return value_zero (ada_tag_type (arg1), not_lval);
11167
11168       return ada_value_tag (arg1);
11169
11170     case OP_ATR_MIN:
11171     case OP_ATR_MAX:
11172       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11173       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11174       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11175       if (noside == EVAL_SKIP)
11176         goto nosideret;
11177       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11178         return value_zero (value_type (arg1), not_lval);
11179       else
11180         {
11181           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11182           return value_binop (arg1, arg2,
11183                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
11184         }
11185
11186     case OP_ATR_MODULUS:
11187       {
11188         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
11189
11190         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11191         if (noside == EVAL_SKIP)
11192           goto nosideret;
11193
11194         if (!ada_is_modular_type (type_arg))
11195           error (_("'modulus must be applied to modular type"));
11196
11197         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11198                                    ada_modulus (type_arg));
11199       }
11200
11201
11202     case OP_ATR_POS:
11203       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11204       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11205       if (noside == EVAL_SKIP)
11206         goto nosideret;
11207       type = builtin_type (exp->gdbarch)->builtin_int;
11208       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11209         return value_zero (type, not_lval);
11210       else
11211         return value_pos_atr (type, arg1);
11212
11213     case OP_ATR_SIZE:
11214       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11215       type = value_type (arg1);
11216
11217       /* If the argument is a reference, then dereference its type, since
11218          the user is really asking for the size of the actual object,
11219          not the size of the pointer.  */
11220       if (TYPE_CODE (type) == TYPE_CODE_REF)
11221         type = TYPE_TARGET_TYPE (type);
11222
11223       if (noside == EVAL_SKIP)
11224         goto nosideret;
11225       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11226         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
11227       else
11228         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
11229                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
11230
11231     case OP_ATR_VAL:
11232       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11233       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11234       type = exp->elts[pc + 2].type;
11235       if (noside == EVAL_SKIP)
11236         goto nosideret;
11237       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11238         return value_zero (type, not_lval);
11239       else
11240         return value_val_atr (type, arg1);
11241
11242     case BINOP_EXP:
11243       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11244       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11245       if (noside == EVAL_SKIP)
11246         goto nosideret;
11247       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11248         return value_zero (value_type (arg1), not_lval);
11249       else
11250         {
11251           /* For integer exponentiation operations,
11252              only promote the first argument.  */
11253           if (is_integral_type (value_type (arg2)))
11254             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11255           else
11256             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11257
11258           return value_binop (arg1, arg2, op);
11259         }
11260
11261     case UNOP_PLUS:
11262       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11263       if (noside == EVAL_SKIP)
11264         goto nosideret;
11265       else
11266         return arg1;
11267
11268     case UNOP_ABS:
11269       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11270       if (noside == EVAL_SKIP)
11271         goto nosideret;
11272       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11273       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
11274         return value_neg (arg1);
11275       else
11276         return arg1;
11277
11278     case UNOP_IND:
11279       preeval_pos = *pos;
11280       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11281       if (noside == EVAL_SKIP)
11282         goto nosideret;
11283       type = ada_check_typedef (value_type (arg1));
11284       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11285         {
11286           if (ada_is_array_descriptor_type (type))
11287             /* GDB allows dereferencing GNAT array descriptors.  */
11288             {
11289               struct type *arrType = ada_type_of_array (arg1, 0);
11290
11291               if (arrType == NULL)
11292                 error (_("Attempt to dereference null array pointer."));
11293               return value_at_lazy (arrType, 0);
11294             }
11295           else if (TYPE_CODE (type) == TYPE_CODE_PTR
11296                    || TYPE_CODE (type) == TYPE_CODE_REF
11297                    /* In C you can dereference an array to get the 1st elt.  */
11298                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
11299             {
11300             /* As mentioned in the OP_VAR_VALUE case, tagged types can
11301                only be determined by inspecting the object's tag.
11302                This means that we need to evaluate completely the
11303                expression in order to get its type.  */
11304
11305               if ((TYPE_CODE (type) == TYPE_CODE_REF
11306                    || TYPE_CODE (type) == TYPE_CODE_PTR)
11307                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11308                 {
11309                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11310                                           EVAL_NORMAL);
11311                   type = value_type (ada_value_ind (arg1));
11312                 }
11313               else
11314                 {
11315                   type = to_static_fixed_type
11316                     (ada_aligned_type
11317                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11318                 }
11319               ada_ensure_varsize_limit (type);
11320               return value_zero (type, lval_memory);
11321             }
11322           else if (TYPE_CODE (type) == TYPE_CODE_INT)
11323             {
11324               /* GDB allows dereferencing an int.  */
11325               if (expect_type == NULL)
11326                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11327                                    lval_memory);
11328               else
11329                 {
11330                   expect_type = 
11331                     to_static_fixed_type (ada_aligned_type (expect_type));
11332                   return value_zero (expect_type, lval_memory);
11333                 }
11334             }
11335           else
11336             error (_("Attempt to take contents of a non-pointer value."));
11337         }
11338       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
11339       type = ada_check_typedef (value_type (arg1));
11340
11341       if (TYPE_CODE (type) == TYPE_CODE_INT)
11342           /* GDB allows dereferencing an int.  If we were given
11343              the expect_type, then use that as the target type.
11344              Otherwise, assume that the target type is an int.  */
11345         {
11346           if (expect_type != NULL)
11347             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11348                                               arg1));
11349           else
11350             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11351                                   (CORE_ADDR) value_as_address (arg1));
11352         }
11353
11354       if (ada_is_array_descriptor_type (type))
11355         /* GDB allows dereferencing GNAT array descriptors.  */
11356         return ada_coerce_to_simple_array (arg1);
11357       else
11358         return ada_value_ind (arg1);
11359
11360     case STRUCTOP_STRUCT:
11361       tem = longest_to_int (exp->elts[pc + 1].longconst);
11362       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
11363       preeval_pos = *pos;
11364       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11365       if (noside == EVAL_SKIP)
11366         goto nosideret;
11367       if (noside == EVAL_AVOID_SIDE_EFFECTS)
11368         {
11369           struct type *type1 = value_type (arg1);
11370
11371           if (ada_is_tagged_type (type1, 1))
11372             {
11373               type = ada_lookup_struct_elt_type (type1,
11374                                                  &exp->elts[pc + 2].string,
11375                                                  1, 1, NULL);
11376
11377               /* If the field is not found, check if it exists in the
11378                  extension of this object's type. This means that we
11379                  need to evaluate completely the expression.  */
11380
11381               if (type == NULL)
11382                 {
11383                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11384                                           EVAL_NORMAL);
11385                   arg1 = ada_value_struct_elt (arg1,
11386                                                &exp->elts[pc + 2].string,
11387                                                0);
11388                   arg1 = unwrap_value (arg1);
11389                   type = value_type (ada_to_fixed_value (arg1));
11390                 }
11391             }
11392           else
11393             type =
11394               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11395                                           0, NULL);
11396
11397           return value_zero (ada_aligned_type (type), lval_memory);
11398         }
11399       else
11400         {
11401           arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11402           arg1 = unwrap_value (arg1);
11403           return ada_to_fixed_value (arg1);
11404         }
11405
11406     case OP_TYPE:
11407       /* The value is not supposed to be used.  This is here to make it
11408          easier to accommodate expressions that contain types.  */
11409       (*pos) += 2;
11410       if (noside == EVAL_SKIP)
11411         goto nosideret;
11412       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11413         return allocate_value (exp->elts[pc + 1].type);
11414       else
11415         error (_("Attempt to use a type name as an expression"));
11416
11417     case OP_AGGREGATE:
11418     case OP_CHOICES:
11419     case OP_OTHERS:
11420     case OP_DISCRETE_RANGE:
11421     case OP_POSITIONAL:
11422     case OP_NAME:
11423       if (noside == EVAL_NORMAL)
11424         switch (op) 
11425           {
11426           case OP_NAME:
11427             error (_("Undefined name, ambiguous name, or renaming used in "
11428                      "component association: %s."), &exp->elts[pc+2].string);
11429           case OP_AGGREGATE:
11430             error (_("Aggregates only allowed on the right of an assignment"));
11431           default:
11432             internal_error (__FILE__, __LINE__,
11433                             _("aggregate apparently mangled"));
11434           }
11435
11436       ada_forward_operator_length (exp, pc, &oplen, &nargs);
11437       *pos += oplen - 1;
11438       for (tem = 0; tem < nargs; tem += 1) 
11439         ada_evaluate_subexp (NULL, exp, pos, noside);
11440       goto nosideret;
11441     }
11442
11443 nosideret:
11444   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
11445 }
11446 \f
11447
11448                                 /* Fixed point */
11449
11450 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
11451    type name that encodes the 'small and 'delta information.
11452    Otherwise, return NULL.  */
11453
11454 static const char *
11455 fixed_type_info (struct type *type)
11456 {
11457   const char *name = ada_type_name (type);
11458   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11459
11460   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11461     {
11462       const char *tail = strstr (name, "___XF_");
11463
11464       if (tail == NULL)
11465         return NULL;
11466       else
11467         return tail + 5;
11468     }
11469   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11470     return fixed_type_info (TYPE_TARGET_TYPE (type));
11471   else
11472     return NULL;
11473 }
11474
11475 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
11476
11477 int
11478 ada_is_fixed_point_type (struct type *type)
11479 {
11480   return fixed_type_info (type) != NULL;
11481 }
11482
11483 /* Return non-zero iff TYPE represents a System.Address type.  */
11484
11485 int
11486 ada_is_system_address_type (struct type *type)
11487 {
11488   return (TYPE_NAME (type)
11489           && strcmp (TYPE_NAME (type), "system__address") == 0);
11490 }
11491
11492 /* Assuming that TYPE is the representation of an Ada fixed-point
11493    type, return its delta, or -1 if the type is malformed and the
11494    delta cannot be determined.  */
11495
11496 DOUBLEST
11497 ada_delta (struct type *type)
11498 {
11499   const char *encoding = fixed_type_info (type);
11500   DOUBLEST num, den;
11501
11502   /* Strictly speaking, num and den are encoded as integer.  However,
11503      they may not fit into a long, and they will have to be converted
11504      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11505   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11506               &num, &den) < 2)
11507     return -1.0;
11508   else
11509     return num / den;
11510 }
11511
11512 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
11513    factor ('SMALL value) associated with the type.  */
11514
11515 static DOUBLEST
11516 scaling_factor (struct type *type)
11517 {
11518   const char *encoding = fixed_type_info (type);
11519   DOUBLEST num0, den0, num1, den1;
11520   int n;
11521
11522   /* Strictly speaking, num's and den's are encoded as integer.  However,
11523      they may not fit into a long, and they will have to be converted
11524      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
11525   n = sscanf (encoding,
11526               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11527               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11528               &num0, &den0, &num1, &den1);
11529
11530   if (n < 2)
11531     return 1.0;
11532   else if (n == 4)
11533     return num1 / den1;
11534   else
11535     return num0 / den0;
11536 }
11537
11538
11539 /* Assuming that X is the representation of a value of fixed-point
11540    type TYPE, return its floating-point equivalent.  */
11541
11542 DOUBLEST
11543 ada_fixed_to_float (struct type *type, LONGEST x)
11544 {
11545   return (DOUBLEST) x *scaling_factor (type);
11546 }
11547
11548 /* The representation of a fixed-point value of type TYPE
11549    corresponding to the value X.  */
11550
11551 LONGEST
11552 ada_float_to_fixed (struct type *type, DOUBLEST x)
11553 {
11554   return (LONGEST) (x / scaling_factor (type) + 0.5);
11555 }
11556
11557 \f
11558
11559                                 /* Range types */
11560
11561 /* Scan STR beginning at position K for a discriminant name, and
11562    return the value of that discriminant field of DVAL in *PX.  If
11563    PNEW_K is not null, put the position of the character beyond the
11564    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11565    not alter *PX and *PNEW_K if unsuccessful.  */
11566
11567 static int
11568 scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
11569                     int *pnew_k)
11570 {
11571   static char *bound_buffer = NULL;
11572   static size_t bound_buffer_len = 0;
11573   const char *pstart, *pend, *bound;
11574   struct value *bound_val;
11575
11576   if (dval == NULL || str == NULL || str[k] == '\0')
11577     return 0;
11578
11579   pstart = str + k;
11580   pend = strstr (pstart, "__");
11581   if (pend == NULL)
11582     {
11583       bound = pstart;
11584       k += strlen (bound);
11585     }
11586   else
11587     {
11588       int len = pend - pstart;
11589
11590       /* Strip __ and beyond.  */
11591       GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
11592       strncpy (bound_buffer, pstart, len);
11593       bound_buffer[len] = '\0';
11594
11595       bound = bound_buffer;
11596       k = pend - str;
11597     }
11598
11599   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11600   if (bound_val == NULL)
11601     return 0;
11602
11603   *px = value_as_long (bound_val);
11604   if (pnew_k != NULL)
11605     *pnew_k = k;
11606   return 1;
11607 }
11608
11609 /* Value of variable named NAME in the current environment.  If
11610    no such variable found, then if ERR_MSG is null, returns 0, and
11611    otherwise causes an error with message ERR_MSG.  */
11612
11613 static struct value *
11614 get_var_value (const char *name, const char *err_msg)
11615 {
11616   struct block_symbol *syms;
11617   int nsyms;
11618
11619   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11620                                   &syms);
11621
11622   if (nsyms != 1)
11623     {
11624       if (err_msg == NULL)
11625         return 0;
11626       else
11627         error (("%s"), err_msg);
11628     }
11629
11630   return value_of_variable (syms[0].symbol, syms[0].block);
11631 }
11632
11633 /* Value of integer variable named NAME in the current environment.
11634    If no such variable is found, returns false.  Otherwise, sets VALUE
11635    to the variable's value and returns true.  */
11636
11637 bool
11638 get_int_var_value (const char *name, LONGEST &value)
11639 {
11640   struct value *var_val = get_var_value (name, 0);
11641
11642   if (var_val == 0)
11643     return false;
11644
11645   value = value_as_long (var_val);
11646   return true;
11647 }
11648
11649
11650 /* Return a range type whose base type is that of the range type named
11651    NAME in the current environment, and whose bounds are calculated
11652    from NAME according to the GNAT range encoding conventions.
11653    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11654    corresponding range type from debug information; fall back to using it
11655    if symbol lookup fails.  If a new type must be created, allocate it
11656    like ORIG_TYPE was.  The bounds information, in general, is encoded
11657    in NAME, the base type given in the named range type.  */
11658
11659 static struct type *
11660 to_fixed_range_type (struct type *raw_type, struct value *dval)
11661 {
11662   const char *name;
11663   struct type *base_type;
11664   const char *subtype_info;
11665
11666   gdb_assert (raw_type != NULL);
11667   gdb_assert (TYPE_NAME (raw_type) != NULL);
11668
11669   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11670     base_type = TYPE_TARGET_TYPE (raw_type);
11671   else
11672     base_type = raw_type;
11673
11674   name = TYPE_NAME (raw_type);
11675   subtype_info = strstr (name, "___XD");
11676   if (subtype_info == NULL)
11677     {
11678       LONGEST L = ada_discrete_type_low_bound (raw_type);
11679       LONGEST U = ada_discrete_type_high_bound (raw_type);
11680
11681       if (L < INT_MIN || U > INT_MAX)
11682         return raw_type;
11683       else
11684         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11685                                          L, U);
11686     }
11687   else
11688     {
11689       static char *name_buf = NULL;
11690       static size_t name_len = 0;
11691       int prefix_len = subtype_info - name;
11692       LONGEST L, U;
11693       struct type *type;
11694       const char *bounds_str;
11695       int n;
11696
11697       GROW_VECT (name_buf, name_len, prefix_len + 5);
11698       strncpy (name_buf, name, prefix_len);
11699       name_buf[prefix_len] = '\0';
11700
11701       subtype_info += 5;
11702       bounds_str = strchr (subtype_info, '_');
11703       n = 1;
11704
11705       if (*subtype_info == 'L')
11706         {
11707           if (!ada_scan_number (bounds_str, n, &L, &n)
11708               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11709             return raw_type;
11710           if (bounds_str[n] == '_')
11711             n += 2;
11712           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11713             n += 1;
11714           subtype_info += 1;
11715         }
11716       else
11717         {
11718           strcpy (name_buf + prefix_len, "___L");
11719           if (!get_int_var_value (name_buf, L))
11720             {
11721               lim_warning (_("Unknown lower bound, using 1."));
11722               L = 1;
11723             }
11724         }
11725
11726       if (*subtype_info == 'U')
11727         {
11728           if (!ada_scan_number (bounds_str, n, &U, &n)
11729               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11730             return raw_type;
11731         }
11732       else
11733         {
11734           strcpy (name_buf + prefix_len, "___U");
11735           if (!get_int_var_value (name_buf, U))
11736             {
11737               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11738               U = L;
11739             }
11740         }
11741
11742       type = create_static_range_type (alloc_type_copy (raw_type),
11743                                        base_type, L, U);
11744       TYPE_NAME (type) = name;
11745       return type;
11746     }
11747 }
11748
11749 /* True iff NAME is the name of a range type.  */
11750
11751 int
11752 ada_is_range_type_name (const char *name)
11753 {
11754   return (name != NULL && strstr (name, "___XD"));
11755 }
11756 \f
11757
11758                                 /* Modular types */
11759
11760 /* True iff TYPE is an Ada modular type.  */
11761
11762 int
11763 ada_is_modular_type (struct type *type)
11764 {
11765   struct type *subranged_type = get_base_type (type);
11766
11767   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11768           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11769           && TYPE_UNSIGNED (subranged_type));
11770 }
11771
11772 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11773
11774 ULONGEST
11775 ada_modulus (struct type *type)
11776 {
11777   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11778 }
11779 \f
11780
11781 /* Ada exception catchpoint support:
11782    ---------------------------------
11783
11784    We support 3 kinds of exception catchpoints:
11785      . catchpoints on Ada exceptions
11786      . catchpoints on unhandled Ada exceptions
11787      . catchpoints on failed assertions
11788
11789    Exceptions raised during failed assertions, or unhandled exceptions
11790    could perfectly be caught with the general catchpoint on Ada exceptions.
11791    However, we can easily differentiate these two special cases, and having
11792    the option to distinguish these two cases from the rest can be useful
11793    to zero-in on certain situations.
11794
11795    Exception catchpoints are a specialized form of breakpoint,
11796    since they rely on inserting breakpoints inside known routines
11797    of the GNAT runtime.  The implementation therefore uses a standard
11798    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11799    of breakpoint_ops.
11800
11801    Support in the runtime for exception catchpoints have been changed
11802    a few times already, and these changes affect the implementation
11803    of these catchpoints.  In order to be able to support several
11804    variants of the runtime, we use a sniffer that will determine
11805    the runtime variant used by the program being debugged.  */
11806
11807 /* Ada's standard exceptions.
11808
11809    The Ada 83 standard also defined Numeric_Error.  But there so many
11810    situations where it was unclear from the Ada 83 Reference Manual
11811    (RM) whether Constraint_Error or Numeric_Error should be raised,
11812    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11813    Interpretation saying that anytime the RM says that Numeric_Error
11814    should be raised, the implementation may raise Constraint_Error.
11815    Ada 95 went one step further and pretty much removed Numeric_Error
11816    from the list of standard exceptions (it made it a renaming of
11817    Constraint_Error, to help preserve compatibility when compiling
11818    an Ada83 compiler). As such, we do not include Numeric_Error from
11819    this list of standard exceptions.  */
11820
11821 static const char *standard_exc[] = {
11822   "constraint_error",
11823   "program_error",
11824   "storage_error",
11825   "tasking_error"
11826 };
11827
11828 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11829
11830 /* A structure that describes how to support exception catchpoints
11831    for a given executable.  */
11832
11833 struct exception_support_info
11834 {
11835    /* The name of the symbol to break on in order to insert
11836       a catchpoint on exceptions.  */
11837    const char *catch_exception_sym;
11838
11839    /* The name of the symbol to break on in order to insert
11840       a catchpoint on unhandled exceptions.  */
11841    const char *catch_exception_unhandled_sym;
11842
11843    /* The name of the symbol to break on in order to insert
11844       a catchpoint on failed assertions.  */
11845    const char *catch_assert_sym;
11846
11847    /* Assuming that the inferior just triggered an unhandled exception
11848       catchpoint, this function is responsible for returning the address
11849       in inferior memory where the name of that exception is stored.
11850       Return zero if the address could not be computed.  */
11851    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11852 };
11853
11854 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11855 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11856
11857 /* The following exception support info structure describes how to
11858    implement exception catchpoints with the latest version of the
11859    Ada runtime (as of 2007-03-06).  */
11860
11861 static const struct exception_support_info default_exception_support_info =
11862 {
11863   "__gnat_debug_raise_exception", /* catch_exception_sym */
11864   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11865   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11866   ada_unhandled_exception_name_addr
11867 };
11868
11869 /* The following exception support info structure describes how to
11870    implement exception catchpoints with a slightly older version
11871    of the Ada runtime.  */
11872
11873 static const struct exception_support_info exception_support_info_fallback =
11874 {
11875   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11876   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11877   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11878   ada_unhandled_exception_name_addr_from_raise
11879 };
11880
11881 /* Return nonzero if we can detect the exception support routines
11882    described in EINFO.
11883
11884    This function errors out if an abnormal situation is detected
11885    (for instance, if we find the exception support routines, but
11886    that support is found to be incomplete).  */
11887
11888 static int
11889 ada_has_this_exception_support (const struct exception_support_info *einfo)
11890 {
11891   struct symbol *sym;
11892
11893   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11894      that should be compiled with debugging information.  As a result, we
11895      expect to find that symbol in the symtabs.  */
11896
11897   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11898   if (sym == NULL)
11899     {
11900       /* Perhaps we did not find our symbol because the Ada runtime was
11901          compiled without debugging info, or simply stripped of it.
11902          It happens on some GNU/Linux distributions for instance, where
11903          users have to install a separate debug package in order to get
11904          the runtime's debugging info.  In that situation, let the user
11905          know why we cannot insert an Ada exception catchpoint.
11906
11907          Note: Just for the purpose of inserting our Ada exception
11908          catchpoint, we could rely purely on the associated minimal symbol.
11909          But we would be operating in degraded mode anyway, since we are
11910          still lacking the debugging info needed later on to extract
11911          the name of the exception being raised (this name is printed in
11912          the catchpoint message, and is also used when trying to catch
11913          a specific exception).  We do not handle this case for now.  */
11914       struct bound_minimal_symbol msym
11915         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11916
11917       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11918         error (_("Your Ada runtime appears to be missing some debugging "
11919                  "information.\nCannot insert Ada exception catchpoint "
11920                  "in this configuration."));
11921
11922       return 0;
11923     }
11924
11925   /* Make sure that the symbol we found corresponds to a function.  */
11926
11927   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11928     error (_("Symbol \"%s\" is not a function (class = %d)"),
11929            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11930
11931   return 1;
11932 }
11933
11934 /* Inspect the Ada runtime and determine which exception info structure
11935    should be used to provide support for exception catchpoints.
11936
11937    This function will always set the per-inferior exception_info,
11938    or raise an error.  */
11939
11940 static void
11941 ada_exception_support_info_sniffer (void)
11942 {
11943   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11944
11945   /* If the exception info is already known, then no need to recompute it.  */
11946   if (data->exception_info != NULL)
11947     return;
11948
11949   /* Check the latest (default) exception support info.  */
11950   if (ada_has_this_exception_support (&default_exception_support_info))
11951     {
11952       data->exception_info = &default_exception_support_info;
11953       return;
11954     }
11955
11956   /* Try our fallback exception suport info.  */
11957   if (ada_has_this_exception_support (&exception_support_info_fallback))
11958     {
11959       data->exception_info = &exception_support_info_fallback;
11960       return;
11961     }
11962
11963   /* Sometimes, it is normal for us to not be able to find the routine
11964      we are looking for.  This happens when the program is linked with
11965      the shared version of the GNAT runtime, and the program has not been
11966      started yet.  Inform the user of these two possible causes if
11967      applicable.  */
11968
11969   if (ada_update_initial_language (language_unknown) != language_ada)
11970     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11971
11972   /* If the symbol does not exist, then check that the program is
11973      already started, to make sure that shared libraries have been
11974      loaded.  If it is not started, this may mean that the symbol is
11975      in a shared library.  */
11976
11977   if (ptid_get_pid (inferior_ptid) == 0)
11978     error (_("Unable to insert catchpoint. Try to start the program first."));
11979
11980   /* At this point, we know that we are debugging an Ada program and
11981      that the inferior has been started, but we still are not able to
11982      find the run-time symbols.  That can mean that we are in
11983      configurable run time mode, or that a-except as been optimized
11984      out by the linker...  In any case, at this point it is not worth
11985      supporting this feature.  */
11986
11987   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11988 }
11989
11990 /* True iff FRAME is very likely to be that of a function that is
11991    part of the runtime system.  This is all very heuristic, but is
11992    intended to be used as advice as to what frames are uninteresting
11993    to most users.  */
11994
11995 static int
11996 is_known_support_routine (struct frame_info *frame)
11997 {
11998   struct symtab_and_line sal;
11999   char *func_name;
12000   enum language func_lang;
12001   int i;
12002   const char *fullname;
12003
12004   /* If this code does not have any debugging information (no symtab),
12005      This cannot be any user code.  */
12006
12007   find_frame_sal (frame, &sal);
12008   if (sal.symtab == NULL)
12009     return 1;
12010
12011   /* If there is a symtab, but the associated source file cannot be
12012      located, then assume this is not user code:  Selecting a frame
12013      for which we cannot display the code would not be very helpful
12014      for the user.  This should also take care of case such as VxWorks
12015      where the kernel has some debugging info provided for a few units.  */
12016
12017   fullname = symtab_to_fullname (sal.symtab);
12018   if (access (fullname, R_OK) != 0)
12019     return 1;
12020
12021   /* Check the unit filename againt the Ada runtime file naming.
12022      We also check the name of the objfile against the name of some
12023      known system libraries that sometimes come with debugging info
12024      too.  */
12025
12026   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
12027     {
12028       re_comp (known_runtime_file_name_patterns[i]);
12029       if (re_exec (lbasename (sal.symtab->filename)))
12030         return 1;
12031       if (SYMTAB_OBJFILE (sal.symtab) != NULL
12032           && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
12033         return 1;
12034     }
12035
12036   /* Check whether the function is a GNAT-generated entity.  */
12037
12038   find_frame_funname (frame, &func_name, &func_lang, NULL);
12039   if (func_name == NULL)
12040     return 1;
12041
12042   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
12043     {
12044       re_comp (known_auxiliary_function_name_patterns[i]);
12045       if (re_exec (func_name))
12046         {
12047           xfree (func_name);
12048           return 1;
12049         }
12050     }
12051
12052   xfree (func_name);
12053   return 0;
12054 }
12055
12056 /* Find the first frame that contains debugging information and that is not
12057    part of the Ada run-time, starting from FI and moving upward.  */
12058
12059 void
12060 ada_find_printable_frame (struct frame_info *fi)
12061 {
12062   for (; fi != NULL; fi = get_prev_frame (fi))
12063     {
12064       if (!is_known_support_routine (fi))
12065         {
12066           select_frame (fi);
12067           break;
12068         }
12069     }
12070
12071 }
12072
12073 /* Assuming that the inferior just triggered an unhandled exception
12074    catchpoint, return the address in inferior memory where the name
12075    of the exception is stored.
12076    
12077    Return zero if the address could not be computed.  */
12078
12079 static CORE_ADDR
12080 ada_unhandled_exception_name_addr (void)
12081 {
12082   return parse_and_eval_address ("e.full_name");
12083 }
12084
12085 /* Same as ada_unhandled_exception_name_addr, except that this function
12086    should be used when the inferior uses an older version of the runtime,
12087    where the exception name needs to be extracted from a specific frame
12088    several frames up in the callstack.  */
12089
12090 static CORE_ADDR
12091 ada_unhandled_exception_name_addr_from_raise (void)
12092 {
12093   int frame_level;
12094   struct frame_info *fi;
12095   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12096   struct cleanup *old_chain;
12097
12098   /* To determine the name of this exception, we need to select
12099      the frame corresponding to RAISE_SYM_NAME.  This frame is
12100      at least 3 levels up, so we simply skip the first 3 frames
12101      without checking the name of their associated function.  */
12102   fi = get_current_frame ();
12103   for (frame_level = 0; frame_level < 3; frame_level += 1)
12104     if (fi != NULL)
12105       fi = get_prev_frame (fi); 
12106
12107   old_chain = make_cleanup (null_cleanup, NULL);
12108   while (fi != NULL)
12109     {
12110       char *func_name;
12111       enum language func_lang;
12112
12113       find_frame_funname (fi, &func_name, &func_lang, NULL);
12114       if (func_name != NULL)
12115         {
12116           make_cleanup (xfree, func_name);
12117
12118           if (strcmp (func_name,
12119                       data->exception_info->catch_exception_sym) == 0)
12120             break; /* We found the frame we were looking for...  */
12121           fi = get_prev_frame (fi);
12122         }
12123     }
12124   do_cleanups (old_chain);
12125
12126   if (fi == NULL)
12127     return 0;
12128
12129   select_frame (fi);
12130   return parse_and_eval_address ("id.full_name");
12131 }
12132
12133 /* Assuming the inferior just triggered an Ada exception catchpoint
12134    (of any type), return the address in inferior memory where the name
12135    of the exception is stored, if applicable.
12136
12137    Assumes the selected frame is the current frame.
12138
12139    Return zero if the address could not be computed, or if not relevant.  */
12140
12141 static CORE_ADDR
12142 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
12143                            struct breakpoint *b)
12144 {
12145   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12146
12147   switch (ex)
12148     {
12149       case ada_catch_exception:
12150         return (parse_and_eval_address ("e.full_name"));
12151         break;
12152
12153       case ada_catch_exception_unhandled:
12154         return data->exception_info->unhandled_exception_name_addr ();
12155         break;
12156       
12157       case ada_catch_assert:
12158         return 0;  /* Exception name is not relevant in this case.  */
12159         break;
12160
12161       default:
12162         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12163         break;
12164     }
12165
12166   return 0; /* Should never be reached.  */
12167 }
12168
12169 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
12170    any error that ada_exception_name_addr_1 might cause to be thrown.
12171    When an error is intercepted, a warning with the error message is printed,
12172    and zero is returned.  */
12173
12174 static CORE_ADDR
12175 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
12176                          struct breakpoint *b)
12177 {
12178   CORE_ADDR result = 0;
12179
12180   TRY
12181     {
12182       result = ada_exception_name_addr_1 (ex, b);
12183     }
12184
12185   CATCH (e, RETURN_MASK_ERROR)
12186     {
12187       warning (_("failed to get exception name: %s"), e.message);
12188       return 0;
12189     }
12190   END_CATCH
12191
12192   return result;
12193 }
12194
12195 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
12196
12197 /* Ada catchpoints.
12198
12199    In the case of catchpoints on Ada exceptions, the catchpoint will
12200    stop the target on every exception the program throws.  When a user
12201    specifies the name of a specific exception, we translate this
12202    request into a condition expression (in text form), and then parse
12203    it into an expression stored in each of the catchpoint's locations.
12204    We then use this condition to check whether the exception that was
12205    raised is the one the user is interested in.  If not, then the
12206    target is resumed again.  We store the name of the requested
12207    exception, in order to be able to re-set the condition expression
12208    when symbols change.  */
12209
12210 /* An instance of this type is used to represent an Ada catchpoint
12211    breakpoint location.  */
12212
12213 class ada_catchpoint_location : public bp_location
12214 {
12215 public:
12216   ada_catchpoint_location (const bp_location_ops *ops, breakpoint *owner)
12217     : bp_location (ops, owner)
12218   {}
12219
12220   /* The condition that checks whether the exception that was raised
12221      is the specific exception the user specified on catchpoint
12222      creation.  */
12223   expression_up excep_cond_expr;
12224 };
12225
12226 /* Implement the DTOR method in the bp_location_ops structure for all
12227    Ada exception catchpoint kinds.  */
12228
12229 static void
12230 ada_catchpoint_location_dtor (struct bp_location *bl)
12231 {
12232   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
12233
12234   al->excep_cond_expr.reset ();
12235 }
12236
12237 /* The vtable to be used in Ada catchpoint locations.  */
12238
12239 static const struct bp_location_ops ada_catchpoint_location_ops =
12240 {
12241   ada_catchpoint_location_dtor
12242 };
12243
12244 /* An instance of this type is used to represent an Ada catchpoint.  */
12245
12246 struct ada_catchpoint : public breakpoint
12247 {
12248   ~ada_catchpoint () override;
12249
12250   /* The name of the specific exception the user specified.  */
12251   char *excep_string;
12252 };
12253
12254 /* Parse the exception condition string in the context of each of the
12255    catchpoint's locations, and store them for later evaluation.  */
12256
12257 static void
12258 create_excep_cond_exprs (struct ada_catchpoint *c)
12259 {
12260   struct cleanup *old_chain;
12261   struct bp_location *bl;
12262   char *cond_string;
12263
12264   /* Nothing to do if there's no specific exception to catch.  */
12265   if (c->excep_string == NULL)
12266     return;
12267
12268   /* Same if there are no locations... */
12269   if (c->loc == NULL)
12270     return;
12271
12272   /* Compute the condition expression in text form, from the specific
12273      expection we want to catch.  */
12274   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
12275   old_chain = make_cleanup (xfree, cond_string);
12276
12277   /* Iterate over all the catchpoint's locations, and parse an
12278      expression for each.  */
12279   for (bl = c->loc; bl != NULL; bl = bl->next)
12280     {
12281       struct ada_catchpoint_location *ada_loc
12282         = (struct ada_catchpoint_location *) bl;
12283       expression_up exp;
12284
12285       if (!bl->shlib_disabled)
12286         {
12287           const char *s;
12288
12289           s = cond_string;
12290           TRY
12291             {
12292               exp = parse_exp_1 (&s, bl->address,
12293                                  block_for_pc (bl->address),
12294                                  0);
12295             }
12296           CATCH (e, RETURN_MASK_ERROR)
12297             {
12298               warning (_("failed to reevaluate internal exception condition "
12299                          "for catchpoint %d: %s"),
12300                        c->number, e.message);
12301             }
12302           END_CATCH
12303         }
12304
12305       ada_loc->excep_cond_expr = std::move (exp);
12306     }
12307
12308   do_cleanups (old_chain);
12309 }
12310
12311 /* ada_catchpoint destructor.  */
12312
12313 ada_catchpoint::~ada_catchpoint ()
12314 {
12315   xfree (this->excep_string);
12316 }
12317
12318 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12319    structure for all exception catchpoint kinds.  */
12320
12321 static struct bp_location *
12322 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
12323                              struct breakpoint *self)
12324 {
12325   return new ada_catchpoint_location (&ada_catchpoint_location_ops, self);
12326 }
12327
12328 /* Implement the RE_SET method in the breakpoint_ops structure for all
12329    exception catchpoint kinds.  */
12330
12331 static void
12332 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
12333 {
12334   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12335
12336   /* Call the base class's method.  This updates the catchpoint's
12337      locations.  */
12338   bkpt_breakpoint_ops.re_set (b);
12339
12340   /* Reparse the exception conditional expressions.  One for each
12341      location.  */
12342   create_excep_cond_exprs (c);
12343 }
12344
12345 /* Returns true if we should stop for this breakpoint hit.  If the
12346    user specified a specific exception, we only want to cause a stop
12347    if the program thrown that exception.  */
12348
12349 static int
12350 should_stop_exception (const struct bp_location *bl)
12351 {
12352   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12353   const struct ada_catchpoint_location *ada_loc
12354     = (const struct ada_catchpoint_location *) bl;
12355   int stop;
12356
12357   /* With no specific exception, should always stop.  */
12358   if (c->excep_string == NULL)
12359     return 1;
12360
12361   if (ada_loc->excep_cond_expr == NULL)
12362     {
12363       /* We will have a NULL expression if back when we were creating
12364          the expressions, this location's had failed to parse.  */
12365       return 1;
12366     }
12367
12368   stop = 1;
12369   TRY
12370     {
12371       struct value *mark;
12372
12373       mark = value_mark ();
12374       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
12375       value_free_to_mark (mark);
12376     }
12377   CATCH (ex, RETURN_MASK_ALL)
12378     {
12379       exception_fprintf (gdb_stderr, ex,
12380                          _("Error in testing exception condition:\n"));
12381     }
12382   END_CATCH
12383
12384   return stop;
12385 }
12386
12387 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
12388    for all exception catchpoint kinds.  */
12389
12390 static void
12391 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12392 {
12393   bs->stop = should_stop_exception (bs->bp_location_at);
12394 }
12395
12396 /* Implement the PRINT_IT method in the breakpoint_ops structure
12397    for all exception catchpoint kinds.  */
12398
12399 static enum print_stop_action
12400 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12401 {
12402   struct ui_out *uiout = current_uiout;
12403   struct breakpoint *b = bs->breakpoint_at;
12404
12405   annotate_catchpoint (b->number);
12406
12407   if (uiout->is_mi_like_p ())
12408     {
12409       uiout->field_string ("reason",
12410                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12411       uiout->field_string ("disp", bpdisp_text (b->disposition));
12412     }
12413
12414   uiout->text (b->disposition == disp_del
12415                ? "\nTemporary catchpoint " : "\nCatchpoint ");
12416   uiout->field_int ("bkptno", b->number);
12417   uiout->text (", ");
12418
12419   /* ada_exception_name_addr relies on the selected frame being the
12420      current frame.  Need to do this here because this function may be
12421      called more than once when printing a stop, and below, we'll
12422      select the first frame past the Ada run-time (see
12423      ada_find_printable_frame).  */
12424   select_frame (get_current_frame ());
12425
12426   switch (ex)
12427     {
12428       case ada_catch_exception:
12429       case ada_catch_exception_unhandled:
12430         {
12431           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12432           char exception_name[256];
12433
12434           if (addr != 0)
12435             {
12436               read_memory (addr, (gdb_byte *) exception_name,
12437                            sizeof (exception_name) - 1);
12438               exception_name [sizeof (exception_name) - 1] = '\0';
12439             }
12440           else
12441             {
12442               /* For some reason, we were unable to read the exception
12443                  name.  This could happen if the Runtime was compiled
12444                  without debugging info, for instance.  In that case,
12445                  just replace the exception name by the generic string
12446                  "exception" - it will read as "an exception" in the
12447                  notification we are about to print.  */
12448               memcpy (exception_name, "exception", sizeof ("exception"));
12449             }
12450           /* In the case of unhandled exception breakpoints, we print
12451              the exception name as "unhandled EXCEPTION_NAME", to make
12452              it clearer to the user which kind of catchpoint just got
12453              hit.  We used ui_out_text to make sure that this extra
12454              info does not pollute the exception name in the MI case.  */
12455           if (ex == ada_catch_exception_unhandled)
12456             uiout->text ("unhandled ");
12457           uiout->field_string ("exception-name", exception_name);
12458         }
12459         break;
12460       case ada_catch_assert:
12461         /* In this case, the name of the exception is not really
12462            important.  Just print "failed assertion" to make it clearer
12463            that his program just hit an assertion-failure catchpoint.
12464            We used ui_out_text because this info does not belong in
12465            the MI output.  */
12466         uiout->text ("failed assertion");
12467         break;
12468     }
12469   uiout->text (" at ");
12470   ada_find_printable_frame (get_current_frame ());
12471
12472   return PRINT_SRC_AND_LOC;
12473 }
12474
12475 /* Implement the PRINT_ONE method in the breakpoint_ops structure
12476    for all exception catchpoint kinds.  */
12477
12478 static void
12479 print_one_exception (enum ada_exception_catchpoint_kind ex,
12480                      struct breakpoint *b, struct bp_location **last_loc)
12481
12482   struct ui_out *uiout = current_uiout;
12483   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12484   struct value_print_options opts;
12485
12486   get_user_print_options (&opts);
12487   if (opts.addressprint)
12488     {
12489       annotate_field (4);
12490       uiout->field_core_addr ("addr", b->loc->gdbarch, b->loc->address);
12491     }
12492
12493   annotate_field (5);
12494   *last_loc = b->loc;
12495   switch (ex)
12496     {
12497       case ada_catch_exception:
12498         if (c->excep_string != NULL)
12499           {
12500             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12501
12502             uiout->field_string ("what", msg);
12503             xfree (msg);
12504           }
12505         else
12506           uiout->field_string ("what", "all Ada exceptions");
12507         
12508         break;
12509
12510       case ada_catch_exception_unhandled:
12511         uiout->field_string ("what", "unhandled Ada exceptions");
12512         break;
12513       
12514       case ada_catch_assert:
12515         uiout->field_string ("what", "failed Ada assertions");
12516         break;
12517
12518       default:
12519         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12520         break;
12521     }
12522 }
12523
12524 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12525    for all exception catchpoint kinds.  */
12526
12527 static void
12528 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12529                          struct breakpoint *b)
12530 {
12531   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12532   struct ui_out *uiout = current_uiout;
12533
12534   uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
12535                                                  : _("Catchpoint "));
12536   uiout->field_int ("bkptno", b->number);
12537   uiout->text (": ");
12538
12539   switch (ex)
12540     {
12541       case ada_catch_exception:
12542         if (c->excep_string != NULL)
12543           {
12544             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12545             struct cleanup *old_chain = make_cleanup (xfree, info);
12546
12547             uiout->text (info);
12548             do_cleanups (old_chain);
12549           }
12550         else
12551           uiout->text (_("all Ada exceptions"));
12552         break;
12553
12554       case ada_catch_exception_unhandled:
12555         uiout->text (_("unhandled Ada exceptions"));
12556         break;
12557       
12558       case ada_catch_assert:
12559         uiout->text (_("failed Ada assertions"));
12560         break;
12561
12562       default:
12563         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12564         break;
12565     }
12566 }
12567
12568 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12569    for all exception catchpoint kinds.  */
12570
12571 static void
12572 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12573                           struct breakpoint *b, struct ui_file *fp)
12574 {
12575   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12576
12577   switch (ex)
12578     {
12579       case ada_catch_exception:
12580         fprintf_filtered (fp, "catch exception");
12581         if (c->excep_string != NULL)
12582           fprintf_filtered (fp, " %s", c->excep_string);
12583         break;
12584
12585       case ada_catch_exception_unhandled:
12586         fprintf_filtered (fp, "catch exception unhandled");
12587         break;
12588
12589       case ada_catch_assert:
12590         fprintf_filtered (fp, "catch assert");
12591         break;
12592
12593       default:
12594         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12595     }
12596   print_recreate_thread (b, fp);
12597 }
12598
12599 /* Virtual table for "catch exception" breakpoints.  */
12600
12601 static struct bp_location *
12602 allocate_location_catch_exception (struct breakpoint *self)
12603 {
12604   return allocate_location_exception (ada_catch_exception, self);
12605 }
12606
12607 static void
12608 re_set_catch_exception (struct breakpoint *b)
12609 {
12610   re_set_exception (ada_catch_exception, b);
12611 }
12612
12613 static void
12614 check_status_catch_exception (bpstat bs)
12615 {
12616   check_status_exception (ada_catch_exception, bs);
12617 }
12618
12619 static enum print_stop_action
12620 print_it_catch_exception (bpstat bs)
12621 {
12622   return print_it_exception (ada_catch_exception, bs);
12623 }
12624
12625 static void
12626 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12627 {
12628   print_one_exception (ada_catch_exception, b, last_loc);
12629 }
12630
12631 static void
12632 print_mention_catch_exception (struct breakpoint *b)
12633 {
12634   print_mention_exception (ada_catch_exception, b);
12635 }
12636
12637 static void
12638 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12639 {
12640   print_recreate_exception (ada_catch_exception, b, fp);
12641 }
12642
12643 static struct breakpoint_ops catch_exception_breakpoint_ops;
12644
12645 /* Virtual table for "catch exception unhandled" breakpoints.  */
12646
12647 static struct bp_location *
12648 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12649 {
12650   return allocate_location_exception (ada_catch_exception_unhandled, self);
12651 }
12652
12653 static void
12654 re_set_catch_exception_unhandled (struct breakpoint *b)
12655 {
12656   re_set_exception (ada_catch_exception_unhandled, b);
12657 }
12658
12659 static void
12660 check_status_catch_exception_unhandled (bpstat bs)
12661 {
12662   check_status_exception (ada_catch_exception_unhandled, bs);
12663 }
12664
12665 static enum print_stop_action
12666 print_it_catch_exception_unhandled (bpstat bs)
12667 {
12668   return print_it_exception (ada_catch_exception_unhandled, bs);
12669 }
12670
12671 static void
12672 print_one_catch_exception_unhandled (struct breakpoint *b,
12673                                      struct bp_location **last_loc)
12674 {
12675   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12676 }
12677
12678 static void
12679 print_mention_catch_exception_unhandled (struct breakpoint *b)
12680 {
12681   print_mention_exception (ada_catch_exception_unhandled, b);
12682 }
12683
12684 static void
12685 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12686                                           struct ui_file *fp)
12687 {
12688   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12689 }
12690
12691 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12692
12693 /* Virtual table for "catch assert" breakpoints.  */
12694
12695 static struct bp_location *
12696 allocate_location_catch_assert (struct breakpoint *self)
12697 {
12698   return allocate_location_exception (ada_catch_assert, self);
12699 }
12700
12701 static void
12702 re_set_catch_assert (struct breakpoint *b)
12703 {
12704   re_set_exception (ada_catch_assert, b);
12705 }
12706
12707 static void
12708 check_status_catch_assert (bpstat bs)
12709 {
12710   check_status_exception (ada_catch_assert, bs);
12711 }
12712
12713 static enum print_stop_action
12714 print_it_catch_assert (bpstat bs)
12715 {
12716   return print_it_exception (ada_catch_assert, bs);
12717 }
12718
12719 static void
12720 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12721 {
12722   print_one_exception (ada_catch_assert, b, last_loc);
12723 }
12724
12725 static void
12726 print_mention_catch_assert (struct breakpoint *b)
12727 {
12728   print_mention_exception (ada_catch_assert, b);
12729 }
12730
12731 static void
12732 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12733 {
12734   print_recreate_exception (ada_catch_assert, b, fp);
12735 }
12736
12737 static struct breakpoint_ops catch_assert_breakpoint_ops;
12738
12739 /* Return a newly allocated copy of the first space-separated token
12740    in ARGSP, and then adjust ARGSP to point immediately after that
12741    token.
12742
12743    Return NULL if ARGPS does not contain any more tokens.  */
12744
12745 static char *
12746 ada_get_next_arg (const char **argsp)
12747 {
12748   const char *args = *argsp;
12749   const char *end;
12750   char *result;
12751
12752   args = skip_spaces_const (args);
12753   if (args[0] == '\0')
12754     return NULL; /* No more arguments.  */
12755   
12756   /* Find the end of the current argument.  */
12757
12758   end = skip_to_space_const (args);
12759
12760   /* Adjust ARGSP to point to the start of the next argument.  */
12761
12762   *argsp = end;
12763
12764   /* Make a copy of the current argument and return it.  */
12765
12766   result = (char *) xmalloc (end - args + 1);
12767   strncpy (result, args, end - args);
12768   result[end - args] = '\0';
12769   
12770   return result;
12771 }
12772
12773 /* Split the arguments specified in a "catch exception" command.  
12774    Set EX to the appropriate catchpoint type.
12775    Set EXCEP_STRING to the name of the specific exception if
12776    specified by the user.
12777    If a condition is found at the end of the arguments, the condition
12778    expression is stored in COND_STRING (memory must be deallocated
12779    after use).  Otherwise COND_STRING is set to NULL.  */
12780
12781 static void
12782 catch_ada_exception_command_split (const char *args,
12783                                    enum ada_exception_catchpoint_kind *ex,
12784                                    char **excep_string,
12785                                    char **cond_string)
12786 {
12787   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12788   char *exception_name;
12789   char *cond = NULL;
12790
12791   exception_name = ada_get_next_arg (&args);
12792   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12793     {
12794       /* This is not an exception name; this is the start of a condition
12795          expression for a catchpoint on all exceptions.  So, "un-get"
12796          this token, and set exception_name to NULL.  */
12797       xfree (exception_name);
12798       exception_name = NULL;
12799       args -= 2;
12800     }
12801   make_cleanup (xfree, exception_name);
12802
12803   /* Check to see if we have a condition.  */
12804
12805   args = skip_spaces_const (args);
12806   if (startswith (args, "if")
12807       && (isspace (args[2]) || args[2] == '\0'))
12808     {
12809       args += 2;
12810       args = skip_spaces_const (args);
12811
12812       if (args[0] == '\0')
12813         error (_("Condition missing after `if' keyword"));
12814       cond = xstrdup (args);
12815       make_cleanup (xfree, cond);
12816
12817       args += strlen (args);
12818     }
12819
12820   /* Check that we do not have any more arguments.  Anything else
12821      is unexpected.  */
12822
12823   if (args[0] != '\0')
12824     error (_("Junk at end of expression"));
12825
12826   discard_cleanups (old_chain);
12827
12828   if (exception_name == NULL)
12829     {
12830       /* Catch all exceptions.  */
12831       *ex = ada_catch_exception;
12832       *excep_string = NULL;
12833     }
12834   else if (strcmp (exception_name, "unhandled") == 0)
12835     {
12836       /* Catch unhandled exceptions.  */
12837       *ex = ada_catch_exception_unhandled;
12838       *excep_string = NULL;
12839     }
12840   else
12841     {
12842       /* Catch a specific exception.  */
12843       *ex = ada_catch_exception;
12844       *excep_string = exception_name;
12845     }
12846   *cond_string = cond;
12847 }
12848
12849 /* Return the name of the symbol on which we should break in order to
12850    implement a catchpoint of the EX kind.  */
12851
12852 static const char *
12853 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12854 {
12855   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12856
12857   gdb_assert (data->exception_info != NULL);
12858
12859   switch (ex)
12860     {
12861       case ada_catch_exception:
12862         return (data->exception_info->catch_exception_sym);
12863         break;
12864       case ada_catch_exception_unhandled:
12865         return (data->exception_info->catch_exception_unhandled_sym);
12866         break;
12867       case ada_catch_assert:
12868         return (data->exception_info->catch_assert_sym);
12869         break;
12870       default:
12871         internal_error (__FILE__, __LINE__,
12872                         _("unexpected catchpoint kind (%d)"), ex);
12873     }
12874 }
12875
12876 /* Return the breakpoint ops "virtual table" used for catchpoints
12877    of the EX kind.  */
12878
12879 static const struct breakpoint_ops *
12880 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12881 {
12882   switch (ex)
12883     {
12884       case ada_catch_exception:
12885         return (&catch_exception_breakpoint_ops);
12886         break;
12887       case ada_catch_exception_unhandled:
12888         return (&catch_exception_unhandled_breakpoint_ops);
12889         break;
12890       case ada_catch_assert:
12891         return (&catch_assert_breakpoint_ops);
12892         break;
12893       default:
12894         internal_error (__FILE__, __LINE__,
12895                         _("unexpected catchpoint kind (%d)"), ex);
12896     }
12897 }
12898
12899 /* Return the condition that will be used to match the current exception
12900    being raised with the exception that the user wants to catch.  This
12901    assumes that this condition is used when the inferior just triggered
12902    an exception catchpoint.
12903    
12904    The string returned is a newly allocated string that needs to be
12905    deallocated later.  */
12906
12907 static char *
12908 ada_exception_catchpoint_cond_string (const char *excep_string)
12909 {
12910   int i;
12911
12912   /* The standard exceptions are a special case.  They are defined in
12913      runtime units that have been compiled without debugging info; if
12914      EXCEP_STRING is the not-fully-qualified name of a standard
12915      exception (e.g. "constraint_error") then, during the evaluation
12916      of the condition expression, the symbol lookup on this name would
12917      *not* return this standard exception.  The catchpoint condition
12918      may then be set only on user-defined exceptions which have the
12919      same not-fully-qualified name (e.g. my_package.constraint_error).
12920
12921      To avoid this unexcepted behavior, these standard exceptions are
12922      systematically prefixed by "standard".  This means that "catch
12923      exception constraint_error" is rewritten into "catch exception
12924      standard.constraint_error".
12925
12926      If an exception named contraint_error is defined in another package of
12927      the inferior program, then the only way to specify this exception as a
12928      breakpoint condition is to use its fully-qualified named:
12929      e.g. my_package.constraint_error.  */
12930
12931   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12932     {
12933       if (strcmp (standard_exc [i], excep_string) == 0)
12934         {
12935           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12936                              excep_string);
12937         }
12938     }
12939   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12940 }
12941
12942 /* Return the symtab_and_line that should be used to insert an exception
12943    catchpoint of the TYPE kind.
12944
12945    EXCEP_STRING should contain the name of a specific exception that
12946    the catchpoint should catch, or NULL otherwise.
12947
12948    ADDR_STRING returns the name of the function where the real
12949    breakpoint that implements the catchpoints is set, depending on the
12950    type of catchpoint we need to create.  */
12951
12952 static struct symtab_and_line
12953 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12954                    char **addr_string, const struct breakpoint_ops **ops)
12955 {
12956   const char *sym_name;
12957   struct symbol *sym;
12958
12959   /* First, find out which exception support info to use.  */
12960   ada_exception_support_info_sniffer ();
12961
12962   /* Then lookup the function on which we will break in order to catch
12963      the Ada exceptions requested by the user.  */
12964   sym_name = ada_exception_sym_name (ex);
12965   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12966
12967   /* We can assume that SYM is not NULL at this stage.  If the symbol
12968      did not exist, ada_exception_support_info_sniffer would have
12969      raised an exception.
12970
12971      Also, ada_exception_support_info_sniffer should have already
12972      verified that SYM is a function symbol.  */
12973   gdb_assert (sym != NULL);
12974   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12975
12976   /* Set ADDR_STRING.  */
12977   *addr_string = xstrdup (sym_name);
12978
12979   /* Set OPS.  */
12980   *ops = ada_exception_breakpoint_ops (ex);
12981
12982   return find_function_start_sal (sym, 1);
12983 }
12984
12985 /* Create an Ada exception catchpoint.
12986
12987    EX_KIND is the kind of exception catchpoint to be created.
12988
12989    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12990    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12991    of the exception to which this catchpoint applies.  When not NULL,
12992    the string must be allocated on the heap, and its deallocation
12993    is no longer the responsibility of the caller.
12994
12995    COND_STRING, if not NULL, is the catchpoint condition.  This string
12996    must be allocated on the heap, and its deallocation is no longer
12997    the responsibility of the caller.
12998
12999    TEMPFLAG, if nonzero, means that the underlying breakpoint
13000    should be temporary.
13001
13002    FROM_TTY is the usual argument passed to all commands implementations.  */
13003
13004 void
13005 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
13006                                  enum ada_exception_catchpoint_kind ex_kind,
13007                                  char *excep_string,
13008                                  char *cond_string,
13009                                  int tempflag,
13010                                  int disabled,
13011                                  int from_tty)
13012 {
13013   struct ada_catchpoint *c;
13014   char *addr_string = NULL;
13015   const struct breakpoint_ops *ops = NULL;
13016   struct symtab_and_line sal
13017     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
13018
13019   c = new ada_catchpoint ();
13020   init_ada_exception_breakpoint (c, gdbarch, sal, addr_string,
13021                                  ops, tempflag, disabled, from_tty);
13022   c->excep_string = excep_string;
13023   create_excep_cond_exprs (c);
13024   if (cond_string != NULL)
13025     set_breakpoint_condition (c, cond_string, from_tty);
13026   install_breakpoint (0, c, 1);
13027 }
13028
13029 /* Implement the "catch exception" command.  */
13030
13031 static void
13032 catch_ada_exception_command (char *arg_entry, int from_tty,
13033                              struct cmd_list_element *command)
13034 {
13035   const char *arg = arg_entry;
13036   struct gdbarch *gdbarch = get_current_arch ();
13037   int tempflag;
13038   enum ada_exception_catchpoint_kind ex_kind;
13039   char *excep_string = NULL;
13040   char *cond_string = NULL;
13041
13042   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13043
13044   if (!arg)
13045     arg = "";
13046   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
13047                                      &cond_string);
13048   create_ada_exception_catchpoint (gdbarch, ex_kind,
13049                                    excep_string, cond_string,
13050                                    tempflag, 1 /* enabled */,
13051                                    from_tty);
13052 }
13053
13054 /* Split the arguments specified in a "catch assert" command.
13055
13056    ARGS contains the command's arguments (or the empty string if
13057    no arguments were passed).
13058
13059    If ARGS contains a condition, set COND_STRING to that condition
13060    (the memory needs to be deallocated after use).  */
13061
13062 static void
13063 catch_ada_assert_command_split (const char *args, char **cond_string)
13064 {
13065   args = skip_spaces_const (args);
13066
13067   /* Check whether a condition was provided.  */
13068   if (startswith (args, "if")
13069       && (isspace (args[2]) || args[2] == '\0'))
13070     {
13071       args += 2;
13072       args = skip_spaces_const (args);
13073       if (args[0] == '\0')
13074         error (_("condition missing after `if' keyword"));
13075       *cond_string = xstrdup (args);
13076     }
13077
13078   /* Otherwise, there should be no other argument at the end of
13079      the command.  */
13080   else if (args[0] != '\0')
13081     error (_("Junk at end of arguments."));
13082 }
13083
13084 /* Implement the "catch assert" command.  */
13085
13086 static void
13087 catch_assert_command (char *arg_entry, int from_tty,
13088                       struct cmd_list_element *command)
13089 {
13090   const char *arg = arg_entry;
13091   struct gdbarch *gdbarch = get_current_arch ();
13092   int tempflag;
13093   char *cond_string = NULL;
13094
13095   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13096
13097   if (!arg)
13098     arg = "";
13099   catch_ada_assert_command_split (arg, &cond_string);
13100   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
13101                                    NULL, cond_string,
13102                                    tempflag, 1 /* enabled */,
13103                                    from_tty);
13104 }
13105
13106 /* Return non-zero if the symbol SYM is an Ada exception object.  */
13107
13108 static int
13109 ada_is_exception_sym (struct symbol *sym)
13110 {
13111   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
13112
13113   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
13114           && SYMBOL_CLASS (sym) != LOC_BLOCK
13115           && SYMBOL_CLASS (sym) != LOC_CONST
13116           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
13117           && type_name != NULL && strcmp (type_name, "exception") == 0);
13118 }
13119
13120 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
13121    Ada exception object.  This matches all exceptions except the ones
13122    defined by the Ada language.  */
13123
13124 static int
13125 ada_is_non_standard_exception_sym (struct symbol *sym)
13126 {
13127   int i;
13128
13129   if (!ada_is_exception_sym (sym))
13130     return 0;
13131
13132   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13133     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
13134       return 0;  /* A standard exception.  */
13135
13136   /* Numeric_Error is also a standard exception, so exclude it.
13137      See the STANDARD_EXC description for more details as to why
13138      this exception is not listed in that array.  */
13139   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
13140     return 0;
13141
13142   return 1;
13143 }
13144
13145 /* A helper function for qsort, comparing two struct ada_exc_info
13146    objects.
13147
13148    The comparison is determined first by exception name, and then
13149    by exception address.  */
13150
13151 static int
13152 compare_ada_exception_info (const void *a, const void *b)
13153 {
13154   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
13155   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
13156   int result;
13157
13158   result = strcmp (exc_a->name, exc_b->name);
13159   if (result != 0)
13160     return result;
13161
13162   if (exc_a->addr < exc_b->addr)
13163     return -1;
13164   if (exc_a->addr > exc_b->addr)
13165     return 1;
13166
13167   return 0;
13168 }
13169
13170 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
13171    routine, but keeping the first SKIP elements untouched.
13172
13173    All duplicates are also removed.  */
13174
13175 static void
13176 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
13177                                       int skip)
13178 {
13179   struct ada_exc_info *to_sort
13180     = VEC_address (ada_exc_info, *exceptions) + skip;
13181   int to_sort_len
13182     = VEC_length (ada_exc_info, *exceptions) - skip;
13183   int i, j;
13184
13185   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
13186          compare_ada_exception_info);
13187
13188   for (i = 1, j = 1; i < to_sort_len; i++)
13189     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
13190       to_sort[j++] = to_sort[i];
13191   to_sort_len = j;
13192   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
13193 }
13194
13195 /* Add all exceptions defined by the Ada standard whose name match
13196    a regular expression.
13197
13198    If PREG is not NULL, then this regexp_t object is used to
13199    perform the symbol name matching.  Otherwise, no name-based
13200    filtering is performed.
13201
13202    EXCEPTIONS is a vector of exceptions to which matching exceptions
13203    gets pushed.  */
13204
13205 static void
13206 ada_add_standard_exceptions (compiled_regex *preg,
13207                              VEC(ada_exc_info) **exceptions)
13208 {
13209   int i;
13210
13211   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13212     {
13213       if (preg == NULL
13214           || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
13215         {
13216           struct bound_minimal_symbol msymbol
13217             = ada_lookup_simple_minsym (standard_exc[i]);
13218
13219           if (msymbol.minsym != NULL)
13220             {
13221               struct ada_exc_info info
13222                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
13223
13224               VEC_safe_push (ada_exc_info, *exceptions, &info);
13225             }
13226         }
13227     }
13228 }
13229
13230 /* Add all Ada exceptions defined locally and accessible from the given
13231    FRAME.
13232
13233    If PREG is not NULL, then this regexp_t object is used to
13234    perform the symbol name matching.  Otherwise, no name-based
13235    filtering is performed.
13236
13237    EXCEPTIONS is a vector of exceptions to which matching exceptions
13238    gets pushed.  */
13239
13240 static void
13241 ada_add_exceptions_from_frame (compiled_regex *preg,
13242                                struct frame_info *frame,
13243                                VEC(ada_exc_info) **exceptions)
13244 {
13245   const struct block *block = get_frame_block (frame, 0);
13246
13247   while (block != 0)
13248     {
13249       struct block_iterator iter;
13250       struct symbol *sym;
13251
13252       ALL_BLOCK_SYMBOLS (block, iter, sym)
13253         {
13254           switch (SYMBOL_CLASS (sym))
13255             {
13256             case LOC_TYPEDEF:
13257             case LOC_BLOCK:
13258             case LOC_CONST:
13259               break;
13260             default:
13261               if (ada_is_exception_sym (sym))
13262                 {
13263                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
13264                                               SYMBOL_VALUE_ADDRESS (sym)};
13265
13266                   VEC_safe_push (ada_exc_info, *exceptions, &info);
13267                 }
13268             }
13269         }
13270       if (BLOCK_FUNCTION (block) != NULL)
13271         break;
13272       block = BLOCK_SUPERBLOCK (block);
13273     }
13274 }
13275
13276 /* Return true if NAME matches PREG or if PREG is NULL.  */
13277
13278 static bool
13279 name_matches_regex (const char *name, compiled_regex *preg)
13280 {
13281   return (preg == NULL
13282           || preg->exec (ada_decode (name), 0, NULL, 0) == 0);
13283 }
13284
13285 /* Add all exceptions defined globally whose name name match
13286    a regular expression, excluding standard exceptions.
13287
13288    The reason we exclude standard exceptions is that they need
13289    to be handled separately: Standard exceptions are defined inside
13290    a runtime unit which is normally not compiled with debugging info,
13291    and thus usually do not show up in our symbol search.  However,
13292    if the unit was in fact built with debugging info, we need to
13293    exclude them because they would duplicate the entry we found
13294    during the special loop that specifically searches for those
13295    standard exceptions.
13296
13297    If PREG is not NULL, then this regexp_t object is used to
13298    perform the symbol name matching.  Otherwise, no name-based
13299    filtering is performed.
13300
13301    EXCEPTIONS is a vector of exceptions to which matching exceptions
13302    gets pushed.  */
13303
13304 static void
13305 ada_add_global_exceptions (compiled_regex *preg,
13306                            VEC(ada_exc_info) **exceptions)
13307 {
13308   struct objfile *objfile;
13309   struct compunit_symtab *s;
13310
13311   /* In Ada, the symbol "search name" is a linkage name, whereas the
13312      regular expression used to do the matching refers to the natural
13313      name.  So match against the decoded name.  */
13314   expand_symtabs_matching (NULL,
13315                            [&] (const char *search_name)
13316                            {
13317                              const char *decoded = ada_decode (search_name);
13318                              return name_matches_regex (decoded, preg);
13319                            },
13320                            NULL,
13321                            VARIABLES_DOMAIN);
13322
13323   ALL_COMPUNITS (objfile, s)
13324     {
13325       const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13326       int i;
13327
13328       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13329         {
13330           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13331           struct block_iterator iter;
13332           struct symbol *sym;
13333
13334           ALL_BLOCK_SYMBOLS (b, iter, sym)
13335             if (ada_is_non_standard_exception_sym (sym)
13336                 && name_matches_regex (SYMBOL_NATURAL_NAME (sym), preg))
13337               {
13338                 struct ada_exc_info info
13339                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13340
13341                 VEC_safe_push (ada_exc_info, *exceptions, &info);
13342               }
13343         }
13344     }
13345 }
13346
13347 /* Implements ada_exceptions_list with the regular expression passed
13348    as a regex_t, rather than a string.
13349
13350    If not NULL, PREG is used to filter out exceptions whose names
13351    do not match.  Otherwise, all exceptions are listed.  */
13352
13353 static VEC(ada_exc_info) *
13354 ada_exceptions_list_1 (compiled_regex *preg)
13355 {
13356   VEC(ada_exc_info) *result = NULL;
13357   struct cleanup *old_chain
13358     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13359   int prev_len;
13360
13361   /* First, list the known standard exceptions.  These exceptions
13362      need to be handled separately, as they are usually defined in
13363      runtime units that have been compiled without debugging info.  */
13364
13365   ada_add_standard_exceptions (preg, &result);
13366
13367   /* Next, find all exceptions whose scope is local and accessible
13368      from the currently selected frame.  */
13369
13370   if (has_stack_frames ())
13371     {
13372       prev_len = VEC_length (ada_exc_info, result);
13373       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13374                                      &result);
13375       if (VEC_length (ada_exc_info, result) > prev_len)
13376         sort_remove_dups_ada_exceptions_list (&result, prev_len);
13377     }
13378
13379   /* Add all exceptions whose scope is global.  */
13380
13381   prev_len = VEC_length (ada_exc_info, result);
13382   ada_add_global_exceptions (preg, &result);
13383   if (VEC_length (ada_exc_info, result) > prev_len)
13384     sort_remove_dups_ada_exceptions_list (&result, prev_len);
13385
13386   discard_cleanups (old_chain);
13387   return result;
13388 }
13389
13390 /* Return a vector of ada_exc_info.
13391
13392    If REGEXP is NULL, all exceptions are included in the result.
13393    Otherwise, it should contain a valid regular expression,
13394    and only the exceptions whose names match that regular expression
13395    are included in the result.
13396
13397    The exceptions are sorted in the following order:
13398      - Standard exceptions (defined by the Ada language), in
13399        alphabetical order;
13400      - Exceptions only visible from the current frame, in
13401        alphabetical order;
13402      - Exceptions whose scope is global, in alphabetical order.  */
13403
13404 VEC(ada_exc_info) *
13405 ada_exceptions_list (const char *regexp)
13406 {
13407   if (regexp == NULL)
13408     return ada_exceptions_list_1 (NULL);
13409
13410   compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13411   return ada_exceptions_list_1 (&reg);
13412 }
13413
13414 /* Implement the "info exceptions" command.  */
13415
13416 static void
13417 info_exceptions_command (char *regexp, int from_tty)
13418 {
13419   VEC(ada_exc_info) *exceptions;
13420   struct cleanup *cleanup;
13421   struct gdbarch *gdbarch = get_current_arch ();
13422   int ix;
13423   struct ada_exc_info *info;
13424
13425   exceptions = ada_exceptions_list (regexp);
13426   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13427
13428   if (regexp != NULL)
13429     printf_filtered
13430       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13431   else
13432     printf_filtered (_("All defined Ada exceptions:\n"));
13433
13434   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13435     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13436
13437   do_cleanups (cleanup);
13438 }
13439
13440                                 /* Operators */
13441 /* Information about operators given special treatment in functions
13442    below.  */
13443 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
13444
13445 #define ADA_OPERATORS \
13446     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13447     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13448     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13449     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13450     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13451     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13452     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13453     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13454     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13455     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13456     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13457     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13458     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13459     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13460     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
13461     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13462     OP_DEFN (OP_OTHERS, 1, 1, 0) \
13463     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13464     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
13465
13466 static void
13467 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13468                      int *argsp)
13469 {
13470   switch (exp->elts[pc - 1].opcode)
13471     {
13472     default:
13473       operator_length_standard (exp, pc, oplenp, argsp);
13474       break;
13475
13476 #define OP_DEFN(op, len, args, binop) \
13477     case op: *oplenp = len; *argsp = args; break;
13478       ADA_OPERATORS;
13479 #undef OP_DEFN
13480
13481     case OP_AGGREGATE:
13482       *oplenp = 3;
13483       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13484       break;
13485
13486     case OP_CHOICES:
13487       *oplenp = 3;
13488       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13489       break;
13490     }
13491 }
13492
13493 /* Implementation of the exp_descriptor method operator_check.  */
13494
13495 static int
13496 ada_operator_check (struct expression *exp, int pos,
13497                     int (*objfile_func) (struct objfile *objfile, void *data),
13498                     void *data)
13499 {
13500   const union exp_element *const elts = exp->elts;
13501   struct type *type = NULL;
13502
13503   switch (elts[pos].opcode)
13504     {
13505       case UNOP_IN_RANGE:
13506       case UNOP_QUAL:
13507         type = elts[pos + 1].type;
13508         break;
13509
13510       default:
13511         return operator_check_standard (exp, pos, objfile_func, data);
13512     }
13513
13514   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13515
13516   if (type && TYPE_OBJFILE (type)
13517       && (*objfile_func) (TYPE_OBJFILE (type), data))
13518     return 1;
13519
13520   return 0;
13521 }
13522
13523 static const char *
13524 ada_op_name (enum exp_opcode opcode)
13525 {
13526   switch (opcode)
13527     {
13528     default:
13529       return op_name_standard (opcode);
13530
13531 #define OP_DEFN(op, len, args, binop) case op: return #op;
13532       ADA_OPERATORS;
13533 #undef OP_DEFN
13534
13535     case OP_AGGREGATE:
13536       return "OP_AGGREGATE";
13537     case OP_CHOICES:
13538       return "OP_CHOICES";
13539     case OP_NAME:
13540       return "OP_NAME";
13541     }
13542 }
13543
13544 /* As for operator_length, but assumes PC is pointing at the first
13545    element of the operator, and gives meaningful results only for the 
13546    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13547
13548 static void
13549 ada_forward_operator_length (struct expression *exp, int pc,
13550                              int *oplenp, int *argsp)
13551 {
13552   switch (exp->elts[pc].opcode)
13553     {
13554     default:
13555       *oplenp = *argsp = 0;
13556       break;
13557
13558 #define OP_DEFN(op, len, args, binop) \
13559     case op: *oplenp = len; *argsp = args; break;
13560       ADA_OPERATORS;
13561 #undef OP_DEFN
13562
13563     case OP_AGGREGATE:
13564       *oplenp = 3;
13565       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13566       break;
13567
13568     case OP_CHOICES:
13569       *oplenp = 3;
13570       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13571       break;
13572
13573     case OP_STRING:
13574     case OP_NAME:
13575       {
13576         int len = longest_to_int (exp->elts[pc + 1].longconst);
13577
13578         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13579         *argsp = 0;
13580         break;
13581       }
13582     }
13583 }
13584
13585 static int
13586 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13587 {
13588   enum exp_opcode op = exp->elts[elt].opcode;
13589   int oplen, nargs;
13590   int pc = elt;
13591   int i;
13592
13593   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13594
13595   switch (op)
13596     {
13597       /* Ada attributes ('Foo).  */
13598     case OP_ATR_FIRST:
13599     case OP_ATR_LAST:
13600     case OP_ATR_LENGTH:
13601     case OP_ATR_IMAGE:
13602     case OP_ATR_MAX:
13603     case OP_ATR_MIN:
13604     case OP_ATR_MODULUS:
13605     case OP_ATR_POS:
13606     case OP_ATR_SIZE:
13607     case OP_ATR_TAG:
13608     case OP_ATR_VAL:
13609       break;
13610
13611     case UNOP_IN_RANGE:
13612     case UNOP_QUAL:
13613       /* XXX: gdb_sprint_host_address, type_sprint */
13614       fprintf_filtered (stream, _("Type @"));
13615       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13616       fprintf_filtered (stream, " (");
13617       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13618       fprintf_filtered (stream, ")");
13619       break;
13620     case BINOP_IN_BOUNDS:
13621       fprintf_filtered (stream, " (%d)",
13622                         longest_to_int (exp->elts[pc + 2].longconst));
13623       break;
13624     case TERNOP_IN_RANGE:
13625       break;
13626
13627     case OP_AGGREGATE:
13628     case OP_OTHERS:
13629     case OP_DISCRETE_RANGE:
13630     case OP_POSITIONAL:
13631     case OP_CHOICES:
13632       break;
13633
13634     case OP_NAME:
13635     case OP_STRING:
13636       {
13637         char *name = &exp->elts[elt + 2].string;
13638         int len = longest_to_int (exp->elts[elt + 1].longconst);
13639
13640         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13641         break;
13642       }
13643
13644     default:
13645       return dump_subexp_body_standard (exp, stream, elt);
13646     }
13647
13648   elt += oplen;
13649   for (i = 0; i < nargs; i += 1)
13650     elt = dump_subexp (exp, stream, elt);
13651
13652   return elt;
13653 }
13654
13655 /* The Ada extension of print_subexp (q.v.).  */
13656
13657 static void
13658 ada_print_subexp (struct expression *exp, int *pos,
13659                   struct ui_file *stream, enum precedence prec)
13660 {
13661   int oplen, nargs, i;
13662   int pc = *pos;
13663   enum exp_opcode op = exp->elts[pc].opcode;
13664
13665   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13666
13667   *pos += oplen;
13668   switch (op)
13669     {
13670     default:
13671       *pos -= oplen;
13672       print_subexp_standard (exp, pos, stream, prec);
13673       return;
13674
13675     case OP_VAR_VALUE:
13676       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13677       return;
13678
13679     case BINOP_IN_BOUNDS:
13680       /* XXX: sprint_subexp */
13681       print_subexp (exp, pos, stream, PREC_SUFFIX);
13682       fputs_filtered (" in ", stream);
13683       print_subexp (exp, pos, stream, PREC_SUFFIX);
13684       fputs_filtered ("'range", stream);
13685       if (exp->elts[pc + 1].longconst > 1)
13686         fprintf_filtered (stream, "(%ld)",
13687                           (long) exp->elts[pc + 1].longconst);
13688       return;
13689
13690     case TERNOP_IN_RANGE:
13691       if (prec >= PREC_EQUAL)
13692         fputs_filtered ("(", stream);
13693       /* XXX: sprint_subexp */
13694       print_subexp (exp, pos, stream, PREC_SUFFIX);
13695       fputs_filtered (" in ", stream);
13696       print_subexp (exp, pos, stream, PREC_EQUAL);
13697       fputs_filtered (" .. ", stream);
13698       print_subexp (exp, pos, stream, PREC_EQUAL);
13699       if (prec >= PREC_EQUAL)
13700         fputs_filtered (")", stream);
13701       return;
13702
13703     case OP_ATR_FIRST:
13704     case OP_ATR_LAST:
13705     case OP_ATR_LENGTH:
13706     case OP_ATR_IMAGE:
13707     case OP_ATR_MAX:
13708     case OP_ATR_MIN:
13709     case OP_ATR_MODULUS:
13710     case OP_ATR_POS:
13711     case OP_ATR_SIZE:
13712     case OP_ATR_TAG:
13713     case OP_ATR_VAL:
13714       if (exp->elts[*pos].opcode == OP_TYPE)
13715         {
13716           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13717             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13718                            &type_print_raw_options);
13719           *pos += 3;
13720         }
13721       else
13722         print_subexp (exp, pos, stream, PREC_SUFFIX);
13723       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13724       if (nargs > 1)
13725         {
13726           int tem;
13727
13728           for (tem = 1; tem < nargs; tem += 1)
13729             {
13730               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13731               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13732             }
13733           fputs_filtered (")", stream);
13734         }
13735       return;
13736
13737     case UNOP_QUAL:
13738       type_print (exp->elts[pc + 1].type, "", stream, 0);
13739       fputs_filtered ("'(", stream);
13740       print_subexp (exp, pos, stream, PREC_PREFIX);
13741       fputs_filtered (")", stream);
13742       return;
13743
13744     case UNOP_IN_RANGE:
13745       /* XXX: sprint_subexp */
13746       print_subexp (exp, pos, stream, PREC_SUFFIX);
13747       fputs_filtered (" in ", stream);
13748       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13749                      &type_print_raw_options);
13750       return;
13751
13752     case OP_DISCRETE_RANGE:
13753       print_subexp (exp, pos, stream, PREC_SUFFIX);
13754       fputs_filtered ("..", stream);
13755       print_subexp (exp, pos, stream, PREC_SUFFIX);
13756       return;
13757
13758     case OP_OTHERS:
13759       fputs_filtered ("others => ", stream);
13760       print_subexp (exp, pos, stream, PREC_SUFFIX);
13761       return;
13762
13763     case OP_CHOICES:
13764       for (i = 0; i < nargs-1; i += 1)
13765         {
13766           if (i > 0)
13767             fputs_filtered ("|", stream);
13768           print_subexp (exp, pos, stream, PREC_SUFFIX);
13769         }
13770       fputs_filtered (" => ", stream);
13771       print_subexp (exp, pos, stream, PREC_SUFFIX);
13772       return;
13773       
13774     case OP_POSITIONAL:
13775       print_subexp (exp, pos, stream, PREC_SUFFIX);
13776       return;
13777
13778     case OP_AGGREGATE:
13779       fputs_filtered ("(", stream);
13780       for (i = 0; i < nargs; i += 1)
13781         {
13782           if (i > 0)
13783             fputs_filtered (", ", stream);
13784           print_subexp (exp, pos, stream, PREC_SUFFIX);
13785         }
13786       fputs_filtered (")", stream);
13787       return;
13788     }
13789 }
13790
13791 /* Table mapping opcodes into strings for printing operators
13792    and precedences of the operators.  */
13793
13794 static const struct op_print ada_op_print_tab[] = {
13795   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13796   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13797   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13798   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13799   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13800   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13801   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13802   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13803   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13804   {">=", BINOP_GEQ, PREC_ORDER, 0},
13805   {">", BINOP_GTR, PREC_ORDER, 0},
13806   {"<", BINOP_LESS, PREC_ORDER, 0},
13807   {">>", BINOP_RSH, PREC_SHIFT, 0},
13808   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13809   {"+", BINOP_ADD, PREC_ADD, 0},
13810   {"-", BINOP_SUB, PREC_ADD, 0},
13811   {"&", BINOP_CONCAT, PREC_ADD, 0},
13812   {"*", BINOP_MUL, PREC_MUL, 0},
13813   {"/", BINOP_DIV, PREC_MUL, 0},
13814   {"rem", BINOP_REM, PREC_MUL, 0},
13815   {"mod", BINOP_MOD, PREC_MUL, 0},
13816   {"**", BINOP_EXP, PREC_REPEAT, 0},
13817   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13818   {"-", UNOP_NEG, PREC_PREFIX, 0},
13819   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13820   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13821   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13822   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13823   {".all", UNOP_IND, PREC_SUFFIX, 1},
13824   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13825   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13826   {NULL, OP_NULL, PREC_SUFFIX, 0}
13827 };
13828 \f
13829 enum ada_primitive_types {
13830   ada_primitive_type_int,
13831   ada_primitive_type_long,
13832   ada_primitive_type_short,
13833   ada_primitive_type_char,
13834   ada_primitive_type_float,
13835   ada_primitive_type_double,
13836   ada_primitive_type_void,
13837   ada_primitive_type_long_long,
13838   ada_primitive_type_long_double,
13839   ada_primitive_type_natural,
13840   ada_primitive_type_positive,
13841   ada_primitive_type_system_address,
13842   nr_ada_primitive_types
13843 };
13844
13845 static void
13846 ada_language_arch_info (struct gdbarch *gdbarch,
13847                         struct language_arch_info *lai)
13848 {
13849   const struct builtin_type *builtin = builtin_type (gdbarch);
13850
13851   lai->primitive_type_vector
13852     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13853                               struct type *);
13854
13855   lai->primitive_type_vector [ada_primitive_type_int]
13856     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13857                          0, "integer");
13858   lai->primitive_type_vector [ada_primitive_type_long]
13859     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13860                          0, "long_integer");
13861   lai->primitive_type_vector [ada_primitive_type_short]
13862     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13863                          0, "short_integer");
13864   lai->string_char_type
13865     = lai->primitive_type_vector [ada_primitive_type_char]
13866     = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13867   lai->primitive_type_vector [ada_primitive_type_float]
13868     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13869                        "float", gdbarch_float_format (gdbarch));
13870   lai->primitive_type_vector [ada_primitive_type_double]
13871     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13872                        "long_float", gdbarch_double_format (gdbarch));
13873   lai->primitive_type_vector [ada_primitive_type_long_long]
13874     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13875                          0, "long_long_integer");
13876   lai->primitive_type_vector [ada_primitive_type_long_double]
13877     = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
13878                        "long_long_float", gdbarch_long_double_format (gdbarch));
13879   lai->primitive_type_vector [ada_primitive_type_natural]
13880     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13881                          0, "natural");
13882   lai->primitive_type_vector [ada_primitive_type_positive]
13883     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13884                          0, "positive");
13885   lai->primitive_type_vector [ada_primitive_type_void]
13886     = builtin->builtin_void;
13887
13888   lai->primitive_type_vector [ada_primitive_type_system_address]
13889     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13890   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13891     = "system__address";
13892
13893   lai->bool_type_symbol = NULL;
13894   lai->bool_type_default = builtin->builtin_bool;
13895 }
13896 \f
13897                                 /* Language vector */
13898
13899 /* Not really used, but needed in the ada_language_defn.  */
13900
13901 static void
13902 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13903 {
13904   ada_emit_char (c, type, stream, quoter, 1);
13905 }
13906
13907 static int
13908 parse (struct parser_state *ps)
13909 {
13910   warnings_issued = 0;
13911   return ada_parse (ps);
13912 }
13913
13914 static const struct exp_descriptor ada_exp_descriptor = {
13915   ada_print_subexp,
13916   ada_operator_length,
13917   ada_operator_check,
13918   ada_op_name,
13919   ada_dump_subexp_body,
13920   ada_evaluate_subexp
13921 };
13922
13923 /* Implement the "la_get_symbol_name_cmp" language_defn method
13924    for Ada.  */
13925
13926 static symbol_name_cmp_ftype
13927 ada_get_symbol_name_cmp (const char *lookup_name)
13928 {
13929   if (should_use_wild_match (lookup_name))
13930     return wild_match;
13931   else
13932     return compare_names;
13933 }
13934
13935 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13936
13937 static struct value *
13938 ada_read_var_value (struct symbol *var, const struct block *var_block,
13939                     struct frame_info *frame)
13940 {
13941   const struct block *frame_block = NULL;
13942   struct symbol *renaming_sym = NULL;
13943
13944   /* The only case where default_read_var_value is not sufficient
13945      is when VAR is a renaming...  */
13946   if (frame)
13947     frame_block = get_frame_block (frame, NULL);
13948   if (frame_block)
13949     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13950   if (renaming_sym != NULL)
13951     return ada_read_renaming_var_value (renaming_sym, frame_block);
13952
13953   /* This is a typical case where we expect the default_read_var_value
13954      function to work.  */
13955   return default_read_var_value (var, var_block, frame);
13956 }
13957
13958 static const char *ada_extensions[] =
13959 {
13960   ".adb", ".ads", ".a", ".ada", ".dg", NULL
13961 };
13962
13963 extern const struct language_defn ada_language_defn = {
13964   "ada",                        /* Language name */
13965   "Ada",
13966   language_ada,
13967   range_check_off,
13968   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13969                                    that's not quite what this means.  */
13970   array_row_major,
13971   macro_expansion_no,
13972   ada_extensions,
13973   &ada_exp_descriptor,
13974   parse,
13975   ada_yyerror,
13976   resolve,
13977   ada_printchar,                /* Print a character constant */
13978   ada_printstr,                 /* Function to print string constant */
13979   emit_char,                    /* Function to print single char (not used) */
13980   ada_print_type,               /* Print a type using appropriate syntax */
13981   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13982   ada_val_print,                /* Print a value using appropriate syntax */
13983   ada_value_print,              /* Print a top-level value */
13984   ada_read_var_value,           /* la_read_var_value */
13985   NULL,                         /* Language specific skip_trampoline */
13986   NULL,                         /* name_of_this */
13987   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13988   basic_lookup_transparent_type,        /* lookup_transparent_type */
13989   ada_la_decode,                /* Language specific symbol demangler */
13990   ada_sniff_from_mangled_name,
13991   NULL,                         /* Language specific
13992                                    class_name_from_physname */
13993   ada_op_print_tab,             /* expression operators for printing */
13994   0,                            /* c-style arrays */
13995   1,                            /* String lower bound */
13996   ada_get_gdb_completer_word_break_characters,
13997   ada_collect_symbol_completion_matches,
13998   ada_language_arch_info,
13999   ada_print_array_index,
14000   default_pass_by_reference,
14001   c_get_string,
14002   c_watch_location_expression,
14003   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
14004   ada_iterate_over_symbols,
14005   &ada_varobj_ops,
14006   NULL,
14007   NULL,
14008   LANG_MAGIC
14009 };
14010
14011 /* Provide a prototype to silence -Wmissing-prototypes.  */
14012 extern initialize_file_ftype _initialize_ada_language;
14013
14014 /* Command-list for the "set/show ada" prefix command.  */
14015 static struct cmd_list_element *set_ada_list;
14016 static struct cmd_list_element *show_ada_list;
14017
14018 /* Implement the "set ada" prefix command.  */
14019
14020 static void
14021 set_ada_command (char *arg, int from_tty)
14022 {
14023   printf_unfiltered (_(\
14024 "\"set ada\" must be followed by the name of a setting.\n"));
14025   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
14026 }
14027
14028 /* Implement the "show ada" prefix command.  */
14029
14030 static void
14031 show_ada_command (char *args, int from_tty)
14032 {
14033   cmd_show_list (show_ada_list, from_tty, "");
14034 }
14035
14036 static void
14037 initialize_ada_catchpoint_ops (void)
14038 {
14039   struct breakpoint_ops *ops;
14040
14041   initialize_breakpoint_ops ();
14042
14043   ops = &catch_exception_breakpoint_ops;
14044   *ops = bkpt_breakpoint_ops;
14045   ops->allocate_location = allocate_location_catch_exception;
14046   ops->re_set = re_set_catch_exception;
14047   ops->check_status = check_status_catch_exception;
14048   ops->print_it = print_it_catch_exception;
14049   ops->print_one = print_one_catch_exception;
14050   ops->print_mention = print_mention_catch_exception;
14051   ops->print_recreate = print_recreate_catch_exception;
14052
14053   ops = &catch_exception_unhandled_breakpoint_ops;
14054   *ops = bkpt_breakpoint_ops;
14055   ops->allocate_location = allocate_location_catch_exception_unhandled;
14056   ops->re_set = re_set_catch_exception_unhandled;
14057   ops->check_status = check_status_catch_exception_unhandled;
14058   ops->print_it = print_it_catch_exception_unhandled;
14059   ops->print_one = print_one_catch_exception_unhandled;
14060   ops->print_mention = print_mention_catch_exception_unhandled;
14061   ops->print_recreate = print_recreate_catch_exception_unhandled;
14062
14063   ops = &catch_assert_breakpoint_ops;
14064   *ops = bkpt_breakpoint_ops;
14065   ops->allocate_location = allocate_location_catch_assert;
14066   ops->re_set = re_set_catch_assert;
14067   ops->check_status = check_status_catch_assert;
14068   ops->print_it = print_it_catch_assert;
14069   ops->print_one = print_one_catch_assert;
14070   ops->print_mention = print_mention_catch_assert;
14071   ops->print_recreate = print_recreate_catch_assert;
14072 }
14073
14074 /* This module's 'new_objfile' observer.  */
14075
14076 static void
14077 ada_new_objfile_observer (struct objfile *objfile)
14078 {
14079   ada_clear_symbol_cache ();
14080 }
14081
14082 /* This module's 'free_objfile' observer.  */
14083
14084 static void
14085 ada_free_objfile_observer (struct objfile *objfile)
14086 {
14087   ada_clear_symbol_cache ();
14088 }
14089
14090 void
14091 _initialize_ada_language (void)
14092 {
14093   initialize_ada_catchpoint_ops ();
14094
14095   add_prefix_cmd ("ada", no_class, set_ada_command,
14096                   _("Prefix command for changing Ada-specfic settings"),
14097                   &set_ada_list, "set ada ", 0, &setlist);
14098
14099   add_prefix_cmd ("ada", no_class, show_ada_command,
14100                   _("Generic command for showing Ada-specific settings."),
14101                   &show_ada_list, "show ada ", 0, &showlist);
14102
14103   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14104                            &trust_pad_over_xvs, _("\
14105 Enable or disable an optimization trusting PAD types over XVS types"), _("\
14106 Show whether an optimization trusting PAD types over XVS types is activated"),
14107                            _("\
14108 This is related to the encoding used by the GNAT compiler.  The debugger\n\
14109 should normally trust the contents of PAD types, but certain older versions\n\
14110 of GNAT have a bug that sometimes causes the information in the PAD type\n\
14111 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
14112 work around this bug.  It is always safe to turn this option \"off\", but\n\
14113 this incurs a slight performance penalty, so it is recommended to NOT change\n\
14114 this option to \"off\" unless necessary."),
14115                             NULL, NULL, &set_ada_list, &show_ada_list);
14116
14117   add_setshow_boolean_cmd ("print-signatures", class_vars,
14118                            &print_signatures, _("\
14119 Enable or disable the output of formal and return types for functions in the \
14120 overloads selection menu"), _("\
14121 Show whether the output of formal and return types for functions in the \
14122 overloads selection menu is activated"),
14123                            NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14124
14125   add_catch_command ("exception", _("\
14126 Catch Ada exceptions, when raised.\n\
14127 With an argument, catch only exceptions with the given name."),
14128                      catch_ada_exception_command,
14129                      NULL,
14130                      CATCH_PERMANENT,
14131                      CATCH_TEMPORARY);
14132   add_catch_command ("assert", _("\
14133 Catch failed Ada assertions, when raised.\n\
14134 With an argument, catch only exceptions with the given name."),
14135                      catch_assert_command,
14136                      NULL,
14137                      CATCH_PERMANENT,
14138                      CATCH_TEMPORARY);
14139
14140   varsize_limit = 65536;
14141
14142   add_info ("exceptions", info_exceptions_command,
14143             _("\
14144 List all Ada exception names.\n\
14145 If a regular expression is passed as an argument, only those matching\n\
14146 the regular expression are listed."));
14147
14148   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
14149                   _("Set Ada maintenance-related variables."),
14150                   &maint_set_ada_cmdlist, "maintenance set ada ",
14151                   0/*allow-unknown*/, &maintenance_set_cmdlist);
14152
14153   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
14154                   _("Show Ada maintenance-related variables"),
14155                   &maint_show_ada_cmdlist, "maintenance show ada ",
14156                   0/*allow-unknown*/, &maintenance_show_cmdlist);
14157
14158   add_setshow_boolean_cmd
14159     ("ignore-descriptive-types", class_maintenance,
14160      &ada_ignore_descriptive_types_p,
14161      _("Set whether descriptive types generated by GNAT should be ignored."),
14162      _("Show whether descriptive types generated by GNAT should be ignored."),
14163      _("\
14164 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14165 DWARF attribute."),
14166      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14167
14168   obstack_init (&symbol_list_obstack);
14169
14170   decoded_names_store = htab_create_alloc
14171     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
14172      NULL, xcalloc, xfree);
14173
14174   /* The ada-lang observers.  */
14175   observer_attach_new_objfile (ada_new_objfile_observer);
14176   observer_attach_free_objfile (ada_free_objfile_observer);
14177   observer_attach_inferior_exit (ada_inferior_exit);
14178
14179   /* Setup various context-specific data.  */
14180   ada_inferior_data
14181     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
14182   ada_pspace_data_handle
14183     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14184 }