Add NaCl (NativeClient) specific classes Target_mips_nacl and
[external/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3    Copyright (C) 1992-2014 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20
21 #include "defs.h"
22 #include <ctype.h>
23 #include "demangle.h"
24 #include "gdb_regex.h"
25 #include "frame.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "gdbcmd.h"
29 #include "expression.h"
30 #include "parser-defs.h"
31 #include "language.h"
32 #include "varobj.h"
33 #include "c-lang.h"
34 #include "inferior.h"
35 #include "symfile.h"
36 #include "objfiles.h"
37 #include "breakpoint.h"
38 #include "gdbcore.h"
39 #include "hashtab.h"
40 #include "gdb_obstack.h"
41 #include "ada-lang.h"
42 #include "completer.h"
43 #include <sys/stat.h>
44 #include "ui-out.h"
45 #include "block.h"
46 #include "infcall.h"
47 #include "dictionary.h"
48 #include "exceptions.h"
49 #include "annotate.h"
50 #include "valprint.h"
51 #include "source.h"
52 #include "observer.h"
53 #include "vec.h"
54 #include "stack.h"
55 #include "gdb_vecs.h"
56 #include "typeprint.h"
57
58 #include "psymtab.h"
59 #include "value.h"
60 #include "mi/mi-common.h"
61 #include "arch-utils.h"
62 #include "cli/cli-utils.h"
63
64 /* Define whether or not the C operator '/' truncates towards zero for
65    differently signed operands (truncation direction is undefined in C).
66    Copied from valarith.c.  */
67
68 #ifndef TRUNCATION_TOWARDS_ZERO
69 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
70 #endif
71
72 static struct type *desc_base_type (struct type *);
73
74 static struct type *desc_bounds_type (struct type *);
75
76 static struct value *desc_bounds (struct value *);
77
78 static int fat_pntr_bounds_bitpos (struct type *);
79
80 static int fat_pntr_bounds_bitsize (struct type *);
81
82 static struct type *desc_data_target_type (struct type *);
83
84 static struct value *desc_data (struct value *);
85
86 static int fat_pntr_data_bitpos (struct type *);
87
88 static int fat_pntr_data_bitsize (struct type *);
89
90 static struct value *desc_one_bound (struct value *, int, int);
91
92 static int desc_bound_bitpos (struct type *, int, int);
93
94 static int desc_bound_bitsize (struct type *, int, int);
95
96 static struct type *desc_index_type (struct type *, int);
97
98 static int desc_arity (struct type *);
99
100 static int ada_type_match (struct type *, struct type *, int);
101
102 static int ada_args_match (struct symbol *, struct value **, int);
103
104 static int full_match (const char *, const char *);
105
106 static struct value *make_array_descriptor (struct type *, struct value *);
107
108 static void ada_add_block_symbols (struct obstack *,
109                                    const struct block *, const char *,
110                                    domain_enum, struct objfile *, int);
111
112 static int is_nonfunction (struct ada_symbol_info *, int);
113
114 static void add_defn_to_vec (struct obstack *, struct symbol *,
115                              const struct block *);
116
117 static int num_defns_collected (struct obstack *);
118
119 static struct ada_symbol_info *defns_collected (struct obstack *, int);
120
121 static struct value *resolve_subexp (struct expression **, int *, int,
122                                      struct type *);
123
124 static void replace_operator_with_call (struct expression **, int, int, int,
125                                         struct symbol *, const struct block *);
126
127 static int possible_user_operator_p (enum exp_opcode, struct value **);
128
129 static char *ada_op_name (enum exp_opcode);
130
131 static const char *ada_decoded_op_name (enum exp_opcode);
132
133 static int numeric_type_p (struct type *);
134
135 static int integer_type_p (struct type *);
136
137 static int scalar_type_p (struct type *);
138
139 static int discrete_type_p (struct type *);
140
141 static enum ada_renaming_category parse_old_style_renaming (struct type *,
142                                                             const char **,
143                                                             int *,
144                                                             const char **);
145
146 static struct symbol *find_old_style_renaming_symbol (const char *,
147                                                       const struct block *);
148
149 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
150                                                 int, int, int *);
151
152 static struct value *evaluate_subexp_type (struct expression *, int *);
153
154 static struct type *ada_find_parallel_type_with_name (struct type *,
155                                                       const char *);
156
157 static int is_dynamic_field (struct type *, int);
158
159 static struct type *to_fixed_variant_branch_type (struct type *,
160                                                   const gdb_byte *,
161                                                   CORE_ADDR, struct value *);
162
163 static struct type *to_fixed_array_type (struct type *, struct value *, int);
164
165 static struct type *to_fixed_range_type (struct type *, struct value *);
166
167 static struct type *to_static_fixed_type (struct type *);
168 static struct type *static_unwrap_type (struct type *type);
169
170 static struct value *unwrap_value (struct value *);
171
172 static struct type *constrained_packed_array_type (struct type *, long *);
173
174 static struct type *decode_constrained_packed_array_type (struct type *);
175
176 static long decode_packed_array_bitsize (struct type *);
177
178 static struct value *decode_constrained_packed_array (struct value *);
179
180 static int ada_is_packed_array_type  (struct type *);
181
182 static int ada_is_unconstrained_packed_array_type (struct type *);
183
184 static struct value *value_subscript_packed (struct value *, int,
185                                              struct value **);
186
187 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
188
189 static struct value *coerce_unspec_val_to_type (struct value *,
190                                                 struct type *);
191
192 static struct value *get_var_value (char *, char *);
193
194 static int lesseq_defined_than (struct symbol *, struct symbol *);
195
196 static int equiv_types (struct type *, struct type *);
197
198 static int is_name_suffix (const char *);
199
200 static int advance_wild_match (const char **, const char *, int);
201
202 static int wild_match (const char *, const char *);
203
204 static struct value *ada_coerce_ref (struct value *);
205
206 static LONGEST pos_atr (struct value *);
207
208 static struct value *value_pos_atr (struct type *, struct value *);
209
210 static struct value *value_val_atr (struct type *, struct value *);
211
212 static struct symbol *standard_lookup (const char *, const struct block *,
213                                        domain_enum);
214
215 static struct value *ada_search_struct_field (char *, struct value *, int,
216                                               struct type *);
217
218 static struct value *ada_value_primitive_field (struct value *, int, int,
219                                                 struct type *);
220
221 static int find_struct_field (const char *, struct type *, int,
222                               struct type **, int *, int *, int *, int *);
223
224 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
225                                                 struct value *);
226
227 static int ada_resolve_function (struct ada_symbol_info *, int,
228                                  struct value **, int, const char *,
229                                  struct type *);
230
231 static int ada_is_direct_array_type (struct type *);
232
233 static void ada_language_arch_info (struct gdbarch *,
234                                     struct language_arch_info *);
235
236 static void check_size (const struct type *);
237
238 static struct value *ada_index_struct_field (int, struct value *, int,
239                                              struct type *);
240
241 static struct value *assign_aggregate (struct value *, struct value *, 
242                                        struct expression *,
243                                        int *, enum noside);
244
245 static void aggregate_assign_from_choices (struct value *, struct value *, 
246                                            struct expression *,
247                                            int *, LONGEST *, int *,
248                                            int, LONGEST, LONGEST);
249
250 static void aggregate_assign_positional (struct value *, struct value *,
251                                          struct expression *,
252                                          int *, LONGEST *, int *, int,
253                                          LONGEST, LONGEST);
254
255
256 static void aggregate_assign_others (struct value *, struct value *,
257                                      struct expression *,
258                                      int *, LONGEST *, int, LONGEST, LONGEST);
259
260
261 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
262
263
264 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
265                                           int *, enum noside);
266
267 static void ada_forward_operator_length (struct expression *, int, int *,
268                                          int *);
269
270 static struct type *ada_find_any_type (const char *name);
271 \f
272
273 /* The result of a symbol lookup to be stored in our symbol cache.  */
274
275 struct cache_entry
276 {
277   /* The name used to perform the lookup.  */
278   const char *name;
279   /* The namespace used during the lookup.  */
280   domain_enum namespace;
281   /* The symbol returned by the lookup, or NULL if no matching symbol
282      was found.  */
283   struct symbol *sym;
284   /* The block where the symbol was found, or NULL if no matching
285      symbol was found.  */
286   const struct block *block;
287   /* A pointer to the next entry with the same hash.  */
288   struct cache_entry *next;
289 };
290
291 /* The Ada symbol cache, used to store the result of Ada-mode symbol
292    lookups in the course of executing the user's commands.
293
294    The cache is implemented using a simple, fixed-sized hash.
295    The size is fixed on the grounds that there are not likely to be
296    all that many symbols looked up during any given session, regardless
297    of the size of the symbol table.  If we decide to go to a resizable
298    table, let's just use the stuff from libiberty instead.  */
299
300 #define HASH_SIZE 1009
301
302 struct ada_symbol_cache
303 {
304   /* An obstack used to store the entries in our cache.  */
305   struct obstack cache_space;
306
307   /* The root of the hash table used to implement our symbol cache.  */
308   struct cache_entry *root[HASH_SIZE];
309 };
310
311 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
312
313 /* Maximum-sized dynamic type.  */
314 static unsigned int varsize_limit;
315
316 /* FIXME: brobecker/2003-09-17: No longer a const because it is
317    returned by a function that does not return a const char *.  */
318 static char *ada_completer_word_break_characters =
319 #ifdef VMS
320   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
321 #else
322   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
323 #endif
324
325 /* The name of the symbol to use to get the name of the main subprogram.  */
326 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
327   = "__gnat_ada_main_program_name";
328
329 /* Limit on the number of warnings to raise per expression evaluation.  */
330 static int warning_limit = 2;
331
332 /* Number of warning messages issued; reset to 0 by cleanups after
333    expression evaluation.  */
334 static int warnings_issued = 0;
335
336 static const char *known_runtime_file_name_patterns[] = {
337   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
338 };
339
340 static const char *known_auxiliary_function_name_patterns[] = {
341   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
342 };
343
344 /* Space for allocating results of ada_lookup_symbol_list.  */
345 static struct obstack symbol_list_obstack;
346
347 /* Maintenance-related settings for this module.  */
348
349 static struct cmd_list_element *maint_set_ada_cmdlist;
350 static struct cmd_list_element *maint_show_ada_cmdlist;
351
352 /* Implement the "maintenance set ada" (prefix) command.  */
353
354 static void
355 maint_set_ada_cmd (char *args, int from_tty)
356 {
357   help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
358              gdb_stdout);
359 }
360
361 /* Implement the "maintenance show ada" (prefix) command.  */
362
363 static void
364 maint_show_ada_cmd (char *args, int from_tty)
365 {
366   cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
367 }
368
369 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
370
371 static int ada_ignore_descriptive_types_p = 0;
372
373                         /* Inferior-specific data.  */
374
375 /* Per-inferior data for this module.  */
376
377 struct ada_inferior_data
378 {
379   /* The ada__tags__type_specific_data type, which is used when decoding
380      tagged types.  With older versions of GNAT, this type was directly
381      accessible through a component ("tsd") in the object tag.  But this
382      is no longer the case, so we cache it for each inferior.  */
383   struct type *tsd_type;
384
385   /* The exception_support_info data.  This data is used to determine
386      how to implement support for Ada exception catchpoints in a given
387      inferior.  */
388   const struct exception_support_info *exception_info;
389 };
390
391 /* Our key to this module's inferior data.  */
392 static const struct inferior_data *ada_inferior_data;
393
394 /* A cleanup routine for our inferior data.  */
395 static void
396 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
397 {
398   struct ada_inferior_data *data;
399
400   data = inferior_data (inf, ada_inferior_data);
401   if (data != NULL)
402     xfree (data);
403 }
404
405 /* Return our inferior data for the given inferior (INF).
406
407    This function always returns a valid pointer to an allocated
408    ada_inferior_data structure.  If INF's inferior data has not
409    been previously set, this functions creates a new one with all
410    fields set to zero, sets INF's inferior to it, and then returns
411    a pointer to that newly allocated ada_inferior_data.  */
412
413 static struct ada_inferior_data *
414 get_ada_inferior_data (struct inferior *inf)
415 {
416   struct ada_inferior_data *data;
417
418   data = inferior_data (inf, ada_inferior_data);
419   if (data == NULL)
420     {
421       data = XCNEW (struct ada_inferior_data);
422       set_inferior_data (inf, ada_inferior_data, data);
423     }
424
425   return data;
426 }
427
428 /* Perform all necessary cleanups regarding our module's inferior data
429    that is required after the inferior INF just exited.  */
430
431 static void
432 ada_inferior_exit (struct inferior *inf)
433 {
434   ada_inferior_data_cleanup (inf, NULL);
435   set_inferior_data (inf, ada_inferior_data, NULL);
436 }
437
438
439                         /* program-space-specific data.  */
440
441 /* This module's per-program-space data.  */
442 struct ada_pspace_data
443 {
444   /* The Ada symbol cache.  */
445   struct ada_symbol_cache *sym_cache;
446 };
447
448 /* Key to our per-program-space data.  */
449 static const struct program_space_data *ada_pspace_data_handle;
450
451 /* Return this module's data for the given program space (PSPACE).
452    If not is found, add a zero'ed one now.
453
454    This function always returns a valid object.  */
455
456 static struct ada_pspace_data *
457 get_ada_pspace_data (struct program_space *pspace)
458 {
459   struct ada_pspace_data *data;
460
461   data = 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 = 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 = strrchr (decoded_name, '.');
528
529   if (result != NULL)
530     result++;                   /* Skip the dot...  */
531   else
532     result = decoded_name;
533
534   return result;
535 }
536
537 /* Return a string starting with '<', followed by STR, and '>'.
538    The result is good until the next call.  */
539
540 static char *
541 add_angle_brackets (const char *str)
542 {
543   static char *result = NULL;
544
545   xfree (result);
546   result = xstrprintf ("<%s>", str);
547   return result;
548 }
549
550 static char *
551 ada_get_gdb_completer_word_break_characters (void)
552 {
553   return ada_completer_word_break_characters;
554 }
555
556 /* Print an array element index using the Ada syntax.  */
557
558 static void
559 ada_print_array_index (struct value *index_value, struct ui_file *stream,
560                        const struct value_print_options *options)
561 {
562   LA_VALUE_PRINT (index_value, stream, options);
563   fprintf_filtered (stream, " => ");
564 }
565
566 /* Assuming VECT points to an array of *SIZE objects of size
567    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
568    updating *SIZE as necessary and returning the (new) array.  */
569
570 void *
571 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
572 {
573   if (*size < min_size)
574     {
575       *size *= 2;
576       if (*size < min_size)
577         *size = min_size;
578       vect = xrealloc (vect, *size * element_size);
579     }
580   return vect;
581 }
582
583 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
584    suffix of FIELD_NAME beginning "___".  */
585
586 static int
587 field_name_match (const char *field_name, const char *target)
588 {
589   int len = strlen (target);
590
591   return
592     (strncmp (field_name, target, len) == 0
593      && (field_name[len] == '\0'
594          || (strncmp (field_name + len, "___", 3) == 0
595              && strcmp (field_name + strlen (field_name) - 6,
596                         "___XVN") != 0)));
597 }
598
599
600 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
601    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
602    and return its index.  This function also handles fields whose name
603    have ___ suffixes because the compiler sometimes alters their name
604    by adding such a suffix to represent fields with certain constraints.
605    If the field could not be found, return a negative number if
606    MAYBE_MISSING is set.  Otherwise raise an error.  */
607
608 int
609 ada_get_field_index (const struct type *type, const char *field_name,
610                      int maybe_missing)
611 {
612   int fieldno;
613   struct type *struct_type = check_typedef ((struct type *) type);
614
615   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
616     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
617       return fieldno;
618
619   if (!maybe_missing)
620     error (_("Unable to find field %s in struct %s.  Aborting"),
621            field_name, TYPE_NAME (struct_type));
622
623   return -1;
624 }
625
626 /* The length of the prefix of NAME prior to any "___" suffix.  */
627
628 int
629 ada_name_prefix_len (const char *name)
630 {
631   if (name == NULL)
632     return 0;
633   else
634     {
635       const char *p = strstr (name, "___");
636
637       if (p == NULL)
638         return strlen (name);
639       else
640         return p - name;
641     }
642 }
643
644 /* Return non-zero if SUFFIX is a suffix of STR.
645    Return zero if STR is null.  */
646
647 static int
648 is_suffix (const char *str, const char *suffix)
649 {
650   int len1, len2;
651
652   if (str == NULL)
653     return 0;
654   len1 = strlen (str);
655   len2 = strlen (suffix);
656   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
657 }
658
659 /* The contents of value VAL, treated as a value of type TYPE.  The
660    result is an lval in memory if VAL is.  */
661
662 static struct value *
663 coerce_unspec_val_to_type (struct value *val, struct type *type)
664 {
665   type = ada_check_typedef (type);
666   if (value_type (val) == type)
667     return val;
668   else
669     {
670       struct value *result;
671
672       /* Make sure that the object size is not unreasonable before
673          trying to allocate some memory for it.  */
674       check_size (type);
675
676       if (value_lazy (val)
677           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
678         result = allocate_value_lazy (type);
679       else
680         {
681           result = allocate_value (type);
682           value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
683         }
684       set_value_component_location (result, val);
685       set_value_bitsize (result, value_bitsize (val));
686       set_value_bitpos (result, value_bitpos (val));
687       set_value_address (result, value_address (val));
688       return result;
689     }
690 }
691
692 static const gdb_byte *
693 cond_offset_host (const gdb_byte *valaddr, long offset)
694 {
695   if (valaddr == NULL)
696     return NULL;
697   else
698     return valaddr + offset;
699 }
700
701 static CORE_ADDR
702 cond_offset_target (CORE_ADDR address, long offset)
703 {
704   if (address == 0)
705     return 0;
706   else
707     return address + offset;
708 }
709
710 /* Issue a warning (as for the definition of warning in utils.c, but
711    with exactly one argument rather than ...), unless the limit on the
712    number of warnings has passed during the evaluation of the current
713    expression.  */
714
715 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
716    provided by "complaint".  */
717 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
718
719 static void
720 lim_warning (const char *format, ...)
721 {
722   va_list args;
723
724   va_start (args, format);
725   warnings_issued += 1;
726   if (warnings_issued <= warning_limit)
727     vwarning (format, args);
728
729   va_end (args);
730 }
731
732 /* Issue an error if the size of an object of type T is unreasonable,
733    i.e. if it would be a bad idea to allocate a value of this type in
734    GDB.  */
735
736 static void
737 check_size (const struct type *type)
738 {
739   if (TYPE_LENGTH (type) > varsize_limit)
740     error (_("object size is larger than varsize-limit"));
741 }
742
743 /* Maximum value of a SIZE-byte signed integer type.  */
744 static LONGEST
745 max_of_size (int size)
746 {
747   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
748
749   return top_bit | (top_bit - 1);
750 }
751
752 /* Minimum value of a SIZE-byte signed integer type.  */
753 static LONGEST
754 min_of_size (int size)
755 {
756   return -max_of_size (size) - 1;
757 }
758
759 /* Maximum value of a SIZE-byte unsigned integer type.  */
760 static ULONGEST
761 umax_of_size (int size)
762 {
763   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
764
765   return top_bit | (top_bit - 1);
766 }
767
768 /* Maximum value of integral type T, as a signed quantity.  */
769 static LONGEST
770 max_of_type (struct type *t)
771 {
772   if (TYPE_UNSIGNED (t))
773     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
774   else
775     return max_of_size (TYPE_LENGTH (t));
776 }
777
778 /* Minimum value of integral type T, as a signed quantity.  */
779 static LONGEST
780 min_of_type (struct type *t)
781 {
782   if (TYPE_UNSIGNED (t)) 
783     return 0;
784   else
785     return min_of_size (TYPE_LENGTH (t));
786 }
787
788 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
789 LONGEST
790 ada_discrete_type_high_bound (struct type *type)
791 {
792   type = resolve_dynamic_type (type, 0);
793   switch (TYPE_CODE (type))
794     {
795     case TYPE_CODE_RANGE:
796       return TYPE_HIGH_BOUND (type);
797     case TYPE_CODE_ENUM:
798       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
799     case TYPE_CODE_BOOL:
800       return 1;
801     case TYPE_CODE_CHAR:
802     case TYPE_CODE_INT:
803       return max_of_type (type);
804     default:
805       error (_("Unexpected type in ada_discrete_type_high_bound."));
806     }
807 }
808
809 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
810 LONGEST
811 ada_discrete_type_low_bound (struct type *type)
812 {
813   type = resolve_dynamic_type (type, 0);
814   switch (TYPE_CODE (type))
815     {
816     case TYPE_CODE_RANGE:
817       return TYPE_LOW_BOUND (type);
818     case TYPE_CODE_ENUM:
819       return TYPE_FIELD_ENUMVAL (type, 0);
820     case TYPE_CODE_BOOL:
821       return 0;
822     case TYPE_CODE_CHAR:
823     case TYPE_CODE_INT:
824       return min_of_type (type);
825     default:
826       error (_("Unexpected type in ada_discrete_type_low_bound."));
827     }
828 }
829
830 /* The identity on non-range types.  For range types, the underlying
831    non-range scalar type.  */
832
833 static struct type *
834 get_base_type (struct type *type)
835 {
836   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
837     {
838       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
839         return type;
840       type = TYPE_TARGET_TYPE (type);
841     }
842   return type;
843 }
844
845 /* Return a decoded version of the given VALUE.  This means returning
846    a value whose type is obtained by applying all the GNAT-specific
847    encondings, making the resulting type a static but standard description
848    of the initial type.  */
849
850 struct value *
851 ada_get_decoded_value (struct value *value)
852 {
853   struct type *type = ada_check_typedef (value_type (value));
854
855   if (ada_is_array_descriptor_type (type)
856       || (ada_is_constrained_packed_array_type (type)
857           && TYPE_CODE (type) != TYPE_CODE_PTR))
858     {
859       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
860         value = ada_coerce_to_simple_array_ptr (value);
861       else
862         value = ada_coerce_to_simple_array (value);
863     }
864   else
865     value = ada_to_fixed_value (value);
866
867   return value;
868 }
869
870 /* Same as ada_get_decoded_value, but with the given TYPE.
871    Because there is no associated actual value for this type,
872    the resulting type might be a best-effort approximation in
873    the case of dynamic types.  */
874
875 struct type *
876 ada_get_decoded_type (struct type *type)
877 {
878   type = to_static_fixed_type (type);
879   if (ada_is_constrained_packed_array_type (type))
880     type = ada_coerce_to_simple_array_type (type);
881   return type;
882 }
883
884 \f
885
886                                 /* Language Selection */
887
888 /* If the main program is in Ada, return language_ada, otherwise return LANG
889    (the main program is in Ada iif the adainit symbol is found).  */
890
891 enum language
892 ada_update_initial_language (enum language lang)
893 {
894   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
895                              (struct objfile *) NULL).minsym != NULL)
896     return language_ada;
897
898   return lang;
899 }
900
901 /* If the main procedure is written in Ada, then return its name.
902    The result is good until the next call.  Return NULL if the main
903    procedure doesn't appear to be in Ada.  */
904
905 char *
906 ada_main_name (void)
907 {
908   struct bound_minimal_symbol msym;
909   static char *main_program_name = NULL;
910
911   /* For Ada, the name of the main procedure is stored in a specific
912      string constant, generated by the binder.  Look for that symbol,
913      extract its address, and then read that string.  If we didn't find
914      that string, then most probably the main procedure is not written
915      in Ada.  */
916   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
917
918   if (msym.minsym != NULL)
919     {
920       CORE_ADDR main_program_name_addr;
921       int err_code;
922
923       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
924       if (main_program_name_addr == 0)
925         error (_("Invalid address for Ada main program name."));
926
927       xfree (main_program_name);
928       target_read_string (main_program_name_addr, &main_program_name,
929                           1024, &err_code);
930
931       if (err_code != 0)
932         return NULL;
933       return main_program_name;
934     }
935
936   /* The main procedure doesn't seem to be in Ada.  */
937   return NULL;
938 }
939 \f
940                                 /* Symbols */
941
942 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
943    of NULLs.  */
944
945 const struct ada_opname_map ada_opname_table[] = {
946   {"Oadd", "\"+\"", BINOP_ADD},
947   {"Osubtract", "\"-\"", BINOP_SUB},
948   {"Omultiply", "\"*\"", BINOP_MUL},
949   {"Odivide", "\"/\"", BINOP_DIV},
950   {"Omod", "\"mod\"", BINOP_MOD},
951   {"Orem", "\"rem\"", BINOP_REM},
952   {"Oexpon", "\"**\"", BINOP_EXP},
953   {"Olt", "\"<\"", BINOP_LESS},
954   {"Ole", "\"<=\"", BINOP_LEQ},
955   {"Ogt", "\">\"", BINOP_GTR},
956   {"Oge", "\">=\"", BINOP_GEQ},
957   {"Oeq", "\"=\"", BINOP_EQUAL},
958   {"One", "\"/=\"", BINOP_NOTEQUAL},
959   {"Oand", "\"and\"", BINOP_BITWISE_AND},
960   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
961   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
962   {"Oconcat", "\"&\"", BINOP_CONCAT},
963   {"Oabs", "\"abs\"", UNOP_ABS},
964   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
965   {"Oadd", "\"+\"", UNOP_PLUS},
966   {"Osubtract", "\"-\"", UNOP_NEG},
967   {NULL, NULL}
968 };
969
970 /* The "encoded" form of DECODED, according to GNAT conventions.
971    The result is valid until the next call to ada_encode.  */
972
973 char *
974 ada_encode (const char *decoded)
975 {
976   static char *encoding_buffer = NULL;
977   static size_t encoding_buffer_size = 0;
978   const char *p;
979   int k;
980
981   if (decoded == NULL)
982     return NULL;
983
984   GROW_VECT (encoding_buffer, encoding_buffer_size,
985              2 * strlen (decoded) + 10);
986
987   k = 0;
988   for (p = decoded; *p != '\0'; p += 1)
989     {
990       if (*p == '.')
991         {
992           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
993           k += 2;
994         }
995       else if (*p == '"')
996         {
997           const struct ada_opname_map *mapping;
998
999           for (mapping = ada_opname_table;
1000                mapping->encoded != NULL
1001                && strncmp (mapping->decoded, p,
1002                            strlen (mapping->decoded)) != 0; mapping += 1)
1003             ;
1004           if (mapping->encoded == NULL)
1005             error (_("invalid Ada operator name: %s"), p);
1006           strcpy (encoding_buffer + k, mapping->encoded);
1007           k += strlen (mapping->encoded);
1008           break;
1009         }
1010       else
1011         {
1012           encoding_buffer[k] = *p;
1013           k += 1;
1014         }
1015     }
1016
1017   encoding_buffer[k] = '\0';
1018   return encoding_buffer;
1019 }
1020
1021 /* Return NAME folded to lower case, or, if surrounded by single
1022    quotes, unfolded, but with the quotes stripped away.  Result good
1023    to next call.  */
1024
1025 char *
1026 ada_fold_name (const char *name)
1027 {
1028   static char *fold_buffer = NULL;
1029   static size_t fold_buffer_size = 0;
1030
1031   int len = strlen (name);
1032   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1033
1034   if (name[0] == '\'')
1035     {
1036       strncpy (fold_buffer, name + 1, len - 2);
1037       fold_buffer[len - 2] = '\000';
1038     }
1039   else
1040     {
1041       int i;
1042
1043       for (i = 0; i <= len; i += 1)
1044         fold_buffer[i] = tolower (name[i]);
1045     }
1046
1047   return fold_buffer;
1048 }
1049
1050 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1051
1052 static int
1053 is_lower_alphanum (const char c)
1054 {
1055   return (isdigit (c) || (isalpha (c) && islower (c)));
1056 }
1057
1058 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1059    This function saves in LEN the length of that same symbol name but
1060    without either of these suffixes:
1061      . .{DIGIT}+
1062      . ${DIGIT}+
1063      . ___{DIGIT}+
1064      . __{DIGIT}+.
1065
1066    These are suffixes introduced by the compiler for entities such as
1067    nested subprogram for instance, in order to avoid name clashes.
1068    They do not serve any purpose for the debugger.  */
1069
1070 static void
1071 ada_remove_trailing_digits (const char *encoded, int *len)
1072 {
1073   if (*len > 1 && isdigit (encoded[*len - 1]))
1074     {
1075       int i = *len - 2;
1076
1077       while (i > 0 && isdigit (encoded[i]))
1078         i--;
1079       if (i >= 0 && encoded[i] == '.')
1080         *len = i;
1081       else if (i >= 0 && encoded[i] == '$')
1082         *len = i;
1083       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
1084         *len = i - 2;
1085       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
1086         *len = i - 1;
1087     }
1088 }
1089
1090 /* Remove the suffix introduced by the compiler for protected object
1091    subprograms.  */
1092
1093 static void
1094 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1095 {
1096   /* Remove trailing N.  */
1097
1098   /* Protected entry subprograms are broken into two
1099      separate subprograms: The first one is unprotected, and has
1100      a 'N' suffix; the second is the protected version, and has
1101      the 'P' suffix.  The second calls the first one after handling
1102      the protection.  Since the P subprograms are internally generated,
1103      we leave these names undecoded, giving the user a clue that this
1104      entity is internal.  */
1105
1106   if (*len > 1
1107       && encoded[*len - 1] == 'N'
1108       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1109     *len = *len - 1;
1110 }
1111
1112 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1113
1114 static void
1115 ada_remove_Xbn_suffix (const char *encoded, int *len)
1116 {
1117   int i = *len - 1;
1118
1119   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1120     i--;
1121
1122   if (encoded[i] != 'X')
1123     return;
1124
1125   if (i == 0)
1126     return;
1127
1128   if (isalnum (encoded[i-1]))
1129     *len = i;
1130 }
1131
1132 /* If ENCODED follows the GNAT entity encoding conventions, then return
1133    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1134    replaced by ENCODED.
1135
1136    The resulting string is valid until the next call of ada_decode.
1137    If the string is unchanged by decoding, the original string pointer
1138    is returned.  */
1139
1140 const char *
1141 ada_decode (const char *encoded)
1142 {
1143   int i, j;
1144   int len0;
1145   const char *p;
1146   char *decoded;
1147   int at_start_name;
1148   static char *decoding_buffer = NULL;
1149   static size_t decoding_buffer_size = 0;
1150
1151   /* The name of the Ada main procedure starts with "_ada_".
1152      This prefix is not part of the decoded name, so skip this part
1153      if we see this prefix.  */
1154   if (strncmp (encoded, "_ada_", 5) == 0)
1155     encoded += 5;
1156
1157   /* If the name starts with '_', then it is not a properly encoded
1158      name, so do not attempt to decode it.  Similarly, if the name
1159      starts with '<', the name should not be decoded.  */
1160   if (encoded[0] == '_' || encoded[0] == '<')
1161     goto Suppress;
1162
1163   len0 = strlen (encoded);
1164
1165   ada_remove_trailing_digits (encoded, &len0);
1166   ada_remove_po_subprogram_suffix (encoded, &len0);
1167
1168   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1169      the suffix is located before the current "end" of ENCODED.  We want
1170      to avoid re-matching parts of ENCODED that have previously been
1171      marked as discarded (by decrementing LEN0).  */
1172   p = strstr (encoded, "___");
1173   if (p != NULL && p - encoded < len0 - 3)
1174     {
1175       if (p[3] == 'X')
1176         len0 = p - encoded;
1177       else
1178         goto Suppress;
1179     }
1180
1181   /* Remove any trailing TKB suffix.  It tells us that this symbol
1182      is for the body of a task, but that information does not actually
1183      appear in the decoded name.  */
1184
1185   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
1186     len0 -= 3;
1187
1188   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1189      from the TKB suffix because it is used for non-anonymous task
1190      bodies.  */
1191
1192   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1193     len0 -= 2;
1194
1195   /* Remove trailing "B" suffixes.  */
1196   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1197
1198   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
1199     len0 -= 1;
1200
1201   /* Make decoded big enough for possible expansion by operator name.  */
1202
1203   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1204   decoded = decoding_buffer;
1205
1206   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1207
1208   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1209     {
1210       i = len0 - 2;
1211       while ((i >= 0 && isdigit (encoded[i]))
1212              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1213         i -= 1;
1214       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1215         len0 = i - 1;
1216       else if (encoded[i] == '$')
1217         len0 = i;
1218     }
1219
1220   /* The first few characters that are not alphabetic are not part
1221      of any encoding we use, so we can copy them over verbatim.  */
1222
1223   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1224     decoded[j] = encoded[i];
1225
1226   at_start_name = 1;
1227   while (i < len0)
1228     {
1229       /* Is this a symbol function?  */
1230       if (at_start_name && encoded[i] == 'O')
1231         {
1232           int k;
1233
1234           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1235             {
1236               int op_len = strlen (ada_opname_table[k].encoded);
1237               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1238                             op_len - 1) == 0)
1239                   && !isalnum (encoded[i + op_len]))
1240                 {
1241                   strcpy (decoded + j, ada_opname_table[k].decoded);
1242                   at_start_name = 0;
1243                   i += op_len;
1244                   j += strlen (ada_opname_table[k].decoded);
1245                   break;
1246                 }
1247             }
1248           if (ada_opname_table[k].encoded != NULL)
1249             continue;
1250         }
1251       at_start_name = 0;
1252
1253       /* Replace "TK__" with "__", which will eventually be translated
1254          into "." (just below).  */
1255
1256       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1257         i += 2;
1258
1259       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1260          be translated into "." (just below).  These are internal names
1261          generated for anonymous blocks inside which our symbol is nested.  */
1262
1263       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1264           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1265           && isdigit (encoded [i+4]))
1266         {
1267           int k = i + 5;
1268           
1269           while (k < len0 && isdigit (encoded[k]))
1270             k++;  /* Skip any extra digit.  */
1271
1272           /* Double-check that the "__B_{DIGITS}+" sequence we found
1273              is indeed followed by "__".  */
1274           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1275             i = k;
1276         }
1277
1278       /* Remove _E{DIGITS}+[sb] */
1279
1280       /* Just as for protected object subprograms, there are 2 categories
1281          of subprograms created by the compiler for each entry.  The first
1282          one implements the actual entry code, and has a suffix following
1283          the convention above; the second one implements the barrier and
1284          uses the same convention as above, except that the 'E' is replaced
1285          by a 'B'.
1286
1287          Just as above, we do not decode the name of barrier functions
1288          to give the user a clue that the code he is debugging has been
1289          internally generated.  */
1290
1291       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1292           && isdigit (encoded[i+2]))
1293         {
1294           int k = i + 3;
1295
1296           while (k < len0 && isdigit (encoded[k]))
1297             k++;
1298
1299           if (k < len0
1300               && (encoded[k] == 'b' || encoded[k] == 's'))
1301             {
1302               k++;
1303               /* Just as an extra precaution, make sure that if this
1304                  suffix is followed by anything else, it is a '_'.
1305                  Otherwise, we matched this sequence by accident.  */
1306               if (k == len0
1307                   || (k < len0 && encoded[k] == '_'))
1308                 i = k;
1309             }
1310         }
1311
1312       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1313          the GNAT front-end in protected object subprograms.  */
1314
1315       if (i < len0 + 3
1316           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1317         {
1318           /* Backtrack a bit up until we reach either the begining of
1319              the encoded name, or "__".  Make sure that we only find
1320              digits or lowercase characters.  */
1321           const char *ptr = encoded + i - 1;
1322
1323           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1324             ptr--;
1325           if (ptr < encoded
1326               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1327             i++;
1328         }
1329
1330       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1331         {
1332           /* This is a X[bn]* sequence not separated from the previous
1333              part of the name with a non-alpha-numeric character (in other
1334              words, immediately following an alpha-numeric character), then
1335              verify that it is placed at the end of the encoded name.  If
1336              not, then the encoding is not valid and we should abort the
1337              decoding.  Otherwise, just skip it, it is used in body-nested
1338              package names.  */
1339           do
1340             i += 1;
1341           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1342           if (i < len0)
1343             goto Suppress;
1344         }
1345       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1346         {
1347          /* Replace '__' by '.'.  */
1348           decoded[j] = '.';
1349           at_start_name = 1;
1350           i += 2;
1351           j += 1;
1352         }
1353       else
1354         {
1355           /* It's a character part of the decoded name, so just copy it
1356              over.  */
1357           decoded[j] = encoded[i];
1358           i += 1;
1359           j += 1;
1360         }
1361     }
1362   decoded[j] = '\000';
1363
1364   /* Decoded names should never contain any uppercase character.
1365      Double-check this, and abort the decoding if we find one.  */
1366
1367   for (i = 0; decoded[i] != '\0'; i += 1)
1368     if (isupper (decoded[i]) || decoded[i] == ' ')
1369       goto Suppress;
1370
1371   if (strcmp (decoded, encoded) == 0)
1372     return encoded;
1373   else
1374     return decoded;
1375
1376 Suppress:
1377   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1378   decoded = decoding_buffer;
1379   if (encoded[0] == '<')
1380     strcpy (decoded, encoded);
1381   else
1382     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1383   return decoded;
1384
1385 }
1386
1387 /* Table for keeping permanent unique copies of decoded names.  Once
1388    allocated, names in this table are never released.  While this is a
1389    storage leak, it should not be significant unless there are massive
1390    changes in the set of decoded names in successive versions of a 
1391    symbol table loaded during a single session.  */
1392 static struct htab *decoded_names_store;
1393
1394 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1395    in the language-specific part of GSYMBOL, if it has not been
1396    previously computed.  Tries to save the decoded name in the same
1397    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1398    in any case, the decoded symbol has a lifetime at least that of
1399    GSYMBOL).
1400    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1401    const, but nevertheless modified to a semantically equivalent form
1402    when a decoded name is cached in it.  */
1403
1404 const char *
1405 ada_decode_symbol (const struct general_symbol_info *arg)
1406 {
1407   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1408   const char **resultp =
1409     &gsymbol->language_specific.mangled_lang.demangled_name;
1410
1411   if (!gsymbol->ada_mangled)
1412     {
1413       const char *decoded = ada_decode (gsymbol->name);
1414       struct obstack *obstack = gsymbol->language_specific.obstack;
1415
1416       gsymbol->ada_mangled = 1;
1417
1418       if (obstack != NULL)
1419         *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1420       else
1421         {
1422           /* Sometimes, we can't find a corresponding objfile, in
1423              which case, we put the result on the heap.  Since we only
1424              decode when needed, we hope this usually does not cause a
1425              significant memory leak (FIXME).  */
1426
1427           char **slot = (char **) htab_find_slot (decoded_names_store,
1428                                                   decoded, INSERT);
1429
1430           if (*slot == NULL)
1431             *slot = xstrdup (decoded);
1432           *resultp = *slot;
1433         }
1434     }
1435
1436   return *resultp;
1437 }
1438
1439 static char *
1440 ada_la_decode (const char *encoded, int options)
1441 {
1442   return xstrdup (ada_decode (encoded));
1443 }
1444
1445 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1446    suffixes that encode debugging information or leading _ada_ on
1447    SYM_NAME (see is_name_suffix commentary for the debugging
1448    information that is ignored).  If WILD, then NAME need only match a
1449    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1450    either argument is NULL.  */
1451
1452 static int
1453 match_name (const char *sym_name, const char *name, int wild)
1454 {
1455   if (sym_name == NULL || name == NULL)
1456     return 0;
1457   else if (wild)
1458     return wild_match (sym_name, name) == 0;
1459   else
1460     {
1461       int len_name = strlen (name);
1462
1463       return (strncmp (sym_name, name, len_name) == 0
1464               && is_name_suffix (sym_name + len_name))
1465         || (strncmp (sym_name, "_ada_", 5) == 0
1466             && strncmp (sym_name + 5, name, len_name) == 0
1467             && is_name_suffix (sym_name + len_name + 5));
1468     }
1469 }
1470 \f
1471
1472                                 /* Arrays */
1473
1474 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1475    generated by the GNAT compiler to describe the index type used
1476    for each dimension of an array, check whether it follows the latest
1477    known encoding.  If not, fix it up to conform to the latest encoding.
1478    Otherwise, do nothing.  This function also does nothing if
1479    INDEX_DESC_TYPE is NULL.
1480
1481    The GNAT encoding used to describle the array index type evolved a bit.
1482    Initially, the information would be provided through the name of each
1483    field of the structure type only, while the type of these fields was
1484    described as unspecified and irrelevant.  The debugger was then expected
1485    to perform a global type lookup using the name of that field in order
1486    to get access to the full index type description.  Because these global
1487    lookups can be very expensive, the encoding was later enhanced to make
1488    the global lookup unnecessary by defining the field type as being
1489    the full index type description.
1490
1491    The purpose of this routine is to allow us to support older versions
1492    of the compiler by detecting the use of the older encoding, and by
1493    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1494    we essentially replace each field's meaningless type by the associated
1495    index subtype).  */
1496
1497 void
1498 ada_fixup_array_indexes_type (struct type *index_desc_type)
1499 {
1500   int i;
1501
1502   if (index_desc_type == NULL)
1503     return;
1504   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1505
1506   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1507      to check one field only, no need to check them all).  If not, return
1508      now.
1509
1510      If our INDEX_DESC_TYPE was generated using the older encoding,
1511      the field type should be a meaningless integer type whose name
1512      is not equal to the field name.  */
1513   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1514       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1515                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1516     return;
1517
1518   /* Fixup each field of INDEX_DESC_TYPE.  */
1519   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1520    {
1521      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1522      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1523
1524      if (raw_type)
1525        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1526    }
1527 }
1528
1529 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1530
1531 static char *bound_name[] = {
1532   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1533   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1534 };
1535
1536 /* Maximum number of array dimensions we are prepared to handle.  */
1537
1538 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1539
1540
1541 /* The desc_* routines return primitive portions of array descriptors
1542    (fat pointers).  */
1543
1544 /* The descriptor or array type, if any, indicated by TYPE; removes
1545    level of indirection, if needed.  */
1546
1547 static struct type *
1548 desc_base_type (struct type *type)
1549 {
1550   if (type == NULL)
1551     return NULL;
1552   type = ada_check_typedef (type);
1553   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1554     type = ada_typedef_target_type (type);
1555
1556   if (type != NULL
1557       && (TYPE_CODE (type) == TYPE_CODE_PTR
1558           || TYPE_CODE (type) == TYPE_CODE_REF))
1559     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1560   else
1561     return type;
1562 }
1563
1564 /* True iff TYPE indicates a "thin" array pointer type.  */
1565
1566 static int
1567 is_thin_pntr (struct type *type)
1568 {
1569   return
1570     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1571     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1572 }
1573
1574 /* The descriptor type for thin pointer type TYPE.  */
1575
1576 static struct type *
1577 thin_descriptor_type (struct type *type)
1578 {
1579   struct type *base_type = desc_base_type (type);
1580
1581   if (base_type == NULL)
1582     return NULL;
1583   if (is_suffix (ada_type_name (base_type), "___XVE"))
1584     return base_type;
1585   else
1586     {
1587       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1588
1589       if (alt_type == NULL)
1590         return base_type;
1591       else
1592         return alt_type;
1593     }
1594 }
1595
1596 /* A pointer to the array data for thin-pointer value VAL.  */
1597
1598 static struct value *
1599 thin_data_pntr (struct value *val)
1600 {
1601   struct type *type = ada_check_typedef (value_type (val));
1602   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1603
1604   data_type = lookup_pointer_type (data_type);
1605
1606   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1607     return value_cast (data_type, value_copy (val));
1608   else
1609     return value_from_longest (data_type, value_address (val));
1610 }
1611
1612 /* True iff TYPE indicates a "thick" array pointer type.  */
1613
1614 static int
1615 is_thick_pntr (struct type *type)
1616 {
1617   type = desc_base_type (type);
1618   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1619           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1620 }
1621
1622 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1623    pointer to one, the type of its bounds data; otherwise, NULL.  */
1624
1625 static struct type *
1626 desc_bounds_type (struct type *type)
1627 {
1628   struct type *r;
1629
1630   type = desc_base_type (type);
1631
1632   if (type == NULL)
1633     return NULL;
1634   else if (is_thin_pntr (type))
1635     {
1636       type = thin_descriptor_type (type);
1637       if (type == NULL)
1638         return NULL;
1639       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1640       if (r != NULL)
1641         return ada_check_typedef (r);
1642     }
1643   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1644     {
1645       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1646       if (r != NULL)
1647         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1648     }
1649   return NULL;
1650 }
1651
1652 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1653    one, a pointer to its bounds data.   Otherwise NULL.  */
1654
1655 static struct value *
1656 desc_bounds (struct value *arr)
1657 {
1658   struct type *type = ada_check_typedef (value_type (arr));
1659
1660   if (is_thin_pntr (type))
1661     {
1662       struct type *bounds_type =
1663         desc_bounds_type (thin_descriptor_type (type));
1664       LONGEST addr;
1665
1666       if (bounds_type == NULL)
1667         error (_("Bad GNAT array descriptor"));
1668
1669       /* NOTE: The following calculation is not really kosher, but
1670          since desc_type is an XVE-encoded type (and shouldn't be),
1671          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1672       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1673         addr = value_as_long (arr);
1674       else
1675         addr = value_address (arr);
1676
1677       return
1678         value_from_longest (lookup_pointer_type (bounds_type),
1679                             addr - TYPE_LENGTH (bounds_type));
1680     }
1681
1682   else if (is_thick_pntr (type))
1683     {
1684       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1685                                                _("Bad GNAT array descriptor"));
1686       struct type *p_bounds_type = value_type (p_bounds);
1687
1688       if (p_bounds_type
1689           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1690         {
1691           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1692
1693           if (TYPE_STUB (target_type))
1694             p_bounds = value_cast (lookup_pointer_type
1695                                    (ada_check_typedef (target_type)),
1696                                    p_bounds);
1697         }
1698       else
1699         error (_("Bad GNAT array descriptor"));
1700
1701       return p_bounds;
1702     }
1703   else
1704     return NULL;
1705 }
1706
1707 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1708    position of the field containing the address of the bounds data.  */
1709
1710 static int
1711 fat_pntr_bounds_bitpos (struct type *type)
1712 {
1713   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1714 }
1715
1716 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1717    size of the field containing the address of the bounds data.  */
1718
1719 static int
1720 fat_pntr_bounds_bitsize (struct type *type)
1721 {
1722   type = desc_base_type (type);
1723
1724   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1725     return TYPE_FIELD_BITSIZE (type, 1);
1726   else
1727     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1728 }
1729
1730 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1731    pointer to one, the type of its array data (a array-with-no-bounds type);
1732    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1733    data.  */
1734
1735 static struct type *
1736 desc_data_target_type (struct type *type)
1737 {
1738   type = desc_base_type (type);
1739
1740   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1741   if (is_thin_pntr (type))
1742     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1743   else if (is_thick_pntr (type))
1744     {
1745       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1746
1747       if (data_type
1748           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1749         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1750     }
1751
1752   return NULL;
1753 }
1754
1755 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1756    its array data.  */
1757
1758 static struct value *
1759 desc_data (struct value *arr)
1760 {
1761   struct type *type = value_type (arr);
1762
1763   if (is_thin_pntr (type))
1764     return thin_data_pntr (arr);
1765   else if (is_thick_pntr (type))
1766     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1767                              _("Bad GNAT array descriptor"));
1768   else
1769     return NULL;
1770 }
1771
1772
1773 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1774    position of the field containing the address of the data.  */
1775
1776 static int
1777 fat_pntr_data_bitpos (struct type *type)
1778 {
1779   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1780 }
1781
1782 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1783    size of the field containing the address of the data.  */
1784
1785 static int
1786 fat_pntr_data_bitsize (struct type *type)
1787 {
1788   type = desc_base_type (type);
1789
1790   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1791     return TYPE_FIELD_BITSIZE (type, 0);
1792   else
1793     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1794 }
1795
1796 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1797    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1798    bound, if WHICH is 1.  The first bound is I=1.  */
1799
1800 static struct value *
1801 desc_one_bound (struct value *bounds, int i, int which)
1802 {
1803   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1804                            _("Bad GNAT array descriptor bounds"));
1805 }
1806
1807 /* If BOUNDS is an array-bounds structure type, return the bit position
1808    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1809    bound, if WHICH is 1.  The first bound is I=1.  */
1810
1811 static int
1812 desc_bound_bitpos (struct type *type, int i, int which)
1813 {
1814   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1815 }
1816
1817 /* If BOUNDS is an array-bounds structure type, return the bit field size
1818    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1819    bound, if WHICH is 1.  The first bound is I=1.  */
1820
1821 static int
1822 desc_bound_bitsize (struct type *type, int i, int which)
1823 {
1824   type = desc_base_type (type);
1825
1826   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1827     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1828   else
1829     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1830 }
1831
1832 /* If TYPE is the type of an array-bounds structure, the type of its
1833    Ith bound (numbering from 1).  Otherwise, NULL.  */
1834
1835 static struct type *
1836 desc_index_type (struct type *type, int i)
1837 {
1838   type = desc_base_type (type);
1839
1840   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1841     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1842   else
1843     return NULL;
1844 }
1845
1846 /* The number of index positions in the array-bounds type TYPE.
1847    Return 0 if TYPE is NULL.  */
1848
1849 static int
1850 desc_arity (struct type *type)
1851 {
1852   type = desc_base_type (type);
1853
1854   if (type != NULL)
1855     return TYPE_NFIELDS (type) / 2;
1856   return 0;
1857 }
1858
1859 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1860    an array descriptor type (representing an unconstrained array
1861    type).  */
1862
1863 static int
1864 ada_is_direct_array_type (struct type *type)
1865 {
1866   if (type == NULL)
1867     return 0;
1868   type = ada_check_typedef (type);
1869   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1870           || ada_is_array_descriptor_type (type));
1871 }
1872
1873 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1874  * to one.  */
1875
1876 static int
1877 ada_is_array_type (struct type *type)
1878 {
1879   while (type != NULL 
1880          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1881              || TYPE_CODE (type) == TYPE_CODE_REF))
1882     type = TYPE_TARGET_TYPE (type);
1883   return ada_is_direct_array_type (type);
1884 }
1885
1886 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1887
1888 int
1889 ada_is_simple_array_type (struct type *type)
1890 {
1891   if (type == NULL)
1892     return 0;
1893   type = ada_check_typedef (type);
1894   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1895           || (TYPE_CODE (type) == TYPE_CODE_PTR
1896               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1897                  == TYPE_CODE_ARRAY));
1898 }
1899
1900 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1901
1902 int
1903 ada_is_array_descriptor_type (struct type *type)
1904 {
1905   struct type *data_type = desc_data_target_type (type);
1906
1907   if (type == NULL)
1908     return 0;
1909   type = ada_check_typedef (type);
1910   return (data_type != NULL
1911           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1912           && desc_arity (desc_bounds_type (type)) > 0);
1913 }
1914
1915 /* Non-zero iff type is a partially mal-formed GNAT array
1916    descriptor.  FIXME: This is to compensate for some problems with
1917    debugging output from GNAT.  Re-examine periodically to see if it
1918    is still needed.  */
1919
1920 int
1921 ada_is_bogus_array_descriptor (struct type *type)
1922 {
1923   return
1924     type != NULL
1925     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1926     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1927         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1928     && !ada_is_array_descriptor_type (type);
1929 }
1930
1931
1932 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1933    (fat pointer) returns the type of the array data described---specifically,
1934    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1935    in from the descriptor; otherwise, they are left unspecified.  If
1936    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1937    returns NULL.  The result is simply the type of ARR if ARR is not
1938    a descriptor.  */
1939 struct type *
1940 ada_type_of_array (struct value *arr, int bounds)
1941 {
1942   if (ada_is_constrained_packed_array_type (value_type (arr)))
1943     return decode_constrained_packed_array_type (value_type (arr));
1944
1945   if (!ada_is_array_descriptor_type (value_type (arr)))
1946     return value_type (arr);
1947
1948   if (!bounds)
1949     {
1950       struct type *array_type =
1951         ada_check_typedef (desc_data_target_type (value_type (arr)));
1952
1953       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1954         TYPE_FIELD_BITSIZE (array_type, 0) =
1955           decode_packed_array_bitsize (value_type (arr));
1956       
1957       return array_type;
1958     }
1959   else
1960     {
1961       struct type *elt_type;
1962       int arity;
1963       struct value *descriptor;
1964
1965       elt_type = ada_array_element_type (value_type (arr), -1);
1966       arity = ada_array_arity (value_type (arr));
1967
1968       if (elt_type == NULL || arity == 0)
1969         return ada_check_typedef (value_type (arr));
1970
1971       descriptor = desc_bounds (arr);
1972       if (value_as_long (descriptor) == 0)
1973         return NULL;
1974       while (arity > 0)
1975         {
1976           struct type *range_type = alloc_type_copy (value_type (arr));
1977           struct type *array_type = alloc_type_copy (value_type (arr));
1978           struct value *low = desc_one_bound (descriptor, arity, 0);
1979           struct value *high = desc_one_bound (descriptor, arity, 1);
1980
1981           arity -= 1;
1982           create_static_range_type (range_type, value_type (low),
1983                                     longest_to_int (value_as_long (low)),
1984                                     longest_to_int (value_as_long (high)));
1985           elt_type = create_array_type (array_type, elt_type, range_type);
1986
1987           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1988             {
1989               /* We need to store the element packed bitsize, as well as
1990                  recompute the array size, because it was previously
1991                  computed based on the unpacked element size.  */
1992               LONGEST lo = value_as_long (low);
1993               LONGEST hi = value_as_long (high);
1994
1995               TYPE_FIELD_BITSIZE (elt_type, 0) =
1996                 decode_packed_array_bitsize (value_type (arr));
1997               /* If the array has no element, then the size is already
1998                  zero, and does not need to be recomputed.  */
1999               if (lo < hi)
2000                 {
2001                   int array_bitsize =
2002                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2003
2004                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2005                 }
2006             }
2007         }
2008
2009       return lookup_pointer_type (elt_type);
2010     }
2011 }
2012
2013 /* If ARR does not represent an array, returns ARR unchanged.
2014    Otherwise, returns either a standard GDB array with bounds set
2015    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2016    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2017
2018 struct value *
2019 ada_coerce_to_simple_array_ptr (struct value *arr)
2020 {
2021   if (ada_is_array_descriptor_type (value_type (arr)))
2022     {
2023       struct type *arrType = ada_type_of_array (arr, 1);
2024
2025       if (arrType == NULL)
2026         return NULL;
2027       return value_cast (arrType, value_copy (desc_data (arr)));
2028     }
2029   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2030     return decode_constrained_packed_array (arr);
2031   else
2032     return arr;
2033 }
2034
2035 /* If ARR does not represent an array, returns ARR unchanged.
2036    Otherwise, returns a standard GDB array describing ARR (which may
2037    be ARR itself if it already is in the proper form).  */
2038
2039 struct value *
2040 ada_coerce_to_simple_array (struct value *arr)
2041 {
2042   if (ada_is_array_descriptor_type (value_type (arr)))
2043     {
2044       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2045
2046       if (arrVal == NULL)
2047         error (_("Bounds unavailable for null array pointer."));
2048       check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
2049       return value_ind (arrVal);
2050     }
2051   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2052     return decode_constrained_packed_array (arr);
2053   else
2054     return arr;
2055 }
2056
2057 /* If TYPE represents a GNAT array type, return it translated to an
2058    ordinary GDB array type (possibly with BITSIZE fields indicating
2059    packing).  For other types, is the identity.  */
2060
2061 struct type *
2062 ada_coerce_to_simple_array_type (struct type *type)
2063 {
2064   if (ada_is_constrained_packed_array_type (type))
2065     return decode_constrained_packed_array_type (type);
2066
2067   if (ada_is_array_descriptor_type (type))
2068     return ada_check_typedef (desc_data_target_type (type));
2069
2070   return type;
2071 }
2072
2073 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2074
2075 static int
2076 ada_is_packed_array_type  (struct type *type)
2077 {
2078   if (type == NULL)
2079     return 0;
2080   type = desc_base_type (type);
2081   type = ada_check_typedef (type);
2082   return
2083     ada_type_name (type) != NULL
2084     && strstr (ada_type_name (type), "___XP") != NULL;
2085 }
2086
2087 /* Non-zero iff TYPE represents a standard GNAT constrained
2088    packed-array type.  */
2089
2090 int
2091 ada_is_constrained_packed_array_type (struct type *type)
2092 {
2093   return ada_is_packed_array_type (type)
2094     && !ada_is_array_descriptor_type (type);
2095 }
2096
2097 /* Non-zero iff TYPE represents an array descriptor for a
2098    unconstrained packed-array type.  */
2099
2100 static int
2101 ada_is_unconstrained_packed_array_type (struct type *type)
2102 {
2103   return ada_is_packed_array_type (type)
2104     && ada_is_array_descriptor_type (type);
2105 }
2106
2107 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2108    return the size of its elements in bits.  */
2109
2110 static long
2111 decode_packed_array_bitsize (struct type *type)
2112 {
2113   const char *raw_name;
2114   const char *tail;
2115   long bits;
2116
2117   /* Access to arrays implemented as fat pointers are encoded as a typedef
2118      of the fat pointer type.  We need the name of the fat pointer type
2119      to do the decoding, so strip the typedef layer.  */
2120   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2121     type = ada_typedef_target_type (type);
2122
2123   raw_name = ada_type_name (ada_check_typedef (type));
2124   if (!raw_name)
2125     raw_name = ada_type_name (desc_base_type (type));
2126
2127   if (!raw_name)
2128     return 0;
2129
2130   tail = strstr (raw_name, "___XP");
2131   gdb_assert (tail != NULL);
2132
2133   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2134     {
2135       lim_warning
2136         (_("could not understand bit size information on packed array"));
2137       return 0;
2138     }
2139
2140   return bits;
2141 }
2142
2143 /* Given that TYPE is a standard GDB array type with all bounds filled
2144    in, and that the element size of its ultimate scalar constituents
2145    (that is, either its elements, or, if it is an array of arrays, its
2146    elements' elements, etc.) is *ELT_BITS, return an identical type,
2147    but with the bit sizes of its elements (and those of any
2148    constituent arrays) recorded in the BITSIZE components of its
2149    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2150    in bits.  */
2151
2152 static struct type *
2153 constrained_packed_array_type (struct type *type, long *elt_bits)
2154 {
2155   struct type *new_elt_type;
2156   struct type *new_type;
2157   struct type *index_type_desc;
2158   struct type *index_type;
2159   LONGEST low_bound, high_bound;
2160
2161   type = ada_check_typedef (type);
2162   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2163     return type;
2164
2165   index_type_desc = ada_find_parallel_type (type, "___XA");
2166   if (index_type_desc)
2167     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2168                                       NULL);
2169   else
2170     index_type = TYPE_INDEX_TYPE (type);
2171
2172   new_type = alloc_type_copy (type);
2173   new_elt_type =
2174     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2175                                    elt_bits);
2176   create_array_type (new_type, new_elt_type, index_type);
2177   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2178   TYPE_NAME (new_type) = ada_type_name (type);
2179
2180   if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2181     low_bound = high_bound = 0;
2182   if (high_bound < low_bound)
2183     *elt_bits = TYPE_LENGTH (new_type) = 0;
2184   else
2185     {
2186       *elt_bits *= (high_bound - low_bound + 1);
2187       TYPE_LENGTH (new_type) =
2188         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2189     }
2190
2191   TYPE_FIXED_INSTANCE (new_type) = 1;
2192   return new_type;
2193 }
2194
2195 /* The array type encoded by TYPE, where
2196    ada_is_constrained_packed_array_type (TYPE).  */
2197
2198 static struct type *
2199 decode_constrained_packed_array_type (struct type *type)
2200 {
2201   const char *raw_name = ada_type_name (ada_check_typedef (type));
2202   char *name;
2203   const char *tail;
2204   struct type *shadow_type;
2205   long bits;
2206
2207   if (!raw_name)
2208     raw_name = ada_type_name (desc_base_type (type));
2209
2210   if (!raw_name)
2211     return NULL;
2212
2213   name = (char *) alloca (strlen (raw_name) + 1);
2214   tail = strstr (raw_name, "___XP");
2215   type = desc_base_type (type);
2216
2217   memcpy (name, raw_name, tail - raw_name);
2218   name[tail - raw_name] = '\000';
2219
2220   shadow_type = ada_find_parallel_type_with_name (type, name);
2221
2222   if (shadow_type == NULL)
2223     {
2224       lim_warning (_("could not find bounds information on packed array"));
2225       return NULL;
2226     }
2227   CHECK_TYPEDEF (shadow_type);
2228
2229   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2230     {
2231       lim_warning (_("could not understand bounds "
2232                      "information on packed array"));
2233       return NULL;
2234     }
2235
2236   bits = decode_packed_array_bitsize (type);
2237   return constrained_packed_array_type (shadow_type, &bits);
2238 }
2239
2240 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2241    array, returns a simple array that denotes that array.  Its type is a
2242    standard GDB array type except that the BITSIZEs of the array
2243    target types are set to the number of bits in each element, and the
2244    type length is set appropriately.  */
2245
2246 static struct value *
2247 decode_constrained_packed_array (struct value *arr)
2248 {
2249   struct type *type;
2250
2251   /* If our value is a pointer, then dereference it. Likewise if
2252      the value is a reference.  Make sure that this operation does not
2253      cause the target type to be fixed, as this would indirectly cause
2254      this array to be decoded.  The rest of the routine assumes that
2255      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2256      and "value_ind" routines to perform the dereferencing, as opposed
2257      to using "ada_coerce_ref" or "ada_value_ind".  */
2258   arr = coerce_ref (arr);
2259   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2260     arr = value_ind (arr);
2261
2262   type = decode_constrained_packed_array_type (value_type (arr));
2263   if (type == NULL)
2264     {
2265       error (_("can't unpack array"));
2266       return NULL;
2267     }
2268
2269   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2270       && ada_is_modular_type (value_type (arr)))
2271     {
2272        /* This is a (right-justified) modular type representing a packed
2273          array with no wrapper.  In order to interpret the value through
2274          the (left-justified) packed array type we just built, we must
2275          first left-justify it.  */
2276       int bit_size, bit_pos;
2277       ULONGEST mod;
2278
2279       mod = ada_modulus (value_type (arr)) - 1;
2280       bit_size = 0;
2281       while (mod > 0)
2282         {
2283           bit_size += 1;
2284           mod >>= 1;
2285         }
2286       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2287       arr = ada_value_primitive_packed_val (arr, NULL,
2288                                             bit_pos / HOST_CHAR_BIT,
2289                                             bit_pos % HOST_CHAR_BIT,
2290                                             bit_size,
2291                                             type);
2292     }
2293
2294   return coerce_unspec_val_to_type (arr, type);
2295 }
2296
2297
2298 /* The value of the element of packed array ARR at the ARITY indices
2299    given in IND.   ARR must be a simple array.  */
2300
2301 static struct value *
2302 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2303 {
2304   int i;
2305   int bits, elt_off, bit_off;
2306   long elt_total_bit_offset;
2307   struct type *elt_type;
2308   struct value *v;
2309
2310   bits = 0;
2311   elt_total_bit_offset = 0;
2312   elt_type = ada_check_typedef (value_type (arr));
2313   for (i = 0; i < arity; i += 1)
2314     {
2315       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2316           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2317         error
2318           (_("attempt to do packed indexing of "
2319              "something other than a packed array"));
2320       else
2321         {
2322           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2323           LONGEST lowerbound, upperbound;
2324           LONGEST idx;
2325
2326           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2327             {
2328               lim_warning (_("don't know bounds of array"));
2329               lowerbound = upperbound = 0;
2330             }
2331
2332           idx = pos_atr (ind[i]);
2333           if (idx < lowerbound || idx > upperbound)
2334             lim_warning (_("packed array index %ld out of bounds"),
2335                          (long) idx);
2336           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2337           elt_total_bit_offset += (idx - lowerbound) * bits;
2338           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2339         }
2340     }
2341   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2342   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2343
2344   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2345                                       bits, elt_type);
2346   return v;
2347 }
2348
2349 /* Non-zero iff TYPE includes negative integer values.  */
2350
2351 static int
2352 has_negatives (struct type *type)
2353 {
2354   switch (TYPE_CODE (type))
2355     {
2356     default:
2357       return 0;
2358     case TYPE_CODE_INT:
2359       return !TYPE_UNSIGNED (type);
2360     case TYPE_CODE_RANGE:
2361       return TYPE_LOW_BOUND (type) < 0;
2362     }
2363 }
2364
2365
2366 /* Create a new value of type TYPE from the contents of OBJ starting
2367    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2368    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2369    assigning through the result will set the field fetched from.
2370    VALADDR is ignored unless OBJ is NULL, in which case,
2371    VALADDR+OFFSET must address the start of storage containing the 
2372    packed value.  The value returned  in this case is never an lval.
2373    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2374
2375 struct value *
2376 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2377                                 long offset, int bit_offset, int bit_size,
2378                                 struct type *type)
2379 {
2380   struct value *v;
2381   int src,                      /* Index into the source area */
2382     targ,                       /* Index into the target area */
2383     srcBitsLeft,                /* Number of source bits left to move */
2384     nsrc, ntarg,                /* Number of source and target bytes */
2385     unusedLS,                   /* Number of bits in next significant
2386                                    byte of source that are unused */
2387     accumSize;                  /* Number of meaningful bits in accum */
2388   unsigned char *bytes;         /* First byte containing data to unpack */
2389   unsigned char *unpacked;
2390   unsigned long accum;          /* Staging area for bits being transferred */
2391   unsigned char sign;
2392   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2393   /* Transmit bytes from least to most significant; delta is the direction
2394      the indices move.  */
2395   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2396
2397   type = ada_check_typedef (type);
2398
2399   if (obj == NULL)
2400     {
2401       v = allocate_value (type);
2402       bytes = (unsigned char *) (valaddr + offset);
2403     }
2404   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2405     {
2406       v = value_at (type, value_address (obj));
2407       type = value_type (v);
2408       bytes = (unsigned char *) alloca (len);
2409       read_memory (value_address (v) + offset, bytes, len);
2410     }
2411   else
2412     {
2413       v = allocate_value (type);
2414       bytes = (unsigned char *) value_contents (obj) + offset;
2415     }
2416
2417   if (obj != NULL)
2418     {
2419       long new_offset = offset;
2420
2421       set_value_component_location (v, obj);
2422       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2423       set_value_bitsize (v, bit_size);
2424       if (value_bitpos (v) >= HOST_CHAR_BIT)
2425         {
2426           ++new_offset;
2427           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2428         }
2429       set_value_offset (v, new_offset);
2430
2431       /* Also set the parent value.  This is needed when trying to
2432          assign a new value (in inferior memory).  */
2433       set_value_parent (v, obj);
2434     }
2435   else
2436     set_value_bitsize (v, bit_size);
2437   unpacked = (unsigned char *) value_contents (v);
2438
2439   srcBitsLeft = bit_size;
2440   nsrc = len;
2441   ntarg = TYPE_LENGTH (type);
2442   sign = 0;
2443   if (bit_size == 0)
2444     {
2445       memset (unpacked, 0, TYPE_LENGTH (type));
2446       return v;
2447     }
2448   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2449     {
2450       src = len - 1;
2451       if (has_negatives (type)
2452           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2453         sign = ~0;
2454
2455       unusedLS =
2456         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2457         % HOST_CHAR_BIT;
2458
2459       switch (TYPE_CODE (type))
2460         {
2461         case TYPE_CODE_ARRAY:
2462         case TYPE_CODE_UNION:
2463         case TYPE_CODE_STRUCT:
2464           /* Non-scalar values must be aligned at a byte boundary...  */
2465           accumSize =
2466             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2467           /* ... And are placed at the beginning (most-significant) bytes
2468              of the target.  */
2469           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2470           ntarg = targ + 1;
2471           break;
2472         default:
2473           accumSize = 0;
2474           targ = TYPE_LENGTH (type) - 1;
2475           break;
2476         }
2477     }
2478   else
2479     {
2480       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2481
2482       src = targ = 0;
2483       unusedLS = bit_offset;
2484       accumSize = 0;
2485
2486       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2487         sign = ~0;
2488     }
2489
2490   accum = 0;
2491   while (nsrc > 0)
2492     {
2493       /* Mask for removing bits of the next source byte that are not
2494          part of the value.  */
2495       unsigned int unusedMSMask =
2496         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2497         1;
2498       /* Sign-extend bits for this byte.  */
2499       unsigned int signMask = sign & ~unusedMSMask;
2500
2501       accum |=
2502         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2503       accumSize += HOST_CHAR_BIT - unusedLS;
2504       if (accumSize >= HOST_CHAR_BIT)
2505         {
2506           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2507           accumSize -= HOST_CHAR_BIT;
2508           accum >>= HOST_CHAR_BIT;
2509           ntarg -= 1;
2510           targ += delta;
2511         }
2512       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2513       unusedLS = 0;
2514       nsrc -= 1;
2515       src += delta;
2516     }
2517   while (ntarg > 0)
2518     {
2519       accum |= sign << accumSize;
2520       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2521       accumSize -= HOST_CHAR_BIT;
2522       accum >>= HOST_CHAR_BIT;
2523       ntarg -= 1;
2524       targ += delta;
2525     }
2526
2527   return v;
2528 }
2529
2530 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2531    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2532    not overlap.  */
2533 static void
2534 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2535            int src_offset, int n, int bits_big_endian_p)
2536 {
2537   unsigned int accum, mask;
2538   int accum_bits, chunk_size;
2539
2540   target += targ_offset / HOST_CHAR_BIT;
2541   targ_offset %= HOST_CHAR_BIT;
2542   source += src_offset / HOST_CHAR_BIT;
2543   src_offset %= HOST_CHAR_BIT;
2544   if (bits_big_endian_p)
2545     {
2546       accum = (unsigned char) *source;
2547       source += 1;
2548       accum_bits = HOST_CHAR_BIT - src_offset;
2549
2550       while (n > 0)
2551         {
2552           int unused_right;
2553
2554           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2555           accum_bits += HOST_CHAR_BIT;
2556           source += 1;
2557           chunk_size = HOST_CHAR_BIT - targ_offset;
2558           if (chunk_size > n)
2559             chunk_size = n;
2560           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2561           mask = ((1 << chunk_size) - 1) << unused_right;
2562           *target =
2563             (*target & ~mask)
2564             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2565           n -= chunk_size;
2566           accum_bits -= chunk_size;
2567           target += 1;
2568           targ_offset = 0;
2569         }
2570     }
2571   else
2572     {
2573       accum = (unsigned char) *source >> src_offset;
2574       source += 1;
2575       accum_bits = HOST_CHAR_BIT - src_offset;
2576
2577       while (n > 0)
2578         {
2579           accum = accum + ((unsigned char) *source << accum_bits);
2580           accum_bits += HOST_CHAR_BIT;
2581           source += 1;
2582           chunk_size = HOST_CHAR_BIT - targ_offset;
2583           if (chunk_size > n)
2584             chunk_size = n;
2585           mask = ((1 << chunk_size) - 1) << targ_offset;
2586           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2587           n -= chunk_size;
2588           accum_bits -= chunk_size;
2589           accum >>= chunk_size;
2590           target += 1;
2591           targ_offset = 0;
2592         }
2593     }
2594 }
2595
2596 /* Store the contents of FROMVAL into the location of TOVAL.
2597    Return a new value with the location of TOVAL and contents of
2598    FROMVAL.   Handles assignment into packed fields that have
2599    floating-point or non-scalar types.  */
2600
2601 static struct value *
2602 ada_value_assign (struct value *toval, struct value *fromval)
2603 {
2604   struct type *type = value_type (toval);
2605   int bits = value_bitsize (toval);
2606
2607   toval = ada_coerce_ref (toval);
2608   fromval = ada_coerce_ref (fromval);
2609
2610   if (ada_is_direct_array_type (value_type (toval)))
2611     toval = ada_coerce_to_simple_array (toval);
2612   if (ada_is_direct_array_type (value_type (fromval)))
2613     fromval = ada_coerce_to_simple_array (fromval);
2614
2615   if (!deprecated_value_modifiable (toval))
2616     error (_("Left operand of assignment is not a modifiable lvalue."));
2617
2618   if (VALUE_LVAL (toval) == lval_memory
2619       && bits > 0
2620       && (TYPE_CODE (type) == TYPE_CODE_FLT
2621           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2622     {
2623       int len = (value_bitpos (toval)
2624                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2625       int from_size;
2626       gdb_byte *buffer = alloca (len);
2627       struct value *val;
2628       CORE_ADDR to_addr = value_address (toval);
2629
2630       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2631         fromval = value_cast (type, fromval);
2632
2633       read_memory (to_addr, buffer, len);
2634       from_size = value_bitsize (fromval);
2635       if (from_size == 0)
2636         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2637       if (gdbarch_bits_big_endian (get_type_arch (type)))
2638         move_bits (buffer, value_bitpos (toval),
2639                    value_contents (fromval), from_size - bits, bits, 1);
2640       else
2641         move_bits (buffer, value_bitpos (toval),
2642                    value_contents (fromval), 0, bits, 0);
2643       write_memory_with_notification (to_addr, buffer, len);
2644
2645       val = value_copy (toval);
2646       memcpy (value_contents_raw (val), value_contents (fromval),
2647               TYPE_LENGTH (type));
2648       deprecated_set_value_type (val, type);
2649
2650       return val;
2651     }
2652
2653   return value_assign (toval, fromval);
2654 }
2655
2656
2657 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2658  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2659  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2660  * COMPONENT, and not the inferior's memory.  The current contents 
2661  * of COMPONENT are ignored.  */
2662 static void
2663 value_assign_to_component (struct value *container, struct value *component,
2664                            struct value *val)
2665 {
2666   LONGEST offset_in_container =
2667     (LONGEST)  (value_address (component) - value_address (container));
2668   int bit_offset_in_container = 
2669     value_bitpos (component) - value_bitpos (container);
2670   int bits;
2671   
2672   val = value_cast (value_type (component), val);
2673
2674   if (value_bitsize (component) == 0)
2675     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2676   else
2677     bits = value_bitsize (component);
2678
2679   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2680     move_bits (value_contents_writeable (container) + offset_in_container, 
2681                value_bitpos (container) + bit_offset_in_container,
2682                value_contents (val),
2683                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2684                bits, 1);
2685   else
2686     move_bits (value_contents_writeable (container) + offset_in_container, 
2687                value_bitpos (container) + bit_offset_in_container,
2688                value_contents (val), 0, bits, 0);
2689 }              
2690                         
2691 /* The value of the element of array ARR at the ARITY indices given in IND.
2692    ARR may be either a simple array, GNAT array descriptor, or pointer
2693    thereto.  */
2694
2695 struct value *
2696 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2697 {
2698   int k;
2699   struct value *elt;
2700   struct type *elt_type;
2701
2702   elt = ada_coerce_to_simple_array (arr);
2703
2704   elt_type = ada_check_typedef (value_type (elt));
2705   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2706       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2707     return value_subscript_packed (elt, arity, ind);
2708
2709   for (k = 0; k < arity; k += 1)
2710     {
2711       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2712         error (_("too many subscripts (%d expected)"), k);
2713       elt = value_subscript (elt, pos_atr (ind[k]));
2714     }
2715   return elt;
2716 }
2717
2718 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2719    value of the element of *ARR at the ARITY indices given in
2720    IND.  Does not read the entire array into memory.  */
2721
2722 static struct value *
2723 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2724                          struct value **ind)
2725 {
2726   int k;
2727
2728   for (k = 0; k < arity; k += 1)
2729     {
2730       LONGEST lwb, upb;
2731
2732       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2733         error (_("too many subscripts (%d expected)"), k);
2734       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2735                         value_copy (arr));
2736       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2737       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2738       type = TYPE_TARGET_TYPE (type);
2739     }
2740
2741   return value_ind (arr);
2742 }
2743
2744 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2745    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2746    elements starting at index LOW.  The lower bound of this array is LOW, as
2747    per Ada rules.  */
2748 static struct value *
2749 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2750                           int low, int high)
2751 {
2752   struct type *type0 = ada_check_typedef (type);
2753   CORE_ADDR base = value_as_address (array_ptr)
2754     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2755        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2756   struct type *index_type
2757     = create_static_range_type (NULL,
2758                                 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2759                                 low, high);
2760   struct type *slice_type =
2761     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2762
2763   return value_at_lazy (slice_type, base);
2764 }
2765
2766
2767 static struct value *
2768 ada_value_slice (struct value *array, int low, int high)
2769 {
2770   struct type *type = ada_check_typedef (value_type (array));
2771   struct type *index_type
2772     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2773   struct type *slice_type =
2774     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2775
2776   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2777 }
2778
2779 /* If type is a record type in the form of a standard GNAT array
2780    descriptor, returns the number of dimensions for type.  If arr is a
2781    simple array, returns the number of "array of"s that prefix its
2782    type designation.  Otherwise, returns 0.  */
2783
2784 int
2785 ada_array_arity (struct type *type)
2786 {
2787   int arity;
2788
2789   if (type == NULL)
2790     return 0;
2791
2792   type = desc_base_type (type);
2793
2794   arity = 0;
2795   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2796     return desc_arity (desc_bounds_type (type));
2797   else
2798     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2799       {
2800         arity += 1;
2801         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2802       }
2803
2804   return arity;
2805 }
2806
2807 /* If TYPE is a record type in the form of a standard GNAT array
2808    descriptor or a simple array type, returns the element type for
2809    TYPE after indexing by NINDICES indices, or by all indices if
2810    NINDICES is -1.  Otherwise, returns NULL.  */
2811
2812 struct type *
2813 ada_array_element_type (struct type *type, int nindices)
2814 {
2815   type = desc_base_type (type);
2816
2817   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2818     {
2819       int k;
2820       struct type *p_array_type;
2821
2822       p_array_type = desc_data_target_type (type);
2823
2824       k = ada_array_arity (type);
2825       if (k == 0)
2826         return NULL;
2827
2828       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2829       if (nindices >= 0 && k > nindices)
2830         k = nindices;
2831       while (k > 0 && p_array_type != NULL)
2832         {
2833           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2834           k -= 1;
2835         }
2836       return p_array_type;
2837     }
2838   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2839     {
2840       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2841         {
2842           type = TYPE_TARGET_TYPE (type);
2843           nindices -= 1;
2844         }
2845       return type;
2846     }
2847
2848   return NULL;
2849 }
2850
2851 /* The type of nth index in arrays of given type (n numbering from 1).
2852    Does not examine memory.  Throws an error if N is invalid or TYPE
2853    is not an array type.  NAME is the name of the Ada attribute being
2854    evaluated ('range, 'first, 'last, or 'length); it is used in building
2855    the error message.  */
2856
2857 static struct type *
2858 ada_index_type (struct type *type, int n, const char *name)
2859 {
2860   struct type *result_type;
2861
2862   type = desc_base_type (type);
2863
2864   if (n < 0 || n > ada_array_arity (type))
2865     error (_("invalid dimension number to '%s"), name);
2866
2867   if (ada_is_simple_array_type (type))
2868     {
2869       int i;
2870
2871       for (i = 1; i < n; i += 1)
2872         type = TYPE_TARGET_TYPE (type);
2873       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2874       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2875          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2876          perhaps stabsread.c would make more sense.  */
2877       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2878         result_type = NULL;
2879     }
2880   else
2881     {
2882       result_type = desc_index_type (desc_bounds_type (type), n);
2883       if (result_type == NULL)
2884         error (_("attempt to take bound of something that is not an array"));
2885     }
2886
2887   return result_type;
2888 }
2889
2890 /* Given that arr is an array type, returns the lower bound of the
2891    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2892    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2893    array-descriptor type.  It works for other arrays with bounds supplied
2894    by run-time quantities other than discriminants.  */
2895
2896 static LONGEST
2897 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2898 {
2899   struct type *type, *index_type_desc, *index_type;
2900   int i;
2901
2902   gdb_assert (which == 0 || which == 1);
2903
2904   if (ada_is_constrained_packed_array_type (arr_type))
2905     arr_type = decode_constrained_packed_array_type (arr_type);
2906
2907   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2908     return (LONGEST) - which;
2909
2910   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2911     type = TYPE_TARGET_TYPE (arr_type);
2912   else
2913     type = arr_type;
2914
2915   index_type_desc = ada_find_parallel_type (type, "___XA");
2916   ada_fixup_array_indexes_type (index_type_desc);
2917   if (index_type_desc != NULL)
2918     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2919                                       NULL);
2920   else
2921     {
2922       struct type *elt_type = check_typedef (type);
2923
2924       for (i = 1; i < n; i++)
2925         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2926
2927       index_type = TYPE_INDEX_TYPE (elt_type);
2928     }
2929
2930   return
2931     (LONGEST) (which == 0
2932                ? ada_discrete_type_low_bound (index_type)
2933                : ada_discrete_type_high_bound (index_type));
2934 }
2935
2936 /* Given that arr is an array value, returns the lower bound of the
2937    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2938    WHICH is 1.  This routine will also work for arrays with bounds
2939    supplied by run-time quantities other than discriminants.  */
2940
2941 static LONGEST
2942 ada_array_bound (struct value *arr, int n, int which)
2943 {
2944   struct type *arr_type = value_type (arr);
2945
2946   if (ada_is_constrained_packed_array_type (arr_type))
2947     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2948   else if (ada_is_simple_array_type (arr_type))
2949     return ada_array_bound_from_type (arr_type, n, which);
2950   else
2951     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2952 }
2953
2954 /* Given that arr is an array value, returns the length of the
2955    nth index.  This routine will also work for arrays with bounds
2956    supplied by run-time quantities other than discriminants.
2957    Does not work for arrays indexed by enumeration types with representation
2958    clauses at the moment.  */
2959
2960 static LONGEST
2961 ada_array_length (struct value *arr, int n)
2962 {
2963   struct type *arr_type = ada_check_typedef (value_type (arr));
2964
2965   if (ada_is_constrained_packed_array_type (arr_type))
2966     return ada_array_length (decode_constrained_packed_array (arr), n);
2967
2968   if (ada_is_simple_array_type (arr_type))
2969     return (ada_array_bound_from_type (arr_type, n, 1)
2970             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2971   else
2972     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2973             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2974 }
2975
2976 /* An empty array whose type is that of ARR_TYPE (an array type),
2977    with bounds LOW to LOW-1.  */
2978
2979 static struct value *
2980 empty_array (struct type *arr_type, int low)
2981 {
2982   struct type *arr_type0 = ada_check_typedef (arr_type);
2983   struct type *index_type
2984     = create_static_range_type
2985         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
2986   struct type *elt_type = ada_array_element_type (arr_type0, 1);
2987
2988   return allocate_value (create_array_type (NULL, elt_type, index_type));
2989 }
2990 \f
2991
2992                                 /* Name resolution */
2993
2994 /* The "decoded" name for the user-definable Ada operator corresponding
2995    to OP.  */
2996
2997 static const char *
2998 ada_decoded_op_name (enum exp_opcode op)
2999 {
3000   int i;
3001
3002   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3003     {
3004       if (ada_opname_table[i].op == op)
3005         return ada_opname_table[i].decoded;
3006     }
3007   error (_("Could not find operator name for opcode"));
3008 }
3009
3010
3011 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3012    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3013    undefined namespace) and converts operators that are
3014    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3015    non-null, it provides a preferred result type [at the moment, only
3016    type void has any effect---causing procedures to be preferred over
3017    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3018    return type is preferred.  May change (expand) *EXP.  */
3019
3020 static void
3021 resolve (struct expression **expp, int void_context_p)
3022 {
3023   struct type *context_type = NULL;
3024   int pc = 0;
3025
3026   if (void_context_p)
3027     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3028
3029   resolve_subexp (expp, &pc, 1, context_type);
3030 }
3031
3032 /* Resolve the operator of the subexpression beginning at
3033    position *POS of *EXPP.  "Resolving" consists of replacing
3034    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3035    with their resolutions, replacing built-in operators with
3036    function calls to user-defined operators, where appropriate, and,
3037    when DEPROCEDURE_P is non-zero, converting function-valued variables
3038    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3039    are as in ada_resolve, above.  */
3040
3041 static struct value *
3042 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3043                 struct type *context_type)
3044 {
3045   int pc = *pos;
3046   int i;
3047   struct expression *exp;       /* Convenience: == *expp.  */
3048   enum exp_opcode op = (*expp)->elts[pc].opcode;
3049   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3050   int nargs;                    /* Number of operands.  */
3051   int oplen;
3052
3053   argvec = NULL;
3054   nargs = 0;
3055   exp = *expp;
3056
3057   /* Pass one: resolve operands, saving their types and updating *pos,
3058      if needed.  */
3059   switch (op)
3060     {
3061     case OP_FUNCALL:
3062       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3063           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3064         *pos += 7;
3065       else
3066         {
3067           *pos += 3;
3068           resolve_subexp (expp, pos, 0, NULL);
3069         }
3070       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3071       break;
3072
3073     case UNOP_ADDR:
3074       *pos += 1;
3075       resolve_subexp (expp, pos, 0, NULL);
3076       break;
3077
3078     case UNOP_QUAL:
3079       *pos += 3;
3080       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3081       break;
3082
3083     case OP_ATR_MODULUS:
3084     case OP_ATR_SIZE:
3085     case OP_ATR_TAG:
3086     case OP_ATR_FIRST:
3087     case OP_ATR_LAST:
3088     case OP_ATR_LENGTH:
3089     case OP_ATR_POS:
3090     case OP_ATR_VAL:
3091     case OP_ATR_MIN:
3092     case OP_ATR_MAX:
3093     case TERNOP_IN_RANGE:
3094     case BINOP_IN_BOUNDS:
3095     case UNOP_IN_RANGE:
3096     case OP_AGGREGATE:
3097     case OP_OTHERS:
3098     case OP_CHOICES:
3099     case OP_POSITIONAL:
3100     case OP_DISCRETE_RANGE:
3101     case OP_NAME:
3102       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3103       *pos += oplen;
3104       break;
3105
3106     case BINOP_ASSIGN:
3107       {
3108         struct value *arg1;
3109
3110         *pos += 1;
3111         arg1 = resolve_subexp (expp, pos, 0, NULL);
3112         if (arg1 == NULL)
3113           resolve_subexp (expp, pos, 1, NULL);
3114         else
3115           resolve_subexp (expp, pos, 1, value_type (arg1));
3116         break;
3117       }
3118
3119     case UNOP_CAST:
3120       *pos += 3;
3121       nargs = 1;
3122       break;
3123
3124     case BINOP_ADD:
3125     case BINOP_SUB:
3126     case BINOP_MUL:
3127     case BINOP_DIV:
3128     case BINOP_REM:
3129     case BINOP_MOD:
3130     case BINOP_EXP:
3131     case BINOP_CONCAT:
3132     case BINOP_LOGICAL_AND:
3133     case BINOP_LOGICAL_OR:
3134     case BINOP_BITWISE_AND:
3135     case BINOP_BITWISE_IOR:
3136     case BINOP_BITWISE_XOR:
3137
3138     case BINOP_EQUAL:
3139     case BINOP_NOTEQUAL:
3140     case BINOP_LESS:
3141     case BINOP_GTR:
3142     case BINOP_LEQ:
3143     case BINOP_GEQ:
3144
3145     case BINOP_REPEAT:
3146     case BINOP_SUBSCRIPT:
3147     case BINOP_COMMA:
3148       *pos += 1;
3149       nargs = 2;
3150       break;
3151
3152     case UNOP_NEG:
3153     case UNOP_PLUS:
3154     case UNOP_LOGICAL_NOT:
3155     case UNOP_ABS:
3156     case UNOP_IND:
3157       *pos += 1;
3158       nargs = 1;
3159       break;
3160
3161     case OP_LONG:
3162     case OP_DOUBLE:
3163     case OP_VAR_VALUE:
3164       *pos += 4;
3165       break;
3166
3167     case OP_TYPE:
3168     case OP_BOOL:
3169     case OP_LAST:
3170     case OP_INTERNALVAR:
3171       *pos += 3;
3172       break;
3173
3174     case UNOP_MEMVAL:
3175       *pos += 3;
3176       nargs = 1;
3177       break;
3178
3179     case OP_REGISTER:
3180       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3181       break;
3182
3183     case STRUCTOP_STRUCT:
3184       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3185       nargs = 1;
3186       break;
3187
3188     case TERNOP_SLICE:
3189       *pos += 1;
3190       nargs = 3;
3191       break;
3192
3193     case OP_STRING:
3194       break;
3195
3196     default:
3197       error (_("Unexpected operator during name resolution"));
3198     }
3199
3200   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3201   for (i = 0; i < nargs; i += 1)
3202     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3203   argvec[i] = NULL;
3204   exp = *expp;
3205
3206   /* Pass two: perform any resolution on principal operator.  */
3207   switch (op)
3208     {
3209     default:
3210       break;
3211
3212     case OP_VAR_VALUE:
3213       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3214         {
3215           struct ada_symbol_info *candidates;
3216           int n_candidates;
3217
3218           n_candidates =
3219             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3220                                     (exp->elts[pc + 2].symbol),
3221                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3222                                     &candidates);
3223
3224           if (n_candidates > 1)
3225             {
3226               /* Types tend to get re-introduced locally, so if there
3227                  are any local symbols that are not types, first filter
3228                  out all types.  */
3229               int j;
3230               for (j = 0; j < n_candidates; j += 1)
3231                 switch (SYMBOL_CLASS (candidates[j].sym))
3232                   {
3233                   case LOC_REGISTER:
3234                   case LOC_ARG:
3235                   case LOC_REF_ARG:
3236                   case LOC_REGPARM_ADDR:
3237                   case LOC_LOCAL:
3238                   case LOC_COMPUTED:
3239                     goto FoundNonType;
3240                   default:
3241                     break;
3242                   }
3243             FoundNonType:
3244               if (j < n_candidates)
3245                 {
3246                   j = 0;
3247                   while (j < n_candidates)
3248                     {
3249                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3250                         {
3251                           candidates[j] = candidates[n_candidates - 1];
3252                           n_candidates -= 1;
3253                         }
3254                       else
3255                         j += 1;
3256                     }
3257                 }
3258             }
3259
3260           if (n_candidates == 0)
3261             error (_("No definition found for %s"),
3262                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3263           else if (n_candidates == 1)
3264             i = 0;
3265           else if (deprocedure_p
3266                    && !is_nonfunction (candidates, n_candidates))
3267             {
3268               i = ada_resolve_function
3269                 (candidates, n_candidates, NULL, 0,
3270                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3271                  context_type);
3272               if (i < 0)
3273                 error (_("Could not find a match for %s"),
3274                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3275             }
3276           else
3277             {
3278               printf_filtered (_("Multiple matches for %s\n"),
3279                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3280               user_select_syms (candidates, n_candidates, 1);
3281               i = 0;
3282             }
3283
3284           exp->elts[pc + 1].block = candidates[i].block;
3285           exp->elts[pc + 2].symbol = candidates[i].sym;
3286           if (innermost_block == NULL
3287               || contained_in (candidates[i].block, innermost_block))
3288             innermost_block = candidates[i].block;
3289         }
3290
3291       if (deprocedure_p
3292           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3293               == TYPE_CODE_FUNC))
3294         {
3295           replace_operator_with_call (expp, pc, 0, 0,
3296                                       exp->elts[pc + 2].symbol,
3297                                       exp->elts[pc + 1].block);
3298           exp = *expp;
3299         }
3300       break;
3301
3302     case OP_FUNCALL:
3303       {
3304         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3305             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3306           {
3307             struct ada_symbol_info *candidates;
3308             int n_candidates;
3309
3310             n_candidates =
3311               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3312                                       (exp->elts[pc + 5].symbol),
3313                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3314                                       &candidates);
3315             if (n_candidates == 1)
3316               i = 0;
3317             else
3318               {
3319                 i = ada_resolve_function
3320                   (candidates, n_candidates,
3321                    argvec, nargs,
3322                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3323                    context_type);
3324                 if (i < 0)
3325                   error (_("Could not find a match for %s"),
3326                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3327               }
3328
3329             exp->elts[pc + 4].block = candidates[i].block;
3330             exp->elts[pc + 5].symbol = candidates[i].sym;
3331             if (innermost_block == NULL
3332                 || contained_in (candidates[i].block, innermost_block))
3333               innermost_block = candidates[i].block;
3334           }
3335       }
3336       break;
3337     case BINOP_ADD:
3338     case BINOP_SUB:
3339     case BINOP_MUL:
3340     case BINOP_DIV:
3341     case BINOP_REM:
3342     case BINOP_MOD:
3343     case BINOP_CONCAT:
3344     case BINOP_BITWISE_AND:
3345     case BINOP_BITWISE_IOR:
3346     case BINOP_BITWISE_XOR:
3347     case BINOP_EQUAL:
3348     case BINOP_NOTEQUAL:
3349     case BINOP_LESS:
3350     case BINOP_GTR:
3351     case BINOP_LEQ:
3352     case BINOP_GEQ:
3353     case BINOP_EXP:
3354     case UNOP_NEG:
3355     case UNOP_PLUS:
3356     case UNOP_LOGICAL_NOT:
3357     case UNOP_ABS:
3358       if (possible_user_operator_p (op, argvec))
3359         {
3360           struct ada_symbol_info *candidates;
3361           int n_candidates;
3362
3363           n_candidates =
3364             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3365                                     (struct block *) NULL, VAR_DOMAIN,
3366                                     &candidates);
3367           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3368                                     ada_decoded_op_name (op), NULL);
3369           if (i < 0)
3370             break;
3371
3372           replace_operator_with_call (expp, pc, nargs, 1,
3373                                       candidates[i].sym, candidates[i].block);
3374           exp = *expp;
3375         }
3376       break;
3377
3378     case OP_TYPE:
3379     case OP_REGISTER:
3380       return NULL;
3381     }
3382
3383   *pos = pc;
3384   return evaluate_subexp_type (exp, pos);
3385 }
3386
3387 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3388    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3389    a non-pointer.  */
3390 /* The term "match" here is rather loose.  The match is heuristic and
3391    liberal.  */
3392
3393 static int
3394 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3395 {
3396   ftype = ada_check_typedef (ftype);
3397   atype = ada_check_typedef (atype);
3398
3399   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3400     ftype = TYPE_TARGET_TYPE (ftype);
3401   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3402     atype = TYPE_TARGET_TYPE (atype);
3403
3404   switch (TYPE_CODE (ftype))
3405     {
3406     default:
3407       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3408     case TYPE_CODE_PTR:
3409       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3410         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3411                                TYPE_TARGET_TYPE (atype), 0);
3412       else
3413         return (may_deref
3414                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3415     case TYPE_CODE_INT:
3416     case TYPE_CODE_ENUM:
3417     case TYPE_CODE_RANGE:
3418       switch (TYPE_CODE (atype))
3419         {
3420         case TYPE_CODE_INT:
3421         case TYPE_CODE_ENUM:
3422         case TYPE_CODE_RANGE:
3423           return 1;
3424         default:
3425           return 0;
3426         }
3427
3428     case TYPE_CODE_ARRAY:
3429       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3430               || ada_is_array_descriptor_type (atype));
3431
3432     case TYPE_CODE_STRUCT:
3433       if (ada_is_array_descriptor_type (ftype))
3434         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3435                 || ada_is_array_descriptor_type (atype));
3436       else
3437         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3438                 && !ada_is_array_descriptor_type (atype));
3439
3440     case TYPE_CODE_UNION:
3441     case TYPE_CODE_FLT:
3442       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3443     }
3444 }
3445
3446 /* Return non-zero if the formals of FUNC "sufficiently match" the
3447    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3448    may also be an enumeral, in which case it is treated as a 0-
3449    argument function.  */
3450
3451 static int
3452 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3453 {
3454   int i;
3455   struct type *func_type = SYMBOL_TYPE (func);
3456
3457   if (SYMBOL_CLASS (func) == LOC_CONST
3458       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3459     return (n_actuals == 0);
3460   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3461     return 0;
3462
3463   if (TYPE_NFIELDS (func_type) != n_actuals)
3464     return 0;
3465
3466   for (i = 0; i < n_actuals; i += 1)
3467     {
3468       if (actuals[i] == NULL)
3469         return 0;
3470       else
3471         {
3472           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3473                                                                    i));
3474           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3475
3476           if (!ada_type_match (ftype, atype, 1))
3477             return 0;
3478         }
3479     }
3480   return 1;
3481 }
3482
3483 /* False iff function type FUNC_TYPE definitely does not produce a value
3484    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3485    FUNC_TYPE is not a valid function type with a non-null return type
3486    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3487
3488 static int
3489 return_match (struct type *func_type, struct type *context_type)
3490 {
3491   struct type *return_type;
3492
3493   if (func_type == NULL)
3494     return 1;
3495
3496   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3497     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3498   else
3499     return_type = get_base_type (func_type);
3500   if (return_type == NULL)
3501     return 1;
3502
3503   context_type = get_base_type (context_type);
3504
3505   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3506     return context_type == NULL || return_type == context_type;
3507   else if (context_type == NULL)
3508     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3509   else
3510     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3511 }
3512
3513
3514 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3515    function (if any) that matches the types of the NARGS arguments in
3516    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3517    that returns that type, then eliminate matches that don't.  If
3518    CONTEXT_TYPE is void and there is at least one match that does not
3519    return void, eliminate all matches that do.
3520
3521    Asks the user if there is more than one match remaining.  Returns -1
3522    if there is no such symbol or none is selected.  NAME is used
3523    solely for messages.  May re-arrange and modify SYMS in
3524    the process; the index returned is for the modified vector.  */
3525
3526 static int
3527 ada_resolve_function (struct ada_symbol_info syms[],
3528                       int nsyms, struct value **args, int nargs,
3529                       const char *name, struct type *context_type)
3530 {
3531   int fallback;
3532   int k;
3533   int m;                        /* Number of hits */
3534
3535   m = 0;
3536   /* In the first pass of the loop, we only accept functions matching
3537      context_type.  If none are found, we add a second pass of the loop
3538      where every function is accepted.  */
3539   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3540     {
3541       for (k = 0; k < nsyms; k += 1)
3542         {
3543           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3544
3545           if (ada_args_match (syms[k].sym, args, nargs)
3546               && (fallback || return_match (type, context_type)))
3547             {
3548               syms[m] = syms[k];
3549               m += 1;
3550             }
3551         }
3552     }
3553
3554   if (m == 0)
3555     return -1;
3556   else if (m > 1)
3557     {
3558       printf_filtered (_("Multiple matches for %s\n"), name);
3559       user_select_syms (syms, m, 1);
3560       return 0;
3561     }
3562   return 0;
3563 }
3564
3565 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3566    in a listing of choices during disambiguation (see sort_choices, below).
3567    The idea is that overloadings of a subprogram name from the
3568    same package should sort in their source order.  We settle for ordering
3569    such symbols by their trailing number (__N  or $N).  */
3570
3571 static int
3572 encoded_ordered_before (const char *N0, const char *N1)
3573 {
3574   if (N1 == NULL)
3575     return 0;
3576   else if (N0 == NULL)
3577     return 1;
3578   else
3579     {
3580       int k0, k1;
3581
3582       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3583         ;
3584       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3585         ;
3586       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3587           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3588         {
3589           int n0, n1;
3590
3591           n0 = k0;
3592           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3593             n0 -= 1;
3594           n1 = k1;
3595           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3596             n1 -= 1;
3597           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3598             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3599         }
3600       return (strcmp (N0, N1) < 0);
3601     }
3602 }
3603
3604 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3605    encoded names.  */
3606
3607 static void
3608 sort_choices (struct ada_symbol_info syms[], int nsyms)
3609 {
3610   int i;
3611
3612   for (i = 1; i < nsyms; i += 1)
3613     {
3614       struct ada_symbol_info sym = syms[i];
3615       int j;
3616
3617       for (j = i - 1; j >= 0; j -= 1)
3618         {
3619           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3620                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3621             break;
3622           syms[j + 1] = syms[j];
3623         }
3624       syms[j + 1] = sym;
3625     }
3626 }
3627
3628 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3629    by asking the user (if necessary), returning the number selected, 
3630    and setting the first elements of SYMS items.  Error if no symbols
3631    selected.  */
3632
3633 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3634    to be re-integrated one of these days.  */
3635
3636 int
3637 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3638 {
3639   int i;
3640   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3641   int n_chosen;
3642   int first_choice = (max_results == 1) ? 1 : 2;
3643   const char *select_mode = multiple_symbols_select_mode ();
3644
3645   if (max_results < 1)
3646     error (_("Request to select 0 symbols!"));
3647   if (nsyms <= 1)
3648     return nsyms;
3649
3650   if (select_mode == multiple_symbols_cancel)
3651     error (_("\
3652 canceled because the command is ambiguous\n\
3653 See set/show multiple-symbol."));
3654   
3655   /* If select_mode is "all", then return all possible symbols.
3656      Only do that if more than one symbol can be selected, of course.
3657      Otherwise, display the menu as usual.  */
3658   if (select_mode == multiple_symbols_all && max_results > 1)
3659     return nsyms;
3660
3661   printf_unfiltered (_("[0] cancel\n"));
3662   if (max_results > 1)
3663     printf_unfiltered (_("[1] all\n"));
3664
3665   sort_choices (syms, nsyms);
3666
3667   for (i = 0; i < nsyms; i += 1)
3668     {
3669       if (syms[i].sym == NULL)
3670         continue;
3671
3672       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3673         {
3674           struct symtab_and_line sal =
3675             find_function_start_sal (syms[i].sym, 1);
3676
3677           if (sal.symtab == NULL)
3678             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3679                                i + first_choice,
3680                                SYMBOL_PRINT_NAME (syms[i].sym),
3681                                sal.line);
3682           else
3683             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3684                                SYMBOL_PRINT_NAME (syms[i].sym),
3685                                symtab_to_filename_for_display (sal.symtab),
3686                                sal.line);
3687           continue;
3688         }
3689       else
3690         {
3691           int is_enumeral =
3692             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3693              && SYMBOL_TYPE (syms[i].sym) != NULL
3694              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3695           struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
3696
3697           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3698             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3699                                i + first_choice,
3700                                SYMBOL_PRINT_NAME (syms[i].sym),
3701                                symtab_to_filename_for_display (symtab),
3702                                SYMBOL_LINE (syms[i].sym));
3703           else if (is_enumeral
3704                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3705             {
3706               printf_unfiltered (("[%d] "), i + first_choice);
3707               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3708                               gdb_stdout, -1, 0, &type_print_raw_options);
3709               printf_unfiltered (_("'(%s) (enumeral)\n"),
3710                                  SYMBOL_PRINT_NAME (syms[i].sym));
3711             }
3712           else if (symtab != NULL)
3713             printf_unfiltered (is_enumeral
3714                                ? _("[%d] %s in %s (enumeral)\n")
3715                                : _("[%d] %s at %s:?\n"),
3716                                i + first_choice,
3717                                SYMBOL_PRINT_NAME (syms[i].sym),
3718                                symtab_to_filename_for_display (symtab));
3719           else
3720             printf_unfiltered (is_enumeral
3721                                ? _("[%d] %s (enumeral)\n")
3722                                : _("[%d] %s at ?\n"),
3723                                i + first_choice,
3724                                SYMBOL_PRINT_NAME (syms[i].sym));
3725         }
3726     }
3727
3728   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3729                              "overload-choice");
3730
3731   for (i = 0; i < n_chosen; i += 1)
3732     syms[i] = syms[chosen[i]];
3733
3734   return n_chosen;
3735 }
3736
3737 /* Read and validate a set of numeric choices from the user in the
3738    range 0 .. N_CHOICES-1.  Place the results in increasing
3739    order in CHOICES[0 .. N-1], and return N.
3740
3741    The user types choices as a sequence of numbers on one line
3742    separated by blanks, encoding them as follows:
3743
3744      + A choice of 0 means to cancel the selection, throwing an error.
3745      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3746      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3747
3748    The user is not allowed to choose more than MAX_RESULTS values.
3749
3750    ANNOTATION_SUFFIX, if present, is used to annotate the input
3751    prompts (for use with the -f switch).  */
3752
3753 int
3754 get_selections (int *choices, int n_choices, int max_results,
3755                 int is_all_choice, char *annotation_suffix)
3756 {
3757   char *args;
3758   char *prompt;
3759   int n_chosen;
3760   int first_choice = is_all_choice ? 2 : 1;
3761
3762   prompt = getenv ("PS2");
3763   if (prompt == NULL)
3764     prompt = "> ";
3765
3766   args = command_line_input (prompt, 0, annotation_suffix);
3767
3768   if (args == NULL)
3769     error_no_arg (_("one or more choice numbers"));
3770
3771   n_chosen = 0;
3772
3773   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3774      order, as given in args.  Choices are validated.  */
3775   while (1)
3776     {
3777       char *args2;
3778       int choice, j;
3779
3780       args = skip_spaces (args);
3781       if (*args == '\0' && n_chosen == 0)
3782         error_no_arg (_("one or more choice numbers"));
3783       else if (*args == '\0')
3784         break;
3785
3786       choice = strtol (args, &args2, 10);
3787       if (args == args2 || choice < 0
3788           || choice > n_choices + first_choice - 1)
3789         error (_("Argument must be choice number"));
3790       args = args2;
3791
3792       if (choice == 0)
3793         error (_("cancelled"));
3794
3795       if (choice < first_choice)
3796         {
3797           n_chosen = n_choices;
3798           for (j = 0; j < n_choices; j += 1)
3799             choices[j] = j;
3800           break;
3801         }
3802       choice -= first_choice;
3803
3804       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3805         {
3806         }
3807
3808       if (j < 0 || choice != choices[j])
3809         {
3810           int k;
3811
3812           for (k = n_chosen - 1; k > j; k -= 1)
3813             choices[k + 1] = choices[k];
3814           choices[j + 1] = choice;
3815           n_chosen += 1;
3816         }
3817     }
3818
3819   if (n_chosen > max_results)
3820     error (_("Select no more than %d of the above"), max_results);
3821
3822   return n_chosen;
3823 }
3824
3825 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3826    on the function identified by SYM and BLOCK, and taking NARGS
3827    arguments.  Update *EXPP as needed to hold more space.  */
3828
3829 static void
3830 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3831                             int oplen, struct symbol *sym,
3832                             const struct block *block)
3833 {
3834   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3835      symbol, -oplen for operator being replaced).  */
3836   struct expression *newexp = (struct expression *)
3837     xzalloc (sizeof (struct expression)
3838              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3839   struct expression *exp = *expp;
3840
3841   newexp->nelts = exp->nelts + 7 - oplen;
3842   newexp->language_defn = exp->language_defn;
3843   newexp->gdbarch = exp->gdbarch;
3844   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3845   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3846           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3847
3848   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3849   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3850
3851   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3852   newexp->elts[pc + 4].block = block;
3853   newexp->elts[pc + 5].symbol = sym;
3854
3855   *expp = newexp;
3856   xfree (exp);
3857 }
3858
3859 /* Type-class predicates */
3860
3861 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3862    or FLOAT).  */
3863
3864 static int
3865 numeric_type_p (struct type *type)
3866 {
3867   if (type == NULL)
3868     return 0;
3869   else
3870     {
3871       switch (TYPE_CODE (type))
3872         {
3873         case TYPE_CODE_INT:
3874         case TYPE_CODE_FLT:
3875           return 1;
3876         case TYPE_CODE_RANGE:
3877           return (type == TYPE_TARGET_TYPE (type)
3878                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3879         default:
3880           return 0;
3881         }
3882     }
3883 }
3884
3885 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3886
3887 static int
3888 integer_type_p (struct type *type)
3889 {
3890   if (type == NULL)
3891     return 0;
3892   else
3893     {
3894       switch (TYPE_CODE (type))
3895         {
3896         case TYPE_CODE_INT:
3897           return 1;
3898         case TYPE_CODE_RANGE:
3899           return (type == TYPE_TARGET_TYPE (type)
3900                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3901         default:
3902           return 0;
3903         }
3904     }
3905 }
3906
3907 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3908
3909 static int
3910 scalar_type_p (struct type *type)
3911 {
3912   if (type == NULL)
3913     return 0;
3914   else
3915     {
3916       switch (TYPE_CODE (type))
3917         {
3918         case TYPE_CODE_INT:
3919         case TYPE_CODE_RANGE:
3920         case TYPE_CODE_ENUM:
3921         case TYPE_CODE_FLT:
3922           return 1;
3923         default:
3924           return 0;
3925         }
3926     }
3927 }
3928
3929 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3930
3931 static int
3932 discrete_type_p (struct type *type)
3933 {
3934   if (type == NULL)
3935     return 0;
3936   else
3937     {
3938       switch (TYPE_CODE (type))
3939         {
3940         case TYPE_CODE_INT:
3941         case TYPE_CODE_RANGE:
3942         case TYPE_CODE_ENUM:
3943         case TYPE_CODE_BOOL:
3944           return 1;
3945         default:
3946           return 0;
3947         }
3948     }
3949 }
3950
3951 /* Returns non-zero if OP with operands in the vector ARGS could be
3952    a user-defined function.  Errs on the side of pre-defined operators
3953    (i.e., result 0).  */
3954
3955 static int
3956 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3957 {
3958   struct type *type0 =
3959     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3960   struct type *type1 =
3961     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3962
3963   if (type0 == NULL)
3964     return 0;
3965
3966   switch (op)
3967     {
3968     default:
3969       return 0;
3970
3971     case BINOP_ADD:
3972     case BINOP_SUB:
3973     case BINOP_MUL:
3974     case BINOP_DIV:
3975       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3976
3977     case BINOP_REM:
3978     case BINOP_MOD:
3979     case BINOP_BITWISE_AND:
3980     case BINOP_BITWISE_IOR:
3981     case BINOP_BITWISE_XOR:
3982       return (!(integer_type_p (type0) && integer_type_p (type1)));
3983
3984     case BINOP_EQUAL:
3985     case BINOP_NOTEQUAL:
3986     case BINOP_LESS:
3987     case BINOP_GTR:
3988     case BINOP_LEQ:
3989     case BINOP_GEQ:
3990       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3991
3992     case BINOP_CONCAT:
3993       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3994
3995     case BINOP_EXP:
3996       return (!(numeric_type_p (type0) && integer_type_p (type1)));
3997
3998     case UNOP_NEG:
3999     case UNOP_PLUS:
4000     case UNOP_LOGICAL_NOT:
4001     case UNOP_ABS:
4002       return (!numeric_type_p (type0));
4003
4004     }
4005 }
4006 \f
4007                                 /* Renaming */
4008
4009 /* NOTES: 
4010
4011    1. In the following, we assume that a renaming type's name may
4012       have an ___XD suffix.  It would be nice if this went away at some
4013       point.
4014    2. We handle both the (old) purely type-based representation of 
4015       renamings and the (new) variable-based encoding.  At some point,
4016       it is devoutly to be hoped that the former goes away 
4017       (FIXME: hilfinger-2007-07-09).
4018    3. Subprogram renamings are not implemented, although the XRS
4019       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4020
4021 /* If SYM encodes a renaming, 
4022
4023        <renaming> renames <renamed entity>,
4024
4025    sets *LEN to the length of the renamed entity's name,
4026    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4027    the string describing the subcomponent selected from the renamed
4028    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4029    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4030    are undefined).  Otherwise, returns a value indicating the category
4031    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4032    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4033    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4034    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4035    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4036    may be NULL, in which case they are not assigned.
4037
4038    [Currently, however, GCC does not generate subprogram renamings.]  */
4039
4040 enum ada_renaming_category
4041 ada_parse_renaming (struct symbol *sym,
4042                     const char **renamed_entity, int *len, 
4043                     const char **renaming_expr)
4044 {
4045   enum ada_renaming_category kind;
4046   const char *info;
4047   const char *suffix;
4048
4049   if (sym == NULL)
4050     return ADA_NOT_RENAMING;
4051   switch (SYMBOL_CLASS (sym)) 
4052     {
4053     default:
4054       return ADA_NOT_RENAMING;
4055     case LOC_TYPEDEF:
4056       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4057                                        renamed_entity, len, renaming_expr);
4058     case LOC_LOCAL:
4059     case LOC_STATIC:
4060     case LOC_COMPUTED:
4061     case LOC_OPTIMIZED_OUT:
4062       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4063       if (info == NULL)
4064         return ADA_NOT_RENAMING;
4065       switch (info[5])
4066         {
4067         case '_':
4068           kind = ADA_OBJECT_RENAMING;
4069           info += 6;
4070           break;
4071         case 'E':
4072           kind = ADA_EXCEPTION_RENAMING;
4073           info += 7;
4074           break;
4075         case 'P':
4076           kind = ADA_PACKAGE_RENAMING;
4077           info += 7;
4078           break;
4079         case 'S':
4080           kind = ADA_SUBPROGRAM_RENAMING;
4081           info += 7;
4082           break;
4083         default:
4084           return ADA_NOT_RENAMING;
4085         }
4086     }
4087
4088   if (renamed_entity != NULL)
4089     *renamed_entity = info;
4090   suffix = strstr (info, "___XE");
4091   if (suffix == NULL || suffix == info)
4092     return ADA_NOT_RENAMING;
4093   if (len != NULL)
4094     *len = strlen (info) - strlen (suffix);
4095   suffix += 5;
4096   if (renaming_expr != NULL)
4097     *renaming_expr = suffix;
4098   return kind;
4099 }
4100
4101 /* Assuming TYPE encodes a renaming according to the old encoding in
4102    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4103    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4104    ADA_NOT_RENAMING otherwise.  */
4105 static enum ada_renaming_category
4106 parse_old_style_renaming (struct type *type,
4107                           const char **renamed_entity, int *len, 
4108                           const char **renaming_expr)
4109 {
4110   enum ada_renaming_category kind;
4111   const char *name;
4112   const char *info;
4113   const char *suffix;
4114
4115   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4116       || TYPE_NFIELDS (type) != 1)
4117     return ADA_NOT_RENAMING;
4118
4119   name = type_name_no_tag (type);
4120   if (name == NULL)
4121     return ADA_NOT_RENAMING;
4122   
4123   name = strstr (name, "___XR");
4124   if (name == NULL)
4125     return ADA_NOT_RENAMING;
4126   switch (name[5])
4127     {
4128     case '\0':
4129     case '_':
4130       kind = ADA_OBJECT_RENAMING;
4131       break;
4132     case 'E':
4133       kind = ADA_EXCEPTION_RENAMING;
4134       break;
4135     case 'P':
4136       kind = ADA_PACKAGE_RENAMING;
4137       break;
4138     case 'S':
4139       kind = ADA_SUBPROGRAM_RENAMING;
4140       break;
4141     default:
4142       return ADA_NOT_RENAMING;
4143     }
4144
4145   info = TYPE_FIELD_NAME (type, 0);
4146   if (info == NULL)
4147     return ADA_NOT_RENAMING;
4148   if (renamed_entity != NULL)
4149     *renamed_entity = info;
4150   suffix = strstr (info, "___XE");
4151   if (renaming_expr != NULL)
4152     *renaming_expr = suffix + 5;
4153   if (suffix == NULL || suffix == info)
4154     return ADA_NOT_RENAMING;
4155   if (len != NULL)
4156     *len = suffix - info;
4157   return kind;
4158 }
4159
4160 /* Compute the value of the given RENAMING_SYM, which is expected to
4161    be a symbol encoding a renaming expression.  BLOCK is the block
4162    used to evaluate the renaming.  */
4163
4164 static struct value *
4165 ada_read_renaming_var_value (struct symbol *renaming_sym,
4166                              const struct block *block)
4167 {
4168   const char *sym_name;
4169   struct expression *expr;
4170   struct value *value;
4171   struct cleanup *old_chain = NULL;
4172
4173   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4174   expr = parse_exp_1 (&sym_name, 0, block, 0);
4175   old_chain = make_cleanup (free_current_contents, &expr);
4176   value = evaluate_expression (expr);
4177
4178   do_cleanups (old_chain);
4179   return value;
4180 }
4181 \f
4182
4183                                 /* Evaluation: Function Calls */
4184
4185 /* Return an lvalue containing the value VAL.  This is the identity on
4186    lvalues, and otherwise has the side-effect of allocating memory
4187    in the inferior where a copy of the value contents is copied.  */
4188
4189 static struct value *
4190 ensure_lval (struct value *val)
4191 {
4192   if (VALUE_LVAL (val) == not_lval
4193       || VALUE_LVAL (val) == lval_internalvar)
4194     {
4195       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4196       const CORE_ADDR addr =
4197         value_as_long (value_allocate_space_in_inferior (len));
4198
4199       set_value_address (val, addr);
4200       VALUE_LVAL (val) = lval_memory;
4201       write_memory (addr, value_contents (val), len);
4202     }
4203
4204   return val;
4205 }
4206
4207 /* Return the value ACTUAL, converted to be an appropriate value for a
4208    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4209    allocating any necessary descriptors (fat pointers), or copies of
4210    values not residing in memory, updating it as needed.  */
4211
4212 struct value *
4213 ada_convert_actual (struct value *actual, struct type *formal_type0)
4214 {
4215   struct type *actual_type = ada_check_typedef (value_type (actual));
4216   struct type *formal_type = ada_check_typedef (formal_type0);
4217   struct type *formal_target =
4218     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4219     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4220   struct type *actual_target =
4221     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4222     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4223
4224   if (ada_is_array_descriptor_type (formal_target)
4225       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4226     return make_array_descriptor (formal_type, actual);
4227   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4228            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4229     {
4230       struct value *result;
4231
4232       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4233           && ada_is_array_descriptor_type (actual_target))
4234         result = desc_data (actual);
4235       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4236         {
4237           if (VALUE_LVAL (actual) != lval_memory)
4238             {
4239               struct value *val;
4240
4241               actual_type = ada_check_typedef (value_type (actual));
4242               val = allocate_value (actual_type);
4243               memcpy ((char *) value_contents_raw (val),
4244                       (char *) value_contents (actual),
4245                       TYPE_LENGTH (actual_type));
4246               actual = ensure_lval (val);
4247             }
4248           result = value_addr (actual);
4249         }
4250       else
4251         return actual;
4252       return value_cast_pointers (formal_type, result, 0);
4253     }
4254   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4255     return ada_value_ind (actual);
4256
4257   return actual;
4258 }
4259
4260 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4261    type TYPE.  This is usually an inefficient no-op except on some targets
4262    (such as AVR) where the representation of a pointer and an address
4263    differs.  */
4264
4265 static CORE_ADDR
4266 value_pointer (struct value *value, struct type *type)
4267 {
4268   struct gdbarch *gdbarch = get_type_arch (type);
4269   unsigned len = TYPE_LENGTH (type);
4270   gdb_byte *buf = alloca (len);
4271   CORE_ADDR addr;
4272
4273   addr = value_address (value);
4274   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4275   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4276   return addr;
4277 }
4278
4279
4280 /* Push a descriptor of type TYPE for array value ARR on the stack at
4281    *SP, updating *SP to reflect the new descriptor.  Return either
4282    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4283    to-descriptor type rather than a descriptor type), a struct value *
4284    representing a pointer to this descriptor.  */
4285
4286 static struct value *
4287 make_array_descriptor (struct type *type, struct value *arr)
4288 {
4289   struct type *bounds_type = desc_bounds_type (type);
4290   struct type *desc_type = desc_base_type (type);
4291   struct value *descriptor = allocate_value (desc_type);
4292   struct value *bounds = allocate_value (bounds_type);
4293   int i;
4294
4295   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4296        i > 0; i -= 1)
4297     {
4298       modify_field (value_type (bounds), value_contents_writeable (bounds),
4299                     ada_array_bound (arr, i, 0),
4300                     desc_bound_bitpos (bounds_type, i, 0),
4301                     desc_bound_bitsize (bounds_type, i, 0));
4302       modify_field (value_type (bounds), value_contents_writeable (bounds),
4303                     ada_array_bound (arr, i, 1),
4304                     desc_bound_bitpos (bounds_type, i, 1),
4305                     desc_bound_bitsize (bounds_type, i, 1));
4306     }
4307
4308   bounds = ensure_lval (bounds);
4309
4310   modify_field (value_type (descriptor),
4311                 value_contents_writeable (descriptor),
4312                 value_pointer (ensure_lval (arr),
4313                                TYPE_FIELD_TYPE (desc_type, 0)),
4314                 fat_pntr_data_bitpos (desc_type),
4315                 fat_pntr_data_bitsize (desc_type));
4316
4317   modify_field (value_type (descriptor),
4318                 value_contents_writeable (descriptor),
4319                 value_pointer (bounds,
4320                                TYPE_FIELD_TYPE (desc_type, 1)),
4321                 fat_pntr_bounds_bitpos (desc_type),
4322                 fat_pntr_bounds_bitsize (desc_type));
4323
4324   descriptor = ensure_lval (descriptor);
4325
4326   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4327     return value_addr (descriptor);
4328   else
4329     return descriptor;
4330 }
4331 \f
4332                                 /* Symbol Cache Module */
4333
4334 /* Performance measurements made as of 2010-01-15 indicate that
4335    this cache does bring some noticeable improvements.  Depending
4336    on the type of entity being printed, the cache can make it as much
4337    as an order of magnitude faster than without it.
4338
4339    The descriptive type DWARF extension has significantly reduced
4340    the need for this cache, at least when DWARF is being used.  However,
4341    even in this case, some expensive name-based symbol searches are still
4342    sometimes necessary - to find an XVZ variable, mostly.  */
4343
4344 /* Initialize the contents of SYM_CACHE.  */
4345
4346 static void
4347 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4348 {
4349   obstack_init (&sym_cache->cache_space);
4350   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4351 }
4352
4353 /* Free the memory used by SYM_CACHE.  */
4354
4355 static void
4356 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4357 {
4358   obstack_free (&sym_cache->cache_space, NULL);
4359   xfree (sym_cache);
4360 }
4361
4362 /* Return the symbol cache associated to the given program space PSPACE.
4363    If not allocated for this PSPACE yet, allocate and initialize one.  */
4364
4365 static struct ada_symbol_cache *
4366 ada_get_symbol_cache (struct program_space *pspace)
4367 {
4368   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4369   struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4370
4371   if (sym_cache == NULL)
4372     {
4373       sym_cache = XCNEW (struct ada_symbol_cache);
4374       ada_init_symbol_cache (sym_cache);
4375     }
4376
4377   return sym_cache;
4378 }
4379
4380 /* Clear all entries from the symbol cache.  */
4381
4382 static void
4383 ada_clear_symbol_cache (void)
4384 {
4385   struct ada_symbol_cache *sym_cache
4386     = ada_get_symbol_cache (current_program_space);
4387
4388   obstack_free (&sym_cache->cache_space, NULL);
4389   ada_init_symbol_cache (sym_cache);
4390 }
4391
4392 /* Search our cache for an entry matching NAME and NAMESPACE.
4393    Return it if found, or NULL otherwise.  */
4394
4395 static struct cache_entry **
4396 find_entry (const char *name, domain_enum namespace)
4397 {
4398   struct ada_symbol_cache *sym_cache
4399     = ada_get_symbol_cache (current_program_space);
4400   int h = msymbol_hash (name) % HASH_SIZE;
4401   struct cache_entry **e;
4402
4403   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4404     {
4405       if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4406         return e;
4407     }
4408   return NULL;
4409 }
4410
4411 /* Search the symbol cache for an entry matching NAME and NAMESPACE.
4412    Return 1 if found, 0 otherwise.
4413
4414    If an entry was found and SYM is not NULL, set *SYM to the entry's
4415    SYM.  Same principle for BLOCK if not NULL.  */
4416
4417 static int
4418 lookup_cached_symbol (const char *name, domain_enum namespace,
4419                       struct symbol **sym, const struct block **block)
4420 {
4421   struct cache_entry **e = find_entry (name, namespace);
4422
4423   if (e == NULL)
4424     return 0;
4425   if (sym != NULL)
4426     *sym = (*e)->sym;
4427   if (block != NULL)
4428     *block = (*e)->block;
4429   return 1;
4430 }
4431
4432 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4433    in domain NAMESPACE, save this result in our symbol cache.  */
4434
4435 static void
4436 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
4437               const struct block *block)
4438 {
4439   struct ada_symbol_cache *sym_cache
4440     = ada_get_symbol_cache (current_program_space);
4441   int h;
4442   char *copy;
4443   struct cache_entry *e;
4444
4445   /* If the symbol is a local symbol, then do not cache it, as a search
4446      for that symbol depends on the context.  To determine whether
4447      the symbol is local or not, we check the block where we found it
4448      against the global and static blocks of its associated symtab.  */
4449   if (sym
4450       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), GLOBAL_BLOCK) != block
4451       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), STATIC_BLOCK) != block)
4452     return;
4453
4454   h = msymbol_hash (name) % HASH_SIZE;
4455   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4456                                             sizeof (*e));
4457   e->next = sym_cache->root[h];
4458   sym_cache->root[h] = e;
4459   e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4460   strcpy (copy, name);
4461   e->sym = sym;
4462   e->namespace = namespace;
4463   e->block = block;
4464 }
4465 \f
4466                                 /* Symbol Lookup */
4467
4468 /* Return nonzero if wild matching should be used when searching for
4469    all symbols matching LOOKUP_NAME.
4470
4471    LOOKUP_NAME is expected to be a symbol name after transformation
4472    for Ada lookups (see ada_name_for_lookup).  */
4473
4474 static int
4475 should_use_wild_match (const char *lookup_name)
4476 {
4477   return (strstr (lookup_name, "__") == NULL);
4478 }
4479
4480 /* Return the result of a standard (literal, C-like) lookup of NAME in
4481    given DOMAIN, visible from lexical block BLOCK.  */
4482
4483 static struct symbol *
4484 standard_lookup (const char *name, const struct block *block,
4485                  domain_enum domain)
4486 {
4487   /* Initialize it just to avoid a GCC false warning.  */
4488   struct symbol *sym = NULL;
4489
4490   if (lookup_cached_symbol (name, domain, &sym, NULL))
4491     return sym;
4492   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4493   cache_symbol (name, domain, sym, block_found);
4494   return sym;
4495 }
4496
4497
4498 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4499    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4500    since they contend in overloading in the same way.  */
4501 static int
4502 is_nonfunction (struct ada_symbol_info syms[], int n)
4503 {
4504   int i;
4505
4506   for (i = 0; i < n; i += 1)
4507     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4508         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4509             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4510       return 1;
4511
4512   return 0;
4513 }
4514
4515 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4516    struct types.  Otherwise, they may not.  */
4517
4518 static int
4519 equiv_types (struct type *type0, struct type *type1)
4520 {
4521   if (type0 == type1)
4522     return 1;
4523   if (type0 == NULL || type1 == NULL
4524       || TYPE_CODE (type0) != TYPE_CODE (type1))
4525     return 0;
4526   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4527        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4528       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4529       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4530     return 1;
4531
4532   return 0;
4533 }
4534
4535 /* True iff SYM0 represents the same entity as SYM1, or one that is
4536    no more defined than that of SYM1.  */
4537
4538 static int
4539 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4540 {
4541   if (sym0 == sym1)
4542     return 1;
4543   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4544       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4545     return 0;
4546
4547   switch (SYMBOL_CLASS (sym0))
4548     {
4549     case LOC_UNDEF:
4550       return 1;
4551     case LOC_TYPEDEF:
4552       {
4553         struct type *type0 = SYMBOL_TYPE (sym0);
4554         struct type *type1 = SYMBOL_TYPE (sym1);
4555         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4556         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4557         int len0 = strlen (name0);
4558
4559         return
4560           TYPE_CODE (type0) == TYPE_CODE (type1)
4561           && (equiv_types (type0, type1)
4562               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4563                   && strncmp (name1 + len0, "___XV", 5) == 0));
4564       }
4565     case LOC_CONST:
4566       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4567         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4568     default:
4569       return 0;
4570     }
4571 }
4572
4573 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4574    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4575
4576 static void
4577 add_defn_to_vec (struct obstack *obstackp,
4578                  struct symbol *sym,
4579                  const struct block *block)
4580 {
4581   int i;
4582   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4583
4584   /* Do not try to complete stub types, as the debugger is probably
4585      already scanning all symbols matching a certain name at the
4586      time when this function is called.  Trying to replace the stub
4587      type by its associated full type will cause us to restart a scan
4588      which may lead to an infinite recursion.  Instead, the client
4589      collecting the matching symbols will end up collecting several
4590      matches, with at least one of them complete.  It can then filter
4591      out the stub ones if needed.  */
4592
4593   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4594     {
4595       if (lesseq_defined_than (sym, prevDefns[i].sym))
4596         return;
4597       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4598         {
4599           prevDefns[i].sym = sym;
4600           prevDefns[i].block = block;
4601           return;
4602         }
4603     }
4604
4605   {
4606     struct ada_symbol_info info;
4607
4608     info.sym = sym;
4609     info.block = block;
4610     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4611   }
4612 }
4613
4614 /* Number of ada_symbol_info structures currently collected in 
4615    current vector in *OBSTACKP.  */
4616
4617 static int
4618 num_defns_collected (struct obstack *obstackp)
4619 {
4620   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4621 }
4622
4623 /* Vector of ada_symbol_info structures currently collected in current 
4624    vector in *OBSTACKP.  If FINISH, close off the vector and return
4625    its final address.  */
4626
4627 static struct ada_symbol_info *
4628 defns_collected (struct obstack *obstackp, int finish)
4629 {
4630   if (finish)
4631     return obstack_finish (obstackp);
4632   else
4633     return (struct ada_symbol_info *) obstack_base (obstackp);
4634 }
4635
4636 /* Return a bound minimal symbol matching NAME according to Ada
4637    decoding rules.  Returns an invalid symbol if there is no such
4638    minimal symbol.  Names prefixed with "standard__" are handled
4639    specially: "standard__" is first stripped off, and only static and
4640    global symbols are searched.  */
4641
4642 struct bound_minimal_symbol
4643 ada_lookup_simple_minsym (const char *name)
4644 {
4645   struct bound_minimal_symbol result;
4646   struct objfile *objfile;
4647   struct minimal_symbol *msymbol;
4648   const int wild_match_p = should_use_wild_match (name);
4649
4650   memset (&result, 0, sizeof (result));
4651
4652   /* Special case: If the user specifies a symbol name inside package
4653      Standard, do a non-wild matching of the symbol name without
4654      the "standard__" prefix.  This was primarily introduced in order
4655      to allow the user to specifically access the standard exceptions
4656      using, for instance, Standard.Constraint_Error when Constraint_Error
4657      is ambiguous (due to the user defining its own Constraint_Error
4658      entity inside its program).  */
4659   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4660     name += sizeof ("standard__") - 1;
4661
4662   ALL_MSYMBOLS (objfile, msymbol)
4663   {
4664     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4665         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4666       {
4667         result.minsym = msymbol;
4668         result.objfile = objfile;
4669         break;
4670       }
4671   }
4672
4673   return result;
4674 }
4675
4676 /* For all subprograms that statically enclose the subprogram of the
4677    selected frame, add symbols matching identifier NAME in DOMAIN
4678    and their blocks to the list of data in OBSTACKP, as for
4679    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4680    with a wildcard prefix.  */
4681
4682 static void
4683 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4684                                   const char *name, domain_enum namespace,
4685                                   int wild_match_p)
4686 {
4687 }
4688
4689 /* True if TYPE is definitely an artificial type supplied to a symbol
4690    for which no debugging information was given in the symbol file.  */
4691
4692 static int
4693 is_nondebugging_type (struct type *type)
4694 {
4695   const char *name = ada_type_name (type);
4696
4697   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4698 }
4699
4700 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4701    that are deemed "identical" for practical purposes.
4702
4703    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4704    types and that their number of enumerals is identical (in other
4705    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4706
4707 static int
4708 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4709 {
4710   int i;
4711
4712   /* The heuristic we use here is fairly conservative.  We consider
4713      that 2 enumerate types are identical if they have the same
4714      number of enumerals and that all enumerals have the same
4715      underlying value and name.  */
4716
4717   /* All enums in the type should have an identical underlying value.  */
4718   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4719     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4720       return 0;
4721
4722   /* All enumerals should also have the same name (modulo any numerical
4723      suffix).  */
4724   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4725     {
4726       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4727       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4728       int len_1 = strlen (name_1);
4729       int len_2 = strlen (name_2);
4730
4731       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4732       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4733       if (len_1 != len_2
4734           || strncmp (TYPE_FIELD_NAME (type1, i),
4735                       TYPE_FIELD_NAME (type2, i),
4736                       len_1) != 0)
4737         return 0;
4738     }
4739
4740   return 1;
4741 }
4742
4743 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4744    that are deemed "identical" for practical purposes.  Sometimes,
4745    enumerals are not strictly identical, but their types are so similar
4746    that they can be considered identical.
4747
4748    For instance, consider the following code:
4749
4750       type Color is (Black, Red, Green, Blue, White);
4751       type RGB_Color is new Color range Red .. Blue;
4752
4753    Type RGB_Color is a subrange of an implicit type which is a copy
4754    of type Color. If we call that implicit type RGB_ColorB ("B" is
4755    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4756    As a result, when an expression references any of the enumeral
4757    by name (Eg. "print green"), the expression is technically
4758    ambiguous and the user should be asked to disambiguate. But
4759    doing so would only hinder the user, since it wouldn't matter
4760    what choice he makes, the outcome would always be the same.
4761    So, for practical purposes, we consider them as the same.  */
4762
4763 static int
4764 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4765 {
4766   int i;
4767
4768   /* Before performing a thorough comparison check of each type,
4769      we perform a series of inexpensive checks.  We expect that these
4770      checks will quickly fail in the vast majority of cases, and thus
4771      help prevent the unnecessary use of a more expensive comparison.
4772      Said comparison also expects us to make some of these checks
4773      (see ada_identical_enum_types_p).  */
4774
4775   /* Quick check: All symbols should have an enum type.  */
4776   for (i = 0; i < nsyms; i++)
4777     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4778       return 0;
4779
4780   /* Quick check: They should all have the same value.  */
4781   for (i = 1; i < nsyms; i++)
4782     if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4783       return 0;
4784
4785   /* Quick check: They should all have the same number of enumerals.  */
4786   for (i = 1; i < nsyms; i++)
4787     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4788         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4789       return 0;
4790
4791   /* All the sanity checks passed, so we might have a set of
4792      identical enumeration types.  Perform a more complete
4793      comparison of the type of each symbol.  */
4794   for (i = 1; i < nsyms; i++)
4795     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4796                                      SYMBOL_TYPE (syms[0].sym)))
4797       return 0;
4798
4799   return 1;
4800 }
4801
4802 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4803    duplicate other symbols in the list (The only case I know of where
4804    this happens is when object files containing stabs-in-ecoff are
4805    linked with files containing ordinary ecoff debugging symbols (or no
4806    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4807    Returns the number of items in the modified list.  */
4808
4809 static int
4810 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4811 {
4812   int i, j;
4813
4814   /* We should never be called with less than 2 symbols, as there
4815      cannot be any extra symbol in that case.  But it's easy to
4816      handle, since we have nothing to do in that case.  */
4817   if (nsyms < 2)
4818     return nsyms;
4819
4820   i = 0;
4821   while (i < nsyms)
4822     {
4823       int remove_p = 0;
4824
4825       /* If two symbols have the same name and one of them is a stub type,
4826          the get rid of the stub.  */
4827
4828       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4829           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4830         {
4831           for (j = 0; j < nsyms; j++)
4832             {
4833               if (j != i
4834                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4835                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4836                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4837                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4838                 remove_p = 1;
4839             }
4840         }
4841
4842       /* Two symbols with the same name, same class and same address
4843          should be identical.  */
4844
4845       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4846           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4847           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4848         {
4849           for (j = 0; j < nsyms; j += 1)
4850             {
4851               if (i != j
4852                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4853                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4854                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4855                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4856                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4857                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4858                 remove_p = 1;
4859             }
4860         }
4861       
4862       if (remove_p)
4863         {
4864           for (j = i + 1; j < nsyms; j += 1)
4865             syms[j - 1] = syms[j];
4866           nsyms -= 1;
4867         }
4868
4869       i += 1;
4870     }
4871
4872   /* If all the remaining symbols are identical enumerals, then
4873      just keep the first one and discard the rest.
4874
4875      Unlike what we did previously, we do not discard any entry
4876      unless they are ALL identical.  This is because the symbol
4877      comparison is not a strict comparison, but rather a practical
4878      comparison.  If all symbols are considered identical, then
4879      we can just go ahead and use the first one and discard the rest.
4880      But if we cannot reduce the list to a single element, we have
4881      to ask the user to disambiguate anyways.  And if we have to
4882      present a multiple-choice menu, it's less confusing if the list
4883      isn't missing some choices that were identical and yet distinct.  */
4884   if (symbols_are_identical_enums (syms, nsyms))
4885     nsyms = 1;
4886
4887   return nsyms;
4888 }
4889
4890 /* Given a type that corresponds to a renaming entity, use the type name
4891    to extract the scope (package name or function name, fully qualified,
4892    and following the GNAT encoding convention) where this renaming has been
4893    defined.  The string returned needs to be deallocated after use.  */
4894
4895 static char *
4896 xget_renaming_scope (struct type *renaming_type)
4897 {
4898   /* The renaming types adhere to the following convention:
4899      <scope>__<rename>___<XR extension>.
4900      So, to extract the scope, we search for the "___XR" extension,
4901      and then backtrack until we find the first "__".  */
4902
4903   const char *name = type_name_no_tag (renaming_type);
4904   char *suffix = strstr (name, "___XR");
4905   char *last;
4906   int scope_len;
4907   char *scope;
4908
4909   /* Now, backtrack a bit until we find the first "__".  Start looking
4910      at suffix - 3, as the <rename> part is at least one character long.  */
4911
4912   for (last = suffix - 3; last > name; last--)
4913     if (last[0] == '_' && last[1] == '_')
4914       break;
4915
4916   /* Make a copy of scope and return it.  */
4917
4918   scope_len = last - name;
4919   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4920
4921   strncpy (scope, name, scope_len);
4922   scope[scope_len] = '\0';
4923
4924   return scope;
4925 }
4926
4927 /* Return nonzero if NAME corresponds to a package name.  */
4928
4929 static int
4930 is_package_name (const char *name)
4931 {
4932   /* Here, We take advantage of the fact that no symbols are generated
4933      for packages, while symbols are generated for each function.
4934      So the condition for NAME represent a package becomes equivalent
4935      to NAME not existing in our list of symbols.  There is only one
4936      small complication with library-level functions (see below).  */
4937
4938   char *fun_name;
4939
4940   /* If it is a function that has not been defined at library level,
4941      then we should be able to look it up in the symbols.  */
4942   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4943     return 0;
4944
4945   /* Library-level function names start with "_ada_".  See if function
4946      "_ada_" followed by NAME can be found.  */
4947
4948   /* Do a quick check that NAME does not contain "__", since library-level
4949      functions names cannot contain "__" in them.  */
4950   if (strstr (name, "__") != NULL)
4951     return 0;
4952
4953   fun_name = xstrprintf ("_ada_%s", name);
4954
4955   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4956 }
4957
4958 /* Return nonzero if SYM corresponds to a renaming entity that is
4959    not visible from FUNCTION_NAME.  */
4960
4961 static int
4962 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
4963 {
4964   char *scope;
4965   struct cleanup *old_chain;
4966
4967   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4968     return 0;
4969
4970   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4971   old_chain = make_cleanup (xfree, scope);
4972
4973   /* If the rename has been defined in a package, then it is visible.  */
4974   if (is_package_name (scope))
4975     {
4976       do_cleanups (old_chain);
4977       return 0;
4978     }
4979
4980   /* Check that the rename is in the current function scope by checking
4981      that its name starts with SCOPE.  */
4982
4983   /* If the function name starts with "_ada_", it means that it is
4984      a library-level function.  Strip this prefix before doing the
4985      comparison, as the encoding for the renaming does not contain
4986      this prefix.  */
4987   if (strncmp (function_name, "_ada_", 5) == 0)
4988     function_name += 5;
4989
4990   {
4991     int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
4992
4993     do_cleanups (old_chain);
4994     return is_invisible;
4995   }
4996 }
4997
4998 /* Remove entries from SYMS that corresponds to a renaming entity that
4999    is not visible from the function associated with CURRENT_BLOCK or
5000    that is superfluous due to the presence of more specific renaming
5001    information.  Places surviving symbols in the initial entries of
5002    SYMS and returns the number of surviving symbols.
5003    
5004    Rationale:
5005    First, in cases where an object renaming is implemented as a
5006    reference variable, GNAT may produce both the actual reference
5007    variable and the renaming encoding.  In this case, we discard the
5008    latter.
5009
5010    Second, GNAT emits a type following a specified encoding for each renaming
5011    entity.  Unfortunately, STABS currently does not support the definition
5012    of types that are local to a given lexical block, so all renamings types
5013    are emitted at library level.  As a consequence, if an application
5014    contains two renaming entities using the same name, and a user tries to
5015    print the value of one of these entities, the result of the ada symbol
5016    lookup will also contain the wrong renaming type.
5017
5018    This function partially covers for this limitation by attempting to
5019    remove from the SYMS list renaming symbols that should be visible
5020    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5021    method with the current information available.  The implementation
5022    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5023    
5024       - When the user tries to print a rename in a function while there
5025         is another rename entity defined in a package:  Normally, the
5026         rename in the function has precedence over the rename in the
5027         package, so the latter should be removed from the list.  This is
5028         currently not the case.
5029         
5030       - This function will incorrectly remove valid renames if
5031         the CURRENT_BLOCK corresponds to a function which symbol name
5032         has been changed by an "Export" pragma.  As a consequence,
5033         the user will be unable to print such rename entities.  */
5034
5035 static int
5036 remove_irrelevant_renamings (struct ada_symbol_info *syms,
5037                              int nsyms, const struct block *current_block)
5038 {
5039   struct symbol *current_function;
5040   const char *current_function_name;
5041   int i;
5042   int is_new_style_renaming;
5043
5044   /* If there is both a renaming foo___XR... encoded as a variable and
5045      a simple variable foo in the same block, discard the latter.
5046      First, zero out such symbols, then compress.  */
5047   is_new_style_renaming = 0;
5048   for (i = 0; i < nsyms; i += 1)
5049     {
5050       struct symbol *sym = syms[i].sym;
5051       const struct block *block = syms[i].block;
5052       const char *name;
5053       const char *suffix;
5054
5055       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5056         continue;
5057       name = SYMBOL_LINKAGE_NAME (sym);
5058       suffix = strstr (name, "___XR");
5059
5060       if (suffix != NULL)
5061         {
5062           int name_len = suffix - name;
5063           int j;
5064
5065           is_new_style_renaming = 1;
5066           for (j = 0; j < nsyms; j += 1)
5067             if (i != j && syms[j].sym != NULL
5068                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5069                             name_len) == 0
5070                 && block == syms[j].block)
5071               syms[j].sym = NULL;
5072         }
5073     }
5074   if (is_new_style_renaming)
5075     {
5076       int j, k;
5077
5078       for (j = k = 0; j < nsyms; j += 1)
5079         if (syms[j].sym != NULL)
5080             {
5081               syms[k] = syms[j];
5082               k += 1;
5083             }
5084       return k;
5085     }
5086
5087   /* Extract the function name associated to CURRENT_BLOCK.
5088      Abort if unable to do so.  */
5089
5090   if (current_block == NULL)
5091     return nsyms;
5092
5093   current_function = block_linkage_function (current_block);
5094   if (current_function == NULL)
5095     return nsyms;
5096
5097   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5098   if (current_function_name == NULL)
5099     return nsyms;
5100
5101   /* Check each of the symbols, and remove it from the list if it is
5102      a type corresponding to a renaming that is out of the scope of
5103      the current block.  */
5104
5105   i = 0;
5106   while (i < nsyms)
5107     {
5108       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5109           == ADA_OBJECT_RENAMING
5110           && old_renaming_is_invisible (syms[i].sym, current_function_name))
5111         {
5112           int j;
5113
5114           for (j = i + 1; j < nsyms; j += 1)
5115             syms[j - 1] = syms[j];
5116           nsyms -= 1;
5117         }
5118       else
5119         i += 1;
5120     }
5121
5122   return nsyms;
5123 }
5124
5125 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5126    whose name and domain match NAME and DOMAIN respectively.
5127    If no match was found, then extend the search to "enclosing"
5128    routines (in other words, if we're inside a nested function,
5129    search the symbols defined inside the enclosing functions).
5130    If WILD_MATCH_P is nonzero, perform the naming matching in
5131    "wild" mode (see function "wild_match" for more info).
5132
5133    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5134
5135 static void
5136 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5137                        const struct block *block, domain_enum domain,
5138                        int wild_match_p)
5139 {
5140   int block_depth = 0;
5141
5142   while (block != NULL)
5143     {
5144       block_depth += 1;
5145       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5146                              wild_match_p);
5147
5148       /* If we found a non-function match, assume that's the one.  */
5149       if (is_nonfunction (defns_collected (obstackp, 0),
5150                           num_defns_collected (obstackp)))
5151         return;
5152
5153       block = BLOCK_SUPERBLOCK (block);
5154     }
5155
5156   /* If no luck so far, try to find NAME as a local symbol in some lexically
5157      enclosing subprogram.  */
5158   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5159     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5160 }
5161
5162 /* An object of this type is used as the user_data argument when
5163    calling the map_matching_symbols method.  */
5164
5165 struct match_data
5166 {
5167   struct objfile *objfile;
5168   struct obstack *obstackp;
5169   struct symbol *arg_sym;
5170   int found_sym;
5171 };
5172
5173 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5174    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5175    containing the obstack that collects the symbol list, the file that SYM
5176    must come from, a flag indicating whether a non-argument symbol has
5177    been found in the current block, and the last argument symbol
5178    passed in SYM within the current block (if any).  When SYM is null,
5179    marking the end of a block, the argument symbol is added if no
5180    other has been found.  */
5181
5182 static int
5183 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5184 {
5185   struct match_data *data = (struct match_data *) data0;
5186   
5187   if (sym == NULL)
5188     {
5189       if (!data->found_sym && data->arg_sym != NULL) 
5190         add_defn_to_vec (data->obstackp,
5191                          fixup_symbol_section (data->arg_sym, data->objfile),
5192                          block);
5193       data->found_sym = 0;
5194       data->arg_sym = NULL;
5195     }
5196   else 
5197     {
5198       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5199         return 0;
5200       else if (SYMBOL_IS_ARGUMENT (sym))
5201         data->arg_sym = sym;
5202       else
5203         {
5204           data->found_sym = 1;
5205           add_defn_to_vec (data->obstackp,
5206                            fixup_symbol_section (sym, data->objfile),
5207                            block);
5208         }
5209     }
5210   return 0;
5211 }
5212
5213 /* Implements compare_names, but only applying the comparision using
5214    the given CASING.  */
5215
5216 static int
5217 compare_names_with_case (const char *string1, const char *string2,
5218                          enum case_sensitivity casing)
5219 {
5220   while (*string1 != '\0' && *string2 != '\0')
5221     {
5222       char c1, c2;
5223
5224       if (isspace (*string1) || isspace (*string2))
5225         return strcmp_iw_ordered (string1, string2);
5226
5227       if (casing == case_sensitive_off)
5228         {
5229           c1 = tolower (*string1);
5230           c2 = tolower (*string2);
5231         }
5232       else
5233         {
5234           c1 = *string1;
5235           c2 = *string2;
5236         }
5237       if (c1 != c2)
5238         break;
5239
5240       string1 += 1;
5241       string2 += 1;
5242     }
5243
5244   switch (*string1)
5245     {
5246     case '(':
5247       return strcmp_iw_ordered (string1, string2);
5248     case '_':
5249       if (*string2 == '\0')
5250         {
5251           if (is_name_suffix (string1))
5252             return 0;
5253           else
5254             return 1;
5255         }
5256       /* FALLTHROUGH */
5257     default:
5258       if (*string2 == '(')
5259         return strcmp_iw_ordered (string1, string2);
5260       else
5261         {
5262           if (casing == case_sensitive_off)
5263             return tolower (*string1) - tolower (*string2);
5264           else
5265             return *string1 - *string2;
5266         }
5267     }
5268 }
5269
5270 /* Compare STRING1 to STRING2, with results as for strcmp.
5271    Compatible with strcmp_iw_ordered in that...
5272
5273        strcmp_iw_ordered (STRING1, STRING2) <= 0
5274
5275    ... implies...
5276
5277        compare_names (STRING1, STRING2) <= 0
5278
5279    (they may differ as to what symbols compare equal).  */
5280
5281 static int
5282 compare_names (const char *string1, const char *string2)
5283 {
5284   int result;
5285
5286   /* Similar to what strcmp_iw_ordered does, we need to perform
5287      a case-insensitive comparison first, and only resort to
5288      a second, case-sensitive, comparison if the first one was
5289      not sufficient to differentiate the two strings.  */
5290
5291   result = compare_names_with_case (string1, string2, case_sensitive_off);
5292   if (result == 0)
5293     result = compare_names_with_case (string1, string2, case_sensitive_on);
5294
5295   return result;
5296 }
5297
5298 /* Add to OBSTACKP all non-local symbols whose name and domain match
5299    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5300    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5301
5302 static void
5303 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5304                       domain_enum domain, int global,
5305                       int is_wild_match)
5306 {
5307   struct objfile *objfile;
5308   struct match_data data;
5309
5310   memset (&data, 0, sizeof data);
5311   data.obstackp = obstackp;
5312
5313   ALL_OBJFILES (objfile)
5314     {
5315       data.objfile = objfile;
5316
5317       if (is_wild_match)
5318         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5319                                                aux_add_nonlocal_symbols, &data,
5320                                                wild_match, NULL);
5321       else
5322         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5323                                                aux_add_nonlocal_symbols, &data,
5324                                                full_match, compare_names);
5325     }
5326
5327   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5328     {
5329       ALL_OBJFILES (objfile)
5330         {
5331           char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5332           strcpy (name1, "_ada_");
5333           strcpy (name1 + sizeof ("_ada_") - 1, name);
5334           data.objfile = objfile;
5335           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5336                                                  global,
5337                                                  aux_add_nonlocal_symbols,
5338                                                  &data,
5339                                                  full_match, compare_names);
5340         }
5341     }           
5342 }
5343
5344 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5345    non-zero, enclosing scope and in global scopes, returning the number of
5346    matches.
5347    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5348    indicating the symbols found and the blocks and symbol tables (if
5349    any) in which they were found.  This vector is transient---good only to
5350    the next call of ada_lookup_symbol_list.
5351
5352    When full_search is non-zero, any non-function/non-enumeral
5353    symbol match within the nest of blocks whose innermost member is BLOCK0,
5354    is the one match returned (no other matches in that or
5355    enclosing blocks is returned).  If there are any matches in or
5356    surrounding BLOCK0, then these alone are returned.
5357
5358    Names prefixed with "standard__" are handled specially: "standard__"
5359    is first stripped off, and only static and global symbols are searched.  */
5360
5361 static int
5362 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5363                                domain_enum namespace,
5364                                struct ada_symbol_info **results,
5365                                int full_search)
5366 {
5367   struct symbol *sym;
5368   const struct block *block;
5369   const char *name;
5370   const int wild_match_p = should_use_wild_match (name0);
5371   int cacheIfUnique;
5372   int ndefns;
5373
5374   obstack_free (&symbol_list_obstack, NULL);
5375   obstack_init (&symbol_list_obstack);
5376
5377   cacheIfUnique = 0;
5378
5379   /* Search specified block and its superiors.  */
5380
5381   name = name0;
5382   block = block0;
5383
5384   /* Special case: If the user specifies a symbol name inside package
5385      Standard, do a non-wild matching of the symbol name without
5386      the "standard__" prefix.  This was primarily introduced in order
5387      to allow the user to specifically access the standard exceptions
5388      using, for instance, Standard.Constraint_Error when Constraint_Error
5389      is ambiguous (due to the user defining its own Constraint_Error
5390      entity inside its program).  */
5391   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5392     {
5393       block = NULL;
5394       name = name0 + sizeof ("standard__") - 1;
5395     }
5396
5397   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5398
5399   if (block != NULL)
5400     {
5401       if (full_search)
5402         {
5403           ada_add_local_symbols (&symbol_list_obstack, name, block,
5404                                  namespace, wild_match_p);
5405         }
5406       else
5407         {
5408           /* In the !full_search case we're are being called by
5409              ada_iterate_over_symbols, and we don't want to search
5410              superblocks.  */
5411           ada_add_block_symbols (&symbol_list_obstack, block, name,
5412                                  namespace, NULL, wild_match_p);
5413         }
5414       if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5415         goto done;
5416     }
5417
5418   /* No non-global symbols found.  Check our cache to see if we have
5419      already performed this search before.  If we have, then return
5420      the same result.  */
5421
5422   cacheIfUnique = 1;
5423   if (lookup_cached_symbol (name0, namespace, &sym, &block))
5424     {
5425       if (sym != NULL)
5426         add_defn_to_vec (&symbol_list_obstack, sym, block);
5427       goto done;
5428     }
5429
5430   /* Search symbols from all global blocks.  */
5431  
5432   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5433                         wild_match_p);
5434
5435   /* Now add symbols from all per-file blocks if we've gotten no hits
5436      (not strictly correct, but perhaps better than an error).  */
5437
5438   if (num_defns_collected (&symbol_list_obstack) == 0)
5439     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5440                           wild_match_p);
5441
5442 done:
5443   ndefns = num_defns_collected (&symbol_list_obstack);
5444   *results = defns_collected (&symbol_list_obstack, 1);
5445
5446   ndefns = remove_extra_symbols (*results, ndefns);
5447
5448   if (ndefns == 0 && full_search)
5449     cache_symbol (name0, namespace, NULL, NULL);
5450
5451   if (ndefns == 1 && full_search && cacheIfUnique)
5452     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
5453
5454   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5455
5456   return ndefns;
5457 }
5458
5459 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5460    in global scopes, returning the number of matches, and setting *RESULTS
5461    to a vector of (SYM,BLOCK) tuples.
5462    See ada_lookup_symbol_list_worker for further details.  */
5463
5464 int
5465 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5466                         domain_enum domain, struct ada_symbol_info **results)
5467 {
5468   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5469 }
5470
5471 /* Implementation of the la_iterate_over_symbols method.  */
5472
5473 static void
5474 ada_iterate_over_symbols (const struct block *block,
5475                           const char *name, domain_enum domain,
5476                           symbol_found_callback_ftype *callback,
5477                           void *data)
5478 {
5479   int ndefs, i;
5480   struct ada_symbol_info *results;
5481
5482   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5483   for (i = 0; i < ndefs; ++i)
5484     {
5485       if (! (*callback) (results[i].sym, data))
5486         break;
5487     }
5488 }
5489
5490 /* If NAME is the name of an entity, return a string that should
5491    be used to look that entity up in Ada units.  This string should
5492    be deallocated after use using xfree.
5493
5494    NAME can have any form that the "break" or "print" commands might
5495    recognize.  In other words, it does not have to be the "natural"
5496    name, or the "encoded" name.  */
5497
5498 char *
5499 ada_name_for_lookup (const char *name)
5500 {
5501   char *canon;
5502   int nlen = strlen (name);
5503
5504   if (name[0] == '<' && name[nlen - 1] == '>')
5505     {
5506       canon = xmalloc (nlen - 1);
5507       memcpy (canon, name + 1, nlen - 2);
5508       canon[nlen - 2] = '\0';
5509     }
5510   else
5511     canon = xstrdup (ada_encode (ada_fold_name (name)));
5512   return canon;
5513 }
5514
5515 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5516    to 1, but choosing the first symbol found if there are multiple
5517    choices.
5518
5519    The result is stored in *INFO, which must be non-NULL.
5520    If no match is found, INFO->SYM is set to NULL.  */
5521
5522 void
5523 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5524                            domain_enum namespace,
5525                            struct ada_symbol_info *info)
5526 {
5527   struct ada_symbol_info *candidates;
5528   int n_candidates;
5529
5530   gdb_assert (info != NULL);
5531   memset (info, 0, sizeof (struct ada_symbol_info));
5532
5533   n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
5534   if (n_candidates == 0)
5535     return;
5536
5537   *info = candidates[0];
5538   info->sym = fixup_symbol_section (info->sym, NULL);
5539 }
5540
5541 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5542    scope and in global scopes, or NULL if none.  NAME is folded and
5543    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5544    choosing the first symbol if there are multiple choices.
5545    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5546
5547 struct symbol *
5548 ada_lookup_symbol (const char *name, const struct block *block0,
5549                    domain_enum namespace, int *is_a_field_of_this)
5550 {
5551   struct ada_symbol_info info;
5552
5553   if (is_a_field_of_this != NULL)
5554     *is_a_field_of_this = 0;
5555
5556   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5557                              block0, namespace, &info);
5558   return info.sym;
5559 }
5560
5561 static struct symbol *
5562 ada_lookup_symbol_nonlocal (const char *name,
5563                             const struct block *block,
5564                             const domain_enum domain)
5565 {
5566   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5567 }
5568
5569
5570 /* True iff STR is a possible encoded suffix of a normal Ada name
5571    that is to be ignored for matching purposes.  Suffixes of parallel
5572    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5573    are given by any of the regular expressions:
5574
5575    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5576    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5577    TKB              [subprogram suffix for task bodies]
5578    _E[0-9]+[bs]$    [protected object entry suffixes]
5579    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5580
5581    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5582    match is performed.  This sequence is used to differentiate homonyms,
5583    is an optional part of a valid name suffix.  */
5584
5585 static int
5586 is_name_suffix (const char *str)
5587 {
5588   int k;
5589   const char *matching;
5590   const int len = strlen (str);
5591
5592   /* Skip optional leading __[0-9]+.  */
5593
5594   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5595     {
5596       str += 3;
5597       while (isdigit (str[0]))
5598         str += 1;
5599     }
5600   
5601   /* [.$][0-9]+ */
5602
5603   if (str[0] == '.' || str[0] == '$')
5604     {
5605       matching = str + 1;
5606       while (isdigit (matching[0]))
5607         matching += 1;
5608       if (matching[0] == '\0')
5609         return 1;
5610     }
5611
5612   /* ___[0-9]+ */
5613
5614   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5615     {
5616       matching = str + 3;
5617       while (isdigit (matching[0]))
5618         matching += 1;
5619       if (matching[0] == '\0')
5620         return 1;
5621     }
5622
5623   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5624
5625   if (strcmp (str, "TKB") == 0)
5626     return 1;
5627
5628 #if 0
5629   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5630      with a N at the end.  Unfortunately, the compiler uses the same
5631      convention for other internal types it creates.  So treating
5632      all entity names that end with an "N" as a name suffix causes
5633      some regressions.  For instance, consider the case of an enumerated
5634      type.  To support the 'Image attribute, it creates an array whose
5635      name ends with N.
5636      Having a single character like this as a suffix carrying some
5637      information is a bit risky.  Perhaps we should change the encoding
5638      to be something like "_N" instead.  In the meantime, do not do
5639      the following check.  */
5640   /* Protected Object Subprograms */
5641   if (len == 1 && str [0] == 'N')
5642     return 1;
5643 #endif
5644
5645   /* _E[0-9]+[bs]$ */
5646   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5647     {
5648       matching = str + 3;
5649       while (isdigit (matching[0]))
5650         matching += 1;
5651       if ((matching[0] == 'b' || matching[0] == 's')
5652           && matching [1] == '\0')
5653         return 1;
5654     }
5655
5656   /* ??? We should not modify STR directly, as we are doing below.  This
5657      is fine in this case, but may become problematic later if we find
5658      that this alternative did not work, and want to try matching
5659      another one from the begining of STR.  Since we modified it, we
5660      won't be able to find the begining of the string anymore!  */
5661   if (str[0] == 'X')
5662     {
5663       str += 1;
5664       while (str[0] != '_' && str[0] != '\0')
5665         {
5666           if (str[0] != 'n' && str[0] != 'b')
5667             return 0;
5668           str += 1;
5669         }
5670     }
5671
5672   if (str[0] == '\000')
5673     return 1;
5674
5675   if (str[0] == '_')
5676     {
5677       if (str[1] != '_' || str[2] == '\000')
5678         return 0;
5679       if (str[2] == '_')
5680         {
5681           if (strcmp (str + 3, "JM") == 0)
5682             return 1;
5683           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5684              the LJM suffix in favor of the JM one.  But we will
5685              still accept LJM as a valid suffix for a reasonable
5686              amount of time, just to allow ourselves to debug programs
5687              compiled using an older version of GNAT.  */
5688           if (strcmp (str + 3, "LJM") == 0)
5689             return 1;
5690           if (str[3] != 'X')
5691             return 0;
5692           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5693               || str[4] == 'U' || str[4] == 'P')
5694             return 1;
5695           if (str[4] == 'R' && str[5] != 'T')
5696             return 1;
5697           return 0;
5698         }
5699       if (!isdigit (str[2]))
5700         return 0;
5701       for (k = 3; str[k] != '\0'; k += 1)
5702         if (!isdigit (str[k]) && str[k] != '_')
5703           return 0;
5704       return 1;
5705     }
5706   if (str[0] == '$' && isdigit (str[1]))
5707     {
5708       for (k = 2; str[k] != '\0'; k += 1)
5709         if (!isdigit (str[k]) && str[k] != '_')
5710           return 0;
5711       return 1;
5712     }
5713   return 0;
5714 }
5715
5716 /* Return non-zero if the string starting at NAME and ending before
5717    NAME_END contains no capital letters.  */
5718
5719 static int
5720 is_valid_name_for_wild_match (const char *name0)
5721 {
5722   const char *decoded_name = ada_decode (name0);
5723   int i;
5724
5725   /* If the decoded name starts with an angle bracket, it means that
5726      NAME0 does not follow the GNAT encoding format.  It should then
5727      not be allowed as a possible wild match.  */
5728   if (decoded_name[0] == '<')
5729     return 0;
5730
5731   for (i=0; decoded_name[i] != '\0'; i++)
5732     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5733       return 0;
5734
5735   return 1;
5736 }
5737
5738 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5739    that could start a simple name.  Assumes that *NAMEP points into
5740    the string beginning at NAME0.  */
5741
5742 static int
5743 advance_wild_match (const char **namep, const char *name0, int target0)
5744 {
5745   const char *name = *namep;
5746
5747   while (1)
5748     {
5749       int t0, t1;
5750
5751       t0 = *name;
5752       if (t0 == '_')
5753         {
5754           t1 = name[1];
5755           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5756             {
5757               name += 1;
5758               if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5759                 break;
5760               else
5761                 name += 1;
5762             }
5763           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5764                                  || name[2] == target0))
5765             {
5766               name += 2;
5767               break;
5768             }
5769           else
5770             return 0;
5771         }
5772       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5773         name += 1;
5774       else
5775         return 0;
5776     }
5777
5778   *namep = name;
5779   return 1;
5780 }
5781
5782 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5783    informational suffixes of NAME (i.e., for which is_name_suffix is
5784    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5785
5786 static int
5787 wild_match (const char *name, const char *patn)
5788 {
5789   const char *p;
5790   const char *name0 = name;
5791
5792   while (1)
5793     {
5794       const char *match = name;
5795
5796       if (*name == *patn)
5797         {
5798           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5799             if (*p != *name)
5800               break;
5801           if (*p == '\0' && is_name_suffix (name))
5802             return match != name0 && !is_valid_name_for_wild_match (name0);
5803
5804           if (name[-1] == '_')
5805             name -= 1;
5806         }
5807       if (!advance_wild_match (&name, name0, *patn))
5808         return 1;
5809     }
5810 }
5811
5812 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5813    informational suffix.  */
5814
5815 static int
5816 full_match (const char *sym_name, const char *search_name)
5817 {
5818   return !match_name (sym_name, search_name, 0);
5819 }
5820
5821
5822 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5823    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5824    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5825    OBJFILE is the section containing BLOCK.  */
5826
5827 static void
5828 ada_add_block_symbols (struct obstack *obstackp,
5829                        const struct block *block, const char *name,
5830                        domain_enum domain, struct objfile *objfile,
5831                        int wild)
5832 {
5833   struct block_iterator iter;
5834   int name_len = strlen (name);
5835   /* A matching argument symbol, if any.  */
5836   struct symbol *arg_sym;
5837   /* Set true when we find a matching non-argument symbol.  */
5838   int found_sym;
5839   struct symbol *sym;
5840
5841   arg_sym = NULL;
5842   found_sym = 0;
5843   if (wild)
5844     {
5845       for (sym = block_iter_match_first (block, name, wild_match, &iter);
5846            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5847       {
5848         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5849                                    SYMBOL_DOMAIN (sym), domain)
5850             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5851           {
5852             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5853               continue;
5854             else if (SYMBOL_IS_ARGUMENT (sym))
5855               arg_sym = sym;
5856             else
5857               {
5858                 found_sym = 1;
5859                 add_defn_to_vec (obstackp,
5860                                  fixup_symbol_section (sym, objfile),
5861                                  block);
5862               }
5863           }
5864       }
5865     }
5866   else
5867     {
5868      for (sym = block_iter_match_first (block, name, full_match, &iter);
5869           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5870       {
5871         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5872                                    SYMBOL_DOMAIN (sym), domain))
5873           {
5874             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5875               {
5876                 if (SYMBOL_IS_ARGUMENT (sym))
5877                   arg_sym = sym;
5878                 else
5879                   {
5880                     found_sym = 1;
5881                     add_defn_to_vec (obstackp,
5882                                      fixup_symbol_section (sym, objfile),
5883                                      block);
5884                   }
5885               }
5886           }
5887       }
5888     }
5889
5890   if (!found_sym && arg_sym != NULL)
5891     {
5892       add_defn_to_vec (obstackp,
5893                        fixup_symbol_section (arg_sym, objfile),
5894                        block);
5895     }
5896
5897   if (!wild)
5898     {
5899       arg_sym = NULL;
5900       found_sym = 0;
5901
5902       ALL_BLOCK_SYMBOLS (block, iter, sym)
5903       {
5904         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5905                                    SYMBOL_DOMAIN (sym), domain))
5906           {
5907             int cmp;
5908
5909             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5910             if (cmp == 0)
5911               {
5912                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5913                 if (cmp == 0)
5914                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5915                                  name_len);
5916               }
5917
5918             if (cmp == 0
5919                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5920               {
5921                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5922                   {
5923                     if (SYMBOL_IS_ARGUMENT (sym))
5924                       arg_sym = sym;
5925                     else
5926                       {
5927                         found_sym = 1;
5928                         add_defn_to_vec (obstackp,
5929                                          fixup_symbol_section (sym, objfile),
5930                                          block);
5931                       }
5932                   }
5933               }
5934           }
5935       }
5936
5937       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5938          They aren't parameters, right?  */
5939       if (!found_sym && arg_sym != NULL)
5940         {
5941           add_defn_to_vec (obstackp,
5942                            fixup_symbol_section (arg_sym, objfile),
5943                            block);
5944         }
5945     }
5946 }
5947 \f
5948
5949                                 /* Symbol Completion */
5950
5951 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5952    name in a form that's appropriate for the completion.  The result
5953    does not need to be deallocated, but is only good until the next call.
5954
5955    TEXT_LEN is equal to the length of TEXT.
5956    Perform a wild match if WILD_MATCH_P is set.
5957    ENCODED_P should be set if TEXT represents the start of a symbol name
5958    in its encoded form.  */
5959
5960 static const char *
5961 symbol_completion_match (const char *sym_name,
5962                          const char *text, int text_len,
5963                          int wild_match_p, int encoded_p)
5964 {
5965   const int verbatim_match = (text[0] == '<');
5966   int match = 0;
5967
5968   if (verbatim_match)
5969     {
5970       /* Strip the leading angle bracket.  */
5971       text = text + 1;
5972       text_len--;
5973     }
5974
5975   /* First, test against the fully qualified name of the symbol.  */
5976
5977   if (strncmp (sym_name, text, text_len) == 0)
5978     match = 1;
5979
5980   if (match && !encoded_p)
5981     {
5982       /* One needed check before declaring a positive match is to verify
5983          that iff we are doing a verbatim match, the decoded version
5984          of the symbol name starts with '<'.  Otherwise, this symbol name
5985          is not a suitable completion.  */
5986       const char *sym_name_copy = sym_name;
5987       int has_angle_bracket;
5988
5989       sym_name = ada_decode (sym_name);
5990       has_angle_bracket = (sym_name[0] == '<');
5991       match = (has_angle_bracket == verbatim_match);
5992       sym_name = sym_name_copy;
5993     }
5994
5995   if (match && !verbatim_match)
5996     {
5997       /* When doing non-verbatim match, another check that needs to
5998          be done is to verify that the potentially matching symbol name
5999          does not include capital letters, because the ada-mode would
6000          not be able to understand these symbol names without the
6001          angle bracket notation.  */
6002       const char *tmp;
6003
6004       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6005       if (*tmp != '\0')
6006         match = 0;
6007     }
6008
6009   /* Second: Try wild matching...  */
6010
6011   if (!match && wild_match_p)
6012     {
6013       /* Since we are doing wild matching, this means that TEXT
6014          may represent an unqualified symbol name.  We therefore must
6015          also compare TEXT against the unqualified name of the symbol.  */
6016       sym_name = ada_unqualified_name (ada_decode (sym_name));
6017
6018       if (strncmp (sym_name, text, text_len) == 0)
6019         match = 1;
6020     }
6021
6022   /* Finally: If we found a mach, prepare the result to return.  */
6023
6024   if (!match)
6025     return NULL;
6026
6027   if (verbatim_match)
6028     sym_name = add_angle_brackets (sym_name);
6029
6030   if (!encoded_p)
6031     sym_name = ada_decode (sym_name);
6032
6033   return sym_name;
6034 }
6035
6036 /* A companion function to ada_make_symbol_completion_list().
6037    Check if SYM_NAME represents a symbol which name would be suitable
6038    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6039    it is appended at the end of the given string vector SV.
6040
6041    ORIG_TEXT is the string original string from the user command
6042    that needs to be completed.  WORD is the entire command on which
6043    completion should be performed.  These two parameters are used to
6044    determine which part of the symbol name should be added to the
6045    completion vector.
6046    if WILD_MATCH_P is set, then wild matching is performed.
6047    ENCODED_P should be set if TEXT represents a symbol name in its
6048    encoded formed (in which case the completion should also be
6049    encoded).  */
6050
6051 static void
6052 symbol_completion_add (VEC(char_ptr) **sv,
6053                        const char *sym_name,
6054                        const char *text, int text_len,
6055                        const char *orig_text, const char *word,
6056                        int wild_match_p, int encoded_p)
6057 {
6058   const char *match = symbol_completion_match (sym_name, text, text_len,
6059                                                wild_match_p, encoded_p);
6060   char *completion;
6061
6062   if (match == NULL)
6063     return;
6064
6065   /* We found a match, so add the appropriate completion to the given
6066      string vector.  */
6067
6068   if (word == orig_text)
6069     {
6070       completion = xmalloc (strlen (match) + 5);
6071       strcpy (completion, match);
6072     }
6073   else if (word > orig_text)
6074     {
6075       /* Return some portion of sym_name.  */
6076       completion = xmalloc (strlen (match) + 5);
6077       strcpy (completion, match + (word - orig_text));
6078     }
6079   else
6080     {
6081       /* Return some of ORIG_TEXT plus sym_name.  */
6082       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6083       strncpy (completion, word, orig_text - word);
6084       completion[orig_text - word] = '\0';
6085       strcat (completion, match);
6086     }
6087
6088   VEC_safe_push (char_ptr, *sv, completion);
6089 }
6090
6091 /* An object of this type is passed as the user_data argument to the
6092    expand_symtabs_matching method.  */
6093 struct add_partial_datum
6094 {
6095   VEC(char_ptr) **completions;
6096   const char *text;
6097   int text_len;
6098   const char *text0;
6099   const char *word;
6100   int wild_match;
6101   int encoded;
6102 };
6103
6104 /* A callback for expand_symtabs_matching.  */
6105
6106 static int
6107 ada_complete_symbol_matcher (const char *name, void *user_data)
6108 {
6109   struct add_partial_datum *data = user_data;
6110   
6111   return symbol_completion_match (name, data->text, data->text_len,
6112                                   data->wild_match, data->encoded) != NULL;
6113 }
6114
6115 /* Return a list of possible symbol names completing TEXT0.  WORD is
6116    the entire command on which completion is made.  */
6117
6118 static VEC (char_ptr) *
6119 ada_make_symbol_completion_list (const char *text0, const char *word,
6120                                  enum type_code code)
6121 {
6122   char *text;
6123   int text_len;
6124   int wild_match_p;
6125   int encoded_p;
6126   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6127   struct symbol *sym;
6128   struct symtab *s;
6129   struct minimal_symbol *msymbol;
6130   struct objfile *objfile;
6131   const struct block *b, *surrounding_static_block = 0;
6132   int i;
6133   struct block_iterator iter;
6134   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6135
6136   gdb_assert (code == TYPE_CODE_UNDEF);
6137
6138   if (text0[0] == '<')
6139     {
6140       text = xstrdup (text0);
6141       make_cleanup (xfree, text);
6142       text_len = strlen (text);
6143       wild_match_p = 0;
6144       encoded_p = 1;
6145     }
6146   else
6147     {
6148       text = xstrdup (ada_encode (text0));
6149       make_cleanup (xfree, text);
6150       text_len = strlen (text);
6151       for (i = 0; i < text_len; i++)
6152         text[i] = tolower (text[i]);
6153
6154       encoded_p = (strstr (text0, "__") != NULL);
6155       /* If the name contains a ".", then the user is entering a fully
6156          qualified entity name, and the match must not be done in wild
6157          mode.  Similarly, if the user wants to complete what looks like
6158          an encoded name, the match must not be done in wild mode.  */
6159       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6160     }
6161
6162   /* First, look at the partial symtab symbols.  */
6163   {
6164     struct add_partial_datum data;
6165
6166     data.completions = &completions;
6167     data.text = text;
6168     data.text_len = text_len;
6169     data.text0 = text0;
6170     data.word = word;
6171     data.wild_match = wild_match_p;
6172     data.encoded = encoded_p;
6173     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6174                              &data);
6175   }
6176
6177   /* At this point scan through the misc symbol vectors and add each
6178      symbol you find to the list.  Eventually we want to ignore
6179      anything that isn't a text symbol (everything else will be
6180      handled by the psymtab code above).  */
6181
6182   ALL_MSYMBOLS (objfile, msymbol)
6183   {
6184     QUIT;
6185     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6186                            text, text_len, text0, word, wild_match_p,
6187                            encoded_p);
6188   }
6189
6190   /* Search upwards from currently selected frame (so that we can
6191      complete on local vars.  */
6192
6193   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6194     {
6195       if (!BLOCK_SUPERBLOCK (b))
6196         surrounding_static_block = b;   /* For elmin of dups */
6197
6198       ALL_BLOCK_SYMBOLS (b, iter, sym)
6199       {
6200         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6201                                text, text_len, text0, word,
6202                                wild_match_p, encoded_p);
6203       }
6204     }
6205
6206   /* Go through the symtabs and check the externs and statics for
6207      symbols which match.  */
6208
6209   ALL_SYMTABS (objfile, s)
6210   {
6211     QUIT;
6212     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
6213     ALL_BLOCK_SYMBOLS (b, iter, sym)
6214     {
6215       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6216                              text, text_len, text0, word,
6217                              wild_match_p, encoded_p);
6218     }
6219   }
6220
6221   ALL_SYMTABS (objfile, s)
6222   {
6223     QUIT;
6224     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
6225     /* Don't do this block twice.  */
6226     if (b == surrounding_static_block)
6227       continue;
6228     ALL_BLOCK_SYMBOLS (b, iter, sym)
6229     {
6230       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6231                              text, text_len, text0, word,
6232                              wild_match_p, encoded_p);
6233     }
6234   }
6235
6236   do_cleanups (old_chain);
6237   return completions;
6238 }
6239
6240                                 /* Field Access */
6241
6242 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6243    for tagged types.  */
6244
6245 static int
6246 ada_is_dispatch_table_ptr_type (struct type *type)
6247 {
6248   const char *name;
6249
6250   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6251     return 0;
6252
6253   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6254   if (name == NULL)
6255     return 0;
6256
6257   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6258 }
6259
6260 /* Return non-zero if TYPE is an interface tag.  */
6261
6262 static int
6263 ada_is_interface_tag (struct type *type)
6264 {
6265   const char *name = TYPE_NAME (type);
6266
6267   if (name == NULL)
6268     return 0;
6269
6270   return (strcmp (name, "ada__tags__interface_tag") == 0);
6271 }
6272
6273 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6274    to be invisible to users.  */
6275
6276 int
6277 ada_is_ignored_field (struct type *type, int field_num)
6278 {
6279   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6280     return 1;
6281
6282   /* Check the name of that field.  */
6283   {
6284     const char *name = TYPE_FIELD_NAME (type, field_num);
6285
6286     /* Anonymous field names should not be printed.
6287        brobecker/2007-02-20: I don't think this can actually happen
6288        but we don't want to print the value of annonymous fields anyway.  */
6289     if (name == NULL)
6290       return 1;
6291
6292     /* Normally, fields whose name start with an underscore ("_")
6293        are fields that have been internally generated by the compiler,
6294        and thus should not be printed.  The "_parent" field is special,
6295        however: This is a field internally generated by the compiler
6296        for tagged types, and it contains the components inherited from
6297        the parent type.  This field should not be printed as is, but
6298        should not be ignored either.  */
6299     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6300       return 1;
6301   }
6302
6303   /* If this is the dispatch table of a tagged type or an interface tag,
6304      then ignore.  */
6305   if (ada_is_tagged_type (type, 1)
6306       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6307           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6308     return 1;
6309
6310   /* Not a special field, so it should not be ignored.  */
6311   return 0;
6312 }
6313
6314 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6315    pointer or reference type whose ultimate target has a tag field.  */
6316
6317 int
6318 ada_is_tagged_type (struct type *type, int refok)
6319 {
6320   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6321 }
6322
6323 /* True iff TYPE represents the type of X'Tag */
6324
6325 int
6326 ada_is_tag_type (struct type *type)
6327 {
6328   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6329     return 0;
6330   else
6331     {
6332       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6333
6334       return (name != NULL
6335               && strcmp (name, "ada__tags__dispatch_table") == 0);
6336     }
6337 }
6338
6339 /* The type of the tag on VAL.  */
6340
6341 struct type *
6342 ada_tag_type (struct value *val)
6343 {
6344   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6345 }
6346
6347 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6348    retired at Ada 05).  */
6349
6350 static int
6351 is_ada95_tag (struct value *tag)
6352 {
6353   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6354 }
6355
6356 /* The value of the tag on VAL.  */
6357
6358 struct value *
6359 ada_value_tag (struct value *val)
6360 {
6361   return ada_value_struct_elt (val, "_tag", 0);
6362 }
6363
6364 /* The value of the tag on the object of type TYPE whose contents are
6365    saved at VALADDR, if it is non-null, or is at memory address
6366    ADDRESS.  */
6367
6368 static struct value *
6369 value_tag_from_contents_and_address (struct type *type,
6370                                      const gdb_byte *valaddr,
6371                                      CORE_ADDR address)
6372 {
6373   int tag_byte_offset;
6374   struct type *tag_type;
6375
6376   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6377                          NULL, NULL, NULL))
6378     {
6379       const gdb_byte *valaddr1 = ((valaddr == NULL)
6380                                   ? NULL
6381                                   : valaddr + tag_byte_offset);
6382       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6383
6384       return value_from_contents_and_address (tag_type, valaddr1, address1);
6385     }
6386   return NULL;
6387 }
6388
6389 static struct type *
6390 type_from_tag (struct value *tag)
6391 {
6392   const char *type_name = ada_tag_name (tag);
6393
6394   if (type_name != NULL)
6395     return ada_find_any_type (ada_encode (type_name));
6396   return NULL;
6397 }
6398
6399 /* Given a value OBJ of a tagged type, return a value of this
6400    type at the base address of the object.  The base address, as
6401    defined in Ada.Tags, it is the address of the primary tag of
6402    the object, and therefore where the field values of its full
6403    view can be fetched.  */
6404
6405 struct value *
6406 ada_tag_value_at_base_address (struct value *obj)
6407 {
6408   volatile struct gdb_exception e;
6409   struct value *val;
6410   LONGEST offset_to_top = 0;
6411   struct type *ptr_type, *obj_type;
6412   struct value *tag;
6413   CORE_ADDR base_address;
6414
6415   obj_type = value_type (obj);
6416
6417   /* It is the responsability of the caller to deref pointers.  */
6418
6419   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6420       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6421     return obj;
6422
6423   tag = ada_value_tag (obj);
6424   if (!tag)
6425     return obj;
6426
6427   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6428
6429   if (is_ada95_tag (tag))
6430     return obj;
6431
6432   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6433   ptr_type = lookup_pointer_type (ptr_type);
6434   val = value_cast (ptr_type, tag);
6435   if (!val)
6436     return obj;
6437
6438   /* It is perfectly possible that an exception be raised while
6439      trying to determine the base address, just like for the tag;
6440      see ada_tag_name for more details.  We do not print the error
6441      message for the same reason.  */
6442
6443   TRY_CATCH (e, RETURN_MASK_ERROR)
6444     {
6445       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6446     }
6447
6448   if (e.reason < 0)
6449     return obj;
6450
6451   /* If offset is null, nothing to do.  */
6452
6453   if (offset_to_top == 0)
6454     return obj;
6455
6456   /* -1 is a special case in Ada.Tags; however, what should be done
6457      is not quite clear from the documentation.  So do nothing for
6458      now.  */
6459
6460   if (offset_to_top == -1)
6461     return obj;
6462
6463   base_address = value_address (obj) - offset_to_top;
6464   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6465
6466   /* Make sure that we have a proper tag at the new address.
6467      Otherwise, offset_to_top is bogus (which can happen when
6468      the object is not initialized yet).  */
6469
6470   if (!tag)
6471     return obj;
6472
6473   obj_type = type_from_tag (tag);
6474
6475   if (!obj_type)
6476     return obj;
6477
6478   return value_from_contents_and_address (obj_type, NULL, base_address);
6479 }
6480
6481 /* Return the "ada__tags__type_specific_data" type.  */
6482
6483 static struct type *
6484 ada_get_tsd_type (struct inferior *inf)
6485 {
6486   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6487
6488   if (data->tsd_type == 0)
6489     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6490   return data->tsd_type;
6491 }
6492
6493 /* Return the TSD (type-specific data) associated to the given TAG.
6494    TAG is assumed to be the tag of a tagged-type entity.
6495
6496    May return NULL if we are unable to get the TSD.  */
6497
6498 static struct value *
6499 ada_get_tsd_from_tag (struct value *tag)
6500 {
6501   struct value *val;
6502   struct type *type;
6503
6504   /* First option: The TSD is simply stored as a field of our TAG.
6505      Only older versions of GNAT would use this format, but we have
6506      to test it first, because there are no visible markers for
6507      the current approach except the absence of that field.  */
6508
6509   val = ada_value_struct_elt (tag, "tsd", 1);
6510   if (val)
6511     return val;
6512
6513   /* Try the second representation for the dispatch table (in which
6514      there is no explicit 'tsd' field in the referent of the tag pointer,
6515      and instead the tsd pointer is stored just before the dispatch
6516      table.  */
6517
6518   type = ada_get_tsd_type (current_inferior());
6519   if (type == NULL)
6520     return NULL;
6521   type = lookup_pointer_type (lookup_pointer_type (type));
6522   val = value_cast (type, tag);
6523   if (val == NULL)
6524     return NULL;
6525   return value_ind (value_ptradd (val, -1));
6526 }
6527
6528 /* Given the TSD of a tag (type-specific data), return a string
6529    containing the name of the associated type.
6530
6531    The returned value is good until the next call.  May return NULL
6532    if we are unable to determine the tag name.  */
6533
6534 static char *
6535 ada_tag_name_from_tsd (struct value *tsd)
6536 {
6537   static char name[1024];
6538   char *p;
6539   struct value *val;
6540
6541   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6542   if (val == NULL)
6543     return NULL;
6544   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6545   for (p = name; *p != '\0'; p += 1)
6546     if (isalpha (*p))
6547       *p = tolower (*p);
6548   return name;
6549 }
6550
6551 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6552    a C string.
6553
6554    Return NULL if the TAG is not an Ada tag, or if we were unable to
6555    determine the name of that tag.  The result is good until the next
6556    call.  */
6557
6558 const char *
6559 ada_tag_name (struct value *tag)
6560 {
6561   volatile struct gdb_exception e;
6562   char *name = NULL;
6563
6564   if (!ada_is_tag_type (value_type (tag)))
6565     return NULL;
6566
6567   /* It is perfectly possible that an exception be raised while trying
6568      to determine the TAG's name, even under normal circumstances:
6569      The associated variable may be uninitialized or corrupted, for
6570      instance. We do not let any exception propagate past this point.
6571      instead we return NULL.
6572
6573      We also do not print the error message either (which often is very
6574      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6575      the caller print a more meaningful message if necessary.  */
6576   TRY_CATCH (e, RETURN_MASK_ERROR)
6577     {
6578       struct value *tsd = ada_get_tsd_from_tag (tag);
6579
6580       if (tsd != NULL)
6581         name = ada_tag_name_from_tsd (tsd);
6582     }
6583
6584   return name;
6585 }
6586
6587 /* The parent type of TYPE, or NULL if none.  */
6588
6589 struct type *
6590 ada_parent_type (struct type *type)
6591 {
6592   int i;
6593
6594   type = ada_check_typedef (type);
6595
6596   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6597     return NULL;
6598
6599   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6600     if (ada_is_parent_field (type, i))
6601       {
6602         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6603
6604         /* If the _parent field is a pointer, then dereference it.  */
6605         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6606           parent_type = TYPE_TARGET_TYPE (parent_type);
6607         /* If there is a parallel XVS type, get the actual base type.  */
6608         parent_type = ada_get_base_type (parent_type);
6609
6610         return ada_check_typedef (parent_type);
6611       }
6612
6613   return NULL;
6614 }
6615
6616 /* True iff field number FIELD_NUM of structure type TYPE contains the
6617    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6618    a structure type with at least FIELD_NUM+1 fields.  */
6619
6620 int
6621 ada_is_parent_field (struct type *type, int field_num)
6622 {
6623   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6624
6625   return (name != NULL
6626           && (strncmp (name, "PARENT", 6) == 0
6627               || strncmp (name, "_parent", 7) == 0));
6628 }
6629
6630 /* True iff field number FIELD_NUM of structure type TYPE is a
6631    transparent wrapper field (which should be silently traversed when doing
6632    field selection and flattened when printing).  Assumes TYPE is a
6633    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6634    structures.  */
6635
6636 int
6637 ada_is_wrapper_field (struct type *type, int field_num)
6638 {
6639   const char *name = TYPE_FIELD_NAME (type, field_num);
6640
6641   return (name != NULL
6642           && (strncmp (name, "PARENT", 6) == 0
6643               || strcmp (name, "REP") == 0
6644               || strncmp (name, "_parent", 7) == 0
6645               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6646 }
6647
6648 /* True iff field number FIELD_NUM of structure or union type TYPE
6649    is a variant wrapper.  Assumes TYPE is a structure type with at least
6650    FIELD_NUM+1 fields.  */
6651
6652 int
6653 ada_is_variant_part (struct type *type, int field_num)
6654 {
6655   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6656
6657   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6658           || (is_dynamic_field (type, field_num)
6659               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
6660                   == TYPE_CODE_UNION)));
6661 }
6662
6663 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6664    whose discriminants are contained in the record type OUTER_TYPE,
6665    returns the type of the controlling discriminant for the variant.
6666    May return NULL if the type could not be found.  */
6667
6668 struct type *
6669 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6670 {
6671   char *name = ada_variant_discrim_name (var_type);
6672
6673   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6674 }
6675
6676 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6677    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6678    represents a 'when others' clause; otherwise 0.  */
6679
6680 int
6681 ada_is_others_clause (struct type *type, int field_num)
6682 {
6683   const char *name = TYPE_FIELD_NAME (type, field_num);
6684
6685   return (name != NULL && name[0] == 'O');
6686 }
6687
6688 /* Assuming that TYPE0 is the type of the variant part of a record,
6689    returns the name of the discriminant controlling the variant.
6690    The value is valid until the next call to ada_variant_discrim_name.  */
6691
6692 char *
6693 ada_variant_discrim_name (struct type *type0)
6694 {
6695   static char *result = NULL;
6696   static size_t result_len = 0;
6697   struct type *type;
6698   const char *name;
6699   const char *discrim_end;
6700   const char *discrim_start;
6701
6702   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6703     type = TYPE_TARGET_TYPE (type0);
6704   else
6705     type = type0;
6706
6707   name = ada_type_name (type);
6708
6709   if (name == NULL || name[0] == '\000')
6710     return "";
6711
6712   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6713        discrim_end -= 1)
6714     {
6715       if (strncmp (discrim_end, "___XVN", 6) == 0)
6716         break;
6717     }
6718   if (discrim_end == name)
6719     return "";
6720
6721   for (discrim_start = discrim_end; discrim_start != name + 3;
6722        discrim_start -= 1)
6723     {
6724       if (discrim_start == name + 1)
6725         return "";
6726       if ((discrim_start > name + 3
6727            && strncmp (discrim_start - 3, "___", 3) == 0)
6728           || discrim_start[-1] == '.')
6729         break;
6730     }
6731
6732   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6733   strncpy (result, discrim_start, discrim_end - discrim_start);
6734   result[discrim_end - discrim_start] = '\0';
6735   return result;
6736 }
6737
6738 /* Scan STR for a subtype-encoded number, beginning at position K.
6739    Put the position of the character just past the number scanned in
6740    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6741    Return 1 if there was a valid number at the given position, and 0
6742    otherwise.  A "subtype-encoded" number consists of the absolute value
6743    in decimal, followed by the letter 'm' to indicate a negative number.
6744    Assumes 0m does not occur.  */
6745
6746 int
6747 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6748 {
6749   ULONGEST RU;
6750
6751   if (!isdigit (str[k]))
6752     return 0;
6753
6754   /* Do it the hard way so as not to make any assumption about
6755      the relationship of unsigned long (%lu scan format code) and
6756      LONGEST.  */
6757   RU = 0;
6758   while (isdigit (str[k]))
6759     {
6760       RU = RU * 10 + (str[k] - '0');
6761       k += 1;
6762     }
6763
6764   if (str[k] == 'm')
6765     {
6766       if (R != NULL)
6767         *R = (-(LONGEST) (RU - 1)) - 1;
6768       k += 1;
6769     }
6770   else if (R != NULL)
6771     *R = (LONGEST) RU;
6772
6773   /* NOTE on the above: Technically, C does not say what the results of
6774      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6775      number representable as a LONGEST (although either would probably work
6776      in most implementations).  When RU>0, the locution in the then branch
6777      above is always equivalent to the negative of RU.  */
6778
6779   if (new_k != NULL)
6780     *new_k = k;
6781   return 1;
6782 }
6783
6784 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6785    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6786    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6787
6788 int
6789 ada_in_variant (LONGEST val, struct type *type, int field_num)
6790 {
6791   const char *name = TYPE_FIELD_NAME (type, field_num);
6792   int p;
6793
6794   p = 0;
6795   while (1)
6796     {
6797       switch (name[p])
6798         {
6799         case '\0':
6800           return 0;
6801         case 'S':
6802           {
6803             LONGEST W;
6804
6805             if (!ada_scan_number (name, p + 1, &W, &p))
6806               return 0;
6807             if (val == W)
6808               return 1;
6809             break;
6810           }
6811         case 'R':
6812           {
6813             LONGEST L, U;
6814
6815             if (!ada_scan_number (name, p + 1, &L, &p)
6816                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6817               return 0;
6818             if (val >= L && val <= U)
6819               return 1;
6820             break;
6821           }
6822         case 'O':
6823           return 1;
6824         default:
6825           return 0;
6826         }
6827     }
6828 }
6829
6830 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6831
6832 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6833    ARG_TYPE, extract and return the value of one of its (non-static)
6834    fields.  FIELDNO says which field.   Differs from value_primitive_field
6835    only in that it can handle packed values of arbitrary type.  */
6836
6837 static struct value *
6838 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6839                            struct type *arg_type)
6840 {
6841   struct type *type;
6842
6843   arg_type = ada_check_typedef (arg_type);
6844   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6845
6846   /* Handle packed fields.  */
6847
6848   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6849     {
6850       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6851       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6852
6853       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6854                                              offset + bit_pos / 8,
6855                                              bit_pos % 8, bit_size, type);
6856     }
6857   else
6858     return value_primitive_field (arg1, offset, fieldno, arg_type);
6859 }
6860
6861 /* Find field with name NAME in object of type TYPE.  If found, 
6862    set the following for each argument that is non-null:
6863     - *FIELD_TYPE_P to the field's type; 
6864     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6865       an object of that type;
6866     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6867     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6868       0 otherwise;
6869    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6870    fields up to but not including the desired field, or by the total
6871    number of fields if not found.   A NULL value of NAME never
6872    matches; the function just counts visible fields in this case.
6873    
6874    Returns 1 if found, 0 otherwise.  */
6875
6876 static int
6877 find_struct_field (const char *name, struct type *type, int offset,
6878                    struct type **field_type_p,
6879                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6880                    int *index_p)
6881 {
6882   int i;
6883
6884   type = ada_check_typedef (type);
6885
6886   if (field_type_p != NULL)
6887     *field_type_p = NULL;
6888   if (byte_offset_p != NULL)
6889     *byte_offset_p = 0;
6890   if (bit_offset_p != NULL)
6891     *bit_offset_p = 0;
6892   if (bit_size_p != NULL)
6893     *bit_size_p = 0;
6894
6895   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6896     {
6897       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6898       int fld_offset = offset + bit_pos / 8;
6899       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6900
6901       if (t_field_name == NULL)
6902         continue;
6903
6904       else if (name != NULL && field_name_match (t_field_name, name))
6905         {
6906           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6907
6908           if (field_type_p != NULL)
6909             *field_type_p = TYPE_FIELD_TYPE (type, i);
6910           if (byte_offset_p != NULL)
6911             *byte_offset_p = fld_offset;
6912           if (bit_offset_p != NULL)
6913             *bit_offset_p = bit_pos % 8;
6914           if (bit_size_p != NULL)
6915             *bit_size_p = bit_size;
6916           return 1;
6917         }
6918       else if (ada_is_wrapper_field (type, i))
6919         {
6920           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6921                                  field_type_p, byte_offset_p, bit_offset_p,
6922                                  bit_size_p, index_p))
6923             return 1;
6924         }
6925       else if (ada_is_variant_part (type, i))
6926         {
6927           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6928              fixed type?? */
6929           int j;
6930           struct type *field_type
6931             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6932
6933           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6934             {
6935               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6936                                      fld_offset
6937                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6938                                      field_type_p, byte_offset_p,
6939                                      bit_offset_p, bit_size_p, index_p))
6940                 return 1;
6941             }
6942         }
6943       else if (index_p != NULL)
6944         *index_p += 1;
6945     }
6946   return 0;
6947 }
6948
6949 /* Number of user-visible fields in record type TYPE.  */
6950
6951 static int
6952 num_visible_fields (struct type *type)
6953 {
6954   int n;
6955
6956   n = 0;
6957   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6958   return n;
6959 }
6960
6961 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6962    and search in it assuming it has (class) type TYPE.
6963    If found, return value, else return NULL.
6964
6965    Searches recursively through wrapper fields (e.g., '_parent').  */
6966
6967 static struct value *
6968 ada_search_struct_field (char *name, struct value *arg, int offset,
6969                          struct type *type)
6970 {
6971   int i;
6972
6973   type = ada_check_typedef (type);
6974   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6975     {
6976       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6977
6978       if (t_field_name == NULL)
6979         continue;
6980
6981       else if (field_name_match (t_field_name, name))
6982         return ada_value_primitive_field (arg, offset, i, type);
6983
6984       else if (ada_is_wrapper_field (type, i))
6985         {
6986           struct value *v =     /* Do not let indent join lines here.  */
6987             ada_search_struct_field (name, arg,
6988                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
6989                                      TYPE_FIELD_TYPE (type, i));
6990
6991           if (v != NULL)
6992             return v;
6993         }
6994
6995       else if (ada_is_variant_part (type, i))
6996         {
6997           /* PNH: Do we ever get here?  See find_struct_field.  */
6998           int j;
6999           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7000                                                                         i));
7001           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7002
7003           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7004             {
7005               struct value *v = ada_search_struct_field /* Force line
7006                                                            break.  */
7007                 (name, arg,
7008                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7009                  TYPE_FIELD_TYPE (field_type, j));
7010
7011               if (v != NULL)
7012                 return v;
7013             }
7014         }
7015     }
7016   return NULL;
7017 }
7018
7019 static struct value *ada_index_struct_field_1 (int *, struct value *,
7020                                                int, struct type *);
7021
7022
7023 /* Return field #INDEX in ARG, where the index is that returned by
7024  * find_struct_field through its INDEX_P argument.  Adjust the address
7025  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7026  * If found, return value, else return NULL.  */
7027
7028 static struct value *
7029 ada_index_struct_field (int index, struct value *arg, int offset,
7030                         struct type *type)
7031 {
7032   return ada_index_struct_field_1 (&index, arg, offset, type);
7033 }
7034
7035
7036 /* Auxiliary function for ada_index_struct_field.  Like
7037  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7038  * *INDEX_P.  */
7039
7040 static struct value *
7041 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7042                           struct type *type)
7043 {
7044   int i;
7045   type = ada_check_typedef (type);
7046
7047   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7048     {
7049       if (TYPE_FIELD_NAME (type, i) == NULL)
7050         continue;
7051       else if (ada_is_wrapper_field (type, i))
7052         {
7053           struct value *v =     /* Do not let indent join lines here.  */
7054             ada_index_struct_field_1 (index_p, arg,
7055                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7056                                       TYPE_FIELD_TYPE (type, i));
7057
7058           if (v != NULL)
7059             return v;
7060         }
7061
7062       else if (ada_is_variant_part (type, i))
7063         {
7064           /* PNH: Do we ever get here?  See ada_search_struct_field,
7065              find_struct_field.  */
7066           error (_("Cannot assign this kind of variant record"));
7067         }
7068       else if (*index_p == 0)
7069         return ada_value_primitive_field (arg, offset, i, type);
7070       else
7071         *index_p -= 1;
7072     }
7073   return NULL;
7074 }
7075
7076 /* Given ARG, a value of type (pointer or reference to a)*
7077    structure/union, extract the component named NAME from the ultimate
7078    target structure/union and return it as a value with its
7079    appropriate type.
7080
7081    The routine searches for NAME among all members of the structure itself
7082    and (recursively) among all members of any wrapper members
7083    (e.g., '_parent').
7084
7085    If NO_ERR, then simply return NULL in case of error, rather than 
7086    calling error.  */
7087
7088 struct value *
7089 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7090 {
7091   struct type *t, *t1;
7092   struct value *v;
7093
7094   v = NULL;
7095   t1 = t = ada_check_typedef (value_type (arg));
7096   if (TYPE_CODE (t) == TYPE_CODE_REF)
7097     {
7098       t1 = TYPE_TARGET_TYPE (t);
7099       if (t1 == NULL)
7100         goto BadValue;
7101       t1 = ada_check_typedef (t1);
7102       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7103         {
7104           arg = coerce_ref (arg);
7105           t = t1;
7106         }
7107     }
7108
7109   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7110     {
7111       t1 = TYPE_TARGET_TYPE (t);
7112       if (t1 == NULL)
7113         goto BadValue;
7114       t1 = ada_check_typedef (t1);
7115       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7116         {
7117           arg = value_ind (arg);
7118           t = t1;
7119         }
7120       else
7121         break;
7122     }
7123
7124   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7125     goto BadValue;
7126
7127   if (t1 == t)
7128     v = ada_search_struct_field (name, arg, 0, t);
7129   else
7130     {
7131       int bit_offset, bit_size, byte_offset;
7132       struct type *field_type;
7133       CORE_ADDR address;
7134
7135       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7136         address = value_address (ada_value_ind (arg));
7137       else
7138         address = value_address (ada_coerce_ref (arg));
7139
7140       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7141       if (find_struct_field (name, t1, 0,
7142                              &field_type, &byte_offset, &bit_offset,
7143                              &bit_size, NULL))
7144         {
7145           if (bit_size != 0)
7146             {
7147               if (TYPE_CODE (t) == TYPE_CODE_REF)
7148                 arg = ada_coerce_ref (arg);
7149               else
7150                 arg = ada_value_ind (arg);
7151               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7152                                                   bit_offset, bit_size,
7153                                                   field_type);
7154             }
7155           else
7156             v = value_at_lazy (field_type, address + byte_offset);
7157         }
7158     }
7159
7160   if (v != NULL || no_err)
7161     return v;
7162   else
7163     error (_("There is no member named %s."), name);
7164
7165  BadValue:
7166   if (no_err)
7167     return NULL;
7168   else
7169     error (_("Attempt to extract a component of "
7170              "a value that is not a record."));
7171 }
7172
7173 /* Given a type TYPE, look up the type of the component of type named NAME.
7174    If DISPP is non-null, add its byte displacement from the beginning of a
7175    structure (pointed to by a value) of type TYPE to *DISPP (does not
7176    work for packed fields).
7177
7178    Matches any field whose name has NAME as a prefix, possibly
7179    followed by "___".
7180
7181    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7182    be a (pointer or reference)+ to a struct or union, and the
7183    ultimate target type will be searched.
7184
7185    Looks recursively into variant clauses and parent types.
7186
7187    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7188    TYPE is not a type of the right kind.  */
7189
7190 static struct type *
7191 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7192                             int noerr, int *dispp)
7193 {
7194   int i;
7195
7196   if (name == NULL)
7197     goto BadName;
7198
7199   if (refok && type != NULL)
7200     while (1)
7201       {
7202         type = ada_check_typedef (type);
7203         if (TYPE_CODE (type) != TYPE_CODE_PTR
7204             && TYPE_CODE (type) != TYPE_CODE_REF)
7205           break;
7206         type = TYPE_TARGET_TYPE (type);
7207       }
7208
7209   if (type == NULL
7210       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7211           && TYPE_CODE (type) != TYPE_CODE_UNION))
7212     {
7213       if (noerr)
7214         return NULL;
7215       else
7216         {
7217           target_terminal_ours ();
7218           gdb_flush (gdb_stdout);
7219           if (type == NULL)
7220             error (_("Type (null) is not a structure or union type"));
7221           else
7222             {
7223               /* XXX: type_sprint */
7224               fprintf_unfiltered (gdb_stderr, _("Type "));
7225               type_print (type, "", gdb_stderr, -1);
7226               error (_(" is not a structure or union type"));
7227             }
7228         }
7229     }
7230
7231   type = to_static_fixed_type (type);
7232
7233   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7234     {
7235       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7236       struct type *t;
7237       int disp;
7238
7239       if (t_field_name == NULL)
7240         continue;
7241
7242       else if (field_name_match (t_field_name, name))
7243         {
7244           if (dispp != NULL)
7245             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7246           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7247         }
7248
7249       else if (ada_is_wrapper_field (type, i))
7250         {
7251           disp = 0;
7252           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7253                                           0, 1, &disp);
7254           if (t != NULL)
7255             {
7256               if (dispp != NULL)
7257                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7258               return t;
7259             }
7260         }
7261
7262       else if (ada_is_variant_part (type, i))
7263         {
7264           int j;
7265           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7266                                                                         i));
7267
7268           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7269             {
7270               /* FIXME pnh 2008/01/26: We check for a field that is
7271                  NOT wrapped in a struct, since the compiler sometimes
7272                  generates these for unchecked variant types.  Revisit
7273                  if the compiler changes this practice.  */
7274               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7275               disp = 0;
7276               if (v_field_name != NULL 
7277                   && field_name_match (v_field_name, name))
7278                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7279               else
7280                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7281                                                                  j),
7282                                                 name, 0, 1, &disp);
7283
7284               if (t != NULL)
7285                 {
7286                   if (dispp != NULL)
7287                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7288                   return t;
7289                 }
7290             }
7291         }
7292
7293     }
7294
7295 BadName:
7296   if (!noerr)
7297     {
7298       target_terminal_ours ();
7299       gdb_flush (gdb_stdout);
7300       if (name == NULL)
7301         {
7302           /* XXX: type_sprint */
7303           fprintf_unfiltered (gdb_stderr, _("Type "));
7304           type_print (type, "", gdb_stderr, -1);
7305           error (_(" has no component named <null>"));
7306         }
7307       else
7308         {
7309           /* XXX: type_sprint */
7310           fprintf_unfiltered (gdb_stderr, _("Type "));
7311           type_print (type, "", gdb_stderr, -1);
7312           error (_(" has no component named %s"), name);
7313         }
7314     }
7315
7316   return NULL;
7317 }
7318
7319 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7320    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7321    represents an unchecked union (that is, the variant part of a
7322    record that is named in an Unchecked_Union pragma).  */
7323
7324 static int
7325 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7326 {
7327   char *discrim_name = ada_variant_discrim_name (var_type);
7328
7329   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7330           == NULL);
7331 }
7332
7333
7334 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7335    within a value of type OUTER_TYPE that is stored in GDB at
7336    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7337    numbering from 0) is applicable.  Returns -1 if none are.  */
7338
7339 int
7340 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7341                            const gdb_byte *outer_valaddr)
7342 {
7343   int others_clause;
7344   int i;
7345   char *discrim_name = ada_variant_discrim_name (var_type);
7346   struct value *outer;
7347   struct value *discrim;
7348   LONGEST discrim_val;
7349
7350   /* Using plain value_from_contents_and_address here causes problems
7351      because we will end up trying to resolve a type that is currently
7352      being constructed.  */
7353   outer = value_from_contents_and_address_unresolved (outer_type,
7354                                                       outer_valaddr, 0);
7355   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7356   if (discrim == NULL)
7357     return -1;
7358   discrim_val = value_as_long (discrim);
7359
7360   others_clause = -1;
7361   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7362     {
7363       if (ada_is_others_clause (var_type, i))
7364         others_clause = i;
7365       else if (ada_in_variant (discrim_val, var_type, i))
7366         return i;
7367     }
7368
7369   return others_clause;
7370 }
7371 \f
7372
7373
7374                                 /* Dynamic-Sized Records */
7375
7376 /* Strategy: The type ostensibly attached to a value with dynamic size
7377    (i.e., a size that is not statically recorded in the debugging
7378    data) does not accurately reflect the size or layout of the value.
7379    Our strategy is to convert these values to values with accurate,
7380    conventional types that are constructed on the fly.  */
7381
7382 /* There is a subtle and tricky problem here.  In general, we cannot
7383    determine the size of dynamic records without its data.  However,
7384    the 'struct value' data structure, which GDB uses to represent
7385    quantities in the inferior process (the target), requires the size
7386    of the type at the time of its allocation in order to reserve space
7387    for GDB's internal copy of the data.  That's why the
7388    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7389    rather than struct value*s.
7390
7391    However, GDB's internal history variables ($1, $2, etc.) are
7392    struct value*s containing internal copies of the data that are not, in
7393    general, the same as the data at their corresponding addresses in
7394    the target.  Fortunately, the types we give to these values are all
7395    conventional, fixed-size types (as per the strategy described
7396    above), so that we don't usually have to perform the
7397    'to_fixed_xxx_type' conversions to look at their values.
7398    Unfortunately, there is one exception: if one of the internal
7399    history variables is an array whose elements are unconstrained
7400    records, then we will need to create distinct fixed types for each
7401    element selected.  */
7402
7403 /* The upshot of all of this is that many routines take a (type, host
7404    address, target address) triple as arguments to represent a value.
7405    The host address, if non-null, is supposed to contain an internal
7406    copy of the relevant data; otherwise, the program is to consult the
7407    target at the target address.  */
7408
7409 /* Assuming that VAL0 represents a pointer value, the result of
7410    dereferencing it.  Differs from value_ind in its treatment of
7411    dynamic-sized types.  */
7412
7413 struct value *
7414 ada_value_ind (struct value *val0)
7415 {
7416   struct value *val = value_ind (val0);
7417
7418   if (ada_is_tagged_type (value_type (val), 0))
7419     val = ada_tag_value_at_base_address (val);
7420
7421   return ada_to_fixed_value (val);
7422 }
7423
7424 /* The value resulting from dereferencing any "reference to"
7425    qualifiers on VAL0.  */
7426
7427 static struct value *
7428 ada_coerce_ref (struct value *val0)
7429 {
7430   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7431     {
7432       struct value *val = val0;
7433
7434       val = coerce_ref (val);
7435
7436       if (ada_is_tagged_type (value_type (val), 0))
7437         val = ada_tag_value_at_base_address (val);
7438
7439       return ada_to_fixed_value (val);
7440     }
7441   else
7442     return val0;
7443 }
7444
7445 /* Return OFF rounded upward if necessary to a multiple of
7446    ALIGNMENT (a power of 2).  */
7447
7448 static unsigned int
7449 align_value (unsigned int off, unsigned int alignment)
7450 {
7451   return (off + alignment - 1) & ~(alignment - 1);
7452 }
7453
7454 /* Return the bit alignment required for field #F of template type TYPE.  */
7455
7456 static unsigned int
7457 field_alignment (struct type *type, int f)
7458 {
7459   const char *name = TYPE_FIELD_NAME (type, f);
7460   int len;
7461   int align_offset;
7462
7463   /* The field name should never be null, unless the debugging information
7464      is somehow malformed.  In this case, we assume the field does not
7465      require any alignment.  */
7466   if (name == NULL)
7467     return 1;
7468
7469   len = strlen (name);
7470
7471   if (!isdigit (name[len - 1]))
7472     return 1;
7473
7474   if (isdigit (name[len - 2]))
7475     align_offset = len - 2;
7476   else
7477     align_offset = len - 1;
7478
7479   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7480     return TARGET_CHAR_BIT;
7481
7482   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7483 }
7484
7485 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7486
7487 static struct symbol *
7488 ada_find_any_type_symbol (const char *name)
7489 {
7490   struct symbol *sym;
7491
7492   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7493   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7494     return sym;
7495
7496   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7497   return sym;
7498 }
7499
7500 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7501    solely for types defined by debug info, it will not search the GDB
7502    primitive types.  */
7503
7504 static struct type *
7505 ada_find_any_type (const char *name)
7506 {
7507   struct symbol *sym = ada_find_any_type_symbol (name);
7508
7509   if (sym != NULL)
7510     return SYMBOL_TYPE (sym);
7511
7512   return NULL;
7513 }
7514
7515 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7516    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7517    symbol, in which case it is returned.  Otherwise, this looks for
7518    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7519    Return symbol if found, and NULL otherwise.  */
7520
7521 struct symbol *
7522 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7523 {
7524   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7525   struct symbol *sym;
7526
7527   if (strstr (name, "___XR") != NULL)
7528      return name_sym;
7529
7530   sym = find_old_style_renaming_symbol (name, block);
7531
7532   if (sym != NULL)
7533     return sym;
7534
7535   /* Not right yet.  FIXME pnh 7/20/2007.  */
7536   sym = ada_find_any_type_symbol (name);
7537   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7538     return sym;
7539   else
7540     return NULL;
7541 }
7542
7543 static struct symbol *
7544 find_old_style_renaming_symbol (const char *name, const struct block *block)
7545 {
7546   const struct symbol *function_sym = block_linkage_function (block);
7547   char *rename;
7548
7549   if (function_sym != NULL)
7550     {
7551       /* If the symbol is defined inside a function, NAME is not fully
7552          qualified.  This means we need to prepend the function name
7553          as well as adding the ``___XR'' suffix to build the name of
7554          the associated renaming symbol.  */
7555       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7556       /* Function names sometimes contain suffixes used
7557          for instance to qualify nested subprograms.  When building
7558          the XR type name, we need to make sure that this suffix is
7559          not included.  So do not include any suffix in the function
7560          name length below.  */
7561       int function_name_len = ada_name_prefix_len (function_name);
7562       const int rename_len = function_name_len + 2      /*  "__" */
7563         + strlen (name) + 6 /* "___XR\0" */ ;
7564
7565       /* Strip the suffix if necessary.  */
7566       ada_remove_trailing_digits (function_name, &function_name_len);
7567       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7568       ada_remove_Xbn_suffix (function_name, &function_name_len);
7569
7570       /* Library-level functions are a special case, as GNAT adds
7571          a ``_ada_'' prefix to the function name to avoid namespace
7572          pollution.  However, the renaming symbols themselves do not
7573          have this prefix, so we need to skip this prefix if present.  */
7574       if (function_name_len > 5 /* "_ada_" */
7575           && strstr (function_name, "_ada_") == function_name)
7576         {
7577           function_name += 5;
7578           function_name_len -= 5;
7579         }
7580
7581       rename = (char *) alloca (rename_len * sizeof (char));
7582       strncpy (rename, function_name, function_name_len);
7583       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7584                  "__%s___XR", name);
7585     }
7586   else
7587     {
7588       const int rename_len = strlen (name) + 6;
7589
7590       rename = (char *) alloca (rename_len * sizeof (char));
7591       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7592     }
7593
7594   return ada_find_any_type_symbol (rename);
7595 }
7596
7597 /* Because of GNAT encoding conventions, several GDB symbols may match a
7598    given type name.  If the type denoted by TYPE0 is to be preferred to
7599    that of TYPE1 for purposes of type printing, return non-zero;
7600    otherwise return 0.  */
7601
7602 int
7603 ada_prefer_type (struct type *type0, struct type *type1)
7604 {
7605   if (type1 == NULL)
7606     return 1;
7607   else if (type0 == NULL)
7608     return 0;
7609   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7610     return 1;
7611   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7612     return 0;
7613   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7614     return 1;
7615   else if (ada_is_constrained_packed_array_type (type0))
7616     return 1;
7617   else if (ada_is_array_descriptor_type (type0)
7618            && !ada_is_array_descriptor_type (type1))
7619     return 1;
7620   else
7621     {
7622       const char *type0_name = type_name_no_tag (type0);
7623       const char *type1_name = type_name_no_tag (type1);
7624
7625       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7626           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7627         return 1;
7628     }
7629   return 0;
7630 }
7631
7632 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7633    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
7634
7635 const char *
7636 ada_type_name (struct type *type)
7637 {
7638   if (type == NULL)
7639     return NULL;
7640   else if (TYPE_NAME (type) != NULL)
7641     return TYPE_NAME (type);
7642   else
7643     return TYPE_TAG_NAME (type);
7644 }
7645
7646 /* Search the list of "descriptive" types associated to TYPE for a type
7647    whose name is NAME.  */
7648
7649 static struct type *
7650 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7651 {
7652   struct type *result;
7653
7654   if (ada_ignore_descriptive_types_p)
7655     return NULL;
7656
7657   /* If there no descriptive-type info, then there is no parallel type
7658      to be found.  */
7659   if (!HAVE_GNAT_AUX_INFO (type))
7660     return NULL;
7661
7662   result = TYPE_DESCRIPTIVE_TYPE (type);
7663   while (result != NULL)
7664     {
7665       const char *result_name = ada_type_name (result);
7666
7667       if (result_name == NULL)
7668         {
7669           warning (_("unexpected null name on descriptive type"));
7670           return NULL;
7671         }
7672
7673       /* If the names match, stop.  */
7674       if (strcmp (result_name, name) == 0)
7675         break;
7676
7677       /* Otherwise, look at the next item on the list, if any.  */
7678       if (HAVE_GNAT_AUX_INFO (result))
7679         result = TYPE_DESCRIPTIVE_TYPE (result);
7680       else
7681         result = NULL;
7682     }
7683
7684   /* If we didn't find a match, see whether this is a packed array.  With
7685      older compilers, the descriptive type information is either absent or
7686      irrelevant when it comes to packed arrays so the above lookup fails.
7687      Fall back to using a parallel lookup by name in this case.  */
7688   if (result == NULL && ada_is_constrained_packed_array_type (type))
7689     return ada_find_any_type (name);
7690
7691   return result;
7692 }
7693
7694 /* Find a parallel type to TYPE with the specified NAME, using the
7695    descriptive type taken from the debugging information, if available,
7696    and otherwise using the (slower) name-based method.  */
7697
7698 static struct type *
7699 ada_find_parallel_type_with_name (struct type *type, const char *name)
7700 {
7701   struct type *result = NULL;
7702
7703   if (HAVE_GNAT_AUX_INFO (type))
7704     result = find_parallel_type_by_descriptive_type (type, name);
7705   else
7706     result = ada_find_any_type (name);
7707
7708   return result;
7709 }
7710
7711 /* Same as above, but specify the name of the parallel type by appending
7712    SUFFIX to the name of TYPE.  */
7713
7714 struct type *
7715 ada_find_parallel_type (struct type *type, const char *suffix)
7716 {
7717   char *name;
7718   const char *typename = ada_type_name (type);
7719   int len;
7720
7721   if (typename == NULL)
7722     return NULL;
7723
7724   len = strlen (typename);
7725
7726   name = (char *) alloca (len + strlen (suffix) + 1);
7727
7728   strcpy (name, typename);
7729   strcpy (name + len, suffix);
7730
7731   return ada_find_parallel_type_with_name (type, name);
7732 }
7733
7734 /* If TYPE is a variable-size record type, return the corresponding template
7735    type describing its fields.  Otherwise, return NULL.  */
7736
7737 static struct type *
7738 dynamic_template_type (struct type *type)
7739 {
7740   type = ada_check_typedef (type);
7741
7742   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7743       || ada_type_name (type) == NULL)
7744     return NULL;
7745   else
7746     {
7747       int len = strlen (ada_type_name (type));
7748
7749       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7750         return type;
7751       else
7752         return ada_find_parallel_type (type, "___XVE");
7753     }
7754 }
7755
7756 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7757    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7758
7759 static int
7760 is_dynamic_field (struct type *templ_type, int field_num)
7761 {
7762   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7763
7764   return name != NULL
7765     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7766     && strstr (name, "___XVL") != NULL;
7767 }
7768
7769 /* The index of the variant field of TYPE, or -1 if TYPE does not
7770    represent a variant record type.  */
7771
7772 static int
7773 variant_field_index (struct type *type)
7774 {
7775   int f;
7776
7777   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7778     return -1;
7779
7780   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7781     {
7782       if (ada_is_variant_part (type, f))
7783         return f;
7784     }
7785   return -1;
7786 }
7787
7788 /* A record type with no fields.  */
7789
7790 static struct type *
7791 empty_record (struct type *template)
7792 {
7793   struct type *type = alloc_type_copy (template);
7794
7795   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7796   TYPE_NFIELDS (type) = 0;
7797   TYPE_FIELDS (type) = NULL;
7798   INIT_CPLUS_SPECIFIC (type);
7799   TYPE_NAME (type) = "<empty>";
7800   TYPE_TAG_NAME (type) = NULL;
7801   TYPE_LENGTH (type) = 0;
7802   return type;
7803 }
7804
7805 /* An ordinary record type (with fixed-length fields) that describes
7806    the value of type TYPE at VALADDR or ADDRESS (see comments at
7807    the beginning of this section) VAL according to GNAT conventions.
7808    DVAL0 should describe the (portion of a) record that contains any
7809    necessary discriminants.  It should be NULL if value_type (VAL) is
7810    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7811    variant field (unless unchecked) is replaced by a particular branch
7812    of the variant.
7813
7814    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7815    length are not statically known are discarded.  As a consequence,
7816    VALADDR, ADDRESS and DVAL0 are ignored.
7817
7818    NOTE: Limitations: For now, we assume that dynamic fields and
7819    variants occupy whole numbers of bytes.  However, they need not be
7820    byte-aligned.  */
7821
7822 struct type *
7823 ada_template_to_fixed_record_type_1 (struct type *type,
7824                                      const gdb_byte *valaddr,
7825                                      CORE_ADDR address, struct value *dval0,
7826                                      int keep_dynamic_fields)
7827 {
7828   struct value *mark = value_mark ();
7829   struct value *dval;
7830   struct type *rtype;
7831   int nfields, bit_len;
7832   int variant_field;
7833   long off;
7834   int fld_bit_len;
7835   int f;
7836
7837   /* Compute the number of fields in this record type that are going
7838      to be processed: unless keep_dynamic_fields, this includes only
7839      fields whose position and length are static will be processed.  */
7840   if (keep_dynamic_fields)
7841     nfields = TYPE_NFIELDS (type);
7842   else
7843     {
7844       nfields = 0;
7845       while (nfields < TYPE_NFIELDS (type)
7846              && !ada_is_variant_part (type, nfields)
7847              && !is_dynamic_field (type, nfields))
7848         nfields++;
7849     }
7850
7851   rtype = alloc_type_copy (type);
7852   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7853   INIT_CPLUS_SPECIFIC (rtype);
7854   TYPE_NFIELDS (rtype) = nfields;
7855   TYPE_FIELDS (rtype) = (struct field *)
7856     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7857   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7858   TYPE_NAME (rtype) = ada_type_name (type);
7859   TYPE_TAG_NAME (rtype) = NULL;
7860   TYPE_FIXED_INSTANCE (rtype) = 1;
7861
7862   off = 0;
7863   bit_len = 0;
7864   variant_field = -1;
7865
7866   for (f = 0; f < nfields; f += 1)
7867     {
7868       off = align_value (off, field_alignment (type, f))
7869         + TYPE_FIELD_BITPOS (type, f);
7870       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7871       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7872
7873       if (ada_is_variant_part (type, f))
7874         {
7875           variant_field = f;
7876           fld_bit_len = 0;
7877         }
7878       else if (is_dynamic_field (type, f))
7879         {
7880           const gdb_byte *field_valaddr = valaddr;
7881           CORE_ADDR field_address = address;
7882           struct type *field_type =
7883             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7884
7885           if (dval0 == NULL)
7886             {
7887               /* rtype's length is computed based on the run-time
7888                  value of discriminants.  If the discriminants are not
7889                  initialized, the type size may be completely bogus and
7890                  GDB may fail to allocate a value for it.  So check the
7891                  size first before creating the value.  */
7892               check_size (rtype);
7893               /* Using plain value_from_contents_and_address here
7894                  causes problems because we will end up trying to
7895                  resolve a type that is currently being
7896                  constructed.  */
7897               dval = value_from_contents_and_address_unresolved (rtype,
7898                                                                  valaddr,
7899                                                                  address);
7900               rtype = value_type (dval);
7901             }
7902           else
7903             dval = dval0;
7904
7905           /* If the type referenced by this field is an aligner type, we need
7906              to unwrap that aligner type, because its size might not be set.
7907              Keeping the aligner type would cause us to compute the wrong
7908              size for this field, impacting the offset of the all the fields
7909              that follow this one.  */
7910           if (ada_is_aligner_type (field_type))
7911             {
7912               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7913
7914               field_valaddr = cond_offset_host (field_valaddr, field_offset);
7915               field_address = cond_offset_target (field_address, field_offset);
7916               field_type = ada_aligned_type (field_type);
7917             }
7918
7919           field_valaddr = cond_offset_host (field_valaddr,
7920                                             off / TARGET_CHAR_BIT);
7921           field_address = cond_offset_target (field_address,
7922                                               off / TARGET_CHAR_BIT);
7923
7924           /* Get the fixed type of the field.  Note that, in this case,
7925              we do not want to get the real type out of the tag: if
7926              the current field is the parent part of a tagged record,
7927              we will get the tag of the object.  Clearly wrong: the real
7928              type of the parent is not the real type of the child.  We
7929              would end up in an infinite loop.  */
7930           field_type = ada_get_base_type (field_type);
7931           field_type = ada_to_fixed_type (field_type, field_valaddr,
7932                                           field_address, dval, 0);
7933           /* If the field size is already larger than the maximum
7934              object size, then the record itself will necessarily
7935              be larger than the maximum object size.  We need to make
7936              this check now, because the size might be so ridiculously
7937              large (due to an uninitialized variable in the inferior)
7938              that it would cause an overflow when adding it to the
7939              record size.  */
7940           check_size (field_type);
7941
7942           TYPE_FIELD_TYPE (rtype, f) = field_type;
7943           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7944           /* The multiplication can potentially overflow.  But because
7945              the field length has been size-checked just above, and
7946              assuming that the maximum size is a reasonable value,
7947              an overflow should not happen in practice.  So rather than
7948              adding overflow recovery code to this already complex code,
7949              we just assume that it's not going to happen.  */
7950           fld_bit_len =
7951             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7952         }
7953       else
7954         {
7955           /* Note: If this field's type is a typedef, it is important
7956              to preserve the typedef layer.
7957
7958              Otherwise, we might be transforming a typedef to a fat
7959              pointer (encoding a pointer to an unconstrained array),
7960              into a basic fat pointer (encoding an unconstrained
7961              array).  As both types are implemented using the same
7962              structure, the typedef is the only clue which allows us
7963              to distinguish between the two options.  Stripping it
7964              would prevent us from printing this field appropriately.  */
7965           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
7966           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7967           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7968             fld_bit_len =
7969               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7970           else
7971             {
7972               struct type *field_type = TYPE_FIELD_TYPE (type, f);
7973
7974               /* We need to be careful of typedefs when computing
7975                  the length of our field.  If this is a typedef,
7976                  get the length of the target type, not the length
7977                  of the typedef.  */
7978               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7979                 field_type = ada_typedef_target_type (field_type);
7980
7981               fld_bit_len =
7982                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7983             }
7984         }
7985       if (off + fld_bit_len > bit_len)
7986         bit_len = off + fld_bit_len;
7987       off += fld_bit_len;
7988       TYPE_LENGTH (rtype) =
7989         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7990     }
7991
7992   /* We handle the variant part, if any, at the end because of certain
7993      odd cases in which it is re-ordered so as NOT to be the last field of
7994      the record.  This can happen in the presence of representation
7995      clauses.  */
7996   if (variant_field >= 0)
7997     {
7998       struct type *branch_type;
7999
8000       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8001
8002       if (dval0 == NULL)
8003         {
8004           /* Using plain value_from_contents_and_address here causes
8005              problems because we will end up trying to resolve a type
8006              that is currently being constructed.  */
8007           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8008                                                              address);
8009           rtype = value_type (dval);
8010         }
8011       else
8012         dval = dval0;
8013
8014       branch_type =
8015         to_fixed_variant_branch_type
8016         (TYPE_FIELD_TYPE (type, variant_field),
8017          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8018          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8019       if (branch_type == NULL)
8020         {
8021           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8022             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8023           TYPE_NFIELDS (rtype) -= 1;
8024         }
8025       else
8026         {
8027           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8028           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8029           fld_bit_len =
8030             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8031             TARGET_CHAR_BIT;
8032           if (off + fld_bit_len > bit_len)
8033             bit_len = off + fld_bit_len;
8034           TYPE_LENGTH (rtype) =
8035             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8036         }
8037     }
8038
8039   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8040      should contain the alignment of that record, which should be a strictly
8041      positive value.  If null or negative, then something is wrong, most
8042      probably in the debug info.  In that case, we don't round up the size
8043      of the resulting type.  If this record is not part of another structure,
8044      the current RTYPE length might be good enough for our purposes.  */
8045   if (TYPE_LENGTH (type) <= 0)
8046     {
8047       if (TYPE_NAME (rtype))
8048         warning (_("Invalid type size for `%s' detected: %d."),
8049                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8050       else
8051         warning (_("Invalid type size for <unnamed> detected: %d."),
8052                  TYPE_LENGTH (type));
8053     }
8054   else
8055     {
8056       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8057                                          TYPE_LENGTH (type));
8058     }
8059
8060   value_free_to_mark (mark);
8061   if (TYPE_LENGTH (rtype) > varsize_limit)
8062     error (_("record type with dynamic size is larger than varsize-limit"));
8063   return rtype;
8064 }
8065
8066 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8067    of 1.  */
8068
8069 static struct type *
8070 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8071                                CORE_ADDR address, struct value *dval0)
8072 {
8073   return ada_template_to_fixed_record_type_1 (type, valaddr,
8074                                               address, dval0, 1);
8075 }
8076
8077 /* An ordinary record type in which ___XVL-convention fields and
8078    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8079    static approximations, containing all possible fields.  Uses
8080    no runtime values.  Useless for use in values, but that's OK,
8081    since the results are used only for type determinations.   Works on both
8082    structs and unions.  Representation note: to save space, we memorize
8083    the result of this function in the TYPE_TARGET_TYPE of the
8084    template type.  */
8085
8086 static struct type *
8087 template_to_static_fixed_type (struct type *type0)
8088 {
8089   struct type *type;
8090   int nfields;
8091   int f;
8092
8093   if (TYPE_TARGET_TYPE (type0) != NULL)
8094     return TYPE_TARGET_TYPE (type0);
8095
8096   nfields = TYPE_NFIELDS (type0);
8097   type = type0;
8098
8099   for (f = 0; f < nfields; f += 1)
8100     {
8101       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
8102       struct type *new_type;
8103
8104       if (is_dynamic_field (type0, f))
8105         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8106       else
8107         new_type = static_unwrap_type (field_type);
8108       if (type == type0 && new_type != field_type)
8109         {
8110           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8111           TYPE_CODE (type) = TYPE_CODE (type0);
8112           INIT_CPLUS_SPECIFIC (type);
8113           TYPE_NFIELDS (type) = nfields;
8114           TYPE_FIELDS (type) = (struct field *)
8115             TYPE_ALLOC (type, nfields * sizeof (struct field));
8116           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8117                   sizeof (struct field) * nfields);
8118           TYPE_NAME (type) = ada_type_name (type0);
8119           TYPE_TAG_NAME (type) = NULL;
8120           TYPE_FIXED_INSTANCE (type) = 1;
8121           TYPE_LENGTH (type) = 0;
8122         }
8123       TYPE_FIELD_TYPE (type, f) = new_type;
8124       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8125     }
8126   return type;
8127 }
8128
8129 /* Given an object of type TYPE whose contents are at VALADDR and
8130    whose address in memory is ADDRESS, returns a revision of TYPE,
8131    which should be a non-dynamic-sized record, in which the variant
8132    part, if any, is replaced with the appropriate branch.  Looks
8133    for discriminant values in DVAL0, which can be NULL if the record
8134    contains the necessary discriminant values.  */
8135
8136 static struct type *
8137 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8138                                    CORE_ADDR address, struct value *dval0)
8139 {
8140   struct value *mark = value_mark ();
8141   struct value *dval;
8142   struct type *rtype;
8143   struct type *branch_type;
8144   int nfields = TYPE_NFIELDS (type);
8145   int variant_field = variant_field_index (type);
8146
8147   if (variant_field == -1)
8148     return type;
8149
8150   if (dval0 == NULL)
8151     {
8152       dval = value_from_contents_and_address (type, valaddr, address);
8153       type = value_type (dval);
8154     }
8155   else
8156     dval = dval0;
8157
8158   rtype = alloc_type_copy (type);
8159   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8160   INIT_CPLUS_SPECIFIC (rtype);
8161   TYPE_NFIELDS (rtype) = nfields;
8162   TYPE_FIELDS (rtype) =
8163     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8164   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8165           sizeof (struct field) * nfields);
8166   TYPE_NAME (rtype) = ada_type_name (type);
8167   TYPE_TAG_NAME (rtype) = NULL;
8168   TYPE_FIXED_INSTANCE (rtype) = 1;
8169   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8170
8171   branch_type = to_fixed_variant_branch_type
8172     (TYPE_FIELD_TYPE (type, variant_field),
8173      cond_offset_host (valaddr,
8174                        TYPE_FIELD_BITPOS (type, variant_field)
8175                        / TARGET_CHAR_BIT),
8176      cond_offset_target (address,
8177                          TYPE_FIELD_BITPOS (type, variant_field)
8178                          / TARGET_CHAR_BIT), dval);
8179   if (branch_type == NULL)
8180     {
8181       int f;
8182
8183       for (f = variant_field + 1; f < nfields; f += 1)
8184         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8185       TYPE_NFIELDS (rtype) -= 1;
8186     }
8187   else
8188     {
8189       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8190       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8191       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8192       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8193     }
8194   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8195
8196   value_free_to_mark (mark);
8197   return rtype;
8198 }
8199
8200 /* An ordinary record type (with fixed-length fields) that describes
8201    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8202    beginning of this section].   Any necessary discriminants' values
8203    should be in DVAL, a record value; it may be NULL if the object
8204    at ADDR itself contains any necessary discriminant values.
8205    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8206    values from the record are needed.  Except in the case that DVAL,
8207    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8208    unchecked) is replaced by a particular branch of the variant.
8209
8210    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8211    is questionable and may be removed.  It can arise during the
8212    processing of an unconstrained-array-of-record type where all the
8213    variant branches have exactly the same size.  This is because in
8214    such cases, the compiler does not bother to use the XVS convention
8215    when encoding the record.  I am currently dubious of this
8216    shortcut and suspect the compiler should be altered.  FIXME.  */
8217
8218 static struct type *
8219 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8220                       CORE_ADDR address, struct value *dval)
8221 {
8222   struct type *templ_type;
8223
8224   if (TYPE_FIXED_INSTANCE (type0))
8225     return type0;
8226
8227   templ_type = dynamic_template_type (type0);
8228
8229   if (templ_type != NULL)
8230     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8231   else if (variant_field_index (type0) >= 0)
8232     {
8233       if (dval == NULL && valaddr == NULL && address == 0)
8234         return type0;
8235       return to_record_with_fixed_variant_part (type0, valaddr, address,
8236                                                 dval);
8237     }
8238   else
8239     {
8240       TYPE_FIXED_INSTANCE (type0) = 1;
8241       return type0;
8242     }
8243
8244 }
8245
8246 /* An ordinary record type (with fixed-length fields) that describes
8247    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8248    union type.  Any necessary discriminants' values should be in DVAL,
8249    a record value.  That is, this routine selects the appropriate
8250    branch of the union at ADDR according to the discriminant value
8251    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8252    it represents a variant subject to a pragma Unchecked_Union.  */
8253
8254 static struct type *
8255 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8256                               CORE_ADDR address, struct value *dval)
8257 {
8258   int which;
8259   struct type *templ_type;
8260   struct type *var_type;
8261
8262   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8263     var_type = TYPE_TARGET_TYPE (var_type0);
8264   else
8265     var_type = var_type0;
8266
8267   templ_type = ada_find_parallel_type (var_type, "___XVU");
8268
8269   if (templ_type != NULL)
8270     var_type = templ_type;
8271
8272   if (is_unchecked_variant (var_type, value_type (dval)))
8273       return var_type0;
8274   which =
8275     ada_which_variant_applies (var_type,
8276                                value_type (dval), value_contents (dval));
8277
8278   if (which < 0)
8279     return empty_record (var_type);
8280   else if (is_dynamic_field (var_type, which))
8281     return to_fixed_record_type
8282       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8283        valaddr, address, dval);
8284   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8285     return
8286       to_fixed_record_type
8287       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8288   else
8289     return TYPE_FIELD_TYPE (var_type, which);
8290 }
8291
8292 /* Assuming that TYPE0 is an array type describing the type of a value
8293    at ADDR, and that DVAL describes a record containing any
8294    discriminants used in TYPE0, returns a type for the value that
8295    contains no dynamic components (that is, no components whose sizes
8296    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8297    true, gives an error message if the resulting type's size is over
8298    varsize_limit.  */
8299
8300 static struct type *
8301 to_fixed_array_type (struct type *type0, struct value *dval,
8302                      int ignore_too_big)
8303 {
8304   struct type *index_type_desc;
8305   struct type *result;
8306   int constrained_packed_array_p;
8307
8308   type0 = ada_check_typedef (type0);
8309   if (TYPE_FIXED_INSTANCE (type0))
8310     return type0;
8311
8312   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8313   if (constrained_packed_array_p)
8314     type0 = decode_constrained_packed_array_type (type0);
8315
8316   index_type_desc = ada_find_parallel_type (type0, "___XA");
8317   ada_fixup_array_indexes_type (index_type_desc);
8318   if (index_type_desc == NULL)
8319     {
8320       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8321
8322       /* NOTE: elt_type---the fixed version of elt_type0---should never
8323          depend on the contents of the array in properly constructed
8324          debugging data.  */
8325       /* Create a fixed version of the array element type.
8326          We're not providing the address of an element here,
8327          and thus the actual object value cannot be inspected to do
8328          the conversion.  This should not be a problem, since arrays of
8329          unconstrained objects are not allowed.  In particular, all
8330          the elements of an array of a tagged type should all be of
8331          the same type specified in the debugging info.  No need to
8332          consult the object tag.  */
8333       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8334
8335       /* Make sure we always create a new array type when dealing with
8336          packed array types, since we're going to fix-up the array
8337          type length and element bitsize a little further down.  */
8338       if (elt_type0 == elt_type && !constrained_packed_array_p)
8339         result = type0;
8340       else
8341         result = create_array_type (alloc_type_copy (type0),
8342                                     elt_type, TYPE_INDEX_TYPE (type0));
8343     }
8344   else
8345     {
8346       int i;
8347       struct type *elt_type0;
8348
8349       elt_type0 = type0;
8350       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8351         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8352
8353       /* NOTE: result---the fixed version of elt_type0---should never
8354          depend on the contents of the array in properly constructed
8355          debugging data.  */
8356       /* Create a fixed version of the array element type.
8357          We're not providing the address of an element here,
8358          and thus the actual object value cannot be inspected to do
8359          the conversion.  This should not be a problem, since arrays of
8360          unconstrained objects are not allowed.  In particular, all
8361          the elements of an array of a tagged type should all be of
8362          the same type specified in the debugging info.  No need to
8363          consult the object tag.  */
8364       result =
8365         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8366
8367       elt_type0 = type0;
8368       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8369         {
8370           struct type *range_type =
8371             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8372
8373           result = create_array_type (alloc_type_copy (elt_type0),
8374                                       result, range_type);
8375           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8376         }
8377       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8378         error (_("array type with dynamic size is larger than varsize-limit"));
8379     }
8380
8381   /* We want to preserve the type name.  This can be useful when
8382      trying to get the type name of a value that has already been
8383      printed (for instance, if the user did "print VAR; whatis $".  */
8384   TYPE_NAME (result) = TYPE_NAME (type0);
8385
8386   if (constrained_packed_array_p)
8387     {
8388       /* So far, the resulting type has been created as if the original
8389          type was a regular (non-packed) array type.  As a result, the
8390          bitsize of the array elements needs to be set again, and the array
8391          length needs to be recomputed based on that bitsize.  */
8392       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8393       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8394
8395       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8396       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8397       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8398         TYPE_LENGTH (result)++;
8399     }
8400
8401   TYPE_FIXED_INSTANCE (result) = 1;
8402   return result;
8403 }
8404
8405
8406 /* A standard type (containing no dynamically sized components)
8407    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8408    DVAL describes a record containing any discriminants used in TYPE0,
8409    and may be NULL if there are none, or if the object of type TYPE at
8410    ADDRESS or in VALADDR contains these discriminants.
8411    
8412    If CHECK_TAG is not null, in the case of tagged types, this function
8413    attempts to locate the object's tag and use it to compute the actual
8414    type.  However, when ADDRESS is null, we cannot use it to determine the
8415    location of the tag, and therefore compute the tagged type's actual type.
8416    So we return the tagged type without consulting the tag.  */
8417    
8418 static struct type *
8419 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8420                    CORE_ADDR address, struct value *dval, int check_tag)
8421 {
8422   type = ada_check_typedef (type);
8423   switch (TYPE_CODE (type))
8424     {
8425     default:
8426       return type;
8427     case TYPE_CODE_STRUCT:
8428       {
8429         struct type *static_type = to_static_fixed_type (type);
8430         struct type *fixed_record_type =
8431           to_fixed_record_type (type, valaddr, address, NULL);
8432
8433         /* If STATIC_TYPE is a tagged type and we know the object's address,
8434            then we can determine its tag, and compute the object's actual
8435            type from there.  Note that we have to use the fixed record
8436            type (the parent part of the record may have dynamic fields
8437            and the way the location of _tag is expressed may depend on
8438            them).  */
8439
8440         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8441           {
8442             struct value *tag =
8443               value_tag_from_contents_and_address
8444               (fixed_record_type,
8445                valaddr,
8446                address);
8447             struct type *real_type = type_from_tag (tag);
8448             struct value *obj =
8449               value_from_contents_and_address (fixed_record_type,
8450                                                valaddr,
8451                                                address);
8452             fixed_record_type = value_type (obj);
8453             if (real_type != NULL)
8454               return to_fixed_record_type
8455                 (real_type, NULL,
8456                  value_address (ada_tag_value_at_base_address (obj)), NULL);
8457           }
8458
8459         /* Check to see if there is a parallel ___XVZ variable.
8460            If there is, then it provides the actual size of our type.  */
8461         else if (ada_type_name (fixed_record_type) != NULL)
8462           {
8463             const char *name = ada_type_name (fixed_record_type);
8464             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8465             int xvz_found = 0;
8466             LONGEST size;
8467
8468             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8469             size = get_int_var_value (xvz_name, &xvz_found);
8470             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8471               {
8472                 fixed_record_type = copy_type (fixed_record_type);
8473                 TYPE_LENGTH (fixed_record_type) = size;
8474
8475                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8476                    observed this when the debugging info is STABS, and
8477                    apparently it is something that is hard to fix.
8478
8479                    In practice, we don't need the actual type definition
8480                    at all, because the presence of the XVZ variable allows us
8481                    to assume that there must be a XVS type as well, which we
8482                    should be able to use later, when we need the actual type
8483                    definition.
8484
8485                    In the meantime, pretend that the "fixed" type we are
8486                    returning is NOT a stub, because this can cause trouble
8487                    when using this type to create new types targeting it.
8488                    Indeed, the associated creation routines often check
8489                    whether the target type is a stub and will try to replace
8490                    it, thus using a type with the wrong size.  This, in turn,
8491                    might cause the new type to have the wrong size too.
8492                    Consider the case of an array, for instance, where the size
8493                    of the array is computed from the number of elements in
8494                    our array multiplied by the size of its element.  */
8495                 TYPE_STUB (fixed_record_type) = 0;
8496               }
8497           }
8498         return fixed_record_type;
8499       }
8500     case TYPE_CODE_ARRAY:
8501       return to_fixed_array_type (type, dval, 1);
8502     case TYPE_CODE_UNION:
8503       if (dval == NULL)
8504         return type;
8505       else
8506         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8507     }
8508 }
8509
8510 /* The same as ada_to_fixed_type_1, except that it preserves the type
8511    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8512
8513    The typedef layer needs be preserved in order to differentiate between
8514    arrays and array pointers when both types are implemented using the same
8515    fat pointer.  In the array pointer case, the pointer is encoded as
8516    a typedef of the pointer type.  For instance, considering:
8517
8518           type String_Access is access String;
8519           S1 : String_Access := null;
8520
8521    To the debugger, S1 is defined as a typedef of type String.  But
8522    to the user, it is a pointer.  So if the user tries to print S1,
8523    we should not dereference the array, but print the array address
8524    instead.
8525
8526    If we didn't preserve the typedef layer, we would lose the fact that
8527    the type is to be presented as a pointer (needs de-reference before
8528    being printed).  And we would also use the source-level type name.  */
8529
8530 struct type *
8531 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8532                    CORE_ADDR address, struct value *dval, int check_tag)
8533
8534 {
8535   struct type *fixed_type =
8536     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8537
8538   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8539       then preserve the typedef layer.
8540
8541       Implementation note: We can only check the main-type portion of
8542       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8543       from TYPE now returns a type that has the same instance flags
8544       as TYPE.  For instance, if TYPE is a "typedef const", and its
8545       target type is a "struct", then the typedef elimination will return
8546       a "const" version of the target type.  See check_typedef for more
8547       details about how the typedef layer elimination is done.
8548
8549       brobecker/2010-11-19: It seems to me that the only case where it is
8550       useful to preserve the typedef layer is when dealing with fat pointers.
8551       Perhaps, we could add a check for that and preserve the typedef layer
8552       only in that situation.  But this seems unecessary so far, probably
8553       because we call check_typedef/ada_check_typedef pretty much everywhere.
8554       */
8555   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8556       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8557           == TYPE_MAIN_TYPE (fixed_type)))
8558     return type;
8559
8560   return fixed_type;
8561 }
8562
8563 /* A standard (static-sized) type corresponding as well as possible to
8564    TYPE0, but based on no runtime data.  */
8565
8566 static struct type *
8567 to_static_fixed_type (struct type *type0)
8568 {
8569   struct type *type;
8570
8571   if (type0 == NULL)
8572     return NULL;
8573
8574   if (TYPE_FIXED_INSTANCE (type0))
8575     return type0;
8576
8577   type0 = ada_check_typedef (type0);
8578
8579   switch (TYPE_CODE (type0))
8580     {
8581     default:
8582       return type0;
8583     case TYPE_CODE_STRUCT:
8584       type = dynamic_template_type (type0);
8585       if (type != NULL)
8586         return template_to_static_fixed_type (type);
8587       else
8588         return template_to_static_fixed_type (type0);
8589     case TYPE_CODE_UNION:
8590       type = ada_find_parallel_type (type0, "___XVU");
8591       if (type != NULL)
8592         return template_to_static_fixed_type (type);
8593       else
8594         return template_to_static_fixed_type (type0);
8595     }
8596 }
8597
8598 /* A static approximation of TYPE with all type wrappers removed.  */
8599
8600 static struct type *
8601 static_unwrap_type (struct type *type)
8602 {
8603   if (ada_is_aligner_type (type))
8604     {
8605       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8606       if (ada_type_name (type1) == NULL)
8607         TYPE_NAME (type1) = ada_type_name (type);
8608
8609       return static_unwrap_type (type1);
8610     }
8611   else
8612     {
8613       struct type *raw_real_type = ada_get_base_type (type);
8614
8615       if (raw_real_type == type)
8616         return type;
8617       else
8618         return to_static_fixed_type (raw_real_type);
8619     }
8620 }
8621
8622 /* In some cases, incomplete and private types require
8623    cross-references that are not resolved as records (for example,
8624       type Foo;
8625       type FooP is access Foo;
8626       V: FooP;
8627       type Foo is array ...;
8628    ).  In these cases, since there is no mechanism for producing
8629    cross-references to such types, we instead substitute for FooP a
8630    stub enumeration type that is nowhere resolved, and whose tag is
8631    the name of the actual type.  Call these types "non-record stubs".  */
8632
8633 /* A type equivalent to TYPE that is not a non-record stub, if one
8634    exists, otherwise TYPE.  */
8635
8636 struct type *
8637 ada_check_typedef (struct type *type)
8638 {
8639   if (type == NULL)
8640     return NULL;
8641
8642   /* If our type is a typedef type of a fat pointer, then we're done.
8643      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8644      what allows us to distinguish between fat pointers that represent
8645      array types, and fat pointers that represent array access types
8646      (in both cases, the compiler implements them as fat pointers).  */
8647   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8648       && is_thick_pntr (ada_typedef_target_type (type)))
8649     return type;
8650
8651   CHECK_TYPEDEF (type);
8652   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8653       || !TYPE_STUB (type)
8654       || TYPE_TAG_NAME (type) == NULL)
8655     return type;
8656   else
8657     {
8658       const char *name = TYPE_TAG_NAME (type);
8659       struct type *type1 = ada_find_any_type (name);
8660
8661       if (type1 == NULL)
8662         return type;
8663
8664       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8665          stubs pointing to arrays, as we don't create symbols for array
8666          types, only for the typedef-to-array types).  If that's the case,
8667          strip the typedef layer.  */
8668       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8669         type1 = ada_check_typedef (type1);
8670
8671       return type1;
8672     }
8673 }
8674
8675 /* A value representing the data at VALADDR/ADDRESS as described by
8676    type TYPE0, but with a standard (static-sized) type that correctly
8677    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8678    type, then return VAL0 [this feature is simply to avoid redundant
8679    creation of struct values].  */
8680
8681 static struct value *
8682 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8683                            struct value *val0)
8684 {
8685   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8686
8687   if (type == type0 && val0 != NULL)
8688     return val0;
8689   else
8690     return value_from_contents_and_address (type, 0, address);
8691 }
8692
8693 /* A value representing VAL, but with a standard (static-sized) type
8694    that correctly describes it.  Does not necessarily create a new
8695    value.  */
8696
8697 struct value *
8698 ada_to_fixed_value (struct value *val)
8699 {
8700   val = unwrap_value (val);
8701   val = ada_to_fixed_value_create (value_type (val),
8702                                       value_address (val),
8703                                       val);
8704   return val;
8705 }
8706 \f
8707
8708 /* Attributes */
8709
8710 /* Table mapping attribute numbers to names.
8711    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8712
8713 static const char *attribute_names[] = {
8714   "<?>",
8715
8716   "first",
8717   "last",
8718   "length",
8719   "image",
8720   "max",
8721   "min",
8722   "modulus",
8723   "pos",
8724   "size",
8725   "tag",
8726   "val",
8727   0
8728 };
8729
8730 const char *
8731 ada_attribute_name (enum exp_opcode n)
8732 {
8733   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8734     return attribute_names[n - OP_ATR_FIRST + 1];
8735   else
8736     return attribute_names[0];
8737 }
8738
8739 /* Evaluate the 'POS attribute applied to ARG.  */
8740
8741 static LONGEST
8742 pos_atr (struct value *arg)
8743 {
8744   struct value *val = coerce_ref (arg);
8745   struct type *type = value_type (val);
8746
8747   if (!discrete_type_p (type))
8748     error (_("'POS only defined on discrete types"));
8749
8750   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8751     {
8752       int i;
8753       LONGEST v = value_as_long (val);
8754
8755       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8756         {
8757           if (v == TYPE_FIELD_ENUMVAL (type, i))
8758             return i;
8759         }
8760       error (_("enumeration value is invalid: can't find 'POS"));
8761     }
8762   else
8763     return value_as_long (val);
8764 }
8765
8766 static struct value *
8767 value_pos_atr (struct type *type, struct value *arg)
8768 {
8769   return value_from_longest (type, pos_atr (arg));
8770 }
8771
8772 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8773
8774 static struct value *
8775 value_val_atr (struct type *type, struct value *arg)
8776 {
8777   if (!discrete_type_p (type))
8778     error (_("'VAL only defined on discrete types"));
8779   if (!integer_type_p (value_type (arg)))
8780     error (_("'VAL requires integral argument"));
8781
8782   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8783     {
8784       long pos = value_as_long (arg);
8785
8786       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8787         error (_("argument to 'VAL out of range"));
8788       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8789     }
8790   else
8791     return value_from_longest (type, value_as_long (arg));
8792 }
8793 \f
8794
8795                                 /* Evaluation */
8796
8797 /* True if TYPE appears to be an Ada character type.
8798    [At the moment, this is true only for Character and Wide_Character;
8799    It is a heuristic test that could stand improvement].  */
8800
8801 int
8802 ada_is_character_type (struct type *type)
8803 {
8804   const char *name;
8805
8806   /* If the type code says it's a character, then assume it really is,
8807      and don't check any further.  */
8808   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8809     return 1;
8810   
8811   /* Otherwise, assume it's a character type iff it is a discrete type
8812      with a known character type name.  */
8813   name = ada_type_name (type);
8814   return (name != NULL
8815           && (TYPE_CODE (type) == TYPE_CODE_INT
8816               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8817           && (strcmp (name, "character") == 0
8818               || strcmp (name, "wide_character") == 0
8819               || strcmp (name, "wide_wide_character") == 0
8820               || strcmp (name, "unsigned char") == 0));
8821 }
8822
8823 /* True if TYPE appears to be an Ada string type.  */
8824
8825 int
8826 ada_is_string_type (struct type *type)
8827 {
8828   type = ada_check_typedef (type);
8829   if (type != NULL
8830       && TYPE_CODE (type) != TYPE_CODE_PTR
8831       && (ada_is_simple_array_type (type)
8832           || ada_is_array_descriptor_type (type))
8833       && ada_array_arity (type) == 1)
8834     {
8835       struct type *elttype = ada_array_element_type (type, 1);
8836
8837       return ada_is_character_type (elttype);
8838     }
8839   else
8840     return 0;
8841 }
8842
8843 /* The compiler sometimes provides a parallel XVS type for a given
8844    PAD type.  Normally, it is safe to follow the PAD type directly,
8845    but older versions of the compiler have a bug that causes the offset
8846    of its "F" field to be wrong.  Following that field in that case
8847    would lead to incorrect results, but this can be worked around
8848    by ignoring the PAD type and using the associated XVS type instead.
8849
8850    Set to True if the debugger should trust the contents of PAD types.
8851    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8852 static int trust_pad_over_xvs = 1;
8853
8854 /* True if TYPE is a struct type introduced by the compiler to force the
8855    alignment of a value.  Such types have a single field with a
8856    distinctive name.  */
8857
8858 int
8859 ada_is_aligner_type (struct type *type)
8860 {
8861   type = ada_check_typedef (type);
8862
8863   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8864     return 0;
8865
8866   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8867           && TYPE_NFIELDS (type) == 1
8868           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8869 }
8870
8871 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8872    the parallel type.  */
8873
8874 struct type *
8875 ada_get_base_type (struct type *raw_type)
8876 {
8877   struct type *real_type_namer;
8878   struct type *raw_real_type;
8879
8880   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8881     return raw_type;
8882
8883   if (ada_is_aligner_type (raw_type))
8884     /* The encoding specifies that we should always use the aligner type.
8885        So, even if this aligner type has an associated XVS type, we should
8886        simply ignore it.
8887
8888        According to the compiler gurus, an XVS type parallel to an aligner
8889        type may exist because of a stabs limitation.  In stabs, aligner
8890        types are empty because the field has a variable-sized type, and
8891        thus cannot actually be used as an aligner type.  As a result,
8892        we need the associated parallel XVS type to decode the type.
8893        Since the policy in the compiler is to not change the internal
8894        representation based on the debugging info format, we sometimes
8895        end up having a redundant XVS type parallel to the aligner type.  */
8896     return raw_type;
8897
8898   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8899   if (real_type_namer == NULL
8900       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8901       || TYPE_NFIELDS (real_type_namer) != 1)
8902     return raw_type;
8903
8904   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8905     {
8906       /* This is an older encoding form where the base type needs to be
8907          looked up by name.  We prefer the newer enconding because it is
8908          more efficient.  */
8909       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8910       if (raw_real_type == NULL)
8911         return raw_type;
8912       else
8913         return raw_real_type;
8914     }
8915
8916   /* The field in our XVS type is a reference to the base type.  */
8917   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
8918 }
8919
8920 /* The type of value designated by TYPE, with all aligners removed.  */
8921
8922 struct type *
8923 ada_aligned_type (struct type *type)
8924 {
8925   if (ada_is_aligner_type (type))
8926     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8927   else
8928     return ada_get_base_type (type);
8929 }
8930
8931
8932 /* The address of the aligned value in an object at address VALADDR
8933    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
8934
8935 const gdb_byte *
8936 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
8937 {
8938   if (ada_is_aligner_type (type))
8939     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8940                                    valaddr +
8941                                    TYPE_FIELD_BITPOS (type,
8942                                                       0) / TARGET_CHAR_BIT);
8943   else
8944     return valaddr;
8945 }
8946
8947
8948
8949 /* The printed representation of an enumeration literal with encoded
8950    name NAME.  The value is good to the next call of ada_enum_name.  */
8951 const char *
8952 ada_enum_name (const char *name)
8953 {
8954   static char *result;
8955   static size_t result_len = 0;
8956   char *tmp;
8957
8958   /* First, unqualify the enumeration name:
8959      1. Search for the last '.' character.  If we find one, then skip
8960      all the preceding characters, the unqualified name starts
8961      right after that dot.
8962      2. Otherwise, we may be debugging on a target where the compiler
8963      translates dots into "__".  Search forward for double underscores,
8964      but stop searching when we hit an overloading suffix, which is
8965      of the form "__" followed by digits.  */
8966
8967   tmp = strrchr (name, '.');
8968   if (tmp != NULL)
8969     name = tmp + 1;
8970   else
8971     {
8972       while ((tmp = strstr (name, "__")) != NULL)
8973         {
8974           if (isdigit (tmp[2]))
8975             break;
8976           else
8977             name = tmp + 2;
8978         }
8979     }
8980
8981   if (name[0] == 'Q')
8982     {
8983       int v;
8984
8985       if (name[1] == 'U' || name[1] == 'W')
8986         {
8987           if (sscanf (name + 2, "%x", &v) != 1)
8988             return name;
8989         }
8990       else
8991         return name;
8992
8993       GROW_VECT (result, result_len, 16);
8994       if (isascii (v) && isprint (v))
8995         xsnprintf (result, result_len, "'%c'", v);
8996       else if (name[1] == 'U')
8997         xsnprintf (result, result_len, "[\"%02x\"]", v);
8998       else
8999         xsnprintf (result, result_len, "[\"%04x\"]", v);
9000
9001       return result;
9002     }
9003   else
9004     {
9005       tmp = strstr (name, "__");
9006       if (tmp == NULL)
9007         tmp = strstr (name, "$");
9008       if (tmp != NULL)
9009         {
9010           GROW_VECT (result, result_len, tmp - name + 1);
9011           strncpy (result, name, tmp - name);
9012           result[tmp - name] = '\0';
9013           return result;
9014         }
9015
9016       return name;
9017     }
9018 }
9019
9020 /* Evaluate the subexpression of EXP starting at *POS as for
9021    evaluate_type, updating *POS to point just past the evaluated
9022    expression.  */
9023
9024 static struct value *
9025 evaluate_subexp_type (struct expression *exp, int *pos)
9026 {
9027   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9028 }
9029
9030 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9031    value it wraps.  */
9032
9033 static struct value *
9034 unwrap_value (struct value *val)
9035 {
9036   struct type *type = ada_check_typedef (value_type (val));
9037
9038   if (ada_is_aligner_type (type))
9039     {
9040       struct value *v = ada_value_struct_elt (val, "F", 0);
9041       struct type *val_type = ada_check_typedef (value_type (v));
9042
9043       if (ada_type_name (val_type) == NULL)
9044         TYPE_NAME (val_type) = ada_type_name (type);
9045
9046       return unwrap_value (v);
9047     }
9048   else
9049     {
9050       struct type *raw_real_type =
9051         ada_check_typedef (ada_get_base_type (type));
9052
9053       /* If there is no parallel XVS or XVE type, then the value is
9054          already unwrapped.  Return it without further modification.  */
9055       if ((type == raw_real_type)
9056           && ada_find_parallel_type (type, "___XVE") == NULL)
9057         return val;
9058
9059       return
9060         coerce_unspec_val_to_type
9061         (val, ada_to_fixed_type (raw_real_type, 0,
9062                                  value_address (val),
9063                                  NULL, 1));
9064     }
9065 }
9066
9067 static struct value *
9068 cast_to_fixed (struct type *type, struct value *arg)
9069 {
9070   LONGEST val;
9071
9072   if (type == value_type (arg))
9073     return arg;
9074   else if (ada_is_fixed_point_type (value_type (arg)))
9075     val = ada_float_to_fixed (type,
9076                               ada_fixed_to_float (value_type (arg),
9077                                                   value_as_long (arg)));
9078   else
9079     {
9080       DOUBLEST argd = value_as_double (arg);
9081
9082       val = ada_float_to_fixed (type, argd);
9083     }
9084
9085   return value_from_longest (type, val);
9086 }
9087
9088 static struct value *
9089 cast_from_fixed (struct type *type, struct value *arg)
9090 {
9091   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9092                                      value_as_long (arg));
9093
9094   return value_from_double (type, val);
9095 }
9096
9097 /* Given two array types T1 and T2, return nonzero iff both arrays
9098    contain the same number of elements.  */
9099
9100 static int
9101 ada_same_array_size_p (struct type *t1, struct type *t2)
9102 {
9103   LONGEST lo1, hi1, lo2, hi2;
9104
9105   /* Get the array bounds in order to verify that the size of
9106      the two arrays match.  */
9107   if (!get_array_bounds (t1, &lo1, &hi1)
9108       || !get_array_bounds (t2, &lo2, &hi2))
9109     error (_("unable to determine array bounds"));
9110
9111   /* To make things easier for size comparison, normalize a bit
9112      the case of empty arrays by making sure that the difference
9113      between upper bound and lower bound is always -1.  */
9114   if (lo1 > hi1)
9115     hi1 = lo1 - 1;
9116   if (lo2 > hi2)
9117     hi2 = lo2 - 1;
9118
9119   return (hi1 - lo1 == hi2 - lo2);
9120 }
9121
9122 /* Assuming that VAL is an array of integrals, and TYPE represents
9123    an array with the same number of elements, but with wider integral
9124    elements, return an array "casted" to TYPE.  In practice, this
9125    means that the returned array is built by casting each element
9126    of the original array into TYPE's (wider) element type.  */
9127
9128 static struct value *
9129 ada_promote_array_of_integrals (struct type *type, struct value *val)
9130 {
9131   struct type *elt_type = TYPE_TARGET_TYPE (type);
9132   LONGEST lo, hi;
9133   struct value *res;
9134   LONGEST i;
9135
9136   /* Verify that both val and type are arrays of scalars, and
9137      that the size of val's elements is smaller than the size
9138      of type's element.  */
9139   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9140   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9141   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9142   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9143   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9144               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9145
9146   if (!get_array_bounds (type, &lo, &hi))
9147     error (_("unable to determine array bounds"));
9148
9149   res = allocate_value (type);
9150
9151   /* Promote each array element.  */
9152   for (i = 0; i < hi - lo + 1; i++)
9153     {
9154       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9155
9156       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9157               value_contents_all (elt), TYPE_LENGTH (elt_type));
9158     }
9159
9160   return res;
9161 }
9162
9163 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9164    return the converted value.  */
9165
9166 static struct value *
9167 coerce_for_assign (struct type *type, struct value *val)
9168 {
9169   struct type *type2 = value_type (val);
9170
9171   if (type == type2)
9172     return val;
9173
9174   type2 = ada_check_typedef (type2);
9175   type = ada_check_typedef (type);
9176
9177   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9178       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9179     {
9180       val = ada_value_ind (val);
9181       type2 = value_type (val);
9182     }
9183
9184   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9185       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9186     {
9187       if (!ada_same_array_size_p (type, type2))
9188         error (_("cannot assign arrays of different length"));
9189
9190       if (is_integral_type (TYPE_TARGET_TYPE (type))
9191           && is_integral_type (TYPE_TARGET_TYPE (type2))
9192           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9193                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9194         {
9195           /* Allow implicit promotion of the array elements to
9196              a wider type.  */
9197           return ada_promote_array_of_integrals (type, val);
9198         }
9199
9200       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9201           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9202         error (_("Incompatible types in assignment"));
9203       deprecated_set_value_type (val, type);
9204     }
9205   return val;
9206 }
9207
9208 static struct value *
9209 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9210 {
9211   struct value *val;
9212   struct type *type1, *type2;
9213   LONGEST v, v1, v2;
9214
9215   arg1 = coerce_ref (arg1);
9216   arg2 = coerce_ref (arg2);
9217   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9218   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9219
9220   if (TYPE_CODE (type1) != TYPE_CODE_INT
9221       || TYPE_CODE (type2) != TYPE_CODE_INT)
9222     return value_binop (arg1, arg2, op);
9223
9224   switch (op)
9225     {
9226     case BINOP_MOD:
9227     case BINOP_DIV:
9228     case BINOP_REM:
9229       break;
9230     default:
9231       return value_binop (arg1, arg2, op);
9232     }
9233
9234   v2 = value_as_long (arg2);
9235   if (v2 == 0)
9236     error (_("second operand of %s must not be zero."), op_string (op));
9237
9238   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9239     return value_binop (arg1, arg2, op);
9240
9241   v1 = value_as_long (arg1);
9242   switch (op)
9243     {
9244     case BINOP_DIV:
9245       v = v1 / v2;
9246       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9247         v += v > 0 ? -1 : 1;
9248       break;
9249     case BINOP_REM:
9250       v = v1 % v2;
9251       if (v * v1 < 0)
9252         v -= v2;
9253       break;
9254     default:
9255       /* Should not reach this point.  */
9256       v = 0;
9257     }
9258
9259   val = allocate_value (type1);
9260   store_unsigned_integer (value_contents_raw (val),
9261                           TYPE_LENGTH (value_type (val)),
9262                           gdbarch_byte_order (get_type_arch (type1)), v);
9263   return val;
9264 }
9265
9266 static int
9267 ada_value_equal (struct value *arg1, struct value *arg2)
9268 {
9269   if (ada_is_direct_array_type (value_type (arg1))
9270       || ada_is_direct_array_type (value_type (arg2)))
9271     {
9272       /* Automatically dereference any array reference before
9273          we attempt to perform the comparison.  */
9274       arg1 = ada_coerce_ref (arg1);
9275       arg2 = ada_coerce_ref (arg2);
9276       
9277       arg1 = ada_coerce_to_simple_array (arg1);
9278       arg2 = ada_coerce_to_simple_array (arg2);
9279       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9280           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9281         error (_("Attempt to compare array with non-array"));
9282       /* FIXME: The following works only for types whose
9283          representations use all bits (no padding or undefined bits)
9284          and do not have user-defined equality.  */
9285       return
9286         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9287         && memcmp (value_contents (arg1), value_contents (arg2),
9288                    TYPE_LENGTH (value_type (arg1))) == 0;
9289     }
9290   return value_equal (arg1, arg2);
9291 }
9292
9293 /* Total number of component associations in the aggregate starting at
9294    index PC in EXP.  Assumes that index PC is the start of an
9295    OP_AGGREGATE.  */
9296
9297 static int
9298 num_component_specs (struct expression *exp, int pc)
9299 {
9300   int n, m, i;
9301
9302   m = exp->elts[pc + 1].longconst;
9303   pc += 3;
9304   n = 0;
9305   for (i = 0; i < m; i += 1)
9306     {
9307       switch (exp->elts[pc].opcode) 
9308         {
9309         default:
9310           n += 1;
9311           break;
9312         case OP_CHOICES:
9313           n += exp->elts[pc + 1].longconst;
9314           break;
9315         }
9316       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9317     }
9318   return n;
9319 }
9320
9321 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9322    component of LHS (a simple array or a record), updating *POS past
9323    the expression, assuming that LHS is contained in CONTAINER.  Does
9324    not modify the inferior's memory, nor does it modify LHS (unless
9325    LHS == CONTAINER).  */
9326
9327 static void
9328 assign_component (struct value *container, struct value *lhs, LONGEST index,
9329                   struct expression *exp, int *pos)
9330 {
9331   struct value *mark = value_mark ();
9332   struct value *elt;
9333
9334   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9335     {
9336       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9337       struct value *index_val = value_from_longest (index_type, index);
9338
9339       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9340     }
9341   else
9342     {
9343       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9344       elt = ada_to_fixed_value (elt);
9345     }
9346
9347   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9348     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9349   else
9350     value_assign_to_component (container, elt, 
9351                                ada_evaluate_subexp (NULL, exp, pos, 
9352                                                     EVAL_NORMAL));
9353
9354   value_free_to_mark (mark);
9355 }
9356
9357 /* Assuming that LHS represents an lvalue having a record or array
9358    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9359    of that aggregate's value to LHS, advancing *POS past the
9360    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9361    lvalue containing LHS (possibly LHS itself).  Does not modify
9362    the inferior's memory, nor does it modify the contents of 
9363    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9364
9365 static struct value *
9366 assign_aggregate (struct value *container, 
9367                   struct value *lhs, struct expression *exp, 
9368                   int *pos, enum noside noside)
9369 {
9370   struct type *lhs_type;
9371   int n = exp->elts[*pos+1].longconst;
9372   LONGEST low_index, high_index;
9373   int num_specs;
9374   LONGEST *indices;
9375   int max_indices, num_indices;
9376   int i;
9377
9378   *pos += 3;
9379   if (noside != EVAL_NORMAL)
9380     {
9381       for (i = 0; i < n; i += 1)
9382         ada_evaluate_subexp (NULL, exp, pos, noside);
9383       return container;
9384     }
9385
9386   container = ada_coerce_ref (container);
9387   if (ada_is_direct_array_type (value_type (container)))
9388     container = ada_coerce_to_simple_array (container);
9389   lhs = ada_coerce_ref (lhs);
9390   if (!deprecated_value_modifiable (lhs))
9391     error (_("Left operand of assignment is not a modifiable lvalue."));
9392
9393   lhs_type = value_type (lhs);
9394   if (ada_is_direct_array_type (lhs_type))
9395     {
9396       lhs = ada_coerce_to_simple_array (lhs);
9397       lhs_type = value_type (lhs);
9398       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9399       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9400     }
9401   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9402     {
9403       low_index = 0;
9404       high_index = num_visible_fields (lhs_type) - 1;
9405     }
9406   else
9407     error (_("Left-hand side must be array or record."));
9408
9409   num_specs = num_component_specs (exp, *pos - 3);
9410   max_indices = 4 * num_specs + 4;
9411   indices = alloca (max_indices * sizeof (indices[0]));
9412   indices[0] = indices[1] = low_index - 1;
9413   indices[2] = indices[3] = high_index + 1;
9414   num_indices = 4;
9415
9416   for (i = 0; i < n; i += 1)
9417     {
9418       switch (exp->elts[*pos].opcode)
9419         {
9420           case OP_CHOICES:
9421             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9422                                            &num_indices, max_indices,
9423                                            low_index, high_index);
9424             break;
9425           case OP_POSITIONAL:
9426             aggregate_assign_positional (container, lhs, exp, pos, indices,
9427                                          &num_indices, max_indices,
9428                                          low_index, high_index);
9429             break;
9430           case OP_OTHERS:
9431             if (i != n-1)
9432               error (_("Misplaced 'others' clause"));
9433             aggregate_assign_others (container, lhs, exp, pos, indices, 
9434                                      num_indices, low_index, high_index);
9435             break;
9436           default:
9437             error (_("Internal error: bad aggregate clause"));
9438         }
9439     }
9440
9441   return container;
9442 }
9443               
9444 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9445    construct at *POS, updating *POS past the construct, given that
9446    the positions are relative to lower bound LOW, where HIGH is the 
9447    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9448    updating *NUM_INDICES as needed.  CONTAINER is as for
9449    assign_aggregate.  */
9450 static void
9451 aggregate_assign_positional (struct value *container,
9452                              struct value *lhs, struct expression *exp,
9453                              int *pos, LONGEST *indices, int *num_indices,
9454                              int max_indices, LONGEST low, LONGEST high) 
9455 {
9456   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9457   
9458   if (ind - 1 == high)
9459     warning (_("Extra components in aggregate ignored."));
9460   if (ind <= high)
9461     {
9462       add_component_interval (ind, ind, indices, num_indices, max_indices);
9463       *pos += 3;
9464       assign_component (container, lhs, ind, exp, pos);
9465     }
9466   else
9467     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9468 }
9469
9470 /* Assign into the components of LHS indexed by the OP_CHOICES
9471    construct at *POS, updating *POS past the construct, given that
9472    the allowable indices are LOW..HIGH.  Record the indices assigned
9473    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9474    needed.  CONTAINER is as for assign_aggregate.  */
9475 static void
9476 aggregate_assign_from_choices (struct value *container,
9477                                struct value *lhs, struct expression *exp,
9478                                int *pos, LONGEST *indices, int *num_indices,
9479                                int max_indices, LONGEST low, LONGEST high) 
9480 {
9481   int j;
9482   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9483   int choice_pos, expr_pc;
9484   int is_array = ada_is_direct_array_type (value_type (lhs));
9485
9486   choice_pos = *pos += 3;
9487
9488   for (j = 0; j < n_choices; j += 1)
9489     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9490   expr_pc = *pos;
9491   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9492   
9493   for (j = 0; j < n_choices; j += 1)
9494     {
9495       LONGEST lower, upper;
9496       enum exp_opcode op = exp->elts[choice_pos].opcode;
9497
9498       if (op == OP_DISCRETE_RANGE)
9499         {
9500           choice_pos += 1;
9501           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9502                                                       EVAL_NORMAL));
9503           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
9504                                                       EVAL_NORMAL));
9505         }
9506       else if (is_array)
9507         {
9508           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
9509                                                       EVAL_NORMAL));
9510           upper = lower;
9511         }
9512       else
9513         {
9514           int ind;
9515           const char *name;
9516
9517           switch (op)
9518             {
9519             case OP_NAME:
9520               name = &exp->elts[choice_pos + 2].string;
9521               break;
9522             case OP_VAR_VALUE:
9523               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9524               break;
9525             default:
9526               error (_("Invalid record component association."));
9527             }
9528           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9529           ind = 0;
9530           if (! find_struct_field (name, value_type (lhs), 0, 
9531                                    NULL, NULL, NULL, NULL, &ind))
9532             error (_("Unknown component name: %s."), name);
9533           lower = upper = ind;
9534         }
9535
9536       if (lower <= upper && (lower < low || upper > high))
9537         error (_("Index in component association out of bounds."));
9538
9539       add_component_interval (lower, upper, indices, num_indices,
9540                               max_indices);
9541       while (lower <= upper)
9542         {
9543           int pos1;
9544
9545           pos1 = expr_pc;
9546           assign_component (container, lhs, lower, exp, &pos1);
9547           lower += 1;
9548         }
9549     }
9550 }
9551
9552 /* Assign the value of the expression in the OP_OTHERS construct in
9553    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9554    have not been previously assigned.  The index intervals already assigned
9555    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
9556    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9557 static void
9558 aggregate_assign_others (struct value *container,
9559                          struct value *lhs, struct expression *exp,
9560                          int *pos, LONGEST *indices, int num_indices,
9561                          LONGEST low, LONGEST high) 
9562 {
9563   int i;
9564   int expr_pc = *pos + 1;
9565   
9566   for (i = 0; i < num_indices - 2; i += 2)
9567     {
9568       LONGEST ind;
9569
9570       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9571         {
9572           int localpos;
9573
9574           localpos = expr_pc;
9575           assign_component (container, lhs, ind, exp, &localpos);
9576         }
9577     }
9578   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9579 }
9580
9581 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
9582    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9583    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9584    MAX_SIZE.  The resulting intervals do not overlap.  */
9585 static void
9586 add_component_interval (LONGEST low, LONGEST high, 
9587                         LONGEST* indices, int *size, int max_size)
9588 {
9589   int i, j;
9590
9591   for (i = 0; i < *size; i += 2) {
9592     if (high >= indices[i] && low <= indices[i + 1])
9593       {
9594         int kh;
9595
9596         for (kh = i + 2; kh < *size; kh += 2)
9597           if (high < indices[kh])
9598             break;
9599         if (low < indices[i])
9600           indices[i] = low;
9601         indices[i + 1] = indices[kh - 1];
9602         if (high > indices[i + 1])
9603           indices[i + 1] = high;
9604         memcpy (indices + i + 2, indices + kh, *size - kh);
9605         *size -= kh - i - 2;
9606         return;
9607       }
9608     else if (high < indices[i])
9609       break;
9610   }
9611         
9612   if (*size == max_size)
9613     error (_("Internal error: miscounted aggregate components."));
9614   *size += 2;
9615   for (j = *size-1; j >= i+2; j -= 1)
9616     indices[j] = indices[j - 2];
9617   indices[i] = low;
9618   indices[i + 1] = high;
9619 }
9620
9621 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9622    is different.  */
9623
9624 static struct value *
9625 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9626 {
9627   if (type == ada_check_typedef (value_type (arg2)))
9628     return arg2;
9629
9630   if (ada_is_fixed_point_type (type))
9631     return (cast_to_fixed (type, arg2));
9632
9633   if (ada_is_fixed_point_type (value_type (arg2)))
9634     return cast_from_fixed (type, arg2);
9635
9636   return value_cast (type, arg2);
9637 }
9638
9639 /*  Evaluating Ada expressions, and printing their result.
9640     ------------------------------------------------------
9641
9642     1. Introduction:
9643     ----------------
9644
9645     We usually evaluate an Ada expression in order to print its value.
9646     We also evaluate an expression in order to print its type, which
9647     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9648     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9649     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9650     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9651     similar.
9652
9653     Evaluating expressions is a little more complicated for Ada entities
9654     than it is for entities in languages such as C.  The main reason for
9655     this is that Ada provides types whose definition might be dynamic.
9656     One example of such types is variant records.  Or another example
9657     would be an array whose bounds can only be known at run time.
9658
9659     The following description is a general guide as to what should be
9660     done (and what should NOT be done) in order to evaluate an expression
9661     involving such types, and when.  This does not cover how the semantic
9662     information is encoded by GNAT as this is covered separatly.  For the
9663     document used as the reference for the GNAT encoding, see exp_dbug.ads
9664     in the GNAT sources.
9665
9666     Ideally, we should embed each part of this description next to its
9667     associated code.  Unfortunately, the amount of code is so vast right
9668     now that it's hard to see whether the code handling a particular
9669     situation might be duplicated or not.  One day, when the code is
9670     cleaned up, this guide might become redundant with the comments
9671     inserted in the code, and we might want to remove it.
9672
9673     2. ``Fixing'' an Entity, the Simple Case:
9674     -----------------------------------------
9675
9676     When evaluating Ada expressions, the tricky issue is that they may
9677     reference entities whose type contents and size are not statically
9678     known.  Consider for instance a variant record:
9679
9680        type Rec (Empty : Boolean := True) is record
9681           case Empty is
9682              when True => null;
9683              when False => Value : Integer;
9684           end case;
9685        end record;
9686        Yes : Rec := (Empty => False, Value => 1);
9687        No  : Rec := (empty => True);
9688
9689     The size and contents of that record depends on the value of the
9690     descriminant (Rec.Empty).  At this point, neither the debugging
9691     information nor the associated type structure in GDB are able to
9692     express such dynamic types.  So what the debugger does is to create
9693     "fixed" versions of the type that applies to the specific object.
9694     We also informally refer to this opperation as "fixing" an object,
9695     which means creating its associated fixed type.
9696
9697     Example: when printing the value of variable "Yes" above, its fixed
9698     type would look like this:
9699
9700        type Rec is record
9701           Empty : Boolean;
9702           Value : Integer;
9703        end record;
9704
9705     On the other hand, if we printed the value of "No", its fixed type
9706     would become:
9707
9708        type Rec is record
9709           Empty : Boolean;
9710        end record;
9711
9712     Things become a little more complicated when trying to fix an entity
9713     with a dynamic type that directly contains another dynamic type,
9714     such as an array of variant records, for instance.  There are
9715     two possible cases: Arrays, and records.
9716
9717     3. ``Fixing'' Arrays:
9718     ---------------------
9719
9720     The type structure in GDB describes an array in terms of its bounds,
9721     and the type of its elements.  By design, all elements in the array
9722     have the same type and we cannot represent an array of variant elements
9723     using the current type structure in GDB.  When fixing an array,
9724     we cannot fix the array element, as we would potentially need one
9725     fixed type per element of the array.  As a result, the best we can do
9726     when fixing an array is to produce an array whose bounds and size
9727     are correct (allowing us to read it from memory), but without having
9728     touched its element type.  Fixing each element will be done later,
9729     when (if) necessary.
9730
9731     Arrays are a little simpler to handle than records, because the same
9732     amount of memory is allocated for each element of the array, even if
9733     the amount of space actually used by each element differs from element
9734     to element.  Consider for instance the following array of type Rec:
9735
9736        type Rec_Array is array (1 .. 2) of Rec;
9737
9738     The actual amount of memory occupied by each element might be different
9739     from element to element, depending on the value of their discriminant.
9740     But the amount of space reserved for each element in the array remains
9741     fixed regardless.  So we simply need to compute that size using
9742     the debugging information available, from which we can then determine
9743     the array size (we multiply the number of elements of the array by
9744     the size of each element).
9745
9746     The simplest case is when we have an array of a constrained element
9747     type. For instance, consider the following type declarations:
9748
9749         type Bounded_String (Max_Size : Integer) is
9750            Length : Integer;
9751            Buffer : String (1 .. Max_Size);
9752         end record;
9753         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9754
9755     In this case, the compiler describes the array as an array of
9756     variable-size elements (identified by its XVS suffix) for which
9757     the size can be read in the parallel XVZ variable.
9758
9759     In the case of an array of an unconstrained element type, the compiler
9760     wraps the array element inside a private PAD type.  This type should not
9761     be shown to the user, and must be "unwrap"'ed before printing.  Note
9762     that we also use the adjective "aligner" in our code to designate
9763     these wrapper types.
9764
9765     In some cases, the size allocated for each element is statically
9766     known.  In that case, the PAD type already has the correct size,
9767     and the array element should remain unfixed.
9768
9769     But there are cases when this size is not statically known.
9770     For instance, assuming that "Five" is an integer variable:
9771
9772         type Dynamic is array (1 .. Five) of Integer;
9773         type Wrapper (Has_Length : Boolean := False) is record
9774            Data : Dynamic;
9775            case Has_Length is
9776               when True => Length : Integer;
9777               when False => null;
9778            end case;
9779         end record;
9780         type Wrapper_Array is array (1 .. 2) of Wrapper;
9781
9782         Hello : Wrapper_Array := (others => (Has_Length => True,
9783                                              Data => (others => 17),
9784                                              Length => 1));
9785
9786
9787     The debugging info would describe variable Hello as being an
9788     array of a PAD type.  The size of that PAD type is not statically
9789     known, but can be determined using a parallel XVZ variable.
9790     In that case, a copy of the PAD type with the correct size should
9791     be used for the fixed array.
9792
9793     3. ``Fixing'' record type objects:
9794     ----------------------------------
9795
9796     Things are slightly different from arrays in the case of dynamic
9797     record types.  In this case, in order to compute the associated
9798     fixed type, we need to determine the size and offset of each of
9799     its components.  This, in turn, requires us to compute the fixed
9800     type of each of these components.
9801
9802     Consider for instance the example:
9803
9804         type Bounded_String (Max_Size : Natural) is record
9805            Str : String (1 .. Max_Size);
9806            Length : Natural;
9807         end record;
9808         My_String : Bounded_String (Max_Size => 10);
9809
9810     In that case, the position of field "Length" depends on the size
9811     of field Str, which itself depends on the value of the Max_Size
9812     discriminant.  In order to fix the type of variable My_String,
9813     we need to fix the type of field Str.  Therefore, fixing a variant
9814     record requires us to fix each of its components.
9815
9816     However, if a component does not have a dynamic size, the component
9817     should not be fixed.  In particular, fields that use a PAD type
9818     should not fixed.  Here is an example where this might happen
9819     (assuming type Rec above):
9820
9821        type Container (Big : Boolean) is record
9822           First : Rec;
9823           After : Integer;
9824           case Big is
9825              when True => Another : Integer;
9826              when False => null;
9827           end case;
9828        end record;
9829        My_Container : Container := (Big => False,
9830                                     First => (Empty => True),
9831                                     After => 42);
9832
9833     In that example, the compiler creates a PAD type for component First,
9834     whose size is constant, and then positions the component After just
9835     right after it.  The offset of component After is therefore constant
9836     in this case.
9837
9838     The debugger computes the position of each field based on an algorithm
9839     that uses, among other things, the actual position and size of the field
9840     preceding it.  Let's now imagine that the user is trying to print
9841     the value of My_Container.  If the type fixing was recursive, we would
9842     end up computing the offset of field After based on the size of the
9843     fixed version of field First.  And since in our example First has
9844     only one actual field, the size of the fixed type is actually smaller
9845     than the amount of space allocated to that field, and thus we would
9846     compute the wrong offset of field After.
9847
9848     To make things more complicated, we need to watch out for dynamic
9849     components of variant records (identified by the ___XVL suffix in
9850     the component name).  Even if the target type is a PAD type, the size
9851     of that type might not be statically known.  So the PAD type needs
9852     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9853     we might end up with the wrong size for our component.  This can be
9854     observed with the following type declarations:
9855
9856         type Octal is new Integer range 0 .. 7;
9857         type Octal_Array is array (Positive range <>) of Octal;
9858         pragma Pack (Octal_Array);
9859
9860         type Octal_Buffer (Size : Positive) is record
9861            Buffer : Octal_Array (1 .. Size);
9862            Length : Integer;
9863         end record;
9864
9865     In that case, Buffer is a PAD type whose size is unset and needs
9866     to be computed by fixing the unwrapped type.
9867
9868     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9869     ----------------------------------------------------------
9870
9871     Lastly, when should the sub-elements of an entity that remained unfixed
9872     thus far, be actually fixed?
9873
9874     The answer is: Only when referencing that element.  For instance
9875     when selecting one component of a record, this specific component
9876     should be fixed at that point in time.  Or when printing the value
9877     of a record, each component should be fixed before its value gets
9878     printed.  Similarly for arrays, the element of the array should be
9879     fixed when printing each element of the array, or when extracting
9880     one element out of that array.  On the other hand, fixing should
9881     not be performed on the elements when taking a slice of an array!
9882
9883     Note that one of the side-effects of miscomputing the offset and
9884     size of each field is that we end up also miscomputing the size
9885     of the containing type.  This can have adverse results when computing
9886     the value of an entity.  GDB fetches the value of an entity based
9887     on the size of its type, and thus a wrong size causes GDB to fetch
9888     the wrong amount of memory.  In the case where the computed size is
9889     too small, GDB fetches too little data to print the value of our
9890     entiry.  Results in this case as unpredicatble, as we usually read
9891     past the buffer containing the data =:-o.  */
9892
9893 /* Implement the evaluate_exp routine in the exp_descriptor structure
9894    for the Ada language.  */
9895
9896 static struct value *
9897 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9898                      int *pos, enum noside noside)
9899 {
9900   enum exp_opcode op;
9901   int tem;
9902   int pc;
9903   int preeval_pos;
9904   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9905   struct type *type;
9906   int nargs, oplen;
9907   struct value **argvec;
9908
9909   pc = *pos;
9910   *pos += 1;
9911   op = exp->elts[pc].opcode;
9912
9913   switch (op)
9914     {
9915     default:
9916       *pos -= 1;
9917       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9918
9919       if (noside == EVAL_NORMAL)
9920         arg1 = unwrap_value (arg1);
9921
9922       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9923          then we need to perform the conversion manually, because
9924          evaluate_subexp_standard doesn't do it.  This conversion is
9925          necessary in Ada because the different kinds of float/fixed
9926          types in Ada have different representations.
9927
9928          Similarly, we need to perform the conversion from OP_LONG
9929          ourselves.  */
9930       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9931         arg1 = ada_value_cast (expect_type, arg1, noside);
9932
9933       return arg1;
9934
9935     case OP_STRING:
9936       {
9937         struct value *result;
9938
9939         *pos -= 1;
9940         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9941         /* The result type will have code OP_STRING, bashed there from 
9942            OP_ARRAY.  Bash it back.  */
9943         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9944           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
9945         return result;
9946       }
9947
9948     case UNOP_CAST:
9949       (*pos) += 2;
9950       type = exp->elts[pc + 1].type;
9951       arg1 = evaluate_subexp (type, exp, pos, noside);
9952       if (noside == EVAL_SKIP)
9953         goto nosideret;
9954       arg1 = ada_value_cast (type, arg1, noside);
9955       return arg1;
9956
9957     case UNOP_QUAL:
9958       (*pos) += 2;
9959       type = exp->elts[pc + 1].type;
9960       return ada_evaluate_subexp (type, exp, pos, noside);
9961
9962     case BINOP_ASSIGN:
9963       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9964       if (exp->elts[*pos].opcode == OP_AGGREGATE)
9965         {
9966           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9967           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9968             return arg1;
9969           return ada_value_assign (arg1, arg1);
9970         }
9971       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9972          except if the lhs of our assignment is a convenience variable.
9973          In the case of assigning to a convenience variable, the lhs
9974          should be exactly the result of the evaluation of the rhs.  */
9975       type = value_type (arg1);
9976       if (VALUE_LVAL (arg1) == lval_internalvar)
9977          type = NULL;
9978       arg2 = evaluate_subexp (type, exp, pos, noside);
9979       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9980         return arg1;
9981       if (ada_is_fixed_point_type (value_type (arg1)))
9982         arg2 = cast_to_fixed (value_type (arg1), arg2);
9983       else if (ada_is_fixed_point_type (value_type (arg2)))
9984         error
9985           (_("Fixed-point values must be assigned to fixed-point variables"));
9986       else
9987         arg2 = coerce_for_assign (value_type (arg1), arg2);
9988       return ada_value_assign (arg1, arg2);
9989
9990     case BINOP_ADD:
9991       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9992       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9993       if (noside == EVAL_SKIP)
9994         goto nosideret;
9995       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9996         return (value_from_longest
9997                  (value_type (arg1),
9998                   value_as_long (arg1) + value_as_long (arg2)));
9999       if ((ada_is_fixed_point_type (value_type (arg1))
10000            || ada_is_fixed_point_type (value_type (arg2)))
10001           && value_type (arg1) != value_type (arg2))
10002         error (_("Operands of fixed-point addition must have the same type"));
10003       /* Do the addition, and cast the result to the type of the first
10004          argument.  We cannot cast the result to a reference type, so if
10005          ARG1 is a reference type, find its underlying type.  */
10006       type = value_type (arg1);
10007       while (TYPE_CODE (type) == TYPE_CODE_REF)
10008         type = TYPE_TARGET_TYPE (type);
10009       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10010       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10011
10012     case BINOP_SUB:
10013       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10014       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10015       if (noside == EVAL_SKIP)
10016         goto nosideret;
10017       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10018         return (value_from_longest
10019                  (value_type (arg1),
10020                   value_as_long (arg1) - value_as_long (arg2)));
10021       if ((ada_is_fixed_point_type (value_type (arg1))
10022            || ada_is_fixed_point_type (value_type (arg2)))
10023           && value_type (arg1) != value_type (arg2))
10024         error (_("Operands of fixed-point subtraction "
10025                  "must have the same type"));
10026       /* Do the substraction, and cast the result to the type of the first
10027          argument.  We cannot cast the result to a reference type, so if
10028          ARG1 is a reference type, find its underlying type.  */
10029       type = value_type (arg1);
10030       while (TYPE_CODE (type) == TYPE_CODE_REF)
10031         type = TYPE_TARGET_TYPE (type);
10032       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10033       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10034
10035     case BINOP_MUL:
10036     case BINOP_DIV:
10037     case BINOP_REM:
10038     case BINOP_MOD:
10039       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10040       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10041       if (noside == EVAL_SKIP)
10042         goto nosideret;
10043       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10044         {
10045           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10046           return value_zero (value_type (arg1), not_lval);
10047         }
10048       else
10049         {
10050           type = builtin_type (exp->gdbarch)->builtin_double;
10051           if (ada_is_fixed_point_type (value_type (arg1)))
10052             arg1 = cast_from_fixed (type, arg1);
10053           if (ada_is_fixed_point_type (value_type (arg2)))
10054             arg2 = cast_from_fixed (type, arg2);
10055           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10056           return ada_value_binop (arg1, arg2, op);
10057         }
10058
10059     case BINOP_EQUAL:
10060     case BINOP_NOTEQUAL:
10061       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10062       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10063       if (noside == EVAL_SKIP)
10064         goto nosideret;
10065       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10066         tem = 0;
10067       else
10068         {
10069           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10070           tem = ada_value_equal (arg1, arg2);
10071         }
10072       if (op == BINOP_NOTEQUAL)
10073         tem = !tem;
10074       type = language_bool_type (exp->language_defn, exp->gdbarch);
10075       return value_from_longest (type, (LONGEST) tem);
10076
10077     case UNOP_NEG:
10078       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10079       if (noside == EVAL_SKIP)
10080         goto nosideret;
10081       else if (ada_is_fixed_point_type (value_type (arg1)))
10082         return value_cast (value_type (arg1), value_neg (arg1));
10083       else
10084         {
10085           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10086           return value_neg (arg1);
10087         }
10088
10089     case BINOP_LOGICAL_AND:
10090     case BINOP_LOGICAL_OR:
10091     case UNOP_LOGICAL_NOT:
10092       {
10093         struct value *val;
10094
10095         *pos -= 1;
10096         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10097         type = language_bool_type (exp->language_defn, exp->gdbarch);
10098         return value_cast (type, val);
10099       }
10100
10101     case BINOP_BITWISE_AND:
10102     case BINOP_BITWISE_IOR:
10103     case BINOP_BITWISE_XOR:
10104       {
10105         struct value *val;
10106
10107         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10108         *pos = pc;
10109         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10110
10111         return value_cast (value_type (arg1), val);
10112       }
10113
10114     case OP_VAR_VALUE:
10115       *pos -= 1;
10116
10117       if (noside == EVAL_SKIP)
10118         {
10119           *pos += 4;
10120           goto nosideret;
10121         }
10122
10123       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10124         /* Only encountered when an unresolved symbol occurs in a
10125            context other than a function call, in which case, it is
10126            invalid.  */
10127         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10128                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10129
10130       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10131         {
10132           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10133           /* Check to see if this is a tagged type.  We also need to handle
10134              the case where the type is a reference to a tagged type, but
10135              we have to be careful to exclude pointers to tagged types.
10136              The latter should be shown as usual (as a pointer), whereas
10137              a reference should mostly be transparent to the user.  */
10138           if (ada_is_tagged_type (type, 0)
10139               || (TYPE_CODE (type) == TYPE_CODE_REF
10140                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10141             {
10142               /* Tagged types are a little special in the fact that the real
10143                  type is dynamic and can only be determined by inspecting the
10144                  object's tag.  This means that we need to get the object's
10145                  value first (EVAL_NORMAL) and then extract the actual object
10146                  type from its tag.
10147
10148                  Note that we cannot skip the final step where we extract
10149                  the object type from its tag, because the EVAL_NORMAL phase
10150                  results in dynamic components being resolved into fixed ones.
10151                  This can cause problems when trying to print the type
10152                  description of tagged types whose parent has a dynamic size:
10153                  We use the type name of the "_parent" component in order
10154                  to print the name of the ancestor type in the type description.
10155                  If that component had a dynamic size, the resolution into
10156                  a fixed type would result in the loss of that type name,
10157                  thus preventing us from printing the name of the ancestor
10158                  type in the type description.  */
10159               arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10160
10161               if (TYPE_CODE (type) != TYPE_CODE_REF)
10162                 {
10163                   struct type *actual_type;
10164
10165                   actual_type = type_from_tag (ada_value_tag (arg1));
10166                   if (actual_type == NULL)
10167                     /* If, for some reason, we were unable to determine
10168                        the actual type from the tag, then use the static
10169                        approximation that we just computed as a fallback.
10170                        This can happen if the debugging information is
10171                        incomplete, for instance.  */
10172                     actual_type = type;
10173                   return value_zero (actual_type, not_lval);
10174                 }
10175               else
10176                 {
10177                   /* In the case of a ref, ada_coerce_ref takes care
10178                      of determining the actual type.  But the evaluation
10179                      should return a ref as it should be valid to ask
10180                      for its address; so rebuild a ref after coerce.  */
10181                   arg1 = ada_coerce_ref (arg1);
10182                   return value_ref (arg1);
10183                 }
10184             }
10185
10186           /* Records and unions for which GNAT encodings have been
10187              generated need to be statically fixed as well.
10188              Otherwise, non-static fixing produces a type where
10189              all dynamic properties are removed, which prevents "ptype"
10190              from being able to completely describe the type.
10191              For instance, a case statement in a variant record would be
10192              replaced by the relevant components based on the actual
10193              value of the discriminants.  */
10194           if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10195                && dynamic_template_type (type) != NULL)
10196               || (TYPE_CODE (type) == TYPE_CODE_UNION
10197                   && ada_find_parallel_type (type, "___XVU") != NULL))
10198             {
10199               *pos += 4;
10200               return value_zero (to_static_fixed_type (type), not_lval);
10201             }
10202         }
10203
10204       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10205       return ada_to_fixed_value (arg1);
10206
10207     case OP_FUNCALL:
10208       (*pos) += 2;
10209
10210       /* Allocate arg vector, including space for the function to be
10211          called in argvec[0] and a terminating NULL.  */
10212       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10213       argvec =
10214         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10215
10216       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10217           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10218         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10219                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10220       else
10221         {
10222           for (tem = 0; tem <= nargs; tem += 1)
10223             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10224           argvec[tem] = 0;
10225
10226           if (noside == EVAL_SKIP)
10227             goto nosideret;
10228         }
10229
10230       if (ada_is_constrained_packed_array_type
10231           (desc_base_type (value_type (argvec[0]))))
10232         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10233       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10234                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10235         /* This is a packed array that has already been fixed, and
10236            therefore already coerced to a simple array.  Nothing further
10237            to do.  */
10238         ;
10239       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10240                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10241                    && VALUE_LVAL (argvec[0]) == lval_memory))
10242         argvec[0] = value_addr (argvec[0]);
10243
10244       type = ada_check_typedef (value_type (argvec[0]));
10245
10246       /* Ada allows us to implicitly dereference arrays when subscripting
10247          them.  So, if this is an array typedef (encoding use for array
10248          access types encoded as fat pointers), strip it now.  */
10249       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10250         type = ada_typedef_target_type (type);
10251
10252       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10253         {
10254           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10255             {
10256             case TYPE_CODE_FUNC:
10257               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10258               break;
10259             case TYPE_CODE_ARRAY:
10260               break;
10261             case TYPE_CODE_STRUCT:
10262               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10263                 argvec[0] = ada_value_ind (argvec[0]);
10264               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10265               break;
10266             default:
10267               error (_("cannot subscript or call something of type `%s'"),
10268                      ada_type_name (value_type (argvec[0])));
10269               break;
10270             }
10271         }
10272
10273       switch (TYPE_CODE (type))
10274         {
10275         case TYPE_CODE_FUNC:
10276           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10277             {
10278               struct type *rtype = TYPE_TARGET_TYPE (type);
10279
10280               if (TYPE_GNU_IFUNC (type))
10281                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10282               return allocate_value (rtype);
10283             }
10284           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10285         case TYPE_CODE_INTERNAL_FUNCTION:
10286           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10287             /* We don't know anything about what the internal
10288                function might return, but we have to return
10289                something.  */
10290             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10291                                not_lval);
10292           else
10293             return call_internal_function (exp->gdbarch, exp->language_defn,
10294                                            argvec[0], nargs, argvec + 1);
10295
10296         case TYPE_CODE_STRUCT:
10297           {
10298             int arity;
10299
10300             arity = ada_array_arity (type);
10301             type = ada_array_element_type (type, nargs);
10302             if (type == NULL)
10303               error (_("cannot subscript or call a record"));
10304             if (arity != nargs)
10305               error (_("wrong number of subscripts; expecting %d"), arity);
10306             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10307               return value_zero (ada_aligned_type (type), lval_memory);
10308             return
10309               unwrap_value (ada_value_subscript
10310                             (argvec[0], nargs, argvec + 1));
10311           }
10312         case TYPE_CODE_ARRAY:
10313           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10314             {
10315               type = ada_array_element_type (type, nargs);
10316               if (type == NULL)
10317                 error (_("element type of array unknown"));
10318               else
10319                 return value_zero (ada_aligned_type (type), lval_memory);
10320             }
10321           return
10322             unwrap_value (ada_value_subscript
10323                           (ada_coerce_to_simple_array (argvec[0]),
10324                            nargs, argvec + 1));
10325         case TYPE_CODE_PTR:     /* Pointer to array */
10326           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10327           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10328             {
10329               type = ada_array_element_type (type, nargs);
10330               if (type == NULL)
10331                 error (_("element type of array unknown"));
10332               else
10333                 return value_zero (ada_aligned_type (type), lval_memory);
10334             }
10335           return
10336             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
10337                                                    nargs, argvec + 1));
10338
10339         default:
10340           error (_("Attempt to index or call something other than an "
10341                    "array or function"));
10342         }
10343
10344     case TERNOP_SLICE:
10345       {
10346         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10347         struct value *low_bound_val =
10348           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10349         struct value *high_bound_val =
10350           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10351         LONGEST low_bound;
10352         LONGEST high_bound;
10353
10354         low_bound_val = coerce_ref (low_bound_val);
10355         high_bound_val = coerce_ref (high_bound_val);
10356         low_bound = pos_atr (low_bound_val);
10357         high_bound = pos_atr (high_bound_val);
10358
10359         if (noside == EVAL_SKIP)
10360           goto nosideret;
10361
10362         /* If this is a reference to an aligner type, then remove all
10363            the aligners.  */
10364         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10365             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10366           TYPE_TARGET_TYPE (value_type (array)) =
10367             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10368
10369         if (ada_is_constrained_packed_array_type (value_type (array)))
10370           error (_("cannot slice a packed array"));
10371
10372         /* If this is a reference to an array or an array lvalue,
10373            convert to a pointer.  */
10374         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10375             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10376                 && VALUE_LVAL (array) == lval_memory))
10377           array = value_addr (array);
10378
10379         if (noside == EVAL_AVOID_SIDE_EFFECTS
10380             && ada_is_array_descriptor_type (ada_check_typedef
10381                                              (value_type (array))))
10382           return empty_array (ada_type_of_array (array, 0), low_bound);
10383
10384         array = ada_coerce_to_simple_array_ptr (array);
10385
10386         /* If we have more than one level of pointer indirection,
10387            dereference the value until we get only one level.  */
10388         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10389                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10390                      == TYPE_CODE_PTR))
10391           array = value_ind (array);
10392
10393         /* Make sure we really do have an array type before going further,
10394            to avoid a SEGV when trying to get the index type or the target
10395            type later down the road if the debug info generated by
10396            the compiler is incorrect or incomplete.  */
10397         if (!ada_is_simple_array_type (value_type (array)))
10398           error (_("cannot take slice of non-array"));
10399
10400         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10401             == TYPE_CODE_PTR)
10402           {
10403             struct type *type0 = ada_check_typedef (value_type (array));
10404
10405             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10406               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10407             else
10408               {
10409                 struct type *arr_type0 =
10410                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10411
10412                 return ada_value_slice_from_ptr (array, arr_type0,
10413                                                  longest_to_int (low_bound),
10414                                                  longest_to_int (high_bound));
10415               }
10416           }
10417         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10418           return array;
10419         else if (high_bound < low_bound)
10420           return empty_array (value_type (array), low_bound);
10421         else
10422           return ada_value_slice (array, longest_to_int (low_bound),
10423                                   longest_to_int (high_bound));
10424       }
10425
10426     case UNOP_IN_RANGE:
10427       (*pos) += 2;
10428       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10429       type = check_typedef (exp->elts[pc + 1].type);
10430
10431       if (noside == EVAL_SKIP)
10432         goto nosideret;
10433
10434       switch (TYPE_CODE (type))
10435         {
10436         default:
10437           lim_warning (_("Membership test incompletely implemented; "
10438                          "always returns true"));
10439           type = language_bool_type (exp->language_defn, exp->gdbarch);
10440           return value_from_longest (type, (LONGEST) 1);
10441
10442         case TYPE_CODE_RANGE:
10443           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10444           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10445           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10446           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10447           type = language_bool_type (exp->language_defn, exp->gdbarch);
10448           return
10449             value_from_longest (type,
10450                                 (value_less (arg1, arg3)
10451                                  || value_equal (arg1, arg3))
10452                                 && (value_less (arg2, arg1)
10453                                     || value_equal (arg2, arg1)));
10454         }
10455
10456     case BINOP_IN_BOUNDS:
10457       (*pos) += 2;
10458       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10459       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10460
10461       if (noside == EVAL_SKIP)
10462         goto nosideret;
10463
10464       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10465         {
10466           type = language_bool_type (exp->language_defn, exp->gdbarch);
10467           return value_zero (type, not_lval);
10468         }
10469
10470       tem = longest_to_int (exp->elts[pc + 1].longconst);
10471
10472       type = ada_index_type (value_type (arg2), tem, "range");
10473       if (!type)
10474         type = value_type (arg1);
10475
10476       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10477       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10478
10479       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10480       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10481       type = language_bool_type (exp->language_defn, exp->gdbarch);
10482       return
10483         value_from_longest (type,
10484                             (value_less (arg1, arg3)
10485                              || value_equal (arg1, arg3))
10486                             && (value_less (arg2, arg1)
10487                                 || value_equal (arg2, arg1)));
10488
10489     case TERNOP_IN_RANGE:
10490       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10491       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10492       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10493
10494       if (noside == EVAL_SKIP)
10495         goto nosideret;
10496
10497       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10498       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10499       type = language_bool_type (exp->language_defn, exp->gdbarch);
10500       return
10501         value_from_longest (type,
10502                             (value_less (arg1, arg3)
10503                              || value_equal (arg1, arg3))
10504                             && (value_less (arg2, arg1)
10505                                 || value_equal (arg2, arg1)));
10506
10507     case OP_ATR_FIRST:
10508     case OP_ATR_LAST:
10509     case OP_ATR_LENGTH:
10510       {
10511         struct type *type_arg;
10512
10513         if (exp->elts[*pos].opcode == OP_TYPE)
10514           {
10515             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10516             arg1 = NULL;
10517             type_arg = check_typedef (exp->elts[pc + 2].type);
10518           }
10519         else
10520           {
10521             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10522             type_arg = NULL;
10523           }
10524
10525         if (exp->elts[*pos].opcode != OP_LONG)
10526           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10527         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10528         *pos += 4;
10529
10530         if (noside == EVAL_SKIP)
10531           goto nosideret;
10532
10533         if (type_arg == NULL)
10534           {
10535             arg1 = ada_coerce_ref (arg1);
10536
10537             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10538               arg1 = ada_coerce_to_simple_array (arg1);
10539
10540             if (op == OP_ATR_LENGTH)
10541               type = builtin_type (exp->gdbarch)->builtin_int;
10542             else
10543               {
10544                 type = ada_index_type (value_type (arg1), tem,
10545                                        ada_attribute_name (op));
10546                 if (type == NULL)
10547                   type = builtin_type (exp->gdbarch)->builtin_int;
10548               }
10549
10550             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10551               return allocate_value (type);
10552
10553             switch (op)
10554               {
10555               default:          /* Should never happen.  */
10556                 error (_("unexpected attribute encountered"));
10557               case OP_ATR_FIRST:
10558                 return value_from_longest
10559                         (type, ada_array_bound (arg1, tem, 0));
10560               case OP_ATR_LAST:
10561                 return value_from_longest
10562                         (type, ada_array_bound (arg1, tem, 1));
10563               case OP_ATR_LENGTH:
10564                 return value_from_longest
10565                         (type, ada_array_length (arg1, tem));
10566               }
10567           }
10568         else if (discrete_type_p (type_arg))
10569           {
10570             struct type *range_type;
10571             const char *name = ada_type_name (type_arg);
10572
10573             range_type = NULL;
10574             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10575               range_type = to_fixed_range_type (type_arg, NULL);
10576             if (range_type == NULL)
10577               range_type = type_arg;
10578             switch (op)
10579               {
10580               default:
10581                 error (_("unexpected attribute encountered"));
10582               case OP_ATR_FIRST:
10583                 return value_from_longest 
10584                   (range_type, ada_discrete_type_low_bound (range_type));
10585               case OP_ATR_LAST:
10586                 return value_from_longest
10587                   (range_type, ada_discrete_type_high_bound (range_type));
10588               case OP_ATR_LENGTH:
10589                 error (_("the 'length attribute applies only to array types"));
10590               }
10591           }
10592         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10593           error (_("unimplemented type attribute"));
10594         else
10595           {
10596             LONGEST low, high;
10597
10598             if (ada_is_constrained_packed_array_type (type_arg))
10599               type_arg = decode_constrained_packed_array_type (type_arg);
10600
10601             if (op == OP_ATR_LENGTH)
10602               type = builtin_type (exp->gdbarch)->builtin_int;
10603             else
10604               {
10605                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10606                 if (type == NULL)
10607                   type = builtin_type (exp->gdbarch)->builtin_int;
10608               }
10609
10610             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10611               return allocate_value (type);
10612
10613             switch (op)
10614               {
10615               default:
10616                 error (_("unexpected attribute encountered"));
10617               case OP_ATR_FIRST:
10618                 low = ada_array_bound_from_type (type_arg, tem, 0);
10619                 return value_from_longest (type, low);
10620               case OP_ATR_LAST:
10621                 high = ada_array_bound_from_type (type_arg, tem, 1);
10622                 return value_from_longest (type, high);
10623               case OP_ATR_LENGTH:
10624                 low = ada_array_bound_from_type (type_arg, tem, 0);
10625                 high = ada_array_bound_from_type (type_arg, tem, 1);
10626                 return value_from_longest (type, high - low + 1);
10627               }
10628           }
10629       }
10630
10631     case OP_ATR_TAG:
10632       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10633       if (noside == EVAL_SKIP)
10634         goto nosideret;
10635
10636       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10637         return value_zero (ada_tag_type (arg1), not_lval);
10638
10639       return ada_value_tag (arg1);
10640
10641     case OP_ATR_MIN:
10642     case OP_ATR_MAX:
10643       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10644       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10645       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10646       if (noside == EVAL_SKIP)
10647         goto nosideret;
10648       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10649         return value_zero (value_type (arg1), not_lval);
10650       else
10651         {
10652           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10653           return value_binop (arg1, arg2,
10654                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10655         }
10656
10657     case OP_ATR_MODULUS:
10658       {
10659         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10660
10661         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10662         if (noside == EVAL_SKIP)
10663           goto nosideret;
10664
10665         if (!ada_is_modular_type (type_arg))
10666           error (_("'modulus must be applied to modular type"));
10667
10668         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10669                                    ada_modulus (type_arg));
10670       }
10671
10672
10673     case OP_ATR_POS:
10674       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10675       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10676       if (noside == EVAL_SKIP)
10677         goto nosideret;
10678       type = builtin_type (exp->gdbarch)->builtin_int;
10679       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10680         return value_zero (type, not_lval);
10681       else
10682         return value_pos_atr (type, arg1);
10683
10684     case OP_ATR_SIZE:
10685       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10686       type = value_type (arg1);
10687
10688       /* If the argument is a reference, then dereference its type, since
10689          the user is really asking for the size of the actual object,
10690          not the size of the pointer.  */
10691       if (TYPE_CODE (type) == TYPE_CODE_REF)
10692         type = TYPE_TARGET_TYPE (type);
10693
10694       if (noside == EVAL_SKIP)
10695         goto nosideret;
10696       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10697         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10698       else
10699         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10700                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10701
10702     case OP_ATR_VAL:
10703       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10704       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10705       type = exp->elts[pc + 2].type;
10706       if (noside == EVAL_SKIP)
10707         goto nosideret;
10708       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10709         return value_zero (type, not_lval);
10710       else
10711         return value_val_atr (type, arg1);
10712
10713     case BINOP_EXP:
10714       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10715       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10716       if (noside == EVAL_SKIP)
10717         goto nosideret;
10718       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10719         return value_zero (value_type (arg1), not_lval);
10720       else
10721         {
10722           /* For integer exponentiation operations,
10723              only promote the first argument.  */
10724           if (is_integral_type (value_type (arg2)))
10725             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10726           else
10727             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10728
10729           return value_binop (arg1, arg2, op);
10730         }
10731
10732     case UNOP_PLUS:
10733       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10734       if (noside == EVAL_SKIP)
10735         goto nosideret;
10736       else
10737         return arg1;
10738
10739     case UNOP_ABS:
10740       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10741       if (noside == EVAL_SKIP)
10742         goto nosideret;
10743       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10744       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10745         return value_neg (arg1);
10746       else
10747         return arg1;
10748
10749     case UNOP_IND:
10750       preeval_pos = *pos;
10751       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10752       if (noside == EVAL_SKIP)
10753         goto nosideret;
10754       type = ada_check_typedef (value_type (arg1));
10755       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10756         {
10757           if (ada_is_array_descriptor_type (type))
10758             /* GDB allows dereferencing GNAT array descriptors.  */
10759             {
10760               struct type *arrType = ada_type_of_array (arg1, 0);
10761
10762               if (arrType == NULL)
10763                 error (_("Attempt to dereference null array pointer."));
10764               return value_at_lazy (arrType, 0);
10765             }
10766           else if (TYPE_CODE (type) == TYPE_CODE_PTR
10767                    || TYPE_CODE (type) == TYPE_CODE_REF
10768                    /* In C you can dereference an array to get the 1st elt.  */
10769                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10770             {
10771             /* As mentioned in the OP_VAR_VALUE case, tagged types can
10772                only be determined by inspecting the object's tag.
10773                This means that we need to evaluate completely the
10774                expression in order to get its type.  */
10775
10776               if ((TYPE_CODE (type) == TYPE_CODE_REF
10777                    || TYPE_CODE (type) == TYPE_CODE_PTR)
10778                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10779                 {
10780                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10781                                           EVAL_NORMAL);
10782                   type = value_type (ada_value_ind (arg1));
10783                 }
10784               else
10785                 {
10786                   type = to_static_fixed_type
10787                     (ada_aligned_type
10788                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10789                 }
10790               check_size (type);
10791               return value_zero (type, lval_memory);
10792             }
10793           else if (TYPE_CODE (type) == TYPE_CODE_INT)
10794             {
10795               /* GDB allows dereferencing an int.  */
10796               if (expect_type == NULL)
10797                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10798                                    lval_memory);
10799               else
10800                 {
10801                   expect_type = 
10802                     to_static_fixed_type (ada_aligned_type (expect_type));
10803                   return value_zero (expect_type, lval_memory);
10804                 }
10805             }
10806           else
10807             error (_("Attempt to take contents of a non-pointer value."));
10808         }
10809       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
10810       type = ada_check_typedef (value_type (arg1));
10811
10812       if (TYPE_CODE (type) == TYPE_CODE_INT)
10813           /* GDB allows dereferencing an int.  If we were given
10814              the expect_type, then use that as the target type.
10815              Otherwise, assume that the target type is an int.  */
10816         {
10817           if (expect_type != NULL)
10818             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10819                                               arg1));
10820           else
10821             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10822                                   (CORE_ADDR) value_as_address (arg1));
10823         }
10824
10825       if (ada_is_array_descriptor_type (type))
10826         /* GDB allows dereferencing GNAT array descriptors.  */
10827         return ada_coerce_to_simple_array (arg1);
10828       else
10829         return ada_value_ind (arg1);
10830
10831     case STRUCTOP_STRUCT:
10832       tem = longest_to_int (exp->elts[pc + 1].longconst);
10833       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10834       preeval_pos = *pos;
10835       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10836       if (noside == EVAL_SKIP)
10837         goto nosideret;
10838       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10839         {
10840           struct type *type1 = value_type (arg1);
10841
10842           if (ada_is_tagged_type (type1, 1))
10843             {
10844               type = ada_lookup_struct_elt_type (type1,
10845                                                  &exp->elts[pc + 2].string,
10846                                                  1, 1, NULL);
10847
10848               /* If the field is not found, check if it exists in the
10849                  extension of this object's type. This means that we
10850                  need to evaluate completely the expression.  */
10851
10852               if (type == NULL)
10853                 {
10854                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10855                                           EVAL_NORMAL);
10856                   arg1 = ada_value_struct_elt (arg1,
10857                                                &exp->elts[pc + 2].string,
10858                                                0);
10859                   arg1 = unwrap_value (arg1);
10860                   type = value_type (ada_to_fixed_value (arg1));
10861                 }
10862             }
10863           else
10864             type =
10865               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10866                                           0, NULL);
10867
10868           return value_zero (ada_aligned_type (type), lval_memory);
10869         }
10870       else
10871         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10872         arg1 = unwrap_value (arg1);
10873         return ada_to_fixed_value (arg1);
10874
10875     case OP_TYPE:
10876       /* The value is not supposed to be used.  This is here to make it
10877          easier to accommodate expressions that contain types.  */
10878       (*pos) += 2;
10879       if (noside == EVAL_SKIP)
10880         goto nosideret;
10881       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10882         return allocate_value (exp->elts[pc + 1].type);
10883       else
10884         error (_("Attempt to use a type name as an expression"));
10885
10886     case OP_AGGREGATE:
10887     case OP_CHOICES:
10888     case OP_OTHERS:
10889     case OP_DISCRETE_RANGE:
10890     case OP_POSITIONAL:
10891     case OP_NAME:
10892       if (noside == EVAL_NORMAL)
10893         switch (op) 
10894           {
10895           case OP_NAME:
10896             error (_("Undefined name, ambiguous name, or renaming used in "
10897                      "component association: %s."), &exp->elts[pc+2].string);
10898           case OP_AGGREGATE:
10899             error (_("Aggregates only allowed on the right of an assignment"));
10900           default:
10901             internal_error (__FILE__, __LINE__,
10902                             _("aggregate apparently mangled"));
10903           }
10904
10905       ada_forward_operator_length (exp, pc, &oplen, &nargs);
10906       *pos += oplen - 1;
10907       for (tem = 0; tem < nargs; tem += 1) 
10908         ada_evaluate_subexp (NULL, exp, pos, noside);
10909       goto nosideret;
10910     }
10911
10912 nosideret:
10913   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
10914 }
10915 \f
10916
10917                                 /* Fixed point */
10918
10919 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
10920    type name that encodes the 'small and 'delta information.
10921    Otherwise, return NULL.  */
10922
10923 static const char *
10924 fixed_type_info (struct type *type)
10925 {
10926   const char *name = ada_type_name (type);
10927   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10928
10929   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10930     {
10931       const char *tail = strstr (name, "___XF_");
10932
10933       if (tail == NULL)
10934         return NULL;
10935       else
10936         return tail + 5;
10937     }
10938   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10939     return fixed_type_info (TYPE_TARGET_TYPE (type));
10940   else
10941     return NULL;
10942 }
10943
10944 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
10945
10946 int
10947 ada_is_fixed_point_type (struct type *type)
10948 {
10949   return fixed_type_info (type) != NULL;
10950 }
10951
10952 /* Return non-zero iff TYPE represents a System.Address type.  */
10953
10954 int
10955 ada_is_system_address_type (struct type *type)
10956 {
10957   return (TYPE_NAME (type)
10958           && strcmp (TYPE_NAME (type), "system__address") == 0);
10959 }
10960
10961 /* Assuming that TYPE is the representation of an Ada fixed-point
10962    type, return its delta, or -1 if the type is malformed and the
10963    delta cannot be determined.  */
10964
10965 DOUBLEST
10966 ada_delta (struct type *type)
10967 {
10968   const char *encoding = fixed_type_info (type);
10969   DOUBLEST num, den;
10970
10971   /* Strictly speaking, num and den are encoded as integer.  However,
10972      they may not fit into a long, and they will have to be converted
10973      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10974   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10975               &num, &den) < 2)
10976     return -1.0;
10977   else
10978     return num / den;
10979 }
10980
10981 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
10982    factor ('SMALL value) associated with the type.  */
10983
10984 static DOUBLEST
10985 scaling_factor (struct type *type)
10986 {
10987   const char *encoding = fixed_type_info (type);
10988   DOUBLEST num0, den0, num1, den1;
10989   int n;
10990
10991   /* Strictly speaking, num's and den's are encoded as integer.  However,
10992      they may not fit into a long, and they will have to be converted
10993      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10994   n = sscanf (encoding,
10995               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
10996               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10997               &num0, &den0, &num1, &den1);
10998
10999   if (n < 2)
11000     return 1.0;
11001   else if (n == 4)
11002     return num1 / den1;
11003   else
11004     return num0 / den0;
11005 }
11006
11007
11008 /* Assuming that X is the representation of a value of fixed-point
11009    type TYPE, return its floating-point equivalent.  */
11010
11011 DOUBLEST
11012 ada_fixed_to_float (struct type *type, LONGEST x)
11013 {
11014   return (DOUBLEST) x *scaling_factor (type);
11015 }
11016
11017 /* The representation of a fixed-point value of type TYPE
11018    corresponding to the value X.  */
11019
11020 LONGEST
11021 ada_float_to_fixed (struct type *type, DOUBLEST x)
11022 {
11023   return (LONGEST) (x / scaling_factor (type) + 0.5);
11024 }
11025
11026 \f
11027
11028                                 /* Range types */
11029
11030 /* Scan STR beginning at position K for a discriminant name, and
11031    return the value of that discriminant field of DVAL in *PX.  If
11032    PNEW_K is not null, put the position of the character beyond the
11033    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11034    not alter *PX and *PNEW_K if unsuccessful.  */
11035
11036 static int
11037 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
11038                     int *pnew_k)
11039 {
11040   static char *bound_buffer = NULL;
11041   static size_t bound_buffer_len = 0;
11042   char *bound;
11043   char *pend;
11044   struct value *bound_val;
11045
11046   if (dval == NULL || str == NULL || str[k] == '\0')
11047     return 0;
11048
11049   pend = strstr (str + k, "__");
11050   if (pend == NULL)
11051     {
11052       bound = str + k;
11053       k += strlen (bound);
11054     }
11055   else
11056     {
11057       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
11058       bound = bound_buffer;
11059       strncpy (bound_buffer, str + k, pend - (str + k));
11060       bound[pend - (str + k)] = '\0';
11061       k = pend - str;
11062     }
11063
11064   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11065   if (bound_val == NULL)
11066     return 0;
11067
11068   *px = value_as_long (bound_val);
11069   if (pnew_k != NULL)
11070     *pnew_k = k;
11071   return 1;
11072 }
11073
11074 /* Value of variable named NAME in the current environment.  If
11075    no such variable found, then if ERR_MSG is null, returns 0, and
11076    otherwise causes an error with message ERR_MSG.  */
11077
11078 static struct value *
11079 get_var_value (char *name, char *err_msg)
11080 {
11081   struct ada_symbol_info *syms;
11082   int nsyms;
11083
11084   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11085                                   &syms);
11086
11087   if (nsyms != 1)
11088     {
11089       if (err_msg == NULL)
11090         return 0;
11091       else
11092         error (("%s"), err_msg);
11093     }
11094
11095   return value_of_variable (syms[0].sym, syms[0].block);
11096 }
11097
11098 /* Value of integer variable named NAME in the current environment.  If
11099    no such variable found, returns 0, and sets *FLAG to 0.  If
11100    successful, sets *FLAG to 1.  */
11101
11102 LONGEST
11103 get_int_var_value (char *name, int *flag)
11104 {
11105   struct value *var_val = get_var_value (name, 0);
11106
11107   if (var_val == 0)
11108     {
11109       if (flag != NULL)
11110         *flag = 0;
11111       return 0;
11112     }
11113   else
11114     {
11115       if (flag != NULL)
11116         *flag = 1;
11117       return value_as_long (var_val);
11118     }
11119 }
11120
11121
11122 /* Return a range type whose base type is that of the range type named
11123    NAME in the current environment, and whose bounds are calculated
11124    from NAME according to the GNAT range encoding conventions.
11125    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11126    corresponding range type from debug information; fall back to using it
11127    if symbol lookup fails.  If a new type must be created, allocate it
11128    like ORIG_TYPE was.  The bounds information, in general, is encoded
11129    in NAME, the base type given in the named range type.  */
11130
11131 static struct type *
11132 to_fixed_range_type (struct type *raw_type, struct value *dval)
11133 {
11134   const char *name;
11135   struct type *base_type;
11136   char *subtype_info;
11137
11138   gdb_assert (raw_type != NULL);
11139   gdb_assert (TYPE_NAME (raw_type) != NULL);
11140
11141   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11142     base_type = TYPE_TARGET_TYPE (raw_type);
11143   else
11144     base_type = raw_type;
11145
11146   name = TYPE_NAME (raw_type);
11147   subtype_info = strstr (name, "___XD");
11148   if (subtype_info == NULL)
11149     {
11150       LONGEST L = ada_discrete_type_low_bound (raw_type);
11151       LONGEST U = ada_discrete_type_high_bound (raw_type);
11152
11153       if (L < INT_MIN || U > INT_MAX)
11154         return raw_type;
11155       else
11156         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11157                                          L, U);
11158     }
11159   else
11160     {
11161       static char *name_buf = NULL;
11162       static size_t name_len = 0;
11163       int prefix_len = subtype_info - name;
11164       LONGEST L, U;
11165       struct type *type;
11166       char *bounds_str;
11167       int n;
11168
11169       GROW_VECT (name_buf, name_len, prefix_len + 5);
11170       strncpy (name_buf, name, prefix_len);
11171       name_buf[prefix_len] = '\0';
11172
11173       subtype_info += 5;
11174       bounds_str = strchr (subtype_info, '_');
11175       n = 1;
11176
11177       if (*subtype_info == 'L')
11178         {
11179           if (!ada_scan_number (bounds_str, n, &L, &n)
11180               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11181             return raw_type;
11182           if (bounds_str[n] == '_')
11183             n += 2;
11184           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11185             n += 1;
11186           subtype_info += 1;
11187         }
11188       else
11189         {
11190           int ok;
11191
11192           strcpy (name_buf + prefix_len, "___L");
11193           L = get_int_var_value (name_buf, &ok);
11194           if (!ok)
11195             {
11196               lim_warning (_("Unknown lower bound, using 1."));
11197               L = 1;
11198             }
11199         }
11200
11201       if (*subtype_info == 'U')
11202         {
11203           if (!ada_scan_number (bounds_str, n, &U, &n)
11204               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11205             return raw_type;
11206         }
11207       else
11208         {
11209           int ok;
11210
11211           strcpy (name_buf + prefix_len, "___U");
11212           U = get_int_var_value (name_buf, &ok);
11213           if (!ok)
11214             {
11215               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11216               U = L;
11217             }
11218         }
11219
11220       type = create_static_range_type (alloc_type_copy (raw_type),
11221                                        base_type, L, U);
11222       TYPE_NAME (type) = name;
11223       return type;
11224     }
11225 }
11226
11227 /* True iff NAME is the name of a range type.  */
11228
11229 int
11230 ada_is_range_type_name (const char *name)
11231 {
11232   return (name != NULL && strstr (name, "___XD"));
11233 }
11234 \f
11235
11236                                 /* Modular types */
11237
11238 /* True iff TYPE is an Ada modular type.  */
11239
11240 int
11241 ada_is_modular_type (struct type *type)
11242 {
11243   struct type *subranged_type = get_base_type (type);
11244
11245   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11246           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11247           && TYPE_UNSIGNED (subranged_type));
11248 }
11249
11250 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11251
11252 ULONGEST
11253 ada_modulus (struct type *type)
11254 {
11255   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11256 }
11257 \f
11258
11259 /* Ada exception catchpoint support:
11260    ---------------------------------
11261
11262    We support 3 kinds of exception catchpoints:
11263      . catchpoints on Ada exceptions
11264      . catchpoints on unhandled Ada exceptions
11265      . catchpoints on failed assertions
11266
11267    Exceptions raised during failed assertions, or unhandled exceptions
11268    could perfectly be caught with the general catchpoint on Ada exceptions.
11269    However, we can easily differentiate these two special cases, and having
11270    the option to distinguish these two cases from the rest can be useful
11271    to zero-in on certain situations.
11272
11273    Exception catchpoints are a specialized form of breakpoint,
11274    since they rely on inserting breakpoints inside known routines
11275    of the GNAT runtime.  The implementation therefore uses a standard
11276    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11277    of breakpoint_ops.
11278
11279    Support in the runtime for exception catchpoints have been changed
11280    a few times already, and these changes affect the implementation
11281    of these catchpoints.  In order to be able to support several
11282    variants of the runtime, we use a sniffer that will determine
11283    the runtime variant used by the program being debugged.  */
11284
11285 /* Ada's standard exceptions.
11286
11287    The Ada 83 standard also defined Numeric_Error.  But there so many
11288    situations where it was unclear from the Ada 83 Reference Manual
11289    (RM) whether Constraint_Error or Numeric_Error should be raised,
11290    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11291    Interpretation saying that anytime the RM says that Numeric_Error
11292    should be raised, the implementation may raise Constraint_Error.
11293    Ada 95 went one step further and pretty much removed Numeric_Error
11294    from the list of standard exceptions (it made it a renaming of
11295    Constraint_Error, to help preserve compatibility when compiling
11296    an Ada83 compiler). As such, we do not include Numeric_Error from
11297    this list of standard exceptions.  */
11298
11299 static char *standard_exc[] = {
11300   "constraint_error",
11301   "program_error",
11302   "storage_error",
11303   "tasking_error"
11304 };
11305
11306 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11307
11308 /* A structure that describes how to support exception catchpoints
11309    for a given executable.  */
11310
11311 struct exception_support_info
11312 {
11313    /* The name of the symbol to break on in order to insert
11314       a catchpoint on exceptions.  */
11315    const char *catch_exception_sym;
11316
11317    /* The name of the symbol to break on in order to insert
11318       a catchpoint on unhandled exceptions.  */
11319    const char *catch_exception_unhandled_sym;
11320
11321    /* The name of the symbol to break on in order to insert
11322       a catchpoint on failed assertions.  */
11323    const char *catch_assert_sym;
11324
11325    /* Assuming that the inferior just triggered an unhandled exception
11326       catchpoint, this function is responsible for returning the address
11327       in inferior memory where the name of that exception is stored.
11328       Return zero if the address could not be computed.  */
11329    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11330 };
11331
11332 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11333 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11334
11335 /* The following exception support info structure describes how to
11336    implement exception catchpoints with the latest version of the
11337    Ada runtime (as of 2007-03-06).  */
11338
11339 static const struct exception_support_info default_exception_support_info =
11340 {
11341   "__gnat_debug_raise_exception", /* catch_exception_sym */
11342   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11343   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11344   ada_unhandled_exception_name_addr
11345 };
11346
11347 /* The following exception support info structure describes how to
11348    implement exception catchpoints with a slightly older version
11349    of the Ada runtime.  */
11350
11351 static const struct exception_support_info exception_support_info_fallback =
11352 {
11353   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11354   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11355   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11356   ada_unhandled_exception_name_addr_from_raise
11357 };
11358
11359 /* Return nonzero if we can detect the exception support routines
11360    described in EINFO.
11361
11362    This function errors out if an abnormal situation is detected
11363    (for instance, if we find the exception support routines, but
11364    that support is found to be incomplete).  */
11365
11366 static int
11367 ada_has_this_exception_support (const struct exception_support_info *einfo)
11368 {
11369   struct symbol *sym;
11370
11371   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11372      that should be compiled with debugging information.  As a result, we
11373      expect to find that symbol in the symtabs.  */
11374
11375   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11376   if (sym == NULL)
11377     {
11378       /* Perhaps we did not find our symbol because the Ada runtime was
11379          compiled without debugging info, or simply stripped of it.
11380          It happens on some GNU/Linux distributions for instance, where
11381          users have to install a separate debug package in order to get
11382          the runtime's debugging info.  In that situation, let the user
11383          know why we cannot insert an Ada exception catchpoint.
11384
11385          Note: Just for the purpose of inserting our Ada exception
11386          catchpoint, we could rely purely on the associated minimal symbol.
11387          But we would be operating in degraded mode anyway, since we are
11388          still lacking the debugging info needed later on to extract
11389          the name of the exception being raised (this name is printed in
11390          the catchpoint message, and is also used when trying to catch
11391          a specific exception).  We do not handle this case for now.  */
11392       struct bound_minimal_symbol msym
11393         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11394
11395       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11396         error (_("Your Ada runtime appears to be missing some debugging "
11397                  "information.\nCannot insert Ada exception catchpoint "
11398                  "in this configuration."));
11399
11400       return 0;
11401     }
11402
11403   /* Make sure that the symbol we found corresponds to a function.  */
11404
11405   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11406     error (_("Symbol \"%s\" is not a function (class = %d)"),
11407            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11408
11409   return 1;
11410 }
11411
11412 /* Inspect the Ada runtime and determine which exception info structure
11413    should be used to provide support for exception catchpoints.
11414
11415    This function will always set the per-inferior exception_info,
11416    or raise an error.  */
11417
11418 static void
11419 ada_exception_support_info_sniffer (void)
11420 {
11421   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11422
11423   /* If the exception info is already known, then no need to recompute it.  */
11424   if (data->exception_info != NULL)
11425     return;
11426
11427   /* Check the latest (default) exception support info.  */
11428   if (ada_has_this_exception_support (&default_exception_support_info))
11429     {
11430       data->exception_info = &default_exception_support_info;
11431       return;
11432     }
11433
11434   /* Try our fallback exception suport info.  */
11435   if (ada_has_this_exception_support (&exception_support_info_fallback))
11436     {
11437       data->exception_info = &exception_support_info_fallback;
11438       return;
11439     }
11440
11441   /* Sometimes, it is normal for us to not be able to find the routine
11442      we are looking for.  This happens when the program is linked with
11443      the shared version of the GNAT runtime, and the program has not been
11444      started yet.  Inform the user of these two possible causes if
11445      applicable.  */
11446
11447   if (ada_update_initial_language (language_unknown) != language_ada)
11448     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11449
11450   /* If the symbol does not exist, then check that the program is
11451      already started, to make sure that shared libraries have been
11452      loaded.  If it is not started, this may mean that the symbol is
11453      in a shared library.  */
11454
11455   if (ptid_get_pid (inferior_ptid) == 0)
11456     error (_("Unable to insert catchpoint. Try to start the program first."));
11457
11458   /* At this point, we know that we are debugging an Ada program and
11459      that the inferior has been started, but we still are not able to
11460      find the run-time symbols.  That can mean that we are in
11461      configurable run time mode, or that a-except as been optimized
11462      out by the linker...  In any case, at this point it is not worth
11463      supporting this feature.  */
11464
11465   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11466 }
11467
11468 /* True iff FRAME is very likely to be that of a function that is
11469    part of the runtime system.  This is all very heuristic, but is
11470    intended to be used as advice as to what frames are uninteresting
11471    to most users.  */
11472
11473 static int
11474 is_known_support_routine (struct frame_info *frame)
11475 {
11476   struct symtab_and_line sal;
11477   char *func_name;
11478   enum language func_lang;
11479   int i;
11480   const char *fullname;
11481
11482   /* If this code does not have any debugging information (no symtab),
11483      This cannot be any user code.  */
11484
11485   find_frame_sal (frame, &sal);
11486   if (sal.symtab == NULL)
11487     return 1;
11488
11489   /* If there is a symtab, but the associated source file cannot be
11490      located, then assume this is not user code:  Selecting a frame
11491      for which we cannot display the code would not be very helpful
11492      for the user.  This should also take care of case such as VxWorks
11493      where the kernel has some debugging info provided for a few units.  */
11494
11495   fullname = symtab_to_fullname (sal.symtab);
11496   if (access (fullname, R_OK) != 0)
11497     return 1;
11498
11499   /* Check the unit filename againt the Ada runtime file naming.
11500      We also check the name of the objfile against the name of some
11501      known system libraries that sometimes come with debugging info
11502      too.  */
11503
11504   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11505     {
11506       re_comp (known_runtime_file_name_patterns[i]);
11507       if (re_exec (lbasename (sal.symtab->filename)))
11508         return 1;
11509       if (sal.symtab->objfile != NULL
11510           && re_exec (objfile_name (sal.symtab->objfile)))
11511         return 1;
11512     }
11513
11514   /* Check whether the function is a GNAT-generated entity.  */
11515
11516   find_frame_funname (frame, &func_name, &func_lang, NULL);
11517   if (func_name == NULL)
11518     return 1;
11519
11520   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11521     {
11522       re_comp (known_auxiliary_function_name_patterns[i]);
11523       if (re_exec (func_name))
11524         {
11525           xfree (func_name);
11526           return 1;
11527         }
11528     }
11529
11530   xfree (func_name);
11531   return 0;
11532 }
11533
11534 /* Find the first frame that contains debugging information and that is not
11535    part of the Ada run-time, starting from FI and moving upward.  */
11536
11537 void
11538 ada_find_printable_frame (struct frame_info *fi)
11539 {
11540   for (; fi != NULL; fi = get_prev_frame (fi))
11541     {
11542       if (!is_known_support_routine (fi))
11543         {
11544           select_frame (fi);
11545           break;
11546         }
11547     }
11548
11549 }
11550
11551 /* Assuming that the inferior just triggered an unhandled exception
11552    catchpoint, return the address in inferior memory where the name
11553    of the exception is stored.
11554    
11555    Return zero if the address could not be computed.  */
11556
11557 static CORE_ADDR
11558 ada_unhandled_exception_name_addr (void)
11559 {
11560   return parse_and_eval_address ("e.full_name");
11561 }
11562
11563 /* Same as ada_unhandled_exception_name_addr, except that this function
11564    should be used when the inferior uses an older version of the runtime,
11565    where the exception name needs to be extracted from a specific frame
11566    several frames up in the callstack.  */
11567
11568 static CORE_ADDR
11569 ada_unhandled_exception_name_addr_from_raise (void)
11570 {
11571   int frame_level;
11572   struct frame_info *fi;
11573   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11574   struct cleanup *old_chain;
11575
11576   /* To determine the name of this exception, we need to select
11577      the frame corresponding to RAISE_SYM_NAME.  This frame is
11578      at least 3 levels up, so we simply skip the first 3 frames
11579      without checking the name of their associated function.  */
11580   fi = get_current_frame ();
11581   for (frame_level = 0; frame_level < 3; frame_level += 1)
11582     if (fi != NULL)
11583       fi = get_prev_frame (fi); 
11584
11585   old_chain = make_cleanup (null_cleanup, NULL);
11586   while (fi != NULL)
11587     {
11588       char *func_name;
11589       enum language func_lang;
11590
11591       find_frame_funname (fi, &func_name, &func_lang, NULL);
11592       if (func_name != NULL)
11593         {
11594           make_cleanup (xfree, func_name);
11595
11596           if (strcmp (func_name,
11597                       data->exception_info->catch_exception_sym) == 0)
11598             break; /* We found the frame we were looking for...  */
11599           fi = get_prev_frame (fi);
11600         }
11601     }
11602   do_cleanups (old_chain);
11603
11604   if (fi == NULL)
11605     return 0;
11606
11607   select_frame (fi);
11608   return parse_and_eval_address ("id.full_name");
11609 }
11610
11611 /* Assuming the inferior just triggered an Ada exception catchpoint
11612    (of any type), return the address in inferior memory where the name
11613    of the exception is stored, if applicable.
11614
11615    Return zero if the address could not be computed, or if not relevant.  */
11616
11617 static CORE_ADDR
11618 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11619                            struct breakpoint *b)
11620 {
11621   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11622
11623   switch (ex)
11624     {
11625       case ada_catch_exception:
11626         return (parse_and_eval_address ("e.full_name"));
11627         break;
11628
11629       case ada_catch_exception_unhandled:
11630         return data->exception_info->unhandled_exception_name_addr ();
11631         break;
11632       
11633       case ada_catch_assert:
11634         return 0;  /* Exception name is not relevant in this case.  */
11635         break;
11636
11637       default:
11638         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11639         break;
11640     }
11641
11642   return 0; /* Should never be reached.  */
11643 }
11644
11645 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11646    any error that ada_exception_name_addr_1 might cause to be thrown.
11647    When an error is intercepted, a warning with the error message is printed,
11648    and zero is returned.  */
11649
11650 static CORE_ADDR
11651 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11652                          struct breakpoint *b)
11653 {
11654   volatile struct gdb_exception e;
11655   CORE_ADDR result = 0;
11656
11657   TRY_CATCH (e, RETURN_MASK_ERROR)
11658     {
11659       result = ada_exception_name_addr_1 (ex, b);
11660     }
11661
11662   if (e.reason < 0)
11663     {
11664       warning (_("failed to get exception name: %s"), e.message);
11665       return 0;
11666     }
11667
11668   return result;
11669 }
11670
11671 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11672
11673 /* Ada catchpoints.
11674
11675    In the case of catchpoints on Ada exceptions, the catchpoint will
11676    stop the target on every exception the program throws.  When a user
11677    specifies the name of a specific exception, we translate this
11678    request into a condition expression (in text form), and then parse
11679    it into an expression stored in each of the catchpoint's locations.
11680    We then use this condition to check whether the exception that was
11681    raised is the one the user is interested in.  If not, then the
11682    target is resumed again.  We store the name of the requested
11683    exception, in order to be able to re-set the condition expression
11684    when symbols change.  */
11685
11686 /* An instance of this type is used to represent an Ada catchpoint
11687    breakpoint location.  It includes a "struct bp_location" as a kind
11688    of base class; users downcast to "struct bp_location *" when
11689    needed.  */
11690
11691 struct ada_catchpoint_location
11692 {
11693   /* The base class.  */
11694   struct bp_location base;
11695
11696   /* The condition that checks whether the exception that was raised
11697      is the specific exception the user specified on catchpoint
11698      creation.  */
11699   struct expression *excep_cond_expr;
11700 };
11701
11702 /* Implement the DTOR method in the bp_location_ops structure for all
11703    Ada exception catchpoint kinds.  */
11704
11705 static void
11706 ada_catchpoint_location_dtor (struct bp_location *bl)
11707 {
11708   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11709
11710   xfree (al->excep_cond_expr);
11711 }
11712
11713 /* The vtable to be used in Ada catchpoint locations.  */
11714
11715 static const struct bp_location_ops ada_catchpoint_location_ops =
11716 {
11717   ada_catchpoint_location_dtor
11718 };
11719
11720 /* An instance of this type is used to represent an Ada catchpoint.
11721    It includes a "struct breakpoint" as a kind of base class; users
11722    downcast to "struct breakpoint *" when needed.  */
11723
11724 struct ada_catchpoint
11725 {
11726   /* The base class.  */
11727   struct breakpoint base;
11728
11729   /* The name of the specific exception the user specified.  */
11730   char *excep_string;
11731 };
11732
11733 /* Parse the exception condition string in the context of each of the
11734    catchpoint's locations, and store them for later evaluation.  */
11735
11736 static void
11737 create_excep_cond_exprs (struct ada_catchpoint *c)
11738 {
11739   struct cleanup *old_chain;
11740   struct bp_location *bl;
11741   char *cond_string;
11742
11743   /* Nothing to do if there's no specific exception to catch.  */
11744   if (c->excep_string == NULL)
11745     return;
11746
11747   /* Same if there are no locations... */
11748   if (c->base.loc == NULL)
11749     return;
11750
11751   /* Compute the condition expression in text form, from the specific
11752      expection we want to catch.  */
11753   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11754   old_chain = make_cleanup (xfree, cond_string);
11755
11756   /* Iterate over all the catchpoint's locations, and parse an
11757      expression for each.  */
11758   for (bl = c->base.loc; bl != NULL; bl = bl->next)
11759     {
11760       struct ada_catchpoint_location *ada_loc
11761         = (struct ada_catchpoint_location *) bl;
11762       struct expression *exp = NULL;
11763
11764       if (!bl->shlib_disabled)
11765         {
11766           volatile struct gdb_exception e;
11767           const char *s;
11768
11769           s = cond_string;
11770           TRY_CATCH (e, RETURN_MASK_ERROR)
11771             {
11772               exp = parse_exp_1 (&s, bl->address,
11773                                  block_for_pc (bl->address), 0);
11774             }
11775           if (e.reason < 0)
11776             {
11777               warning (_("failed to reevaluate internal exception condition "
11778                          "for catchpoint %d: %s"),
11779                        c->base.number, e.message);
11780               /* There is a bug in GCC on sparc-solaris when building with
11781                  optimization which causes EXP to change unexpectedly
11782                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11783                  The problem should be fixed starting with GCC 4.9.
11784                  In the meantime, work around it by forcing EXP back
11785                  to NULL.  */
11786               exp = NULL;
11787             }
11788         }
11789
11790       ada_loc->excep_cond_expr = exp;
11791     }
11792
11793   do_cleanups (old_chain);
11794 }
11795
11796 /* Implement the DTOR method in the breakpoint_ops structure for all
11797    exception catchpoint kinds.  */
11798
11799 static void
11800 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11801 {
11802   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11803
11804   xfree (c->excep_string);
11805
11806   bkpt_breakpoint_ops.dtor (b);
11807 }
11808
11809 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11810    structure for all exception catchpoint kinds.  */
11811
11812 static struct bp_location *
11813 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
11814                              struct breakpoint *self)
11815 {
11816   struct ada_catchpoint_location *loc;
11817
11818   loc = XNEW (struct ada_catchpoint_location);
11819   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11820   loc->excep_cond_expr = NULL;
11821   return &loc->base;
11822 }
11823
11824 /* Implement the RE_SET method in the breakpoint_ops structure for all
11825    exception catchpoint kinds.  */
11826
11827 static void
11828 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11829 {
11830   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11831
11832   /* Call the base class's method.  This updates the catchpoint's
11833      locations.  */
11834   bkpt_breakpoint_ops.re_set (b);
11835
11836   /* Reparse the exception conditional expressions.  One for each
11837      location.  */
11838   create_excep_cond_exprs (c);
11839 }
11840
11841 /* Returns true if we should stop for this breakpoint hit.  If the
11842    user specified a specific exception, we only want to cause a stop
11843    if the program thrown that exception.  */
11844
11845 static int
11846 should_stop_exception (const struct bp_location *bl)
11847 {
11848   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11849   const struct ada_catchpoint_location *ada_loc
11850     = (const struct ada_catchpoint_location *) bl;
11851   volatile struct gdb_exception ex;
11852   int stop;
11853
11854   /* With no specific exception, should always stop.  */
11855   if (c->excep_string == NULL)
11856     return 1;
11857
11858   if (ada_loc->excep_cond_expr == NULL)
11859     {
11860       /* We will have a NULL expression if back when we were creating
11861          the expressions, this location's had failed to parse.  */
11862       return 1;
11863     }
11864
11865   stop = 1;
11866   TRY_CATCH (ex, RETURN_MASK_ALL)
11867     {
11868       struct value *mark;
11869
11870       mark = value_mark ();
11871       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11872       value_free_to_mark (mark);
11873     }
11874   if (ex.reason < 0)
11875     exception_fprintf (gdb_stderr, ex,
11876                        _("Error in testing exception condition:\n"));
11877   return stop;
11878 }
11879
11880 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
11881    for all exception catchpoint kinds.  */
11882
11883 static void
11884 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11885 {
11886   bs->stop = should_stop_exception (bs->bp_location_at);
11887 }
11888
11889 /* Implement the PRINT_IT method in the breakpoint_ops structure
11890    for all exception catchpoint kinds.  */
11891
11892 static enum print_stop_action
11893 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11894 {
11895   struct ui_out *uiout = current_uiout;
11896   struct breakpoint *b = bs->breakpoint_at;
11897
11898   annotate_catchpoint (b->number);
11899
11900   if (ui_out_is_mi_like_p (uiout))
11901     {
11902       ui_out_field_string (uiout, "reason",
11903                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11904       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11905     }
11906
11907   ui_out_text (uiout,
11908                b->disposition == disp_del ? "\nTemporary catchpoint "
11909                                           : "\nCatchpoint ");
11910   ui_out_field_int (uiout, "bkptno", b->number);
11911   ui_out_text (uiout, ", ");
11912
11913   switch (ex)
11914     {
11915       case ada_catch_exception:
11916       case ada_catch_exception_unhandled:
11917         {
11918           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11919           char exception_name[256];
11920
11921           if (addr != 0)
11922             {
11923               read_memory (addr, (gdb_byte *) exception_name,
11924                            sizeof (exception_name) - 1);
11925               exception_name [sizeof (exception_name) - 1] = '\0';
11926             }
11927           else
11928             {
11929               /* For some reason, we were unable to read the exception
11930                  name.  This could happen if the Runtime was compiled
11931                  without debugging info, for instance.  In that case,
11932                  just replace the exception name by the generic string
11933                  "exception" - it will read as "an exception" in the
11934                  notification we are about to print.  */
11935               memcpy (exception_name, "exception", sizeof ("exception"));
11936             }
11937           /* In the case of unhandled exception breakpoints, we print
11938              the exception name as "unhandled EXCEPTION_NAME", to make
11939              it clearer to the user which kind of catchpoint just got
11940              hit.  We used ui_out_text to make sure that this extra
11941              info does not pollute the exception name in the MI case.  */
11942           if (ex == ada_catch_exception_unhandled)
11943             ui_out_text (uiout, "unhandled ");
11944           ui_out_field_string (uiout, "exception-name", exception_name);
11945         }
11946         break;
11947       case ada_catch_assert:
11948         /* In this case, the name of the exception is not really
11949            important.  Just print "failed assertion" to make it clearer
11950            that his program just hit an assertion-failure catchpoint.
11951            We used ui_out_text because this info does not belong in
11952            the MI output.  */
11953         ui_out_text (uiout, "failed assertion");
11954         break;
11955     }
11956   ui_out_text (uiout, " at ");
11957   ada_find_printable_frame (get_current_frame ());
11958
11959   return PRINT_SRC_AND_LOC;
11960 }
11961
11962 /* Implement the PRINT_ONE method in the breakpoint_ops structure
11963    for all exception catchpoint kinds.  */
11964
11965 static void
11966 print_one_exception (enum ada_exception_catchpoint_kind ex,
11967                      struct breakpoint *b, struct bp_location **last_loc)
11968
11969   struct ui_out *uiout = current_uiout;
11970   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11971   struct value_print_options opts;
11972
11973   get_user_print_options (&opts);
11974   if (opts.addressprint)
11975     {
11976       annotate_field (4);
11977       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
11978     }
11979
11980   annotate_field (5);
11981   *last_loc = b->loc;
11982   switch (ex)
11983     {
11984       case ada_catch_exception:
11985         if (c->excep_string != NULL)
11986           {
11987             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11988
11989             ui_out_field_string (uiout, "what", msg);
11990             xfree (msg);
11991           }
11992         else
11993           ui_out_field_string (uiout, "what", "all Ada exceptions");
11994         
11995         break;
11996
11997       case ada_catch_exception_unhandled:
11998         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
11999         break;
12000       
12001       case ada_catch_assert:
12002         ui_out_field_string (uiout, "what", "failed Ada assertions");
12003         break;
12004
12005       default:
12006         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12007         break;
12008     }
12009 }
12010
12011 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12012    for all exception catchpoint kinds.  */
12013
12014 static void
12015 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12016                          struct breakpoint *b)
12017 {
12018   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12019   struct ui_out *uiout = current_uiout;
12020
12021   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12022                                                  : _("Catchpoint "));
12023   ui_out_field_int (uiout, "bkptno", b->number);
12024   ui_out_text (uiout, ": ");
12025
12026   switch (ex)
12027     {
12028       case ada_catch_exception:
12029         if (c->excep_string != NULL)
12030           {
12031             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12032             struct cleanup *old_chain = make_cleanup (xfree, info);
12033
12034             ui_out_text (uiout, info);
12035             do_cleanups (old_chain);
12036           }
12037         else
12038           ui_out_text (uiout, _("all Ada exceptions"));
12039         break;
12040
12041       case ada_catch_exception_unhandled:
12042         ui_out_text (uiout, _("unhandled Ada exceptions"));
12043         break;
12044       
12045       case ada_catch_assert:
12046         ui_out_text (uiout, _("failed Ada assertions"));
12047         break;
12048
12049       default:
12050         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12051         break;
12052     }
12053 }
12054
12055 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12056    for all exception catchpoint kinds.  */
12057
12058 static void
12059 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12060                           struct breakpoint *b, struct ui_file *fp)
12061 {
12062   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12063
12064   switch (ex)
12065     {
12066       case ada_catch_exception:
12067         fprintf_filtered (fp, "catch exception");
12068         if (c->excep_string != NULL)
12069           fprintf_filtered (fp, " %s", c->excep_string);
12070         break;
12071
12072       case ada_catch_exception_unhandled:
12073         fprintf_filtered (fp, "catch exception unhandled");
12074         break;
12075
12076       case ada_catch_assert:
12077         fprintf_filtered (fp, "catch assert");
12078         break;
12079
12080       default:
12081         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12082     }
12083   print_recreate_thread (b, fp);
12084 }
12085
12086 /* Virtual table for "catch exception" breakpoints.  */
12087
12088 static void
12089 dtor_catch_exception (struct breakpoint *b)
12090 {
12091   dtor_exception (ada_catch_exception, b);
12092 }
12093
12094 static struct bp_location *
12095 allocate_location_catch_exception (struct breakpoint *self)
12096 {
12097   return allocate_location_exception (ada_catch_exception, self);
12098 }
12099
12100 static void
12101 re_set_catch_exception (struct breakpoint *b)
12102 {
12103   re_set_exception (ada_catch_exception, b);
12104 }
12105
12106 static void
12107 check_status_catch_exception (bpstat bs)
12108 {
12109   check_status_exception (ada_catch_exception, bs);
12110 }
12111
12112 static enum print_stop_action
12113 print_it_catch_exception (bpstat bs)
12114 {
12115   return print_it_exception (ada_catch_exception, bs);
12116 }
12117
12118 static void
12119 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12120 {
12121   print_one_exception (ada_catch_exception, b, last_loc);
12122 }
12123
12124 static void
12125 print_mention_catch_exception (struct breakpoint *b)
12126 {
12127   print_mention_exception (ada_catch_exception, b);
12128 }
12129
12130 static void
12131 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12132 {
12133   print_recreate_exception (ada_catch_exception, b, fp);
12134 }
12135
12136 static struct breakpoint_ops catch_exception_breakpoint_ops;
12137
12138 /* Virtual table for "catch exception unhandled" breakpoints.  */
12139
12140 static void
12141 dtor_catch_exception_unhandled (struct breakpoint *b)
12142 {
12143   dtor_exception (ada_catch_exception_unhandled, b);
12144 }
12145
12146 static struct bp_location *
12147 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12148 {
12149   return allocate_location_exception (ada_catch_exception_unhandled, self);
12150 }
12151
12152 static void
12153 re_set_catch_exception_unhandled (struct breakpoint *b)
12154 {
12155   re_set_exception (ada_catch_exception_unhandled, b);
12156 }
12157
12158 static void
12159 check_status_catch_exception_unhandled (bpstat bs)
12160 {
12161   check_status_exception (ada_catch_exception_unhandled, bs);
12162 }
12163
12164 static enum print_stop_action
12165 print_it_catch_exception_unhandled (bpstat bs)
12166 {
12167   return print_it_exception (ada_catch_exception_unhandled, bs);
12168 }
12169
12170 static void
12171 print_one_catch_exception_unhandled (struct breakpoint *b,
12172                                      struct bp_location **last_loc)
12173 {
12174   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12175 }
12176
12177 static void
12178 print_mention_catch_exception_unhandled (struct breakpoint *b)
12179 {
12180   print_mention_exception (ada_catch_exception_unhandled, b);
12181 }
12182
12183 static void
12184 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12185                                           struct ui_file *fp)
12186 {
12187   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12188 }
12189
12190 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12191
12192 /* Virtual table for "catch assert" breakpoints.  */
12193
12194 static void
12195 dtor_catch_assert (struct breakpoint *b)
12196 {
12197   dtor_exception (ada_catch_assert, b);
12198 }
12199
12200 static struct bp_location *
12201 allocate_location_catch_assert (struct breakpoint *self)
12202 {
12203   return allocate_location_exception (ada_catch_assert, self);
12204 }
12205
12206 static void
12207 re_set_catch_assert (struct breakpoint *b)
12208 {
12209   re_set_exception (ada_catch_assert, b);
12210 }
12211
12212 static void
12213 check_status_catch_assert (bpstat bs)
12214 {
12215   check_status_exception (ada_catch_assert, bs);
12216 }
12217
12218 static enum print_stop_action
12219 print_it_catch_assert (bpstat bs)
12220 {
12221   return print_it_exception (ada_catch_assert, bs);
12222 }
12223
12224 static void
12225 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12226 {
12227   print_one_exception (ada_catch_assert, b, last_loc);
12228 }
12229
12230 static void
12231 print_mention_catch_assert (struct breakpoint *b)
12232 {
12233   print_mention_exception (ada_catch_assert, b);
12234 }
12235
12236 static void
12237 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12238 {
12239   print_recreate_exception (ada_catch_assert, b, fp);
12240 }
12241
12242 static struct breakpoint_ops catch_assert_breakpoint_ops;
12243
12244 /* Return a newly allocated copy of the first space-separated token
12245    in ARGSP, and then adjust ARGSP to point immediately after that
12246    token.
12247
12248    Return NULL if ARGPS does not contain any more tokens.  */
12249
12250 static char *
12251 ada_get_next_arg (char **argsp)
12252 {
12253   char *args = *argsp;
12254   char *end;
12255   char *result;
12256
12257   args = skip_spaces (args);
12258   if (args[0] == '\0')
12259     return NULL; /* No more arguments.  */
12260   
12261   /* Find the end of the current argument.  */
12262
12263   end = skip_to_space (args);
12264
12265   /* Adjust ARGSP to point to the start of the next argument.  */
12266
12267   *argsp = end;
12268
12269   /* Make a copy of the current argument and return it.  */
12270
12271   result = xmalloc (end - args + 1);
12272   strncpy (result, args, end - args);
12273   result[end - args] = '\0';
12274   
12275   return result;
12276 }
12277
12278 /* Split the arguments specified in a "catch exception" command.  
12279    Set EX to the appropriate catchpoint type.
12280    Set EXCEP_STRING to the name of the specific exception if
12281    specified by the user.
12282    If a condition is found at the end of the arguments, the condition
12283    expression is stored in COND_STRING (memory must be deallocated
12284    after use).  Otherwise COND_STRING is set to NULL.  */
12285
12286 static void
12287 catch_ada_exception_command_split (char *args,
12288                                    enum ada_exception_catchpoint_kind *ex,
12289                                    char **excep_string,
12290                                    char **cond_string)
12291 {
12292   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12293   char *exception_name;
12294   char *cond = NULL;
12295
12296   exception_name = ada_get_next_arg (&args);
12297   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12298     {
12299       /* This is not an exception name; this is the start of a condition
12300          expression for a catchpoint on all exceptions.  So, "un-get"
12301          this token, and set exception_name to NULL.  */
12302       xfree (exception_name);
12303       exception_name = NULL;
12304       args -= 2;
12305     }
12306   make_cleanup (xfree, exception_name);
12307
12308   /* Check to see if we have a condition.  */
12309
12310   args = skip_spaces (args);
12311   if (strncmp (args, "if", 2) == 0
12312       && (isspace (args[2]) || args[2] == '\0'))
12313     {
12314       args += 2;
12315       args = skip_spaces (args);
12316
12317       if (args[0] == '\0')
12318         error (_("Condition missing after `if' keyword"));
12319       cond = xstrdup (args);
12320       make_cleanup (xfree, cond);
12321
12322       args += strlen (args);
12323     }
12324
12325   /* Check that we do not have any more arguments.  Anything else
12326      is unexpected.  */
12327
12328   if (args[0] != '\0')
12329     error (_("Junk at end of expression"));
12330
12331   discard_cleanups (old_chain);
12332
12333   if (exception_name == NULL)
12334     {
12335       /* Catch all exceptions.  */
12336       *ex = ada_catch_exception;
12337       *excep_string = NULL;
12338     }
12339   else if (strcmp (exception_name, "unhandled") == 0)
12340     {
12341       /* Catch unhandled exceptions.  */
12342       *ex = ada_catch_exception_unhandled;
12343       *excep_string = NULL;
12344     }
12345   else
12346     {
12347       /* Catch a specific exception.  */
12348       *ex = ada_catch_exception;
12349       *excep_string = exception_name;
12350     }
12351   *cond_string = cond;
12352 }
12353
12354 /* Return the name of the symbol on which we should break in order to
12355    implement a catchpoint of the EX kind.  */
12356
12357 static const char *
12358 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12359 {
12360   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12361
12362   gdb_assert (data->exception_info != NULL);
12363
12364   switch (ex)
12365     {
12366       case ada_catch_exception:
12367         return (data->exception_info->catch_exception_sym);
12368         break;
12369       case ada_catch_exception_unhandled:
12370         return (data->exception_info->catch_exception_unhandled_sym);
12371         break;
12372       case ada_catch_assert:
12373         return (data->exception_info->catch_assert_sym);
12374         break;
12375       default:
12376         internal_error (__FILE__, __LINE__,
12377                         _("unexpected catchpoint kind (%d)"), ex);
12378     }
12379 }
12380
12381 /* Return the breakpoint ops "virtual table" used for catchpoints
12382    of the EX kind.  */
12383
12384 static const struct breakpoint_ops *
12385 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12386 {
12387   switch (ex)
12388     {
12389       case ada_catch_exception:
12390         return (&catch_exception_breakpoint_ops);
12391         break;
12392       case ada_catch_exception_unhandled:
12393         return (&catch_exception_unhandled_breakpoint_ops);
12394         break;
12395       case ada_catch_assert:
12396         return (&catch_assert_breakpoint_ops);
12397         break;
12398       default:
12399         internal_error (__FILE__, __LINE__,
12400                         _("unexpected catchpoint kind (%d)"), ex);
12401     }
12402 }
12403
12404 /* Return the condition that will be used to match the current exception
12405    being raised with the exception that the user wants to catch.  This
12406    assumes that this condition is used when the inferior just triggered
12407    an exception catchpoint.
12408    
12409    The string returned is a newly allocated string that needs to be
12410    deallocated later.  */
12411
12412 static char *
12413 ada_exception_catchpoint_cond_string (const char *excep_string)
12414 {
12415   int i;
12416
12417   /* The standard exceptions are a special case.  They are defined in
12418      runtime units that have been compiled without debugging info; if
12419      EXCEP_STRING is the not-fully-qualified name of a standard
12420      exception (e.g. "constraint_error") then, during the evaluation
12421      of the condition expression, the symbol lookup on this name would
12422      *not* return this standard exception.  The catchpoint condition
12423      may then be set only on user-defined exceptions which have the
12424      same not-fully-qualified name (e.g. my_package.constraint_error).
12425
12426      To avoid this unexcepted behavior, these standard exceptions are
12427      systematically prefixed by "standard".  This means that "catch
12428      exception constraint_error" is rewritten into "catch exception
12429      standard.constraint_error".
12430
12431      If an exception named contraint_error is defined in another package of
12432      the inferior program, then the only way to specify this exception as a
12433      breakpoint condition is to use its fully-qualified named:
12434      e.g. my_package.constraint_error.  */
12435
12436   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12437     {
12438       if (strcmp (standard_exc [i], excep_string) == 0)
12439         {
12440           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12441                              excep_string);
12442         }
12443     }
12444   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12445 }
12446
12447 /* Return the symtab_and_line that should be used to insert an exception
12448    catchpoint of the TYPE kind.
12449
12450    EXCEP_STRING should contain the name of a specific exception that
12451    the catchpoint should catch, or NULL otherwise.
12452
12453    ADDR_STRING returns the name of the function where the real
12454    breakpoint that implements the catchpoints is set, depending on the
12455    type of catchpoint we need to create.  */
12456
12457 static struct symtab_and_line
12458 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12459                    char **addr_string, const struct breakpoint_ops **ops)
12460 {
12461   const char *sym_name;
12462   struct symbol *sym;
12463
12464   /* First, find out which exception support info to use.  */
12465   ada_exception_support_info_sniffer ();
12466
12467   /* Then lookup the function on which we will break in order to catch
12468      the Ada exceptions requested by the user.  */
12469   sym_name = ada_exception_sym_name (ex);
12470   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12471
12472   /* We can assume that SYM is not NULL at this stage.  If the symbol
12473      did not exist, ada_exception_support_info_sniffer would have
12474      raised an exception.
12475
12476      Also, ada_exception_support_info_sniffer should have already
12477      verified that SYM is a function symbol.  */
12478   gdb_assert (sym != NULL);
12479   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12480
12481   /* Set ADDR_STRING.  */
12482   *addr_string = xstrdup (sym_name);
12483
12484   /* Set OPS.  */
12485   *ops = ada_exception_breakpoint_ops (ex);
12486
12487   return find_function_start_sal (sym, 1);
12488 }
12489
12490 /* Create an Ada exception catchpoint.
12491
12492    EX_KIND is the kind of exception catchpoint to be created.
12493
12494    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12495    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12496    of the exception to which this catchpoint applies.  When not NULL,
12497    the string must be allocated on the heap, and its deallocation
12498    is no longer the responsibility of the caller.
12499
12500    COND_STRING, if not NULL, is the catchpoint condition.  This string
12501    must be allocated on the heap, and its deallocation is no longer
12502    the responsibility of the caller.
12503
12504    TEMPFLAG, if nonzero, means that the underlying breakpoint
12505    should be temporary.
12506
12507    FROM_TTY is the usual argument passed to all commands implementations.  */
12508
12509 void
12510 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12511                                  enum ada_exception_catchpoint_kind ex_kind,
12512                                  char *excep_string,
12513                                  char *cond_string,
12514                                  int tempflag,
12515                                  int disabled,
12516                                  int from_tty)
12517 {
12518   struct ada_catchpoint *c;
12519   char *addr_string = NULL;
12520   const struct breakpoint_ops *ops = NULL;
12521   struct symtab_and_line sal
12522     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12523
12524   c = XNEW (struct ada_catchpoint);
12525   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12526                                  ops, tempflag, disabled, from_tty);
12527   c->excep_string = excep_string;
12528   create_excep_cond_exprs (c);
12529   if (cond_string != NULL)
12530     set_breakpoint_condition (&c->base, cond_string, from_tty);
12531   install_breakpoint (0, &c->base, 1);
12532 }
12533
12534 /* Implement the "catch exception" command.  */
12535
12536 static void
12537 catch_ada_exception_command (char *arg, int from_tty,
12538                              struct cmd_list_element *command)
12539 {
12540   struct gdbarch *gdbarch = get_current_arch ();
12541   int tempflag;
12542   enum ada_exception_catchpoint_kind ex_kind;
12543   char *excep_string = NULL;
12544   char *cond_string = NULL;
12545
12546   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12547
12548   if (!arg)
12549     arg = "";
12550   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12551                                      &cond_string);
12552   create_ada_exception_catchpoint (gdbarch, ex_kind,
12553                                    excep_string, cond_string,
12554                                    tempflag, 1 /* enabled */,
12555                                    from_tty);
12556 }
12557
12558 /* Split the arguments specified in a "catch assert" command.
12559
12560    ARGS contains the command's arguments (or the empty string if
12561    no arguments were passed).
12562
12563    If ARGS contains a condition, set COND_STRING to that condition
12564    (the memory needs to be deallocated after use).  */
12565
12566 static void
12567 catch_ada_assert_command_split (char *args, char **cond_string)
12568 {
12569   args = skip_spaces (args);
12570
12571   /* Check whether a condition was provided.  */
12572   if (strncmp (args, "if", 2) == 0
12573       && (isspace (args[2]) || args[2] == '\0'))
12574     {
12575       args += 2;
12576       args = skip_spaces (args);
12577       if (args[0] == '\0')
12578         error (_("condition missing after `if' keyword"));
12579       *cond_string = xstrdup (args);
12580     }
12581
12582   /* Otherwise, there should be no other argument at the end of
12583      the command.  */
12584   else if (args[0] != '\0')
12585     error (_("Junk at end of arguments."));
12586 }
12587
12588 /* Implement the "catch assert" command.  */
12589
12590 static void
12591 catch_assert_command (char *arg, int from_tty,
12592                       struct cmd_list_element *command)
12593 {
12594   struct gdbarch *gdbarch = get_current_arch ();
12595   int tempflag;
12596   char *cond_string = NULL;
12597
12598   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12599
12600   if (!arg)
12601     arg = "";
12602   catch_ada_assert_command_split (arg, &cond_string);
12603   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12604                                    NULL, cond_string,
12605                                    tempflag, 1 /* enabled */,
12606                                    from_tty);
12607 }
12608
12609 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12610
12611 static int
12612 ada_is_exception_sym (struct symbol *sym)
12613 {
12614   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12615
12616   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12617           && SYMBOL_CLASS (sym) != LOC_BLOCK
12618           && SYMBOL_CLASS (sym) != LOC_CONST
12619           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12620           && type_name != NULL && strcmp (type_name, "exception") == 0);
12621 }
12622
12623 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12624    Ada exception object.  This matches all exceptions except the ones
12625    defined by the Ada language.  */
12626
12627 static int
12628 ada_is_non_standard_exception_sym (struct symbol *sym)
12629 {
12630   int i;
12631
12632   if (!ada_is_exception_sym (sym))
12633     return 0;
12634
12635   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12636     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12637       return 0;  /* A standard exception.  */
12638
12639   /* Numeric_Error is also a standard exception, so exclude it.
12640      See the STANDARD_EXC description for more details as to why
12641      this exception is not listed in that array.  */
12642   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12643     return 0;
12644
12645   return 1;
12646 }
12647
12648 /* A helper function for qsort, comparing two struct ada_exc_info
12649    objects.
12650
12651    The comparison is determined first by exception name, and then
12652    by exception address.  */
12653
12654 static int
12655 compare_ada_exception_info (const void *a, const void *b)
12656 {
12657   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12658   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12659   int result;
12660
12661   result = strcmp (exc_a->name, exc_b->name);
12662   if (result != 0)
12663     return result;
12664
12665   if (exc_a->addr < exc_b->addr)
12666     return -1;
12667   if (exc_a->addr > exc_b->addr)
12668     return 1;
12669
12670   return 0;
12671 }
12672
12673 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12674    routine, but keeping the first SKIP elements untouched.
12675
12676    All duplicates are also removed.  */
12677
12678 static void
12679 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12680                                       int skip)
12681 {
12682   struct ada_exc_info *to_sort
12683     = VEC_address (ada_exc_info, *exceptions) + skip;
12684   int to_sort_len
12685     = VEC_length (ada_exc_info, *exceptions) - skip;
12686   int i, j;
12687
12688   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12689          compare_ada_exception_info);
12690
12691   for (i = 1, j = 1; i < to_sort_len; i++)
12692     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12693       to_sort[j++] = to_sort[i];
12694   to_sort_len = j;
12695   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12696 }
12697
12698 /* A function intended as the "name_matcher" callback in the struct
12699    quick_symbol_functions' expand_symtabs_matching method.
12700
12701    SEARCH_NAME is the symbol's search name.
12702
12703    If USER_DATA is not NULL, it is a pointer to a regext_t object
12704    used to match the symbol (by natural name).  Otherwise, when USER_DATA
12705    is null, no filtering is performed, and all symbols are a positive
12706    match.  */
12707
12708 static int
12709 ada_exc_search_name_matches (const char *search_name, void *user_data)
12710 {
12711   regex_t *preg = user_data;
12712
12713   if (preg == NULL)
12714     return 1;
12715
12716   /* In Ada, the symbol "search name" is a linkage name, whereas
12717      the regular expression used to do the matching refers to
12718      the natural name.  So match against the decoded name.  */
12719   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12720 }
12721
12722 /* Add all exceptions defined by the Ada standard whose name match
12723    a regular expression.
12724
12725    If PREG is not NULL, then this regexp_t object is used to
12726    perform the symbol name matching.  Otherwise, no name-based
12727    filtering is performed.
12728
12729    EXCEPTIONS is a vector of exceptions to which matching exceptions
12730    gets pushed.  */
12731
12732 static void
12733 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12734 {
12735   int i;
12736
12737   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12738     {
12739       if (preg == NULL
12740           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12741         {
12742           struct bound_minimal_symbol msymbol
12743             = ada_lookup_simple_minsym (standard_exc[i]);
12744
12745           if (msymbol.minsym != NULL)
12746             {
12747               struct ada_exc_info info
12748                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12749
12750               VEC_safe_push (ada_exc_info, *exceptions, &info);
12751             }
12752         }
12753     }
12754 }
12755
12756 /* Add all Ada exceptions defined locally and accessible from the given
12757    FRAME.
12758
12759    If PREG is not NULL, then this regexp_t object is used to
12760    perform the symbol name matching.  Otherwise, no name-based
12761    filtering is performed.
12762
12763    EXCEPTIONS is a vector of exceptions to which matching exceptions
12764    gets pushed.  */
12765
12766 static void
12767 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12768                                VEC(ada_exc_info) **exceptions)
12769 {
12770   const struct block *block = get_frame_block (frame, 0);
12771
12772   while (block != 0)
12773     {
12774       struct block_iterator iter;
12775       struct symbol *sym;
12776
12777       ALL_BLOCK_SYMBOLS (block, iter, sym)
12778         {
12779           switch (SYMBOL_CLASS (sym))
12780             {
12781             case LOC_TYPEDEF:
12782             case LOC_BLOCK:
12783             case LOC_CONST:
12784               break;
12785             default:
12786               if (ada_is_exception_sym (sym))
12787                 {
12788                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12789                                               SYMBOL_VALUE_ADDRESS (sym)};
12790
12791                   VEC_safe_push (ada_exc_info, *exceptions, &info);
12792                 }
12793             }
12794         }
12795       if (BLOCK_FUNCTION (block) != NULL)
12796         break;
12797       block = BLOCK_SUPERBLOCK (block);
12798     }
12799 }
12800
12801 /* Add all exceptions defined globally whose name name match
12802    a regular expression, excluding standard exceptions.
12803
12804    The reason we exclude standard exceptions is that they need
12805    to be handled separately: Standard exceptions are defined inside
12806    a runtime unit which is normally not compiled with debugging info,
12807    and thus usually do not show up in our symbol search.  However,
12808    if the unit was in fact built with debugging info, we need to
12809    exclude them because they would duplicate the entry we found
12810    during the special loop that specifically searches for those
12811    standard exceptions.
12812
12813    If PREG is not NULL, then this regexp_t object is used to
12814    perform the symbol name matching.  Otherwise, no name-based
12815    filtering is performed.
12816
12817    EXCEPTIONS is a vector of exceptions to which matching exceptions
12818    gets pushed.  */
12819
12820 static void
12821 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12822 {
12823   struct objfile *objfile;
12824   struct symtab *s;
12825
12826   expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12827                            VARIABLES_DOMAIN, preg);
12828
12829   ALL_PRIMARY_SYMTABS (objfile, s)
12830     {
12831       const struct blockvector *bv = BLOCKVECTOR (s);
12832       int i;
12833
12834       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12835         {
12836           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12837           struct block_iterator iter;
12838           struct symbol *sym;
12839
12840           ALL_BLOCK_SYMBOLS (b, iter, sym)
12841             if (ada_is_non_standard_exception_sym (sym)
12842                 && (preg == NULL
12843                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12844                                 0, NULL, 0) == 0))
12845               {
12846                 struct ada_exc_info info
12847                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12848
12849                 VEC_safe_push (ada_exc_info, *exceptions, &info);
12850               }
12851         }
12852     }
12853 }
12854
12855 /* Implements ada_exceptions_list with the regular expression passed
12856    as a regex_t, rather than a string.
12857
12858    If not NULL, PREG is used to filter out exceptions whose names
12859    do not match.  Otherwise, all exceptions are listed.  */
12860
12861 static VEC(ada_exc_info) *
12862 ada_exceptions_list_1 (regex_t *preg)
12863 {
12864   VEC(ada_exc_info) *result = NULL;
12865   struct cleanup *old_chain
12866     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12867   int prev_len;
12868
12869   /* First, list the known standard exceptions.  These exceptions
12870      need to be handled separately, as they are usually defined in
12871      runtime units that have been compiled without debugging info.  */
12872
12873   ada_add_standard_exceptions (preg, &result);
12874
12875   /* Next, find all exceptions whose scope is local and accessible
12876      from the currently selected frame.  */
12877
12878   if (has_stack_frames ())
12879     {
12880       prev_len = VEC_length (ada_exc_info, result);
12881       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12882                                      &result);
12883       if (VEC_length (ada_exc_info, result) > prev_len)
12884         sort_remove_dups_ada_exceptions_list (&result, prev_len);
12885     }
12886
12887   /* Add all exceptions whose scope is global.  */
12888
12889   prev_len = VEC_length (ada_exc_info, result);
12890   ada_add_global_exceptions (preg, &result);
12891   if (VEC_length (ada_exc_info, result) > prev_len)
12892     sort_remove_dups_ada_exceptions_list (&result, prev_len);
12893
12894   discard_cleanups (old_chain);
12895   return result;
12896 }
12897
12898 /* Return a vector of ada_exc_info.
12899
12900    If REGEXP is NULL, all exceptions are included in the result.
12901    Otherwise, it should contain a valid regular expression,
12902    and only the exceptions whose names match that regular expression
12903    are included in the result.
12904
12905    The exceptions are sorted in the following order:
12906      - Standard exceptions (defined by the Ada language), in
12907        alphabetical order;
12908      - Exceptions only visible from the current frame, in
12909        alphabetical order;
12910      - Exceptions whose scope is global, in alphabetical order.  */
12911
12912 VEC(ada_exc_info) *
12913 ada_exceptions_list (const char *regexp)
12914 {
12915   VEC(ada_exc_info) *result = NULL;
12916   struct cleanup *old_chain = NULL;
12917   regex_t reg;
12918
12919   if (regexp != NULL)
12920     old_chain = compile_rx_or_error (&reg, regexp,
12921                                      _("invalid regular expression"));
12922
12923   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12924
12925   if (old_chain != NULL)
12926     do_cleanups (old_chain);
12927   return result;
12928 }
12929
12930 /* Implement the "info exceptions" command.  */
12931
12932 static void
12933 info_exceptions_command (char *regexp, int from_tty)
12934 {
12935   VEC(ada_exc_info) *exceptions;
12936   struct cleanup *cleanup;
12937   struct gdbarch *gdbarch = get_current_arch ();
12938   int ix;
12939   struct ada_exc_info *info;
12940
12941   exceptions = ada_exceptions_list (regexp);
12942   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12943
12944   if (regexp != NULL)
12945     printf_filtered
12946       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12947   else
12948     printf_filtered (_("All defined Ada exceptions:\n"));
12949
12950   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12951     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12952
12953   do_cleanups (cleanup);
12954 }
12955
12956                                 /* Operators */
12957 /* Information about operators given special treatment in functions
12958    below.  */
12959 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
12960
12961 #define ADA_OPERATORS \
12962     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12963     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12964     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12965     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12966     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12967     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12968     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12969     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12970     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12971     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12972     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12973     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12974     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
12975     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
12976     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
12977     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
12978     OP_DEFN (OP_OTHERS, 1, 1, 0) \
12979     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
12980     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
12981
12982 static void
12983 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
12984                      int *argsp)
12985 {
12986   switch (exp->elts[pc - 1].opcode)
12987     {
12988     default:
12989       operator_length_standard (exp, pc, oplenp, argsp);
12990       break;
12991
12992 #define OP_DEFN(op, len, args, binop) \
12993     case op: *oplenp = len; *argsp = args; break;
12994       ADA_OPERATORS;
12995 #undef OP_DEFN
12996
12997     case OP_AGGREGATE:
12998       *oplenp = 3;
12999       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13000       break;
13001
13002     case OP_CHOICES:
13003       *oplenp = 3;
13004       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13005       break;
13006     }
13007 }
13008
13009 /* Implementation of the exp_descriptor method operator_check.  */
13010
13011 static int
13012 ada_operator_check (struct expression *exp, int pos,
13013                     int (*objfile_func) (struct objfile *objfile, void *data),
13014                     void *data)
13015 {
13016   const union exp_element *const elts = exp->elts;
13017   struct type *type = NULL;
13018
13019   switch (elts[pos].opcode)
13020     {
13021       case UNOP_IN_RANGE:
13022       case UNOP_QUAL:
13023         type = elts[pos + 1].type;
13024         break;
13025
13026       default:
13027         return operator_check_standard (exp, pos, objfile_func, data);
13028     }
13029
13030   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13031
13032   if (type && TYPE_OBJFILE (type)
13033       && (*objfile_func) (TYPE_OBJFILE (type), data))
13034     return 1;
13035
13036   return 0;
13037 }
13038
13039 static char *
13040 ada_op_name (enum exp_opcode opcode)
13041 {
13042   switch (opcode)
13043     {
13044     default:
13045       return op_name_standard (opcode);
13046
13047 #define OP_DEFN(op, len, args, binop) case op: return #op;
13048       ADA_OPERATORS;
13049 #undef OP_DEFN
13050
13051     case OP_AGGREGATE:
13052       return "OP_AGGREGATE";
13053     case OP_CHOICES:
13054       return "OP_CHOICES";
13055     case OP_NAME:
13056       return "OP_NAME";
13057     }
13058 }
13059
13060 /* As for operator_length, but assumes PC is pointing at the first
13061    element of the operator, and gives meaningful results only for the 
13062    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13063
13064 static void
13065 ada_forward_operator_length (struct expression *exp, int pc,
13066                              int *oplenp, int *argsp)
13067 {
13068   switch (exp->elts[pc].opcode)
13069     {
13070     default:
13071       *oplenp = *argsp = 0;
13072       break;
13073
13074 #define OP_DEFN(op, len, args, binop) \
13075     case op: *oplenp = len; *argsp = args; break;
13076       ADA_OPERATORS;
13077 #undef OP_DEFN
13078
13079     case OP_AGGREGATE:
13080       *oplenp = 3;
13081       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13082       break;
13083
13084     case OP_CHOICES:
13085       *oplenp = 3;
13086       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13087       break;
13088
13089     case OP_STRING:
13090     case OP_NAME:
13091       {
13092         int len = longest_to_int (exp->elts[pc + 1].longconst);
13093
13094         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13095         *argsp = 0;
13096         break;
13097       }
13098     }
13099 }
13100
13101 static int
13102 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13103 {
13104   enum exp_opcode op = exp->elts[elt].opcode;
13105   int oplen, nargs;
13106   int pc = elt;
13107   int i;
13108
13109   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13110
13111   switch (op)
13112     {
13113       /* Ada attributes ('Foo).  */
13114     case OP_ATR_FIRST:
13115     case OP_ATR_LAST:
13116     case OP_ATR_LENGTH:
13117     case OP_ATR_IMAGE:
13118     case OP_ATR_MAX:
13119     case OP_ATR_MIN:
13120     case OP_ATR_MODULUS:
13121     case OP_ATR_POS:
13122     case OP_ATR_SIZE:
13123     case OP_ATR_TAG:
13124     case OP_ATR_VAL:
13125       break;
13126
13127     case UNOP_IN_RANGE:
13128     case UNOP_QUAL:
13129       /* XXX: gdb_sprint_host_address, type_sprint */
13130       fprintf_filtered (stream, _("Type @"));
13131       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13132       fprintf_filtered (stream, " (");
13133       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13134       fprintf_filtered (stream, ")");
13135       break;
13136     case BINOP_IN_BOUNDS:
13137       fprintf_filtered (stream, " (%d)",
13138                         longest_to_int (exp->elts[pc + 2].longconst));
13139       break;
13140     case TERNOP_IN_RANGE:
13141       break;
13142
13143     case OP_AGGREGATE:
13144     case OP_OTHERS:
13145     case OP_DISCRETE_RANGE:
13146     case OP_POSITIONAL:
13147     case OP_CHOICES:
13148       break;
13149
13150     case OP_NAME:
13151     case OP_STRING:
13152       {
13153         char *name = &exp->elts[elt + 2].string;
13154         int len = longest_to_int (exp->elts[elt + 1].longconst);
13155
13156         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13157         break;
13158       }
13159
13160     default:
13161       return dump_subexp_body_standard (exp, stream, elt);
13162     }
13163
13164   elt += oplen;
13165   for (i = 0; i < nargs; i += 1)
13166     elt = dump_subexp (exp, stream, elt);
13167
13168   return elt;
13169 }
13170
13171 /* The Ada extension of print_subexp (q.v.).  */
13172
13173 static void
13174 ada_print_subexp (struct expression *exp, int *pos,
13175                   struct ui_file *stream, enum precedence prec)
13176 {
13177   int oplen, nargs, i;
13178   int pc = *pos;
13179   enum exp_opcode op = exp->elts[pc].opcode;
13180
13181   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13182
13183   *pos += oplen;
13184   switch (op)
13185     {
13186     default:
13187       *pos -= oplen;
13188       print_subexp_standard (exp, pos, stream, prec);
13189       return;
13190
13191     case OP_VAR_VALUE:
13192       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13193       return;
13194
13195     case BINOP_IN_BOUNDS:
13196       /* XXX: sprint_subexp */
13197       print_subexp (exp, pos, stream, PREC_SUFFIX);
13198       fputs_filtered (" in ", stream);
13199       print_subexp (exp, pos, stream, PREC_SUFFIX);
13200       fputs_filtered ("'range", stream);
13201       if (exp->elts[pc + 1].longconst > 1)
13202         fprintf_filtered (stream, "(%ld)",
13203                           (long) exp->elts[pc + 1].longconst);
13204       return;
13205
13206     case TERNOP_IN_RANGE:
13207       if (prec >= PREC_EQUAL)
13208         fputs_filtered ("(", stream);
13209       /* XXX: sprint_subexp */
13210       print_subexp (exp, pos, stream, PREC_SUFFIX);
13211       fputs_filtered (" in ", stream);
13212       print_subexp (exp, pos, stream, PREC_EQUAL);
13213       fputs_filtered (" .. ", stream);
13214       print_subexp (exp, pos, stream, PREC_EQUAL);
13215       if (prec >= PREC_EQUAL)
13216         fputs_filtered (")", stream);
13217       return;
13218
13219     case OP_ATR_FIRST:
13220     case OP_ATR_LAST:
13221     case OP_ATR_LENGTH:
13222     case OP_ATR_IMAGE:
13223     case OP_ATR_MAX:
13224     case OP_ATR_MIN:
13225     case OP_ATR_MODULUS:
13226     case OP_ATR_POS:
13227     case OP_ATR_SIZE:
13228     case OP_ATR_TAG:
13229     case OP_ATR_VAL:
13230       if (exp->elts[*pos].opcode == OP_TYPE)
13231         {
13232           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13233             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13234                            &type_print_raw_options);
13235           *pos += 3;
13236         }
13237       else
13238         print_subexp (exp, pos, stream, PREC_SUFFIX);
13239       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13240       if (nargs > 1)
13241         {
13242           int tem;
13243
13244           for (tem = 1; tem < nargs; tem += 1)
13245             {
13246               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13247               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13248             }
13249           fputs_filtered (")", stream);
13250         }
13251       return;
13252
13253     case UNOP_QUAL:
13254       type_print (exp->elts[pc + 1].type, "", stream, 0);
13255       fputs_filtered ("'(", stream);
13256       print_subexp (exp, pos, stream, PREC_PREFIX);
13257       fputs_filtered (")", stream);
13258       return;
13259
13260     case UNOP_IN_RANGE:
13261       /* XXX: sprint_subexp */
13262       print_subexp (exp, pos, stream, PREC_SUFFIX);
13263       fputs_filtered (" in ", stream);
13264       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13265                      &type_print_raw_options);
13266       return;
13267
13268     case OP_DISCRETE_RANGE:
13269       print_subexp (exp, pos, stream, PREC_SUFFIX);
13270       fputs_filtered ("..", stream);
13271       print_subexp (exp, pos, stream, PREC_SUFFIX);
13272       return;
13273
13274     case OP_OTHERS:
13275       fputs_filtered ("others => ", stream);
13276       print_subexp (exp, pos, stream, PREC_SUFFIX);
13277       return;
13278
13279     case OP_CHOICES:
13280       for (i = 0; i < nargs-1; i += 1)
13281         {
13282           if (i > 0)
13283             fputs_filtered ("|", stream);
13284           print_subexp (exp, pos, stream, PREC_SUFFIX);
13285         }
13286       fputs_filtered (" => ", stream);
13287       print_subexp (exp, pos, stream, PREC_SUFFIX);
13288       return;
13289       
13290     case OP_POSITIONAL:
13291       print_subexp (exp, pos, stream, PREC_SUFFIX);
13292       return;
13293
13294     case OP_AGGREGATE:
13295       fputs_filtered ("(", stream);
13296       for (i = 0; i < nargs; i += 1)
13297         {
13298           if (i > 0)
13299             fputs_filtered (", ", stream);
13300           print_subexp (exp, pos, stream, PREC_SUFFIX);
13301         }
13302       fputs_filtered (")", stream);
13303       return;
13304     }
13305 }
13306
13307 /* Table mapping opcodes into strings for printing operators
13308    and precedences of the operators.  */
13309
13310 static const struct op_print ada_op_print_tab[] = {
13311   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13312   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13313   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13314   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13315   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13316   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13317   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13318   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13319   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13320   {">=", BINOP_GEQ, PREC_ORDER, 0},
13321   {">", BINOP_GTR, PREC_ORDER, 0},
13322   {"<", BINOP_LESS, PREC_ORDER, 0},
13323   {">>", BINOP_RSH, PREC_SHIFT, 0},
13324   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13325   {"+", BINOP_ADD, PREC_ADD, 0},
13326   {"-", BINOP_SUB, PREC_ADD, 0},
13327   {"&", BINOP_CONCAT, PREC_ADD, 0},
13328   {"*", BINOP_MUL, PREC_MUL, 0},
13329   {"/", BINOP_DIV, PREC_MUL, 0},
13330   {"rem", BINOP_REM, PREC_MUL, 0},
13331   {"mod", BINOP_MOD, PREC_MUL, 0},
13332   {"**", BINOP_EXP, PREC_REPEAT, 0},
13333   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13334   {"-", UNOP_NEG, PREC_PREFIX, 0},
13335   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13336   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13337   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13338   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13339   {".all", UNOP_IND, PREC_SUFFIX, 1},
13340   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13341   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13342   {NULL, 0, 0, 0}
13343 };
13344 \f
13345 enum ada_primitive_types {
13346   ada_primitive_type_int,
13347   ada_primitive_type_long,
13348   ada_primitive_type_short,
13349   ada_primitive_type_char,
13350   ada_primitive_type_float,
13351   ada_primitive_type_double,
13352   ada_primitive_type_void,
13353   ada_primitive_type_long_long,
13354   ada_primitive_type_long_double,
13355   ada_primitive_type_natural,
13356   ada_primitive_type_positive,
13357   ada_primitive_type_system_address,
13358   nr_ada_primitive_types
13359 };
13360
13361 static void
13362 ada_language_arch_info (struct gdbarch *gdbarch,
13363                         struct language_arch_info *lai)
13364 {
13365   const struct builtin_type *builtin = builtin_type (gdbarch);
13366
13367   lai->primitive_type_vector
13368     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13369                               struct type *);
13370
13371   lai->primitive_type_vector [ada_primitive_type_int]
13372     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13373                          0, "integer");
13374   lai->primitive_type_vector [ada_primitive_type_long]
13375     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13376                          0, "long_integer");
13377   lai->primitive_type_vector [ada_primitive_type_short]
13378     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13379                          0, "short_integer");
13380   lai->string_char_type
13381     = lai->primitive_type_vector [ada_primitive_type_char]
13382     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13383   lai->primitive_type_vector [ada_primitive_type_float]
13384     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13385                        "float", NULL);
13386   lai->primitive_type_vector [ada_primitive_type_double]
13387     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13388                        "long_float", NULL);
13389   lai->primitive_type_vector [ada_primitive_type_long_long]
13390     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13391                          0, "long_long_integer");
13392   lai->primitive_type_vector [ada_primitive_type_long_double]
13393     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13394                        "long_long_float", NULL);
13395   lai->primitive_type_vector [ada_primitive_type_natural]
13396     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13397                          0, "natural");
13398   lai->primitive_type_vector [ada_primitive_type_positive]
13399     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13400                          0, "positive");
13401   lai->primitive_type_vector [ada_primitive_type_void]
13402     = builtin->builtin_void;
13403
13404   lai->primitive_type_vector [ada_primitive_type_system_address]
13405     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13406   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13407     = "system__address";
13408
13409   lai->bool_type_symbol = NULL;
13410   lai->bool_type_default = builtin->builtin_bool;
13411 }
13412 \f
13413                                 /* Language vector */
13414
13415 /* Not really used, but needed in the ada_language_defn.  */
13416
13417 static void
13418 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13419 {
13420   ada_emit_char (c, type, stream, quoter, 1);
13421 }
13422
13423 static int
13424 parse (struct parser_state *ps)
13425 {
13426   warnings_issued = 0;
13427   return ada_parse (ps);
13428 }
13429
13430 static const struct exp_descriptor ada_exp_descriptor = {
13431   ada_print_subexp,
13432   ada_operator_length,
13433   ada_operator_check,
13434   ada_op_name,
13435   ada_dump_subexp_body,
13436   ada_evaluate_subexp
13437 };
13438
13439 /* Implement the "la_get_symbol_name_cmp" language_defn method
13440    for Ada.  */
13441
13442 static symbol_name_cmp_ftype
13443 ada_get_symbol_name_cmp (const char *lookup_name)
13444 {
13445   if (should_use_wild_match (lookup_name))
13446     return wild_match;
13447   else
13448     return compare_names;
13449 }
13450
13451 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13452
13453 static struct value *
13454 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13455 {
13456   const struct block *frame_block = NULL;
13457   struct symbol *renaming_sym = NULL;
13458
13459   /* The only case where default_read_var_value is not sufficient
13460      is when VAR is a renaming...  */
13461   if (frame)
13462     frame_block = get_frame_block (frame, NULL);
13463   if (frame_block)
13464     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13465   if (renaming_sym != NULL)
13466     return ada_read_renaming_var_value (renaming_sym, frame_block);
13467
13468   /* This is a typical case where we expect the default_read_var_value
13469      function to work.  */
13470   return default_read_var_value (var, frame);
13471 }
13472
13473 const struct language_defn ada_language_defn = {
13474   "ada",                        /* Language name */
13475   "Ada",
13476   language_ada,
13477   range_check_off,
13478   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13479                                    that's not quite what this means.  */
13480   array_row_major,
13481   macro_expansion_no,
13482   &ada_exp_descriptor,
13483   parse,
13484   ada_error,
13485   resolve,
13486   ada_printchar,                /* Print a character constant */
13487   ada_printstr,                 /* Function to print string constant */
13488   emit_char,                    /* Function to print single char (not used) */
13489   ada_print_type,               /* Print a type using appropriate syntax */
13490   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13491   ada_val_print,                /* Print a value using appropriate syntax */
13492   ada_value_print,              /* Print a top-level value */
13493   ada_read_var_value,           /* la_read_var_value */
13494   NULL,                         /* Language specific skip_trampoline */
13495   NULL,                         /* name_of_this */
13496   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13497   basic_lookup_transparent_type,        /* lookup_transparent_type */
13498   ada_la_decode,                /* Language specific symbol demangler */
13499   NULL,                         /* Language specific
13500                                    class_name_from_physname */
13501   ada_op_print_tab,             /* expression operators for printing */
13502   0,                            /* c-style arrays */
13503   1,                            /* String lower bound */
13504   ada_get_gdb_completer_word_break_characters,
13505   ada_make_symbol_completion_list,
13506   ada_language_arch_info,
13507   ada_print_array_index,
13508   default_pass_by_reference,
13509   c_get_string,
13510   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
13511   ada_iterate_over_symbols,
13512   &ada_varobj_ops,
13513   LANG_MAGIC
13514 };
13515
13516 /* Provide a prototype to silence -Wmissing-prototypes.  */
13517 extern initialize_file_ftype _initialize_ada_language;
13518
13519 /* Command-list for the "set/show ada" prefix command.  */
13520 static struct cmd_list_element *set_ada_list;
13521 static struct cmd_list_element *show_ada_list;
13522
13523 /* Implement the "set ada" prefix command.  */
13524
13525 static void
13526 set_ada_command (char *arg, int from_tty)
13527 {
13528   printf_unfiltered (_(\
13529 "\"set ada\" must be followed by the name of a setting.\n"));
13530   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
13531 }
13532
13533 /* Implement the "show ada" prefix command.  */
13534
13535 static void
13536 show_ada_command (char *args, int from_tty)
13537 {
13538   cmd_show_list (show_ada_list, from_tty, "");
13539 }
13540
13541 static void
13542 initialize_ada_catchpoint_ops (void)
13543 {
13544   struct breakpoint_ops *ops;
13545
13546   initialize_breakpoint_ops ();
13547
13548   ops = &catch_exception_breakpoint_ops;
13549   *ops = bkpt_breakpoint_ops;
13550   ops->dtor = dtor_catch_exception;
13551   ops->allocate_location = allocate_location_catch_exception;
13552   ops->re_set = re_set_catch_exception;
13553   ops->check_status = check_status_catch_exception;
13554   ops->print_it = print_it_catch_exception;
13555   ops->print_one = print_one_catch_exception;
13556   ops->print_mention = print_mention_catch_exception;
13557   ops->print_recreate = print_recreate_catch_exception;
13558
13559   ops = &catch_exception_unhandled_breakpoint_ops;
13560   *ops = bkpt_breakpoint_ops;
13561   ops->dtor = dtor_catch_exception_unhandled;
13562   ops->allocate_location = allocate_location_catch_exception_unhandled;
13563   ops->re_set = re_set_catch_exception_unhandled;
13564   ops->check_status = check_status_catch_exception_unhandled;
13565   ops->print_it = print_it_catch_exception_unhandled;
13566   ops->print_one = print_one_catch_exception_unhandled;
13567   ops->print_mention = print_mention_catch_exception_unhandled;
13568   ops->print_recreate = print_recreate_catch_exception_unhandled;
13569
13570   ops = &catch_assert_breakpoint_ops;
13571   *ops = bkpt_breakpoint_ops;
13572   ops->dtor = dtor_catch_assert;
13573   ops->allocate_location = allocate_location_catch_assert;
13574   ops->re_set = re_set_catch_assert;
13575   ops->check_status = check_status_catch_assert;
13576   ops->print_it = print_it_catch_assert;
13577   ops->print_one = print_one_catch_assert;
13578   ops->print_mention = print_mention_catch_assert;
13579   ops->print_recreate = print_recreate_catch_assert;
13580 }
13581
13582 /* This module's 'new_objfile' observer.  */
13583
13584 static void
13585 ada_new_objfile_observer (struct objfile *objfile)
13586 {
13587   ada_clear_symbol_cache ();
13588 }
13589
13590 /* This module's 'free_objfile' observer.  */
13591
13592 static void
13593 ada_free_objfile_observer (struct objfile *objfile)
13594 {
13595   ada_clear_symbol_cache ();
13596 }
13597
13598 void
13599 _initialize_ada_language (void)
13600 {
13601   add_language (&ada_language_defn);
13602
13603   initialize_ada_catchpoint_ops ();
13604
13605   add_prefix_cmd ("ada", no_class, set_ada_command,
13606                   _("Prefix command for changing Ada-specfic settings"),
13607                   &set_ada_list, "set ada ", 0, &setlist);
13608
13609   add_prefix_cmd ("ada", no_class, show_ada_command,
13610                   _("Generic command for showing Ada-specific settings."),
13611                   &show_ada_list, "show ada ", 0, &showlist);
13612
13613   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13614                            &trust_pad_over_xvs, _("\
13615 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13616 Show whether an optimization trusting PAD types over XVS types is activated"),
13617                            _("\
13618 This is related to the encoding used by the GNAT compiler.  The debugger\n\
13619 should normally trust the contents of PAD types, but certain older versions\n\
13620 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13621 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
13622 work around this bug.  It is always safe to turn this option \"off\", but\n\
13623 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13624 this option to \"off\" unless necessary."),
13625                             NULL, NULL, &set_ada_list, &show_ada_list);
13626
13627   add_catch_command ("exception", _("\
13628 Catch Ada exceptions, when raised.\n\
13629 With an argument, catch only exceptions with the given name."),
13630                      catch_ada_exception_command,
13631                      NULL,
13632                      CATCH_PERMANENT,
13633                      CATCH_TEMPORARY);
13634   add_catch_command ("assert", _("\
13635 Catch failed Ada assertions, when raised.\n\
13636 With an argument, catch only exceptions with the given name."),
13637                      catch_assert_command,
13638                      NULL,
13639                      CATCH_PERMANENT,
13640                      CATCH_TEMPORARY);
13641
13642   varsize_limit = 65536;
13643
13644   add_info ("exceptions", info_exceptions_command,
13645             _("\
13646 List all Ada exception names.\n\
13647 If a regular expression is passed as an argument, only those matching\n\
13648 the regular expression are listed."));
13649
13650   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13651                   _("Set Ada maintenance-related variables."),
13652                   &maint_set_ada_cmdlist, "maintenance set ada ",
13653                   0/*allow-unknown*/, &maintenance_set_cmdlist);
13654
13655   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13656                   _("Show Ada maintenance-related variables"),
13657                   &maint_show_ada_cmdlist, "maintenance show ada ",
13658                   0/*allow-unknown*/, &maintenance_show_cmdlist);
13659
13660   add_setshow_boolean_cmd
13661     ("ignore-descriptive-types", class_maintenance,
13662      &ada_ignore_descriptive_types_p,
13663      _("Set whether descriptive types generated by GNAT should be ignored."),
13664      _("Show whether descriptive types generated by GNAT should be ignored."),
13665      _("\
13666 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13667 DWARF attribute."),
13668      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13669
13670   obstack_init (&symbol_list_obstack);
13671
13672   decoded_names_store = htab_create_alloc
13673     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13674      NULL, xcalloc, xfree);
13675
13676   /* The ada-lang observers.  */
13677   observer_attach_new_objfile (ada_new_objfile_observer);
13678   observer_attach_free_objfile (ada_free_objfile_observer);
13679   observer_attach_inferior_exit (ada_inferior_exit);
13680
13681   /* Setup various context-specific data.  */
13682   ada_inferior_data
13683     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13684   ada_pspace_data_handle
13685     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
13686 }