fix memory errors with demangled name hash
[platform/upstream/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3    Copyright (C) 1992-2014 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20
21 #include "defs.h"
22 #include <stdio.h>
23 #include <string.h>
24 #include <ctype.h>
25 #include <stdarg.h>
26 #include "demangle.h"
27 #include "gdb_regex.h"
28 #include "frame.h"
29 #include "symtab.h"
30 #include "gdbtypes.h"
31 #include "gdbcmd.h"
32 #include "expression.h"
33 #include "parser-defs.h"
34 #include "language.h"
35 #include "varobj.h"
36 #include "c-lang.h"
37 #include "inferior.h"
38 #include "symfile.h"
39 #include "objfiles.h"
40 #include "breakpoint.h"
41 #include "gdbcore.h"
42 #include "hashtab.h"
43 #include "gdb_obstack.h"
44 #include "ada-lang.h"
45 #include "completer.h"
46 #include <sys/stat.h>
47 #include "ui-out.h"
48 #include "block.h"
49 #include "infcall.h"
50 #include "dictionary.h"
51 #include "exceptions.h"
52 #include "annotate.h"
53 #include "valprint.h"
54 #include "source.h"
55 #include "observer.h"
56 #include "vec.h"
57 #include "stack.h"
58 #include "gdb_vecs.h"
59 #include "typeprint.h"
60
61 #include "psymtab.h"
62 #include "value.h"
63 #include "mi/mi-common.h"
64 #include "arch-utils.h"
65 #include "cli/cli-utils.h"
66
67 /* Define whether or not the C operator '/' truncates towards zero for
68    differently signed operands (truncation direction is undefined in C).
69    Copied from valarith.c.  */
70
71 #ifndef TRUNCATION_TOWARDS_ZERO
72 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
73 #endif
74
75 static struct type *desc_base_type (struct type *);
76
77 static struct type *desc_bounds_type (struct type *);
78
79 static struct value *desc_bounds (struct value *);
80
81 static int fat_pntr_bounds_bitpos (struct type *);
82
83 static int fat_pntr_bounds_bitsize (struct type *);
84
85 static struct type *desc_data_target_type (struct type *);
86
87 static struct value *desc_data (struct value *);
88
89 static int fat_pntr_data_bitpos (struct type *);
90
91 static int fat_pntr_data_bitsize (struct type *);
92
93 static struct value *desc_one_bound (struct value *, int, int);
94
95 static int desc_bound_bitpos (struct type *, int, int);
96
97 static int desc_bound_bitsize (struct type *, int, int);
98
99 static struct type *desc_index_type (struct type *, int);
100
101 static int desc_arity (struct type *);
102
103 static int ada_type_match (struct type *, struct type *, int);
104
105 static int ada_args_match (struct symbol *, struct value **, int);
106
107 static int full_match (const char *, const char *);
108
109 static struct value *make_array_descriptor (struct type *, struct value *);
110
111 static void ada_add_block_symbols (struct obstack *,
112                                    const struct block *, const char *,
113                                    domain_enum, struct objfile *, int);
114
115 static int is_nonfunction (struct ada_symbol_info *, int);
116
117 static void add_defn_to_vec (struct obstack *, struct symbol *,
118                              const struct block *);
119
120 static int num_defns_collected (struct obstack *);
121
122 static struct ada_symbol_info *defns_collected (struct obstack *, int);
123
124 static struct value *resolve_subexp (struct expression **, int *, int,
125                                      struct type *);
126
127 static void replace_operator_with_call (struct expression **, int, int, int,
128                                         struct symbol *, const struct block *);
129
130 static int possible_user_operator_p (enum exp_opcode, struct value **);
131
132 static char *ada_op_name (enum exp_opcode);
133
134 static const char *ada_decoded_op_name (enum exp_opcode);
135
136 static int numeric_type_p (struct type *);
137
138 static int integer_type_p (struct type *);
139
140 static int scalar_type_p (struct type *);
141
142 static int discrete_type_p (struct type *);
143
144 static enum ada_renaming_category parse_old_style_renaming (struct type *,
145                                                             const char **,
146                                                             int *,
147                                                             const char **);
148
149 static struct symbol *find_old_style_renaming_symbol (const char *,
150                                                       const struct block *);
151
152 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
153                                                 int, int, int *);
154
155 static struct value *evaluate_subexp_type (struct expression *, int *);
156
157 static struct type *ada_find_parallel_type_with_name (struct type *,
158                                                       const char *);
159
160 static int is_dynamic_field (struct type *, int);
161
162 static struct type *to_fixed_variant_branch_type (struct type *,
163                                                   const gdb_byte *,
164                                                   CORE_ADDR, struct value *);
165
166 static struct type *to_fixed_array_type (struct type *, struct value *, int);
167
168 static struct type *to_fixed_range_type (struct type *, struct value *);
169
170 static struct type *to_static_fixed_type (struct type *);
171 static struct type *static_unwrap_type (struct type *type);
172
173 static struct value *unwrap_value (struct value *);
174
175 static struct type *constrained_packed_array_type (struct type *, long *);
176
177 static struct type *decode_constrained_packed_array_type (struct type *);
178
179 static long decode_packed_array_bitsize (struct type *);
180
181 static struct value *decode_constrained_packed_array (struct value *);
182
183 static int ada_is_packed_array_type  (struct type *);
184
185 static int ada_is_unconstrained_packed_array_type (struct type *);
186
187 static struct value *value_subscript_packed (struct value *, int,
188                                              struct value **);
189
190 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
191
192 static struct value *coerce_unspec_val_to_type (struct value *,
193                                                 struct type *);
194
195 static struct value *get_var_value (char *, char *);
196
197 static int lesseq_defined_than (struct symbol *, struct symbol *);
198
199 static int equiv_types (struct type *, struct type *);
200
201 static int is_name_suffix (const char *);
202
203 static int advance_wild_match (const char **, const char *, int);
204
205 static int wild_match (const char *, const char *);
206
207 static struct value *ada_coerce_ref (struct value *);
208
209 static LONGEST pos_atr (struct value *);
210
211 static struct value *value_pos_atr (struct type *, struct value *);
212
213 static struct value *value_val_atr (struct type *, struct value *);
214
215 static struct symbol *standard_lookup (const char *, const struct block *,
216                                        domain_enum);
217
218 static struct value *ada_search_struct_field (char *, struct value *, int,
219                                               struct type *);
220
221 static struct value *ada_value_primitive_field (struct value *, int, int,
222                                                 struct type *);
223
224 static int find_struct_field (const char *, struct type *, int,
225                               struct type **, int *, int *, int *, int *);
226
227 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
228                                                 struct value *);
229
230 static int ada_resolve_function (struct ada_symbol_info *, int,
231                                  struct value **, int, const char *,
232                                  struct type *);
233
234 static int ada_is_direct_array_type (struct type *);
235
236 static void ada_language_arch_info (struct gdbarch *,
237                                     struct language_arch_info *);
238
239 static void check_size (const struct type *);
240
241 static struct value *ada_index_struct_field (int, struct value *, int,
242                                              struct type *);
243
244 static struct value *assign_aggregate (struct value *, struct value *, 
245                                        struct expression *,
246                                        int *, enum noside);
247
248 static void aggregate_assign_from_choices (struct value *, struct value *, 
249                                            struct expression *,
250                                            int *, LONGEST *, int *,
251                                            int, LONGEST, LONGEST);
252
253 static void aggregate_assign_positional (struct value *, struct value *,
254                                          struct expression *,
255                                          int *, LONGEST *, int *, int,
256                                          LONGEST, LONGEST);
257
258
259 static void aggregate_assign_others (struct value *, struct value *,
260                                      struct expression *,
261                                      int *, LONGEST *, int, LONGEST, LONGEST);
262
263
264 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
265
266
267 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
268                                           int *, enum noside);
269
270 static void ada_forward_operator_length (struct expression *, int, int *,
271                                          int *);
272
273 static struct type *ada_find_any_type (const char *name);
274 \f
275
276 /* The result of a symbol lookup to be stored in our symbol cache.  */
277
278 struct cache_entry
279 {
280   /* The name used to perform the lookup.  */
281   const char *name;
282   /* The namespace used during the lookup.  */
283   domain_enum namespace;
284   /* The symbol returned by the lookup, or NULL if no matching symbol
285      was found.  */
286   struct symbol *sym;
287   /* The block where the symbol was found, or NULL if no matching
288      symbol was found.  */
289   const struct block *block;
290   /* A pointer to the next entry with the same hash.  */
291   struct cache_entry *next;
292 };
293
294 /* The Ada symbol cache, used to store the result of Ada-mode symbol
295    lookups in the course of executing the user's commands.
296
297    The cache is implemented using a simple, fixed-sized hash.
298    The size is fixed on the grounds that there are not likely to be
299    all that many symbols looked up during any given session, regardless
300    of the size of the symbol table.  If we decide to go to a resizable
301    table, let's just use the stuff from libiberty instead.  */
302
303 #define HASH_SIZE 1009
304
305 struct ada_symbol_cache
306 {
307   /* An obstack used to store the entries in our cache.  */
308   struct obstack cache_space;
309
310   /* The root of the hash table used to implement our symbol cache.  */
311   struct cache_entry *root[HASH_SIZE];
312 };
313
314 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
315
316 /* Maximum-sized dynamic type.  */
317 static unsigned int varsize_limit;
318
319 /* FIXME: brobecker/2003-09-17: No longer a const because it is
320    returned by a function that does not return a const char *.  */
321 static char *ada_completer_word_break_characters =
322 #ifdef VMS
323   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
324 #else
325   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
326 #endif
327
328 /* The name of the symbol to use to get the name of the main subprogram.  */
329 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
330   = "__gnat_ada_main_program_name";
331
332 /* Limit on the number of warnings to raise per expression evaluation.  */
333 static int warning_limit = 2;
334
335 /* Number of warning messages issued; reset to 0 by cleanups after
336    expression evaluation.  */
337 static int warnings_issued = 0;
338
339 static const char *known_runtime_file_name_patterns[] = {
340   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
341 };
342
343 static const char *known_auxiliary_function_name_patterns[] = {
344   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
345 };
346
347 /* Space for allocating results of ada_lookup_symbol_list.  */
348 static struct obstack symbol_list_obstack;
349
350 /* Maintenance-related settings for this module.  */
351
352 static struct cmd_list_element *maint_set_ada_cmdlist;
353 static struct cmd_list_element *maint_show_ada_cmdlist;
354
355 /* Implement the "maintenance set ada" (prefix) command.  */
356
357 static void
358 maint_set_ada_cmd (char *args, int from_tty)
359 {
360   help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
361              gdb_stdout);
362 }
363
364 /* Implement the "maintenance show ada" (prefix) command.  */
365
366 static void
367 maint_show_ada_cmd (char *args, int from_tty)
368 {
369   cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
370 }
371
372 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
373
374 static int ada_ignore_descriptive_types_p = 0;
375
376                         /* Inferior-specific data.  */
377
378 /* Per-inferior data for this module.  */
379
380 struct ada_inferior_data
381 {
382   /* The ada__tags__type_specific_data type, which is used when decoding
383      tagged types.  With older versions of GNAT, this type was directly
384      accessible through a component ("tsd") in the object tag.  But this
385      is no longer the case, so we cache it for each inferior.  */
386   struct type *tsd_type;
387
388   /* The exception_support_info data.  This data is used to determine
389      how to implement support for Ada exception catchpoints in a given
390      inferior.  */
391   const struct exception_support_info *exception_info;
392 };
393
394 /* Our key to this module's inferior data.  */
395 static const struct inferior_data *ada_inferior_data;
396
397 /* A cleanup routine for our inferior data.  */
398 static void
399 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
400 {
401   struct ada_inferior_data *data;
402
403   data = inferior_data (inf, ada_inferior_data);
404   if (data != NULL)
405     xfree (data);
406 }
407
408 /* Return our inferior data for the given inferior (INF).
409
410    This function always returns a valid pointer to an allocated
411    ada_inferior_data structure.  If INF's inferior data has not
412    been previously set, this functions creates a new one with all
413    fields set to zero, sets INF's inferior to it, and then returns
414    a pointer to that newly allocated ada_inferior_data.  */
415
416 static struct ada_inferior_data *
417 get_ada_inferior_data (struct inferior *inf)
418 {
419   struct ada_inferior_data *data;
420
421   data = inferior_data (inf, ada_inferior_data);
422   if (data == NULL)
423     {
424       data = XCNEW (struct ada_inferior_data);
425       set_inferior_data (inf, ada_inferior_data, data);
426     }
427
428   return data;
429 }
430
431 /* Perform all necessary cleanups regarding our module's inferior data
432    that is required after the inferior INF just exited.  */
433
434 static void
435 ada_inferior_exit (struct inferior *inf)
436 {
437   ada_inferior_data_cleanup (inf, NULL);
438   set_inferior_data (inf, ada_inferior_data, NULL);
439 }
440
441
442                         /* program-space-specific data.  */
443
444 /* This module's per-program-space data.  */
445 struct ada_pspace_data
446 {
447   /* The Ada symbol cache.  */
448   struct ada_symbol_cache *sym_cache;
449 };
450
451 /* Key to our per-program-space data.  */
452 static const struct program_space_data *ada_pspace_data_handle;
453
454 /* Return this module's data for the given program space (PSPACE).
455    If not is found, add a zero'ed one now.
456
457    This function always returns a valid object.  */
458
459 static struct ada_pspace_data *
460 get_ada_pspace_data (struct program_space *pspace)
461 {
462   struct ada_pspace_data *data;
463
464   data = program_space_data (pspace, ada_pspace_data_handle);
465   if (data == NULL)
466     {
467       data = XCNEW (struct ada_pspace_data);
468       set_program_space_data (pspace, ada_pspace_data_handle, data);
469     }
470
471   return data;
472 }
473
474 /* The cleanup callback for this module's per-program-space data.  */
475
476 static void
477 ada_pspace_data_cleanup (struct program_space *pspace, void *data)
478 {
479   struct ada_pspace_data *pspace_data = data;
480
481   if (pspace_data->sym_cache != NULL)
482     ada_free_symbol_cache (pspace_data->sym_cache);
483   xfree (pspace_data);
484 }
485
486                         /* Utilities */
487
488 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
489    all typedef layers have been peeled.  Otherwise, return TYPE.
490
491    Normally, we really expect a typedef type to only have 1 typedef layer.
492    In other words, we really expect the target type of a typedef type to be
493    a non-typedef type.  This is particularly true for Ada units, because
494    the language does not have a typedef vs not-typedef distinction.
495    In that respect, the Ada compiler has been trying to eliminate as many
496    typedef definitions in the debugging information, since they generally
497    do not bring any extra information (we still use typedef under certain
498    circumstances related mostly to the GNAT encoding).
499
500    Unfortunately, we have seen situations where the debugging information
501    generated by the compiler leads to such multiple typedef layers.  For
502    instance, consider the following example with stabs:
503
504      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
505      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
506
507    This is an error in the debugging information which causes type
508    pck__float_array___XUP to be defined twice, and the second time,
509    it is defined as a typedef of a typedef.
510
511    This is on the fringe of legality as far as debugging information is
512    concerned, and certainly unexpected.  But it is easy to handle these
513    situations correctly, so we can afford to be lenient in this case.  */
514
515 static struct type *
516 ada_typedef_target_type (struct type *type)
517 {
518   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
519     type = TYPE_TARGET_TYPE (type);
520   return type;
521 }
522
523 /* Given DECODED_NAME a string holding a symbol name in its
524    decoded form (ie using the Ada dotted notation), returns
525    its unqualified name.  */
526
527 static const char *
528 ada_unqualified_name (const char *decoded_name)
529 {
530   const char *result = strrchr (decoded_name, '.');
531
532   if (result != NULL)
533     result++;                   /* Skip the dot...  */
534   else
535     result = decoded_name;
536
537   return result;
538 }
539
540 /* Return a string starting with '<', followed by STR, and '>'.
541    The result is good until the next call.  */
542
543 static char *
544 add_angle_brackets (const char *str)
545 {
546   static char *result = NULL;
547
548   xfree (result);
549   result = xstrprintf ("<%s>", str);
550   return result;
551 }
552
553 static char *
554 ada_get_gdb_completer_word_break_characters (void)
555 {
556   return ada_completer_word_break_characters;
557 }
558
559 /* Print an array element index using the Ada syntax.  */
560
561 static void
562 ada_print_array_index (struct value *index_value, struct ui_file *stream,
563                        const struct value_print_options *options)
564 {
565   LA_VALUE_PRINT (index_value, stream, options);
566   fprintf_filtered (stream, " => ");
567 }
568
569 /* Assuming VECT points to an array of *SIZE objects of size
570    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
571    updating *SIZE as necessary and returning the (new) array.  */
572
573 void *
574 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
575 {
576   if (*size < min_size)
577     {
578       *size *= 2;
579       if (*size < min_size)
580         *size = min_size;
581       vect = xrealloc (vect, *size * element_size);
582     }
583   return vect;
584 }
585
586 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
587    suffix of FIELD_NAME beginning "___".  */
588
589 static int
590 field_name_match (const char *field_name, const char *target)
591 {
592   int len = strlen (target);
593
594   return
595     (strncmp (field_name, target, len) == 0
596      && (field_name[len] == '\0'
597          || (strncmp (field_name + len, "___", 3) == 0
598              && strcmp (field_name + strlen (field_name) - 6,
599                         "___XVN") != 0)));
600 }
601
602
603 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
604    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
605    and return its index.  This function also handles fields whose name
606    have ___ suffixes because the compiler sometimes alters their name
607    by adding such a suffix to represent fields with certain constraints.
608    If the field could not be found, return a negative number if
609    MAYBE_MISSING is set.  Otherwise raise an error.  */
610
611 int
612 ada_get_field_index (const struct type *type, const char *field_name,
613                      int maybe_missing)
614 {
615   int fieldno;
616   struct type *struct_type = check_typedef ((struct type *) type);
617
618   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
619     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
620       return fieldno;
621
622   if (!maybe_missing)
623     error (_("Unable to find field %s in struct %s.  Aborting"),
624            field_name, TYPE_NAME (struct_type));
625
626   return -1;
627 }
628
629 /* The length of the prefix of NAME prior to any "___" suffix.  */
630
631 int
632 ada_name_prefix_len (const char *name)
633 {
634   if (name == NULL)
635     return 0;
636   else
637     {
638       const char *p = strstr (name, "___");
639
640       if (p == NULL)
641         return strlen (name);
642       else
643         return p - name;
644     }
645 }
646
647 /* Return non-zero if SUFFIX is a suffix of STR.
648    Return zero if STR is null.  */
649
650 static int
651 is_suffix (const char *str, const char *suffix)
652 {
653   int len1, len2;
654
655   if (str == NULL)
656     return 0;
657   len1 = strlen (str);
658   len2 = strlen (suffix);
659   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
660 }
661
662 /* The contents of value VAL, treated as a value of type TYPE.  The
663    result is an lval in memory if VAL is.  */
664
665 static struct value *
666 coerce_unspec_val_to_type (struct value *val, struct type *type)
667 {
668   type = ada_check_typedef (type);
669   if (value_type (val) == type)
670     return val;
671   else
672     {
673       struct value *result;
674
675       /* Make sure that the object size is not unreasonable before
676          trying to allocate some memory for it.  */
677       check_size (type);
678
679       if (value_lazy (val)
680           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
681         result = allocate_value_lazy (type);
682       else
683         {
684           result = allocate_value (type);
685           memcpy (value_contents_raw (result), value_contents (val),
686                   TYPE_LENGTH (type));
687         }
688       set_value_component_location (result, val);
689       set_value_bitsize (result, value_bitsize (val));
690       set_value_bitpos (result, value_bitpos (val));
691       set_value_address (result, value_address (val));
692       set_value_optimized_out (result, value_optimized_out_const (val));
693       return result;
694     }
695 }
696
697 static const gdb_byte *
698 cond_offset_host (const gdb_byte *valaddr, long offset)
699 {
700   if (valaddr == NULL)
701     return NULL;
702   else
703     return valaddr + offset;
704 }
705
706 static CORE_ADDR
707 cond_offset_target (CORE_ADDR address, long offset)
708 {
709   if (address == 0)
710     return 0;
711   else
712     return address + offset;
713 }
714
715 /* Issue a warning (as for the definition of warning in utils.c, but
716    with exactly one argument rather than ...), unless the limit on the
717    number of warnings has passed during the evaluation of the current
718    expression.  */
719
720 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
721    provided by "complaint".  */
722 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
723
724 static void
725 lim_warning (const char *format, ...)
726 {
727   va_list args;
728
729   va_start (args, format);
730   warnings_issued += 1;
731   if (warnings_issued <= warning_limit)
732     vwarning (format, args);
733
734   va_end (args);
735 }
736
737 /* Issue an error if the size of an object of type T is unreasonable,
738    i.e. if it would be a bad idea to allocate a value of this type in
739    GDB.  */
740
741 static void
742 check_size (const struct type *type)
743 {
744   if (TYPE_LENGTH (type) > varsize_limit)
745     error (_("object size is larger than varsize-limit"));
746 }
747
748 /* Maximum value of a SIZE-byte signed integer type.  */
749 static LONGEST
750 max_of_size (int size)
751 {
752   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
753
754   return top_bit | (top_bit - 1);
755 }
756
757 /* Minimum value of a SIZE-byte signed integer type.  */
758 static LONGEST
759 min_of_size (int size)
760 {
761   return -max_of_size (size) - 1;
762 }
763
764 /* Maximum value of a SIZE-byte unsigned integer type.  */
765 static ULONGEST
766 umax_of_size (int size)
767 {
768   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
769
770   return top_bit | (top_bit - 1);
771 }
772
773 /* Maximum value of integral type T, as a signed quantity.  */
774 static LONGEST
775 max_of_type (struct type *t)
776 {
777   if (TYPE_UNSIGNED (t))
778     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
779   else
780     return max_of_size (TYPE_LENGTH (t));
781 }
782
783 /* Minimum value of integral type T, as a signed quantity.  */
784 static LONGEST
785 min_of_type (struct type *t)
786 {
787   if (TYPE_UNSIGNED (t)) 
788     return 0;
789   else
790     return min_of_size (TYPE_LENGTH (t));
791 }
792
793 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
794 LONGEST
795 ada_discrete_type_high_bound (struct type *type)
796 {
797   type = resolve_dynamic_type (type, 0);
798   switch (TYPE_CODE (type))
799     {
800     case TYPE_CODE_RANGE:
801       return TYPE_HIGH_BOUND (type);
802     case TYPE_CODE_ENUM:
803       return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
804     case TYPE_CODE_BOOL:
805       return 1;
806     case TYPE_CODE_CHAR:
807     case TYPE_CODE_INT:
808       return max_of_type (type);
809     default:
810       error (_("Unexpected type in ada_discrete_type_high_bound."));
811     }
812 }
813
814 /* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
815 LONGEST
816 ada_discrete_type_low_bound (struct type *type)
817 {
818   type = resolve_dynamic_type (type, 0);
819   switch (TYPE_CODE (type))
820     {
821     case TYPE_CODE_RANGE:
822       return TYPE_LOW_BOUND (type);
823     case TYPE_CODE_ENUM:
824       return TYPE_FIELD_ENUMVAL (type, 0);
825     case TYPE_CODE_BOOL:
826       return 0;
827     case TYPE_CODE_CHAR:
828     case TYPE_CODE_INT:
829       return min_of_type (type);
830     default:
831       error (_("Unexpected type in ada_discrete_type_low_bound."));
832     }
833 }
834
835 /* The identity on non-range types.  For range types, the underlying
836    non-range scalar type.  */
837
838 static struct type *
839 get_base_type (struct type *type)
840 {
841   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
842     {
843       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
844         return type;
845       type = TYPE_TARGET_TYPE (type);
846     }
847   return type;
848 }
849
850 /* Return a decoded version of the given VALUE.  This means returning
851    a value whose type is obtained by applying all the GNAT-specific
852    encondings, making the resulting type a static but standard description
853    of the initial type.  */
854
855 struct value *
856 ada_get_decoded_value (struct value *value)
857 {
858   struct type *type = ada_check_typedef (value_type (value));
859
860   if (ada_is_array_descriptor_type (type)
861       || (ada_is_constrained_packed_array_type (type)
862           && TYPE_CODE (type) != TYPE_CODE_PTR))
863     {
864       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
865         value = ada_coerce_to_simple_array_ptr (value);
866       else
867         value = ada_coerce_to_simple_array (value);
868     }
869   else
870     value = ada_to_fixed_value (value);
871
872   return value;
873 }
874
875 /* Same as ada_get_decoded_value, but with the given TYPE.
876    Because there is no associated actual value for this type,
877    the resulting type might be a best-effort approximation in
878    the case of dynamic types.  */
879
880 struct type *
881 ada_get_decoded_type (struct type *type)
882 {
883   type = to_static_fixed_type (type);
884   if (ada_is_constrained_packed_array_type (type))
885     type = ada_coerce_to_simple_array_type (type);
886   return type;
887 }
888
889 \f
890
891                                 /* Language Selection */
892
893 /* If the main program is in Ada, return language_ada, otherwise return LANG
894    (the main program is in Ada iif the adainit symbol is found).  */
895
896 enum language
897 ada_update_initial_language (enum language lang)
898 {
899   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
900                              (struct objfile *) NULL).minsym != NULL)
901     return language_ada;
902
903   return lang;
904 }
905
906 /* If the main procedure is written in Ada, then return its name.
907    The result is good until the next call.  Return NULL if the main
908    procedure doesn't appear to be in Ada.  */
909
910 char *
911 ada_main_name (void)
912 {
913   struct bound_minimal_symbol msym;
914   static char *main_program_name = NULL;
915
916   /* For Ada, the name of the main procedure is stored in a specific
917      string constant, generated by the binder.  Look for that symbol,
918      extract its address, and then read that string.  If we didn't find
919      that string, then most probably the main procedure is not written
920      in Ada.  */
921   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
922
923   if (msym.minsym != NULL)
924     {
925       CORE_ADDR main_program_name_addr;
926       int err_code;
927
928       main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
929       if (main_program_name_addr == 0)
930         error (_("Invalid address for Ada main program name."));
931
932       xfree (main_program_name);
933       target_read_string (main_program_name_addr, &main_program_name,
934                           1024, &err_code);
935
936       if (err_code != 0)
937         return NULL;
938       return main_program_name;
939     }
940
941   /* The main procedure doesn't seem to be in Ada.  */
942   return NULL;
943 }
944 \f
945                                 /* Symbols */
946
947 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
948    of NULLs.  */
949
950 const struct ada_opname_map ada_opname_table[] = {
951   {"Oadd", "\"+\"", BINOP_ADD},
952   {"Osubtract", "\"-\"", BINOP_SUB},
953   {"Omultiply", "\"*\"", BINOP_MUL},
954   {"Odivide", "\"/\"", BINOP_DIV},
955   {"Omod", "\"mod\"", BINOP_MOD},
956   {"Orem", "\"rem\"", BINOP_REM},
957   {"Oexpon", "\"**\"", BINOP_EXP},
958   {"Olt", "\"<\"", BINOP_LESS},
959   {"Ole", "\"<=\"", BINOP_LEQ},
960   {"Ogt", "\">\"", BINOP_GTR},
961   {"Oge", "\">=\"", BINOP_GEQ},
962   {"Oeq", "\"=\"", BINOP_EQUAL},
963   {"One", "\"/=\"", BINOP_NOTEQUAL},
964   {"Oand", "\"and\"", BINOP_BITWISE_AND},
965   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
966   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
967   {"Oconcat", "\"&\"", BINOP_CONCAT},
968   {"Oabs", "\"abs\"", UNOP_ABS},
969   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
970   {"Oadd", "\"+\"", UNOP_PLUS},
971   {"Osubtract", "\"-\"", UNOP_NEG},
972   {NULL, NULL}
973 };
974
975 /* The "encoded" form of DECODED, according to GNAT conventions.
976    The result is valid until the next call to ada_encode.  */
977
978 char *
979 ada_encode (const char *decoded)
980 {
981   static char *encoding_buffer = NULL;
982   static size_t encoding_buffer_size = 0;
983   const char *p;
984   int k;
985
986   if (decoded == NULL)
987     return NULL;
988
989   GROW_VECT (encoding_buffer, encoding_buffer_size,
990              2 * strlen (decoded) + 10);
991
992   k = 0;
993   for (p = decoded; *p != '\0'; p += 1)
994     {
995       if (*p == '.')
996         {
997           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
998           k += 2;
999         }
1000       else if (*p == '"')
1001         {
1002           const struct ada_opname_map *mapping;
1003
1004           for (mapping = ada_opname_table;
1005                mapping->encoded != NULL
1006                && strncmp (mapping->decoded, p,
1007                            strlen (mapping->decoded)) != 0; mapping += 1)
1008             ;
1009           if (mapping->encoded == NULL)
1010             error (_("invalid Ada operator name: %s"), p);
1011           strcpy (encoding_buffer + k, mapping->encoded);
1012           k += strlen (mapping->encoded);
1013           break;
1014         }
1015       else
1016         {
1017           encoding_buffer[k] = *p;
1018           k += 1;
1019         }
1020     }
1021
1022   encoding_buffer[k] = '\0';
1023   return encoding_buffer;
1024 }
1025
1026 /* Return NAME folded to lower case, or, if surrounded by single
1027    quotes, unfolded, but with the quotes stripped away.  Result good
1028    to next call.  */
1029
1030 char *
1031 ada_fold_name (const char *name)
1032 {
1033   static char *fold_buffer = NULL;
1034   static size_t fold_buffer_size = 0;
1035
1036   int len = strlen (name);
1037   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1038
1039   if (name[0] == '\'')
1040     {
1041       strncpy (fold_buffer, name + 1, len - 2);
1042       fold_buffer[len - 2] = '\000';
1043     }
1044   else
1045     {
1046       int i;
1047
1048       for (i = 0; i <= len; i += 1)
1049         fold_buffer[i] = tolower (name[i]);
1050     }
1051
1052   return fold_buffer;
1053 }
1054
1055 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
1056
1057 static int
1058 is_lower_alphanum (const char c)
1059 {
1060   return (isdigit (c) || (isalpha (c) && islower (c)));
1061 }
1062
1063 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1064    This function saves in LEN the length of that same symbol name but
1065    without either of these suffixes:
1066      . .{DIGIT}+
1067      . ${DIGIT}+
1068      . ___{DIGIT}+
1069      . __{DIGIT}+.
1070
1071    These are suffixes introduced by the compiler for entities such as
1072    nested subprogram for instance, in order to avoid name clashes.
1073    They do not serve any purpose for the debugger.  */
1074
1075 static void
1076 ada_remove_trailing_digits (const char *encoded, int *len)
1077 {
1078   if (*len > 1 && isdigit (encoded[*len - 1]))
1079     {
1080       int i = *len - 2;
1081
1082       while (i > 0 && isdigit (encoded[i]))
1083         i--;
1084       if (i >= 0 && encoded[i] == '.')
1085         *len = i;
1086       else if (i >= 0 && encoded[i] == '$')
1087         *len = i;
1088       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
1089         *len = i - 2;
1090       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
1091         *len = i - 1;
1092     }
1093 }
1094
1095 /* Remove the suffix introduced by the compiler for protected object
1096    subprograms.  */
1097
1098 static void
1099 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1100 {
1101   /* Remove trailing N.  */
1102
1103   /* Protected entry subprograms are broken into two
1104      separate subprograms: The first one is unprotected, and has
1105      a 'N' suffix; the second is the protected version, and has
1106      the 'P' suffix.  The second calls the first one after handling
1107      the protection.  Since the P subprograms are internally generated,
1108      we leave these names undecoded, giving the user a clue that this
1109      entity is internal.  */
1110
1111   if (*len > 1
1112       && encoded[*len - 1] == 'N'
1113       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1114     *len = *len - 1;
1115 }
1116
1117 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
1118
1119 static void
1120 ada_remove_Xbn_suffix (const char *encoded, int *len)
1121 {
1122   int i = *len - 1;
1123
1124   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1125     i--;
1126
1127   if (encoded[i] != 'X')
1128     return;
1129
1130   if (i == 0)
1131     return;
1132
1133   if (isalnum (encoded[i-1]))
1134     *len = i;
1135 }
1136
1137 /* If ENCODED follows the GNAT entity encoding conventions, then return
1138    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
1139    replaced by ENCODED.
1140
1141    The resulting string is valid until the next call of ada_decode.
1142    If the string is unchanged by decoding, the original string pointer
1143    is returned.  */
1144
1145 const char *
1146 ada_decode (const char *encoded)
1147 {
1148   int i, j;
1149   int len0;
1150   const char *p;
1151   char *decoded;
1152   int at_start_name;
1153   static char *decoding_buffer = NULL;
1154   static size_t decoding_buffer_size = 0;
1155
1156   /* The name of the Ada main procedure starts with "_ada_".
1157      This prefix is not part of the decoded name, so skip this part
1158      if we see this prefix.  */
1159   if (strncmp (encoded, "_ada_", 5) == 0)
1160     encoded += 5;
1161
1162   /* If the name starts with '_', then it is not a properly encoded
1163      name, so do not attempt to decode it.  Similarly, if the name
1164      starts with '<', the name should not be decoded.  */
1165   if (encoded[0] == '_' || encoded[0] == '<')
1166     goto Suppress;
1167
1168   len0 = strlen (encoded);
1169
1170   ada_remove_trailing_digits (encoded, &len0);
1171   ada_remove_po_subprogram_suffix (encoded, &len0);
1172
1173   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1174      the suffix is located before the current "end" of ENCODED.  We want
1175      to avoid re-matching parts of ENCODED that have previously been
1176      marked as discarded (by decrementing LEN0).  */
1177   p = strstr (encoded, "___");
1178   if (p != NULL && p - encoded < len0 - 3)
1179     {
1180       if (p[3] == 'X')
1181         len0 = p - encoded;
1182       else
1183         goto Suppress;
1184     }
1185
1186   /* Remove any trailing TKB suffix.  It tells us that this symbol
1187      is for the body of a task, but that information does not actually
1188      appear in the decoded name.  */
1189
1190   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
1191     len0 -= 3;
1192
1193   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1194      from the TKB suffix because it is used for non-anonymous task
1195      bodies.  */
1196
1197   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1198     len0 -= 2;
1199
1200   /* Remove trailing "B" suffixes.  */
1201   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1202
1203   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
1204     len0 -= 1;
1205
1206   /* Make decoded big enough for possible expansion by operator name.  */
1207
1208   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1209   decoded = decoding_buffer;
1210
1211   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1212
1213   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1214     {
1215       i = len0 - 2;
1216       while ((i >= 0 && isdigit (encoded[i]))
1217              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1218         i -= 1;
1219       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1220         len0 = i - 1;
1221       else if (encoded[i] == '$')
1222         len0 = i;
1223     }
1224
1225   /* The first few characters that are not alphabetic are not part
1226      of any encoding we use, so we can copy them over verbatim.  */
1227
1228   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1229     decoded[j] = encoded[i];
1230
1231   at_start_name = 1;
1232   while (i < len0)
1233     {
1234       /* Is this a symbol function?  */
1235       if (at_start_name && encoded[i] == 'O')
1236         {
1237           int k;
1238
1239           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1240             {
1241               int op_len = strlen (ada_opname_table[k].encoded);
1242               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1243                             op_len - 1) == 0)
1244                   && !isalnum (encoded[i + op_len]))
1245                 {
1246                   strcpy (decoded + j, ada_opname_table[k].decoded);
1247                   at_start_name = 0;
1248                   i += op_len;
1249                   j += strlen (ada_opname_table[k].decoded);
1250                   break;
1251                 }
1252             }
1253           if (ada_opname_table[k].encoded != NULL)
1254             continue;
1255         }
1256       at_start_name = 0;
1257
1258       /* Replace "TK__" with "__", which will eventually be translated
1259          into "." (just below).  */
1260
1261       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1262         i += 2;
1263
1264       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1265          be translated into "." (just below).  These are internal names
1266          generated for anonymous blocks inside which our symbol is nested.  */
1267
1268       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1269           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1270           && isdigit (encoded [i+4]))
1271         {
1272           int k = i + 5;
1273           
1274           while (k < len0 && isdigit (encoded[k]))
1275             k++;  /* Skip any extra digit.  */
1276
1277           /* Double-check that the "__B_{DIGITS}+" sequence we found
1278              is indeed followed by "__".  */
1279           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1280             i = k;
1281         }
1282
1283       /* Remove _E{DIGITS}+[sb] */
1284
1285       /* Just as for protected object subprograms, there are 2 categories
1286          of subprograms created by the compiler for each entry.  The first
1287          one implements the actual entry code, and has a suffix following
1288          the convention above; the second one implements the barrier and
1289          uses the same convention as above, except that the 'E' is replaced
1290          by a 'B'.
1291
1292          Just as above, we do not decode the name of barrier functions
1293          to give the user a clue that the code he is debugging has been
1294          internally generated.  */
1295
1296       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1297           && isdigit (encoded[i+2]))
1298         {
1299           int k = i + 3;
1300
1301           while (k < len0 && isdigit (encoded[k]))
1302             k++;
1303
1304           if (k < len0
1305               && (encoded[k] == 'b' || encoded[k] == 's'))
1306             {
1307               k++;
1308               /* Just as an extra precaution, make sure that if this
1309                  suffix is followed by anything else, it is a '_'.
1310                  Otherwise, we matched this sequence by accident.  */
1311               if (k == len0
1312                   || (k < len0 && encoded[k] == '_'))
1313                 i = k;
1314             }
1315         }
1316
1317       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1318          the GNAT front-end in protected object subprograms.  */
1319
1320       if (i < len0 + 3
1321           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1322         {
1323           /* Backtrack a bit up until we reach either the begining of
1324              the encoded name, or "__".  Make sure that we only find
1325              digits or lowercase characters.  */
1326           const char *ptr = encoded + i - 1;
1327
1328           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1329             ptr--;
1330           if (ptr < encoded
1331               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1332             i++;
1333         }
1334
1335       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1336         {
1337           /* This is a X[bn]* sequence not separated from the previous
1338              part of the name with a non-alpha-numeric character (in other
1339              words, immediately following an alpha-numeric character), then
1340              verify that it is placed at the end of the encoded name.  If
1341              not, then the encoding is not valid and we should abort the
1342              decoding.  Otherwise, just skip it, it is used in body-nested
1343              package names.  */
1344           do
1345             i += 1;
1346           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1347           if (i < len0)
1348             goto Suppress;
1349         }
1350       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1351         {
1352          /* Replace '__' by '.'.  */
1353           decoded[j] = '.';
1354           at_start_name = 1;
1355           i += 2;
1356           j += 1;
1357         }
1358       else
1359         {
1360           /* It's a character part of the decoded name, so just copy it
1361              over.  */
1362           decoded[j] = encoded[i];
1363           i += 1;
1364           j += 1;
1365         }
1366     }
1367   decoded[j] = '\000';
1368
1369   /* Decoded names should never contain any uppercase character.
1370      Double-check this, and abort the decoding if we find one.  */
1371
1372   for (i = 0; decoded[i] != '\0'; i += 1)
1373     if (isupper (decoded[i]) || decoded[i] == ' ')
1374       goto Suppress;
1375
1376   if (strcmp (decoded, encoded) == 0)
1377     return encoded;
1378   else
1379     return decoded;
1380
1381 Suppress:
1382   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1383   decoded = decoding_buffer;
1384   if (encoded[0] == '<')
1385     strcpy (decoded, encoded);
1386   else
1387     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1388   return decoded;
1389
1390 }
1391
1392 /* Table for keeping permanent unique copies of decoded names.  Once
1393    allocated, names in this table are never released.  While this is a
1394    storage leak, it should not be significant unless there are massive
1395    changes in the set of decoded names in successive versions of a 
1396    symbol table loaded during a single session.  */
1397 static struct htab *decoded_names_store;
1398
1399 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1400    in the language-specific part of GSYMBOL, if it has not been
1401    previously computed.  Tries to save the decoded name in the same
1402    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1403    in any case, the decoded symbol has a lifetime at least that of
1404    GSYMBOL).
1405    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1406    const, but nevertheless modified to a semantically equivalent form
1407    when a decoded name is cached in it.  */
1408
1409 const char *
1410 ada_decode_symbol (const struct general_symbol_info *arg)
1411 {
1412   struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1413   const char **resultp =
1414     &gsymbol->language_specific.mangled_lang.demangled_name;
1415
1416   if (!gsymbol->ada_mangled)
1417     {
1418       const char *decoded = ada_decode (gsymbol->name);
1419       struct obstack *obstack = gsymbol->language_specific.obstack;
1420
1421       gsymbol->ada_mangled = 1;
1422
1423       if (obstack != NULL)
1424         *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1425       else
1426         {
1427           /* Sometimes, we can't find a corresponding objfile, in
1428              which case, we put the result on the heap.  Since we only
1429              decode when needed, we hope this usually does not cause a
1430              significant memory leak (FIXME).  */
1431
1432           char **slot = (char **) htab_find_slot (decoded_names_store,
1433                                                   decoded, INSERT);
1434
1435           if (*slot == NULL)
1436             *slot = xstrdup (decoded);
1437           *resultp = *slot;
1438         }
1439     }
1440
1441   return *resultp;
1442 }
1443
1444 static char *
1445 ada_la_decode (const char *encoded, int options)
1446 {
1447   return xstrdup (ada_decode (encoded));
1448 }
1449
1450 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1451    suffixes that encode debugging information or leading _ada_ on
1452    SYM_NAME (see is_name_suffix commentary for the debugging
1453    information that is ignored).  If WILD, then NAME need only match a
1454    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1455    either argument is NULL.  */
1456
1457 static int
1458 match_name (const char *sym_name, const char *name, int wild)
1459 {
1460   if (sym_name == NULL || name == NULL)
1461     return 0;
1462   else if (wild)
1463     return wild_match (sym_name, name) == 0;
1464   else
1465     {
1466       int len_name = strlen (name);
1467
1468       return (strncmp (sym_name, name, len_name) == 0
1469               && is_name_suffix (sym_name + len_name))
1470         || (strncmp (sym_name, "_ada_", 5) == 0
1471             && strncmp (sym_name + 5, name, len_name) == 0
1472             && is_name_suffix (sym_name + len_name + 5));
1473     }
1474 }
1475 \f
1476
1477                                 /* Arrays */
1478
1479 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1480    generated by the GNAT compiler to describe the index type used
1481    for each dimension of an array, check whether it follows the latest
1482    known encoding.  If not, fix it up to conform to the latest encoding.
1483    Otherwise, do nothing.  This function also does nothing if
1484    INDEX_DESC_TYPE is NULL.
1485
1486    The GNAT encoding used to describle the array index type evolved a bit.
1487    Initially, the information would be provided through the name of each
1488    field of the structure type only, while the type of these fields was
1489    described as unspecified and irrelevant.  The debugger was then expected
1490    to perform a global type lookup using the name of that field in order
1491    to get access to the full index type description.  Because these global
1492    lookups can be very expensive, the encoding was later enhanced to make
1493    the global lookup unnecessary by defining the field type as being
1494    the full index type description.
1495
1496    The purpose of this routine is to allow us to support older versions
1497    of the compiler by detecting the use of the older encoding, and by
1498    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1499    we essentially replace each field's meaningless type by the associated
1500    index subtype).  */
1501
1502 void
1503 ada_fixup_array_indexes_type (struct type *index_desc_type)
1504 {
1505   int i;
1506
1507   if (index_desc_type == NULL)
1508     return;
1509   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1510
1511   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1512      to check one field only, no need to check them all).  If not, return
1513      now.
1514
1515      If our INDEX_DESC_TYPE was generated using the older encoding,
1516      the field type should be a meaningless integer type whose name
1517      is not equal to the field name.  */
1518   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1519       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1520                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1521     return;
1522
1523   /* Fixup each field of INDEX_DESC_TYPE.  */
1524   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1525    {
1526      const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1527      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1528
1529      if (raw_type)
1530        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1531    }
1532 }
1533
1534 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1535
1536 static char *bound_name[] = {
1537   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1538   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1539 };
1540
1541 /* Maximum number of array dimensions we are prepared to handle.  */
1542
1543 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1544
1545
1546 /* The desc_* routines return primitive portions of array descriptors
1547    (fat pointers).  */
1548
1549 /* The descriptor or array type, if any, indicated by TYPE; removes
1550    level of indirection, if needed.  */
1551
1552 static struct type *
1553 desc_base_type (struct type *type)
1554 {
1555   if (type == NULL)
1556     return NULL;
1557   type = ada_check_typedef (type);
1558   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1559     type = ada_typedef_target_type (type);
1560
1561   if (type != NULL
1562       && (TYPE_CODE (type) == TYPE_CODE_PTR
1563           || TYPE_CODE (type) == TYPE_CODE_REF))
1564     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1565   else
1566     return type;
1567 }
1568
1569 /* True iff TYPE indicates a "thin" array pointer type.  */
1570
1571 static int
1572 is_thin_pntr (struct type *type)
1573 {
1574   return
1575     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1576     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1577 }
1578
1579 /* The descriptor type for thin pointer type TYPE.  */
1580
1581 static struct type *
1582 thin_descriptor_type (struct type *type)
1583 {
1584   struct type *base_type = desc_base_type (type);
1585
1586   if (base_type == NULL)
1587     return NULL;
1588   if (is_suffix (ada_type_name (base_type), "___XVE"))
1589     return base_type;
1590   else
1591     {
1592       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1593
1594       if (alt_type == NULL)
1595         return base_type;
1596       else
1597         return alt_type;
1598     }
1599 }
1600
1601 /* A pointer to the array data for thin-pointer value VAL.  */
1602
1603 static struct value *
1604 thin_data_pntr (struct value *val)
1605 {
1606   struct type *type = ada_check_typedef (value_type (val));
1607   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1608
1609   data_type = lookup_pointer_type (data_type);
1610
1611   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1612     return value_cast (data_type, value_copy (val));
1613   else
1614     return value_from_longest (data_type, value_address (val));
1615 }
1616
1617 /* True iff TYPE indicates a "thick" array pointer type.  */
1618
1619 static int
1620 is_thick_pntr (struct type *type)
1621 {
1622   type = desc_base_type (type);
1623   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1624           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1625 }
1626
1627 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1628    pointer to one, the type of its bounds data; otherwise, NULL.  */
1629
1630 static struct type *
1631 desc_bounds_type (struct type *type)
1632 {
1633   struct type *r;
1634
1635   type = desc_base_type (type);
1636
1637   if (type == NULL)
1638     return NULL;
1639   else if (is_thin_pntr (type))
1640     {
1641       type = thin_descriptor_type (type);
1642       if (type == NULL)
1643         return NULL;
1644       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1645       if (r != NULL)
1646         return ada_check_typedef (r);
1647     }
1648   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1649     {
1650       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1651       if (r != NULL)
1652         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1653     }
1654   return NULL;
1655 }
1656
1657 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1658    one, a pointer to its bounds data.   Otherwise NULL.  */
1659
1660 static struct value *
1661 desc_bounds (struct value *arr)
1662 {
1663   struct type *type = ada_check_typedef (value_type (arr));
1664
1665   if (is_thin_pntr (type))
1666     {
1667       struct type *bounds_type =
1668         desc_bounds_type (thin_descriptor_type (type));
1669       LONGEST addr;
1670
1671       if (bounds_type == NULL)
1672         error (_("Bad GNAT array descriptor"));
1673
1674       /* NOTE: The following calculation is not really kosher, but
1675          since desc_type is an XVE-encoded type (and shouldn't be),
1676          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1677       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1678         addr = value_as_long (arr);
1679       else
1680         addr = value_address (arr);
1681
1682       return
1683         value_from_longest (lookup_pointer_type (bounds_type),
1684                             addr - TYPE_LENGTH (bounds_type));
1685     }
1686
1687   else if (is_thick_pntr (type))
1688     {
1689       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1690                                                _("Bad GNAT array descriptor"));
1691       struct type *p_bounds_type = value_type (p_bounds);
1692
1693       if (p_bounds_type
1694           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1695         {
1696           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1697
1698           if (TYPE_STUB (target_type))
1699             p_bounds = value_cast (lookup_pointer_type
1700                                    (ada_check_typedef (target_type)),
1701                                    p_bounds);
1702         }
1703       else
1704         error (_("Bad GNAT array descriptor"));
1705
1706       return p_bounds;
1707     }
1708   else
1709     return NULL;
1710 }
1711
1712 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1713    position of the field containing the address of the bounds data.  */
1714
1715 static int
1716 fat_pntr_bounds_bitpos (struct type *type)
1717 {
1718   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1719 }
1720
1721 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1722    size of the field containing the address of the bounds data.  */
1723
1724 static int
1725 fat_pntr_bounds_bitsize (struct type *type)
1726 {
1727   type = desc_base_type (type);
1728
1729   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1730     return TYPE_FIELD_BITSIZE (type, 1);
1731   else
1732     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1733 }
1734
1735 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1736    pointer to one, the type of its array data (a array-with-no-bounds type);
1737    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1738    data.  */
1739
1740 static struct type *
1741 desc_data_target_type (struct type *type)
1742 {
1743   type = desc_base_type (type);
1744
1745   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1746   if (is_thin_pntr (type))
1747     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1748   else if (is_thick_pntr (type))
1749     {
1750       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1751
1752       if (data_type
1753           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1754         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1755     }
1756
1757   return NULL;
1758 }
1759
1760 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1761    its array data.  */
1762
1763 static struct value *
1764 desc_data (struct value *arr)
1765 {
1766   struct type *type = value_type (arr);
1767
1768   if (is_thin_pntr (type))
1769     return thin_data_pntr (arr);
1770   else if (is_thick_pntr (type))
1771     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1772                              _("Bad GNAT array descriptor"));
1773   else
1774     return NULL;
1775 }
1776
1777
1778 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1779    position of the field containing the address of the data.  */
1780
1781 static int
1782 fat_pntr_data_bitpos (struct type *type)
1783 {
1784   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1785 }
1786
1787 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1788    size of the field containing the address of the data.  */
1789
1790 static int
1791 fat_pntr_data_bitsize (struct type *type)
1792 {
1793   type = desc_base_type (type);
1794
1795   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1796     return TYPE_FIELD_BITSIZE (type, 0);
1797   else
1798     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1799 }
1800
1801 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1802    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1803    bound, if WHICH is 1.  The first bound is I=1.  */
1804
1805 static struct value *
1806 desc_one_bound (struct value *bounds, int i, int which)
1807 {
1808   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1809                            _("Bad GNAT array descriptor bounds"));
1810 }
1811
1812 /* If BOUNDS is an array-bounds structure type, return the bit position
1813    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1814    bound, if WHICH is 1.  The first bound is I=1.  */
1815
1816 static int
1817 desc_bound_bitpos (struct type *type, int i, int which)
1818 {
1819   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1820 }
1821
1822 /* If BOUNDS is an array-bounds structure type, return the bit field size
1823    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1824    bound, if WHICH is 1.  The first bound is I=1.  */
1825
1826 static int
1827 desc_bound_bitsize (struct type *type, int i, int which)
1828 {
1829   type = desc_base_type (type);
1830
1831   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1832     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1833   else
1834     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1835 }
1836
1837 /* If TYPE is the type of an array-bounds structure, the type of its
1838    Ith bound (numbering from 1).  Otherwise, NULL.  */
1839
1840 static struct type *
1841 desc_index_type (struct type *type, int i)
1842 {
1843   type = desc_base_type (type);
1844
1845   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1846     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1847   else
1848     return NULL;
1849 }
1850
1851 /* The number of index positions in the array-bounds type TYPE.
1852    Return 0 if TYPE is NULL.  */
1853
1854 static int
1855 desc_arity (struct type *type)
1856 {
1857   type = desc_base_type (type);
1858
1859   if (type != NULL)
1860     return TYPE_NFIELDS (type) / 2;
1861   return 0;
1862 }
1863
1864 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1865    an array descriptor type (representing an unconstrained array
1866    type).  */
1867
1868 static int
1869 ada_is_direct_array_type (struct type *type)
1870 {
1871   if (type == NULL)
1872     return 0;
1873   type = ada_check_typedef (type);
1874   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1875           || ada_is_array_descriptor_type (type));
1876 }
1877
1878 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1879  * to one.  */
1880
1881 static int
1882 ada_is_array_type (struct type *type)
1883 {
1884   while (type != NULL 
1885          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1886              || TYPE_CODE (type) == TYPE_CODE_REF))
1887     type = TYPE_TARGET_TYPE (type);
1888   return ada_is_direct_array_type (type);
1889 }
1890
1891 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1892
1893 int
1894 ada_is_simple_array_type (struct type *type)
1895 {
1896   if (type == NULL)
1897     return 0;
1898   type = ada_check_typedef (type);
1899   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1900           || (TYPE_CODE (type) == TYPE_CODE_PTR
1901               && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1902                  == TYPE_CODE_ARRAY));
1903 }
1904
1905 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1906
1907 int
1908 ada_is_array_descriptor_type (struct type *type)
1909 {
1910   struct type *data_type = desc_data_target_type (type);
1911
1912   if (type == NULL)
1913     return 0;
1914   type = ada_check_typedef (type);
1915   return (data_type != NULL
1916           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1917           && desc_arity (desc_bounds_type (type)) > 0);
1918 }
1919
1920 /* Non-zero iff type is a partially mal-formed GNAT array
1921    descriptor.  FIXME: This is to compensate for some problems with
1922    debugging output from GNAT.  Re-examine periodically to see if it
1923    is still needed.  */
1924
1925 int
1926 ada_is_bogus_array_descriptor (struct type *type)
1927 {
1928   return
1929     type != NULL
1930     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1931     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1932         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1933     && !ada_is_array_descriptor_type (type);
1934 }
1935
1936
1937 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1938    (fat pointer) returns the type of the array data described---specifically,
1939    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1940    in from the descriptor; otherwise, they are left unspecified.  If
1941    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1942    returns NULL.  The result is simply the type of ARR if ARR is not
1943    a descriptor.  */
1944 struct type *
1945 ada_type_of_array (struct value *arr, int bounds)
1946 {
1947   if (ada_is_constrained_packed_array_type (value_type (arr)))
1948     return decode_constrained_packed_array_type (value_type (arr));
1949
1950   if (!ada_is_array_descriptor_type (value_type (arr)))
1951     return value_type (arr);
1952
1953   if (!bounds)
1954     {
1955       struct type *array_type =
1956         ada_check_typedef (desc_data_target_type (value_type (arr)));
1957
1958       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1959         TYPE_FIELD_BITSIZE (array_type, 0) =
1960           decode_packed_array_bitsize (value_type (arr));
1961       
1962       return array_type;
1963     }
1964   else
1965     {
1966       struct type *elt_type;
1967       int arity;
1968       struct value *descriptor;
1969
1970       elt_type = ada_array_element_type (value_type (arr), -1);
1971       arity = ada_array_arity (value_type (arr));
1972
1973       if (elt_type == NULL || arity == 0)
1974         return ada_check_typedef (value_type (arr));
1975
1976       descriptor = desc_bounds (arr);
1977       if (value_as_long (descriptor) == 0)
1978         return NULL;
1979       while (arity > 0)
1980         {
1981           struct type *range_type = alloc_type_copy (value_type (arr));
1982           struct type *array_type = alloc_type_copy (value_type (arr));
1983           struct value *low = desc_one_bound (descriptor, arity, 0);
1984           struct value *high = desc_one_bound (descriptor, arity, 1);
1985
1986           arity -= 1;
1987           create_static_range_type (range_type, value_type (low),
1988                                     longest_to_int (value_as_long (low)),
1989                                     longest_to_int (value_as_long (high)));
1990           elt_type = create_array_type (array_type, elt_type, range_type);
1991
1992           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1993             {
1994               /* We need to store the element packed bitsize, as well as
1995                  recompute the array size, because it was previously
1996                  computed based on the unpacked element size.  */
1997               LONGEST lo = value_as_long (low);
1998               LONGEST hi = value_as_long (high);
1999
2000               TYPE_FIELD_BITSIZE (elt_type, 0) =
2001                 decode_packed_array_bitsize (value_type (arr));
2002               /* If the array has no element, then the size is already
2003                  zero, and does not need to be recomputed.  */
2004               if (lo < hi)
2005                 {
2006                   int array_bitsize =
2007                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2008
2009                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2010                 }
2011             }
2012         }
2013
2014       return lookup_pointer_type (elt_type);
2015     }
2016 }
2017
2018 /* If ARR does not represent an array, returns ARR unchanged.
2019    Otherwise, returns either a standard GDB array with bounds set
2020    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2021    GDB array.  Returns NULL if ARR is a null fat pointer.  */
2022
2023 struct value *
2024 ada_coerce_to_simple_array_ptr (struct value *arr)
2025 {
2026   if (ada_is_array_descriptor_type (value_type (arr)))
2027     {
2028       struct type *arrType = ada_type_of_array (arr, 1);
2029
2030       if (arrType == NULL)
2031         return NULL;
2032       return value_cast (arrType, value_copy (desc_data (arr)));
2033     }
2034   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2035     return decode_constrained_packed_array (arr);
2036   else
2037     return arr;
2038 }
2039
2040 /* If ARR does not represent an array, returns ARR unchanged.
2041    Otherwise, returns a standard GDB array describing ARR (which may
2042    be ARR itself if it already is in the proper form).  */
2043
2044 struct value *
2045 ada_coerce_to_simple_array (struct value *arr)
2046 {
2047   if (ada_is_array_descriptor_type (value_type (arr)))
2048     {
2049       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2050
2051       if (arrVal == NULL)
2052         error (_("Bounds unavailable for null array pointer."));
2053       check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
2054       return value_ind (arrVal);
2055     }
2056   else if (ada_is_constrained_packed_array_type (value_type (arr)))
2057     return decode_constrained_packed_array (arr);
2058   else
2059     return arr;
2060 }
2061
2062 /* If TYPE represents a GNAT array type, return it translated to an
2063    ordinary GDB array type (possibly with BITSIZE fields indicating
2064    packing).  For other types, is the identity.  */
2065
2066 struct type *
2067 ada_coerce_to_simple_array_type (struct type *type)
2068 {
2069   if (ada_is_constrained_packed_array_type (type))
2070     return decode_constrained_packed_array_type (type);
2071
2072   if (ada_is_array_descriptor_type (type))
2073     return ada_check_typedef (desc_data_target_type (type));
2074
2075   return type;
2076 }
2077
2078 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
2079
2080 static int
2081 ada_is_packed_array_type  (struct type *type)
2082 {
2083   if (type == NULL)
2084     return 0;
2085   type = desc_base_type (type);
2086   type = ada_check_typedef (type);
2087   return
2088     ada_type_name (type) != NULL
2089     && strstr (ada_type_name (type), "___XP") != NULL;
2090 }
2091
2092 /* Non-zero iff TYPE represents a standard GNAT constrained
2093    packed-array type.  */
2094
2095 int
2096 ada_is_constrained_packed_array_type (struct type *type)
2097 {
2098   return ada_is_packed_array_type (type)
2099     && !ada_is_array_descriptor_type (type);
2100 }
2101
2102 /* Non-zero iff TYPE represents an array descriptor for a
2103    unconstrained packed-array type.  */
2104
2105 static int
2106 ada_is_unconstrained_packed_array_type (struct type *type)
2107 {
2108   return ada_is_packed_array_type (type)
2109     && ada_is_array_descriptor_type (type);
2110 }
2111
2112 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2113    return the size of its elements in bits.  */
2114
2115 static long
2116 decode_packed_array_bitsize (struct type *type)
2117 {
2118   const char *raw_name;
2119   const char *tail;
2120   long bits;
2121
2122   /* Access to arrays implemented as fat pointers are encoded as a typedef
2123      of the fat pointer type.  We need the name of the fat pointer type
2124      to do the decoding, so strip the typedef layer.  */
2125   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2126     type = ada_typedef_target_type (type);
2127
2128   raw_name = ada_type_name (ada_check_typedef (type));
2129   if (!raw_name)
2130     raw_name = ada_type_name (desc_base_type (type));
2131
2132   if (!raw_name)
2133     return 0;
2134
2135   tail = strstr (raw_name, "___XP");
2136   gdb_assert (tail != NULL);
2137
2138   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2139     {
2140       lim_warning
2141         (_("could not understand bit size information on packed array"));
2142       return 0;
2143     }
2144
2145   return bits;
2146 }
2147
2148 /* Given that TYPE is a standard GDB array type with all bounds filled
2149    in, and that the element size of its ultimate scalar constituents
2150    (that is, either its elements, or, if it is an array of arrays, its
2151    elements' elements, etc.) is *ELT_BITS, return an identical type,
2152    but with the bit sizes of its elements (and those of any
2153    constituent arrays) recorded in the BITSIZE components of its
2154    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2155    in bits.  */
2156
2157 static struct type *
2158 constrained_packed_array_type (struct type *type, long *elt_bits)
2159 {
2160   struct type *new_elt_type;
2161   struct type *new_type;
2162   struct type *index_type_desc;
2163   struct type *index_type;
2164   LONGEST low_bound, high_bound;
2165
2166   type = ada_check_typedef (type);
2167   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2168     return type;
2169
2170   index_type_desc = ada_find_parallel_type (type, "___XA");
2171   if (index_type_desc)
2172     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2173                                       NULL);
2174   else
2175     index_type = TYPE_INDEX_TYPE (type);
2176
2177   new_type = alloc_type_copy (type);
2178   new_elt_type =
2179     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2180                                    elt_bits);
2181   create_array_type (new_type, new_elt_type, index_type);
2182   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2183   TYPE_NAME (new_type) = ada_type_name (type);
2184
2185   if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2186     low_bound = high_bound = 0;
2187   if (high_bound < low_bound)
2188     *elt_bits = TYPE_LENGTH (new_type) = 0;
2189   else
2190     {
2191       *elt_bits *= (high_bound - low_bound + 1);
2192       TYPE_LENGTH (new_type) =
2193         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2194     }
2195
2196   TYPE_FIXED_INSTANCE (new_type) = 1;
2197   return new_type;
2198 }
2199
2200 /* The array type encoded by TYPE, where
2201    ada_is_constrained_packed_array_type (TYPE).  */
2202
2203 static struct type *
2204 decode_constrained_packed_array_type (struct type *type)
2205 {
2206   const char *raw_name = ada_type_name (ada_check_typedef (type));
2207   char *name;
2208   const char *tail;
2209   struct type *shadow_type;
2210   long bits;
2211
2212   if (!raw_name)
2213     raw_name = ada_type_name (desc_base_type (type));
2214
2215   if (!raw_name)
2216     return NULL;
2217
2218   name = (char *) alloca (strlen (raw_name) + 1);
2219   tail = strstr (raw_name, "___XP");
2220   type = desc_base_type (type);
2221
2222   memcpy (name, raw_name, tail - raw_name);
2223   name[tail - raw_name] = '\000';
2224
2225   shadow_type = ada_find_parallel_type_with_name (type, name);
2226
2227   if (shadow_type == NULL)
2228     {
2229       lim_warning (_("could not find bounds information on packed array"));
2230       return NULL;
2231     }
2232   CHECK_TYPEDEF (shadow_type);
2233
2234   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2235     {
2236       lim_warning (_("could not understand bounds "
2237                      "information on packed array"));
2238       return NULL;
2239     }
2240
2241   bits = decode_packed_array_bitsize (type);
2242   return constrained_packed_array_type (shadow_type, &bits);
2243 }
2244
2245 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2246    array, returns a simple array that denotes that array.  Its type is a
2247    standard GDB array type except that the BITSIZEs of the array
2248    target types are set to the number of bits in each element, and the
2249    type length is set appropriately.  */
2250
2251 static struct value *
2252 decode_constrained_packed_array (struct value *arr)
2253 {
2254   struct type *type;
2255
2256   /* If our value is a pointer, then dereference it. Likewise if
2257      the value is a reference.  Make sure that this operation does not
2258      cause the target type to be fixed, as this would indirectly cause
2259      this array to be decoded.  The rest of the routine assumes that
2260      the array hasn't been decoded yet, so we use the basic "coerce_ref"
2261      and "value_ind" routines to perform the dereferencing, as opposed
2262      to using "ada_coerce_ref" or "ada_value_ind".  */
2263   arr = coerce_ref (arr);
2264   if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2265     arr = value_ind (arr);
2266
2267   type = decode_constrained_packed_array_type (value_type (arr));
2268   if (type == NULL)
2269     {
2270       error (_("can't unpack array"));
2271       return NULL;
2272     }
2273
2274   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2275       && ada_is_modular_type (value_type (arr)))
2276     {
2277        /* This is a (right-justified) modular type representing a packed
2278          array with no wrapper.  In order to interpret the value through
2279          the (left-justified) packed array type we just built, we must
2280          first left-justify it.  */
2281       int bit_size, bit_pos;
2282       ULONGEST mod;
2283
2284       mod = ada_modulus (value_type (arr)) - 1;
2285       bit_size = 0;
2286       while (mod > 0)
2287         {
2288           bit_size += 1;
2289           mod >>= 1;
2290         }
2291       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2292       arr = ada_value_primitive_packed_val (arr, NULL,
2293                                             bit_pos / HOST_CHAR_BIT,
2294                                             bit_pos % HOST_CHAR_BIT,
2295                                             bit_size,
2296                                             type);
2297     }
2298
2299   return coerce_unspec_val_to_type (arr, type);
2300 }
2301
2302
2303 /* The value of the element of packed array ARR at the ARITY indices
2304    given in IND.   ARR must be a simple array.  */
2305
2306 static struct value *
2307 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2308 {
2309   int i;
2310   int bits, elt_off, bit_off;
2311   long elt_total_bit_offset;
2312   struct type *elt_type;
2313   struct value *v;
2314
2315   bits = 0;
2316   elt_total_bit_offset = 0;
2317   elt_type = ada_check_typedef (value_type (arr));
2318   for (i = 0; i < arity; i += 1)
2319     {
2320       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2321           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2322         error
2323           (_("attempt to do packed indexing of "
2324              "something other than a packed array"));
2325       else
2326         {
2327           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2328           LONGEST lowerbound, upperbound;
2329           LONGEST idx;
2330
2331           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2332             {
2333               lim_warning (_("don't know bounds of array"));
2334               lowerbound = upperbound = 0;
2335             }
2336
2337           idx = pos_atr (ind[i]);
2338           if (idx < lowerbound || idx > upperbound)
2339             lim_warning (_("packed array index %ld out of bounds"),
2340                          (long) idx);
2341           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2342           elt_total_bit_offset += (idx - lowerbound) * bits;
2343           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2344         }
2345     }
2346   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2347   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2348
2349   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2350                                       bits, elt_type);
2351   return v;
2352 }
2353
2354 /* Non-zero iff TYPE includes negative integer values.  */
2355
2356 static int
2357 has_negatives (struct type *type)
2358 {
2359   switch (TYPE_CODE (type))
2360     {
2361     default:
2362       return 0;
2363     case TYPE_CODE_INT:
2364       return !TYPE_UNSIGNED (type);
2365     case TYPE_CODE_RANGE:
2366       return TYPE_LOW_BOUND (type) < 0;
2367     }
2368 }
2369
2370
2371 /* Create a new value of type TYPE from the contents of OBJ starting
2372    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2373    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2374    assigning through the result will set the field fetched from.
2375    VALADDR is ignored unless OBJ is NULL, in which case,
2376    VALADDR+OFFSET must address the start of storage containing the 
2377    packed value.  The value returned  in this case is never an lval.
2378    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2379
2380 struct value *
2381 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2382                                 long offset, int bit_offset, int bit_size,
2383                                 struct type *type)
2384 {
2385   struct value *v;
2386   int src,                      /* Index into the source area */
2387     targ,                       /* Index into the target area */
2388     srcBitsLeft,                /* Number of source bits left to move */
2389     nsrc, ntarg,                /* Number of source and target bytes */
2390     unusedLS,                   /* Number of bits in next significant
2391                                    byte of source that are unused */
2392     accumSize;                  /* Number of meaningful bits in accum */
2393   unsigned char *bytes;         /* First byte containing data to unpack */
2394   unsigned char *unpacked;
2395   unsigned long accum;          /* Staging area for bits being transferred */
2396   unsigned char sign;
2397   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2398   /* Transmit bytes from least to most significant; delta is the direction
2399      the indices move.  */
2400   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2401
2402   type = ada_check_typedef (type);
2403
2404   if (obj == NULL)
2405     {
2406       v = allocate_value (type);
2407       bytes = (unsigned char *) (valaddr + offset);
2408     }
2409   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2410     {
2411       v = value_at (type, value_address (obj));
2412       type = value_type (v);
2413       bytes = (unsigned char *) alloca (len);
2414       read_memory (value_address (v) + offset, bytes, len);
2415     }
2416   else
2417     {
2418       v = allocate_value (type);
2419       bytes = (unsigned char *) value_contents (obj) + offset;
2420     }
2421
2422   if (obj != NULL)
2423     {
2424       long new_offset = offset;
2425
2426       set_value_component_location (v, obj);
2427       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2428       set_value_bitsize (v, bit_size);
2429       if (value_bitpos (v) >= HOST_CHAR_BIT)
2430         {
2431           ++new_offset;
2432           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2433         }
2434       set_value_offset (v, new_offset);
2435
2436       /* Also set the parent value.  This is needed when trying to
2437          assign a new value (in inferior memory).  */
2438       set_value_parent (v, obj);
2439     }
2440   else
2441     set_value_bitsize (v, bit_size);
2442   unpacked = (unsigned char *) value_contents (v);
2443
2444   srcBitsLeft = bit_size;
2445   nsrc = len;
2446   ntarg = TYPE_LENGTH (type);
2447   sign = 0;
2448   if (bit_size == 0)
2449     {
2450       memset (unpacked, 0, TYPE_LENGTH (type));
2451       return v;
2452     }
2453   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2454     {
2455       src = len - 1;
2456       if (has_negatives (type)
2457           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2458         sign = ~0;
2459
2460       unusedLS =
2461         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2462         % HOST_CHAR_BIT;
2463
2464       switch (TYPE_CODE (type))
2465         {
2466         case TYPE_CODE_ARRAY:
2467         case TYPE_CODE_UNION:
2468         case TYPE_CODE_STRUCT:
2469           /* Non-scalar values must be aligned at a byte boundary...  */
2470           accumSize =
2471             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2472           /* ... And are placed at the beginning (most-significant) bytes
2473              of the target.  */
2474           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2475           ntarg = targ + 1;
2476           break;
2477         default:
2478           accumSize = 0;
2479           targ = TYPE_LENGTH (type) - 1;
2480           break;
2481         }
2482     }
2483   else
2484     {
2485       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2486
2487       src = targ = 0;
2488       unusedLS = bit_offset;
2489       accumSize = 0;
2490
2491       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2492         sign = ~0;
2493     }
2494
2495   accum = 0;
2496   while (nsrc > 0)
2497     {
2498       /* Mask for removing bits of the next source byte that are not
2499          part of the value.  */
2500       unsigned int unusedMSMask =
2501         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2502         1;
2503       /* Sign-extend bits for this byte.  */
2504       unsigned int signMask = sign & ~unusedMSMask;
2505
2506       accum |=
2507         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2508       accumSize += HOST_CHAR_BIT - unusedLS;
2509       if (accumSize >= HOST_CHAR_BIT)
2510         {
2511           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2512           accumSize -= HOST_CHAR_BIT;
2513           accum >>= HOST_CHAR_BIT;
2514           ntarg -= 1;
2515           targ += delta;
2516         }
2517       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2518       unusedLS = 0;
2519       nsrc -= 1;
2520       src += delta;
2521     }
2522   while (ntarg > 0)
2523     {
2524       accum |= sign << accumSize;
2525       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2526       accumSize -= HOST_CHAR_BIT;
2527       accum >>= HOST_CHAR_BIT;
2528       ntarg -= 1;
2529       targ += delta;
2530     }
2531
2532   return v;
2533 }
2534
2535 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2536    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2537    not overlap.  */
2538 static void
2539 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2540            int src_offset, int n, int bits_big_endian_p)
2541 {
2542   unsigned int accum, mask;
2543   int accum_bits, chunk_size;
2544
2545   target += targ_offset / HOST_CHAR_BIT;
2546   targ_offset %= HOST_CHAR_BIT;
2547   source += src_offset / HOST_CHAR_BIT;
2548   src_offset %= HOST_CHAR_BIT;
2549   if (bits_big_endian_p)
2550     {
2551       accum = (unsigned char) *source;
2552       source += 1;
2553       accum_bits = HOST_CHAR_BIT - src_offset;
2554
2555       while (n > 0)
2556         {
2557           int unused_right;
2558
2559           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2560           accum_bits += HOST_CHAR_BIT;
2561           source += 1;
2562           chunk_size = HOST_CHAR_BIT - targ_offset;
2563           if (chunk_size > n)
2564             chunk_size = n;
2565           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2566           mask = ((1 << chunk_size) - 1) << unused_right;
2567           *target =
2568             (*target & ~mask)
2569             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2570           n -= chunk_size;
2571           accum_bits -= chunk_size;
2572           target += 1;
2573           targ_offset = 0;
2574         }
2575     }
2576   else
2577     {
2578       accum = (unsigned char) *source >> src_offset;
2579       source += 1;
2580       accum_bits = HOST_CHAR_BIT - src_offset;
2581
2582       while (n > 0)
2583         {
2584           accum = accum + ((unsigned char) *source << accum_bits);
2585           accum_bits += HOST_CHAR_BIT;
2586           source += 1;
2587           chunk_size = HOST_CHAR_BIT - targ_offset;
2588           if (chunk_size > n)
2589             chunk_size = n;
2590           mask = ((1 << chunk_size) - 1) << targ_offset;
2591           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2592           n -= chunk_size;
2593           accum_bits -= chunk_size;
2594           accum >>= chunk_size;
2595           target += 1;
2596           targ_offset = 0;
2597         }
2598     }
2599 }
2600
2601 /* Store the contents of FROMVAL into the location of TOVAL.
2602    Return a new value with the location of TOVAL and contents of
2603    FROMVAL.   Handles assignment into packed fields that have
2604    floating-point or non-scalar types.  */
2605
2606 static struct value *
2607 ada_value_assign (struct value *toval, struct value *fromval)
2608 {
2609   struct type *type = value_type (toval);
2610   int bits = value_bitsize (toval);
2611
2612   toval = ada_coerce_ref (toval);
2613   fromval = ada_coerce_ref (fromval);
2614
2615   if (ada_is_direct_array_type (value_type (toval)))
2616     toval = ada_coerce_to_simple_array (toval);
2617   if (ada_is_direct_array_type (value_type (fromval)))
2618     fromval = ada_coerce_to_simple_array (fromval);
2619
2620   if (!deprecated_value_modifiable (toval))
2621     error (_("Left operand of assignment is not a modifiable lvalue."));
2622
2623   if (VALUE_LVAL (toval) == lval_memory
2624       && bits > 0
2625       && (TYPE_CODE (type) == TYPE_CODE_FLT
2626           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2627     {
2628       int len = (value_bitpos (toval)
2629                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2630       int from_size;
2631       gdb_byte *buffer = alloca (len);
2632       struct value *val;
2633       CORE_ADDR to_addr = value_address (toval);
2634
2635       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2636         fromval = value_cast (type, fromval);
2637
2638       read_memory (to_addr, buffer, len);
2639       from_size = value_bitsize (fromval);
2640       if (from_size == 0)
2641         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2642       if (gdbarch_bits_big_endian (get_type_arch (type)))
2643         move_bits (buffer, value_bitpos (toval),
2644                    value_contents (fromval), from_size - bits, bits, 1);
2645       else
2646         move_bits (buffer, value_bitpos (toval),
2647                    value_contents (fromval), 0, bits, 0);
2648       write_memory_with_notification (to_addr, buffer, len);
2649
2650       val = value_copy (toval);
2651       memcpy (value_contents_raw (val), value_contents (fromval),
2652               TYPE_LENGTH (type));
2653       deprecated_set_value_type (val, type);
2654
2655       return val;
2656     }
2657
2658   return value_assign (toval, fromval);
2659 }
2660
2661
2662 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2663  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2664  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2665  * COMPONENT, and not the inferior's memory.  The current contents 
2666  * of COMPONENT are ignored.  */
2667 static void
2668 value_assign_to_component (struct value *container, struct value *component,
2669                            struct value *val)
2670 {
2671   LONGEST offset_in_container =
2672     (LONGEST)  (value_address (component) - value_address (container));
2673   int bit_offset_in_container = 
2674     value_bitpos (component) - value_bitpos (container);
2675   int bits;
2676   
2677   val = value_cast (value_type (component), val);
2678
2679   if (value_bitsize (component) == 0)
2680     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2681   else
2682     bits = value_bitsize (component);
2683
2684   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2685     move_bits (value_contents_writeable (container) + offset_in_container, 
2686                value_bitpos (container) + bit_offset_in_container,
2687                value_contents (val),
2688                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2689                bits, 1);
2690   else
2691     move_bits (value_contents_writeable (container) + offset_in_container, 
2692                value_bitpos (container) + bit_offset_in_container,
2693                value_contents (val), 0, bits, 0);
2694 }              
2695                         
2696 /* The value of the element of array ARR at the ARITY indices given in IND.
2697    ARR may be either a simple array, GNAT array descriptor, or pointer
2698    thereto.  */
2699
2700 struct value *
2701 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2702 {
2703   int k;
2704   struct value *elt;
2705   struct type *elt_type;
2706
2707   elt = ada_coerce_to_simple_array (arr);
2708
2709   elt_type = ada_check_typedef (value_type (elt));
2710   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2711       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2712     return value_subscript_packed (elt, arity, ind);
2713
2714   for (k = 0; k < arity; k += 1)
2715     {
2716       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2717         error (_("too many subscripts (%d expected)"), k);
2718       elt = value_subscript (elt, pos_atr (ind[k]));
2719     }
2720   return elt;
2721 }
2722
2723 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2724    value of the element of *ARR at the ARITY indices given in
2725    IND.  Does not read the entire array into memory.  */
2726
2727 static struct value *
2728 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2729                          struct value **ind)
2730 {
2731   int k;
2732
2733   for (k = 0; k < arity; k += 1)
2734     {
2735       LONGEST lwb, upb;
2736
2737       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2738         error (_("too many subscripts (%d expected)"), k);
2739       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2740                         value_copy (arr));
2741       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2742       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2743       type = TYPE_TARGET_TYPE (type);
2744     }
2745
2746   return value_ind (arr);
2747 }
2748
2749 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2750    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2751    elements starting at index LOW.  The lower bound of this array is LOW, as
2752    per Ada rules.  */
2753 static struct value *
2754 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2755                           int low, int high)
2756 {
2757   struct type *type0 = ada_check_typedef (type);
2758   CORE_ADDR base = value_as_address (array_ptr)
2759     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2760        * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2761   struct type *index_type
2762     = create_static_range_type (NULL,
2763                                 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2764                                 low, high);
2765   struct type *slice_type =
2766     create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2767
2768   return value_at_lazy (slice_type, base);
2769 }
2770
2771
2772 static struct value *
2773 ada_value_slice (struct value *array, int low, int high)
2774 {
2775   struct type *type = ada_check_typedef (value_type (array));
2776   struct type *index_type
2777     = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2778   struct type *slice_type =
2779     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2780
2781   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2782 }
2783
2784 /* If type is a record type in the form of a standard GNAT array
2785    descriptor, returns the number of dimensions for type.  If arr is a
2786    simple array, returns the number of "array of"s that prefix its
2787    type designation.  Otherwise, returns 0.  */
2788
2789 int
2790 ada_array_arity (struct type *type)
2791 {
2792   int arity;
2793
2794   if (type == NULL)
2795     return 0;
2796
2797   type = desc_base_type (type);
2798
2799   arity = 0;
2800   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2801     return desc_arity (desc_bounds_type (type));
2802   else
2803     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2804       {
2805         arity += 1;
2806         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2807       }
2808
2809   return arity;
2810 }
2811
2812 /* If TYPE is a record type in the form of a standard GNAT array
2813    descriptor or a simple array type, returns the element type for
2814    TYPE after indexing by NINDICES indices, or by all indices if
2815    NINDICES is -1.  Otherwise, returns NULL.  */
2816
2817 struct type *
2818 ada_array_element_type (struct type *type, int nindices)
2819 {
2820   type = desc_base_type (type);
2821
2822   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2823     {
2824       int k;
2825       struct type *p_array_type;
2826
2827       p_array_type = desc_data_target_type (type);
2828
2829       k = ada_array_arity (type);
2830       if (k == 0)
2831         return NULL;
2832
2833       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2834       if (nindices >= 0 && k > nindices)
2835         k = nindices;
2836       while (k > 0 && p_array_type != NULL)
2837         {
2838           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2839           k -= 1;
2840         }
2841       return p_array_type;
2842     }
2843   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2844     {
2845       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2846         {
2847           type = TYPE_TARGET_TYPE (type);
2848           nindices -= 1;
2849         }
2850       return type;
2851     }
2852
2853   return NULL;
2854 }
2855
2856 /* The type of nth index in arrays of given type (n numbering from 1).
2857    Does not examine memory.  Throws an error if N is invalid or TYPE
2858    is not an array type.  NAME is the name of the Ada attribute being
2859    evaluated ('range, 'first, 'last, or 'length); it is used in building
2860    the error message.  */
2861
2862 static struct type *
2863 ada_index_type (struct type *type, int n, const char *name)
2864 {
2865   struct type *result_type;
2866
2867   type = desc_base_type (type);
2868
2869   if (n < 0 || n > ada_array_arity (type))
2870     error (_("invalid dimension number to '%s"), name);
2871
2872   if (ada_is_simple_array_type (type))
2873     {
2874       int i;
2875
2876       for (i = 1; i < n; i += 1)
2877         type = TYPE_TARGET_TYPE (type);
2878       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2879       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2880          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2881          perhaps stabsread.c would make more sense.  */
2882       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2883         result_type = NULL;
2884     }
2885   else
2886     {
2887       result_type = desc_index_type (desc_bounds_type (type), n);
2888       if (result_type == NULL)
2889         error (_("attempt to take bound of something that is not an array"));
2890     }
2891
2892   return result_type;
2893 }
2894
2895 /* Given that arr is an array type, returns the lower bound of the
2896    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2897    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2898    array-descriptor type.  It works for other arrays with bounds supplied
2899    by run-time quantities other than discriminants.  */
2900
2901 static LONGEST
2902 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2903 {
2904   struct type *type, *index_type_desc, *index_type;
2905   int i;
2906
2907   gdb_assert (which == 0 || which == 1);
2908
2909   if (ada_is_constrained_packed_array_type (arr_type))
2910     arr_type = decode_constrained_packed_array_type (arr_type);
2911
2912   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2913     return (LONGEST) - which;
2914
2915   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2916     type = TYPE_TARGET_TYPE (arr_type);
2917   else
2918     type = arr_type;
2919
2920   index_type_desc = ada_find_parallel_type (type, "___XA");
2921   ada_fixup_array_indexes_type (index_type_desc);
2922   if (index_type_desc != NULL)
2923     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2924                                       NULL);
2925   else
2926     {
2927       struct type *elt_type = check_typedef (type);
2928
2929       for (i = 1; i < n; i++)
2930         elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2931
2932       index_type = TYPE_INDEX_TYPE (elt_type);
2933     }
2934
2935   return
2936     (LONGEST) (which == 0
2937                ? ada_discrete_type_low_bound (index_type)
2938                : ada_discrete_type_high_bound (index_type));
2939 }
2940
2941 /* Given that arr is an array value, returns the lower bound of the
2942    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2943    WHICH is 1.  This routine will also work for arrays with bounds
2944    supplied by run-time quantities other than discriminants.  */
2945
2946 static LONGEST
2947 ada_array_bound (struct value *arr, int n, int which)
2948 {
2949   struct type *arr_type = value_type (arr);
2950
2951   if (ada_is_constrained_packed_array_type (arr_type))
2952     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2953   else if (ada_is_simple_array_type (arr_type))
2954     return ada_array_bound_from_type (arr_type, n, which);
2955   else
2956     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2957 }
2958
2959 /* Given that arr is an array value, returns the length of the
2960    nth index.  This routine will also work for arrays with bounds
2961    supplied by run-time quantities other than discriminants.
2962    Does not work for arrays indexed by enumeration types with representation
2963    clauses at the moment.  */
2964
2965 static LONGEST
2966 ada_array_length (struct value *arr, int n)
2967 {
2968   struct type *arr_type = ada_check_typedef (value_type (arr));
2969
2970   if (ada_is_constrained_packed_array_type (arr_type))
2971     return ada_array_length (decode_constrained_packed_array (arr), n);
2972
2973   if (ada_is_simple_array_type (arr_type))
2974     return (ada_array_bound_from_type (arr_type, n, 1)
2975             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2976   else
2977     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2978             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2979 }
2980
2981 /* An empty array whose type is that of ARR_TYPE (an array type),
2982    with bounds LOW to LOW-1.  */
2983
2984 static struct value *
2985 empty_array (struct type *arr_type, int low)
2986 {
2987   struct type *arr_type0 = ada_check_typedef (arr_type);
2988   struct type *index_type
2989     = create_static_range_type
2990         (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),  low, low - 1);
2991   struct type *elt_type = ada_array_element_type (arr_type0, 1);
2992
2993   return allocate_value (create_array_type (NULL, elt_type, index_type));
2994 }
2995 \f
2996
2997                                 /* Name resolution */
2998
2999 /* The "decoded" name for the user-definable Ada operator corresponding
3000    to OP.  */
3001
3002 static const char *
3003 ada_decoded_op_name (enum exp_opcode op)
3004 {
3005   int i;
3006
3007   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3008     {
3009       if (ada_opname_table[i].op == op)
3010         return ada_opname_table[i].decoded;
3011     }
3012   error (_("Could not find operator name for opcode"));
3013 }
3014
3015
3016 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3017    references (marked by OP_VAR_VALUE nodes in which the symbol has an
3018    undefined namespace) and converts operators that are
3019    user-defined into appropriate function calls.  If CONTEXT_TYPE is
3020    non-null, it provides a preferred result type [at the moment, only
3021    type void has any effect---causing procedures to be preferred over
3022    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
3023    return type is preferred.  May change (expand) *EXP.  */
3024
3025 static void
3026 resolve (struct expression **expp, int void_context_p)
3027 {
3028   struct type *context_type = NULL;
3029   int pc = 0;
3030
3031   if (void_context_p)
3032     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3033
3034   resolve_subexp (expp, &pc, 1, context_type);
3035 }
3036
3037 /* Resolve the operator of the subexpression beginning at
3038    position *POS of *EXPP.  "Resolving" consists of replacing
3039    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3040    with their resolutions, replacing built-in operators with
3041    function calls to user-defined operators, where appropriate, and,
3042    when DEPROCEDURE_P is non-zero, converting function-valued variables
3043    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
3044    are as in ada_resolve, above.  */
3045
3046 static struct value *
3047 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3048                 struct type *context_type)
3049 {
3050   int pc = *pos;
3051   int i;
3052   struct expression *exp;       /* Convenience: == *expp.  */
3053   enum exp_opcode op = (*expp)->elts[pc].opcode;
3054   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
3055   int nargs;                    /* Number of operands.  */
3056   int oplen;
3057
3058   argvec = NULL;
3059   nargs = 0;
3060   exp = *expp;
3061
3062   /* Pass one: resolve operands, saving their types and updating *pos,
3063      if needed.  */
3064   switch (op)
3065     {
3066     case OP_FUNCALL:
3067       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3068           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3069         *pos += 7;
3070       else
3071         {
3072           *pos += 3;
3073           resolve_subexp (expp, pos, 0, NULL);
3074         }
3075       nargs = longest_to_int (exp->elts[pc + 1].longconst);
3076       break;
3077
3078     case UNOP_ADDR:
3079       *pos += 1;
3080       resolve_subexp (expp, pos, 0, NULL);
3081       break;
3082
3083     case UNOP_QUAL:
3084       *pos += 3;
3085       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3086       break;
3087
3088     case OP_ATR_MODULUS:
3089     case OP_ATR_SIZE:
3090     case OP_ATR_TAG:
3091     case OP_ATR_FIRST:
3092     case OP_ATR_LAST:
3093     case OP_ATR_LENGTH:
3094     case OP_ATR_POS:
3095     case OP_ATR_VAL:
3096     case OP_ATR_MIN:
3097     case OP_ATR_MAX:
3098     case TERNOP_IN_RANGE:
3099     case BINOP_IN_BOUNDS:
3100     case UNOP_IN_RANGE:
3101     case OP_AGGREGATE:
3102     case OP_OTHERS:
3103     case OP_CHOICES:
3104     case OP_POSITIONAL:
3105     case OP_DISCRETE_RANGE:
3106     case OP_NAME:
3107       ada_forward_operator_length (exp, pc, &oplen, &nargs);
3108       *pos += oplen;
3109       break;
3110
3111     case BINOP_ASSIGN:
3112       {
3113         struct value *arg1;
3114
3115         *pos += 1;
3116         arg1 = resolve_subexp (expp, pos, 0, NULL);
3117         if (arg1 == NULL)
3118           resolve_subexp (expp, pos, 1, NULL);
3119         else
3120           resolve_subexp (expp, pos, 1, value_type (arg1));
3121         break;
3122       }
3123
3124     case UNOP_CAST:
3125       *pos += 3;
3126       nargs = 1;
3127       break;
3128
3129     case BINOP_ADD:
3130     case BINOP_SUB:
3131     case BINOP_MUL:
3132     case BINOP_DIV:
3133     case BINOP_REM:
3134     case BINOP_MOD:
3135     case BINOP_EXP:
3136     case BINOP_CONCAT:
3137     case BINOP_LOGICAL_AND:
3138     case BINOP_LOGICAL_OR:
3139     case BINOP_BITWISE_AND:
3140     case BINOP_BITWISE_IOR:
3141     case BINOP_BITWISE_XOR:
3142
3143     case BINOP_EQUAL:
3144     case BINOP_NOTEQUAL:
3145     case BINOP_LESS:
3146     case BINOP_GTR:
3147     case BINOP_LEQ:
3148     case BINOP_GEQ:
3149
3150     case BINOP_REPEAT:
3151     case BINOP_SUBSCRIPT:
3152     case BINOP_COMMA:
3153       *pos += 1;
3154       nargs = 2;
3155       break;
3156
3157     case UNOP_NEG:
3158     case UNOP_PLUS:
3159     case UNOP_LOGICAL_NOT:
3160     case UNOP_ABS:
3161     case UNOP_IND:
3162       *pos += 1;
3163       nargs = 1;
3164       break;
3165
3166     case OP_LONG:
3167     case OP_DOUBLE:
3168     case OP_VAR_VALUE:
3169       *pos += 4;
3170       break;
3171
3172     case OP_TYPE:
3173     case OP_BOOL:
3174     case OP_LAST:
3175     case OP_INTERNALVAR:
3176       *pos += 3;
3177       break;
3178
3179     case UNOP_MEMVAL:
3180       *pos += 3;
3181       nargs = 1;
3182       break;
3183
3184     case OP_REGISTER:
3185       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3186       break;
3187
3188     case STRUCTOP_STRUCT:
3189       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3190       nargs = 1;
3191       break;
3192
3193     case TERNOP_SLICE:
3194       *pos += 1;
3195       nargs = 3;
3196       break;
3197
3198     case OP_STRING:
3199       break;
3200
3201     default:
3202       error (_("Unexpected operator during name resolution"));
3203     }
3204
3205   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3206   for (i = 0; i < nargs; i += 1)
3207     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3208   argvec[i] = NULL;
3209   exp = *expp;
3210
3211   /* Pass two: perform any resolution on principal operator.  */
3212   switch (op)
3213     {
3214     default:
3215       break;
3216
3217     case OP_VAR_VALUE:
3218       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3219         {
3220           struct ada_symbol_info *candidates;
3221           int n_candidates;
3222
3223           n_candidates =
3224             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3225                                     (exp->elts[pc + 2].symbol),
3226                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3227                                     &candidates);
3228
3229           if (n_candidates > 1)
3230             {
3231               /* Types tend to get re-introduced locally, so if there
3232                  are any local symbols that are not types, first filter
3233                  out all types.  */
3234               int j;
3235               for (j = 0; j < n_candidates; j += 1)
3236                 switch (SYMBOL_CLASS (candidates[j].sym))
3237                   {
3238                   case LOC_REGISTER:
3239                   case LOC_ARG:
3240                   case LOC_REF_ARG:
3241                   case LOC_REGPARM_ADDR:
3242                   case LOC_LOCAL:
3243                   case LOC_COMPUTED:
3244                     goto FoundNonType;
3245                   default:
3246                     break;
3247                   }
3248             FoundNonType:
3249               if (j < n_candidates)
3250                 {
3251                   j = 0;
3252                   while (j < n_candidates)
3253                     {
3254                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3255                         {
3256                           candidates[j] = candidates[n_candidates - 1];
3257                           n_candidates -= 1;
3258                         }
3259                       else
3260                         j += 1;
3261                     }
3262                 }
3263             }
3264
3265           if (n_candidates == 0)
3266             error (_("No definition found for %s"),
3267                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3268           else if (n_candidates == 1)
3269             i = 0;
3270           else if (deprocedure_p
3271                    && !is_nonfunction (candidates, n_candidates))
3272             {
3273               i = ada_resolve_function
3274                 (candidates, n_candidates, NULL, 0,
3275                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3276                  context_type);
3277               if (i < 0)
3278                 error (_("Could not find a match for %s"),
3279                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3280             }
3281           else
3282             {
3283               printf_filtered (_("Multiple matches for %s\n"),
3284                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3285               user_select_syms (candidates, n_candidates, 1);
3286               i = 0;
3287             }
3288
3289           exp->elts[pc + 1].block = candidates[i].block;
3290           exp->elts[pc + 2].symbol = candidates[i].sym;
3291           if (innermost_block == NULL
3292               || contained_in (candidates[i].block, innermost_block))
3293             innermost_block = candidates[i].block;
3294         }
3295
3296       if (deprocedure_p
3297           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3298               == TYPE_CODE_FUNC))
3299         {
3300           replace_operator_with_call (expp, pc, 0, 0,
3301                                       exp->elts[pc + 2].symbol,
3302                                       exp->elts[pc + 1].block);
3303           exp = *expp;
3304         }
3305       break;
3306
3307     case OP_FUNCALL:
3308       {
3309         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3310             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3311           {
3312             struct ada_symbol_info *candidates;
3313             int n_candidates;
3314
3315             n_candidates =
3316               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3317                                       (exp->elts[pc + 5].symbol),
3318                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3319                                       &candidates);
3320             if (n_candidates == 1)
3321               i = 0;
3322             else
3323               {
3324                 i = ada_resolve_function
3325                   (candidates, n_candidates,
3326                    argvec, nargs,
3327                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3328                    context_type);
3329                 if (i < 0)
3330                   error (_("Could not find a match for %s"),
3331                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3332               }
3333
3334             exp->elts[pc + 4].block = candidates[i].block;
3335             exp->elts[pc + 5].symbol = candidates[i].sym;
3336             if (innermost_block == NULL
3337                 || contained_in (candidates[i].block, innermost_block))
3338               innermost_block = candidates[i].block;
3339           }
3340       }
3341       break;
3342     case BINOP_ADD:
3343     case BINOP_SUB:
3344     case BINOP_MUL:
3345     case BINOP_DIV:
3346     case BINOP_REM:
3347     case BINOP_MOD:
3348     case BINOP_CONCAT:
3349     case BINOP_BITWISE_AND:
3350     case BINOP_BITWISE_IOR:
3351     case BINOP_BITWISE_XOR:
3352     case BINOP_EQUAL:
3353     case BINOP_NOTEQUAL:
3354     case BINOP_LESS:
3355     case BINOP_GTR:
3356     case BINOP_LEQ:
3357     case BINOP_GEQ:
3358     case BINOP_EXP:
3359     case UNOP_NEG:
3360     case UNOP_PLUS:
3361     case UNOP_LOGICAL_NOT:
3362     case UNOP_ABS:
3363       if (possible_user_operator_p (op, argvec))
3364         {
3365           struct ada_symbol_info *candidates;
3366           int n_candidates;
3367
3368           n_candidates =
3369             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3370                                     (struct block *) NULL, VAR_DOMAIN,
3371                                     &candidates);
3372           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3373                                     ada_decoded_op_name (op), NULL);
3374           if (i < 0)
3375             break;
3376
3377           replace_operator_with_call (expp, pc, nargs, 1,
3378                                       candidates[i].sym, candidates[i].block);
3379           exp = *expp;
3380         }
3381       break;
3382
3383     case OP_TYPE:
3384     case OP_REGISTER:
3385       return NULL;
3386     }
3387
3388   *pos = pc;
3389   return evaluate_subexp_type (exp, pos);
3390 }
3391
3392 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3393    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3394    a non-pointer.  */
3395 /* The term "match" here is rather loose.  The match is heuristic and
3396    liberal.  */
3397
3398 static int
3399 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3400 {
3401   ftype = ada_check_typedef (ftype);
3402   atype = ada_check_typedef (atype);
3403
3404   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3405     ftype = TYPE_TARGET_TYPE (ftype);
3406   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3407     atype = TYPE_TARGET_TYPE (atype);
3408
3409   switch (TYPE_CODE (ftype))
3410     {
3411     default:
3412       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3413     case TYPE_CODE_PTR:
3414       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3415         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3416                                TYPE_TARGET_TYPE (atype), 0);
3417       else
3418         return (may_deref
3419                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3420     case TYPE_CODE_INT:
3421     case TYPE_CODE_ENUM:
3422     case TYPE_CODE_RANGE:
3423       switch (TYPE_CODE (atype))
3424         {
3425         case TYPE_CODE_INT:
3426         case TYPE_CODE_ENUM:
3427         case TYPE_CODE_RANGE:
3428           return 1;
3429         default:
3430           return 0;
3431         }
3432
3433     case TYPE_CODE_ARRAY:
3434       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3435               || ada_is_array_descriptor_type (atype));
3436
3437     case TYPE_CODE_STRUCT:
3438       if (ada_is_array_descriptor_type (ftype))
3439         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3440                 || ada_is_array_descriptor_type (atype));
3441       else
3442         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3443                 && !ada_is_array_descriptor_type (atype));
3444
3445     case TYPE_CODE_UNION:
3446     case TYPE_CODE_FLT:
3447       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3448     }
3449 }
3450
3451 /* Return non-zero if the formals of FUNC "sufficiently match" the
3452    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3453    may also be an enumeral, in which case it is treated as a 0-
3454    argument function.  */
3455
3456 static int
3457 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3458 {
3459   int i;
3460   struct type *func_type = SYMBOL_TYPE (func);
3461
3462   if (SYMBOL_CLASS (func) == LOC_CONST
3463       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3464     return (n_actuals == 0);
3465   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3466     return 0;
3467
3468   if (TYPE_NFIELDS (func_type) != n_actuals)
3469     return 0;
3470
3471   for (i = 0; i < n_actuals; i += 1)
3472     {
3473       if (actuals[i] == NULL)
3474         return 0;
3475       else
3476         {
3477           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3478                                                                    i));
3479           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3480
3481           if (!ada_type_match (ftype, atype, 1))
3482             return 0;
3483         }
3484     }
3485   return 1;
3486 }
3487
3488 /* False iff function type FUNC_TYPE definitely does not produce a value
3489    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3490    FUNC_TYPE is not a valid function type with a non-null return type
3491    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3492
3493 static int
3494 return_match (struct type *func_type, struct type *context_type)
3495 {
3496   struct type *return_type;
3497
3498   if (func_type == NULL)
3499     return 1;
3500
3501   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3502     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3503   else
3504     return_type = get_base_type (func_type);
3505   if (return_type == NULL)
3506     return 1;
3507
3508   context_type = get_base_type (context_type);
3509
3510   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3511     return context_type == NULL || return_type == context_type;
3512   else if (context_type == NULL)
3513     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3514   else
3515     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3516 }
3517
3518
3519 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3520    function (if any) that matches the types of the NARGS arguments in
3521    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3522    that returns that type, then eliminate matches that don't.  If
3523    CONTEXT_TYPE is void and there is at least one match that does not
3524    return void, eliminate all matches that do.
3525
3526    Asks the user if there is more than one match remaining.  Returns -1
3527    if there is no such symbol or none is selected.  NAME is used
3528    solely for messages.  May re-arrange and modify SYMS in
3529    the process; the index returned is for the modified vector.  */
3530
3531 static int
3532 ada_resolve_function (struct ada_symbol_info syms[],
3533                       int nsyms, struct value **args, int nargs,
3534                       const char *name, struct type *context_type)
3535 {
3536   int fallback;
3537   int k;
3538   int m;                        /* Number of hits */
3539
3540   m = 0;
3541   /* In the first pass of the loop, we only accept functions matching
3542      context_type.  If none are found, we add a second pass of the loop
3543      where every function is accepted.  */
3544   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3545     {
3546       for (k = 0; k < nsyms; k += 1)
3547         {
3548           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3549
3550           if (ada_args_match (syms[k].sym, args, nargs)
3551               && (fallback || return_match (type, context_type)))
3552             {
3553               syms[m] = syms[k];
3554               m += 1;
3555             }
3556         }
3557     }
3558
3559   if (m == 0)
3560     return -1;
3561   else if (m > 1)
3562     {
3563       printf_filtered (_("Multiple matches for %s\n"), name);
3564       user_select_syms (syms, m, 1);
3565       return 0;
3566     }
3567   return 0;
3568 }
3569
3570 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3571    in a listing of choices during disambiguation (see sort_choices, below).
3572    The idea is that overloadings of a subprogram name from the
3573    same package should sort in their source order.  We settle for ordering
3574    such symbols by their trailing number (__N  or $N).  */
3575
3576 static int
3577 encoded_ordered_before (const char *N0, const char *N1)
3578 {
3579   if (N1 == NULL)
3580     return 0;
3581   else if (N0 == NULL)
3582     return 1;
3583   else
3584     {
3585       int k0, k1;
3586
3587       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3588         ;
3589       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3590         ;
3591       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3592           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3593         {
3594           int n0, n1;
3595
3596           n0 = k0;
3597           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3598             n0 -= 1;
3599           n1 = k1;
3600           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3601             n1 -= 1;
3602           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3603             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3604         }
3605       return (strcmp (N0, N1) < 0);
3606     }
3607 }
3608
3609 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3610    encoded names.  */
3611
3612 static void
3613 sort_choices (struct ada_symbol_info syms[], int nsyms)
3614 {
3615   int i;
3616
3617   for (i = 1; i < nsyms; i += 1)
3618     {
3619       struct ada_symbol_info sym = syms[i];
3620       int j;
3621
3622       for (j = i - 1; j >= 0; j -= 1)
3623         {
3624           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3625                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3626             break;
3627           syms[j + 1] = syms[j];
3628         }
3629       syms[j + 1] = sym;
3630     }
3631 }
3632
3633 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3634    by asking the user (if necessary), returning the number selected, 
3635    and setting the first elements of SYMS items.  Error if no symbols
3636    selected.  */
3637
3638 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3639    to be re-integrated one of these days.  */
3640
3641 int
3642 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3643 {
3644   int i;
3645   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3646   int n_chosen;
3647   int first_choice = (max_results == 1) ? 1 : 2;
3648   const char *select_mode = multiple_symbols_select_mode ();
3649
3650   if (max_results < 1)
3651     error (_("Request to select 0 symbols!"));
3652   if (nsyms <= 1)
3653     return nsyms;
3654
3655   if (select_mode == multiple_symbols_cancel)
3656     error (_("\
3657 canceled because the command is ambiguous\n\
3658 See set/show multiple-symbol."));
3659   
3660   /* If select_mode is "all", then return all possible symbols.
3661      Only do that if more than one symbol can be selected, of course.
3662      Otherwise, display the menu as usual.  */
3663   if (select_mode == multiple_symbols_all && max_results > 1)
3664     return nsyms;
3665
3666   printf_unfiltered (_("[0] cancel\n"));
3667   if (max_results > 1)
3668     printf_unfiltered (_("[1] all\n"));
3669
3670   sort_choices (syms, nsyms);
3671
3672   for (i = 0; i < nsyms; i += 1)
3673     {
3674       if (syms[i].sym == NULL)
3675         continue;
3676
3677       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3678         {
3679           struct symtab_and_line sal =
3680             find_function_start_sal (syms[i].sym, 1);
3681
3682           if (sal.symtab == NULL)
3683             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3684                                i + first_choice,
3685                                SYMBOL_PRINT_NAME (syms[i].sym),
3686                                sal.line);
3687           else
3688             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3689                                SYMBOL_PRINT_NAME (syms[i].sym),
3690                                symtab_to_filename_for_display (sal.symtab),
3691                                sal.line);
3692           continue;
3693         }
3694       else
3695         {
3696           int is_enumeral =
3697             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3698              && SYMBOL_TYPE (syms[i].sym) != NULL
3699              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3700           struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
3701
3702           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3703             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3704                                i + first_choice,
3705                                SYMBOL_PRINT_NAME (syms[i].sym),
3706                                symtab_to_filename_for_display (symtab),
3707                                SYMBOL_LINE (syms[i].sym));
3708           else if (is_enumeral
3709                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3710             {
3711               printf_unfiltered (("[%d] "), i + first_choice);
3712               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3713                               gdb_stdout, -1, 0, &type_print_raw_options);
3714               printf_unfiltered (_("'(%s) (enumeral)\n"),
3715                                  SYMBOL_PRINT_NAME (syms[i].sym));
3716             }
3717           else if (symtab != NULL)
3718             printf_unfiltered (is_enumeral
3719                                ? _("[%d] %s in %s (enumeral)\n")
3720                                : _("[%d] %s at %s:?\n"),
3721                                i + first_choice,
3722                                SYMBOL_PRINT_NAME (syms[i].sym),
3723                                symtab_to_filename_for_display (symtab));
3724           else
3725             printf_unfiltered (is_enumeral
3726                                ? _("[%d] %s (enumeral)\n")
3727                                : _("[%d] %s at ?\n"),
3728                                i + first_choice,
3729                                SYMBOL_PRINT_NAME (syms[i].sym));
3730         }
3731     }
3732
3733   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3734                              "overload-choice");
3735
3736   for (i = 0; i < n_chosen; i += 1)
3737     syms[i] = syms[chosen[i]];
3738
3739   return n_chosen;
3740 }
3741
3742 /* Read and validate a set of numeric choices from the user in the
3743    range 0 .. N_CHOICES-1.  Place the results in increasing
3744    order in CHOICES[0 .. N-1], and return N.
3745
3746    The user types choices as a sequence of numbers on one line
3747    separated by blanks, encoding them as follows:
3748
3749      + A choice of 0 means to cancel the selection, throwing an error.
3750      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3751      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3752
3753    The user is not allowed to choose more than MAX_RESULTS values.
3754
3755    ANNOTATION_SUFFIX, if present, is used to annotate the input
3756    prompts (for use with the -f switch).  */
3757
3758 int
3759 get_selections (int *choices, int n_choices, int max_results,
3760                 int is_all_choice, char *annotation_suffix)
3761 {
3762   char *args;
3763   char *prompt;
3764   int n_chosen;
3765   int first_choice = is_all_choice ? 2 : 1;
3766
3767   prompt = getenv ("PS2");
3768   if (prompt == NULL)
3769     prompt = "> ";
3770
3771   args = command_line_input (prompt, 0, annotation_suffix);
3772
3773   if (args == NULL)
3774     error_no_arg (_("one or more choice numbers"));
3775
3776   n_chosen = 0;
3777
3778   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3779      order, as given in args.  Choices are validated.  */
3780   while (1)
3781     {
3782       char *args2;
3783       int choice, j;
3784
3785       args = skip_spaces (args);
3786       if (*args == '\0' && n_chosen == 0)
3787         error_no_arg (_("one or more choice numbers"));
3788       else if (*args == '\0')
3789         break;
3790
3791       choice = strtol (args, &args2, 10);
3792       if (args == args2 || choice < 0
3793           || choice > n_choices + first_choice - 1)
3794         error (_("Argument must be choice number"));
3795       args = args2;
3796
3797       if (choice == 0)
3798         error (_("cancelled"));
3799
3800       if (choice < first_choice)
3801         {
3802           n_chosen = n_choices;
3803           for (j = 0; j < n_choices; j += 1)
3804             choices[j] = j;
3805           break;
3806         }
3807       choice -= first_choice;
3808
3809       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3810         {
3811         }
3812
3813       if (j < 0 || choice != choices[j])
3814         {
3815           int k;
3816
3817           for (k = n_chosen - 1; k > j; k -= 1)
3818             choices[k + 1] = choices[k];
3819           choices[j + 1] = choice;
3820           n_chosen += 1;
3821         }
3822     }
3823
3824   if (n_chosen > max_results)
3825     error (_("Select no more than %d of the above"), max_results);
3826
3827   return n_chosen;
3828 }
3829
3830 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3831    on the function identified by SYM and BLOCK, and taking NARGS
3832    arguments.  Update *EXPP as needed to hold more space.  */
3833
3834 static void
3835 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3836                             int oplen, struct symbol *sym,
3837                             const struct block *block)
3838 {
3839   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3840      symbol, -oplen for operator being replaced).  */
3841   struct expression *newexp = (struct expression *)
3842     xzalloc (sizeof (struct expression)
3843              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3844   struct expression *exp = *expp;
3845
3846   newexp->nelts = exp->nelts + 7 - oplen;
3847   newexp->language_defn = exp->language_defn;
3848   newexp->gdbarch = exp->gdbarch;
3849   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3850   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3851           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3852
3853   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3854   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3855
3856   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3857   newexp->elts[pc + 4].block = block;
3858   newexp->elts[pc + 5].symbol = sym;
3859
3860   *expp = newexp;
3861   xfree (exp);
3862 }
3863
3864 /* Type-class predicates */
3865
3866 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3867    or FLOAT).  */
3868
3869 static int
3870 numeric_type_p (struct type *type)
3871 {
3872   if (type == NULL)
3873     return 0;
3874   else
3875     {
3876       switch (TYPE_CODE (type))
3877         {
3878         case TYPE_CODE_INT:
3879         case TYPE_CODE_FLT:
3880           return 1;
3881         case TYPE_CODE_RANGE:
3882           return (type == TYPE_TARGET_TYPE (type)
3883                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3884         default:
3885           return 0;
3886         }
3887     }
3888 }
3889
3890 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3891
3892 static int
3893 integer_type_p (struct type *type)
3894 {
3895   if (type == NULL)
3896     return 0;
3897   else
3898     {
3899       switch (TYPE_CODE (type))
3900         {
3901         case TYPE_CODE_INT:
3902           return 1;
3903         case TYPE_CODE_RANGE:
3904           return (type == TYPE_TARGET_TYPE (type)
3905                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3906         default:
3907           return 0;
3908         }
3909     }
3910 }
3911
3912 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3913
3914 static int
3915 scalar_type_p (struct type *type)
3916 {
3917   if (type == NULL)
3918     return 0;
3919   else
3920     {
3921       switch (TYPE_CODE (type))
3922         {
3923         case TYPE_CODE_INT:
3924         case TYPE_CODE_RANGE:
3925         case TYPE_CODE_ENUM:
3926         case TYPE_CODE_FLT:
3927           return 1;
3928         default:
3929           return 0;
3930         }
3931     }
3932 }
3933
3934 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3935
3936 static int
3937 discrete_type_p (struct type *type)
3938 {
3939   if (type == NULL)
3940     return 0;
3941   else
3942     {
3943       switch (TYPE_CODE (type))
3944         {
3945         case TYPE_CODE_INT:
3946         case TYPE_CODE_RANGE:
3947         case TYPE_CODE_ENUM:
3948         case TYPE_CODE_BOOL:
3949           return 1;
3950         default:
3951           return 0;
3952         }
3953     }
3954 }
3955
3956 /* Returns non-zero if OP with operands in the vector ARGS could be
3957    a user-defined function.  Errs on the side of pre-defined operators
3958    (i.e., result 0).  */
3959
3960 static int
3961 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3962 {
3963   struct type *type0 =
3964     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3965   struct type *type1 =
3966     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3967
3968   if (type0 == NULL)
3969     return 0;
3970
3971   switch (op)
3972     {
3973     default:
3974       return 0;
3975
3976     case BINOP_ADD:
3977     case BINOP_SUB:
3978     case BINOP_MUL:
3979     case BINOP_DIV:
3980       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3981
3982     case BINOP_REM:
3983     case BINOP_MOD:
3984     case BINOP_BITWISE_AND:
3985     case BINOP_BITWISE_IOR:
3986     case BINOP_BITWISE_XOR:
3987       return (!(integer_type_p (type0) && integer_type_p (type1)));
3988
3989     case BINOP_EQUAL:
3990     case BINOP_NOTEQUAL:
3991     case BINOP_LESS:
3992     case BINOP_GTR:
3993     case BINOP_LEQ:
3994     case BINOP_GEQ:
3995       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3996
3997     case BINOP_CONCAT:
3998       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3999
4000     case BINOP_EXP:
4001       return (!(numeric_type_p (type0) && integer_type_p (type1)));
4002
4003     case UNOP_NEG:
4004     case UNOP_PLUS:
4005     case UNOP_LOGICAL_NOT:
4006     case UNOP_ABS:
4007       return (!numeric_type_p (type0));
4008
4009     }
4010 }
4011 \f
4012                                 /* Renaming */
4013
4014 /* NOTES: 
4015
4016    1. In the following, we assume that a renaming type's name may
4017       have an ___XD suffix.  It would be nice if this went away at some
4018       point.
4019    2. We handle both the (old) purely type-based representation of 
4020       renamings and the (new) variable-based encoding.  At some point,
4021       it is devoutly to be hoped that the former goes away 
4022       (FIXME: hilfinger-2007-07-09).
4023    3. Subprogram renamings are not implemented, although the XRS
4024       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
4025
4026 /* If SYM encodes a renaming, 
4027
4028        <renaming> renames <renamed entity>,
4029
4030    sets *LEN to the length of the renamed entity's name,
4031    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4032    the string describing the subcomponent selected from the renamed
4033    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4034    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4035    are undefined).  Otherwise, returns a value indicating the category
4036    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4037    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4038    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
4039    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4040    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4041    may be NULL, in which case they are not assigned.
4042
4043    [Currently, however, GCC does not generate subprogram renamings.]  */
4044
4045 enum ada_renaming_category
4046 ada_parse_renaming (struct symbol *sym,
4047                     const char **renamed_entity, int *len, 
4048                     const char **renaming_expr)
4049 {
4050   enum ada_renaming_category kind;
4051   const char *info;
4052   const char *suffix;
4053
4054   if (sym == NULL)
4055     return ADA_NOT_RENAMING;
4056   switch (SYMBOL_CLASS (sym)) 
4057     {
4058     default:
4059       return ADA_NOT_RENAMING;
4060     case LOC_TYPEDEF:
4061       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
4062                                        renamed_entity, len, renaming_expr);
4063     case LOC_LOCAL:
4064     case LOC_STATIC:
4065     case LOC_COMPUTED:
4066     case LOC_OPTIMIZED_OUT:
4067       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4068       if (info == NULL)
4069         return ADA_NOT_RENAMING;
4070       switch (info[5])
4071         {
4072         case '_':
4073           kind = ADA_OBJECT_RENAMING;
4074           info += 6;
4075           break;
4076         case 'E':
4077           kind = ADA_EXCEPTION_RENAMING;
4078           info += 7;
4079           break;
4080         case 'P':
4081           kind = ADA_PACKAGE_RENAMING;
4082           info += 7;
4083           break;
4084         case 'S':
4085           kind = ADA_SUBPROGRAM_RENAMING;
4086           info += 7;
4087           break;
4088         default:
4089           return ADA_NOT_RENAMING;
4090         }
4091     }
4092
4093   if (renamed_entity != NULL)
4094     *renamed_entity = info;
4095   suffix = strstr (info, "___XE");
4096   if (suffix == NULL || suffix == info)
4097     return ADA_NOT_RENAMING;
4098   if (len != NULL)
4099     *len = strlen (info) - strlen (suffix);
4100   suffix += 5;
4101   if (renaming_expr != NULL)
4102     *renaming_expr = suffix;
4103   return kind;
4104 }
4105
4106 /* Assuming TYPE encodes a renaming according to the old encoding in
4107    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4108    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
4109    ADA_NOT_RENAMING otherwise.  */
4110 static enum ada_renaming_category
4111 parse_old_style_renaming (struct type *type,
4112                           const char **renamed_entity, int *len, 
4113                           const char **renaming_expr)
4114 {
4115   enum ada_renaming_category kind;
4116   const char *name;
4117   const char *info;
4118   const char *suffix;
4119
4120   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
4121       || TYPE_NFIELDS (type) != 1)
4122     return ADA_NOT_RENAMING;
4123
4124   name = type_name_no_tag (type);
4125   if (name == NULL)
4126     return ADA_NOT_RENAMING;
4127   
4128   name = strstr (name, "___XR");
4129   if (name == NULL)
4130     return ADA_NOT_RENAMING;
4131   switch (name[5])
4132     {
4133     case '\0':
4134     case '_':
4135       kind = ADA_OBJECT_RENAMING;
4136       break;
4137     case 'E':
4138       kind = ADA_EXCEPTION_RENAMING;
4139       break;
4140     case 'P':
4141       kind = ADA_PACKAGE_RENAMING;
4142       break;
4143     case 'S':
4144       kind = ADA_SUBPROGRAM_RENAMING;
4145       break;
4146     default:
4147       return ADA_NOT_RENAMING;
4148     }
4149
4150   info = TYPE_FIELD_NAME (type, 0);
4151   if (info == NULL)
4152     return ADA_NOT_RENAMING;
4153   if (renamed_entity != NULL)
4154     *renamed_entity = info;
4155   suffix = strstr (info, "___XE");
4156   if (renaming_expr != NULL)
4157     *renaming_expr = suffix + 5;
4158   if (suffix == NULL || suffix == info)
4159     return ADA_NOT_RENAMING;
4160   if (len != NULL)
4161     *len = suffix - info;
4162   return kind;
4163 }
4164
4165 /* Compute the value of the given RENAMING_SYM, which is expected to
4166    be a symbol encoding a renaming expression.  BLOCK is the block
4167    used to evaluate the renaming.  */
4168
4169 static struct value *
4170 ada_read_renaming_var_value (struct symbol *renaming_sym,
4171                              const struct block *block)
4172 {
4173   const char *sym_name;
4174   struct expression *expr;
4175   struct value *value;
4176   struct cleanup *old_chain = NULL;
4177
4178   sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4179   expr = parse_exp_1 (&sym_name, 0, block, 0);
4180   old_chain = make_cleanup (free_current_contents, &expr);
4181   value = evaluate_expression (expr);
4182
4183   do_cleanups (old_chain);
4184   return value;
4185 }
4186 \f
4187
4188                                 /* Evaluation: Function Calls */
4189
4190 /* Return an lvalue containing the value VAL.  This is the identity on
4191    lvalues, and otherwise has the side-effect of allocating memory
4192    in the inferior where a copy of the value contents is copied.  */
4193
4194 static struct value *
4195 ensure_lval (struct value *val)
4196 {
4197   if (VALUE_LVAL (val) == not_lval
4198       || VALUE_LVAL (val) == lval_internalvar)
4199     {
4200       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4201       const CORE_ADDR addr =
4202         value_as_long (value_allocate_space_in_inferior (len));
4203
4204       set_value_address (val, addr);
4205       VALUE_LVAL (val) = lval_memory;
4206       write_memory (addr, value_contents (val), len);
4207     }
4208
4209   return val;
4210 }
4211
4212 /* Return the value ACTUAL, converted to be an appropriate value for a
4213    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4214    allocating any necessary descriptors (fat pointers), or copies of
4215    values not residing in memory, updating it as needed.  */
4216
4217 struct value *
4218 ada_convert_actual (struct value *actual, struct type *formal_type0)
4219 {
4220   struct type *actual_type = ada_check_typedef (value_type (actual));
4221   struct type *formal_type = ada_check_typedef (formal_type0);
4222   struct type *formal_target =
4223     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4224     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4225   struct type *actual_target =
4226     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4227     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4228
4229   if (ada_is_array_descriptor_type (formal_target)
4230       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4231     return make_array_descriptor (formal_type, actual);
4232   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4233            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4234     {
4235       struct value *result;
4236
4237       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4238           && ada_is_array_descriptor_type (actual_target))
4239         result = desc_data (actual);
4240       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4241         {
4242           if (VALUE_LVAL (actual) != lval_memory)
4243             {
4244               struct value *val;
4245
4246               actual_type = ada_check_typedef (value_type (actual));
4247               val = allocate_value (actual_type);
4248               memcpy ((char *) value_contents_raw (val),
4249                       (char *) value_contents (actual),
4250                       TYPE_LENGTH (actual_type));
4251               actual = ensure_lval (val);
4252             }
4253           result = value_addr (actual);
4254         }
4255       else
4256         return actual;
4257       return value_cast_pointers (formal_type, result, 0);
4258     }
4259   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4260     return ada_value_ind (actual);
4261
4262   return actual;
4263 }
4264
4265 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4266    type TYPE.  This is usually an inefficient no-op except on some targets
4267    (such as AVR) where the representation of a pointer and an address
4268    differs.  */
4269
4270 static CORE_ADDR
4271 value_pointer (struct value *value, struct type *type)
4272 {
4273   struct gdbarch *gdbarch = get_type_arch (type);
4274   unsigned len = TYPE_LENGTH (type);
4275   gdb_byte *buf = alloca (len);
4276   CORE_ADDR addr;
4277
4278   addr = value_address (value);
4279   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4280   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4281   return addr;
4282 }
4283
4284
4285 /* Push a descriptor of type TYPE for array value ARR on the stack at
4286    *SP, updating *SP to reflect the new descriptor.  Return either
4287    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4288    to-descriptor type rather than a descriptor type), a struct value *
4289    representing a pointer to this descriptor.  */
4290
4291 static struct value *
4292 make_array_descriptor (struct type *type, struct value *arr)
4293 {
4294   struct type *bounds_type = desc_bounds_type (type);
4295   struct type *desc_type = desc_base_type (type);
4296   struct value *descriptor = allocate_value (desc_type);
4297   struct value *bounds = allocate_value (bounds_type);
4298   int i;
4299
4300   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4301        i > 0; i -= 1)
4302     {
4303       modify_field (value_type (bounds), value_contents_writeable (bounds),
4304                     ada_array_bound (arr, i, 0),
4305                     desc_bound_bitpos (bounds_type, i, 0),
4306                     desc_bound_bitsize (bounds_type, i, 0));
4307       modify_field (value_type (bounds), value_contents_writeable (bounds),
4308                     ada_array_bound (arr, i, 1),
4309                     desc_bound_bitpos (bounds_type, i, 1),
4310                     desc_bound_bitsize (bounds_type, i, 1));
4311     }
4312
4313   bounds = ensure_lval (bounds);
4314
4315   modify_field (value_type (descriptor),
4316                 value_contents_writeable (descriptor),
4317                 value_pointer (ensure_lval (arr),
4318                                TYPE_FIELD_TYPE (desc_type, 0)),
4319                 fat_pntr_data_bitpos (desc_type),
4320                 fat_pntr_data_bitsize (desc_type));
4321
4322   modify_field (value_type (descriptor),
4323                 value_contents_writeable (descriptor),
4324                 value_pointer (bounds,
4325                                TYPE_FIELD_TYPE (desc_type, 1)),
4326                 fat_pntr_bounds_bitpos (desc_type),
4327                 fat_pntr_bounds_bitsize (desc_type));
4328
4329   descriptor = ensure_lval (descriptor);
4330
4331   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4332     return value_addr (descriptor);
4333   else
4334     return descriptor;
4335 }
4336 \f
4337                                 /* Symbol Cache Module */
4338
4339 /* Performance measurements made as of 2010-01-15 indicate that
4340    this cache does bring some noticeable improvements.  Depending
4341    on the type of entity being printed, the cache can make it as much
4342    as an order of magnitude faster than without it.
4343
4344    The descriptive type DWARF extension has significantly reduced
4345    the need for this cache, at least when DWARF is being used.  However,
4346    even in this case, some expensive name-based symbol searches are still
4347    sometimes necessary - to find an XVZ variable, mostly.  */
4348
4349 /* Initialize the contents of SYM_CACHE.  */
4350
4351 static void
4352 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4353 {
4354   obstack_init (&sym_cache->cache_space);
4355   memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4356 }
4357
4358 /* Free the memory used by SYM_CACHE.  */
4359
4360 static void
4361 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4362 {
4363   obstack_free (&sym_cache->cache_space, NULL);
4364   xfree (sym_cache);
4365 }
4366
4367 /* Return the symbol cache associated to the given program space PSPACE.
4368    If not allocated for this PSPACE yet, allocate and initialize one.  */
4369
4370 static struct ada_symbol_cache *
4371 ada_get_symbol_cache (struct program_space *pspace)
4372 {
4373   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4374   struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4375
4376   if (sym_cache == NULL)
4377     {
4378       sym_cache = XCNEW (struct ada_symbol_cache);
4379       ada_init_symbol_cache (sym_cache);
4380     }
4381
4382   return sym_cache;
4383 }
4384
4385 /* Clear all entries from the symbol cache.  */
4386
4387 static void
4388 ada_clear_symbol_cache (void)
4389 {
4390   struct ada_symbol_cache *sym_cache
4391     = ada_get_symbol_cache (current_program_space);
4392
4393   obstack_free (&sym_cache->cache_space, NULL);
4394   ada_init_symbol_cache (sym_cache);
4395 }
4396
4397 /* Search our cache for an entry matching NAME and NAMESPACE.
4398    Return it if found, or NULL otherwise.  */
4399
4400 static struct cache_entry **
4401 find_entry (const char *name, domain_enum namespace)
4402 {
4403   struct ada_symbol_cache *sym_cache
4404     = ada_get_symbol_cache (current_program_space);
4405   int h = msymbol_hash (name) % HASH_SIZE;
4406   struct cache_entry **e;
4407
4408   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4409     {
4410       if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4411         return e;
4412     }
4413   return NULL;
4414 }
4415
4416 /* Search the symbol cache for an entry matching NAME and NAMESPACE.
4417    Return 1 if found, 0 otherwise.
4418
4419    If an entry was found and SYM is not NULL, set *SYM to the entry's
4420    SYM.  Same principle for BLOCK if not NULL.  */
4421
4422 static int
4423 lookup_cached_symbol (const char *name, domain_enum namespace,
4424                       struct symbol **sym, const struct block **block)
4425 {
4426   struct cache_entry **e = find_entry (name, namespace);
4427
4428   if (e == NULL)
4429     return 0;
4430   if (sym != NULL)
4431     *sym = (*e)->sym;
4432   if (block != NULL)
4433     *block = (*e)->block;
4434   return 1;
4435 }
4436
4437 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4438    in domain NAMESPACE, save this result in our symbol cache.  */
4439
4440 static void
4441 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
4442               const struct block *block)
4443 {
4444   struct ada_symbol_cache *sym_cache
4445     = ada_get_symbol_cache (current_program_space);
4446   int h;
4447   char *copy;
4448   struct cache_entry *e;
4449
4450   /* If the symbol is a local symbol, then do not cache it, as a search
4451      for that symbol depends on the context.  To determine whether
4452      the symbol is local or not, we check the block where we found it
4453      against the global and static blocks of its associated symtab.  */
4454   if (sym
4455       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), GLOBAL_BLOCK) != block
4456       && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), STATIC_BLOCK) != block)
4457     return;
4458
4459   h = msymbol_hash (name) % HASH_SIZE;
4460   e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4461                                             sizeof (*e));
4462   e->next = sym_cache->root[h];
4463   sym_cache->root[h] = e;
4464   e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4465   strcpy (copy, name);
4466   e->sym = sym;
4467   e->namespace = namespace;
4468   e->block = block;
4469 }
4470 \f
4471                                 /* Symbol Lookup */
4472
4473 /* Return nonzero if wild matching should be used when searching for
4474    all symbols matching LOOKUP_NAME.
4475
4476    LOOKUP_NAME is expected to be a symbol name after transformation
4477    for Ada lookups (see ada_name_for_lookup).  */
4478
4479 static int
4480 should_use_wild_match (const char *lookup_name)
4481 {
4482   return (strstr (lookup_name, "__") == NULL);
4483 }
4484
4485 /* Return the result of a standard (literal, C-like) lookup of NAME in
4486    given DOMAIN, visible from lexical block BLOCK.  */
4487
4488 static struct symbol *
4489 standard_lookup (const char *name, const struct block *block,
4490                  domain_enum domain)
4491 {
4492   /* Initialize it just to avoid a GCC false warning.  */
4493   struct symbol *sym = NULL;
4494
4495   if (lookup_cached_symbol (name, domain, &sym, NULL))
4496     return sym;
4497   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4498   cache_symbol (name, domain, sym, block_found);
4499   return sym;
4500 }
4501
4502
4503 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4504    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4505    since they contend in overloading in the same way.  */
4506 static int
4507 is_nonfunction (struct ada_symbol_info syms[], int n)
4508 {
4509   int i;
4510
4511   for (i = 0; i < n; i += 1)
4512     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4513         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4514             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4515       return 1;
4516
4517   return 0;
4518 }
4519
4520 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4521    struct types.  Otherwise, they may not.  */
4522
4523 static int
4524 equiv_types (struct type *type0, struct type *type1)
4525 {
4526   if (type0 == type1)
4527     return 1;
4528   if (type0 == NULL || type1 == NULL
4529       || TYPE_CODE (type0) != TYPE_CODE (type1))
4530     return 0;
4531   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4532        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4533       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4534       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4535     return 1;
4536
4537   return 0;
4538 }
4539
4540 /* True iff SYM0 represents the same entity as SYM1, or one that is
4541    no more defined than that of SYM1.  */
4542
4543 static int
4544 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4545 {
4546   if (sym0 == sym1)
4547     return 1;
4548   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4549       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4550     return 0;
4551
4552   switch (SYMBOL_CLASS (sym0))
4553     {
4554     case LOC_UNDEF:
4555       return 1;
4556     case LOC_TYPEDEF:
4557       {
4558         struct type *type0 = SYMBOL_TYPE (sym0);
4559         struct type *type1 = SYMBOL_TYPE (sym1);
4560         const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4561         const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4562         int len0 = strlen (name0);
4563
4564         return
4565           TYPE_CODE (type0) == TYPE_CODE (type1)
4566           && (equiv_types (type0, type1)
4567               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4568                   && strncmp (name1 + len0, "___XV", 5) == 0));
4569       }
4570     case LOC_CONST:
4571       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4572         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4573     default:
4574       return 0;
4575     }
4576 }
4577
4578 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4579    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4580
4581 static void
4582 add_defn_to_vec (struct obstack *obstackp,
4583                  struct symbol *sym,
4584                  const struct block *block)
4585 {
4586   int i;
4587   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4588
4589   /* Do not try to complete stub types, as the debugger is probably
4590      already scanning all symbols matching a certain name at the
4591      time when this function is called.  Trying to replace the stub
4592      type by its associated full type will cause us to restart a scan
4593      which may lead to an infinite recursion.  Instead, the client
4594      collecting the matching symbols will end up collecting several
4595      matches, with at least one of them complete.  It can then filter
4596      out the stub ones if needed.  */
4597
4598   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4599     {
4600       if (lesseq_defined_than (sym, prevDefns[i].sym))
4601         return;
4602       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4603         {
4604           prevDefns[i].sym = sym;
4605           prevDefns[i].block = block;
4606           return;
4607         }
4608     }
4609
4610   {
4611     struct ada_symbol_info info;
4612
4613     info.sym = sym;
4614     info.block = block;
4615     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4616   }
4617 }
4618
4619 /* Number of ada_symbol_info structures currently collected in 
4620    current vector in *OBSTACKP.  */
4621
4622 static int
4623 num_defns_collected (struct obstack *obstackp)
4624 {
4625   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4626 }
4627
4628 /* Vector of ada_symbol_info structures currently collected in current 
4629    vector in *OBSTACKP.  If FINISH, close off the vector and return
4630    its final address.  */
4631
4632 static struct ada_symbol_info *
4633 defns_collected (struct obstack *obstackp, int finish)
4634 {
4635   if (finish)
4636     return obstack_finish (obstackp);
4637   else
4638     return (struct ada_symbol_info *) obstack_base (obstackp);
4639 }
4640
4641 /* Return a bound minimal symbol matching NAME according to Ada
4642    decoding rules.  Returns an invalid symbol if there is no such
4643    minimal symbol.  Names prefixed with "standard__" are handled
4644    specially: "standard__" is first stripped off, and only static and
4645    global symbols are searched.  */
4646
4647 struct bound_minimal_symbol
4648 ada_lookup_simple_minsym (const char *name)
4649 {
4650   struct bound_minimal_symbol result;
4651   struct objfile *objfile;
4652   struct minimal_symbol *msymbol;
4653   const int wild_match_p = should_use_wild_match (name);
4654
4655   memset (&result, 0, sizeof (result));
4656
4657   /* Special case: If the user specifies a symbol name inside package
4658      Standard, do a non-wild matching of the symbol name without
4659      the "standard__" prefix.  This was primarily introduced in order
4660      to allow the user to specifically access the standard exceptions
4661      using, for instance, Standard.Constraint_Error when Constraint_Error
4662      is ambiguous (due to the user defining its own Constraint_Error
4663      entity inside its program).  */
4664   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4665     name += sizeof ("standard__") - 1;
4666
4667   ALL_MSYMBOLS (objfile, msymbol)
4668   {
4669     if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4670         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4671       {
4672         result.minsym = msymbol;
4673         result.objfile = objfile;
4674         break;
4675       }
4676   }
4677
4678   return result;
4679 }
4680
4681 /* For all subprograms that statically enclose the subprogram of the
4682    selected frame, add symbols matching identifier NAME in DOMAIN
4683    and their blocks to the list of data in OBSTACKP, as for
4684    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
4685    with a wildcard prefix.  */
4686
4687 static void
4688 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4689                                   const char *name, domain_enum namespace,
4690                                   int wild_match_p)
4691 {
4692 }
4693
4694 /* True if TYPE is definitely an artificial type supplied to a symbol
4695    for which no debugging information was given in the symbol file.  */
4696
4697 static int
4698 is_nondebugging_type (struct type *type)
4699 {
4700   const char *name = ada_type_name (type);
4701
4702   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4703 }
4704
4705 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4706    that are deemed "identical" for practical purposes.
4707
4708    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4709    types and that their number of enumerals is identical (in other
4710    words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
4711
4712 static int
4713 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4714 {
4715   int i;
4716
4717   /* The heuristic we use here is fairly conservative.  We consider
4718      that 2 enumerate types are identical if they have the same
4719      number of enumerals and that all enumerals have the same
4720      underlying value and name.  */
4721
4722   /* All enums in the type should have an identical underlying value.  */
4723   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4724     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4725       return 0;
4726
4727   /* All enumerals should also have the same name (modulo any numerical
4728      suffix).  */
4729   for (i = 0; i < TYPE_NFIELDS (type1); i++)
4730     {
4731       const char *name_1 = TYPE_FIELD_NAME (type1, i);
4732       const char *name_2 = TYPE_FIELD_NAME (type2, i);
4733       int len_1 = strlen (name_1);
4734       int len_2 = strlen (name_2);
4735
4736       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4737       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4738       if (len_1 != len_2
4739           || strncmp (TYPE_FIELD_NAME (type1, i),
4740                       TYPE_FIELD_NAME (type2, i),
4741                       len_1) != 0)
4742         return 0;
4743     }
4744
4745   return 1;
4746 }
4747
4748 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4749    that are deemed "identical" for practical purposes.  Sometimes,
4750    enumerals are not strictly identical, but their types are so similar
4751    that they can be considered identical.
4752
4753    For instance, consider the following code:
4754
4755       type Color is (Black, Red, Green, Blue, White);
4756       type RGB_Color is new Color range Red .. Blue;
4757
4758    Type RGB_Color is a subrange of an implicit type which is a copy
4759    of type Color. If we call that implicit type RGB_ColorB ("B" is
4760    for "Base Type"), then type RGB_ColorB is a copy of type Color.
4761    As a result, when an expression references any of the enumeral
4762    by name (Eg. "print green"), the expression is technically
4763    ambiguous and the user should be asked to disambiguate. But
4764    doing so would only hinder the user, since it wouldn't matter
4765    what choice he makes, the outcome would always be the same.
4766    So, for practical purposes, we consider them as the same.  */
4767
4768 static int
4769 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4770 {
4771   int i;
4772
4773   /* Before performing a thorough comparison check of each type,
4774      we perform a series of inexpensive checks.  We expect that these
4775      checks will quickly fail in the vast majority of cases, and thus
4776      help prevent the unnecessary use of a more expensive comparison.
4777      Said comparison also expects us to make some of these checks
4778      (see ada_identical_enum_types_p).  */
4779
4780   /* Quick check: All symbols should have an enum type.  */
4781   for (i = 0; i < nsyms; i++)
4782     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4783       return 0;
4784
4785   /* Quick check: They should all have the same value.  */
4786   for (i = 1; i < nsyms; i++)
4787     if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4788       return 0;
4789
4790   /* Quick check: They should all have the same number of enumerals.  */
4791   for (i = 1; i < nsyms; i++)
4792     if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4793         != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4794       return 0;
4795
4796   /* All the sanity checks passed, so we might have a set of
4797      identical enumeration types.  Perform a more complete
4798      comparison of the type of each symbol.  */
4799   for (i = 1; i < nsyms; i++)
4800     if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4801                                      SYMBOL_TYPE (syms[0].sym)))
4802       return 0;
4803
4804   return 1;
4805 }
4806
4807 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4808    duplicate other symbols in the list (The only case I know of where
4809    this happens is when object files containing stabs-in-ecoff are
4810    linked with files containing ordinary ecoff debugging symbols (or no
4811    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4812    Returns the number of items in the modified list.  */
4813
4814 static int
4815 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4816 {
4817   int i, j;
4818
4819   /* We should never be called with less than 2 symbols, as there
4820      cannot be any extra symbol in that case.  But it's easy to
4821      handle, since we have nothing to do in that case.  */
4822   if (nsyms < 2)
4823     return nsyms;
4824
4825   i = 0;
4826   while (i < nsyms)
4827     {
4828       int remove_p = 0;
4829
4830       /* If two symbols have the same name and one of them is a stub type,
4831          the get rid of the stub.  */
4832
4833       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4834           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4835         {
4836           for (j = 0; j < nsyms; j++)
4837             {
4838               if (j != i
4839                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4840                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4841                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4842                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4843                 remove_p = 1;
4844             }
4845         }
4846
4847       /* Two symbols with the same name, same class and same address
4848          should be identical.  */
4849
4850       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4851           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4852           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4853         {
4854           for (j = 0; j < nsyms; j += 1)
4855             {
4856               if (i != j
4857                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4858                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4859                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4860                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4861                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4862                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4863                 remove_p = 1;
4864             }
4865         }
4866       
4867       if (remove_p)
4868         {
4869           for (j = i + 1; j < nsyms; j += 1)
4870             syms[j - 1] = syms[j];
4871           nsyms -= 1;
4872         }
4873
4874       i += 1;
4875     }
4876
4877   /* If all the remaining symbols are identical enumerals, then
4878      just keep the first one and discard the rest.
4879
4880      Unlike what we did previously, we do not discard any entry
4881      unless they are ALL identical.  This is because the symbol
4882      comparison is not a strict comparison, but rather a practical
4883      comparison.  If all symbols are considered identical, then
4884      we can just go ahead and use the first one and discard the rest.
4885      But if we cannot reduce the list to a single element, we have
4886      to ask the user to disambiguate anyways.  And if we have to
4887      present a multiple-choice menu, it's less confusing if the list
4888      isn't missing some choices that were identical and yet distinct.  */
4889   if (symbols_are_identical_enums (syms, nsyms))
4890     nsyms = 1;
4891
4892   return nsyms;
4893 }
4894
4895 /* Given a type that corresponds to a renaming entity, use the type name
4896    to extract the scope (package name or function name, fully qualified,
4897    and following the GNAT encoding convention) where this renaming has been
4898    defined.  The string returned needs to be deallocated after use.  */
4899
4900 static char *
4901 xget_renaming_scope (struct type *renaming_type)
4902 {
4903   /* The renaming types adhere to the following convention:
4904      <scope>__<rename>___<XR extension>.
4905      So, to extract the scope, we search for the "___XR" extension,
4906      and then backtrack until we find the first "__".  */
4907
4908   const char *name = type_name_no_tag (renaming_type);
4909   char *suffix = strstr (name, "___XR");
4910   char *last;
4911   int scope_len;
4912   char *scope;
4913
4914   /* Now, backtrack a bit until we find the first "__".  Start looking
4915      at suffix - 3, as the <rename> part is at least one character long.  */
4916
4917   for (last = suffix - 3; last > name; last--)
4918     if (last[0] == '_' && last[1] == '_')
4919       break;
4920
4921   /* Make a copy of scope and return it.  */
4922
4923   scope_len = last - name;
4924   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4925
4926   strncpy (scope, name, scope_len);
4927   scope[scope_len] = '\0';
4928
4929   return scope;
4930 }
4931
4932 /* Return nonzero if NAME corresponds to a package name.  */
4933
4934 static int
4935 is_package_name (const char *name)
4936 {
4937   /* Here, We take advantage of the fact that no symbols are generated
4938      for packages, while symbols are generated for each function.
4939      So the condition for NAME represent a package becomes equivalent
4940      to NAME not existing in our list of symbols.  There is only one
4941      small complication with library-level functions (see below).  */
4942
4943   char *fun_name;
4944
4945   /* If it is a function that has not been defined at library level,
4946      then we should be able to look it up in the symbols.  */
4947   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4948     return 0;
4949
4950   /* Library-level function names start with "_ada_".  See if function
4951      "_ada_" followed by NAME can be found.  */
4952
4953   /* Do a quick check that NAME does not contain "__", since library-level
4954      functions names cannot contain "__" in them.  */
4955   if (strstr (name, "__") != NULL)
4956     return 0;
4957
4958   fun_name = xstrprintf ("_ada_%s", name);
4959
4960   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4961 }
4962
4963 /* Return nonzero if SYM corresponds to a renaming entity that is
4964    not visible from FUNCTION_NAME.  */
4965
4966 static int
4967 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
4968 {
4969   char *scope;
4970   struct cleanup *old_chain;
4971
4972   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4973     return 0;
4974
4975   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4976   old_chain = make_cleanup (xfree, scope);
4977
4978   /* If the rename has been defined in a package, then it is visible.  */
4979   if (is_package_name (scope))
4980     {
4981       do_cleanups (old_chain);
4982       return 0;
4983     }
4984
4985   /* Check that the rename is in the current function scope by checking
4986      that its name starts with SCOPE.  */
4987
4988   /* If the function name starts with "_ada_", it means that it is
4989      a library-level function.  Strip this prefix before doing the
4990      comparison, as the encoding for the renaming does not contain
4991      this prefix.  */
4992   if (strncmp (function_name, "_ada_", 5) == 0)
4993     function_name += 5;
4994
4995   {
4996     int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
4997
4998     do_cleanups (old_chain);
4999     return is_invisible;
5000   }
5001 }
5002
5003 /* Remove entries from SYMS that corresponds to a renaming entity that
5004    is not visible from the function associated with CURRENT_BLOCK or
5005    that is superfluous due to the presence of more specific renaming
5006    information.  Places surviving symbols in the initial entries of
5007    SYMS and returns the number of surviving symbols.
5008    
5009    Rationale:
5010    First, in cases where an object renaming is implemented as a
5011    reference variable, GNAT may produce both the actual reference
5012    variable and the renaming encoding.  In this case, we discard the
5013    latter.
5014
5015    Second, GNAT emits a type following a specified encoding for each renaming
5016    entity.  Unfortunately, STABS currently does not support the definition
5017    of types that are local to a given lexical block, so all renamings types
5018    are emitted at library level.  As a consequence, if an application
5019    contains two renaming entities using the same name, and a user tries to
5020    print the value of one of these entities, the result of the ada symbol
5021    lookup will also contain the wrong renaming type.
5022
5023    This function partially covers for this limitation by attempting to
5024    remove from the SYMS list renaming symbols that should be visible
5025    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
5026    method with the current information available.  The implementation
5027    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
5028    
5029       - When the user tries to print a rename in a function while there
5030         is another rename entity defined in a package:  Normally, the
5031         rename in the function has precedence over the rename in the
5032         package, so the latter should be removed from the list.  This is
5033         currently not the case.
5034         
5035       - This function will incorrectly remove valid renames if
5036         the CURRENT_BLOCK corresponds to a function which symbol name
5037         has been changed by an "Export" pragma.  As a consequence,
5038         the user will be unable to print such rename entities.  */
5039
5040 static int
5041 remove_irrelevant_renamings (struct ada_symbol_info *syms,
5042                              int nsyms, const struct block *current_block)
5043 {
5044   struct symbol *current_function;
5045   const char *current_function_name;
5046   int i;
5047   int is_new_style_renaming;
5048
5049   /* If there is both a renaming foo___XR... encoded as a variable and
5050      a simple variable foo in the same block, discard the latter.
5051      First, zero out such symbols, then compress.  */
5052   is_new_style_renaming = 0;
5053   for (i = 0; i < nsyms; i += 1)
5054     {
5055       struct symbol *sym = syms[i].sym;
5056       const struct block *block = syms[i].block;
5057       const char *name;
5058       const char *suffix;
5059
5060       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5061         continue;
5062       name = SYMBOL_LINKAGE_NAME (sym);
5063       suffix = strstr (name, "___XR");
5064
5065       if (suffix != NULL)
5066         {
5067           int name_len = suffix - name;
5068           int j;
5069
5070           is_new_style_renaming = 1;
5071           for (j = 0; j < nsyms; j += 1)
5072             if (i != j && syms[j].sym != NULL
5073                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5074                             name_len) == 0
5075                 && block == syms[j].block)
5076               syms[j].sym = NULL;
5077         }
5078     }
5079   if (is_new_style_renaming)
5080     {
5081       int j, k;
5082
5083       for (j = k = 0; j < nsyms; j += 1)
5084         if (syms[j].sym != NULL)
5085             {
5086               syms[k] = syms[j];
5087               k += 1;
5088             }
5089       return k;
5090     }
5091
5092   /* Extract the function name associated to CURRENT_BLOCK.
5093      Abort if unable to do so.  */
5094
5095   if (current_block == NULL)
5096     return nsyms;
5097
5098   current_function = block_linkage_function (current_block);
5099   if (current_function == NULL)
5100     return nsyms;
5101
5102   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5103   if (current_function_name == NULL)
5104     return nsyms;
5105
5106   /* Check each of the symbols, and remove it from the list if it is
5107      a type corresponding to a renaming that is out of the scope of
5108      the current block.  */
5109
5110   i = 0;
5111   while (i < nsyms)
5112     {
5113       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5114           == ADA_OBJECT_RENAMING
5115           && old_renaming_is_invisible (syms[i].sym, current_function_name))
5116         {
5117           int j;
5118
5119           for (j = i + 1; j < nsyms; j += 1)
5120             syms[j - 1] = syms[j];
5121           nsyms -= 1;
5122         }
5123       else
5124         i += 1;
5125     }
5126
5127   return nsyms;
5128 }
5129
5130 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5131    whose name and domain match NAME and DOMAIN respectively.
5132    If no match was found, then extend the search to "enclosing"
5133    routines (in other words, if we're inside a nested function,
5134    search the symbols defined inside the enclosing functions).
5135    If WILD_MATCH_P is nonzero, perform the naming matching in
5136    "wild" mode (see function "wild_match" for more info).
5137
5138    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
5139
5140 static void
5141 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5142                        const struct block *block, domain_enum domain,
5143                        int wild_match_p)
5144 {
5145   int block_depth = 0;
5146
5147   while (block != NULL)
5148     {
5149       block_depth += 1;
5150       ada_add_block_symbols (obstackp, block, name, domain, NULL,
5151                              wild_match_p);
5152
5153       /* If we found a non-function match, assume that's the one.  */
5154       if (is_nonfunction (defns_collected (obstackp, 0),
5155                           num_defns_collected (obstackp)))
5156         return;
5157
5158       block = BLOCK_SUPERBLOCK (block);
5159     }
5160
5161   /* If no luck so far, try to find NAME as a local symbol in some lexically
5162      enclosing subprogram.  */
5163   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5164     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5165 }
5166
5167 /* An object of this type is used as the user_data argument when
5168    calling the map_matching_symbols method.  */
5169
5170 struct match_data
5171 {
5172   struct objfile *objfile;
5173   struct obstack *obstackp;
5174   struct symbol *arg_sym;
5175   int found_sym;
5176 };
5177
5178 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5179    to a list of symbols.  DATA0 is a pointer to a struct match_data *
5180    containing the obstack that collects the symbol list, the file that SYM
5181    must come from, a flag indicating whether a non-argument symbol has
5182    been found in the current block, and the last argument symbol
5183    passed in SYM within the current block (if any).  When SYM is null,
5184    marking the end of a block, the argument symbol is added if no
5185    other has been found.  */
5186
5187 static int
5188 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5189 {
5190   struct match_data *data = (struct match_data *) data0;
5191   
5192   if (sym == NULL)
5193     {
5194       if (!data->found_sym && data->arg_sym != NULL) 
5195         add_defn_to_vec (data->obstackp,
5196                          fixup_symbol_section (data->arg_sym, data->objfile),
5197                          block);
5198       data->found_sym = 0;
5199       data->arg_sym = NULL;
5200     }
5201   else 
5202     {
5203       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5204         return 0;
5205       else if (SYMBOL_IS_ARGUMENT (sym))
5206         data->arg_sym = sym;
5207       else
5208         {
5209           data->found_sym = 1;
5210           add_defn_to_vec (data->obstackp,
5211                            fixup_symbol_section (sym, data->objfile),
5212                            block);
5213         }
5214     }
5215   return 0;
5216 }
5217
5218 /* Implements compare_names, but only applying the comparision using
5219    the given CASING.  */
5220
5221 static int
5222 compare_names_with_case (const char *string1, const char *string2,
5223                          enum case_sensitivity casing)
5224 {
5225   while (*string1 != '\0' && *string2 != '\0')
5226     {
5227       char c1, c2;
5228
5229       if (isspace (*string1) || isspace (*string2))
5230         return strcmp_iw_ordered (string1, string2);
5231
5232       if (casing == case_sensitive_off)
5233         {
5234           c1 = tolower (*string1);
5235           c2 = tolower (*string2);
5236         }
5237       else
5238         {
5239           c1 = *string1;
5240           c2 = *string2;
5241         }
5242       if (c1 != c2)
5243         break;
5244
5245       string1 += 1;
5246       string2 += 1;
5247     }
5248
5249   switch (*string1)
5250     {
5251     case '(':
5252       return strcmp_iw_ordered (string1, string2);
5253     case '_':
5254       if (*string2 == '\0')
5255         {
5256           if (is_name_suffix (string1))
5257             return 0;
5258           else
5259             return 1;
5260         }
5261       /* FALLTHROUGH */
5262     default:
5263       if (*string2 == '(')
5264         return strcmp_iw_ordered (string1, string2);
5265       else
5266         {
5267           if (casing == case_sensitive_off)
5268             return tolower (*string1) - tolower (*string2);
5269           else
5270             return *string1 - *string2;
5271         }
5272     }
5273 }
5274
5275 /* Compare STRING1 to STRING2, with results as for strcmp.
5276    Compatible with strcmp_iw_ordered in that...
5277
5278        strcmp_iw_ordered (STRING1, STRING2) <= 0
5279
5280    ... implies...
5281
5282        compare_names (STRING1, STRING2) <= 0
5283
5284    (they may differ as to what symbols compare equal).  */
5285
5286 static int
5287 compare_names (const char *string1, const char *string2)
5288 {
5289   int result;
5290
5291   /* Similar to what strcmp_iw_ordered does, we need to perform
5292      a case-insensitive comparison first, and only resort to
5293      a second, case-sensitive, comparison if the first one was
5294      not sufficient to differentiate the two strings.  */
5295
5296   result = compare_names_with_case (string1, string2, case_sensitive_off);
5297   if (result == 0)
5298     result = compare_names_with_case (string1, string2, case_sensitive_on);
5299
5300   return result;
5301 }
5302
5303 /* Add to OBSTACKP all non-local symbols whose name and domain match
5304    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
5305    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
5306
5307 static void
5308 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5309                       domain_enum domain, int global,
5310                       int is_wild_match)
5311 {
5312   struct objfile *objfile;
5313   struct match_data data;
5314
5315   memset (&data, 0, sizeof data);
5316   data.obstackp = obstackp;
5317
5318   ALL_OBJFILES (objfile)
5319     {
5320       data.objfile = objfile;
5321
5322       if (is_wild_match)
5323         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5324                                                aux_add_nonlocal_symbols, &data,
5325                                                wild_match, NULL);
5326       else
5327         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5328                                                aux_add_nonlocal_symbols, &data,
5329                                                full_match, compare_names);
5330     }
5331
5332   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5333     {
5334       ALL_OBJFILES (objfile)
5335         {
5336           char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5337           strcpy (name1, "_ada_");
5338           strcpy (name1 + sizeof ("_ada_") - 1, name);
5339           data.objfile = objfile;
5340           objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5341                                                  global,
5342                                                  aux_add_nonlocal_symbols,
5343                                                  &data,
5344                                                  full_match, compare_names);
5345         }
5346     }           
5347 }
5348
5349 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5350    non-zero, enclosing scope and in global scopes, returning the number of
5351    matches.
5352    Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5353    indicating the symbols found and the blocks and symbol tables (if
5354    any) in which they were found.  This vector is transient---good only to
5355    the next call of ada_lookup_symbol_list.
5356
5357    When full_search is non-zero, any non-function/non-enumeral
5358    symbol match within the nest of blocks whose innermost member is BLOCK0,
5359    is the one match returned (no other matches in that or
5360    enclosing blocks is returned).  If there are any matches in or
5361    surrounding BLOCK0, then these alone are returned.
5362
5363    Names prefixed with "standard__" are handled specially: "standard__"
5364    is first stripped off, and only static and global symbols are searched.  */
5365
5366 static int
5367 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5368                                domain_enum namespace,
5369                                struct ada_symbol_info **results,
5370                                int full_search)
5371 {
5372   struct symbol *sym;
5373   const struct block *block;
5374   const char *name;
5375   const int wild_match_p = should_use_wild_match (name0);
5376   int cacheIfUnique;
5377   int ndefns;
5378
5379   obstack_free (&symbol_list_obstack, NULL);
5380   obstack_init (&symbol_list_obstack);
5381
5382   cacheIfUnique = 0;
5383
5384   /* Search specified block and its superiors.  */
5385
5386   name = name0;
5387   block = block0;
5388
5389   /* Special case: If the user specifies a symbol name inside package
5390      Standard, do a non-wild matching of the symbol name without
5391      the "standard__" prefix.  This was primarily introduced in order
5392      to allow the user to specifically access the standard exceptions
5393      using, for instance, Standard.Constraint_Error when Constraint_Error
5394      is ambiguous (due to the user defining its own Constraint_Error
5395      entity inside its program).  */
5396   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5397     {
5398       block = NULL;
5399       name = name0 + sizeof ("standard__") - 1;
5400     }
5401
5402   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
5403
5404   if (block != NULL)
5405     {
5406       if (full_search)
5407         {
5408           ada_add_local_symbols (&symbol_list_obstack, name, block,
5409                                  namespace, wild_match_p);
5410         }
5411       else
5412         {
5413           /* In the !full_search case we're are being called by
5414              ada_iterate_over_symbols, and we don't want to search
5415              superblocks.  */
5416           ada_add_block_symbols (&symbol_list_obstack, block, name,
5417                                  namespace, NULL, wild_match_p);
5418         }
5419       if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5420         goto done;
5421     }
5422
5423   /* No non-global symbols found.  Check our cache to see if we have
5424      already performed this search before.  If we have, then return
5425      the same result.  */
5426
5427   cacheIfUnique = 1;
5428   if (lookup_cached_symbol (name0, namespace, &sym, &block))
5429     {
5430       if (sym != NULL)
5431         add_defn_to_vec (&symbol_list_obstack, sym, block);
5432       goto done;
5433     }
5434
5435   /* Search symbols from all global blocks.  */
5436  
5437   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5438                         wild_match_p);
5439
5440   /* Now add symbols from all per-file blocks if we've gotten no hits
5441      (not strictly correct, but perhaps better than an error).  */
5442
5443   if (num_defns_collected (&symbol_list_obstack) == 0)
5444     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5445                           wild_match_p);
5446
5447 done:
5448   ndefns = num_defns_collected (&symbol_list_obstack);
5449   *results = defns_collected (&symbol_list_obstack, 1);
5450
5451   ndefns = remove_extra_symbols (*results, ndefns);
5452
5453   if (ndefns == 0 && full_search)
5454     cache_symbol (name0, namespace, NULL, NULL);
5455
5456   if (ndefns == 1 && full_search && cacheIfUnique)
5457     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
5458
5459   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5460
5461   return ndefns;
5462 }
5463
5464 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5465    in global scopes, returning the number of matches, and setting *RESULTS
5466    to a vector of (SYM,BLOCK) tuples.
5467    See ada_lookup_symbol_list_worker for further details.  */
5468
5469 int
5470 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5471                         domain_enum domain, struct ada_symbol_info **results)
5472 {
5473   return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5474 }
5475
5476 /* Implementation of the la_iterate_over_symbols method.  */
5477
5478 static void
5479 ada_iterate_over_symbols (const struct block *block,
5480                           const char *name, domain_enum domain,
5481                           symbol_found_callback_ftype *callback,
5482                           void *data)
5483 {
5484   int ndefs, i;
5485   struct ada_symbol_info *results;
5486
5487   ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5488   for (i = 0; i < ndefs; ++i)
5489     {
5490       if (! (*callback) (results[i].sym, data))
5491         break;
5492     }
5493 }
5494
5495 /* If NAME is the name of an entity, return a string that should
5496    be used to look that entity up in Ada units.  This string should
5497    be deallocated after use using xfree.
5498
5499    NAME can have any form that the "break" or "print" commands might
5500    recognize.  In other words, it does not have to be the "natural"
5501    name, or the "encoded" name.  */
5502
5503 char *
5504 ada_name_for_lookup (const char *name)
5505 {
5506   char *canon;
5507   int nlen = strlen (name);
5508
5509   if (name[0] == '<' && name[nlen - 1] == '>')
5510     {
5511       canon = xmalloc (nlen - 1);
5512       memcpy (canon, name + 1, nlen - 2);
5513       canon[nlen - 2] = '\0';
5514     }
5515   else
5516     canon = xstrdup (ada_encode (ada_fold_name (name)));
5517   return canon;
5518 }
5519
5520 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5521    to 1, but choosing the first symbol found if there are multiple
5522    choices.
5523
5524    The result is stored in *INFO, which must be non-NULL.
5525    If no match is found, INFO->SYM is set to NULL.  */
5526
5527 void
5528 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5529                            domain_enum namespace,
5530                            struct ada_symbol_info *info)
5531 {
5532   struct ada_symbol_info *candidates;
5533   int n_candidates;
5534
5535   gdb_assert (info != NULL);
5536   memset (info, 0, sizeof (struct ada_symbol_info));
5537
5538   n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
5539   if (n_candidates == 0)
5540     return;
5541
5542   *info = candidates[0];
5543   info->sym = fixup_symbol_section (info->sym, NULL);
5544 }
5545
5546 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5547    scope and in global scopes, or NULL if none.  NAME is folded and
5548    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
5549    choosing the first symbol if there are multiple choices.
5550    If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
5551
5552 struct symbol *
5553 ada_lookup_symbol (const char *name, const struct block *block0,
5554                    domain_enum namespace, int *is_a_field_of_this)
5555 {
5556   struct ada_symbol_info info;
5557
5558   if (is_a_field_of_this != NULL)
5559     *is_a_field_of_this = 0;
5560
5561   ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5562                              block0, namespace, &info);
5563   return info.sym;
5564 }
5565
5566 static struct symbol *
5567 ada_lookup_symbol_nonlocal (const char *name,
5568                             const struct block *block,
5569                             const domain_enum domain)
5570 {
5571   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5572 }
5573
5574
5575 /* True iff STR is a possible encoded suffix of a normal Ada name
5576    that is to be ignored for matching purposes.  Suffixes of parallel
5577    names (e.g., XVE) are not included here.  Currently, the possible suffixes
5578    are given by any of the regular expressions:
5579
5580    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
5581    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
5582    TKB              [subprogram suffix for task bodies]
5583    _E[0-9]+[bs]$    [protected object entry suffixes]
5584    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5585
5586    Also, any leading "__[0-9]+" sequence is skipped before the suffix
5587    match is performed.  This sequence is used to differentiate homonyms,
5588    is an optional part of a valid name suffix.  */
5589
5590 static int
5591 is_name_suffix (const char *str)
5592 {
5593   int k;
5594   const char *matching;
5595   const int len = strlen (str);
5596
5597   /* Skip optional leading __[0-9]+.  */
5598
5599   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5600     {
5601       str += 3;
5602       while (isdigit (str[0]))
5603         str += 1;
5604     }
5605   
5606   /* [.$][0-9]+ */
5607
5608   if (str[0] == '.' || str[0] == '$')
5609     {
5610       matching = str + 1;
5611       while (isdigit (matching[0]))
5612         matching += 1;
5613       if (matching[0] == '\0')
5614         return 1;
5615     }
5616
5617   /* ___[0-9]+ */
5618
5619   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5620     {
5621       matching = str + 3;
5622       while (isdigit (matching[0]))
5623         matching += 1;
5624       if (matching[0] == '\0')
5625         return 1;
5626     }
5627
5628   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
5629
5630   if (strcmp (str, "TKB") == 0)
5631     return 1;
5632
5633 #if 0
5634   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5635      with a N at the end.  Unfortunately, the compiler uses the same
5636      convention for other internal types it creates.  So treating
5637      all entity names that end with an "N" as a name suffix causes
5638      some regressions.  For instance, consider the case of an enumerated
5639      type.  To support the 'Image attribute, it creates an array whose
5640      name ends with N.
5641      Having a single character like this as a suffix carrying some
5642      information is a bit risky.  Perhaps we should change the encoding
5643      to be something like "_N" instead.  In the meantime, do not do
5644      the following check.  */
5645   /* Protected Object Subprograms */
5646   if (len == 1 && str [0] == 'N')
5647     return 1;
5648 #endif
5649
5650   /* _E[0-9]+[bs]$ */
5651   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5652     {
5653       matching = str + 3;
5654       while (isdigit (matching[0]))
5655         matching += 1;
5656       if ((matching[0] == 'b' || matching[0] == 's')
5657           && matching [1] == '\0')
5658         return 1;
5659     }
5660
5661   /* ??? We should not modify STR directly, as we are doing below.  This
5662      is fine in this case, but may become problematic later if we find
5663      that this alternative did not work, and want to try matching
5664      another one from the begining of STR.  Since we modified it, we
5665      won't be able to find the begining of the string anymore!  */
5666   if (str[0] == 'X')
5667     {
5668       str += 1;
5669       while (str[0] != '_' && str[0] != '\0')
5670         {
5671           if (str[0] != 'n' && str[0] != 'b')
5672             return 0;
5673           str += 1;
5674         }
5675     }
5676
5677   if (str[0] == '\000')
5678     return 1;
5679
5680   if (str[0] == '_')
5681     {
5682       if (str[1] != '_' || str[2] == '\000')
5683         return 0;
5684       if (str[2] == '_')
5685         {
5686           if (strcmp (str + 3, "JM") == 0)
5687             return 1;
5688           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5689              the LJM suffix in favor of the JM one.  But we will
5690              still accept LJM as a valid suffix for a reasonable
5691              amount of time, just to allow ourselves to debug programs
5692              compiled using an older version of GNAT.  */
5693           if (strcmp (str + 3, "LJM") == 0)
5694             return 1;
5695           if (str[3] != 'X')
5696             return 0;
5697           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5698               || str[4] == 'U' || str[4] == 'P')
5699             return 1;
5700           if (str[4] == 'R' && str[5] != 'T')
5701             return 1;
5702           return 0;
5703         }
5704       if (!isdigit (str[2]))
5705         return 0;
5706       for (k = 3; str[k] != '\0'; k += 1)
5707         if (!isdigit (str[k]) && str[k] != '_')
5708           return 0;
5709       return 1;
5710     }
5711   if (str[0] == '$' && isdigit (str[1]))
5712     {
5713       for (k = 2; str[k] != '\0'; k += 1)
5714         if (!isdigit (str[k]) && str[k] != '_')
5715           return 0;
5716       return 1;
5717     }
5718   return 0;
5719 }
5720
5721 /* Return non-zero if the string starting at NAME and ending before
5722    NAME_END contains no capital letters.  */
5723
5724 static int
5725 is_valid_name_for_wild_match (const char *name0)
5726 {
5727   const char *decoded_name = ada_decode (name0);
5728   int i;
5729
5730   /* If the decoded name starts with an angle bracket, it means that
5731      NAME0 does not follow the GNAT encoding format.  It should then
5732      not be allowed as a possible wild match.  */
5733   if (decoded_name[0] == '<')
5734     return 0;
5735
5736   for (i=0; decoded_name[i] != '\0'; i++)
5737     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5738       return 0;
5739
5740   return 1;
5741 }
5742
5743 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5744    that could start a simple name.  Assumes that *NAMEP points into
5745    the string beginning at NAME0.  */
5746
5747 static int
5748 advance_wild_match (const char **namep, const char *name0, int target0)
5749 {
5750   const char *name = *namep;
5751
5752   while (1)
5753     {
5754       int t0, t1;
5755
5756       t0 = *name;
5757       if (t0 == '_')
5758         {
5759           t1 = name[1];
5760           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5761             {
5762               name += 1;
5763               if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5764                 break;
5765               else
5766                 name += 1;
5767             }
5768           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5769                                  || name[2] == target0))
5770             {
5771               name += 2;
5772               break;
5773             }
5774           else
5775             return 0;
5776         }
5777       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5778         name += 1;
5779       else
5780         return 0;
5781     }
5782
5783   *namep = name;
5784   return 1;
5785 }
5786
5787 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5788    informational suffixes of NAME (i.e., for which is_name_suffix is
5789    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5790
5791 static int
5792 wild_match (const char *name, const char *patn)
5793 {
5794   const char *p;
5795   const char *name0 = name;
5796
5797   while (1)
5798     {
5799       const char *match = name;
5800
5801       if (*name == *patn)
5802         {
5803           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5804             if (*p != *name)
5805               break;
5806           if (*p == '\0' && is_name_suffix (name))
5807             return match != name0 && !is_valid_name_for_wild_match (name0);
5808
5809           if (name[-1] == '_')
5810             name -= 1;
5811         }
5812       if (!advance_wild_match (&name, name0, *patn))
5813         return 1;
5814     }
5815 }
5816
5817 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5818    informational suffix.  */
5819
5820 static int
5821 full_match (const char *sym_name, const char *search_name)
5822 {
5823   return !match_name (sym_name, search_name, 0);
5824 }
5825
5826
5827 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5828    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5829    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5830    OBJFILE is the section containing BLOCK.  */
5831
5832 static void
5833 ada_add_block_symbols (struct obstack *obstackp,
5834                        const struct block *block, const char *name,
5835                        domain_enum domain, struct objfile *objfile,
5836                        int wild)
5837 {
5838   struct block_iterator iter;
5839   int name_len = strlen (name);
5840   /* A matching argument symbol, if any.  */
5841   struct symbol *arg_sym;
5842   /* Set true when we find a matching non-argument symbol.  */
5843   int found_sym;
5844   struct symbol *sym;
5845
5846   arg_sym = NULL;
5847   found_sym = 0;
5848   if (wild)
5849     {
5850       for (sym = block_iter_match_first (block, name, wild_match, &iter);
5851            sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5852       {
5853         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5854                                    SYMBOL_DOMAIN (sym), domain)
5855             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5856           {
5857             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5858               continue;
5859             else if (SYMBOL_IS_ARGUMENT (sym))
5860               arg_sym = sym;
5861             else
5862               {
5863                 found_sym = 1;
5864                 add_defn_to_vec (obstackp,
5865                                  fixup_symbol_section (sym, objfile),
5866                                  block);
5867               }
5868           }
5869       }
5870     }
5871   else
5872     {
5873      for (sym = block_iter_match_first (block, name, full_match, &iter);
5874           sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5875       {
5876         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5877                                    SYMBOL_DOMAIN (sym), domain))
5878           {
5879             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5880               {
5881                 if (SYMBOL_IS_ARGUMENT (sym))
5882                   arg_sym = sym;
5883                 else
5884                   {
5885                     found_sym = 1;
5886                     add_defn_to_vec (obstackp,
5887                                      fixup_symbol_section (sym, objfile),
5888                                      block);
5889                   }
5890               }
5891           }
5892       }
5893     }
5894
5895   if (!found_sym && arg_sym != NULL)
5896     {
5897       add_defn_to_vec (obstackp,
5898                        fixup_symbol_section (arg_sym, objfile),
5899                        block);
5900     }
5901
5902   if (!wild)
5903     {
5904       arg_sym = NULL;
5905       found_sym = 0;
5906
5907       ALL_BLOCK_SYMBOLS (block, iter, sym)
5908       {
5909         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5910                                    SYMBOL_DOMAIN (sym), domain))
5911           {
5912             int cmp;
5913
5914             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5915             if (cmp == 0)
5916               {
5917                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5918                 if (cmp == 0)
5919                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5920                                  name_len);
5921               }
5922
5923             if (cmp == 0
5924                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5925               {
5926                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5927                   {
5928                     if (SYMBOL_IS_ARGUMENT (sym))
5929                       arg_sym = sym;
5930                     else
5931                       {
5932                         found_sym = 1;
5933                         add_defn_to_vec (obstackp,
5934                                          fixup_symbol_section (sym, objfile),
5935                                          block);
5936                       }
5937                   }
5938               }
5939           }
5940       }
5941
5942       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5943          They aren't parameters, right?  */
5944       if (!found_sym && arg_sym != NULL)
5945         {
5946           add_defn_to_vec (obstackp,
5947                            fixup_symbol_section (arg_sym, objfile),
5948                            block);
5949         }
5950     }
5951 }
5952 \f
5953
5954                                 /* Symbol Completion */
5955
5956 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5957    name in a form that's appropriate for the completion.  The result
5958    does not need to be deallocated, but is only good until the next call.
5959
5960    TEXT_LEN is equal to the length of TEXT.
5961    Perform a wild match if WILD_MATCH_P is set.
5962    ENCODED_P should be set if TEXT represents the start of a symbol name
5963    in its encoded form.  */
5964
5965 static const char *
5966 symbol_completion_match (const char *sym_name,
5967                          const char *text, int text_len,
5968                          int wild_match_p, int encoded_p)
5969 {
5970   const int verbatim_match = (text[0] == '<');
5971   int match = 0;
5972
5973   if (verbatim_match)
5974     {
5975       /* Strip the leading angle bracket.  */
5976       text = text + 1;
5977       text_len--;
5978     }
5979
5980   /* First, test against the fully qualified name of the symbol.  */
5981
5982   if (strncmp (sym_name, text, text_len) == 0)
5983     match = 1;
5984
5985   if (match && !encoded_p)
5986     {
5987       /* One needed check before declaring a positive match is to verify
5988          that iff we are doing a verbatim match, the decoded version
5989          of the symbol name starts with '<'.  Otherwise, this symbol name
5990          is not a suitable completion.  */
5991       const char *sym_name_copy = sym_name;
5992       int has_angle_bracket;
5993
5994       sym_name = ada_decode (sym_name);
5995       has_angle_bracket = (sym_name[0] == '<');
5996       match = (has_angle_bracket == verbatim_match);
5997       sym_name = sym_name_copy;
5998     }
5999
6000   if (match && !verbatim_match)
6001     {
6002       /* When doing non-verbatim match, another check that needs to
6003          be done is to verify that the potentially matching symbol name
6004          does not include capital letters, because the ada-mode would
6005          not be able to understand these symbol names without the
6006          angle bracket notation.  */
6007       const char *tmp;
6008
6009       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6010       if (*tmp != '\0')
6011         match = 0;
6012     }
6013
6014   /* Second: Try wild matching...  */
6015
6016   if (!match && wild_match_p)
6017     {
6018       /* Since we are doing wild matching, this means that TEXT
6019          may represent an unqualified symbol name.  We therefore must
6020          also compare TEXT against the unqualified name of the symbol.  */
6021       sym_name = ada_unqualified_name (ada_decode (sym_name));
6022
6023       if (strncmp (sym_name, text, text_len) == 0)
6024         match = 1;
6025     }
6026
6027   /* Finally: If we found a mach, prepare the result to return.  */
6028
6029   if (!match)
6030     return NULL;
6031
6032   if (verbatim_match)
6033     sym_name = add_angle_brackets (sym_name);
6034
6035   if (!encoded_p)
6036     sym_name = ada_decode (sym_name);
6037
6038   return sym_name;
6039 }
6040
6041 /* A companion function to ada_make_symbol_completion_list().
6042    Check if SYM_NAME represents a symbol which name would be suitable
6043    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6044    it is appended at the end of the given string vector SV.
6045
6046    ORIG_TEXT is the string original string from the user command
6047    that needs to be completed.  WORD is the entire command on which
6048    completion should be performed.  These two parameters are used to
6049    determine which part of the symbol name should be added to the
6050    completion vector.
6051    if WILD_MATCH_P is set, then wild matching is performed.
6052    ENCODED_P should be set if TEXT represents a symbol name in its
6053    encoded formed (in which case the completion should also be
6054    encoded).  */
6055
6056 static void
6057 symbol_completion_add (VEC(char_ptr) **sv,
6058                        const char *sym_name,
6059                        const char *text, int text_len,
6060                        const char *orig_text, const char *word,
6061                        int wild_match_p, int encoded_p)
6062 {
6063   const char *match = symbol_completion_match (sym_name, text, text_len,
6064                                                wild_match_p, encoded_p);
6065   char *completion;
6066
6067   if (match == NULL)
6068     return;
6069
6070   /* We found a match, so add the appropriate completion to the given
6071      string vector.  */
6072
6073   if (word == orig_text)
6074     {
6075       completion = xmalloc (strlen (match) + 5);
6076       strcpy (completion, match);
6077     }
6078   else if (word > orig_text)
6079     {
6080       /* Return some portion of sym_name.  */
6081       completion = xmalloc (strlen (match) + 5);
6082       strcpy (completion, match + (word - orig_text));
6083     }
6084   else
6085     {
6086       /* Return some of ORIG_TEXT plus sym_name.  */
6087       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6088       strncpy (completion, word, orig_text - word);
6089       completion[orig_text - word] = '\0';
6090       strcat (completion, match);
6091     }
6092
6093   VEC_safe_push (char_ptr, *sv, completion);
6094 }
6095
6096 /* An object of this type is passed as the user_data argument to the
6097    expand_symtabs_matching method.  */
6098 struct add_partial_datum
6099 {
6100   VEC(char_ptr) **completions;
6101   const char *text;
6102   int text_len;
6103   const char *text0;
6104   const char *word;
6105   int wild_match;
6106   int encoded;
6107 };
6108
6109 /* A callback for expand_symtabs_matching.  */
6110
6111 static int
6112 ada_complete_symbol_matcher (const char *name, void *user_data)
6113 {
6114   struct add_partial_datum *data = user_data;
6115   
6116   return symbol_completion_match (name, data->text, data->text_len,
6117                                   data->wild_match, data->encoded) != NULL;
6118 }
6119
6120 /* Return a list of possible symbol names completing TEXT0.  WORD is
6121    the entire command on which completion is made.  */
6122
6123 static VEC (char_ptr) *
6124 ada_make_symbol_completion_list (const char *text0, const char *word,
6125                                  enum type_code code)
6126 {
6127   char *text;
6128   int text_len;
6129   int wild_match_p;
6130   int encoded_p;
6131   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6132   struct symbol *sym;
6133   struct symtab *s;
6134   struct minimal_symbol *msymbol;
6135   struct objfile *objfile;
6136   const struct block *b, *surrounding_static_block = 0;
6137   int i;
6138   struct block_iterator iter;
6139   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6140
6141   gdb_assert (code == TYPE_CODE_UNDEF);
6142
6143   if (text0[0] == '<')
6144     {
6145       text = xstrdup (text0);
6146       make_cleanup (xfree, text);
6147       text_len = strlen (text);
6148       wild_match_p = 0;
6149       encoded_p = 1;
6150     }
6151   else
6152     {
6153       text = xstrdup (ada_encode (text0));
6154       make_cleanup (xfree, text);
6155       text_len = strlen (text);
6156       for (i = 0; i < text_len; i++)
6157         text[i] = tolower (text[i]);
6158
6159       encoded_p = (strstr (text0, "__") != NULL);
6160       /* If the name contains a ".", then the user is entering a fully
6161          qualified entity name, and the match must not be done in wild
6162          mode.  Similarly, if the user wants to complete what looks like
6163          an encoded name, the match must not be done in wild mode.  */
6164       wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6165     }
6166
6167   /* First, look at the partial symtab symbols.  */
6168   {
6169     struct add_partial_datum data;
6170
6171     data.completions = &completions;
6172     data.text = text;
6173     data.text_len = text_len;
6174     data.text0 = text0;
6175     data.word = word;
6176     data.wild_match = wild_match_p;
6177     data.encoded = encoded_p;
6178     expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6179                              &data);
6180   }
6181
6182   /* At this point scan through the misc symbol vectors and add each
6183      symbol you find to the list.  Eventually we want to ignore
6184      anything that isn't a text symbol (everything else will be
6185      handled by the psymtab code above).  */
6186
6187   ALL_MSYMBOLS (objfile, msymbol)
6188   {
6189     QUIT;
6190     symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6191                            text, text_len, text0, word, wild_match_p,
6192                            encoded_p);
6193   }
6194
6195   /* Search upwards from currently selected frame (so that we can
6196      complete on local vars.  */
6197
6198   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6199     {
6200       if (!BLOCK_SUPERBLOCK (b))
6201         surrounding_static_block = b;   /* For elmin of dups */
6202
6203       ALL_BLOCK_SYMBOLS (b, iter, sym)
6204       {
6205         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6206                                text, text_len, text0, word,
6207                                wild_match_p, encoded_p);
6208       }
6209     }
6210
6211   /* Go through the symtabs and check the externs and statics for
6212      symbols which match.  */
6213
6214   ALL_SYMTABS (objfile, s)
6215   {
6216     QUIT;
6217     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
6218     ALL_BLOCK_SYMBOLS (b, iter, sym)
6219     {
6220       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6221                              text, text_len, text0, word,
6222                              wild_match_p, encoded_p);
6223     }
6224   }
6225
6226   ALL_SYMTABS (objfile, s)
6227   {
6228     QUIT;
6229     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
6230     /* Don't do this block twice.  */
6231     if (b == surrounding_static_block)
6232       continue;
6233     ALL_BLOCK_SYMBOLS (b, iter, sym)
6234     {
6235       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6236                              text, text_len, text0, word,
6237                              wild_match_p, encoded_p);
6238     }
6239   }
6240
6241   do_cleanups (old_chain);
6242   return completions;
6243 }
6244
6245                                 /* Field Access */
6246
6247 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6248    for tagged types.  */
6249
6250 static int
6251 ada_is_dispatch_table_ptr_type (struct type *type)
6252 {
6253   const char *name;
6254
6255   if (TYPE_CODE (type) != TYPE_CODE_PTR)
6256     return 0;
6257
6258   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6259   if (name == NULL)
6260     return 0;
6261
6262   return (strcmp (name, "ada__tags__dispatch_table") == 0);
6263 }
6264
6265 /* Return non-zero if TYPE is an interface tag.  */
6266
6267 static int
6268 ada_is_interface_tag (struct type *type)
6269 {
6270   const char *name = TYPE_NAME (type);
6271
6272   if (name == NULL)
6273     return 0;
6274
6275   return (strcmp (name, "ada__tags__interface_tag") == 0);
6276 }
6277
6278 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6279    to be invisible to users.  */
6280
6281 int
6282 ada_is_ignored_field (struct type *type, int field_num)
6283 {
6284   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6285     return 1;
6286
6287   /* Check the name of that field.  */
6288   {
6289     const char *name = TYPE_FIELD_NAME (type, field_num);
6290
6291     /* Anonymous field names should not be printed.
6292        brobecker/2007-02-20: I don't think this can actually happen
6293        but we don't want to print the value of annonymous fields anyway.  */
6294     if (name == NULL)
6295       return 1;
6296
6297     /* Normally, fields whose name start with an underscore ("_")
6298        are fields that have been internally generated by the compiler,
6299        and thus should not be printed.  The "_parent" field is special,
6300        however: This is a field internally generated by the compiler
6301        for tagged types, and it contains the components inherited from
6302        the parent type.  This field should not be printed as is, but
6303        should not be ignored either.  */
6304     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6305       return 1;
6306   }
6307
6308   /* If this is the dispatch table of a tagged type or an interface tag,
6309      then ignore.  */
6310   if (ada_is_tagged_type (type, 1)
6311       && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6312           || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6313     return 1;
6314
6315   /* Not a special field, so it should not be ignored.  */
6316   return 0;
6317 }
6318
6319 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
6320    pointer or reference type whose ultimate target has a tag field.  */
6321
6322 int
6323 ada_is_tagged_type (struct type *type, int refok)
6324 {
6325   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6326 }
6327
6328 /* True iff TYPE represents the type of X'Tag */
6329
6330 int
6331 ada_is_tag_type (struct type *type)
6332 {
6333   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6334     return 0;
6335   else
6336     {
6337       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6338
6339       return (name != NULL
6340               && strcmp (name, "ada__tags__dispatch_table") == 0);
6341     }
6342 }
6343
6344 /* The type of the tag on VAL.  */
6345
6346 struct type *
6347 ada_tag_type (struct value *val)
6348 {
6349   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6350 }
6351
6352 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6353    retired at Ada 05).  */
6354
6355 static int
6356 is_ada95_tag (struct value *tag)
6357 {
6358   return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6359 }
6360
6361 /* The value of the tag on VAL.  */
6362
6363 struct value *
6364 ada_value_tag (struct value *val)
6365 {
6366   return ada_value_struct_elt (val, "_tag", 0);
6367 }
6368
6369 /* The value of the tag on the object of type TYPE whose contents are
6370    saved at VALADDR, if it is non-null, or is at memory address
6371    ADDRESS.  */
6372
6373 static struct value *
6374 value_tag_from_contents_and_address (struct type *type,
6375                                      const gdb_byte *valaddr,
6376                                      CORE_ADDR address)
6377 {
6378   int tag_byte_offset;
6379   struct type *tag_type;
6380
6381   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6382                          NULL, NULL, NULL))
6383     {
6384       const gdb_byte *valaddr1 = ((valaddr == NULL)
6385                                   ? NULL
6386                                   : valaddr + tag_byte_offset);
6387       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6388
6389       return value_from_contents_and_address (tag_type, valaddr1, address1);
6390     }
6391   return NULL;
6392 }
6393
6394 static struct type *
6395 type_from_tag (struct value *tag)
6396 {
6397   const char *type_name = ada_tag_name (tag);
6398
6399   if (type_name != NULL)
6400     return ada_find_any_type (ada_encode (type_name));
6401   return NULL;
6402 }
6403
6404 /* Given a value OBJ of a tagged type, return a value of this
6405    type at the base address of the object.  The base address, as
6406    defined in Ada.Tags, it is the address of the primary tag of
6407    the object, and therefore where the field values of its full
6408    view can be fetched.  */
6409
6410 struct value *
6411 ada_tag_value_at_base_address (struct value *obj)
6412 {
6413   volatile struct gdb_exception e;
6414   struct value *val;
6415   LONGEST offset_to_top = 0;
6416   struct type *ptr_type, *obj_type;
6417   struct value *tag;
6418   CORE_ADDR base_address;
6419
6420   obj_type = value_type (obj);
6421
6422   /* It is the responsability of the caller to deref pointers.  */
6423
6424   if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6425       || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6426     return obj;
6427
6428   tag = ada_value_tag (obj);
6429   if (!tag)
6430     return obj;
6431
6432   /* Base addresses only appeared with Ada 05 and multiple inheritance.  */
6433
6434   if (is_ada95_tag (tag))
6435     return obj;
6436
6437   ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6438   ptr_type = lookup_pointer_type (ptr_type);
6439   val = value_cast (ptr_type, tag);
6440   if (!val)
6441     return obj;
6442
6443   /* It is perfectly possible that an exception be raised while
6444      trying to determine the base address, just like for the tag;
6445      see ada_tag_name for more details.  We do not print the error
6446      message for the same reason.  */
6447
6448   TRY_CATCH (e, RETURN_MASK_ERROR)
6449     {
6450       offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6451     }
6452
6453   if (e.reason < 0)
6454     return obj;
6455
6456   /* If offset is null, nothing to do.  */
6457
6458   if (offset_to_top == 0)
6459     return obj;
6460
6461   /* -1 is a special case in Ada.Tags; however, what should be done
6462      is not quite clear from the documentation.  So do nothing for
6463      now.  */
6464
6465   if (offset_to_top == -1)
6466     return obj;
6467
6468   base_address = value_address (obj) - offset_to_top;
6469   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6470
6471   /* Make sure that we have a proper tag at the new address.
6472      Otherwise, offset_to_top is bogus (which can happen when
6473      the object is not initialized yet).  */
6474
6475   if (!tag)
6476     return obj;
6477
6478   obj_type = type_from_tag (tag);
6479
6480   if (!obj_type)
6481     return obj;
6482
6483   return value_from_contents_and_address (obj_type, NULL, base_address);
6484 }
6485
6486 /* Return the "ada__tags__type_specific_data" type.  */
6487
6488 static struct type *
6489 ada_get_tsd_type (struct inferior *inf)
6490 {
6491   struct ada_inferior_data *data = get_ada_inferior_data (inf);
6492
6493   if (data->tsd_type == 0)
6494     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6495   return data->tsd_type;
6496 }
6497
6498 /* Return the TSD (type-specific data) associated to the given TAG.
6499    TAG is assumed to be the tag of a tagged-type entity.
6500
6501    May return NULL if we are unable to get the TSD.  */
6502
6503 static struct value *
6504 ada_get_tsd_from_tag (struct value *tag)
6505 {
6506   struct value *val;
6507   struct type *type;
6508
6509   /* First option: The TSD is simply stored as a field of our TAG.
6510      Only older versions of GNAT would use this format, but we have
6511      to test it first, because there are no visible markers for
6512      the current approach except the absence of that field.  */
6513
6514   val = ada_value_struct_elt (tag, "tsd", 1);
6515   if (val)
6516     return val;
6517
6518   /* Try the second representation for the dispatch table (in which
6519      there is no explicit 'tsd' field in the referent of the tag pointer,
6520      and instead the tsd pointer is stored just before the dispatch
6521      table.  */
6522
6523   type = ada_get_tsd_type (current_inferior());
6524   if (type == NULL)
6525     return NULL;
6526   type = lookup_pointer_type (lookup_pointer_type (type));
6527   val = value_cast (type, tag);
6528   if (val == NULL)
6529     return NULL;
6530   return value_ind (value_ptradd (val, -1));
6531 }
6532
6533 /* Given the TSD of a tag (type-specific data), return a string
6534    containing the name of the associated type.
6535
6536    The returned value is good until the next call.  May return NULL
6537    if we are unable to determine the tag name.  */
6538
6539 static char *
6540 ada_tag_name_from_tsd (struct value *tsd)
6541 {
6542   static char name[1024];
6543   char *p;
6544   struct value *val;
6545
6546   val = ada_value_struct_elt (tsd, "expanded_name", 1);
6547   if (val == NULL)
6548     return NULL;
6549   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6550   for (p = name; *p != '\0'; p += 1)
6551     if (isalpha (*p))
6552       *p = tolower (*p);
6553   return name;
6554 }
6555
6556 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6557    a C string.
6558
6559    Return NULL if the TAG is not an Ada tag, or if we were unable to
6560    determine the name of that tag.  The result is good until the next
6561    call.  */
6562
6563 const char *
6564 ada_tag_name (struct value *tag)
6565 {
6566   volatile struct gdb_exception e;
6567   char *name = NULL;
6568
6569   if (!ada_is_tag_type (value_type (tag)))
6570     return NULL;
6571
6572   /* It is perfectly possible that an exception be raised while trying
6573      to determine the TAG's name, even under normal circumstances:
6574      The associated variable may be uninitialized or corrupted, for
6575      instance. We do not let any exception propagate past this point.
6576      instead we return NULL.
6577
6578      We also do not print the error message either (which often is very
6579      low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6580      the caller print a more meaningful message if necessary.  */
6581   TRY_CATCH (e, RETURN_MASK_ERROR)
6582     {
6583       struct value *tsd = ada_get_tsd_from_tag (tag);
6584
6585       if (tsd != NULL)
6586         name = ada_tag_name_from_tsd (tsd);
6587     }
6588
6589   return name;
6590 }
6591
6592 /* The parent type of TYPE, or NULL if none.  */
6593
6594 struct type *
6595 ada_parent_type (struct type *type)
6596 {
6597   int i;
6598
6599   type = ada_check_typedef (type);
6600
6601   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6602     return NULL;
6603
6604   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6605     if (ada_is_parent_field (type, i))
6606       {
6607         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6608
6609         /* If the _parent field is a pointer, then dereference it.  */
6610         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6611           parent_type = TYPE_TARGET_TYPE (parent_type);
6612         /* If there is a parallel XVS type, get the actual base type.  */
6613         parent_type = ada_get_base_type (parent_type);
6614
6615         return ada_check_typedef (parent_type);
6616       }
6617
6618   return NULL;
6619 }
6620
6621 /* True iff field number FIELD_NUM of structure type TYPE contains the
6622    parent-type (inherited) fields of a derived type.  Assumes TYPE is
6623    a structure type with at least FIELD_NUM+1 fields.  */
6624
6625 int
6626 ada_is_parent_field (struct type *type, int field_num)
6627 {
6628   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6629
6630   return (name != NULL
6631           && (strncmp (name, "PARENT", 6) == 0
6632               || strncmp (name, "_parent", 7) == 0));
6633 }
6634
6635 /* True iff field number FIELD_NUM of structure type TYPE is a
6636    transparent wrapper field (which should be silently traversed when doing
6637    field selection and flattened when printing).  Assumes TYPE is a
6638    structure type with at least FIELD_NUM+1 fields.  Such fields are always
6639    structures.  */
6640
6641 int
6642 ada_is_wrapper_field (struct type *type, int field_num)
6643 {
6644   const char *name = TYPE_FIELD_NAME (type, field_num);
6645
6646   return (name != NULL
6647           && (strncmp (name, "PARENT", 6) == 0
6648               || strcmp (name, "REP") == 0
6649               || strncmp (name, "_parent", 7) == 0
6650               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6651 }
6652
6653 /* True iff field number FIELD_NUM of structure or union type TYPE
6654    is a variant wrapper.  Assumes TYPE is a structure type with at least
6655    FIELD_NUM+1 fields.  */
6656
6657 int
6658 ada_is_variant_part (struct type *type, int field_num)
6659 {
6660   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6661
6662   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6663           || (is_dynamic_field (type, field_num)
6664               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
6665                   == TYPE_CODE_UNION)));
6666 }
6667
6668 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6669    whose discriminants are contained in the record type OUTER_TYPE,
6670    returns the type of the controlling discriminant for the variant.
6671    May return NULL if the type could not be found.  */
6672
6673 struct type *
6674 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6675 {
6676   char *name = ada_variant_discrim_name (var_type);
6677
6678   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6679 }
6680
6681 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6682    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6683    represents a 'when others' clause; otherwise 0.  */
6684
6685 int
6686 ada_is_others_clause (struct type *type, int field_num)
6687 {
6688   const char *name = TYPE_FIELD_NAME (type, field_num);
6689
6690   return (name != NULL && name[0] == 'O');
6691 }
6692
6693 /* Assuming that TYPE0 is the type of the variant part of a record,
6694    returns the name of the discriminant controlling the variant.
6695    The value is valid until the next call to ada_variant_discrim_name.  */
6696
6697 char *
6698 ada_variant_discrim_name (struct type *type0)
6699 {
6700   static char *result = NULL;
6701   static size_t result_len = 0;
6702   struct type *type;
6703   const char *name;
6704   const char *discrim_end;
6705   const char *discrim_start;
6706
6707   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6708     type = TYPE_TARGET_TYPE (type0);
6709   else
6710     type = type0;
6711
6712   name = ada_type_name (type);
6713
6714   if (name == NULL || name[0] == '\000')
6715     return "";
6716
6717   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6718        discrim_end -= 1)
6719     {
6720       if (strncmp (discrim_end, "___XVN", 6) == 0)
6721         break;
6722     }
6723   if (discrim_end == name)
6724     return "";
6725
6726   for (discrim_start = discrim_end; discrim_start != name + 3;
6727        discrim_start -= 1)
6728     {
6729       if (discrim_start == name + 1)
6730         return "";
6731       if ((discrim_start > name + 3
6732            && strncmp (discrim_start - 3, "___", 3) == 0)
6733           || discrim_start[-1] == '.')
6734         break;
6735     }
6736
6737   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6738   strncpy (result, discrim_start, discrim_end - discrim_start);
6739   result[discrim_end - discrim_start] = '\0';
6740   return result;
6741 }
6742
6743 /* Scan STR for a subtype-encoded number, beginning at position K.
6744    Put the position of the character just past the number scanned in
6745    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6746    Return 1 if there was a valid number at the given position, and 0
6747    otherwise.  A "subtype-encoded" number consists of the absolute value
6748    in decimal, followed by the letter 'm' to indicate a negative number.
6749    Assumes 0m does not occur.  */
6750
6751 int
6752 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6753 {
6754   ULONGEST RU;
6755
6756   if (!isdigit (str[k]))
6757     return 0;
6758
6759   /* Do it the hard way so as not to make any assumption about
6760      the relationship of unsigned long (%lu scan format code) and
6761      LONGEST.  */
6762   RU = 0;
6763   while (isdigit (str[k]))
6764     {
6765       RU = RU * 10 + (str[k] - '0');
6766       k += 1;
6767     }
6768
6769   if (str[k] == 'm')
6770     {
6771       if (R != NULL)
6772         *R = (-(LONGEST) (RU - 1)) - 1;
6773       k += 1;
6774     }
6775   else if (R != NULL)
6776     *R = (LONGEST) RU;
6777
6778   /* NOTE on the above: Technically, C does not say what the results of
6779      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6780      number representable as a LONGEST (although either would probably work
6781      in most implementations).  When RU>0, the locution in the then branch
6782      above is always equivalent to the negative of RU.  */
6783
6784   if (new_k != NULL)
6785     *new_k = k;
6786   return 1;
6787 }
6788
6789 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6790    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6791    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6792
6793 int
6794 ada_in_variant (LONGEST val, struct type *type, int field_num)
6795 {
6796   const char *name = TYPE_FIELD_NAME (type, field_num);
6797   int p;
6798
6799   p = 0;
6800   while (1)
6801     {
6802       switch (name[p])
6803         {
6804         case '\0':
6805           return 0;
6806         case 'S':
6807           {
6808             LONGEST W;
6809
6810             if (!ada_scan_number (name, p + 1, &W, &p))
6811               return 0;
6812             if (val == W)
6813               return 1;
6814             break;
6815           }
6816         case 'R':
6817           {
6818             LONGEST L, U;
6819
6820             if (!ada_scan_number (name, p + 1, &L, &p)
6821                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6822               return 0;
6823             if (val >= L && val <= U)
6824               return 1;
6825             break;
6826           }
6827         case 'O':
6828           return 1;
6829         default:
6830           return 0;
6831         }
6832     }
6833 }
6834
6835 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6836
6837 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6838    ARG_TYPE, extract and return the value of one of its (non-static)
6839    fields.  FIELDNO says which field.   Differs from value_primitive_field
6840    only in that it can handle packed values of arbitrary type.  */
6841
6842 static struct value *
6843 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6844                            struct type *arg_type)
6845 {
6846   struct type *type;
6847
6848   arg_type = ada_check_typedef (arg_type);
6849   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6850
6851   /* Handle packed fields.  */
6852
6853   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6854     {
6855       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6856       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6857
6858       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6859                                              offset + bit_pos / 8,
6860                                              bit_pos % 8, bit_size, type);
6861     }
6862   else
6863     return value_primitive_field (arg1, offset, fieldno, arg_type);
6864 }
6865
6866 /* Find field with name NAME in object of type TYPE.  If found, 
6867    set the following for each argument that is non-null:
6868     - *FIELD_TYPE_P to the field's type; 
6869     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6870       an object of that type;
6871     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6872     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6873       0 otherwise;
6874    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6875    fields up to but not including the desired field, or by the total
6876    number of fields if not found.   A NULL value of NAME never
6877    matches; the function just counts visible fields in this case.
6878    
6879    Returns 1 if found, 0 otherwise.  */
6880
6881 static int
6882 find_struct_field (const char *name, struct type *type, int offset,
6883                    struct type **field_type_p,
6884                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6885                    int *index_p)
6886 {
6887   int i;
6888
6889   type = ada_check_typedef (type);
6890
6891   if (field_type_p != NULL)
6892     *field_type_p = NULL;
6893   if (byte_offset_p != NULL)
6894     *byte_offset_p = 0;
6895   if (bit_offset_p != NULL)
6896     *bit_offset_p = 0;
6897   if (bit_size_p != NULL)
6898     *bit_size_p = 0;
6899
6900   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6901     {
6902       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6903       int fld_offset = offset + bit_pos / 8;
6904       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6905
6906       if (t_field_name == NULL)
6907         continue;
6908
6909       else if (name != NULL && field_name_match (t_field_name, name))
6910         {
6911           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6912
6913           if (field_type_p != NULL)
6914             *field_type_p = TYPE_FIELD_TYPE (type, i);
6915           if (byte_offset_p != NULL)
6916             *byte_offset_p = fld_offset;
6917           if (bit_offset_p != NULL)
6918             *bit_offset_p = bit_pos % 8;
6919           if (bit_size_p != NULL)
6920             *bit_size_p = bit_size;
6921           return 1;
6922         }
6923       else if (ada_is_wrapper_field (type, i))
6924         {
6925           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6926                                  field_type_p, byte_offset_p, bit_offset_p,
6927                                  bit_size_p, index_p))
6928             return 1;
6929         }
6930       else if (ada_is_variant_part (type, i))
6931         {
6932           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6933              fixed type?? */
6934           int j;
6935           struct type *field_type
6936             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6937
6938           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6939             {
6940               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6941                                      fld_offset
6942                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6943                                      field_type_p, byte_offset_p,
6944                                      bit_offset_p, bit_size_p, index_p))
6945                 return 1;
6946             }
6947         }
6948       else if (index_p != NULL)
6949         *index_p += 1;
6950     }
6951   return 0;
6952 }
6953
6954 /* Number of user-visible fields in record type TYPE.  */
6955
6956 static int
6957 num_visible_fields (struct type *type)
6958 {
6959   int n;
6960
6961   n = 0;
6962   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6963   return n;
6964 }
6965
6966 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6967    and search in it assuming it has (class) type TYPE.
6968    If found, return value, else return NULL.
6969
6970    Searches recursively through wrapper fields (e.g., '_parent').  */
6971
6972 static struct value *
6973 ada_search_struct_field (char *name, struct value *arg, int offset,
6974                          struct type *type)
6975 {
6976   int i;
6977
6978   type = ada_check_typedef (type);
6979   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6980     {
6981       const char *t_field_name = TYPE_FIELD_NAME (type, i);
6982
6983       if (t_field_name == NULL)
6984         continue;
6985
6986       else if (field_name_match (t_field_name, name))
6987         return ada_value_primitive_field (arg, offset, i, type);
6988
6989       else if (ada_is_wrapper_field (type, i))
6990         {
6991           struct value *v =     /* Do not let indent join lines here.  */
6992             ada_search_struct_field (name, arg,
6993                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
6994                                      TYPE_FIELD_TYPE (type, i));
6995
6996           if (v != NULL)
6997             return v;
6998         }
6999
7000       else if (ada_is_variant_part (type, i))
7001         {
7002           /* PNH: Do we ever get here?  See find_struct_field.  */
7003           int j;
7004           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7005                                                                         i));
7006           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7007
7008           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7009             {
7010               struct value *v = ada_search_struct_field /* Force line
7011                                                            break.  */
7012                 (name, arg,
7013                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7014                  TYPE_FIELD_TYPE (field_type, j));
7015
7016               if (v != NULL)
7017                 return v;
7018             }
7019         }
7020     }
7021   return NULL;
7022 }
7023
7024 static struct value *ada_index_struct_field_1 (int *, struct value *,
7025                                                int, struct type *);
7026
7027
7028 /* Return field #INDEX in ARG, where the index is that returned by
7029  * find_struct_field through its INDEX_P argument.  Adjust the address
7030  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7031  * If found, return value, else return NULL.  */
7032
7033 static struct value *
7034 ada_index_struct_field (int index, struct value *arg, int offset,
7035                         struct type *type)
7036 {
7037   return ada_index_struct_field_1 (&index, arg, offset, type);
7038 }
7039
7040
7041 /* Auxiliary function for ada_index_struct_field.  Like
7042  * ada_index_struct_field, but takes index from *INDEX_P and modifies
7043  * *INDEX_P.  */
7044
7045 static struct value *
7046 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7047                           struct type *type)
7048 {
7049   int i;
7050   type = ada_check_typedef (type);
7051
7052   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7053     {
7054       if (TYPE_FIELD_NAME (type, i) == NULL)
7055         continue;
7056       else if (ada_is_wrapper_field (type, i))
7057         {
7058           struct value *v =     /* Do not let indent join lines here.  */
7059             ada_index_struct_field_1 (index_p, arg,
7060                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
7061                                       TYPE_FIELD_TYPE (type, i));
7062
7063           if (v != NULL)
7064             return v;
7065         }
7066
7067       else if (ada_is_variant_part (type, i))
7068         {
7069           /* PNH: Do we ever get here?  See ada_search_struct_field,
7070              find_struct_field.  */
7071           error (_("Cannot assign this kind of variant record"));
7072         }
7073       else if (*index_p == 0)
7074         return ada_value_primitive_field (arg, offset, i, type);
7075       else
7076         *index_p -= 1;
7077     }
7078   return NULL;
7079 }
7080
7081 /* Given ARG, a value of type (pointer or reference to a)*
7082    structure/union, extract the component named NAME from the ultimate
7083    target structure/union and return it as a value with its
7084    appropriate type.
7085
7086    The routine searches for NAME among all members of the structure itself
7087    and (recursively) among all members of any wrapper members
7088    (e.g., '_parent').
7089
7090    If NO_ERR, then simply return NULL in case of error, rather than 
7091    calling error.  */
7092
7093 struct value *
7094 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7095 {
7096   struct type *t, *t1;
7097   struct value *v;
7098
7099   v = NULL;
7100   t1 = t = ada_check_typedef (value_type (arg));
7101   if (TYPE_CODE (t) == TYPE_CODE_REF)
7102     {
7103       t1 = TYPE_TARGET_TYPE (t);
7104       if (t1 == NULL)
7105         goto BadValue;
7106       t1 = ada_check_typedef (t1);
7107       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7108         {
7109           arg = coerce_ref (arg);
7110           t = t1;
7111         }
7112     }
7113
7114   while (TYPE_CODE (t) == TYPE_CODE_PTR)
7115     {
7116       t1 = TYPE_TARGET_TYPE (t);
7117       if (t1 == NULL)
7118         goto BadValue;
7119       t1 = ada_check_typedef (t1);
7120       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7121         {
7122           arg = value_ind (arg);
7123           t = t1;
7124         }
7125       else
7126         break;
7127     }
7128
7129   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7130     goto BadValue;
7131
7132   if (t1 == t)
7133     v = ada_search_struct_field (name, arg, 0, t);
7134   else
7135     {
7136       int bit_offset, bit_size, byte_offset;
7137       struct type *field_type;
7138       CORE_ADDR address;
7139
7140       if (TYPE_CODE (t) == TYPE_CODE_PTR)
7141         address = value_address (ada_value_ind (arg));
7142       else
7143         address = value_address (ada_coerce_ref (arg));
7144
7145       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7146       if (find_struct_field (name, t1, 0,
7147                              &field_type, &byte_offset, &bit_offset,
7148                              &bit_size, NULL))
7149         {
7150           if (bit_size != 0)
7151             {
7152               if (TYPE_CODE (t) == TYPE_CODE_REF)
7153                 arg = ada_coerce_ref (arg);
7154               else
7155                 arg = ada_value_ind (arg);
7156               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7157                                                   bit_offset, bit_size,
7158                                                   field_type);
7159             }
7160           else
7161             v = value_at_lazy (field_type, address + byte_offset);
7162         }
7163     }
7164
7165   if (v != NULL || no_err)
7166     return v;
7167   else
7168     error (_("There is no member named %s."), name);
7169
7170  BadValue:
7171   if (no_err)
7172     return NULL;
7173   else
7174     error (_("Attempt to extract a component of "
7175              "a value that is not a record."));
7176 }
7177
7178 /* Given a type TYPE, look up the type of the component of type named NAME.
7179    If DISPP is non-null, add its byte displacement from the beginning of a
7180    structure (pointed to by a value) of type TYPE to *DISPP (does not
7181    work for packed fields).
7182
7183    Matches any field whose name has NAME as a prefix, possibly
7184    followed by "___".
7185
7186    TYPE can be either a struct or union.  If REFOK, TYPE may also 
7187    be a (pointer or reference)+ to a struct or union, and the
7188    ultimate target type will be searched.
7189
7190    Looks recursively into variant clauses and parent types.
7191
7192    If NOERR is nonzero, return NULL if NAME is not suitably defined or
7193    TYPE is not a type of the right kind.  */
7194
7195 static struct type *
7196 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7197                             int noerr, int *dispp)
7198 {
7199   int i;
7200
7201   if (name == NULL)
7202     goto BadName;
7203
7204   if (refok && type != NULL)
7205     while (1)
7206       {
7207         type = ada_check_typedef (type);
7208         if (TYPE_CODE (type) != TYPE_CODE_PTR
7209             && TYPE_CODE (type) != TYPE_CODE_REF)
7210           break;
7211         type = TYPE_TARGET_TYPE (type);
7212       }
7213
7214   if (type == NULL
7215       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7216           && TYPE_CODE (type) != TYPE_CODE_UNION))
7217     {
7218       if (noerr)
7219         return NULL;
7220       else
7221         {
7222           target_terminal_ours ();
7223           gdb_flush (gdb_stdout);
7224           if (type == NULL)
7225             error (_("Type (null) is not a structure or union type"));
7226           else
7227             {
7228               /* XXX: type_sprint */
7229               fprintf_unfiltered (gdb_stderr, _("Type "));
7230               type_print (type, "", gdb_stderr, -1);
7231               error (_(" is not a structure or union type"));
7232             }
7233         }
7234     }
7235
7236   type = to_static_fixed_type (type);
7237
7238   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7239     {
7240       const char *t_field_name = TYPE_FIELD_NAME (type, i);
7241       struct type *t;
7242       int disp;
7243
7244       if (t_field_name == NULL)
7245         continue;
7246
7247       else if (field_name_match (t_field_name, name))
7248         {
7249           if (dispp != NULL)
7250             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7251           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7252         }
7253
7254       else if (ada_is_wrapper_field (type, i))
7255         {
7256           disp = 0;
7257           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7258                                           0, 1, &disp);
7259           if (t != NULL)
7260             {
7261               if (dispp != NULL)
7262                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7263               return t;
7264             }
7265         }
7266
7267       else if (ada_is_variant_part (type, i))
7268         {
7269           int j;
7270           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7271                                                                         i));
7272
7273           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7274             {
7275               /* FIXME pnh 2008/01/26: We check for a field that is
7276                  NOT wrapped in a struct, since the compiler sometimes
7277                  generates these for unchecked variant types.  Revisit
7278                  if the compiler changes this practice.  */
7279               const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7280               disp = 0;
7281               if (v_field_name != NULL 
7282                   && field_name_match (v_field_name, name))
7283                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7284               else
7285                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7286                                                                  j),
7287                                                 name, 0, 1, &disp);
7288
7289               if (t != NULL)
7290                 {
7291                   if (dispp != NULL)
7292                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7293                   return t;
7294                 }
7295             }
7296         }
7297
7298     }
7299
7300 BadName:
7301   if (!noerr)
7302     {
7303       target_terminal_ours ();
7304       gdb_flush (gdb_stdout);
7305       if (name == NULL)
7306         {
7307           /* XXX: type_sprint */
7308           fprintf_unfiltered (gdb_stderr, _("Type "));
7309           type_print (type, "", gdb_stderr, -1);
7310           error (_(" has no component named <null>"));
7311         }
7312       else
7313         {
7314           /* XXX: type_sprint */
7315           fprintf_unfiltered (gdb_stderr, _("Type "));
7316           type_print (type, "", gdb_stderr, -1);
7317           error (_(" has no component named %s"), name);
7318         }
7319     }
7320
7321   return NULL;
7322 }
7323
7324 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7325    within a value of type OUTER_TYPE, return true iff VAR_TYPE
7326    represents an unchecked union (that is, the variant part of a
7327    record that is named in an Unchecked_Union pragma).  */
7328
7329 static int
7330 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7331 {
7332   char *discrim_name = ada_variant_discrim_name (var_type);
7333
7334   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
7335           == NULL);
7336 }
7337
7338
7339 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7340    within a value of type OUTER_TYPE that is stored in GDB at
7341    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7342    numbering from 0) is applicable.  Returns -1 if none are.  */
7343
7344 int
7345 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7346                            const gdb_byte *outer_valaddr)
7347 {
7348   int others_clause;
7349   int i;
7350   char *discrim_name = ada_variant_discrim_name (var_type);
7351   struct value *outer;
7352   struct value *discrim;
7353   LONGEST discrim_val;
7354
7355   /* Using plain value_from_contents_and_address here causes problems
7356      because we will end up trying to resolve a type that is currently
7357      being constructed.  */
7358   outer = value_from_contents_and_address_unresolved (outer_type,
7359                                                       outer_valaddr, 0);
7360   discrim = ada_value_struct_elt (outer, discrim_name, 1);
7361   if (discrim == NULL)
7362     return -1;
7363   discrim_val = value_as_long (discrim);
7364
7365   others_clause = -1;
7366   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7367     {
7368       if (ada_is_others_clause (var_type, i))
7369         others_clause = i;
7370       else if (ada_in_variant (discrim_val, var_type, i))
7371         return i;
7372     }
7373
7374   return others_clause;
7375 }
7376 \f
7377
7378
7379                                 /* Dynamic-Sized Records */
7380
7381 /* Strategy: The type ostensibly attached to a value with dynamic size
7382    (i.e., a size that is not statically recorded in the debugging
7383    data) does not accurately reflect the size or layout of the value.
7384    Our strategy is to convert these values to values with accurate,
7385    conventional types that are constructed on the fly.  */
7386
7387 /* There is a subtle and tricky problem here.  In general, we cannot
7388    determine the size of dynamic records without its data.  However,
7389    the 'struct value' data structure, which GDB uses to represent
7390    quantities in the inferior process (the target), requires the size
7391    of the type at the time of its allocation in order to reserve space
7392    for GDB's internal copy of the data.  That's why the
7393    'to_fixed_xxx_type' routines take (target) addresses as parameters,
7394    rather than struct value*s.
7395
7396    However, GDB's internal history variables ($1, $2, etc.) are
7397    struct value*s containing internal copies of the data that are not, in
7398    general, the same as the data at their corresponding addresses in
7399    the target.  Fortunately, the types we give to these values are all
7400    conventional, fixed-size types (as per the strategy described
7401    above), so that we don't usually have to perform the
7402    'to_fixed_xxx_type' conversions to look at their values.
7403    Unfortunately, there is one exception: if one of the internal
7404    history variables is an array whose elements are unconstrained
7405    records, then we will need to create distinct fixed types for each
7406    element selected.  */
7407
7408 /* The upshot of all of this is that many routines take a (type, host
7409    address, target address) triple as arguments to represent a value.
7410    The host address, if non-null, is supposed to contain an internal
7411    copy of the relevant data; otherwise, the program is to consult the
7412    target at the target address.  */
7413
7414 /* Assuming that VAL0 represents a pointer value, the result of
7415    dereferencing it.  Differs from value_ind in its treatment of
7416    dynamic-sized types.  */
7417
7418 struct value *
7419 ada_value_ind (struct value *val0)
7420 {
7421   struct value *val = value_ind (val0);
7422
7423   if (ada_is_tagged_type (value_type (val), 0))
7424     val = ada_tag_value_at_base_address (val);
7425
7426   return ada_to_fixed_value (val);
7427 }
7428
7429 /* The value resulting from dereferencing any "reference to"
7430    qualifiers on VAL0.  */
7431
7432 static struct value *
7433 ada_coerce_ref (struct value *val0)
7434 {
7435   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7436     {
7437       struct value *val = val0;
7438
7439       val = coerce_ref (val);
7440
7441       if (ada_is_tagged_type (value_type (val), 0))
7442         val = ada_tag_value_at_base_address (val);
7443
7444       return ada_to_fixed_value (val);
7445     }
7446   else
7447     return val0;
7448 }
7449
7450 /* Return OFF rounded upward if necessary to a multiple of
7451    ALIGNMENT (a power of 2).  */
7452
7453 static unsigned int
7454 align_value (unsigned int off, unsigned int alignment)
7455 {
7456   return (off + alignment - 1) & ~(alignment - 1);
7457 }
7458
7459 /* Return the bit alignment required for field #F of template type TYPE.  */
7460
7461 static unsigned int
7462 field_alignment (struct type *type, int f)
7463 {
7464   const char *name = TYPE_FIELD_NAME (type, f);
7465   int len;
7466   int align_offset;
7467
7468   /* The field name should never be null, unless the debugging information
7469      is somehow malformed.  In this case, we assume the field does not
7470      require any alignment.  */
7471   if (name == NULL)
7472     return 1;
7473
7474   len = strlen (name);
7475
7476   if (!isdigit (name[len - 1]))
7477     return 1;
7478
7479   if (isdigit (name[len - 2]))
7480     align_offset = len - 2;
7481   else
7482     align_offset = len - 1;
7483
7484   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7485     return TARGET_CHAR_BIT;
7486
7487   return atoi (name + align_offset) * TARGET_CHAR_BIT;
7488 }
7489
7490 /* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
7491
7492 static struct symbol *
7493 ada_find_any_type_symbol (const char *name)
7494 {
7495   struct symbol *sym;
7496
7497   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7498   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7499     return sym;
7500
7501   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7502   return sym;
7503 }
7504
7505 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
7506    solely for types defined by debug info, it will not search the GDB
7507    primitive types.  */
7508
7509 static struct type *
7510 ada_find_any_type (const char *name)
7511 {
7512   struct symbol *sym = ada_find_any_type_symbol (name);
7513
7514   if (sym != NULL)
7515     return SYMBOL_TYPE (sym);
7516
7517   return NULL;
7518 }
7519
7520 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7521    associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
7522    symbol, in which case it is returned.  Otherwise, this looks for
7523    symbols whose name is that of NAME_SYM suffixed with  "___XR".
7524    Return symbol if found, and NULL otherwise.  */
7525
7526 struct symbol *
7527 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7528 {
7529   const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7530   struct symbol *sym;
7531
7532   if (strstr (name, "___XR") != NULL)
7533      return name_sym;
7534
7535   sym = find_old_style_renaming_symbol (name, block);
7536
7537   if (sym != NULL)
7538     return sym;
7539
7540   /* Not right yet.  FIXME pnh 7/20/2007.  */
7541   sym = ada_find_any_type_symbol (name);
7542   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7543     return sym;
7544   else
7545     return NULL;
7546 }
7547
7548 static struct symbol *
7549 find_old_style_renaming_symbol (const char *name, const struct block *block)
7550 {
7551   const struct symbol *function_sym = block_linkage_function (block);
7552   char *rename;
7553
7554   if (function_sym != NULL)
7555     {
7556       /* If the symbol is defined inside a function, NAME is not fully
7557          qualified.  This means we need to prepend the function name
7558          as well as adding the ``___XR'' suffix to build the name of
7559          the associated renaming symbol.  */
7560       const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7561       /* Function names sometimes contain suffixes used
7562          for instance to qualify nested subprograms.  When building
7563          the XR type name, we need to make sure that this suffix is
7564          not included.  So do not include any suffix in the function
7565          name length below.  */
7566       int function_name_len = ada_name_prefix_len (function_name);
7567       const int rename_len = function_name_len + 2      /*  "__" */
7568         + strlen (name) + 6 /* "___XR\0" */ ;
7569
7570       /* Strip the suffix if necessary.  */
7571       ada_remove_trailing_digits (function_name, &function_name_len);
7572       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7573       ada_remove_Xbn_suffix (function_name, &function_name_len);
7574
7575       /* Library-level functions are a special case, as GNAT adds
7576          a ``_ada_'' prefix to the function name to avoid namespace
7577          pollution.  However, the renaming symbols themselves do not
7578          have this prefix, so we need to skip this prefix if present.  */
7579       if (function_name_len > 5 /* "_ada_" */
7580           && strstr (function_name, "_ada_") == function_name)
7581         {
7582           function_name += 5;
7583           function_name_len -= 5;
7584         }
7585
7586       rename = (char *) alloca (rename_len * sizeof (char));
7587       strncpy (rename, function_name, function_name_len);
7588       xsnprintf (rename + function_name_len, rename_len - function_name_len,
7589                  "__%s___XR", name);
7590     }
7591   else
7592     {
7593       const int rename_len = strlen (name) + 6;
7594
7595       rename = (char *) alloca (rename_len * sizeof (char));
7596       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7597     }
7598
7599   return ada_find_any_type_symbol (rename);
7600 }
7601
7602 /* Because of GNAT encoding conventions, several GDB symbols may match a
7603    given type name.  If the type denoted by TYPE0 is to be preferred to
7604    that of TYPE1 for purposes of type printing, return non-zero;
7605    otherwise return 0.  */
7606
7607 int
7608 ada_prefer_type (struct type *type0, struct type *type1)
7609 {
7610   if (type1 == NULL)
7611     return 1;
7612   else if (type0 == NULL)
7613     return 0;
7614   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7615     return 1;
7616   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7617     return 0;
7618   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7619     return 1;
7620   else if (ada_is_constrained_packed_array_type (type0))
7621     return 1;
7622   else if (ada_is_array_descriptor_type (type0)
7623            && !ada_is_array_descriptor_type (type1))
7624     return 1;
7625   else
7626     {
7627       const char *type0_name = type_name_no_tag (type0);
7628       const char *type1_name = type_name_no_tag (type1);
7629
7630       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7631           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7632         return 1;
7633     }
7634   return 0;
7635 }
7636
7637 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7638    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
7639
7640 const char *
7641 ada_type_name (struct type *type)
7642 {
7643   if (type == NULL)
7644     return NULL;
7645   else if (TYPE_NAME (type) != NULL)
7646     return TYPE_NAME (type);
7647   else
7648     return TYPE_TAG_NAME (type);
7649 }
7650
7651 /* Search the list of "descriptive" types associated to TYPE for a type
7652    whose name is NAME.  */
7653
7654 static struct type *
7655 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7656 {
7657   struct type *result;
7658
7659   if (ada_ignore_descriptive_types_p)
7660     return NULL;
7661
7662   /* If there no descriptive-type info, then there is no parallel type
7663      to be found.  */
7664   if (!HAVE_GNAT_AUX_INFO (type))
7665     return NULL;
7666
7667   result = TYPE_DESCRIPTIVE_TYPE (type);
7668   while (result != NULL)
7669     {
7670       const char *result_name = ada_type_name (result);
7671
7672       if (result_name == NULL)
7673         {
7674           warning (_("unexpected null name on descriptive type"));
7675           return NULL;
7676         }
7677
7678       /* If the names match, stop.  */
7679       if (strcmp (result_name, name) == 0)
7680         break;
7681
7682       /* Otherwise, look at the next item on the list, if any.  */
7683       if (HAVE_GNAT_AUX_INFO (result))
7684         result = TYPE_DESCRIPTIVE_TYPE (result);
7685       else
7686         result = NULL;
7687     }
7688
7689   /* If we didn't find a match, see whether this is a packed array.  With
7690      older compilers, the descriptive type information is either absent or
7691      irrelevant when it comes to packed arrays so the above lookup fails.
7692      Fall back to using a parallel lookup by name in this case.  */
7693   if (result == NULL && ada_is_constrained_packed_array_type (type))
7694     return ada_find_any_type (name);
7695
7696   return result;
7697 }
7698
7699 /* Find a parallel type to TYPE with the specified NAME, using the
7700    descriptive type taken from the debugging information, if available,
7701    and otherwise using the (slower) name-based method.  */
7702
7703 static struct type *
7704 ada_find_parallel_type_with_name (struct type *type, const char *name)
7705 {
7706   struct type *result = NULL;
7707
7708   if (HAVE_GNAT_AUX_INFO (type))
7709     result = find_parallel_type_by_descriptive_type (type, name);
7710   else
7711     result = ada_find_any_type (name);
7712
7713   return result;
7714 }
7715
7716 /* Same as above, but specify the name of the parallel type by appending
7717    SUFFIX to the name of TYPE.  */
7718
7719 struct type *
7720 ada_find_parallel_type (struct type *type, const char *suffix)
7721 {
7722   char *name;
7723   const char *typename = ada_type_name (type);
7724   int len;
7725
7726   if (typename == NULL)
7727     return NULL;
7728
7729   len = strlen (typename);
7730
7731   name = (char *) alloca (len + strlen (suffix) + 1);
7732
7733   strcpy (name, typename);
7734   strcpy (name + len, suffix);
7735
7736   return ada_find_parallel_type_with_name (type, name);
7737 }
7738
7739 /* If TYPE is a variable-size record type, return the corresponding template
7740    type describing its fields.  Otherwise, return NULL.  */
7741
7742 static struct type *
7743 dynamic_template_type (struct type *type)
7744 {
7745   type = ada_check_typedef (type);
7746
7747   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7748       || ada_type_name (type) == NULL)
7749     return NULL;
7750   else
7751     {
7752       int len = strlen (ada_type_name (type));
7753
7754       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7755         return type;
7756       else
7757         return ada_find_parallel_type (type, "___XVE");
7758     }
7759 }
7760
7761 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7762    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7763
7764 static int
7765 is_dynamic_field (struct type *templ_type, int field_num)
7766 {
7767   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7768
7769   return name != NULL
7770     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7771     && strstr (name, "___XVL") != NULL;
7772 }
7773
7774 /* The index of the variant field of TYPE, or -1 if TYPE does not
7775    represent a variant record type.  */
7776
7777 static int
7778 variant_field_index (struct type *type)
7779 {
7780   int f;
7781
7782   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7783     return -1;
7784
7785   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7786     {
7787       if (ada_is_variant_part (type, f))
7788         return f;
7789     }
7790   return -1;
7791 }
7792
7793 /* A record type with no fields.  */
7794
7795 static struct type *
7796 empty_record (struct type *template)
7797 {
7798   struct type *type = alloc_type_copy (template);
7799
7800   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7801   TYPE_NFIELDS (type) = 0;
7802   TYPE_FIELDS (type) = NULL;
7803   INIT_CPLUS_SPECIFIC (type);
7804   TYPE_NAME (type) = "<empty>";
7805   TYPE_TAG_NAME (type) = NULL;
7806   TYPE_LENGTH (type) = 0;
7807   return type;
7808 }
7809
7810 /* An ordinary record type (with fixed-length fields) that describes
7811    the value of type TYPE at VALADDR or ADDRESS (see comments at
7812    the beginning of this section) VAL according to GNAT conventions.
7813    DVAL0 should describe the (portion of a) record that contains any
7814    necessary discriminants.  It should be NULL if value_type (VAL) is
7815    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7816    variant field (unless unchecked) is replaced by a particular branch
7817    of the variant.
7818
7819    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7820    length are not statically known are discarded.  As a consequence,
7821    VALADDR, ADDRESS and DVAL0 are ignored.
7822
7823    NOTE: Limitations: For now, we assume that dynamic fields and
7824    variants occupy whole numbers of bytes.  However, they need not be
7825    byte-aligned.  */
7826
7827 struct type *
7828 ada_template_to_fixed_record_type_1 (struct type *type,
7829                                      const gdb_byte *valaddr,
7830                                      CORE_ADDR address, struct value *dval0,
7831                                      int keep_dynamic_fields)
7832 {
7833   struct value *mark = value_mark ();
7834   struct value *dval;
7835   struct type *rtype;
7836   int nfields, bit_len;
7837   int variant_field;
7838   long off;
7839   int fld_bit_len;
7840   int f;
7841
7842   /* Compute the number of fields in this record type that are going
7843      to be processed: unless keep_dynamic_fields, this includes only
7844      fields whose position and length are static will be processed.  */
7845   if (keep_dynamic_fields)
7846     nfields = TYPE_NFIELDS (type);
7847   else
7848     {
7849       nfields = 0;
7850       while (nfields < TYPE_NFIELDS (type)
7851              && !ada_is_variant_part (type, nfields)
7852              && !is_dynamic_field (type, nfields))
7853         nfields++;
7854     }
7855
7856   rtype = alloc_type_copy (type);
7857   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7858   INIT_CPLUS_SPECIFIC (rtype);
7859   TYPE_NFIELDS (rtype) = nfields;
7860   TYPE_FIELDS (rtype) = (struct field *)
7861     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7862   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7863   TYPE_NAME (rtype) = ada_type_name (type);
7864   TYPE_TAG_NAME (rtype) = NULL;
7865   TYPE_FIXED_INSTANCE (rtype) = 1;
7866
7867   off = 0;
7868   bit_len = 0;
7869   variant_field = -1;
7870
7871   for (f = 0; f < nfields; f += 1)
7872     {
7873       off = align_value (off, field_alignment (type, f))
7874         + TYPE_FIELD_BITPOS (type, f);
7875       SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7876       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7877
7878       if (ada_is_variant_part (type, f))
7879         {
7880           variant_field = f;
7881           fld_bit_len = 0;
7882         }
7883       else if (is_dynamic_field (type, f))
7884         {
7885           const gdb_byte *field_valaddr = valaddr;
7886           CORE_ADDR field_address = address;
7887           struct type *field_type =
7888             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7889
7890           if (dval0 == NULL)
7891             {
7892               /* rtype's length is computed based on the run-time
7893                  value of discriminants.  If the discriminants are not
7894                  initialized, the type size may be completely bogus and
7895                  GDB may fail to allocate a value for it.  So check the
7896                  size first before creating the value.  */
7897               check_size (rtype);
7898               /* Using plain value_from_contents_and_address here
7899                  causes problems because we will end up trying to
7900                  resolve a type that is currently being
7901                  constructed.  */
7902               dval = value_from_contents_and_address_unresolved (rtype,
7903                                                                  valaddr,
7904                                                                  address);
7905               rtype = value_type (dval);
7906             }
7907           else
7908             dval = dval0;
7909
7910           /* If the type referenced by this field is an aligner type, we need
7911              to unwrap that aligner type, because its size might not be set.
7912              Keeping the aligner type would cause us to compute the wrong
7913              size for this field, impacting the offset of the all the fields
7914              that follow this one.  */
7915           if (ada_is_aligner_type (field_type))
7916             {
7917               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7918
7919               field_valaddr = cond_offset_host (field_valaddr, field_offset);
7920               field_address = cond_offset_target (field_address, field_offset);
7921               field_type = ada_aligned_type (field_type);
7922             }
7923
7924           field_valaddr = cond_offset_host (field_valaddr,
7925                                             off / TARGET_CHAR_BIT);
7926           field_address = cond_offset_target (field_address,
7927                                               off / TARGET_CHAR_BIT);
7928
7929           /* Get the fixed type of the field.  Note that, in this case,
7930              we do not want to get the real type out of the tag: if
7931              the current field is the parent part of a tagged record,
7932              we will get the tag of the object.  Clearly wrong: the real
7933              type of the parent is not the real type of the child.  We
7934              would end up in an infinite loop.  */
7935           field_type = ada_get_base_type (field_type);
7936           field_type = ada_to_fixed_type (field_type, field_valaddr,
7937                                           field_address, dval, 0);
7938           /* If the field size is already larger than the maximum
7939              object size, then the record itself will necessarily
7940              be larger than the maximum object size.  We need to make
7941              this check now, because the size might be so ridiculously
7942              large (due to an uninitialized variable in the inferior)
7943              that it would cause an overflow when adding it to the
7944              record size.  */
7945           check_size (field_type);
7946
7947           TYPE_FIELD_TYPE (rtype, f) = field_type;
7948           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7949           /* The multiplication can potentially overflow.  But because
7950              the field length has been size-checked just above, and
7951              assuming that the maximum size is a reasonable value,
7952              an overflow should not happen in practice.  So rather than
7953              adding overflow recovery code to this already complex code,
7954              we just assume that it's not going to happen.  */
7955           fld_bit_len =
7956             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7957         }
7958       else
7959         {
7960           /* Note: If this field's type is a typedef, it is important
7961              to preserve the typedef layer.
7962
7963              Otherwise, we might be transforming a typedef to a fat
7964              pointer (encoding a pointer to an unconstrained array),
7965              into a basic fat pointer (encoding an unconstrained
7966              array).  As both types are implemented using the same
7967              structure, the typedef is the only clue which allows us
7968              to distinguish between the two options.  Stripping it
7969              would prevent us from printing this field appropriately.  */
7970           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
7971           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7972           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7973             fld_bit_len =
7974               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7975           else
7976             {
7977               struct type *field_type = TYPE_FIELD_TYPE (type, f);
7978
7979               /* We need to be careful of typedefs when computing
7980                  the length of our field.  If this is a typedef,
7981                  get the length of the target type, not the length
7982                  of the typedef.  */
7983               if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7984                 field_type = ada_typedef_target_type (field_type);
7985
7986               fld_bit_len =
7987                 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7988             }
7989         }
7990       if (off + fld_bit_len > bit_len)
7991         bit_len = off + fld_bit_len;
7992       off += fld_bit_len;
7993       TYPE_LENGTH (rtype) =
7994         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7995     }
7996
7997   /* We handle the variant part, if any, at the end because of certain
7998      odd cases in which it is re-ordered so as NOT to be the last field of
7999      the record.  This can happen in the presence of representation
8000      clauses.  */
8001   if (variant_field >= 0)
8002     {
8003       struct type *branch_type;
8004
8005       off = TYPE_FIELD_BITPOS (rtype, variant_field);
8006
8007       if (dval0 == NULL)
8008         {
8009           /* Using plain value_from_contents_and_address here causes
8010              problems because we will end up trying to resolve a type
8011              that is currently being constructed.  */
8012           dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8013                                                              address);
8014           rtype = value_type (dval);
8015         }
8016       else
8017         dval = dval0;
8018
8019       branch_type =
8020         to_fixed_variant_branch_type
8021         (TYPE_FIELD_TYPE (type, variant_field),
8022          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8023          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8024       if (branch_type == NULL)
8025         {
8026           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8027             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8028           TYPE_NFIELDS (rtype) -= 1;
8029         }
8030       else
8031         {
8032           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8033           TYPE_FIELD_NAME (rtype, variant_field) = "S";
8034           fld_bit_len =
8035             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8036             TARGET_CHAR_BIT;
8037           if (off + fld_bit_len > bit_len)
8038             bit_len = off + fld_bit_len;
8039           TYPE_LENGTH (rtype) =
8040             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8041         }
8042     }
8043
8044   /* According to exp_dbug.ads, the size of TYPE for variable-size records
8045      should contain the alignment of that record, which should be a strictly
8046      positive value.  If null or negative, then something is wrong, most
8047      probably in the debug info.  In that case, we don't round up the size
8048      of the resulting type.  If this record is not part of another structure,
8049      the current RTYPE length might be good enough for our purposes.  */
8050   if (TYPE_LENGTH (type) <= 0)
8051     {
8052       if (TYPE_NAME (rtype))
8053         warning (_("Invalid type size for `%s' detected: %d."),
8054                  TYPE_NAME (rtype), TYPE_LENGTH (type));
8055       else
8056         warning (_("Invalid type size for <unnamed> detected: %d."),
8057                  TYPE_LENGTH (type));
8058     }
8059   else
8060     {
8061       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8062                                          TYPE_LENGTH (type));
8063     }
8064
8065   value_free_to_mark (mark);
8066   if (TYPE_LENGTH (rtype) > varsize_limit)
8067     error (_("record type with dynamic size is larger than varsize-limit"));
8068   return rtype;
8069 }
8070
8071 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8072    of 1.  */
8073
8074 static struct type *
8075 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8076                                CORE_ADDR address, struct value *dval0)
8077 {
8078   return ada_template_to_fixed_record_type_1 (type, valaddr,
8079                                               address, dval0, 1);
8080 }
8081
8082 /* An ordinary record type in which ___XVL-convention fields and
8083    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8084    static approximations, containing all possible fields.  Uses
8085    no runtime values.  Useless for use in values, but that's OK,
8086    since the results are used only for type determinations.   Works on both
8087    structs and unions.  Representation note: to save space, we memorize
8088    the result of this function in the TYPE_TARGET_TYPE of the
8089    template type.  */
8090
8091 static struct type *
8092 template_to_static_fixed_type (struct type *type0)
8093 {
8094   struct type *type;
8095   int nfields;
8096   int f;
8097
8098   if (TYPE_TARGET_TYPE (type0) != NULL)
8099     return TYPE_TARGET_TYPE (type0);
8100
8101   nfields = TYPE_NFIELDS (type0);
8102   type = type0;
8103
8104   for (f = 0; f < nfields; f += 1)
8105     {
8106       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
8107       struct type *new_type;
8108
8109       if (is_dynamic_field (type0, f))
8110         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8111       else
8112         new_type = static_unwrap_type (field_type);
8113       if (type == type0 && new_type != field_type)
8114         {
8115           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8116           TYPE_CODE (type) = TYPE_CODE (type0);
8117           INIT_CPLUS_SPECIFIC (type);
8118           TYPE_NFIELDS (type) = nfields;
8119           TYPE_FIELDS (type) = (struct field *)
8120             TYPE_ALLOC (type, nfields * sizeof (struct field));
8121           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8122                   sizeof (struct field) * nfields);
8123           TYPE_NAME (type) = ada_type_name (type0);
8124           TYPE_TAG_NAME (type) = NULL;
8125           TYPE_FIXED_INSTANCE (type) = 1;
8126           TYPE_LENGTH (type) = 0;
8127         }
8128       TYPE_FIELD_TYPE (type, f) = new_type;
8129       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8130     }
8131   return type;
8132 }
8133
8134 /* Given an object of type TYPE whose contents are at VALADDR and
8135    whose address in memory is ADDRESS, returns a revision of TYPE,
8136    which should be a non-dynamic-sized record, in which the variant
8137    part, if any, is replaced with the appropriate branch.  Looks
8138    for discriminant values in DVAL0, which can be NULL if the record
8139    contains the necessary discriminant values.  */
8140
8141 static struct type *
8142 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8143                                    CORE_ADDR address, struct value *dval0)
8144 {
8145   struct value *mark = value_mark ();
8146   struct value *dval;
8147   struct type *rtype;
8148   struct type *branch_type;
8149   int nfields = TYPE_NFIELDS (type);
8150   int variant_field = variant_field_index (type);
8151
8152   if (variant_field == -1)
8153     return type;
8154
8155   if (dval0 == NULL)
8156     {
8157       dval = value_from_contents_and_address (type, valaddr, address);
8158       type = value_type (dval);
8159     }
8160   else
8161     dval = dval0;
8162
8163   rtype = alloc_type_copy (type);
8164   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8165   INIT_CPLUS_SPECIFIC (rtype);
8166   TYPE_NFIELDS (rtype) = nfields;
8167   TYPE_FIELDS (rtype) =
8168     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8169   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8170           sizeof (struct field) * nfields);
8171   TYPE_NAME (rtype) = ada_type_name (type);
8172   TYPE_TAG_NAME (rtype) = NULL;
8173   TYPE_FIXED_INSTANCE (rtype) = 1;
8174   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8175
8176   branch_type = to_fixed_variant_branch_type
8177     (TYPE_FIELD_TYPE (type, variant_field),
8178      cond_offset_host (valaddr,
8179                        TYPE_FIELD_BITPOS (type, variant_field)
8180                        / TARGET_CHAR_BIT),
8181      cond_offset_target (address,
8182                          TYPE_FIELD_BITPOS (type, variant_field)
8183                          / TARGET_CHAR_BIT), dval);
8184   if (branch_type == NULL)
8185     {
8186       int f;
8187
8188       for (f = variant_field + 1; f < nfields; f += 1)
8189         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8190       TYPE_NFIELDS (rtype) -= 1;
8191     }
8192   else
8193     {
8194       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8195       TYPE_FIELD_NAME (rtype, variant_field) = "S";
8196       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8197       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8198     }
8199   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8200
8201   value_free_to_mark (mark);
8202   return rtype;
8203 }
8204
8205 /* An ordinary record type (with fixed-length fields) that describes
8206    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8207    beginning of this section].   Any necessary discriminants' values
8208    should be in DVAL, a record value; it may be NULL if the object
8209    at ADDR itself contains any necessary discriminant values.
8210    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8211    values from the record are needed.  Except in the case that DVAL,
8212    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8213    unchecked) is replaced by a particular branch of the variant.
8214
8215    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8216    is questionable and may be removed.  It can arise during the
8217    processing of an unconstrained-array-of-record type where all the
8218    variant branches have exactly the same size.  This is because in
8219    such cases, the compiler does not bother to use the XVS convention
8220    when encoding the record.  I am currently dubious of this
8221    shortcut and suspect the compiler should be altered.  FIXME.  */
8222
8223 static struct type *
8224 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8225                       CORE_ADDR address, struct value *dval)
8226 {
8227   struct type *templ_type;
8228
8229   if (TYPE_FIXED_INSTANCE (type0))
8230     return type0;
8231
8232   templ_type = dynamic_template_type (type0);
8233
8234   if (templ_type != NULL)
8235     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8236   else if (variant_field_index (type0) >= 0)
8237     {
8238       if (dval == NULL && valaddr == NULL && address == 0)
8239         return type0;
8240       return to_record_with_fixed_variant_part (type0, valaddr, address,
8241                                                 dval);
8242     }
8243   else
8244     {
8245       TYPE_FIXED_INSTANCE (type0) = 1;
8246       return type0;
8247     }
8248
8249 }
8250
8251 /* An ordinary record type (with fixed-length fields) that describes
8252    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8253    union type.  Any necessary discriminants' values should be in DVAL,
8254    a record value.  That is, this routine selects the appropriate
8255    branch of the union at ADDR according to the discriminant value
8256    indicated in the union's type name.  Returns VAR_TYPE0 itself if
8257    it represents a variant subject to a pragma Unchecked_Union.  */
8258
8259 static struct type *
8260 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8261                               CORE_ADDR address, struct value *dval)
8262 {
8263   int which;
8264   struct type *templ_type;
8265   struct type *var_type;
8266
8267   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8268     var_type = TYPE_TARGET_TYPE (var_type0);
8269   else
8270     var_type = var_type0;
8271
8272   templ_type = ada_find_parallel_type (var_type, "___XVU");
8273
8274   if (templ_type != NULL)
8275     var_type = templ_type;
8276
8277   if (is_unchecked_variant (var_type, value_type (dval)))
8278       return var_type0;
8279   which =
8280     ada_which_variant_applies (var_type,
8281                                value_type (dval), value_contents (dval));
8282
8283   if (which < 0)
8284     return empty_record (var_type);
8285   else if (is_dynamic_field (var_type, which))
8286     return to_fixed_record_type
8287       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8288        valaddr, address, dval);
8289   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8290     return
8291       to_fixed_record_type
8292       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8293   else
8294     return TYPE_FIELD_TYPE (var_type, which);
8295 }
8296
8297 /* Assuming that TYPE0 is an array type describing the type of a value
8298    at ADDR, and that DVAL describes a record containing any
8299    discriminants used in TYPE0, returns a type for the value that
8300    contains no dynamic components (that is, no components whose sizes
8301    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
8302    true, gives an error message if the resulting type's size is over
8303    varsize_limit.  */
8304
8305 static struct type *
8306 to_fixed_array_type (struct type *type0, struct value *dval,
8307                      int ignore_too_big)
8308 {
8309   struct type *index_type_desc;
8310   struct type *result;
8311   int constrained_packed_array_p;
8312
8313   type0 = ada_check_typedef (type0);
8314   if (TYPE_FIXED_INSTANCE (type0))
8315     return type0;
8316
8317   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8318   if (constrained_packed_array_p)
8319     type0 = decode_constrained_packed_array_type (type0);
8320
8321   index_type_desc = ada_find_parallel_type (type0, "___XA");
8322   ada_fixup_array_indexes_type (index_type_desc);
8323   if (index_type_desc == NULL)
8324     {
8325       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8326
8327       /* NOTE: elt_type---the fixed version of elt_type0---should never
8328          depend on the contents of the array in properly constructed
8329          debugging data.  */
8330       /* Create a fixed version of the array element type.
8331          We're not providing the address of an element here,
8332          and thus the actual object value cannot be inspected to do
8333          the conversion.  This should not be a problem, since arrays of
8334          unconstrained objects are not allowed.  In particular, all
8335          the elements of an array of a tagged type should all be of
8336          the same type specified in the debugging info.  No need to
8337          consult the object tag.  */
8338       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8339
8340       /* Make sure we always create a new array type when dealing with
8341          packed array types, since we're going to fix-up the array
8342          type length and element bitsize a little further down.  */
8343       if (elt_type0 == elt_type && !constrained_packed_array_p)
8344         result = type0;
8345       else
8346         result = create_array_type (alloc_type_copy (type0),
8347                                     elt_type, TYPE_INDEX_TYPE (type0));
8348     }
8349   else
8350     {
8351       int i;
8352       struct type *elt_type0;
8353
8354       elt_type0 = type0;
8355       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8356         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8357
8358       /* NOTE: result---the fixed version of elt_type0---should never
8359          depend on the contents of the array in properly constructed
8360          debugging data.  */
8361       /* Create a fixed version of the array element type.
8362          We're not providing the address of an element here,
8363          and thus the actual object value cannot be inspected to do
8364          the conversion.  This should not be a problem, since arrays of
8365          unconstrained objects are not allowed.  In particular, all
8366          the elements of an array of a tagged type should all be of
8367          the same type specified in the debugging info.  No need to
8368          consult the object tag.  */
8369       result =
8370         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8371
8372       elt_type0 = type0;
8373       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8374         {
8375           struct type *range_type =
8376             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8377
8378           result = create_array_type (alloc_type_copy (elt_type0),
8379                                       result, range_type);
8380           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8381         }
8382       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8383         error (_("array type with dynamic size is larger than varsize-limit"));
8384     }
8385
8386   /* We want to preserve the type name.  This can be useful when
8387      trying to get the type name of a value that has already been
8388      printed (for instance, if the user did "print VAR; whatis $".  */
8389   TYPE_NAME (result) = TYPE_NAME (type0);
8390
8391   if (constrained_packed_array_p)
8392     {
8393       /* So far, the resulting type has been created as if the original
8394          type was a regular (non-packed) array type.  As a result, the
8395          bitsize of the array elements needs to be set again, and the array
8396          length needs to be recomputed based on that bitsize.  */
8397       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8398       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8399
8400       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8401       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8402       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8403         TYPE_LENGTH (result)++;
8404     }
8405
8406   TYPE_FIXED_INSTANCE (result) = 1;
8407   return result;
8408 }
8409
8410
8411 /* A standard type (containing no dynamically sized components)
8412    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8413    DVAL describes a record containing any discriminants used in TYPE0,
8414    and may be NULL if there are none, or if the object of type TYPE at
8415    ADDRESS or in VALADDR contains these discriminants.
8416    
8417    If CHECK_TAG is not null, in the case of tagged types, this function
8418    attempts to locate the object's tag and use it to compute the actual
8419    type.  However, when ADDRESS is null, we cannot use it to determine the
8420    location of the tag, and therefore compute the tagged type's actual type.
8421    So we return the tagged type without consulting the tag.  */
8422    
8423 static struct type *
8424 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8425                    CORE_ADDR address, struct value *dval, int check_tag)
8426 {
8427   type = ada_check_typedef (type);
8428   switch (TYPE_CODE (type))
8429     {
8430     default:
8431       return type;
8432     case TYPE_CODE_STRUCT:
8433       {
8434         struct type *static_type = to_static_fixed_type (type);
8435         struct type *fixed_record_type =
8436           to_fixed_record_type (type, valaddr, address, NULL);
8437
8438         /* If STATIC_TYPE is a tagged type and we know the object's address,
8439            then we can determine its tag, and compute the object's actual
8440            type from there.  Note that we have to use the fixed record
8441            type (the parent part of the record may have dynamic fields
8442            and the way the location of _tag is expressed may depend on
8443            them).  */
8444
8445         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8446           {
8447             struct value *tag =
8448               value_tag_from_contents_and_address
8449               (fixed_record_type,
8450                valaddr,
8451                address);
8452             struct type *real_type = type_from_tag (tag);
8453             struct value *obj =
8454               value_from_contents_and_address (fixed_record_type,
8455                                                valaddr,
8456                                                address);
8457             fixed_record_type = value_type (obj);
8458             if (real_type != NULL)
8459               return to_fixed_record_type
8460                 (real_type, NULL,
8461                  value_address (ada_tag_value_at_base_address (obj)), NULL);
8462           }
8463
8464         /* Check to see if there is a parallel ___XVZ variable.
8465            If there is, then it provides the actual size of our type.  */
8466         else if (ada_type_name (fixed_record_type) != NULL)
8467           {
8468             const char *name = ada_type_name (fixed_record_type);
8469             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8470             int xvz_found = 0;
8471             LONGEST size;
8472
8473             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8474             size = get_int_var_value (xvz_name, &xvz_found);
8475             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8476               {
8477                 fixed_record_type = copy_type (fixed_record_type);
8478                 TYPE_LENGTH (fixed_record_type) = size;
8479
8480                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
8481                    observed this when the debugging info is STABS, and
8482                    apparently it is something that is hard to fix.
8483
8484                    In practice, we don't need the actual type definition
8485                    at all, because the presence of the XVZ variable allows us
8486                    to assume that there must be a XVS type as well, which we
8487                    should be able to use later, when we need the actual type
8488                    definition.
8489
8490                    In the meantime, pretend that the "fixed" type we are
8491                    returning is NOT a stub, because this can cause trouble
8492                    when using this type to create new types targeting it.
8493                    Indeed, the associated creation routines often check
8494                    whether the target type is a stub and will try to replace
8495                    it, thus using a type with the wrong size.  This, in turn,
8496                    might cause the new type to have the wrong size too.
8497                    Consider the case of an array, for instance, where the size
8498                    of the array is computed from the number of elements in
8499                    our array multiplied by the size of its element.  */
8500                 TYPE_STUB (fixed_record_type) = 0;
8501               }
8502           }
8503         return fixed_record_type;
8504       }
8505     case TYPE_CODE_ARRAY:
8506       return to_fixed_array_type (type, dval, 1);
8507     case TYPE_CODE_UNION:
8508       if (dval == NULL)
8509         return type;
8510       else
8511         return to_fixed_variant_branch_type (type, valaddr, address, dval);
8512     }
8513 }
8514
8515 /* The same as ada_to_fixed_type_1, except that it preserves the type
8516    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8517
8518    The typedef layer needs be preserved in order to differentiate between
8519    arrays and array pointers when both types are implemented using the same
8520    fat pointer.  In the array pointer case, the pointer is encoded as
8521    a typedef of the pointer type.  For instance, considering:
8522
8523           type String_Access is access String;
8524           S1 : String_Access := null;
8525
8526    To the debugger, S1 is defined as a typedef of type String.  But
8527    to the user, it is a pointer.  So if the user tries to print S1,
8528    we should not dereference the array, but print the array address
8529    instead.
8530
8531    If we didn't preserve the typedef layer, we would lose the fact that
8532    the type is to be presented as a pointer (needs de-reference before
8533    being printed).  And we would also use the source-level type name.  */
8534
8535 struct type *
8536 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8537                    CORE_ADDR address, struct value *dval, int check_tag)
8538
8539 {
8540   struct type *fixed_type =
8541     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8542
8543   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8544       then preserve the typedef layer.
8545
8546       Implementation note: We can only check the main-type portion of
8547       the TYPE and FIXED_TYPE, because eliminating the typedef layer
8548       from TYPE now returns a type that has the same instance flags
8549       as TYPE.  For instance, if TYPE is a "typedef const", and its
8550       target type is a "struct", then the typedef elimination will return
8551       a "const" version of the target type.  See check_typedef for more
8552       details about how the typedef layer elimination is done.
8553
8554       brobecker/2010-11-19: It seems to me that the only case where it is
8555       useful to preserve the typedef layer is when dealing with fat pointers.
8556       Perhaps, we could add a check for that and preserve the typedef layer
8557       only in that situation.  But this seems unecessary so far, probably
8558       because we call check_typedef/ada_check_typedef pretty much everywhere.
8559       */
8560   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8561       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8562           == TYPE_MAIN_TYPE (fixed_type)))
8563     return type;
8564
8565   return fixed_type;
8566 }
8567
8568 /* A standard (static-sized) type corresponding as well as possible to
8569    TYPE0, but based on no runtime data.  */
8570
8571 static struct type *
8572 to_static_fixed_type (struct type *type0)
8573 {
8574   struct type *type;
8575
8576   if (type0 == NULL)
8577     return NULL;
8578
8579   if (TYPE_FIXED_INSTANCE (type0))
8580     return type0;
8581
8582   type0 = ada_check_typedef (type0);
8583
8584   switch (TYPE_CODE (type0))
8585     {
8586     default:
8587       return type0;
8588     case TYPE_CODE_STRUCT:
8589       type = dynamic_template_type (type0);
8590       if (type != NULL)
8591         return template_to_static_fixed_type (type);
8592       else
8593         return template_to_static_fixed_type (type0);
8594     case TYPE_CODE_UNION:
8595       type = ada_find_parallel_type (type0, "___XVU");
8596       if (type != NULL)
8597         return template_to_static_fixed_type (type);
8598       else
8599         return template_to_static_fixed_type (type0);
8600     }
8601 }
8602
8603 /* A static approximation of TYPE with all type wrappers removed.  */
8604
8605 static struct type *
8606 static_unwrap_type (struct type *type)
8607 {
8608   if (ada_is_aligner_type (type))
8609     {
8610       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8611       if (ada_type_name (type1) == NULL)
8612         TYPE_NAME (type1) = ada_type_name (type);
8613
8614       return static_unwrap_type (type1);
8615     }
8616   else
8617     {
8618       struct type *raw_real_type = ada_get_base_type (type);
8619
8620       if (raw_real_type == type)
8621         return type;
8622       else
8623         return to_static_fixed_type (raw_real_type);
8624     }
8625 }
8626
8627 /* In some cases, incomplete and private types require
8628    cross-references that are not resolved as records (for example,
8629       type Foo;
8630       type FooP is access Foo;
8631       V: FooP;
8632       type Foo is array ...;
8633    ).  In these cases, since there is no mechanism for producing
8634    cross-references to such types, we instead substitute for FooP a
8635    stub enumeration type that is nowhere resolved, and whose tag is
8636    the name of the actual type.  Call these types "non-record stubs".  */
8637
8638 /* A type equivalent to TYPE that is not a non-record stub, if one
8639    exists, otherwise TYPE.  */
8640
8641 struct type *
8642 ada_check_typedef (struct type *type)
8643 {
8644   if (type == NULL)
8645     return NULL;
8646
8647   /* If our type is a typedef type of a fat pointer, then we're done.
8648      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8649      what allows us to distinguish between fat pointers that represent
8650      array types, and fat pointers that represent array access types
8651      (in both cases, the compiler implements them as fat pointers).  */
8652   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8653       && is_thick_pntr (ada_typedef_target_type (type)))
8654     return type;
8655
8656   CHECK_TYPEDEF (type);
8657   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8658       || !TYPE_STUB (type)
8659       || TYPE_TAG_NAME (type) == NULL)
8660     return type;
8661   else
8662     {
8663       const char *name = TYPE_TAG_NAME (type);
8664       struct type *type1 = ada_find_any_type (name);
8665
8666       if (type1 == NULL)
8667         return type;
8668
8669       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8670          stubs pointing to arrays, as we don't create symbols for array
8671          types, only for the typedef-to-array types).  If that's the case,
8672          strip the typedef layer.  */
8673       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8674         type1 = ada_check_typedef (type1);
8675
8676       return type1;
8677     }
8678 }
8679
8680 /* A value representing the data at VALADDR/ADDRESS as described by
8681    type TYPE0, but with a standard (static-sized) type that correctly
8682    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
8683    type, then return VAL0 [this feature is simply to avoid redundant
8684    creation of struct values].  */
8685
8686 static struct value *
8687 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8688                            struct value *val0)
8689 {
8690   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8691
8692   if (type == type0 && val0 != NULL)
8693     return val0;
8694   else
8695     return value_from_contents_and_address (type, 0, address);
8696 }
8697
8698 /* A value representing VAL, but with a standard (static-sized) type
8699    that correctly describes it.  Does not necessarily create a new
8700    value.  */
8701
8702 struct value *
8703 ada_to_fixed_value (struct value *val)
8704 {
8705   val = unwrap_value (val);
8706   val = ada_to_fixed_value_create (value_type (val),
8707                                       value_address (val),
8708                                       val);
8709   return val;
8710 }
8711 \f
8712
8713 /* Attributes */
8714
8715 /* Table mapping attribute numbers to names.
8716    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
8717
8718 static const char *attribute_names[] = {
8719   "<?>",
8720
8721   "first",
8722   "last",
8723   "length",
8724   "image",
8725   "max",
8726   "min",
8727   "modulus",
8728   "pos",
8729   "size",
8730   "tag",
8731   "val",
8732   0
8733 };
8734
8735 const char *
8736 ada_attribute_name (enum exp_opcode n)
8737 {
8738   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8739     return attribute_names[n - OP_ATR_FIRST + 1];
8740   else
8741     return attribute_names[0];
8742 }
8743
8744 /* Evaluate the 'POS attribute applied to ARG.  */
8745
8746 static LONGEST
8747 pos_atr (struct value *arg)
8748 {
8749   struct value *val = coerce_ref (arg);
8750   struct type *type = value_type (val);
8751
8752   if (!discrete_type_p (type))
8753     error (_("'POS only defined on discrete types"));
8754
8755   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8756     {
8757       int i;
8758       LONGEST v = value_as_long (val);
8759
8760       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8761         {
8762           if (v == TYPE_FIELD_ENUMVAL (type, i))
8763             return i;
8764         }
8765       error (_("enumeration value is invalid: can't find 'POS"));
8766     }
8767   else
8768     return value_as_long (val);
8769 }
8770
8771 static struct value *
8772 value_pos_atr (struct type *type, struct value *arg)
8773 {
8774   return value_from_longest (type, pos_atr (arg));
8775 }
8776
8777 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8778
8779 static struct value *
8780 value_val_atr (struct type *type, struct value *arg)
8781 {
8782   if (!discrete_type_p (type))
8783     error (_("'VAL only defined on discrete types"));
8784   if (!integer_type_p (value_type (arg)))
8785     error (_("'VAL requires integral argument"));
8786
8787   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8788     {
8789       long pos = value_as_long (arg);
8790
8791       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8792         error (_("argument to 'VAL out of range"));
8793       return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8794     }
8795   else
8796     return value_from_longest (type, value_as_long (arg));
8797 }
8798 \f
8799
8800                                 /* Evaluation */
8801
8802 /* True if TYPE appears to be an Ada character type.
8803    [At the moment, this is true only for Character and Wide_Character;
8804    It is a heuristic test that could stand improvement].  */
8805
8806 int
8807 ada_is_character_type (struct type *type)
8808 {
8809   const char *name;
8810
8811   /* If the type code says it's a character, then assume it really is,
8812      and don't check any further.  */
8813   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8814     return 1;
8815   
8816   /* Otherwise, assume it's a character type iff it is a discrete type
8817      with a known character type name.  */
8818   name = ada_type_name (type);
8819   return (name != NULL
8820           && (TYPE_CODE (type) == TYPE_CODE_INT
8821               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8822           && (strcmp (name, "character") == 0
8823               || strcmp (name, "wide_character") == 0
8824               || strcmp (name, "wide_wide_character") == 0
8825               || strcmp (name, "unsigned char") == 0));
8826 }
8827
8828 /* True if TYPE appears to be an Ada string type.  */
8829
8830 int
8831 ada_is_string_type (struct type *type)
8832 {
8833   type = ada_check_typedef (type);
8834   if (type != NULL
8835       && TYPE_CODE (type) != TYPE_CODE_PTR
8836       && (ada_is_simple_array_type (type)
8837           || ada_is_array_descriptor_type (type))
8838       && ada_array_arity (type) == 1)
8839     {
8840       struct type *elttype = ada_array_element_type (type, 1);
8841
8842       return ada_is_character_type (elttype);
8843     }
8844   else
8845     return 0;
8846 }
8847
8848 /* The compiler sometimes provides a parallel XVS type for a given
8849    PAD type.  Normally, it is safe to follow the PAD type directly,
8850    but older versions of the compiler have a bug that causes the offset
8851    of its "F" field to be wrong.  Following that field in that case
8852    would lead to incorrect results, but this can be worked around
8853    by ignoring the PAD type and using the associated XVS type instead.
8854
8855    Set to True if the debugger should trust the contents of PAD types.
8856    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8857 static int trust_pad_over_xvs = 1;
8858
8859 /* True if TYPE is a struct type introduced by the compiler to force the
8860    alignment of a value.  Such types have a single field with a
8861    distinctive name.  */
8862
8863 int
8864 ada_is_aligner_type (struct type *type)
8865 {
8866   type = ada_check_typedef (type);
8867
8868   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8869     return 0;
8870
8871   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8872           && TYPE_NFIELDS (type) == 1
8873           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8874 }
8875
8876 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8877    the parallel type.  */
8878
8879 struct type *
8880 ada_get_base_type (struct type *raw_type)
8881 {
8882   struct type *real_type_namer;
8883   struct type *raw_real_type;
8884
8885   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8886     return raw_type;
8887
8888   if (ada_is_aligner_type (raw_type))
8889     /* The encoding specifies that we should always use the aligner type.
8890        So, even if this aligner type has an associated XVS type, we should
8891        simply ignore it.
8892
8893        According to the compiler gurus, an XVS type parallel to an aligner
8894        type may exist because of a stabs limitation.  In stabs, aligner
8895        types are empty because the field has a variable-sized type, and
8896        thus cannot actually be used as an aligner type.  As a result,
8897        we need the associated parallel XVS type to decode the type.
8898        Since the policy in the compiler is to not change the internal
8899        representation based on the debugging info format, we sometimes
8900        end up having a redundant XVS type parallel to the aligner type.  */
8901     return raw_type;
8902
8903   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8904   if (real_type_namer == NULL
8905       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8906       || TYPE_NFIELDS (real_type_namer) != 1)
8907     return raw_type;
8908
8909   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8910     {
8911       /* This is an older encoding form where the base type needs to be
8912          looked up by name.  We prefer the newer enconding because it is
8913          more efficient.  */
8914       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8915       if (raw_real_type == NULL)
8916         return raw_type;
8917       else
8918         return raw_real_type;
8919     }
8920
8921   /* The field in our XVS type is a reference to the base type.  */
8922   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
8923 }
8924
8925 /* The type of value designated by TYPE, with all aligners removed.  */
8926
8927 struct type *
8928 ada_aligned_type (struct type *type)
8929 {
8930   if (ada_is_aligner_type (type))
8931     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8932   else
8933     return ada_get_base_type (type);
8934 }
8935
8936
8937 /* The address of the aligned value in an object at address VALADDR
8938    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
8939
8940 const gdb_byte *
8941 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
8942 {
8943   if (ada_is_aligner_type (type))
8944     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8945                                    valaddr +
8946                                    TYPE_FIELD_BITPOS (type,
8947                                                       0) / TARGET_CHAR_BIT);
8948   else
8949     return valaddr;
8950 }
8951
8952
8953
8954 /* The printed representation of an enumeration literal with encoded
8955    name NAME.  The value is good to the next call of ada_enum_name.  */
8956 const char *
8957 ada_enum_name (const char *name)
8958 {
8959   static char *result;
8960   static size_t result_len = 0;
8961   char *tmp;
8962
8963   /* First, unqualify the enumeration name:
8964      1. Search for the last '.' character.  If we find one, then skip
8965      all the preceding characters, the unqualified name starts
8966      right after that dot.
8967      2. Otherwise, we may be debugging on a target where the compiler
8968      translates dots into "__".  Search forward for double underscores,
8969      but stop searching when we hit an overloading suffix, which is
8970      of the form "__" followed by digits.  */
8971
8972   tmp = strrchr (name, '.');
8973   if (tmp != NULL)
8974     name = tmp + 1;
8975   else
8976     {
8977       while ((tmp = strstr (name, "__")) != NULL)
8978         {
8979           if (isdigit (tmp[2]))
8980             break;
8981           else
8982             name = tmp + 2;
8983         }
8984     }
8985
8986   if (name[0] == 'Q')
8987     {
8988       int v;
8989
8990       if (name[1] == 'U' || name[1] == 'W')
8991         {
8992           if (sscanf (name + 2, "%x", &v) != 1)
8993             return name;
8994         }
8995       else
8996         return name;
8997
8998       GROW_VECT (result, result_len, 16);
8999       if (isascii (v) && isprint (v))
9000         xsnprintf (result, result_len, "'%c'", v);
9001       else if (name[1] == 'U')
9002         xsnprintf (result, result_len, "[\"%02x\"]", v);
9003       else
9004         xsnprintf (result, result_len, "[\"%04x\"]", v);
9005
9006       return result;
9007     }
9008   else
9009     {
9010       tmp = strstr (name, "__");
9011       if (tmp == NULL)
9012         tmp = strstr (name, "$");
9013       if (tmp != NULL)
9014         {
9015           GROW_VECT (result, result_len, tmp - name + 1);
9016           strncpy (result, name, tmp - name);
9017           result[tmp - name] = '\0';
9018           return result;
9019         }
9020
9021       return name;
9022     }
9023 }
9024
9025 /* Evaluate the subexpression of EXP starting at *POS as for
9026    evaluate_type, updating *POS to point just past the evaluated
9027    expression.  */
9028
9029 static struct value *
9030 evaluate_subexp_type (struct expression *exp, int *pos)
9031 {
9032   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9033 }
9034
9035 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9036    value it wraps.  */
9037
9038 static struct value *
9039 unwrap_value (struct value *val)
9040 {
9041   struct type *type = ada_check_typedef (value_type (val));
9042
9043   if (ada_is_aligner_type (type))
9044     {
9045       struct value *v = ada_value_struct_elt (val, "F", 0);
9046       struct type *val_type = ada_check_typedef (value_type (v));
9047
9048       if (ada_type_name (val_type) == NULL)
9049         TYPE_NAME (val_type) = ada_type_name (type);
9050
9051       return unwrap_value (v);
9052     }
9053   else
9054     {
9055       struct type *raw_real_type =
9056         ada_check_typedef (ada_get_base_type (type));
9057
9058       /* If there is no parallel XVS or XVE type, then the value is
9059          already unwrapped.  Return it without further modification.  */
9060       if ((type == raw_real_type)
9061           && ada_find_parallel_type (type, "___XVE") == NULL)
9062         return val;
9063
9064       return
9065         coerce_unspec_val_to_type
9066         (val, ada_to_fixed_type (raw_real_type, 0,
9067                                  value_address (val),
9068                                  NULL, 1));
9069     }
9070 }
9071
9072 static struct value *
9073 cast_to_fixed (struct type *type, struct value *arg)
9074 {
9075   LONGEST val;
9076
9077   if (type == value_type (arg))
9078     return arg;
9079   else if (ada_is_fixed_point_type (value_type (arg)))
9080     val = ada_float_to_fixed (type,
9081                               ada_fixed_to_float (value_type (arg),
9082                                                   value_as_long (arg)));
9083   else
9084     {
9085       DOUBLEST argd = value_as_double (arg);
9086
9087       val = ada_float_to_fixed (type, argd);
9088     }
9089
9090   return value_from_longest (type, val);
9091 }
9092
9093 static struct value *
9094 cast_from_fixed (struct type *type, struct value *arg)
9095 {
9096   DOUBLEST val = ada_fixed_to_float (value_type (arg),
9097                                      value_as_long (arg));
9098
9099   return value_from_double (type, val);
9100 }
9101
9102 /* Given two array types T1 and T2, return nonzero iff both arrays
9103    contain the same number of elements.  */
9104
9105 static int
9106 ada_same_array_size_p (struct type *t1, struct type *t2)
9107 {
9108   LONGEST lo1, hi1, lo2, hi2;
9109
9110   /* Get the array bounds in order to verify that the size of
9111      the two arrays match.  */
9112   if (!get_array_bounds (t1, &lo1, &hi1)
9113       || !get_array_bounds (t2, &lo2, &hi2))
9114     error (_("unable to determine array bounds"));
9115
9116   /* To make things easier for size comparison, normalize a bit
9117      the case of empty arrays by making sure that the difference
9118      between upper bound and lower bound is always -1.  */
9119   if (lo1 > hi1)
9120     hi1 = lo1 - 1;
9121   if (lo2 > hi2)
9122     hi2 = lo2 - 1;
9123
9124   return (hi1 - lo1 == hi2 - lo2);
9125 }
9126
9127 /* Assuming that VAL is an array of integrals, and TYPE represents
9128    an array with the same number of elements, but with wider integral
9129    elements, return an array "casted" to TYPE.  In practice, this
9130    means that the returned array is built by casting each element
9131    of the original array into TYPE's (wider) element type.  */
9132
9133 static struct value *
9134 ada_promote_array_of_integrals (struct type *type, struct value *val)
9135 {
9136   struct type *elt_type = TYPE_TARGET_TYPE (type);
9137   LONGEST lo, hi;
9138   struct value *res;
9139   LONGEST i;
9140
9141   /* Verify that both val and type are arrays of scalars, and
9142      that the size of val's elements is smaller than the size
9143      of type's element.  */
9144   gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9145   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9146   gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9147   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9148   gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9149               > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9150
9151   if (!get_array_bounds (type, &lo, &hi))
9152     error (_("unable to determine array bounds"));
9153
9154   res = allocate_value (type);
9155
9156   /* Promote each array element.  */
9157   for (i = 0; i < hi - lo + 1; i++)
9158     {
9159       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9160
9161       memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9162               value_contents_all (elt), TYPE_LENGTH (elt_type));
9163     }
9164
9165   return res;
9166 }
9167
9168 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9169    return the converted value.  */
9170
9171 static struct value *
9172 coerce_for_assign (struct type *type, struct value *val)
9173 {
9174   struct type *type2 = value_type (val);
9175
9176   if (type == type2)
9177     return val;
9178
9179   type2 = ada_check_typedef (type2);
9180   type = ada_check_typedef (type);
9181
9182   if (TYPE_CODE (type2) == TYPE_CODE_PTR
9183       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9184     {
9185       val = ada_value_ind (val);
9186       type2 = value_type (val);
9187     }
9188
9189   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9190       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9191     {
9192       if (!ada_same_array_size_p (type, type2))
9193         error (_("cannot assign arrays of different length"));
9194
9195       if (is_integral_type (TYPE_TARGET_TYPE (type))
9196           && is_integral_type (TYPE_TARGET_TYPE (type2))
9197           && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9198                < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9199         {
9200           /* Allow implicit promotion of the array elements to
9201              a wider type.  */
9202           return ada_promote_array_of_integrals (type, val);
9203         }
9204
9205       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9206           != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9207         error (_("Incompatible types in assignment"));
9208       deprecated_set_value_type (val, type);
9209     }
9210   return val;
9211 }
9212
9213 static struct value *
9214 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9215 {
9216   struct value *val;
9217   struct type *type1, *type2;
9218   LONGEST v, v1, v2;
9219
9220   arg1 = coerce_ref (arg1);
9221   arg2 = coerce_ref (arg2);
9222   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9223   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9224
9225   if (TYPE_CODE (type1) != TYPE_CODE_INT
9226       || TYPE_CODE (type2) != TYPE_CODE_INT)
9227     return value_binop (arg1, arg2, op);
9228
9229   switch (op)
9230     {
9231     case BINOP_MOD:
9232     case BINOP_DIV:
9233     case BINOP_REM:
9234       break;
9235     default:
9236       return value_binop (arg1, arg2, op);
9237     }
9238
9239   v2 = value_as_long (arg2);
9240   if (v2 == 0)
9241     error (_("second operand of %s must not be zero."), op_string (op));
9242
9243   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9244     return value_binop (arg1, arg2, op);
9245
9246   v1 = value_as_long (arg1);
9247   switch (op)
9248     {
9249     case BINOP_DIV:
9250       v = v1 / v2;
9251       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9252         v += v > 0 ? -1 : 1;
9253       break;
9254     case BINOP_REM:
9255       v = v1 % v2;
9256       if (v * v1 < 0)
9257         v -= v2;
9258       break;
9259     default:
9260       /* Should not reach this point.  */
9261       v = 0;
9262     }
9263
9264   val = allocate_value (type1);
9265   store_unsigned_integer (value_contents_raw (val),
9266                           TYPE_LENGTH (value_type (val)),
9267                           gdbarch_byte_order (get_type_arch (type1)), v);
9268   return val;
9269 }
9270
9271 static int
9272 ada_value_equal (struct value *arg1, struct value *arg2)
9273 {
9274   if (ada_is_direct_array_type (value_type (arg1))
9275       || ada_is_direct_array_type (value_type (arg2)))
9276     {
9277       /* Automatically dereference any array reference before
9278          we attempt to perform the comparison.  */
9279       arg1 = ada_coerce_ref (arg1);
9280       arg2 = ada_coerce_ref (arg2);
9281       
9282       arg1 = ada_coerce_to_simple_array (arg1);
9283       arg2 = ada_coerce_to_simple_array (arg2);
9284       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9285           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9286         error (_("Attempt to compare array with non-array"));
9287       /* FIXME: The following works only for types whose
9288          representations use all bits (no padding or undefined bits)
9289          and do not have user-defined equality.  */
9290       return
9291         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9292         && memcmp (value_contents (arg1), value_contents (arg2),
9293                    TYPE_LENGTH (value_type (arg1))) == 0;
9294     }
9295   return value_equal (arg1, arg2);
9296 }
9297
9298 /* Total number of component associations in the aggregate starting at
9299    index PC in EXP.  Assumes that index PC is the start of an
9300    OP_AGGREGATE.  */
9301
9302 static int
9303 num_component_specs (struct expression *exp, int pc)
9304 {
9305   int n, m, i;
9306
9307   m = exp->elts[pc + 1].longconst;
9308   pc += 3;
9309   n = 0;
9310   for (i = 0; i < m; i += 1)
9311     {
9312       switch (exp->elts[pc].opcode) 
9313         {
9314         default:
9315           n += 1;
9316           break;
9317         case OP_CHOICES:
9318           n += exp->elts[pc + 1].longconst;
9319           break;
9320         }
9321       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9322     }
9323   return n;
9324 }
9325
9326 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
9327    component of LHS (a simple array or a record), updating *POS past
9328    the expression, assuming that LHS is contained in CONTAINER.  Does
9329    not modify the inferior's memory, nor does it modify LHS (unless
9330    LHS == CONTAINER).  */
9331
9332 static void
9333 assign_component (struct value *container, struct value *lhs, LONGEST index,
9334                   struct expression *exp, int *pos)
9335 {
9336   struct value *mark = value_mark ();
9337   struct value *elt;
9338
9339   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9340     {
9341       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9342       struct value *index_val = value_from_longest (index_type, index);
9343
9344       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9345     }
9346   else
9347     {
9348       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9349       elt = ada_to_fixed_value (elt);
9350     }
9351
9352   if (exp->elts[*pos].opcode == OP_AGGREGATE)
9353     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9354   else
9355     value_assign_to_component (container, elt, 
9356                                ada_evaluate_subexp (NULL, exp, pos, 
9357                                                     EVAL_NORMAL));
9358
9359   value_free_to_mark (mark);
9360 }
9361
9362 /* Assuming that LHS represents an lvalue having a record or array
9363    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9364    of that aggregate's value to LHS, advancing *POS past the
9365    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
9366    lvalue containing LHS (possibly LHS itself).  Does not modify
9367    the inferior's memory, nor does it modify the contents of 
9368    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
9369
9370 static struct value *
9371 assign_aggregate (struct value *container, 
9372                   struct value *lhs, struct expression *exp, 
9373                   int *pos, enum noside noside)
9374 {
9375   struct type *lhs_type;
9376   int n = exp->elts[*pos+1].longconst;
9377   LONGEST low_index, high_index;
9378   int num_specs;
9379   LONGEST *indices;
9380   int max_indices, num_indices;
9381   int i;
9382
9383   *pos += 3;
9384   if (noside != EVAL_NORMAL)
9385     {
9386       for (i = 0; i < n; i += 1)
9387         ada_evaluate_subexp (NULL, exp, pos, noside);
9388       return container;
9389     }
9390
9391   container = ada_coerce_ref (container);
9392   if (ada_is_direct_array_type (value_type (container)))
9393     container = ada_coerce_to_simple_array (container);
9394   lhs = ada_coerce_ref (lhs);
9395   if (!deprecated_value_modifiable (lhs))
9396     error (_("Left operand of assignment is not a modifiable lvalue."));
9397
9398   lhs_type = value_type (lhs);
9399   if (ada_is_direct_array_type (lhs_type))
9400     {
9401       lhs = ada_coerce_to_simple_array (lhs);
9402       lhs_type = value_type (lhs);
9403       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9404       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9405     }
9406   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9407     {
9408       low_index = 0;
9409       high_index = num_visible_fields (lhs_type) - 1;
9410     }
9411   else
9412     error (_("Left-hand side must be array or record."));
9413
9414   num_specs = num_component_specs (exp, *pos - 3);
9415   max_indices = 4 * num_specs + 4;
9416   indices = alloca (max_indices * sizeof (indices[0]));
9417   indices[0] = indices[1] = low_index - 1;
9418   indices[2] = indices[3] = high_index + 1;
9419   num_indices = 4;
9420
9421   for (i = 0; i < n; i += 1)
9422     {
9423       switch (exp->elts[*pos].opcode)
9424         {
9425           case OP_CHOICES:
9426             aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
9427                                            &num_indices, max_indices,
9428                                            low_index, high_index);
9429             break;
9430           case OP_POSITIONAL:
9431             aggregate_assign_positional (container, lhs, exp, pos, indices,
9432                                          &num_indices, max_indices,
9433                                          low_index, high_index);
9434             break;
9435           case OP_OTHERS:
9436             if (i != n-1)
9437               error (_("Misplaced 'others' clause"));
9438             aggregate_assign_others (container, lhs, exp, pos, indices, 
9439                                      num_indices, low_index, high_index);
9440             break;
9441           default:
9442             error (_("Internal error: bad aggregate clause"));
9443         }
9444     }
9445
9446   return container;
9447 }
9448               
9449 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9450    construct at *POS, updating *POS past the construct, given that
9451    the positions are relative to lower bound LOW, where HIGH is the 
9452    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
9453    updating *NUM_INDICES as needed.  CONTAINER is as for
9454    assign_aggregate.  */
9455 static void
9456 aggregate_assign_positional (struct value *container,
9457                              struct value *lhs, struct expression *exp,
9458                              int *pos, LONGEST *indices, int *num_indices,
9459                              int max_indices, LONGEST low, LONGEST high) 
9460 {
9461   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9462   
9463   if (ind - 1 == high)
9464     warning (_("Extra components in aggregate ignored."));
9465   if (ind <= high)
9466     {
9467       add_component_interval (ind, ind, indices, num_indices, max_indices);
9468       *pos += 3;
9469       assign_component (container, lhs, ind, exp, pos);
9470     }
9471   else
9472     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9473 }
9474
9475 /* Assign into the components of LHS indexed by the OP_CHOICES
9476    construct at *POS, updating *POS past the construct, given that
9477    the allowable indices are LOW..HIGH.  Record the indices assigned
9478    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9479    needed.  CONTAINER is as for assign_aggregate.  */
9480 static void
9481 aggregate_assign_from_choices (struct value *container,
9482                                struct value *lhs, struct expression *exp,
9483                                int *pos, LONGEST *indices, int *num_indices,
9484                                int max_indices, LONGEST low, LONGEST high) 
9485 {
9486   int j;
9487   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9488   int choice_pos, expr_pc;
9489   int is_array = ada_is_direct_array_type (value_type (lhs));
9490
9491   choice_pos = *pos += 3;
9492
9493   for (j = 0; j < n_choices; j += 1)
9494     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9495   expr_pc = *pos;
9496   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9497   
9498   for (j = 0; j < n_choices; j += 1)
9499     {
9500       LONGEST lower, upper;
9501       enum exp_opcode op = exp->elts[choice_pos].opcode;
9502
9503       if (op == OP_DISCRETE_RANGE)
9504         {
9505           choice_pos += 1;
9506           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9507                                                       EVAL_NORMAL));
9508           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
9509                                                       EVAL_NORMAL));
9510         }
9511       else if (is_array)
9512         {
9513           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
9514                                                       EVAL_NORMAL));
9515           upper = lower;
9516         }
9517       else
9518         {
9519           int ind;
9520           const char *name;
9521
9522           switch (op)
9523             {
9524             case OP_NAME:
9525               name = &exp->elts[choice_pos + 2].string;
9526               break;
9527             case OP_VAR_VALUE:
9528               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9529               break;
9530             default:
9531               error (_("Invalid record component association."));
9532             }
9533           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9534           ind = 0;
9535           if (! find_struct_field (name, value_type (lhs), 0, 
9536                                    NULL, NULL, NULL, NULL, &ind))
9537             error (_("Unknown component name: %s."), name);
9538           lower = upper = ind;
9539         }
9540
9541       if (lower <= upper && (lower < low || upper > high))
9542         error (_("Index in component association out of bounds."));
9543
9544       add_component_interval (lower, upper, indices, num_indices,
9545                               max_indices);
9546       while (lower <= upper)
9547         {
9548           int pos1;
9549
9550           pos1 = expr_pc;
9551           assign_component (container, lhs, lower, exp, &pos1);
9552           lower += 1;
9553         }
9554     }
9555 }
9556
9557 /* Assign the value of the expression in the OP_OTHERS construct in
9558    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9559    have not been previously assigned.  The index intervals already assigned
9560    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
9561    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
9562 static void
9563 aggregate_assign_others (struct value *container,
9564                          struct value *lhs, struct expression *exp,
9565                          int *pos, LONGEST *indices, int num_indices,
9566                          LONGEST low, LONGEST high) 
9567 {
9568   int i;
9569   int expr_pc = *pos + 1;
9570   
9571   for (i = 0; i < num_indices - 2; i += 2)
9572     {
9573       LONGEST ind;
9574
9575       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9576         {
9577           int localpos;
9578
9579           localpos = expr_pc;
9580           assign_component (container, lhs, ind, exp, &localpos);
9581         }
9582     }
9583   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9584 }
9585
9586 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
9587    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9588    modifying *SIZE as needed.  It is an error if *SIZE exceeds
9589    MAX_SIZE.  The resulting intervals do not overlap.  */
9590 static void
9591 add_component_interval (LONGEST low, LONGEST high, 
9592                         LONGEST* indices, int *size, int max_size)
9593 {
9594   int i, j;
9595
9596   for (i = 0; i < *size; i += 2) {
9597     if (high >= indices[i] && low <= indices[i + 1])
9598       {
9599         int kh;
9600
9601         for (kh = i + 2; kh < *size; kh += 2)
9602           if (high < indices[kh])
9603             break;
9604         if (low < indices[i])
9605           indices[i] = low;
9606         indices[i + 1] = indices[kh - 1];
9607         if (high > indices[i + 1])
9608           indices[i + 1] = high;
9609         memcpy (indices + i + 2, indices + kh, *size - kh);
9610         *size -= kh - i - 2;
9611         return;
9612       }
9613     else if (high < indices[i])
9614       break;
9615   }
9616         
9617   if (*size == max_size)
9618     error (_("Internal error: miscounted aggregate components."));
9619   *size += 2;
9620   for (j = *size-1; j >= i+2; j -= 1)
9621     indices[j] = indices[j - 2];
9622   indices[i] = low;
9623   indices[i + 1] = high;
9624 }
9625
9626 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9627    is different.  */
9628
9629 static struct value *
9630 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9631 {
9632   if (type == ada_check_typedef (value_type (arg2)))
9633     return arg2;
9634
9635   if (ada_is_fixed_point_type (type))
9636     return (cast_to_fixed (type, arg2));
9637
9638   if (ada_is_fixed_point_type (value_type (arg2)))
9639     return cast_from_fixed (type, arg2);
9640
9641   return value_cast (type, arg2);
9642 }
9643
9644 /*  Evaluating Ada expressions, and printing their result.
9645     ------------------------------------------------------
9646
9647     1. Introduction:
9648     ----------------
9649
9650     We usually evaluate an Ada expression in order to print its value.
9651     We also evaluate an expression in order to print its type, which
9652     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9653     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
9654     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9655     the evaluation compared to the EVAL_NORMAL, but is otherwise very
9656     similar.
9657
9658     Evaluating expressions is a little more complicated for Ada entities
9659     than it is for entities in languages such as C.  The main reason for
9660     this is that Ada provides types whose definition might be dynamic.
9661     One example of such types is variant records.  Or another example
9662     would be an array whose bounds can only be known at run time.
9663
9664     The following description is a general guide as to what should be
9665     done (and what should NOT be done) in order to evaluate an expression
9666     involving such types, and when.  This does not cover how the semantic
9667     information is encoded by GNAT as this is covered separatly.  For the
9668     document used as the reference for the GNAT encoding, see exp_dbug.ads
9669     in the GNAT sources.
9670
9671     Ideally, we should embed each part of this description next to its
9672     associated code.  Unfortunately, the amount of code is so vast right
9673     now that it's hard to see whether the code handling a particular
9674     situation might be duplicated or not.  One day, when the code is
9675     cleaned up, this guide might become redundant with the comments
9676     inserted in the code, and we might want to remove it.
9677
9678     2. ``Fixing'' an Entity, the Simple Case:
9679     -----------------------------------------
9680
9681     When evaluating Ada expressions, the tricky issue is that they may
9682     reference entities whose type contents and size are not statically
9683     known.  Consider for instance a variant record:
9684
9685        type Rec (Empty : Boolean := True) is record
9686           case Empty is
9687              when True => null;
9688              when False => Value : Integer;
9689           end case;
9690        end record;
9691        Yes : Rec := (Empty => False, Value => 1);
9692        No  : Rec := (empty => True);
9693
9694     The size and contents of that record depends on the value of the
9695     descriminant (Rec.Empty).  At this point, neither the debugging
9696     information nor the associated type structure in GDB are able to
9697     express such dynamic types.  So what the debugger does is to create
9698     "fixed" versions of the type that applies to the specific object.
9699     We also informally refer to this opperation as "fixing" an object,
9700     which means creating its associated fixed type.
9701
9702     Example: when printing the value of variable "Yes" above, its fixed
9703     type would look like this:
9704
9705        type Rec is record
9706           Empty : Boolean;
9707           Value : Integer;
9708        end record;
9709
9710     On the other hand, if we printed the value of "No", its fixed type
9711     would become:
9712
9713        type Rec is record
9714           Empty : Boolean;
9715        end record;
9716
9717     Things become a little more complicated when trying to fix an entity
9718     with a dynamic type that directly contains another dynamic type,
9719     such as an array of variant records, for instance.  There are
9720     two possible cases: Arrays, and records.
9721
9722     3. ``Fixing'' Arrays:
9723     ---------------------
9724
9725     The type structure in GDB describes an array in terms of its bounds,
9726     and the type of its elements.  By design, all elements in the array
9727     have the same type and we cannot represent an array of variant elements
9728     using the current type structure in GDB.  When fixing an array,
9729     we cannot fix the array element, as we would potentially need one
9730     fixed type per element of the array.  As a result, the best we can do
9731     when fixing an array is to produce an array whose bounds and size
9732     are correct (allowing us to read it from memory), but without having
9733     touched its element type.  Fixing each element will be done later,
9734     when (if) necessary.
9735
9736     Arrays are a little simpler to handle than records, because the same
9737     amount of memory is allocated for each element of the array, even if
9738     the amount of space actually used by each element differs from element
9739     to element.  Consider for instance the following array of type Rec:
9740
9741        type Rec_Array is array (1 .. 2) of Rec;
9742
9743     The actual amount of memory occupied by each element might be different
9744     from element to element, depending on the value of their discriminant.
9745     But the amount of space reserved for each element in the array remains
9746     fixed regardless.  So we simply need to compute that size using
9747     the debugging information available, from which we can then determine
9748     the array size (we multiply the number of elements of the array by
9749     the size of each element).
9750
9751     The simplest case is when we have an array of a constrained element
9752     type. For instance, consider the following type declarations:
9753
9754         type Bounded_String (Max_Size : Integer) is
9755            Length : Integer;
9756            Buffer : String (1 .. Max_Size);
9757         end record;
9758         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9759
9760     In this case, the compiler describes the array as an array of
9761     variable-size elements (identified by its XVS suffix) for which
9762     the size can be read in the parallel XVZ variable.
9763
9764     In the case of an array of an unconstrained element type, the compiler
9765     wraps the array element inside a private PAD type.  This type should not
9766     be shown to the user, and must be "unwrap"'ed before printing.  Note
9767     that we also use the adjective "aligner" in our code to designate
9768     these wrapper types.
9769
9770     In some cases, the size allocated for each element is statically
9771     known.  In that case, the PAD type already has the correct size,
9772     and the array element should remain unfixed.
9773
9774     But there are cases when this size is not statically known.
9775     For instance, assuming that "Five" is an integer variable:
9776
9777         type Dynamic is array (1 .. Five) of Integer;
9778         type Wrapper (Has_Length : Boolean := False) is record
9779            Data : Dynamic;
9780            case Has_Length is
9781               when True => Length : Integer;
9782               when False => null;
9783            end case;
9784         end record;
9785         type Wrapper_Array is array (1 .. 2) of Wrapper;
9786
9787         Hello : Wrapper_Array := (others => (Has_Length => True,
9788                                              Data => (others => 17),
9789                                              Length => 1));
9790
9791
9792     The debugging info would describe variable Hello as being an
9793     array of a PAD type.  The size of that PAD type is not statically
9794     known, but can be determined using a parallel XVZ variable.
9795     In that case, a copy of the PAD type with the correct size should
9796     be used for the fixed array.
9797
9798     3. ``Fixing'' record type objects:
9799     ----------------------------------
9800
9801     Things are slightly different from arrays in the case of dynamic
9802     record types.  In this case, in order to compute the associated
9803     fixed type, we need to determine the size and offset of each of
9804     its components.  This, in turn, requires us to compute the fixed
9805     type of each of these components.
9806
9807     Consider for instance the example:
9808
9809         type Bounded_String (Max_Size : Natural) is record
9810            Str : String (1 .. Max_Size);
9811            Length : Natural;
9812         end record;
9813         My_String : Bounded_String (Max_Size => 10);
9814
9815     In that case, the position of field "Length" depends on the size
9816     of field Str, which itself depends on the value of the Max_Size
9817     discriminant.  In order to fix the type of variable My_String,
9818     we need to fix the type of field Str.  Therefore, fixing a variant
9819     record requires us to fix each of its components.
9820
9821     However, if a component does not have a dynamic size, the component
9822     should not be fixed.  In particular, fields that use a PAD type
9823     should not fixed.  Here is an example where this might happen
9824     (assuming type Rec above):
9825
9826        type Container (Big : Boolean) is record
9827           First : Rec;
9828           After : Integer;
9829           case Big is
9830              when True => Another : Integer;
9831              when False => null;
9832           end case;
9833        end record;
9834        My_Container : Container := (Big => False,
9835                                     First => (Empty => True),
9836                                     After => 42);
9837
9838     In that example, the compiler creates a PAD type for component First,
9839     whose size is constant, and then positions the component After just
9840     right after it.  The offset of component After is therefore constant
9841     in this case.
9842
9843     The debugger computes the position of each field based on an algorithm
9844     that uses, among other things, the actual position and size of the field
9845     preceding it.  Let's now imagine that the user is trying to print
9846     the value of My_Container.  If the type fixing was recursive, we would
9847     end up computing the offset of field After based on the size of the
9848     fixed version of field First.  And since in our example First has
9849     only one actual field, the size of the fixed type is actually smaller
9850     than the amount of space allocated to that field, and thus we would
9851     compute the wrong offset of field After.
9852
9853     To make things more complicated, we need to watch out for dynamic
9854     components of variant records (identified by the ___XVL suffix in
9855     the component name).  Even if the target type is a PAD type, the size
9856     of that type might not be statically known.  So the PAD type needs
9857     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9858     we might end up with the wrong size for our component.  This can be
9859     observed with the following type declarations:
9860
9861         type Octal is new Integer range 0 .. 7;
9862         type Octal_Array is array (Positive range <>) of Octal;
9863         pragma Pack (Octal_Array);
9864
9865         type Octal_Buffer (Size : Positive) is record
9866            Buffer : Octal_Array (1 .. Size);
9867            Length : Integer;
9868         end record;
9869
9870     In that case, Buffer is a PAD type whose size is unset and needs
9871     to be computed by fixing the unwrapped type.
9872
9873     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9874     ----------------------------------------------------------
9875
9876     Lastly, when should the sub-elements of an entity that remained unfixed
9877     thus far, be actually fixed?
9878
9879     The answer is: Only when referencing that element.  For instance
9880     when selecting one component of a record, this specific component
9881     should be fixed at that point in time.  Or when printing the value
9882     of a record, each component should be fixed before its value gets
9883     printed.  Similarly for arrays, the element of the array should be
9884     fixed when printing each element of the array, or when extracting
9885     one element out of that array.  On the other hand, fixing should
9886     not be performed on the elements when taking a slice of an array!
9887
9888     Note that one of the side-effects of miscomputing the offset and
9889     size of each field is that we end up also miscomputing the size
9890     of the containing type.  This can have adverse results when computing
9891     the value of an entity.  GDB fetches the value of an entity based
9892     on the size of its type, and thus a wrong size causes GDB to fetch
9893     the wrong amount of memory.  In the case where the computed size is
9894     too small, GDB fetches too little data to print the value of our
9895     entiry.  Results in this case as unpredicatble, as we usually read
9896     past the buffer containing the data =:-o.  */
9897
9898 /* Implement the evaluate_exp routine in the exp_descriptor structure
9899    for the Ada language.  */
9900
9901 static struct value *
9902 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9903                      int *pos, enum noside noside)
9904 {
9905   enum exp_opcode op;
9906   int tem;
9907   int pc;
9908   int preeval_pos;
9909   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9910   struct type *type;
9911   int nargs, oplen;
9912   struct value **argvec;
9913
9914   pc = *pos;
9915   *pos += 1;
9916   op = exp->elts[pc].opcode;
9917
9918   switch (op)
9919     {
9920     default:
9921       *pos -= 1;
9922       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9923
9924       if (noside == EVAL_NORMAL)
9925         arg1 = unwrap_value (arg1);
9926
9927       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9928          then we need to perform the conversion manually, because
9929          evaluate_subexp_standard doesn't do it.  This conversion is
9930          necessary in Ada because the different kinds of float/fixed
9931          types in Ada have different representations.
9932
9933          Similarly, we need to perform the conversion from OP_LONG
9934          ourselves.  */
9935       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9936         arg1 = ada_value_cast (expect_type, arg1, noside);
9937
9938       return arg1;
9939
9940     case OP_STRING:
9941       {
9942         struct value *result;
9943
9944         *pos -= 1;
9945         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9946         /* The result type will have code OP_STRING, bashed there from 
9947            OP_ARRAY.  Bash it back.  */
9948         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9949           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
9950         return result;
9951       }
9952
9953     case UNOP_CAST:
9954       (*pos) += 2;
9955       type = exp->elts[pc + 1].type;
9956       arg1 = evaluate_subexp (type, exp, pos, noside);
9957       if (noside == EVAL_SKIP)
9958         goto nosideret;
9959       arg1 = ada_value_cast (type, arg1, noside);
9960       return arg1;
9961
9962     case UNOP_QUAL:
9963       (*pos) += 2;
9964       type = exp->elts[pc + 1].type;
9965       return ada_evaluate_subexp (type, exp, pos, noside);
9966
9967     case BINOP_ASSIGN:
9968       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9969       if (exp->elts[*pos].opcode == OP_AGGREGATE)
9970         {
9971           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9972           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9973             return arg1;
9974           return ada_value_assign (arg1, arg1);
9975         }
9976       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9977          except if the lhs of our assignment is a convenience variable.
9978          In the case of assigning to a convenience variable, the lhs
9979          should be exactly the result of the evaluation of the rhs.  */
9980       type = value_type (arg1);
9981       if (VALUE_LVAL (arg1) == lval_internalvar)
9982          type = NULL;
9983       arg2 = evaluate_subexp (type, exp, pos, noside);
9984       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9985         return arg1;
9986       if (ada_is_fixed_point_type (value_type (arg1)))
9987         arg2 = cast_to_fixed (value_type (arg1), arg2);
9988       else if (ada_is_fixed_point_type (value_type (arg2)))
9989         error
9990           (_("Fixed-point values must be assigned to fixed-point variables"));
9991       else
9992         arg2 = coerce_for_assign (value_type (arg1), arg2);
9993       return ada_value_assign (arg1, arg2);
9994
9995     case BINOP_ADD:
9996       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9997       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9998       if (noside == EVAL_SKIP)
9999         goto nosideret;
10000       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10001         return (value_from_longest
10002                  (value_type (arg1),
10003                   value_as_long (arg1) + value_as_long (arg2)));
10004       if ((ada_is_fixed_point_type (value_type (arg1))
10005            || ada_is_fixed_point_type (value_type (arg2)))
10006           && value_type (arg1) != value_type (arg2))
10007         error (_("Operands of fixed-point addition must have the same type"));
10008       /* Do the addition, and cast the result to the type of the first
10009          argument.  We cannot cast the result to a reference type, so if
10010          ARG1 is a reference type, find its underlying type.  */
10011       type = value_type (arg1);
10012       while (TYPE_CODE (type) == TYPE_CODE_REF)
10013         type = TYPE_TARGET_TYPE (type);
10014       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10015       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10016
10017     case BINOP_SUB:
10018       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10019       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10020       if (noside == EVAL_SKIP)
10021         goto nosideret;
10022       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10023         return (value_from_longest
10024                  (value_type (arg1),
10025                   value_as_long (arg1) - value_as_long (arg2)));
10026       if ((ada_is_fixed_point_type (value_type (arg1))
10027            || ada_is_fixed_point_type (value_type (arg2)))
10028           && value_type (arg1) != value_type (arg2))
10029         error (_("Operands of fixed-point subtraction "
10030                  "must have the same type"));
10031       /* Do the substraction, and cast the result to the type of the first
10032          argument.  We cannot cast the result to a reference type, so if
10033          ARG1 is a reference type, find its underlying type.  */
10034       type = value_type (arg1);
10035       while (TYPE_CODE (type) == TYPE_CODE_REF)
10036         type = TYPE_TARGET_TYPE (type);
10037       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10038       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10039
10040     case BINOP_MUL:
10041     case BINOP_DIV:
10042     case BINOP_REM:
10043     case BINOP_MOD:
10044       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10045       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10046       if (noside == EVAL_SKIP)
10047         goto nosideret;
10048       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10049         {
10050           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10051           return value_zero (value_type (arg1), not_lval);
10052         }
10053       else
10054         {
10055           type = builtin_type (exp->gdbarch)->builtin_double;
10056           if (ada_is_fixed_point_type (value_type (arg1)))
10057             arg1 = cast_from_fixed (type, arg1);
10058           if (ada_is_fixed_point_type (value_type (arg2)))
10059             arg2 = cast_from_fixed (type, arg2);
10060           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10061           return ada_value_binop (arg1, arg2, op);
10062         }
10063
10064     case BINOP_EQUAL:
10065     case BINOP_NOTEQUAL:
10066       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10067       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10068       if (noside == EVAL_SKIP)
10069         goto nosideret;
10070       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10071         tem = 0;
10072       else
10073         {
10074           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10075           tem = ada_value_equal (arg1, arg2);
10076         }
10077       if (op == BINOP_NOTEQUAL)
10078         tem = !tem;
10079       type = language_bool_type (exp->language_defn, exp->gdbarch);
10080       return value_from_longest (type, (LONGEST) tem);
10081
10082     case UNOP_NEG:
10083       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10084       if (noside == EVAL_SKIP)
10085         goto nosideret;
10086       else if (ada_is_fixed_point_type (value_type (arg1)))
10087         return value_cast (value_type (arg1), value_neg (arg1));
10088       else
10089         {
10090           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10091           return value_neg (arg1);
10092         }
10093
10094     case BINOP_LOGICAL_AND:
10095     case BINOP_LOGICAL_OR:
10096     case UNOP_LOGICAL_NOT:
10097       {
10098         struct value *val;
10099
10100         *pos -= 1;
10101         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10102         type = language_bool_type (exp->language_defn, exp->gdbarch);
10103         return value_cast (type, val);
10104       }
10105
10106     case BINOP_BITWISE_AND:
10107     case BINOP_BITWISE_IOR:
10108     case BINOP_BITWISE_XOR:
10109       {
10110         struct value *val;
10111
10112         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10113         *pos = pc;
10114         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10115
10116         return value_cast (value_type (arg1), val);
10117       }
10118
10119     case OP_VAR_VALUE:
10120       *pos -= 1;
10121
10122       if (noside == EVAL_SKIP)
10123         {
10124           *pos += 4;
10125           goto nosideret;
10126         }
10127       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10128         /* Only encountered when an unresolved symbol occurs in a
10129            context other than a function call, in which case, it is
10130            invalid.  */
10131         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10132                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10133       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10134         {
10135           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10136           /* Check to see if this is a tagged type.  We also need to handle
10137              the case where the type is a reference to a tagged type, but
10138              we have to be careful to exclude pointers to tagged types.
10139              The latter should be shown as usual (as a pointer), whereas
10140              a reference should mostly be transparent to the user.  */
10141           if (ada_is_tagged_type (type, 0)
10142               || (TYPE_CODE (type) == TYPE_CODE_REF
10143                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10144           {
10145             /* Tagged types are a little special in the fact that the real
10146                type is dynamic and can only be determined by inspecting the
10147                object's tag.  This means that we need to get the object's
10148                value first (EVAL_NORMAL) and then extract the actual object
10149                type from its tag.
10150
10151                Note that we cannot skip the final step where we extract
10152                the object type from its tag, because the EVAL_NORMAL phase
10153                results in dynamic components being resolved into fixed ones.
10154                This can cause problems when trying to print the type
10155                description of tagged types whose parent has a dynamic size:
10156                We use the type name of the "_parent" component in order
10157                to print the name of the ancestor type in the type description.
10158                If that component had a dynamic size, the resolution into
10159                a fixed type would result in the loss of that type name,
10160                thus preventing us from printing the name of the ancestor
10161                type in the type description.  */
10162             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10163
10164             if (TYPE_CODE (type) != TYPE_CODE_REF)
10165               {
10166                 struct type *actual_type;
10167
10168                 actual_type = type_from_tag (ada_value_tag (arg1));
10169                 if (actual_type == NULL)
10170                   /* If, for some reason, we were unable to determine
10171                      the actual type from the tag, then use the static
10172                      approximation that we just computed as a fallback.
10173                      This can happen if the debugging information is
10174                      incomplete, for instance.  */
10175                   actual_type = type;
10176                 return value_zero (actual_type, not_lval);
10177               }
10178             else
10179               {
10180                 /* In the case of a ref, ada_coerce_ref takes care
10181                    of determining the actual type.  But the evaluation
10182                    should return a ref as it should be valid to ask
10183                    for its address; so rebuild a ref after coerce.  */
10184                 arg1 = ada_coerce_ref (arg1);
10185                 return value_ref (arg1);
10186               }
10187           }
10188
10189           *pos += 4;
10190           return value_zero (to_static_fixed_type (type), not_lval);
10191         }
10192       else
10193         {
10194           arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10195           return ada_to_fixed_value (arg1);
10196         }
10197
10198     case OP_FUNCALL:
10199       (*pos) += 2;
10200
10201       /* Allocate arg vector, including space for the function to be
10202          called in argvec[0] and a terminating NULL.  */
10203       nargs = longest_to_int (exp->elts[pc + 1].longconst);
10204       argvec =
10205         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10206
10207       if (exp->elts[*pos].opcode == OP_VAR_VALUE
10208           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10209         error (_("Unexpected unresolved symbol, %s, during evaluation"),
10210                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10211       else
10212         {
10213           for (tem = 0; tem <= nargs; tem += 1)
10214             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10215           argvec[tem] = 0;
10216
10217           if (noside == EVAL_SKIP)
10218             goto nosideret;
10219         }
10220
10221       if (ada_is_constrained_packed_array_type
10222           (desc_base_type (value_type (argvec[0]))))
10223         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10224       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10225                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10226         /* This is a packed array that has already been fixed, and
10227            therefore already coerced to a simple array.  Nothing further
10228            to do.  */
10229         ;
10230       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10231                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10232                    && VALUE_LVAL (argvec[0]) == lval_memory))
10233         argvec[0] = value_addr (argvec[0]);
10234
10235       type = ada_check_typedef (value_type (argvec[0]));
10236
10237       /* Ada allows us to implicitly dereference arrays when subscripting
10238          them.  So, if this is an array typedef (encoding use for array
10239          access types encoded as fat pointers), strip it now.  */
10240       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10241         type = ada_typedef_target_type (type);
10242
10243       if (TYPE_CODE (type) == TYPE_CODE_PTR)
10244         {
10245           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10246             {
10247             case TYPE_CODE_FUNC:
10248               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10249               break;
10250             case TYPE_CODE_ARRAY:
10251               break;
10252             case TYPE_CODE_STRUCT:
10253               if (noside != EVAL_AVOID_SIDE_EFFECTS)
10254                 argvec[0] = ada_value_ind (argvec[0]);
10255               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10256               break;
10257             default:
10258               error (_("cannot subscript or call something of type `%s'"),
10259                      ada_type_name (value_type (argvec[0])));
10260               break;
10261             }
10262         }
10263
10264       switch (TYPE_CODE (type))
10265         {
10266         case TYPE_CODE_FUNC:
10267           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10268             {
10269               struct type *rtype = TYPE_TARGET_TYPE (type);
10270
10271               if (TYPE_GNU_IFUNC (type))
10272                 return allocate_value (TYPE_TARGET_TYPE (rtype));
10273               return allocate_value (rtype);
10274             }
10275           return call_function_by_hand (argvec[0], nargs, argvec + 1);
10276         case TYPE_CODE_INTERNAL_FUNCTION:
10277           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10278             /* We don't know anything about what the internal
10279                function might return, but we have to return
10280                something.  */
10281             return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10282                                not_lval);
10283           else
10284             return call_internal_function (exp->gdbarch, exp->language_defn,
10285                                            argvec[0], nargs, argvec + 1);
10286
10287         case TYPE_CODE_STRUCT:
10288           {
10289             int arity;
10290
10291             arity = ada_array_arity (type);
10292             type = ada_array_element_type (type, nargs);
10293             if (type == NULL)
10294               error (_("cannot subscript or call a record"));
10295             if (arity != nargs)
10296               error (_("wrong number of subscripts; expecting %d"), arity);
10297             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10298               return value_zero (ada_aligned_type (type), lval_memory);
10299             return
10300               unwrap_value (ada_value_subscript
10301                             (argvec[0], nargs, argvec + 1));
10302           }
10303         case TYPE_CODE_ARRAY:
10304           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10305             {
10306               type = ada_array_element_type (type, nargs);
10307               if (type == NULL)
10308                 error (_("element type of array unknown"));
10309               else
10310                 return value_zero (ada_aligned_type (type), lval_memory);
10311             }
10312           return
10313             unwrap_value (ada_value_subscript
10314                           (ada_coerce_to_simple_array (argvec[0]),
10315                            nargs, argvec + 1));
10316         case TYPE_CODE_PTR:     /* Pointer to array */
10317           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10318           if (noside == EVAL_AVOID_SIDE_EFFECTS)
10319             {
10320               type = ada_array_element_type (type, nargs);
10321               if (type == NULL)
10322                 error (_("element type of array unknown"));
10323               else
10324                 return value_zero (ada_aligned_type (type), lval_memory);
10325             }
10326           return
10327             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
10328                                                    nargs, argvec + 1));
10329
10330         default:
10331           error (_("Attempt to index or call something other than an "
10332                    "array or function"));
10333         }
10334
10335     case TERNOP_SLICE:
10336       {
10337         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10338         struct value *low_bound_val =
10339           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10340         struct value *high_bound_val =
10341           evaluate_subexp (NULL_TYPE, exp, pos, noside);
10342         LONGEST low_bound;
10343         LONGEST high_bound;
10344
10345         low_bound_val = coerce_ref (low_bound_val);
10346         high_bound_val = coerce_ref (high_bound_val);
10347         low_bound = pos_atr (low_bound_val);
10348         high_bound = pos_atr (high_bound_val);
10349
10350         if (noside == EVAL_SKIP)
10351           goto nosideret;
10352
10353         /* If this is a reference to an aligner type, then remove all
10354            the aligners.  */
10355         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10356             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10357           TYPE_TARGET_TYPE (value_type (array)) =
10358             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10359
10360         if (ada_is_constrained_packed_array_type (value_type (array)))
10361           error (_("cannot slice a packed array"));
10362
10363         /* If this is a reference to an array or an array lvalue,
10364            convert to a pointer.  */
10365         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10366             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10367                 && VALUE_LVAL (array) == lval_memory))
10368           array = value_addr (array);
10369
10370         if (noside == EVAL_AVOID_SIDE_EFFECTS
10371             && ada_is_array_descriptor_type (ada_check_typedef
10372                                              (value_type (array))))
10373           return empty_array (ada_type_of_array (array, 0), low_bound);
10374
10375         array = ada_coerce_to_simple_array_ptr (array);
10376
10377         /* If we have more than one level of pointer indirection,
10378            dereference the value until we get only one level.  */
10379         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10380                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10381                      == TYPE_CODE_PTR))
10382           array = value_ind (array);
10383
10384         /* Make sure we really do have an array type before going further,
10385            to avoid a SEGV when trying to get the index type or the target
10386            type later down the road if the debug info generated by
10387            the compiler is incorrect or incomplete.  */
10388         if (!ada_is_simple_array_type (value_type (array)))
10389           error (_("cannot take slice of non-array"));
10390
10391         if (TYPE_CODE (ada_check_typedef (value_type (array)))
10392             == TYPE_CODE_PTR)
10393           {
10394             struct type *type0 = ada_check_typedef (value_type (array));
10395
10396             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10397               return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10398             else
10399               {
10400                 struct type *arr_type0 =
10401                   to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10402
10403                 return ada_value_slice_from_ptr (array, arr_type0,
10404                                                  longest_to_int (low_bound),
10405                                                  longest_to_int (high_bound));
10406               }
10407           }
10408         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10409           return array;
10410         else if (high_bound < low_bound)
10411           return empty_array (value_type (array), low_bound);
10412         else
10413           return ada_value_slice (array, longest_to_int (low_bound),
10414                                   longest_to_int (high_bound));
10415       }
10416
10417     case UNOP_IN_RANGE:
10418       (*pos) += 2;
10419       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10420       type = check_typedef (exp->elts[pc + 1].type);
10421
10422       if (noside == EVAL_SKIP)
10423         goto nosideret;
10424
10425       switch (TYPE_CODE (type))
10426         {
10427         default:
10428           lim_warning (_("Membership test incompletely implemented; "
10429                          "always returns true"));
10430           type = language_bool_type (exp->language_defn, exp->gdbarch);
10431           return value_from_longest (type, (LONGEST) 1);
10432
10433         case TYPE_CODE_RANGE:
10434           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10435           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10436           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10437           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10438           type = language_bool_type (exp->language_defn, exp->gdbarch);
10439           return
10440             value_from_longest (type,
10441                                 (value_less (arg1, arg3)
10442                                  || value_equal (arg1, arg3))
10443                                 && (value_less (arg2, arg1)
10444                                     || value_equal (arg2, arg1)));
10445         }
10446
10447     case BINOP_IN_BOUNDS:
10448       (*pos) += 2;
10449       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10450       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10451
10452       if (noside == EVAL_SKIP)
10453         goto nosideret;
10454
10455       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10456         {
10457           type = language_bool_type (exp->language_defn, exp->gdbarch);
10458           return value_zero (type, not_lval);
10459         }
10460
10461       tem = longest_to_int (exp->elts[pc + 1].longconst);
10462
10463       type = ada_index_type (value_type (arg2), tem, "range");
10464       if (!type)
10465         type = value_type (arg1);
10466
10467       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10468       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10469
10470       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10471       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10472       type = language_bool_type (exp->language_defn, exp->gdbarch);
10473       return
10474         value_from_longest (type,
10475                             (value_less (arg1, arg3)
10476                              || value_equal (arg1, arg3))
10477                             && (value_less (arg2, arg1)
10478                                 || value_equal (arg2, arg1)));
10479
10480     case TERNOP_IN_RANGE:
10481       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10482       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10483       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10484
10485       if (noside == EVAL_SKIP)
10486         goto nosideret;
10487
10488       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10489       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10490       type = language_bool_type (exp->language_defn, exp->gdbarch);
10491       return
10492         value_from_longest (type,
10493                             (value_less (arg1, arg3)
10494                              || value_equal (arg1, arg3))
10495                             && (value_less (arg2, arg1)
10496                                 || value_equal (arg2, arg1)));
10497
10498     case OP_ATR_FIRST:
10499     case OP_ATR_LAST:
10500     case OP_ATR_LENGTH:
10501       {
10502         struct type *type_arg;
10503
10504         if (exp->elts[*pos].opcode == OP_TYPE)
10505           {
10506             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10507             arg1 = NULL;
10508             type_arg = check_typedef (exp->elts[pc + 2].type);
10509           }
10510         else
10511           {
10512             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10513             type_arg = NULL;
10514           }
10515
10516         if (exp->elts[*pos].opcode != OP_LONG)
10517           error (_("Invalid operand to '%s"), ada_attribute_name (op));
10518         tem = longest_to_int (exp->elts[*pos + 2].longconst);
10519         *pos += 4;
10520
10521         if (noside == EVAL_SKIP)
10522           goto nosideret;
10523
10524         if (type_arg == NULL)
10525           {
10526             arg1 = ada_coerce_ref (arg1);
10527
10528             if (ada_is_constrained_packed_array_type (value_type (arg1)))
10529               arg1 = ada_coerce_to_simple_array (arg1);
10530
10531             if (op == OP_ATR_LENGTH)
10532               type = builtin_type (exp->gdbarch)->builtin_int;
10533             else
10534               {
10535                 type = ada_index_type (value_type (arg1), tem,
10536                                        ada_attribute_name (op));
10537                 if (type == NULL)
10538                   type = builtin_type (exp->gdbarch)->builtin_int;
10539               }
10540
10541             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10542               return allocate_value (type);
10543
10544             switch (op)
10545               {
10546               default:          /* Should never happen.  */
10547                 error (_("unexpected attribute encountered"));
10548               case OP_ATR_FIRST:
10549                 return value_from_longest
10550                         (type, ada_array_bound (arg1, tem, 0));
10551               case OP_ATR_LAST:
10552                 return value_from_longest
10553                         (type, ada_array_bound (arg1, tem, 1));
10554               case OP_ATR_LENGTH:
10555                 return value_from_longest
10556                         (type, ada_array_length (arg1, tem));
10557               }
10558           }
10559         else if (discrete_type_p (type_arg))
10560           {
10561             struct type *range_type;
10562             const char *name = ada_type_name (type_arg);
10563
10564             range_type = NULL;
10565             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10566               range_type = to_fixed_range_type (type_arg, NULL);
10567             if (range_type == NULL)
10568               range_type = type_arg;
10569             switch (op)
10570               {
10571               default:
10572                 error (_("unexpected attribute encountered"));
10573               case OP_ATR_FIRST:
10574                 return value_from_longest 
10575                   (range_type, ada_discrete_type_low_bound (range_type));
10576               case OP_ATR_LAST:
10577                 return value_from_longest
10578                   (range_type, ada_discrete_type_high_bound (range_type));
10579               case OP_ATR_LENGTH:
10580                 error (_("the 'length attribute applies only to array types"));
10581               }
10582           }
10583         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10584           error (_("unimplemented type attribute"));
10585         else
10586           {
10587             LONGEST low, high;
10588
10589             if (ada_is_constrained_packed_array_type (type_arg))
10590               type_arg = decode_constrained_packed_array_type (type_arg);
10591
10592             if (op == OP_ATR_LENGTH)
10593               type = builtin_type (exp->gdbarch)->builtin_int;
10594             else
10595               {
10596                 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10597                 if (type == NULL)
10598                   type = builtin_type (exp->gdbarch)->builtin_int;
10599               }
10600
10601             if (noside == EVAL_AVOID_SIDE_EFFECTS)
10602               return allocate_value (type);
10603
10604             switch (op)
10605               {
10606               default:
10607                 error (_("unexpected attribute encountered"));
10608               case OP_ATR_FIRST:
10609                 low = ada_array_bound_from_type (type_arg, tem, 0);
10610                 return value_from_longest (type, low);
10611               case OP_ATR_LAST:
10612                 high = ada_array_bound_from_type (type_arg, tem, 1);
10613                 return value_from_longest (type, high);
10614               case OP_ATR_LENGTH:
10615                 low = ada_array_bound_from_type (type_arg, tem, 0);
10616                 high = ada_array_bound_from_type (type_arg, tem, 1);
10617                 return value_from_longest (type, high - low + 1);
10618               }
10619           }
10620       }
10621
10622     case OP_ATR_TAG:
10623       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10624       if (noside == EVAL_SKIP)
10625         goto nosideret;
10626
10627       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10628         return value_zero (ada_tag_type (arg1), not_lval);
10629
10630       return ada_value_tag (arg1);
10631
10632     case OP_ATR_MIN:
10633     case OP_ATR_MAX:
10634       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10635       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10636       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10637       if (noside == EVAL_SKIP)
10638         goto nosideret;
10639       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10640         return value_zero (value_type (arg1), not_lval);
10641       else
10642         {
10643           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10644           return value_binop (arg1, arg2,
10645                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10646         }
10647
10648     case OP_ATR_MODULUS:
10649       {
10650         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10651
10652         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10653         if (noside == EVAL_SKIP)
10654           goto nosideret;
10655
10656         if (!ada_is_modular_type (type_arg))
10657           error (_("'modulus must be applied to modular type"));
10658
10659         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10660                                    ada_modulus (type_arg));
10661       }
10662
10663
10664     case OP_ATR_POS:
10665       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10666       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10667       if (noside == EVAL_SKIP)
10668         goto nosideret;
10669       type = builtin_type (exp->gdbarch)->builtin_int;
10670       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10671         return value_zero (type, not_lval);
10672       else
10673         return value_pos_atr (type, arg1);
10674
10675     case OP_ATR_SIZE:
10676       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10677       type = value_type (arg1);
10678
10679       /* If the argument is a reference, then dereference its type, since
10680          the user is really asking for the size of the actual object,
10681          not the size of the pointer.  */
10682       if (TYPE_CODE (type) == TYPE_CODE_REF)
10683         type = TYPE_TARGET_TYPE (type);
10684
10685       if (noside == EVAL_SKIP)
10686         goto nosideret;
10687       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10688         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10689       else
10690         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10691                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
10692
10693     case OP_ATR_VAL:
10694       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10695       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10696       type = exp->elts[pc + 2].type;
10697       if (noside == EVAL_SKIP)
10698         goto nosideret;
10699       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10700         return value_zero (type, not_lval);
10701       else
10702         return value_val_atr (type, arg1);
10703
10704     case BINOP_EXP:
10705       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10706       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10707       if (noside == EVAL_SKIP)
10708         goto nosideret;
10709       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10710         return value_zero (value_type (arg1), not_lval);
10711       else
10712         {
10713           /* For integer exponentiation operations,
10714              only promote the first argument.  */
10715           if (is_integral_type (value_type (arg2)))
10716             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10717           else
10718             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10719
10720           return value_binop (arg1, arg2, op);
10721         }
10722
10723     case UNOP_PLUS:
10724       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10725       if (noside == EVAL_SKIP)
10726         goto nosideret;
10727       else
10728         return arg1;
10729
10730     case UNOP_ABS:
10731       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10732       if (noside == EVAL_SKIP)
10733         goto nosideret;
10734       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10735       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10736         return value_neg (arg1);
10737       else
10738         return arg1;
10739
10740     case UNOP_IND:
10741       preeval_pos = *pos;
10742       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10743       if (noside == EVAL_SKIP)
10744         goto nosideret;
10745       type = ada_check_typedef (value_type (arg1));
10746       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10747         {
10748           if (ada_is_array_descriptor_type (type))
10749             /* GDB allows dereferencing GNAT array descriptors.  */
10750             {
10751               struct type *arrType = ada_type_of_array (arg1, 0);
10752
10753               if (arrType == NULL)
10754                 error (_("Attempt to dereference null array pointer."));
10755               return value_at_lazy (arrType, 0);
10756             }
10757           else if (TYPE_CODE (type) == TYPE_CODE_PTR
10758                    || TYPE_CODE (type) == TYPE_CODE_REF
10759                    /* In C you can dereference an array to get the 1st elt.  */
10760                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10761             {
10762             /* As mentioned in the OP_VAR_VALUE case, tagged types can
10763                only be determined by inspecting the object's tag.
10764                This means that we need to evaluate completely the
10765                expression in order to get its type.  */
10766
10767               if ((TYPE_CODE (type) == TYPE_CODE_REF
10768                    || TYPE_CODE (type) == TYPE_CODE_PTR)
10769                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10770                 {
10771                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10772                                           EVAL_NORMAL);
10773                   type = value_type (ada_value_ind (arg1));
10774                 }
10775               else
10776                 {
10777                   type = to_static_fixed_type
10778                     (ada_aligned_type
10779                      (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10780                 }
10781               check_size (type);
10782               return value_zero (type, lval_memory);
10783             }
10784           else if (TYPE_CODE (type) == TYPE_CODE_INT)
10785             {
10786               /* GDB allows dereferencing an int.  */
10787               if (expect_type == NULL)
10788                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10789                                    lval_memory);
10790               else
10791                 {
10792                   expect_type = 
10793                     to_static_fixed_type (ada_aligned_type (expect_type));
10794                   return value_zero (expect_type, lval_memory);
10795                 }
10796             }
10797           else
10798             error (_("Attempt to take contents of a non-pointer value."));
10799         }
10800       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
10801       type = ada_check_typedef (value_type (arg1));
10802
10803       if (TYPE_CODE (type) == TYPE_CODE_INT)
10804           /* GDB allows dereferencing an int.  If we were given
10805              the expect_type, then use that as the target type.
10806              Otherwise, assume that the target type is an int.  */
10807         {
10808           if (expect_type != NULL)
10809             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10810                                               arg1));
10811           else
10812             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10813                                   (CORE_ADDR) value_as_address (arg1));
10814         }
10815
10816       if (ada_is_array_descriptor_type (type))
10817         /* GDB allows dereferencing GNAT array descriptors.  */
10818         return ada_coerce_to_simple_array (arg1);
10819       else
10820         return ada_value_ind (arg1);
10821
10822     case STRUCTOP_STRUCT:
10823       tem = longest_to_int (exp->elts[pc + 1].longconst);
10824       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10825       preeval_pos = *pos;
10826       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10827       if (noside == EVAL_SKIP)
10828         goto nosideret;
10829       if (noside == EVAL_AVOID_SIDE_EFFECTS)
10830         {
10831           struct type *type1 = value_type (arg1);
10832
10833           if (ada_is_tagged_type (type1, 1))
10834             {
10835               type = ada_lookup_struct_elt_type (type1,
10836                                                  &exp->elts[pc + 2].string,
10837                                                  1, 1, NULL);
10838
10839               /* If the field is not found, check if it exists in the
10840                  extension of this object's type. This means that we
10841                  need to evaluate completely the expression.  */
10842
10843               if (type == NULL)
10844                 {
10845                   arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10846                                           EVAL_NORMAL);
10847                   arg1 = ada_value_struct_elt (arg1,
10848                                                &exp->elts[pc + 2].string,
10849                                                0);
10850                   arg1 = unwrap_value (arg1);
10851                   type = value_type (ada_to_fixed_value (arg1));
10852                 }
10853             }
10854           else
10855             type =
10856               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10857                                           0, NULL);
10858
10859           return value_zero (ada_aligned_type (type), lval_memory);
10860         }
10861       else
10862         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10863         arg1 = unwrap_value (arg1);
10864         return ada_to_fixed_value (arg1);
10865
10866     case OP_TYPE:
10867       /* The value is not supposed to be used.  This is here to make it
10868          easier to accommodate expressions that contain types.  */
10869       (*pos) += 2;
10870       if (noside == EVAL_SKIP)
10871         goto nosideret;
10872       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10873         return allocate_value (exp->elts[pc + 1].type);
10874       else
10875         error (_("Attempt to use a type name as an expression"));
10876
10877     case OP_AGGREGATE:
10878     case OP_CHOICES:
10879     case OP_OTHERS:
10880     case OP_DISCRETE_RANGE:
10881     case OP_POSITIONAL:
10882     case OP_NAME:
10883       if (noside == EVAL_NORMAL)
10884         switch (op) 
10885           {
10886           case OP_NAME:
10887             error (_("Undefined name, ambiguous name, or renaming used in "
10888                      "component association: %s."), &exp->elts[pc+2].string);
10889           case OP_AGGREGATE:
10890             error (_("Aggregates only allowed on the right of an assignment"));
10891           default:
10892             internal_error (__FILE__, __LINE__,
10893                             _("aggregate apparently mangled"));
10894           }
10895
10896       ada_forward_operator_length (exp, pc, &oplen, &nargs);
10897       *pos += oplen - 1;
10898       for (tem = 0; tem < nargs; tem += 1) 
10899         ada_evaluate_subexp (NULL, exp, pos, noside);
10900       goto nosideret;
10901     }
10902
10903 nosideret:
10904   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
10905 }
10906 \f
10907
10908                                 /* Fixed point */
10909
10910 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
10911    type name that encodes the 'small and 'delta information.
10912    Otherwise, return NULL.  */
10913
10914 static const char *
10915 fixed_type_info (struct type *type)
10916 {
10917   const char *name = ada_type_name (type);
10918   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10919
10920   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10921     {
10922       const char *tail = strstr (name, "___XF_");
10923
10924       if (tail == NULL)
10925         return NULL;
10926       else
10927         return tail + 5;
10928     }
10929   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10930     return fixed_type_info (TYPE_TARGET_TYPE (type));
10931   else
10932     return NULL;
10933 }
10934
10935 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
10936
10937 int
10938 ada_is_fixed_point_type (struct type *type)
10939 {
10940   return fixed_type_info (type) != NULL;
10941 }
10942
10943 /* Return non-zero iff TYPE represents a System.Address type.  */
10944
10945 int
10946 ada_is_system_address_type (struct type *type)
10947 {
10948   return (TYPE_NAME (type)
10949           && strcmp (TYPE_NAME (type), "system__address") == 0);
10950 }
10951
10952 /* Assuming that TYPE is the representation of an Ada fixed-point
10953    type, return its delta, or -1 if the type is malformed and the
10954    delta cannot be determined.  */
10955
10956 DOUBLEST
10957 ada_delta (struct type *type)
10958 {
10959   const char *encoding = fixed_type_info (type);
10960   DOUBLEST num, den;
10961
10962   /* Strictly speaking, num and den are encoded as integer.  However,
10963      they may not fit into a long, and they will have to be converted
10964      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10965   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10966               &num, &den) < 2)
10967     return -1.0;
10968   else
10969     return num / den;
10970 }
10971
10972 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
10973    factor ('SMALL value) associated with the type.  */
10974
10975 static DOUBLEST
10976 scaling_factor (struct type *type)
10977 {
10978   const char *encoding = fixed_type_info (type);
10979   DOUBLEST num0, den0, num1, den1;
10980   int n;
10981
10982   /* Strictly speaking, num's and den's are encoded as integer.  However,
10983      they may not fit into a long, and they will have to be converted
10984      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10985   n = sscanf (encoding,
10986               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
10987               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10988               &num0, &den0, &num1, &den1);
10989
10990   if (n < 2)
10991     return 1.0;
10992   else if (n == 4)
10993     return num1 / den1;
10994   else
10995     return num0 / den0;
10996 }
10997
10998
10999 /* Assuming that X is the representation of a value of fixed-point
11000    type TYPE, return its floating-point equivalent.  */
11001
11002 DOUBLEST
11003 ada_fixed_to_float (struct type *type, LONGEST x)
11004 {
11005   return (DOUBLEST) x *scaling_factor (type);
11006 }
11007
11008 /* The representation of a fixed-point value of type TYPE
11009    corresponding to the value X.  */
11010
11011 LONGEST
11012 ada_float_to_fixed (struct type *type, DOUBLEST x)
11013 {
11014   return (LONGEST) (x / scaling_factor (type) + 0.5);
11015 }
11016
11017 \f
11018
11019                                 /* Range types */
11020
11021 /* Scan STR beginning at position K for a discriminant name, and
11022    return the value of that discriminant field of DVAL in *PX.  If
11023    PNEW_K is not null, put the position of the character beyond the
11024    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
11025    not alter *PX and *PNEW_K if unsuccessful.  */
11026
11027 static int
11028 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
11029                     int *pnew_k)
11030 {
11031   static char *bound_buffer = NULL;
11032   static size_t bound_buffer_len = 0;
11033   char *bound;
11034   char *pend;
11035   struct value *bound_val;
11036
11037   if (dval == NULL || str == NULL || str[k] == '\0')
11038     return 0;
11039
11040   pend = strstr (str + k, "__");
11041   if (pend == NULL)
11042     {
11043       bound = str + k;
11044       k += strlen (bound);
11045     }
11046   else
11047     {
11048       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
11049       bound = bound_buffer;
11050       strncpy (bound_buffer, str + k, pend - (str + k));
11051       bound[pend - (str + k)] = '\0';
11052       k = pend - str;
11053     }
11054
11055   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11056   if (bound_val == NULL)
11057     return 0;
11058
11059   *px = value_as_long (bound_val);
11060   if (pnew_k != NULL)
11061     *pnew_k = k;
11062   return 1;
11063 }
11064
11065 /* Value of variable named NAME in the current environment.  If
11066    no such variable found, then if ERR_MSG is null, returns 0, and
11067    otherwise causes an error with message ERR_MSG.  */
11068
11069 static struct value *
11070 get_var_value (char *name, char *err_msg)
11071 {
11072   struct ada_symbol_info *syms;
11073   int nsyms;
11074
11075   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11076                                   &syms);
11077
11078   if (nsyms != 1)
11079     {
11080       if (err_msg == NULL)
11081         return 0;
11082       else
11083         error (("%s"), err_msg);
11084     }
11085
11086   return value_of_variable (syms[0].sym, syms[0].block);
11087 }
11088
11089 /* Value of integer variable named NAME in the current environment.  If
11090    no such variable found, returns 0, and sets *FLAG to 0.  If
11091    successful, sets *FLAG to 1.  */
11092
11093 LONGEST
11094 get_int_var_value (char *name, int *flag)
11095 {
11096   struct value *var_val = get_var_value (name, 0);
11097
11098   if (var_val == 0)
11099     {
11100       if (flag != NULL)
11101         *flag = 0;
11102       return 0;
11103     }
11104   else
11105     {
11106       if (flag != NULL)
11107         *flag = 1;
11108       return value_as_long (var_val);
11109     }
11110 }
11111
11112
11113 /* Return a range type whose base type is that of the range type named
11114    NAME in the current environment, and whose bounds are calculated
11115    from NAME according to the GNAT range encoding conventions.
11116    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
11117    corresponding range type from debug information; fall back to using it
11118    if symbol lookup fails.  If a new type must be created, allocate it
11119    like ORIG_TYPE was.  The bounds information, in general, is encoded
11120    in NAME, the base type given in the named range type.  */
11121
11122 static struct type *
11123 to_fixed_range_type (struct type *raw_type, struct value *dval)
11124 {
11125   const char *name;
11126   struct type *base_type;
11127   char *subtype_info;
11128
11129   gdb_assert (raw_type != NULL);
11130   gdb_assert (TYPE_NAME (raw_type) != NULL);
11131
11132   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11133     base_type = TYPE_TARGET_TYPE (raw_type);
11134   else
11135     base_type = raw_type;
11136
11137   name = TYPE_NAME (raw_type);
11138   subtype_info = strstr (name, "___XD");
11139   if (subtype_info == NULL)
11140     {
11141       LONGEST L = ada_discrete_type_low_bound (raw_type);
11142       LONGEST U = ada_discrete_type_high_bound (raw_type);
11143
11144       if (L < INT_MIN || U > INT_MAX)
11145         return raw_type;
11146       else
11147         return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11148                                          L, U);
11149     }
11150   else
11151     {
11152       static char *name_buf = NULL;
11153       static size_t name_len = 0;
11154       int prefix_len = subtype_info - name;
11155       LONGEST L, U;
11156       struct type *type;
11157       char *bounds_str;
11158       int n;
11159
11160       GROW_VECT (name_buf, name_len, prefix_len + 5);
11161       strncpy (name_buf, name, prefix_len);
11162       name_buf[prefix_len] = '\0';
11163
11164       subtype_info += 5;
11165       bounds_str = strchr (subtype_info, '_');
11166       n = 1;
11167
11168       if (*subtype_info == 'L')
11169         {
11170           if (!ada_scan_number (bounds_str, n, &L, &n)
11171               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11172             return raw_type;
11173           if (bounds_str[n] == '_')
11174             n += 2;
11175           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
11176             n += 1;
11177           subtype_info += 1;
11178         }
11179       else
11180         {
11181           int ok;
11182
11183           strcpy (name_buf + prefix_len, "___L");
11184           L = get_int_var_value (name_buf, &ok);
11185           if (!ok)
11186             {
11187               lim_warning (_("Unknown lower bound, using 1."));
11188               L = 1;
11189             }
11190         }
11191
11192       if (*subtype_info == 'U')
11193         {
11194           if (!ada_scan_number (bounds_str, n, &U, &n)
11195               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11196             return raw_type;
11197         }
11198       else
11199         {
11200           int ok;
11201
11202           strcpy (name_buf + prefix_len, "___U");
11203           U = get_int_var_value (name_buf, &ok);
11204           if (!ok)
11205             {
11206               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11207               U = L;
11208             }
11209         }
11210
11211       type = create_static_range_type (alloc_type_copy (raw_type),
11212                                        base_type, L, U);
11213       TYPE_NAME (type) = name;
11214       return type;
11215     }
11216 }
11217
11218 /* True iff NAME is the name of a range type.  */
11219
11220 int
11221 ada_is_range_type_name (const char *name)
11222 {
11223   return (name != NULL && strstr (name, "___XD"));
11224 }
11225 \f
11226
11227                                 /* Modular types */
11228
11229 /* True iff TYPE is an Ada modular type.  */
11230
11231 int
11232 ada_is_modular_type (struct type *type)
11233 {
11234   struct type *subranged_type = get_base_type (type);
11235
11236   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11237           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11238           && TYPE_UNSIGNED (subranged_type));
11239 }
11240
11241 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
11242
11243 ULONGEST
11244 ada_modulus (struct type *type)
11245 {
11246   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11247 }
11248 \f
11249
11250 /* Ada exception catchpoint support:
11251    ---------------------------------
11252
11253    We support 3 kinds of exception catchpoints:
11254      . catchpoints on Ada exceptions
11255      . catchpoints on unhandled Ada exceptions
11256      . catchpoints on failed assertions
11257
11258    Exceptions raised during failed assertions, or unhandled exceptions
11259    could perfectly be caught with the general catchpoint on Ada exceptions.
11260    However, we can easily differentiate these two special cases, and having
11261    the option to distinguish these two cases from the rest can be useful
11262    to zero-in on certain situations.
11263
11264    Exception catchpoints are a specialized form of breakpoint,
11265    since they rely on inserting breakpoints inside known routines
11266    of the GNAT runtime.  The implementation therefore uses a standard
11267    breakpoint structure of the BP_BREAKPOINT type, but with its own set
11268    of breakpoint_ops.
11269
11270    Support in the runtime for exception catchpoints have been changed
11271    a few times already, and these changes affect the implementation
11272    of these catchpoints.  In order to be able to support several
11273    variants of the runtime, we use a sniffer that will determine
11274    the runtime variant used by the program being debugged.  */
11275
11276 /* Ada's standard exceptions.
11277
11278    The Ada 83 standard also defined Numeric_Error.  But there so many
11279    situations where it was unclear from the Ada 83 Reference Manual
11280    (RM) whether Constraint_Error or Numeric_Error should be raised,
11281    that the ARG (Ada Rapporteur Group) eventually issued a Binding
11282    Interpretation saying that anytime the RM says that Numeric_Error
11283    should be raised, the implementation may raise Constraint_Error.
11284    Ada 95 went one step further and pretty much removed Numeric_Error
11285    from the list of standard exceptions (it made it a renaming of
11286    Constraint_Error, to help preserve compatibility when compiling
11287    an Ada83 compiler). As such, we do not include Numeric_Error from
11288    this list of standard exceptions.  */
11289
11290 static char *standard_exc[] = {
11291   "constraint_error",
11292   "program_error",
11293   "storage_error",
11294   "tasking_error"
11295 };
11296
11297 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11298
11299 /* A structure that describes how to support exception catchpoints
11300    for a given executable.  */
11301
11302 struct exception_support_info
11303 {
11304    /* The name of the symbol to break on in order to insert
11305       a catchpoint on exceptions.  */
11306    const char *catch_exception_sym;
11307
11308    /* The name of the symbol to break on in order to insert
11309       a catchpoint on unhandled exceptions.  */
11310    const char *catch_exception_unhandled_sym;
11311
11312    /* The name of the symbol to break on in order to insert
11313       a catchpoint on failed assertions.  */
11314    const char *catch_assert_sym;
11315
11316    /* Assuming that the inferior just triggered an unhandled exception
11317       catchpoint, this function is responsible for returning the address
11318       in inferior memory where the name of that exception is stored.
11319       Return zero if the address could not be computed.  */
11320    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11321 };
11322
11323 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11324 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11325
11326 /* The following exception support info structure describes how to
11327    implement exception catchpoints with the latest version of the
11328    Ada runtime (as of 2007-03-06).  */
11329
11330 static const struct exception_support_info default_exception_support_info =
11331 {
11332   "__gnat_debug_raise_exception", /* catch_exception_sym */
11333   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11334   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11335   ada_unhandled_exception_name_addr
11336 };
11337
11338 /* The following exception support info structure describes how to
11339    implement exception catchpoints with a slightly older version
11340    of the Ada runtime.  */
11341
11342 static const struct exception_support_info exception_support_info_fallback =
11343 {
11344   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11345   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11346   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
11347   ada_unhandled_exception_name_addr_from_raise
11348 };
11349
11350 /* Return nonzero if we can detect the exception support routines
11351    described in EINFO.
11352
11353    This function errors out if an abnormal situation is detected
11354    (for instance, if we find the exception support routines, but
11355    that support is found to be incomplete).  */
11356
11357 static int
11358 ada_has_this_exception_support (const struct exception_support_info *einfo)
11359 {
11360   struct symbol *sym;
11361
11362   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11363      that should be compiled with debugging information.  As a result, we
11364      expect to find that symbol in the symtabs.  */
11365
11366   sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11367   if (sym == NULL)
11368     {
11369       /* Perhaps we did not find our symbol because the Ada runtime was
11370          compiled without debugging info, or simply stripped of it.
11371          It happens on some GNU/Linux distributions for instance, where
11372          users have to install a separate debug package in order to get
11373          the runtime's debugging info.  In that situation, let the user
11374          know why we cannot insert an Ada exception catchpoint.
11375
11376          Note: Just for the purpose of inserting our Ada exception
11377          catchpoint, we could rely purely on the associated minimal symbol.
11378          But we would be operating in degraded mode anyway, since we are
11379          still lacking the debugging info needed later on to extract
11380          the name of the exception being raised (this name is printed in
11381          the catchpoint message, and is also used when trying to catch
11382          a specific exception).  We do not handle this case for now.  */
11383       struct bound_minimal_symbol msym
11384         = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11385
11386       if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11387         error (_("Your Ada runtime appears to be missing some debugging "
11388                  "information.\nCannot insert Ada exception catchpoint "
11389                  "in this configuration."));
11390
11391       return 0;
11392     }
11393
11394   /* Make sure that the symbol we found corresponds to a function.  */
11395
11396   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11397     error (_("Symbol \"%s\" is not a function (class = %d)"),
11398            SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11399
11400   return 1;
11401 }
11402
11403 /* Inspect the Ada runtime and determine which exception info structure
11404    should be used to provide support for exception catchpoints.
11405
11406    This function will always set the per-inferior exception_info,
11407    or raise an error.  */
11408
11409 static void
11410 ada_exception_support_info_sniffer (void)
11411 {
11412   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11413
11414   /* If the exception info is already known, then no need to recompute it.  */
11415   if (data->exception_info != NULL)
11416     return;
11417
11418   /* Check the latest (default) exception support info.  */
11419   if (ada_has_this_exception_support (&default_exception_support_info))
11420     {
11421       data->exception_info = &default_exception_support_info;
11422       return;
11423     }
11424
11425   /* Try our fallback exception suport info.  */
11426   if (ada_has_this_exception_support (&exception_support_info_fallback))
11427     {
11428       data->exception_info = &exception_support_info_fallback;
11429       return;
11430     }
11431
11432   /* Sometimes, it is normal for us to not be able to find the routine
11433      we are looking for.  This happens when the program is linked with
11434      the shared version of the GNAT runtime, and the program has not been
11435      started yet.  Inform the user of these two possible causes if
11436      applicable.  */
11437
11438   if (ada_update_initial_language (language_unknown) != language_ada)
11439     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
11440
11441   /* If the symbol does not exist, then check that the program is
11442      already started, to make sure that shared libraries have been
11443      loaded.  If it is not started, this may mean that the symbol is
11444      in a shared library.  */
11445
11446   if (ptid_get_pid (inferior_ptid) == 0)
11447     error (_("Unable to insert catchpoint. Try to start the program first."));
11448
11449   /* At this point, we know that we are debugging an Ada program and
11450      that the inferior has been started, but we still are not able to
11451      find the run-time symbols.  That can mean that we are in
11452      configurable run time mode, or that a-except as been optimized
11453      out by the linker...  In any case, at this point it is not worth
11454      supporting this feature.  */
11455
11456   error (_("Cannot insert Ada exception catchpoints in this configuration."));
11457 }
11458
11459 /* True iff FRAME is very likely to be that of a function that is
11460    part of the runtime system.  This is all very heuristic, but is
11461    intended to be used as advice as to what frames are uninteresting
11462    to most users.  */
11463
11464 static int
11465 is_known_support_routine (struct frame_info *frame)
11466 {
11467   struct symtab_and_line sal;
11468   char *func_name;
11469   enum language func_lang;
11470   int i;
11471   const char *fullname;
11472
11473   /* If this code does not have any debugging information (no symtab),
11474      This cannot be any user code.  */
11475
11476   find_frame_sal (frame, &sal);
11477   if (sal.symtab == NULL)
11478     return 1;
11479
11480   /* If there is a symtab, but the associated source file cannot be
11481      located, then assume this is not user code:  Selecting a frame
11482      for which we cannot display the code would not be very helpful
11483      for the user.  This should also take care of case such as VxWorks
11484      where the kernel has some debugging info provided for a few units.  */
11485
11486   fullname = symtab_to_fullname (sal.symtab);
11487   if (access (fullname, R_OK) != 0)
11488     return 1;
11489
11490   /* Check the unit filename againt the Ada runtime file naming.
11491      We also check the name of the objfile against the name of some
11492      known system libraries that sometimes come with debugging info
11493      too.  */
11494
11495   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11496     {
11497       re_comp (known_runtime_file_name_patterns[i]);
11498       if (re_exec (lbasename (sal.symtab->filename)))
11499         return 1;
11500       if (sal.symtab->objfile != NULL
11501           && re_exec (objfile_name (sal.symtab->objfile)))
11502         return 1;
11503     }
11504
11505   /* Check whether the function is a GNAT-generated entity.  */
11506
11507   find_frame_funname (frame, &func_name, &func_lang, NULL);
11508   if (func_name == NULL)
11509     return 1;
11510
11511   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11512     {
11513       re_comp (known_auxiliary_function_name_patterns[i]);
11514       if (re_exec (func_name))
11515         {
11516           xfree (func_name);
11517           return 1;
11518         }
11519     }
11520
11521   xfree (func_name);
11522   return 0;
11523 }
11524
11525 /* Find the first frame that contains debugging information and that is not
11526    part of the Ada run-time, starting from FI and moving upward.  */
11527
11528 void
11529 ada_find_printable_frame (struct frame_info *fi)
11530 {
11531   for (; fi != NULL; fi = get_prev_frame (fi))
11532     {
11533       if (!is_known_support_routine (fi))
11534         {
11535           select_frame (fi);
11536           break;
11537         }
11538     }
11539
11540 }
11541
11542 /* Assuming that the inferior just triggered an unhandled exception
11543    catchpoint, return the address in inferior memory where the name
11544    of the exception is stored.
11545    
11546    Return zero if the address could not be computed.  */
11547
11548 static CORE_ADDR
11549 ada_unhandled_exception_name_addr (void)
11550 {
11551   return parse_and_eval_address ("e.full_name");
11552 }
11553
11554 /* Same as ada_unhandled_exception_name_addr, except that this function
11555    should be used when the inferior uses an older version of the runtime,
11556    where the exception name needs to be extracted from a specific frame
11557    several frames up in the callstack.  */
11558
11559 static CORE_ADDR
11560 ada_unhandled_exception_name_addr_from_raise (void)
11561 {
11562   int frame_level;
11563   struct frame_info *fi;
11564   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11565   struct cleanup *old_chain;
11566
11567   /* To determine the name of this exception, we need to select
11568      the frame corresponding to RAISE_SYM_NAME.  This frame is
11569      at least 3 levels up, so we simply skip the first 3 frames
11570      without checking the name of their associated function.  */
11571   fi = get_current_frame ();
11572   for (frame_level = 0; frame_level < 3; frame_level += 1)
11573     if (fi != NULL)
11574       fi = get_prev_frame (fi); 
11575
11576   old_chain = make_cleanup (null_cleanup, NULL);
11577   while (fi != NULL)
11578     {
11579       char *func_name;
11580       enum language func_lang;
11581
11582       find_frame_funname (fi, &func_name, &func_lang, NULL);
11583       if (func_name != NULL)
11584         {
11585           make_cleanup (xfree, func_name);
11586
11587           if (strcmp (func_name,
11588                       data->exception_info->catch_exception_sym) == 0)
11589             break; /* We found the frame we were looking for...  */
11590           fi = get_prev_frame (fi);
11591         }
11592     }
11593   do_cleanups (old_chain);
11594
11595   if (fi == NULL)
11596     return 0;
11597
11598   select_frame (fi);
11599   return parse_and_eval_address ("id.full_name");
11600 }
11601
11602 /* Assuming the inferior just triggered an Ada exception catchpoint
11603    (of any type), return the address in inferior memory where the name
11604    of the exception is stored, if applicable.
11605
11606    Return zero if the address could not be computed, or if not relevant.  */
11607
11608 static CORE_ADDR
11609 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11610                            struct breakpoint *b)
11611 {
11612   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11613
11614   switch (ex)
11615     {
11616       case ada_catch_exception:
11617         return (parse_and_eval_address ("e.full_name"));
11618         break;
11619
11620       case ada_catch_exception_unhandled:
11621         return data->exception_info->unhandled_exception_name_addr ();
11622         break;
11623       
11624       case ada_catch_assert:
11625         return 0;  /* Exception name is not relevant in this case.  */
11626         break;
11627
11628       default:
11629         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11630         break;
11631     }
11632
11633   return 0; /* Should never be reached.  */
11634 }
11635
11636 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11637    any error that ada_exception_name_addr_1 might cause to be thrown.
11638    When an error is intercepted, a warning with the error message is printed,
11639    and zero is returned.  */
11640
11641 static CORE_ADDR
11642 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11643                          struct breakpoint *b)
11644 {
11645   volatile struct gdb_exception e;
11646   CORE_ADDR result = 0;
11647
11648   TRY_CATCH (e, RETURN_MASK_ERROR)
11649     {
11650       result = ada_exception_name_addr_1 (ex, b);
11651     }
11652
11653   if (e.reason < 0)
11654     {
11655       warning (_("failed to get exception name: %s"), e.message);
11656       return 0;
11657     }
11658
11659   return result;
11660 }
11661
11662 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11663
11664 /* Ada catchpoints.
11665
11666    In the case of catchpoints on Ada exceptions, the catchpoint will
11667    stop the target on every exception the program throws.  When a user
11668    specifies the name of a specific exception, we translate this
11669    request into a condition expression (in text form), and then parse
11670    it into an expression stored in each of the catchpoint's locations.
11671    We then use this condition to check whether the exception that was
11672    raised is the one the user is interested in.  If not, then the
11673    target is resumed again.  We store the name of the requested
11674    exception, in order to be able to re-set the condition expression
11675    when symbols change.  */
11676
11677 /* An instance of this type is used to represent an Ada catchpoint
11678    breakpoint location.  It includes a "struct bp_location" as a kind
11679    of base class; users downcast to "struct bp_location *" when
11680    needed.  */
11681
11682 struct ada_catchpoint_location
11683 {
11684   /* The base class.  */
11685   struct bp_location base;
11686
11687   /* The condition that checks whether the exception that was raised
11688      is the specific exception the user specified on catchpoint
11689      creation.  */
11690   struct expression *excep_cond_expr;
11691 };
11692
11693 /* Implement the DTOR method in the bp_location_ops structure for all
11694    Ada exception catchpoint kinds.  */
11695
11696 static void
11697 ada_catchpoint_location_dtor (struct bp_location *bl)
11698 {
11699   struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11700
11701   xfree (al->excep_cond_expr);
11702 }
11703
11704 /* The vtable to be used in Ada catchpoint locations.  */
11705
11706 static const struct bp_location_ops ada_catchpoint_location_ops =
11707 {
11708   ada_catchpoint_location_dtor
11709 };
11710
11711 /* An instance of this type is used to represent an Ada catchpoint.
11712    It includes a "struct breakpoint" as a kind of base class; users
11713    downcast to "struct breakpoint *" when needed.  */
11714
11715 struct ada_catchpoint
11716 {
11717   /* The base class.  */
11718   struct breakpoint base;
11719
11720   /* The name of the specific exception the user specified.  */
11721   char *excep_string;
11722 };
11723
11724 /* Parse the exception condition string in the context of each of the
11725    catchpoint's locations, and store them for later evaluation.  */
11726
11727 static void
11728 create_excep_cond_exprs (struct ada_catchpoint *c)
11729 {
11730   struct cleanup *old_chain;
11731   struct bp_location *bl;
11732   char *cond_string;
11733
11734   /* Nothing to do if there's no specific exception to catch.  */
11735   if (c->excep_string == NULL)
11736     return;
11737
11738   /* Same if there are no locations... */
11739   if (c->base.loc == NULL)
11740     return;
11741
11742   /* Compute the condition expression in text form, from the specific
11743      expection we want to catch.  */
11744   cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11745   old_chain = make_cleanup (xfree, cond_string);
11746
11747   /* Iterate over all the catchpoint's locations, and parse an
11748      expression for each.  */
11749   for (bl = c->base.loc; bl != NULL; bl = bl->next)
11750     {
11751       struct ada_catchpoint_location *ada_loc
11752         = (struct ada_catchpoint_location *) bl;
11753       struct expression *exp = NULL;
11754
11755       if (!bl->shlib_disabled)
11756         {
11757           volatile struct gdb_exception e;
11758           const char *s;
11759
11760           s = cond_string;
11761           TRY_CATCH (e, RETURN_MASK_ERROR)
11762             {
11763               exp = parse_exp_1 (&s, bl->address,
11764                                  block_for_pc (bl->address), 0);
11765             }
11766           if (e.reason < 0)
11767             {
11768               warning (_("failed to reevaluate internal exception condition "
11769                          "for catchpoint %d: %s"),
11770                        c->base.number, e.message);
11771               /* There is a bug in GCC on sparc-solaris when building with
11772                  optimization which causes EXP to change unexpectedly
11773                  (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11774                  The problem should be fixed starting with GCC 4.9.
11775                  In the meantime, work around it by forcing EXP back
11776                  to NULL.  */
11777               exp = NULL;
11778             }
11779         }
11780
11781       ada_loc->excep_cond_expr = exp;
11782     }
11783
11784   do_cleanups (old_chain);
11785 }
11786
11787 /* Implement the DTOR method in the breakpoint_ops structure for all
11788    exception catchpoint kinds.  */
11789
11790 static void
11791 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11792 {
11793   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11794
11795   xfree (c->excep_string);
11796
11797   bkpt_breakpoint_ops.dtor (b);
11798 }
11799
11800 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11801    structure for all exception catchpoint kinds.  */
11802
11803 static struct bp_location *
11804 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
11805                              struct breakpoint *self)
11806 {
11807   struct ada_catchpoint_location *loc;
11808
11809   loc = XNEW (struct ada_catchpoint_location);
11810   init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11811   loc->excep_cond_expr = NULL;
11812   return &loc->base;
11813 }
11814
11815 /* Implement the RE_SET method in the breakpoint_ops structure for all
11816    exception catchpoint kinds.  */
11817
11818 static void
11819 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
11820 {
11821   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11822
11823   /* Call the base class's method.  This updates the catchpoint's
11824      locations.  */
11825   bkpt_breakpoint_ops.re_set (b);
11826
11827   /* Reparse the exception conditional expressions.  One for each
11828      location.  */
11829   create_excep_cond_exprs (c);
11830 }
11831
11832 /* Returns true if we should stop for this breakpoint hit.  If the
11833    user specified a specific exception, we only want to cause a stop
11834    if the program thrown that exception.  */
11835
11836 static int
11837 should_stop_exception (const struct bp_location *bl)
11838 {
11839   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11840   const struct ada_catchpoint_location *ada_loc
11841     = (const struct ada_catchpoint_location *) bl;
11842   volatile struct gdb_exception ex;
11843   int stop;
11844
11845   /* With no specific exception, should always stop.  */
11846   if (c->excep_string == NULL)
11847     return 1;
11848
11849   if (ada_loc->excep_cond_expr == NULL)
11850     {
11851       /* We will have a NULL expression if back when we were creating
11852          the expressions, this location's had failed to parse.  */
11853       return 1;
11854     }
11855
11856   stop = 1;
11857   TRY_CATCH (ex, RETURN_MASK_ALL)
11858     {
11859       struct value *mark;
11860
11861       mark = value_mark ();
11862       stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11863       value_free_to_mark (mark);
11864     }
11865   if (ex.reason < 0)
11866     exception_fprintf (gdb_stderr, ex,
11867                        _("Error in testing exception condition:\n"));
11868   return stop;
11869 }
11870
11871 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
11872    for all exception catchpoint kinds.  */
11873
11874 static void
11875 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11876 {
11877   bs->stop = should_stop_exception (bs->bp_location_at);
11878 }
11879
11880 /* Implement the PRINT_IT method in the breakpoint_ops structure
11881    for all exception catchpoint kinds.  */
11882
11883 static enum print_stop_action
11884 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
11885 {
11886   struct ui_out *uiout = current_uiout;
11887   struct breakpoint *b = bs->breakpoint_at;
11888
11889   annotate_catchpoint (b->number);
11890
11891   if (ui_out_is_mi_like_p (uiout))
11892     {
11893       ui_out_field_string (uiout, "reason",
11894                            async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11895       ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11896     }
11897
11898   ui_out_text (uiout,
11899                b->disposition == disp_del ? "\nTemporary catchpoint "
11900                                           : "\nCatchpoint ");
11901   ui_out_field_int (uiout, "bkptno", b->number);
11902   ui_out_text (uiout, ", ");
11903
11904   switch (ex)
11905     {
11906       case ada_catch_exception:
11907       case ada_catch_exception_unhandled:
11908         {
11909           const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11910           char exception_name[256];
11911
11912           if (addr != 0)
11913             {
11914               read_memory (addr, (gdb_byte *) exception_name,
11915                            sizeof (exception_name) - 1);
11916               exception_name [sizeof (exception_name) - 1] = '\0';
11917             }
11918           else
11919             {
11920               /* For some reason, we were unable to read the exception
11921                  name.  This could happen if the Runtime was compiled
11922                  without debugging info, for instance.  In that case,
11923                  just replace the exception name by the generic string
11924                  "exception" - it will read as "an exception" in the
11925                  notification we are about to print.  */
11926               memcpy (exception_name, "exception", sizeof ("exception"));
11927             }
11928           /* In the case of unhandled exception breakpoints, we print
11929              the exception name as "unhandled EXCEPTION_NAME", to make
11930              it clearer to the user which kind of catchpoint just got
11931              hit.  We used ui_out_text to make sure that this extra
11932              info does not pollute the exception name in the MI case.  */
11933           if (ex == ada_catch_exception_unhandled)
11934             ui_out_text (uiout, "unhandled ");
11935           ui_out_field_string (uiout, "exception-name", exception_name);
11936         }
11937         break;
11938       case ada_catch_assert:
11939         /* In this case, the name of the exception is not really
11940            important.  Just print "failed assertion" to make it clearer
11941            that his program just hit an assertion-failure catchpoint.
11942            We used ui_out_text because this info does not belong in
11943            the MI output.  */
11944         ui_out_text (uiout, "failed assertion");
11945         break;
11946     }
11947   ui_out_text (uiout, " at ");
11948   ada_find_printable_frame (get_current_frame ());
11949
11950   return PRINT_SRC_AND_LOC;
11951 }
11952
11953 /* Implement the PRINT_ONE method in the breakpoint_ops structure
11954    for all exception catchpoint kinds.  */
11955
11956 static void
11957 print_one_exception (enum ada_exception_catchpoint_kind ex,
11958                      struct breakpoint *b, struct bp_location **last_loc)
11959
11960   struct ui_out *uiout = current_uiout;
11961   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11962   struct value_print_options opts;
11963
11964   get_user_print_options (&opts);
11965   if (opts.addressprint)
11966     {
11967       annotate_field (4);
11968       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
11969     }
11970
11971   annotate_field (5);
11972   *last_loc = b->loc;
11973   switch (ex)
11974     {
11975       case ada_catch_exception:
11976         if (c->excep_string != NULL)
11977           {
11978             char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11979
11980             ui_out_field_string (uiout, "what", msg);
11981             xfree (msg);
11982           }
11983         else
11984           ui_out_field_string (uiout, "what", "all Ada exceptions");
11985         
11986         break;
11987
11988       case ada_catch_exception_unhandled:
11989         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
11990         break;
11991       
11992       case ada_catch_assert:
11993         ui_out_field_string (uiout, "what", "failed Ada assertions");
11994         break;
11995
11996       default:
11997         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11998         break;
11999     }
12000 }
12001
12002 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12003    for all exception catchpoint kinds.  */
12004
12005 static void
12006 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12007                          struct breakpoint *b)
12008 {
12009   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12010   struct ui_out *uiout = current_uiout;
12011
12012   ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12013                                                  : _("Catchpoint "));
12014   ui_out_field_int (uiout, "bkptno", b->number);
12015   ui_out_text (uiout, ": ");
12016
12017   switch (ex)
12018     {
12019       case ada_catch_exception:
12020         if (c->excep_string != NULL)
12021           {
12022             char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12023             struct cleanup *old_chain = make_cleanup (xfree, info);
12024
12025             ui_out_text (uiout, info);
12026             do_cleanups (old_chain);
12027           }
12028         else
12029           ui_out_text (uiout, _("all Ada exceptions"));
12030         break;
12031
12032       case ada_catch_exception_unhandled:
12033         ui_out_text (uiout, _("unhandled Ada exceptions"));
12034         break;
12035       
12036       case ada_catch_assert:
12037         ui_out_text (uiout, _("failed Ada assertions"));
12038         break;
12039
12040       default:
12041         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12042         break;
12043     }
12044 }
12045
12046 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12047    for all exception catchpoint kinds.  */
12048
12049 static void
12050 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12051                           struct breakpoint *b, struct ui_file *fp)
12052 {
12053   struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12054
12055   switch (ex)
12056     {
12057       case ada_catch_exception:
12058         fprintf_filtered (fp, "catch exception");
12059         if (c->excep_string != NULL)
12060           fprintf_filtered (fp, " %s", c->excep_string);
12061         break;
12062
12063       case ada_catch_exception_unhandled:
12064         fprintf_filtered (fp, "catch exception unhandled");
12065         break;
12066
12067       case ada_catch_assert:
12068         fprintf_filtered (fp, "catch assert");
12069         break;
12070
12071       default:
12072         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12073     }
12074   print_recreate_thread (b, fp);
12075 }
12076
12077 /* Virtual table for "catch exception" breakpoints.  */
12078
12079 static void
12080 dtor_catch_exception (struct breakpoint *b)
12081 {
12082   dtor_exception (ada_catch_exception, b);
12083 }
12084
12085 static struct bp_location *
12086 allocate_location_catch_exception (struct breakpoint *self)
12087 {
12088   return allocate_location_exception (ada_catch_exception, self);
12089 }
12090
12091 static void
12092 re_set_catch_exception (struct breakpoint *b)
12093 {
12094   re_set_exception (ada_catch_exception, b);
12095 }
12096
12097 static void
12098 check_status_catch_exception (bpstat bs)
12099 {
12100   check_status_exception (ada_catch_exception, bs);
12101 }
12102
12103 static enum print_stop_action
12104 print_it_catch_exception (bpstat bs)
12105 {
12106   return print_it_exception (ada_catch_exception, bs);
12107 }
12108
12109 static void
12110 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12111 {
12112   print_one_exception (ada_catch_exception, b, last_loc);
12113 }
12114
12115 static void
12116 print_mention_catch_exception (struct breakpoint *b)
12117 {
12118   print_mention_exception (ada_catch_exception, b);
12119 }
12120
12121 static void
12122 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12123 {
12124   print_recreate_exception (ada_catch_exception, b, fp);
12125 }
12126
12127 static struct breakpoint_ops catch_exception_breakpoint_ops;
12128
12129 /* Virtual table for "catch exception unhandled" breakpoints.  */
12130
12131 static void
12132 dtor_catch_exception_unhandled (struct breakpoint *b)
12133 {
12134   dtor_exception (ada_catch_exception_unhandled, b);
12135 }
12136
12137 static struct bp_location *
12138 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12139 {
12140   return allocate_location_exception (ada_catch_exception_unhandled, self);
12141 }
12142
12143 static void
12144 re_set_catch_exception_unhandled (struct breakpoint *b)
12145 {
12146   re_set_exception (ada_catch_exception_unhandled, b);
12147 }
12148
12149 static void
12150 check_status_catch_exception_unhandled (bpstat bs)
12151 {
12152   check_status_exception (ada_catch_exception_unhandled, bs);
12153 }
12154
12155 static enum print_stop_action
12156 print_it_catch_exception_unhandled (bpstat bs)
12157 {
12158   return print_it_exception (ada_catch_exception_unhandled, bs);
12159 }
12160
12161 static void
12162 print_one_catch_exception_unhandled (struct breakpoint *b,
12163                                      struct bp_location **last_loc)
12164 {
12165   print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12166 }
12167
12168 static void
12169 print_mention_catch_exception_unhandled (struct breakpoint *b)
12170 {
12171   print_mention_exception (ada_catch_exception_unhandled, b);
12172 }
12173
12174 static void
12175 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12176                                           struct ui_file *fp)
12177 {
12178   print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12179 }
12180
12181 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12182
12183 /* Virtual table for "catch assert" breakpoints.  */
12184
12185 static void
12186 dtor_catch_assert (struct breakpoint *b)
12187 {
12188   dtor_exception (ada_catch_assert, b);
12189 }
12190
12191 static struct bp_location *
12192 allocate_location_catch_assert (struct breakpoint *self)
12193 {
12194   return allocate_location_exception (ada_catch_assert, self);
12195 }
12196
12197 static void
12198 re_set_catch_assert (struct breakpoint *b)
12199 {
12200   re_set_exception (ada_catch_assert, b);
12201 }
12202
12203 static void
12204 check_status_catch_assert (bpstat bs)
12205 {
12206   check_status_exception (ada_catch_assert, bs);
12207 }
12208
12209 static enum print_stop_action
12210 print_it_catch_assert (bpstat bs)
12211 {
12212   return print_it_exception (ada_catch_assert, bs);
12213 }
12214
12215 static void
12216 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12217 {
12218   print_one_exception (ada_catch_assert, b, last_loc);
12219 }
12220
12221 static void
12222 print_mention_catch_assert (struct breakpoint *b)
12223 {
12224   print_mention_exception (ada_catch_assert, b);
12225 }
12226
12227 static void
12228 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12229 {
12230   print_recreate_exception (ada_catch_assert, b, fp);
12231 }
12232
12233 static struct breakpoint_ops catch_assert_breakpoint_ops;
12234
12235 /* Return a newly allocated copy of the first space-separated token
12236    in ARGSP, and then adjust ARGSP to point immediately after that
12237    token.
12238
12239    Return NULL if ARGPS does not contain any more tokens.  */
12240
12241 static char *
12242 ada_get_next_arg (char **argsp)
12243 {
12244   char *args = *argsp;
12245   char *end;
12246   char *result;
12247
12248   args = skip_spaces (args);
12249   if (args[0] == '\0')
12250     return NULL; /* No more arguments.  */
12251   
12252   /* Find the end of the current argument.  */
12253
12254   end = skip_to_space (args);
12255
12256   /* Adjust ARGSP to point to the start of the next argument.  */
12257
12258   *argsp = end;
12259
12260   /* Make a copy of the current argument and return it.  */
12261
12262   result = xmalloc (end - args + 1);
12263   strncpy (result, args, end - args);
12264   result[end - args] = '\0';
12265   
12266   return result;
12267 }
12268
12269 /* Split the arguments specified in a "catch exception" command.  
12270    Set EX to the appropriate catchpoint type.
12271    Set EXCEP_STRING to the name of the specific exception if
12272    specified by the user.
12273    If a condition is found at the end of the arguments, the condition
12274    expression is stored in COND_STRING (memory must be deallocated
12275    after use).  Otherwise COND_STRING is set to NULL.  */
12276
12277 static void
12278 catch_ada_exception_command_split (char *args,
12279                                    enum ada_exception_catchpoint_kind *ex,
12280                                    char **excep_string,
12281                                    char **cond_string)
12282 {
12283   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12284   char *exception_name;
12285   char *cond = NULL;
12286
12287   exception_name = ada_get_next_arg (&args);
12288   if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12289     {
12290       /* This is not an exception name; this is the start of a condition
12291          expression for a catchpoint on all exceptions.  So, "un-get"
12292          this token, and set exception_name to NULL.  */
12293       xfree (exception_name);
12294       exception_name = NULL;
12295       args -= 2;
12296     }
12297   make_cleanup (xfree, exception_name);
12298
12299   /* Check to see if we have a condition.  */
12300
12301   args = skip_spaces (args);
12302   if (strncmp (args, "if", 2) == 0
12303       && (isspace (args[2]) || args[2] == '\0'))
12304     {
12305       args += 2;
12306       args = skip_spaces (args);
12307
12308       if (args[0] == '\0')
12309         error (_("Condition missing after `if' keyword"));
12310       cond = xstrdup (args);
12311       make_cleanup (xfree, cond);
12312
12313       args += strlen (args);
12314     }
12315
12316   /* Check that we do not have any more arguments.  Anything else
12317      is unexpected.  */
12318
12319   if (args[0] != '\0')
12320     error (_("Junk at end of expression"));
12321
12322   discard_cleanups (old_chain);
12323
12324   if (exception_name == NULL)
12325     {
12326       /* Catch all exceptions.  */
12327       *ex = ada_catch_exception;
12328       *excep_string = NULL;
12329     }
12330   else if (strcmp (exception_name, "unhandled") == 0)
12331     {
12332       /* Catch unhandled exceptions.  */
12333       *ex = ada_catch_exception_unhandled;
12334       *excep_string = NULL;
12335     }
12336   else
12337     {
12338       /* Catch a specific exception.  */
12339       *ex = ada_catch_exception;
12340       *excep_string = exception_name;
12341     }
12342   *cond_string = cond;
12343 }
12344
12345 /* Return the name of the symbol on which we should break in order to
12346    implement a catchpoint of the EX kind.  */
12347
12348 static const char *
12349 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12350 {
12351   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12352
12353   gdb_assert (data->exception_info != NULL);
12354
12355   switch (ex)
12356     {
12357       case ada_catch_exception:
12358         return (data->exception_info->catch_exception_sym);
12359         break;
12360       case ada_catch_exception_unhandled:
12361         return (data->exception_info->catch_exception_unhandled_sym);
12362         break;
12363       case ada_catch_assert:
12364         return (data->exception_info->catch_assert_sym);
12365         break;
12366       default:
12367         internal_error (__FILE__, __LINE__,
12368                         _("unexpected catchpoint kind (%d)"), ex);
12369     }
12370 }
12371
12372 /* Return the breakpoint ops "virtual table" used for catchpoints
12373    of the EX kind.  */
12374
12375 static const struct breakpoint_ops *
12376 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12377 {
12378   switch (ex)
12379     {
12380       case ada_catch_exception:
12381         return (&catch_exception_breakpoint_ops);
12382         break;
12383       case ada_catch_exception_unhandled:
12384         return (&catch_exception_unhandled_breakpoint_ops);
12385         break;
12386       case ada_catch_assert:
12387         return (&catch_assert_breakpoint_ops);
12388         break;
12389       default:
12390         internal_error (__FILE__, __LINE__,
12391                         _("unexpected catchpoint kind (%d)"), ex);
12392     }
12393 }
12394
12395 /* Return the condition that will be used to match the current exception
12396    being raised with the exception that the user wants to catch.  This
12397    assumes that this condition is used when the inferior just triggered
12398    an exception catchpoint.
12399    
12400    The string returned is a newly allocated string that needs to be
12401    deallocated later.  */
12402
12403 static char *
12404 ada_exception_catchpoint_cond_string (const char *excep_string)
12405 {
12406   int i;
12407
12408   /* The standard exceptions are a special case.  They are defined in
12409      runtime units that have been compiled without debugging info; if
12410      EXCEP_STRING is the not-fully-qualified name of a standard
12411      exception (e.g. "constraint_error") then, during the evaluation
12412      of the condition expression, the symbol lookup on this name would
12413      *not* return this standard exception.  The catchpoint condition
12414      may then be set only on user-defined exceptions which have the
12415      same not-fully-qualified name (e.g. my_package.constraint_error).
12416
12417      To avoid this unexcepted behavior, these standard exceptions are
12418      systematically prefixed by "standard".  This means that "catch
12419      exception constraint_error" is rewritten into "catch exception
12420      standard.constraint_error".
12421
12422      If an exception named contraint_error is defined in another package of
12423      the inferior program, then the only way to specify this exception as a
12424      breakpoint condition is to use its fully-qualified named:
12425      e.g. my_package.constraint_error.  */
12426
12427   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12428     {
12429       if (strcmp (standard_exc [i], excep_string) == 0)
12430         {
12431           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12432                              excep_string);
12433         }
12434     }
12435   return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12436 }
12437
12438 /* Return the symtab_and_line that should be used to insert an exception
12439    catchpoint of the TYPE kind.
12440
12441    EXCEP_STRING should contain the name of a specific exception that
12442    the catchpoint should catch, or NULL otherwise.
12443
12444    ADDR_STRING returns the name of the function where the real
12445    breakpoint that implements the catchpoints is set, depending on the
12446    type of catchpoint we need to create.  */
12447
12448 static struct symtab_and_line
12449 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12450                    char **addr_string, const struct breakpoint_ops **ops)
12451 {
12452   const char *sym_name;
12453   struct symbol *sym;
12454
12455   /* First, find out which exception support info to use.  */
12456   ada_exception_support_info_sniffer ();
12457
12458   /* Then lookup the function on which we will break in order to catch
12459      the Ada exceptions requested by the user.  */
12460   sym_name = ada_exception_sym_name (ex);
12461   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12462
12463   /* We can assume that SYM is not NULL at this stage.  If the symbol
12464      did not exist, ada_exception_support_info_sniffer would have
12465      raised an exception.
12466
12467      Also, ada_exception_support_info_sniffer should have already
12468      verified that SYM is a function symbol.  */
12469   gdb_assert (sym != NULL);
12470   gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12471
12472   /* Set ADDR_STRING.  */
12473   *addr_string = xstrdup (sym_name);
12474
12475   /* Set OPS.  */
12476   *ops = ada_exception_breakpoint_ops (ex);
12477
12478   return find_function_start_sal (sym, 1);
12479 }
12480
12481 /* Create an Ada exception catchpoint.
12482
12483    EX_KIND is the kind of exception catchpoint to be created.
12484
12485    If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12486    for all exceptions.  Otherwise, EXCEPT_STRING indicates the name
12487    of the exception to which this catchpoint applies.  When not NULL,
12488    the string must be allocated on the heap, and its deallocation
12489    is no longer the responsibility of the caller.
12490
12491    COND_STRING, if not NULL, is the catchpoint condition.  This string
12492    must be allocated on the heap, and its deallocation is no longer
12493    the responsibility of the caller.
12494
12495    TEMPFLAG, if nonzero, means that the underlying breakpoint
12496    should be temporary.
12497
12498    FROM_TTY is the usual argument passed to all commands implementations.  */
12499
12500 void
12501 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12502                                  enum ada_exception_catchpoint_kind ex_kind,
12503                                  char *excep_string,
12504                                  char *cond_string,
12505                                  int tempflag,
12506                                  int disabled,
12507                                  int from_tty)
12508 {
12509   struct ada_catchpoint *c;
12510   char *addr_string = NULL;
12511   const struct breakpoint_ops *ops = NULL;
12512   struct symtab_and_line sal
12513     = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12514
12515   c = XNEW (struct ada_catchpoint);
12516   init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12517                                  ops, tempflag, disabled, from_tty);
12518   c->excep_string = excep_string;
12519   create_excep_cond_exprs (c);
12520   if (cond_string != NULL)
12521     set_breakpoint_condition (&c->base, cond_string, from_tty);
12522   install_breakpoint (0, &c->base, 1);
12523 }
12524
12525 /* Implement the "catch exception" command.  */
12526
12527 static void
12528 catch_ada_exception_command (char *arg, int from_tty,
12529                              struct cmd_list_element *command)
12530 {
12531   struct gdbarch *gdbarch = get_current_arch ();
12532   int tempflag;
12533   enum ada_exception_catchpoint_kind ex_kind;
12534   char *excep_string = NULL;
12535   char *cond_string = NULL;
12536
12537   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12538
12539   if (!arg)
12540     arg = "";
12541   catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12542                                      &cond_string);
12543   create_ada_exception_catchpoint (gdbarch, ex_kind,
12544                                    excep_string, cond_string,
12545                                    tempflag, 1 /* enabled */,
12546                                    from_tty);
12547 }
12548
12549 /* Split the arguments specified in a "catch assert" command.
12550
12551    ARGS contains the command's arguments (or the empty string if
12552    no arguments were passed).
12553
12554    If ARGS contains a condition, set COND_STRING to that condition
12555    (the memory needs to be deallocated after use).  */
12556
12557 static void
12558 catch_ada_assert_command_split (char *args, char **cond_string)
12559 {
12560   args = skip_spaces (args);
12561
12562   /* Check whether a condition was provided.  */
12563   if (strncmp (args, "if", 2) == 0
12564       && (isspace (args[2]) || args[2] == '\0'))
12565     {
12566       args += 2;
12567       args = skip_spaces (args);
12568       if (args[0] == '\0')
12569         error (_("condition missing after `if' keyword"));
12570       *cond_string = xstrdup (args);
12571     }
12572
12573   /* Otherwise, there should be no other argument at the end of
12574      the command.  */
12575   else if (args[0] != '\0')
12576     error (_("Junk at end of arguments."));
12577 }
12578
12579 /* Implement the "catch assert" command.  */
12580
12581 static void
12582 catch_assert_command (char *arg, int from_tty,
12583                       struct cmd_list_element *command)
12584 {
12585   struct gdbarch *gdbarch = get_current_arch ();
12586   int tempflag;
12587   char *cond_string = NULL;
12588
12589   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12590
12591   if (!arg)
12592     arg = "";
12593   catch_ada_assert_command_split (arg, &cond_string);
12594   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12595                                    NULL, cond_string,
12596                                    tempflag, 1 /* enabled */,
12597                                    from_tty);
12598 }
12599
12600 /* Return non-zero if the symbol SYM is an Ada exception object.  */
12601
12602 static int
12603 ada_is_exception_sym (struct symbol *sym)
12604 {
12605   const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12606
12607   return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12608           && SYMBOL_CLASS (sym) != LOC_BLOCK
12609           && SYMBOL_CLASS (sym) != LOC_CONST
12610           && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12611           && type_name != NULL && strcmp (type_name, "exception") == 0);
12612 }
12613
12614 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12615    Ada exception object.  This matches all exceptions except the ones
12616    defined by the Ada language.  */
12617
12618 static int
12619 ada_is_non_standard_exception_sym (struct symbol *sym)
12620 {
12621   int i;
12622
12623   if (!ada_is_exception_sym (sym))
12624     return 0;
12625
12626   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12627     if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12628       return 0;  /* A standard exception.  */
12629
12630   /* Numeric_Error is also a standard exception, so exclude it.
12631      See the STANDARD_EXC description for more details as to why
12632      this exception is not listed in that array.  */
12633   if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12634     return 0;
12635
12636   return 1;
12637 }
12638
12639 /* A helper function for qsort, comparing two struct ada_exc_info
12640    objects.
12641
12642    The comparison is determined first by exception name, and then
12643    by exception address.  */
12644
12645 static int
12646 compare_ada_exception_info (const void *a, const void *b)
12647 {
12648   const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12649   const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12650   int result;
12651
12652   result = strcmp (exc_a->name, exc_b->name);
12653   if (result != 0)
12654     return result;
12655
12656   if (exc_a->addr < exc_b->addr)
12657     return -1;
12658   if (exc_a->addr > exc_b->addr)
12659     return 1;
12660
12661   return 0;
12662 }
12663
12664 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12665    routine, but keeping the first SKIP elements untouched.
12666
12667    All duplicates are also removed.  */
12668
12669 static void
12670 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12671                                       int skip)
12672 {
12673   struct ada_exc_info *to_sort
12674     = VEC_address (ada_exc_info, *exceptions) + skip;
12675   int to_sort_len
12676     = VEC_length (ada_exc_info, *exceptions) - skip;
12677   int i, j;
12678
12679   qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12680          compare_ada_exception_info);
12681
12682   for (i = 1, j = 1; i < to_sort_len; i++)
12683     if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12684       to_sort[j++] = to_sort[i];
12685   to_sort_len = j;
12686   VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12687 }
12688
12689 /* A function intended as the "name_matcher" callback in the struct
12690    quick_symbol_functions' expand_symtabs_matching method.
12691
12692    SEARCH_NAME is the symbol's search name.
12693
12694    If USER_DATA is not NULL, it is a pointer to a regext_t object
12695    used to match the symbol (by natural name).  Otherwise, when USER_DATA
12696    is null, no filtering is performed, and all symbols are a positive
12697    match.  */
12698
12699 static int
12700 ada_exc_search_name_matches (const char *search_name, void *user_data)
12701 {
12702   regex_t *preg = user_data;
12703
12704   if (preg == NULL)
12705     return 1;
12706
12707   /* In Ada, the symbol "search name" is a linkage name, whereas
12708      the regular expression used to do the matching refers to
12709      the natural name.  So match against the decoded name.  */
12710   return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12711 }
12712
12713 /* Add all exceptions defined by the Ada standard whose name match
12714    a regular expression.
12715
12716    If PREG is not NULL, then this regexp_t object is used to
12717    perform the symbol name matching.  Otherwise, no name-based
12718    filtering is performed.
12719
12720    EXCEPTIONS is a vector of exceptions to which matching exceptions
12721    gets pushed.  */
12722
12723 static void
12724 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12725 {
12726   int i;
12727
12728   for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12729     {
12730       if (preg == NULL
12731           || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12732         {
12733           struct bound_minimal_symbol msymbol
12734             = ada_lookup_simple_minsym (standard_exc[i]);
12735
12736           if (msymbol.minsym != NULL)
12737             {
12738               struct ada_exc_info info
12739                 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12740
12741               VEC_safe_push (ada_exc_info, *exceptions, &info);
12742             }
12743         }
12744     }
12745 }
12746
12747 /* Add all Ada exceptions defined locally and accessible from the given
12748    FRAME.
12749
12750    If PREG is not NULL, then this regexp_t object is used to
12751    perform the symbol name matching.  Otherwise, no name-based
12752    filtering is performed.
12753
12754    EXCEPTIONS is a vector of exceptions to which matching exceptions
12755    gets pushed.  */
12756
12757 static void
12758 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12759                                VEC(ada_exc_info) **exceptions)
12760 {
12761   const struct block *block = get_frame_block (frame, 0);
12762
12763   while (block != 0)
12764     {
12765       struct block_iterator iter;
12766       struct symbol *sym;
12767
12768       ALL_BLOCK_SYMBOLS (block, iter, sym)
12769         {
12770           switch (SYMBOL_CLASS (sym))
12771             {
12772             case LOC_TYPEDEF:
12773             case LOC_BLOCK:
12774             case LOC_CONST:
12775               break;
12776             default:
12777               if (ada_is_exception_sym (sym))
12778                 {
12779                   struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12780                                               SYMBOL_VALUE_ADDRESS (sym)};
12781
12782                   VEC_safe_push (ada_exc_info, *exceptions, &info);
12783                 }
12784             }
12785         }
12786       if (BLOCK_FUNCTION (block) != NULL)
12787         break;
12788       block = BLOCK_SUPERBLOCK (block);
12789     }
12790 }
12791
12792 /* Add all exceptions defined globally whose name name match
12793    a regular expression, excluding standard exceptions.
12794
12795    The reason we exclude standard exceptions is that they need
12796    to be handled separately: Standard exceptions are defined inside
12797    a runtime unit which is normally not compiled with debugging info,
12798    and thus usually do not show up in our symbol search.  However,
12799    if the unit was in fact built with debugging info, we need to
12800    exclude them because they would duplicate the entry we found
12801    during the special loop that specifically searches for those
12802    standard exceptions.
12803
12804    If PREG is not NULL, then this regexp_t object is used to
12805    perform the symbol name matching.  Otherwise, no name-based
12806    filtering is performed.
12807
12808    EXCEPTIONS is a vector of exceptions to which matching exceptions
12809    gets pushed.  */
12810
12811 static void
12812 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12813 {
12814   struct objfile *objfile;
12815   struct symtab *s;
12816
12817   expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12818                            VARIABLES_DOMAIN, preg);
12819
12820   ALL_PRIMARY_SYMTABS (objfile, s)
12821     {
12822       const struct blockvector *bv = BLOCKVECTOR (s);
12823       int i;
12824
12825       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12826         {
12827           struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12828           struct block_iterator iter;
12829           struct symbol *sym;
12830
12831           ALL_BLOCK_SYMBOLS (b, iter, sym)
12832             if (ada_is_non_standard_exception_sym (sym)
12833                 && (preg == NULL
12834                     || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12835                                 0, NULL, 0) == 0))
12836               {
12837                 struct ada_exc_info info
12838                   = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12839
12840                 VEC_safe_push (ada_exc_info, *exceptions, &info);
12841               }
12842         }
12843     }
12844 }
12845
12846 /* Implements ada_exceptions_list with the regular expression passed
12847    as a regex_t, rather than a string.
12848
12849    If not NULL, PREG is used to filter out exceptions whose names
12850    do not match.  Otherwise, all exceptions are listed.  */
12851
12852 static VEC(ada_exc_info) *
12853 ada_exceptions_list_1 (regex_t *preg)
12854 {
12855   VEC(ada_exc_info) *result = NULL;
12856   struct cleanup *old_chain
12857     = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12858   int prev_len;
12859
12860   /* First, list the known standard exceptions.  These exceptions
12861      need to be handled separately, as they are usually defined in
12862      runtime units that have been compiled without debugging info.  */
12863
12864   ada_add_standard_exceptions (preg, &result);
12865
12866   /* Next, find all exceptions whose scope is local and accessible
12867      from the currently selected frame.  */
12868
12869   if (has_stack_frames ())
12870     {
12871       prev_len = VEC_length (ada_exc_info, result);
12872       ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12873                                      &result);
12874       if (VEC_length (ada_exc_info, result) > prev_len)
12875         sort_remove_dups_ada_exceptions_list (&result, prev_len);
12876     }
12877
12878   /* Add all exceptions whose scope is global.  */
12879
12880   prev_len = VEC_length (ada_exc_info, result);
12881   ada_add_global_exceptions (preg, &result);
12882   if (VEC_length (ada_exc_info, result) > prev_len)
12883     sort_remove_dups_ada_exceptions_list (&result, prev_len);
12884
12885   discard_cleanups (old_chain);
12886   return result;
12887 }
12888
12889 /* Return a vector of ada_exc_info.
12890
12891    If REGEXP is NULL, all exceptions are included in the result.
12892    Otherwise, it should contain a valid regular expression,
12893    and only the exceptions whose names match that regular expression
12894    are included in the result.
12895
12896    The exceptions are sorted in the following order:
12897      - Standard exceptions (defined by the Ada language), in
12898        alphabetical order;
12899      - Exceptions only visible from the current frame, in
12900        alphabetical order;
12901      - Exceptions whose scope is global, in alphabetical order.  */
12902
12903 VEC(ada_exc_info) *
12904 ada_exceptions_list (const char *regexp)
12905 {
12906   VEC(ada_exc_info) *result = NULL;
12907   struct cleanup *old_chain = NULL;
12908   regex_t reg;
12909
12910   if (regexp != NULL)
12911     old_chain = compile_rx_or_error (&reg, regexp,
12912                                      _("invalid regular expression"));
12913
12914   result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12915
12916   if (old_chain != NULL)
12917     do_cleanups (old_chain);
12918   return result;
12919 }
12920
12921 /* Implement the "info exceptions" command.  */
12922
12923 static void
12924 info_exceptions_command (char *regexp, int from_tty)
12925 {
12926   VEC(ada_exc_info) *exceptions;
12927   struct cleanup *cleanup;
12928   struct gdbarch *gdbarch = get_current_arch ();
12929   int ix;
12930   struct ada_exc_info *info;
12931
12932   exceptions = ada_exceptions_list (regexp);
12933   cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12934
12935   if (regexp != NULL)
12936     printf_filtered
12937       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12938   else
12939     printf_filtered (_("All defined Ada exceptions:\n"));
12940
12941   for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12942     printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12943
12944   do_cleanups (cleanup);
12945 }
12946
12947                                 /* Operators */
12948 /* Information about operators given special treatment in functions
12949    below.  */
12950 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
12951
12952 #define ADA_OPERATORS \
12953     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12954     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12955     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12956     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12957     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12958     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12959     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12960     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12961     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12962     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12963     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12964     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12965     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
12966     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
12967     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
12968     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
12969     OP_DEFN (OP_OTHERS, 1, 1, 0) \
12970     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
12971     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
12972
12973 static void
12974 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
12975                      int *argsp)
12976 {
12977   switch (exp->elts[pc - 1].opcode)
12978     {
12979     default:
12980       operator_length_standard (exp, pc, oplenp, argsp);
12981       break;
12982
12983 #define OP_DEFN(op, len, args, binop) \
12984     case op: *oplenp = len; *argsp = args; break;
12985       ADA_OPERATORS;
12986 #undef OP_DEFN
12987
12988     case OP_AGGREGATE:
12989       *oplenp = 3;
12990       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
12991       break;
12992
12993     case OP_CHOICES:
12994       *oplenp = 3;
12995       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
12996       break;
12997     }
12998 }
12999
13000 /* Implementation of the exp_descriptor method operator_check.  */
13001
13002 static int
13003 ada_operator_check (struct expression *exp, int pos,
13004                     int (*objfile_func) (struct objfile *objfile, void *data),
13005                     void *data)
13006 {
13007   const union exp_element *const elts = exp->elts;
13008   struct type *type = NULL;
13009
13010   switch (elts[pos].opcode)
13011     {
13012       case UNOP_IN_RANGE:
13013       case UNOP_QUAL:
13014         type = elts[pos + 1].type;
13015         break;
13016
13017       default:
13018         return operator_check_standard (exp, pos, objfile_func, data);
13019     }
13020
13021   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
13022
13023   if (type && TYPE_OBJFILE (type)
13024       && (*objfile_func) (TYPE_OBJFILE (type), data))
13025     return 1;
13026
13027   return 0;
13028 }
13029
13030 static char *
13031 ada_op_name (enum exp_opcode opcode)
13032 {
13033   switch (opcode)
13034     {
13035     default:
13036       return op_name_standard (opcode);
13037
13038 #define OP_DEFN(op, len, args, binop) case op: return #op;
13039       ADA_OPERATORS;
13040 #undef OP_DEFN
13041
13042     case OP_AGGREGATE:
13043       return "OP_AGGREGATE";
13044     case OP_CHOICES:
13045       return "OP_CHOICES";
13046     case OP_NAME:
13047       return "OP_NAME";
13048     }
13049 }
13050
13051 /* As for operator_length, but assumes PC is pointing at the first
13052    element of the operator, and gives meaningful results only for the 
13053    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
13054
13055 static void
13056 ada_forward_operator_length (struct expression *exp, int pc,
13057                              int *oplenp, int *argsp)
13058 {
13059   switch (exp->elts[pc].opcode)
13060     {
13061     default:
13062       *oplenp = *argsp = 0;
13063       break;
13064
13065 #define OP_DEFN(op, len, args, binop) \
13066     case op: *oplenp = len; *argsp = args; break;
13067       ADA_OPERATORS;
13068 #undef OP_DEFN
13069
13070     case OP_AGGREGATE:
13071       *oplenp = 3;
13072       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13073       break;
13074
13075     case OP_CHOICES:
13076       *oplenp = 3;
13077       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13078       break;
13079
13080     case OP_STRING:
13081     case OP_NAME:
13082       {
13083         int len = longest_to_int (exp->elts[pc + 1].longconst);
13084
13085         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13086         *argsp = 0;
13087         break;
13088       }
13089     }
13090 }
13091
13092 static int
13093 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13094 {
13095   enum exp_opcode op = exp->elts[elt].opcode;
13096   int oplen, nargs;
13097   int pc = elt;
13098   int i;
13099
13100   ada_forward_operator_length (exp, elt, &oplen, &nargs);
13101
13102   switch (op)
13103     {
13104       /* Ada attributes ('Foo).  */
13105     case OP_ATR_FIRST:
13106     case OP_ATR_LAST:
13107     case OP_ATR_LENGTH:
13108     case OP_ATR_IMAGE:
13109     case OP_ATR_MAX:
13110     case OP_ATR_MIN:
13111     case OP_ATR_MODULUS:
13112     case OP_ATR_POS:
13113     case OP_ATR_SIZE:
13114     case OP_ATR_TAG:
13115     case OP_ATR_VAL:
13116       break;
13117
13118     case UNOP_IN_RANGE:
13119     case UNOP_QUAL:
13120       /* XXX: gdb_sprint_host_address, type_sprint */
13121       fprintf_filtered (stream, _("Type @"));
13122       gdb_print_host_address (exp->elts[pc + 1].type, stream);
13123       fprintf_filtered (stream, " (");
13124       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13125       fprintf_filtered (stream, ")");
13126       break;
13127     case BINOP_IN_BOUNDS:
13128       fprintf_filtered (stream, " (%d)",
13129                         longest_to_int (exp->elts[pc + 2].longconst));
13130       break;
13131     case TERNOP_IN_RANGE:
13132       break;
13133
13134     case OP_AGGREGATE:
13135     case OP_OTHERS:
13136     case OP_DISCRETE_RANGE:
13137     case OP_POSITIONAL:
13138     case OP_CHOICES:
13139       break;
13140
13141     case OP_NAME:
13142     case OP_STRING:
13143       {
13144         char *name = &exp->elts[elt + 2].string;
13145         int len = longest_to_int (exp->elts[elt + 1].longconst);
13146
13147         fprintf_filtered (stream, "Text: `%.*s'", len, name);
13148         break;
13149       }
13150
13151     default:
13152       return dump_subexp_body_standard (exp, stream, elt);
13153     }
13154
13155   elt += oplen;
13156   for (i = 0; i < nargs; i += 1)
13157     elt = dump_subexp (exp, stream, elt);
13158
13159   return elt;
13160 }
13161
13162 /* The Ada extension of print_subexp (q.v.).  */
13163
13164 static void
13165 ada_print_subexp (struct expression *exp, int *pos,
13166                   struct ui_file *stream, enum precedence prec)
13167 {
13168   int oplen, nargs, i;
13169   int pc = *pos;
13170   enum exp_opcode op = exp->elts[pc].opcode;
13171
13172   ada_forward_operator_length (exp, pc, &oplen, &nargs);
13173
13174   *pos += oplen;
13175   switch (op)
13176     {
13177     default:
13178       *pos -= oplen;
13179       print_subexp_standard (exp, pos, stream, prec);
13180       return;
13181
13182     case OP_VAR_VALUE:
13183       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13184       return;
13185
13186     case BINOP_IN_BOUNDS:
13187       /* XXX: sprint_subexp */
13188       print_subexp (exp, pos, stream, PREC_SUFFIX);
13189       fputs_filtered (" in ", stream);
13190       print_subexp (exp, pos, stream, PREC_SUFFIX);
13191       fputs_filtered ("'range", stream);
13192       if (exp->elts[pc + 1].longconst > 1)
13193         fprintf_filtered (stream, "(%ld)",
13194                           (long) exp->elts[pc + 1].longconst);
13195       return;
13196
13197     case TERNOP_IN_RANGE:
13198       if (prec >= PREC_EQUAL)
13199         fputs_filtered ("(", stream);
13200       /* XXX: sprint_subexp */
13201       print_subexp (exp, pos, stream, PREC_SUFFIX);
13202       fputs_filtered (" in ", stream);
13203       print_subexp (exp, pos, stream, PREC_EQUAL);
13204       fputs_filtered (" .. ", stream);
13205       print_subexp (exp, pos, stream, PREC_EQUAL);
13206       if (prec >= PREC_EQUAL)
13207         fputs_filtered (")", stream);
13208       return;
13209
13210     case OP_ATR_FIRST:
13211     case OP_ATR_LAST:
13212     case OP_ATR_LENGTH:
13213     case OP_ATR_IMAGE:
13214     case OP_ATR_MAX:
13215     case OP_ATR_MIN:
13216     case OP_ATR_MODULUS:
13217     case OP_ATR_POS:
13218     case OP_ATR_SIZE:
13219     case OP_ATR_TAG:
13220     case OP_ATR_VAL:
13221       if (exp->elts[*pos].opcode == OP_TYPE)
13222         {
13223           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13224             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13225                            &type_print_raw_options);
13226           *pos += 3;
13227         }
13228       else
13229         print_subexp (exp, pos, stream, PREC_SUFFIX);
13230       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13231       if (nargs > 1)
13232         {
13233           int tem;
13234
13235           for (tem = 1; tem < nargs; tem += 1)
13236             {
13237               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13238               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13239             }
13240           fputs_filtered (")", stream);
13241         }
13242       return;
13243
13244     case UNOP_QUAL:
13245       type_print (exp->elts[pc + 1].type, "", stream, 0);
13246       fputs_filtered ("'(", stream);
13247       print_subexp (exp, pos, stream, PREC_PREFIX);
13248       fputs_filtered (")", stream);
13249       return;
13250
13251     case UNOP_IN_RANGE:
13252       /* XXX: sprint_subexp */
13253       print_subexp (exp, pos, stream, PREC_SUFFIX);
13254       fputs_filtered (" in ", stream);
13255       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13256                      &type_print_raw_options);
13257       return;
13258
13259     case OP_DISCRETE_RANGE:
13260       print_subexp (exp, pos, stream, PREC_SUFFIX);
13261       fputs_filtered ("..", stream);
13262       print_subexp (exp, pos, stream, PREC_SUFFIX);
13263       return;
13264
13265     case OP_OTHERS:
13266       fputs_filtered ("others => ", stream);
13267       print_subexp (exp, pos, stream, PREC_SUFFIX);
13268       return;
13269
13270     case OP_CHOICES:
13271       for (i = 0; i < nargs-1; i += 1)
13272         {
13273           if (i > 0)
13274             fputs_filtered ("|", stream);
13275           print_subexp (exp, pos, stream, PREC_SUFFIX);
13276         }
13277       fputs_filtered (" => ", stream);
13278       print_subexp (exp, pos, stream, PREC_SUFFIX);
13279       return;
13280       
13281     case OP_POSITIONAL:
13282       print_subexp (exp, pos, stream, PREC_SUFFIX);
13283       return;
13284
13285     case OP_AGGREGATE:
13286       fputs_filtered ("(", stream);
13287       for (i = 0; i < nargs; i += 1)
13288         {
13289           if (i > 0)
13290             fputs_filtered (", ", stream);
13291           print_subexp (exp, pos, stream, PREC_SUFFIX);
13292         }
13293       fputs_filtered (")", stream);
13294       return;
13295     }
13296 }
13297
13298 /* Table mapping opcodes into strings for printing operators
13299    and precedences of the operators.  */
13300
13301 static const struct op_print ada_op_print_tab[] = {
13302   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13303   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13304   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13305   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13306   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13307   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13308   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13309   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13310   {"<=", BINOP_LEQ, PREC_ORDER, 0},
13311   {">=", BINOP_GEQ, PREC_ORDER, 0},
13312   {">", BINOP_GTR, PREC_ORDER, 0},
13313   {"<", BINOP_LESS, PREC_ORDER, 0},
13314   {">>", BINOP_RSH, PREC_SHIFT, 0},
13315   {"<<", BINOP_LSH, PREC_SHIFT, 0},
13316   {"+", BINOP_ADD, PREC_ADD, 0},
13317   {"-", BINOP_SUB, PREC_ADD, 0},
13318   {"&", BINOP_CONCAT, PREC_ADD, 0},
13319   {"*", BINOP_MUL, PREC_MUL, 0},
13320   {"/", BINOP_DIV, PREC_MUL, 0},
13321   {"rem", BINOP_REM, PREC_MUL, 0},
13322   {"mod", BINOP_MOD, PREC_MUL, 0},
13323   {"**", BINOP_EXP, PREC_REPEAT, 0},
13324   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13325   {"-", UNOP_NEG, PREC_PREFIX, 0},
13326   {"+", UNOP_PLUS, PREC_PREFIX, 0},
13327   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13328   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13329   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13330   {".all", UNOP_IND, PREC_SUFFIX, 1},
13331   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13332   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13333   {NULL, 0, 0, 0}
13334 };
13335 \f
13336 enum ada_primitive_types {
13337   ada_primitive_type_int,
13338   ada_primitive_type_long,
13339   ada_primitive_type_short,
13340   ada_primitive_type_char,
13341   ada_primitive_type_float,
13342   ada_primitive_type_double,
13343   ada_primitive_type_void,
13344   ada_primitive_type_long_long,
13345   ada_primitive_type_long_double,
13346   ada_primitive_type_natural,
13347   ada_primitive_type_positive,
13348   ada_primitive_type_system_address,
13349   nr_ada_primitive_types
13350 };
13351
13352 static void
13353 ada_language_arch_info (struct gdbarch *gdbarch,
13354                         struct language_arch_info *lai)
13355 {
13356   const struct builtin_type *builtin = builtin_type (gdbarch);
13357
13358   lai->primitive_type_vector
13359     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13360                               struct type *);
13361
13362   lai->primitive_type_vector [ada_primitive_type_int]
13363     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13364                          0, "integer");
13365   lai->primitive_type_vector [ada_primitive_type_long]
13366     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13367                          0, "long_integer");
13368   lai->primitive_type_vector [ada_primitive_type_short]
13369     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13370                          0, "short_integer");
13371   lai->string_char_type
13372     = lai->primitive_type_vector [ada_primitive_type_char]
13373     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13374   lai->primitive_type_vector [ada_primitive_type_float]
13375     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13376                        "float", NULL);
13377   lai->primitive_type_vector [ada_primitive_type_double]
13378     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13379                        "long_float", NULL);
13380   lai->primitive_type_vector [ada_primitive_type_long_long]
13381     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13382                          0, "long_long_integer");
13383   lai->primitive_type_vector [ada_primitive_type_long_double]
13384     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13385                        "long_long_float", NULL);
13386   lai->primitive_type_vector [ada_primitive_type_natural]
13387     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13388                          0, "natural");
13389   lai->primitive_type_vector [ada_primitive_type_positive]
13390     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13391                          0, "positive");
13392   lai->primitive_type_vector [ada_primitive_type_void]
13393     = builtin->builtin_void;
13394
13395   lai->primitive_type_vector [ada_primitive_type_system_address]
13396     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13397   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13398     = "system__address";
13399
13400   lai->bool_type_symbol = NULL;
13401   lai->bool_type_default = builtin->builtin_bool;
13402 }
13403 \f
13404                                 /* Language vector */
13405
13406 /* Not really used, but needed in the ada_language_defn.  */
13407
13408 static void
13409 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13410 {
13411   ada_emit_char (c, type, stream, quoter, 1);
13412 }
13413
13414 static int
13415 parse (struct parser_state *ps)
13416 {
13417   warnings_issued = 0;
13418   return ada_parse (ps);
13419 }
13420
13421 static const struct exp_descriptor ada_exp_descriptor = {
13422   ada_print_subexp,
13423   ada_operator_length,
13424   ada_operator_check,
13425   ada_op_name,
13426   ada_dump_subexp_body,
13427   ada_evaluate_subexp
13428 };
13429
13430 /* Implement the "la_get_symbol_name_cmp" language_defn method
13431    for Ada.  */
13432
13433 static symbol_name_cmp_ftype
13434 ada_get_symbol_name_cmp (const char *lookup_name)
13435 {
13436   if (should_use_wild_match (lookup_name))
13437     return wild_match;
13438   else
13439     return compare_names;
13440 }
13441
13442 /* Implement the "la_read_var_value" language_defn method for Ada.  */
13443
13444 static struct value *
13445 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13446 {
13447   const struct block *frame_block = NULL;
13448   struct symbol *renaming_sym = NULL;
13449
13450   /* The only case where default_read_var_value is not sufficient
13451      is when VAR is a renaming...  */
13452   if (frame)
13453     frame_block = get_frame_block (frame, NULL);
13454   if (frame_block)
13455     renaming_sym = ada_find_renaming_symbol (var, frame_block);
13456   if (renaming_sym != NULL)
13457     return ada_read_renaming_var_value (renaming_sym, frame_block);
13458
13459   /* This is a typical case where we expect the default_read_var_value
13460      function to work.  */
13461   return default_read_var_value (var, frame);
13462 }
13463
13464 const struct language_defn ada_language_defn = {
13465   "ada",                        /* Language name */
13466   "Ada",
13467   language_ada,
13468   range_check_off,
13469   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
13470                                    that's not quite what this means.  */
13471   array_row_major,
13472   macro_expansion_no,
13473   &ada_exp_descriptor,
13474   parse,
13475   ada_error,
13476   resolve,
13477   ada_printchar,                /* Print a character constant */
13478   ada_printstr,                 /* Function to print string constant */
13479   emit_char,                    /* Function to print single char (not used) */
13480   ada_print_type,               /* Print a type using appropriate syntax */
13481   ada_print_typedef,            /* Print a typedef using appropriate syntax */
13482   ada_val_print,                /* Print a value using appropriate syntax */
13483   ada_value_print,              /* Print a top-level value */
13484   ada_read_var_value,           /* la_read_var_value */
13485   NULL,                         /* Language specific skip_trampoline */
13486   NULL,                         /* name_of_this */
13487   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
13488   basic_lookup_transparent_type,        /* lookup_transparent_type */
13489   ada_la_decode,                /* Language specific symbol demangler */
13490   NULL,                         /* Language specific
13491                                    class_name_from_physname */
13492   ada_op_print_tab,             /* expression operators for printing */
13493   0,                            /* c-style arrays */
13494   1,                            /* String lower bound */
13495   ada_get_gdb_completer_word_break_characters,
13496   ada_make_symbol_completion_list,
13497   ada_language_arch_info,
13498   ada_print_array_index,
13499   default_pass_by_reference,
13500   c_get_string,
13501   ada_get_symbol_name_cmp,      /* la_get_symbol_name_cmp */
13502   ada_iterate_over_symbols,
13503   &ada_varobj_ops,
13504   LANG_MAGIC
13505 };
13506
13507 /* Provide a prototype to silence -Wmissing-prototypes.  */
13508 extern initialize_file_ftype _initialize_ada_language;
13509
13510 /* Command-list for the "set/show ada" prefix command.  */
13511 static struct cmd_list_element *set_ada_list;
13512 static struct cmd_list_element *show_ada_list;
13513
13514 /* Implement the "set ada" prefix command.  */
13515
13516 static void
13517 set_ada_command (char *arg, int from_tty)
13518 {
13519   printf_unfiltered (_(\
13520 "\"set ada\" must be followed by the name of a setting.\n"));
13521   help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
13522 }
13523
13524 /* Implement the "show ada" prefix command.  */
13525
13526 static void
13527 show_ada_command (char *args, int from_tty)
13528 {
13529   cmd_show_list (show_ada_list, from_tty, "");
13530 }
13531
13532 static void
13533 initialize_ada_catchpoint_ops (void)
13534 {
13535   struct breakpoint_ops *ops;
13536
13537   initialize_breakpoint_ops ();
13538
13539   ops = &catch_exception_breakpoint_ops;
13540   *ops = bkpt_breakpoint_ops;
13541   ops->dtor = dtor_catch_exception;
13542   ops->allocate_location = allocate_location_catch_exception;
13543   ops->re_set = re_set_catch_exception;
13544   ops->check_status = check_status_catch_exception;
13545   ops->print_it = print_it_catch_exception;
13546   ops->print_one = print_one_catch_exception;
13547   ops->print_mention = print_mention_catch_exception;
13548   ops->print_recreate = print_recreate_catch_exception;
13549
13550   ops = &catch_exception_unhandled_breakpoint_ops;
13551   *ops = bkpt_breakpoint_ops;
13552   ops->dtor = dtor_catch_exception_unhandled;
13553   ops->allocate_location = allocate_location_catch_exception_unhandled;
13554   ops->re_set = re_set_catch_exception_unhandled;
13555   ops->check_status = check_status_catch_exception_unhandled;
13556   ops->print_it = print_it_catch_exception_unhandled;
13557   ops->print_one = print_one_catch_exception_unhandled;
13558   ops->print_mention = print_mention_catch_exception_unhandled;
13559   ops->print_recreate = print_recreate_catch_exception_unhandled;
13560
13561   ops = &catch_assert_breakpoint_ops;
13562   *ops = bkpt_breakpoint_ops;
13563   ops->dtor = dtor_catch_assert;
13564   ops->allocate_location = allocate_location_catch_assert;
13565   ops->re_set = re_set_catch_assert;
13566   ops->check_status = check_status_catch_assert;
13567   ops->print_it = print_it_catch_assert;
13568   ops->print_one = print_one_catch_assert;
13569   ops->print_mention = print_mention_catch_assert;
13570   ops->print_recreate = print_recreate_catch_assert;
13571 }
13572
13573 /* This module's 'new_objfile' observer.  */
13574
13575 static void
13576 ada_new_objfile_observer (struct objfile *objfile)
13577 {
13578   ada_clear_symbol_cache ();
13579 }
13580
13581 /* This module's 'free_objfile' observer.  */
13582
13583 static void
13584 ada_free_objfile_observer (struct objfile *objfile)
13585 {
13586   ada_clear_symbol_cache ();
13587 }
13588
13589 void
13590 _initialize_ada_language (void)
13591 {
13592   add_language (&ada_language_defn);
13593
13594   initialize_ada_catchpoint_ops ();
13595
13596   add_prefix_cmd ("ada", no_class, set_ada_command,
13597                   _("Prefix command for changing Ada-specfic settings"),
13598                   &set_ada_list, "set ada ", 0, &setlist);
13599
13600   add_prefix_cmd ("ada", no_class, show_ada_command,
13601                   _("Generic command for showing Ada-specific settings."),
13602                   &show_ada_list, "show ada ", 0, &showlist);
13603
13604   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13605                            &trust_pad_over_xvs, _("\
13606 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13607 Show whether an optimization trusting PAD types over XVS types is activated"),
13608                            _("\
13609 This is related to the encoding used by the GNAT compiler.  The debugger\n\
13610 should normally trust the contents of PAD types, but certain older versions\n\
13611 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13612 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
13613 work around this bug.  It is always safe to turn this option \"off\", but\n\
13614 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13615 this option to \"off\" unless necessary."),
13616                             NULL, NULL, &set_ada_list, &show_ada_list);
13617
13618   add_catch_command ("exception", _("\
13619 Catch Ada exceptions, when raised.\n\
13620 With an argument, catch only exceptions with the given name."),
13621                      catch_ada_exception_command,
13622                      NULL,
13623                      CATCH_PERMANENT,
13624                      CATCH_TEMPORARY);
13625   add_catch_command ("assert", _("\
13626 Catch failed Ada assertions, when raised.\n\
13627 With an argument, catch only exceptions with the given name."),
13628                      catch_assert_command,
13629                      NULL,
13630                      CATCH_PERMANENT,
13631                      CATCH_TEMPORARY);
13632
13633   varsize_limit = 65536;
13634
13635   add_info ("exceptions", info_exceptions_command,
13636             _("\
13637 List all Ada exception names.\n\
13638 If a regular expression is passed as an argument, only those matching\n\
13639 the regular expression are listed."));
13640
13641   add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13642                   _("Set Ada maintenance-related variables."),
13643                   &maint_set_ada_cmdlist, "maintenance set ada ",
13644                   0/*allow-unknown*/, &maintenance_set_cmdlist);
13645
13646   add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13647                   _("Show Ada maintenance-related variables"),
13648                   &maint_show_ada_cmdlist, "maintenance show ada ",
13649                   0/*allow-unknown*/, &maintenance_show_cmdlist);
13650
13651   add_setshow_boolean_cmd
13652     ("ignore-descriptive-types", class_maintenance,
13653      &ada_ignore_descriptive_types_p,
13654      _("Set whether descriptive types generated by GNAT should be ignored."),
13655      _("Show whether descriptive types generated by GNAT should be ignored."),
13656      _("\
13657 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13658 DWARF attribute."),
13659      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13660
13661   obstack_init (&symbol_list_obstack);
13662
13663   decoded_names_store = htab_create_alloc
13664     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13665      NULL, xcalloc, xfree);
13666
13667   /* The ada-lang observers.  */
13668   observer_attach_new_objfile (ada_new_objfile_observer);
13669   observer_attach_free_objfile (ada_free_objfile_observer);
13670   observer_attach_inferior_exit (ada_inferior_exit);
13671
13672   /* Setup various context-specific data.  */
13673   ada_inferior_data
13674     = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13675   ada_pspace_data_handle
13676     = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
13677 }