add FALLTHROUGH comment in ada-lang.c:compare_names
[external/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.  Copyright (C)
2
3    1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2007, 2008,
4    2009 Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21
22 #include "defs.h"
23 #include <stdio.h>
24 #include "gdb_string.h"
25 #include <ctype.h>
26 #include <stdarg.h>
27 #include "demangle.h"
28 #include "gdb_regex.h"
29 #include "frame.h"
30 #include "symtab.h"
31 #include "gdbtypes.h"
32 #include "gdbcmd.h"
33 #include "expression.h"
34 #include "parser-defs.h"
35 #include "language.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 "gdb_stat.h"
47 #ifdef UI_OUT
48 #include "ui-out.h"
49 #endif
50 #include "block.h"
51 #include "infcall.h"
52 #include "dictionary.h"
53 #include "exceptions.h"
54 #include "annotate.h"
55 #include "valprint.h"
56 #include "source.h"
57 #include "observer.h"
58 #include "vec.h"
59 #include "stack.h"
60
61 #include "psymtab.h"
62 #include "value.h"
63
64 /* Define whether or not the C operator '/' truncates towards zero for
65    differently signed operands (truncation direction is undefined in C).
66    Copied from valarith.c.  */
67
68 #ifndef TRUNCATION_TOWARDS_ZERO
69 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
70 #endif
71
72 static struct type *desc_base_type (struct type *);
73
74 static struct type *desc_bounds_type (struct type *);
75
76 static struct value *desc_bounds (struct value *);
77
78 static int fat_pntr_bounds_bitpos (struct type *);
79
80 static int fat_pntr_bounds_bitsize (struct type *);
81
82 static struct type *desc_data_target_type (struct type *);
83
84 static struct value *desc_data (struct value *);
85
86 static int fat_pntr_data_bitpos (struct type *);
87
88 static int fat_pntr_data_bitsize (struct type *);
89
90 static struct value *desc_one_bound (struct value *, int, int);
91
92 static int desc_bound_bitpos (struct type *, int, int);
93
94 static int desc_bound_bitsize (struct type *, int, int);
95
96 static struct type *desc_index_type (struct type *, int);
97
98 static int desc_arity (struct type *);
99
100 static int ada_type_match (struct type *, struct type *, int);
101
102 static int ada_args_match (struct symbol *, struct value **, int);
103
104 static int full_match (const char *, const char *);
105
106 static struct value *make_array_descriptor (struct type *, struct value *);
107
108 static void ada_add_block_symbols (struct obstack *,
109                                    struct block *, const char *,
110                                    domain_enum, struct objfile *, int);
111
112 static int is_nonfunction (struct ada_symbol_info *, int);
113
114 static void add_defn_to_vec (struct obstack *, struct symbol *,
115                              struct block *);
116
117 static int num_defns_collected (struct obstack *);
118
119 static struct ada_symbol_info *defns_collected (struct obstack *, int);
120
121 static struct value *resolve_subexp (struct expression **, int *, int,
122                                      struct type *);
123
124 static void replace_operator_with_call (struct expression **, int, int, int,
125                                         struct symbol *, struct block *);
126
127 static int possible_user_operator_p (enum exp_opcode, struct value **);
128
129 static char *ada_op_name (enum exp_opcode);
130
131 static const char *ada_decoded_op_name (enum exp_opcode);
132
133 static int numeric_type_p (struct type *);
134
135 static int integer_type_p (struct type *);
136
137 static int scalar_type_p (struct type *);
138
139 static int discrete_type_p (struct type *);
140
141 static enum ada_renaming_category parse_old_style_renaming (struct type *,
142                                                             const char **,
143                                                             int *,
144                                                             const char **);
145
146 static struct symbol *find_old_style_renaming_symbol (const char *,
147                                                       struct block *);
148
149 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
150                                                 int, int, int *);
151
152 static struct value *evaluate_subexp_type (struct expression *, int *);
153
154 static struct type *ada_find_parallel_type_with_name (struct type *,
155                                                       const char *);
156
157 static int is_dynamic_field (struct type *, int);
158
159 static struct type *to_fixed_variant_branch_type (struct type *,
160                                                   const gdb_byte *,
161                                                   CORE_ADDR, struct value *);
162
163 static struct type *to_fixed_array_type (struct type *, struct value *, int);
164
165 static struct type *to_fixed_range_type (struct type *, struct value *);
166
167 static struct type *to_static_fixed_type (struct type *);
168 static struct type *static_unwrap_type (struct type *type);
169
170 static struct value *unwrap_value (struct value *);
171
172 static struct type *constrained_packed_array_type (struct type *, long *);
173
174 static struct type *decode_constrained_packed_array_type (struct type *);
175
176 static long decode_packed_array_bitsize (struct type *);
177
178 static struct value *decode_constrained_packed_array (struct value *);
179
180 static int ada_is_packed_array_type  (struct type *);
181
182 static int ada_is_unconstrained_packed_array_type (struct type *);
183
184 static struct value *value_subscript_packed (struct value *, int,
185                                              struct value **);
186
187 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
188
189 static struct value *coerce_unspec_val_to_type (struct value *,
190                                                 struct type *);
191
192 static struct value *get_var_value (char *, char *);
193
194 static int lesseq_defined_than (struct symbol *, struct symbol *);
195
196 static int equiv_types (struct type *, struct type *);
197
198 static int is_name_suffix (const char *);
199
200 static int advance_wild_match (const char **, const char *, int);
201
202 static int wild_match (const char *, const char *);
203
204 static struct value *ada_coerce_ref (struct value *);
205
206 static LONGEST pos_atr (struct value *);
207
208 static struct value *value_pos_atr (struct type *, struct value *);
209
210 static struct value *value_val_atr (struct type *, struct value *);
211
212 static struct symbol *standard_lookup (const char *, const struct block *,
213                                        domain_enum);
214
215 static struct value *ada_search_struct_field (char *, struct value *, int,
216                                               struct type *);
217
218 static struct value *ada_value_primitive_field (struct value *, int, int,
219                                                 struct type *);
220
221 static int find_struct_field (char *, struct type *, int,
222                               struct type **, int *, int *, int *, int *);
223
224 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
225                                                 struct value *);
226
227 static int ada_resolve_function (struct ada_symbol_info *, int,
228                                  struct value **, int, const char *,
229                                  struct type *);
230
231 static int ada_is_direct_array_type (struct type *);
232
233 static void ada_language_arch_info (struct gdbarch *,
234                                     struct language_arch_info *);
235
236 static void check_size (const struct type *);
237
238 static struct value *ada_index_struct_field (int, struct value *, int,
239                                              struct type *);
240
241 static struct value *assign_aggregate (struct value *, struct value *, 
242                                        struct expression *,
243                                        int *, enum noside);
244
245 static void aggregate_assign_from_choices (struct value *, struct value *, 
246                                            struct expression *,
247                                            int *, LONGEST *, int *,
248                                            int, LONGEST, LONGEST);
249
250 static void aggregate_assign_positional (struct value *, struct value *,
251                                          struct expression *,
252                                          int *, LONGEST *, int *, int,
253                                          LONGEST, LONGEST);
254
255
256 static void aggregate_assign_others (struct value *, struct value *,
257                                      struct expression *,
258                                      int *, LONGEST *, int, LONGEST, LONGEST);
259
260
261 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
262
263
264 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
265                                           int *, enum noside);
266
267 static void ada_forward_operator_length (struct expression *, int, int *,
268                                          int *);
269 \f
270
271
272 /* Maximum-sized dynamic type.  */
273 static unsigned int varsize_limit;
274
275 /* FIXME: brobecker/2003-09-17: No longer a const because it is
276    returned by a function that does not return a const char *.  */
277 static char *ada_completer_word_break_characters =
278 #ifdef VMS
279   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
280 #else
281   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
282 #endif
283
284 /* The name of the symbol to use to get the name of the main subprogram.  */
285 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
286   = "__gnat_ada_main_program_name";
287
288 /* Limit on the number of warnings to raise per expression evaluation.  */
289 static int warning_limit = 2;
290
291 /* Number of warning messages issued; reset to 0 by cleanups after
292    expression evaluation.  */
293 static int warnings_issued = 0;
294
295 static const char *known_runtime_file_name_patterns[] = {
296   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
297 };
298
299 static const char *known_auxiliary_function_name_patterns[] = {
300   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
301 };
302
303 /* Space for allocating results of ada_lookup_symbol_list.  */
304 static struct obstack symbol_list_obstack;
305
306                         /* Inferior-specific data.  */
307
308 /* Per-inferior data for this module.  */
309
310 struct ada_inferior_data
311 {
312   /* The ada__tags__type_specific_data type, which is used when decoding
313      tagged types.  With older versions of GNAT, this type was directly
314      accessible through a component ("tsd") in the object tag.  But this
315      is no longer the case, so we cache it for each inferior.  */
316   struct type *tsd_type;
317 };
318
319 /* Our key to this module's inferior data.  */
320 static const struct inferior_data *ada_inferior_data;
321
322 /* A cleanup routine for our inferior data.  */
323 static void
324 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
325 {
326   struct ada_inferior_data *data;
327
328   data = inferior_data (inf, ada_inferior_data);
329   if (data != NULL)
330     xfree (data);
331 }
332
333 /* Return our inferior data for the given inferior (INF).
334
335    This function always returns a valid pointer to an allocated
336    ada_inferior_data structure.  If INF's inferior data has not
337    been previously set, this functions creates a new one with all
338    fields set to zero, sets INF's inferior to it, and then returns
339    a pointer to that newly allocated ada_inferior_data.  */
340
341 static struct ada_inferior_data *
342 get_ada_inferior_data (struct inferior *inf)
343 {
344   struct ada_inferior_data *data;
345
346   data = inferior_data (inf, ada_inferior_data);
347   if (data == NULL)
348     {
349       data = XZALLOC (struct ada_inferior_data);
350       set_inferior_data (inf, ada_inferior_data, data);
351     }
352
353   return data;
354 }
355
356 /* Perform all necessary cleanups regarding our module's inferior data
357    that is required after the inferior INF just exited.  */
358
359 static void
360 ada_inferior_exit (struct inferior *inf)
361 {
362   ada_inferior_data_cleanup (inf, NULL);
363   set_inferior_data (inf, ada_inferior_data, NULL);
364 }
365
366                         /* Utilities */
367
368 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
369    all typedef layers have been peeled.  Otherwise, return TYPE.
370
371    Normally, we really expect a typedef type to only have 1 typedef layer.
372    In other words, we really expect the target type of a typedef type to be
373    a non-typedef type.  This is particularly true for Ada units, because
374    the language does not have a typedef vs not-typedef distinction.
375    In that respect, the Ada compiler has been trying to eliminate as many
376    typedef definitions in the debugging information, since they generally
377    do not bring any extra information (we still use typedef under certain
378    circumstances related mostly to the GNAT encoding).
379
380    Unfortunately, we have seen situations where the debugging information
381    generated by the compiler leads to such multiple typedef layers.  For
382    instance, consider the following example with stabs:
383
384      .stabs  "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
385      .stabs  "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
386
387    This is an error in the debugging information which causes type
388    pck__float_array___XUP to be defined twice, and the second time,
389    it is defined as a typedef of a typedef.
390
391    This is on the fringe of legality as far as debugging information is
392    concerned, and certainly unexpected.  But it is easy to handle these
393    situations correctly, so we can afford to be lenient in this case.  */
394
395 static struct type *
396 ada_typedef_target_type (struct type *type)
397 {
398   while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
399     type = TYPE_TARGET_TYPE (type);
400   return type;
401 }
402
403 /* Given DECODED_NAME a string holding a symbol name in its
404    decoded form (ie using the Ada dotted notation), returns
405    its unqualified name.  */
406
407 static const char *
408 ada_unqualified_name (const char *decoded_name)
409 {
410   const char *result = strrchr (decoded_name, '.');
411
412   if (result != NULL)
413     result++;                   /* Skip the dot...  */
414   else
415     result = decoded_name;
416
417   return result;
418 }
419
420 /* Return a string starting with '<', followed by STR, and '>'.
421    The result is good until the next call.  */
422
423 static char *
424 add_angle_brackets (const char *str)
425 {
426   static char *result = NULL;
427
428   xfree (result);
429   result = xstrprintf ("<%s>", str);
430   return result;
431 }
432
433 static char *
434 ada_get_gdb_completer_word_break_characters (void)
435 {
436   return ada_completer_word_break_characters;
437 }
438
439 /* Print an array element index using the Ada syntax.  */
440
441 static void
442 ada_print_array_index (struct value *index_value, struct ui_file *stream,
443                        const struct value_print_options *options)
444 {
445   LA_VALUE_PRINT (index_value, stream, options);
446   fprintf_filtered (stream, " => ");
447 }
448
449 /* Assuming VECT points to an array of *SIZE objects of size
450    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
451    updating *SIZE as necessary and returning the (new) array.  */
452
453 void *
454 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
455 {
456   if (*size < min_size)
457     {
458       *size *= 2;
459       if (*size < min_size)
460         *size = min_size;
461       vect = xrealloc (vect, *size * element_size);
462     }
463   return vect;
464 }
465
466 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
467    suffix of FIELD_NAME beginning "___".  */
468
469 static int
470 field_name_match (const char *field_name, const char *target)
471 {
472   int len = strlen (target);
473
474   return
475     (strncmp (field_name, target, len) == 0
476      && (field_name[len] == '\0'
477          || (strncmp (field_name + len, "___", 3) == 0
478              && strcmp (field_name + strlen (field_name) - 6,
479                         "___XVN") != 0)));
480 }
481
482
483 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
484    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
485    and return its index.  This function also handles fields whose name
486    have ___ suffixes because the compiler sometimes alters their name
487    by adding such a suffix to represent fields with certain constraints.
488    If the field could not be found, return a negative number if
489    MAYBE_MISSING is set.  Otherwise raise an error.  */
490
491 int
492 ada_get_field_index (const struct type *type, const char *field_name,
493                      int maybe_missing)
494 {
495   int fieldno;
496   struct type *struct_type = check_typedef ((struct type *) type);
497
498   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
499     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
500       return fieldno;
501
502   if (!maybe_missing)
503     error (_("Unable to find field %s in struct %s.  Aborting"),
504            field_name, TYPE_NAME (struct_type));
505
506   return -1;
507 }
508
509 /* The length of the prefix of NAME prior to any "___" suffix.  */
510
511 int
512 ada_name_prefix_len (const char *name)
513 {
514   if (name == NULL)
515     return 0;
516   else
517     {
518       const char *p = strstr (name, "___");
519
520       if (p == NULL)
521         return strlen (name);
522       else
523         return p - name;
524     }
525 }
526
527 /* Return non-zero if SUFFIX is a suffix of STR.
528    Return zero if STR is null.  */
529
530 static int
531 is_suffix (const char *str, const char *suffix)
532 {
533   int len1, len2;
534
535   if (str == NULL)
536     return 0;
537   len1 = strlen (str);
538   len2 = strlen (suffix);
539   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
540 }
541
542 /* The contents of value VAL, treated as a value of type TYPE.  The
543    result is an lval in memory if VAL is.  */
544
545 static struct value *
546 coerce_unspec_val_to_type (struct value *val, struct type *type)
547 {
548   type = ada_check_typedef (type);
549   if (value_type (val) == type)
550     return val;
551   else
552     {
553       struct value *result;
554
555       /* Make sure that the object size is not unreasonable before
556          trying to allocate some memory for it.  */
557       check_size (type);
558
559       if (value_lazy (val)
560           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
561         result = allocate_value_lazy (type);
562       else
563         {
564           result = allocate_value (type);
565           memcpy (value_contents_raw (result), value_contents (val),
566                   TYPE_LENGTH (type));
567         }
568       set_value_component_location (result, val);
569       set_value_bitsize (result, value_bitsize (val));
570       set_value_bitpos (result, value_bitpos (val));
571       set_value_address (result, value_address (val));
572       return result;
573     }
574 }
575
576 static const gdb_byte *
577 cond_offset_host (const gdb_byte *valaddr, long offset)
578 {
579   if (valaddr == NULL)
580     return NULL;
581   else
582     return valaddr + offset;
583 }
584
585 static CORE_ADDR
586 cond_offset_target (CORE_ADDR address, long offset)
587 {
588   if (address == 0)
589     return 0;
590   else
591     return address + offset;
592 }
593
594 /* Issue a warning (as for the definition of warning in utils.c, but
595    with exactly one argument rather than ...), unless the limit on the
596    number of warnings has passed during the evaluation of the current
597    expression.  */
598
599 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
600    provided by "complaint".  */
601 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
602
603 static void
604 lim_warning (const char *format, ...)
605 {
606   va_list args;
607
608   va_start (args, format);
609   warnings_issued += 1;
610   if (warnings_issued <= warning_limit)
611     vwarning (format, args);
612
613   va_end (args);
614 }
615
616 /* Issue an error if the size of an object of type T is unreasonable,
617    i.e. if it would be a bad idea to allocate a value of this type in
618    GDB.  */
619
620 static void
621 check_size (const struct type *type)
622 {
623   if (TYPE_LENGTH (type) > varsize_limit)
624     error (_("object size is larger than varsize-limit"));
625 }
626
627 /* Maximum value of a SIZE-byte signed integer type.  */
628 static LONGEST
629 max_of_size (int size)
630 {
631   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
632
633   return top_bit | (top_bit - 1);
634 }
635
636 /* Minimum value of a SIZE-byte signed integer type.  */
637 static LONGEST
638 min_of_size (int size)
639 {
640   return -max_of_size (size) - 1;
641 }
642
643 /* Maximum value of a SIZE-byte unsigned integer type.  */
644 static ULONGEST
645 umax_of_size (int size)
646 {
647   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
648
649   return top_bit | (top_bit - 1);
650 }
651
652 /* Maximum value of integral type T, as a signed quantity.  */
653 static LONGEST
654 max_of_type (struct type *t)
655 {
656   if (TYPE_UNSIGNED (t))
657     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
658   else
659     return max_of_size (TYPE_LENGTH (t));
660 }
661
662 /* Minimum value of integral type T, as a signed quantity.  */
663 static LONGEST
664 min_of_type (struct type *t)
665 {
666   if (TYPE_UNSIGNED (t)) 
667     return 0;
668   else
669     return min_of_size (TYPE_LENGTH (t));
670 }
671
672 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
673 LONGEST
674 ada_discrete_type_high_bound (struct type *type)
675 {
676   switch (TYPE_CODE (type))
677     {
678     case TYPE_CODE_RANGE:
679       return TYPE_HIGH_BOUND (type);
680     case TYPE_CODE_ENUM:
681       return TYPE_FIELD_BITPOS (type, TYPE_NFIELDS (type) - 1);
682     case TYPE_CODE_BOOL:
683       return 1;
684     case TYPE_CODE_CHAR:
685     case TYPE_CODE_INT:
686       return max_of_type (type);
687     default:
688       error (_("Unexpected type in ada_discrete_type_high_bound."));
689     }
690 }
691
692 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
693 LONGEST
694 ada_discrete_type_low_bound (struct type *type)
695 {
696   switch (TYPE_CODE (type))
697     {
698     case TYPE_CODE_RANGE:
699       return TYPE_LOW_BOUND (type);
700     case TYPE_CODE_ENUM:
701       return TYPE_FIELD_BITPOS (type, 0);
702     case TYPE_CODE_BOOL:
703       return 0;
704     case TYPE_CODE_CHAR:
705     case TYPE_CODE_INT:
706       return min_of_type (type);
707     default:
708       error (_("Unexpected type in ada_discrete_type_low_bound."));
709     }
710 }
711
712 /* The identity on non-range types.  For range types, the underlying
713    non-range scalar type.  */
714
715 static struct type *
716 base_type (struct type *type)
717 {
718   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
719     {
720       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
721         return type;
722       type = TYPE_TARGET_TYPE (type);
723     }
724   return type;
725 }
726 \f
727
728                                 /* Language Selection */
729
730 /* If the main program is in Ada, return language_ada, otherwise return LANG
731    (the main program is in Ada iif the adainit symbol is found).  */
732
733 enum language
734 ada_update_initial_language (enum language lang)
735 {
736   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
737                              (struct objfile *) NULL) != NULL)
738     return language_ada;
739
740   return lang;
741 }
742
743 /* If the main procedure is written in Ada, then return its name.
744    The result is good until the next call.  Return NULL if the main
745    procedure doesn't appear to be in Ada.  */
746
747 char *
748 ada_main_name (void)
749 {
750   struct minimal_symbol *msym;
751   static char *main_program_name = NULL;
752
753   /* For Ada, the name of the main procedure is stored in a specific
754      string constant, generated by the binder.  Look for that symbol,
755      extract its address, and then read that string.  If we didn't find
756      that string, then most probably the main procedure is not written
757      in Ada.  */
758   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
759
760   if (msym != NULL)
761     {
762       CORE_ADDR main_program_name_addr;
763       int err_code;
764
765       main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
766       if (main_program_name_addr == 0)
767         error (_("Invalid address for Ada main program name."));
768
769       xfree (main_program_name);
770       target_read_string (main_program_name_addr, &main_program_name,
771                           1024, &err_code);
772
773       if (err_code != 0)
774         return NULL;
775       return main_program_name;
776     }
777
778   /* The main procedure doesn't seem to be in Ada.  */
779   return NULL;
780 }
781 \f
782                                 /* Symbols */
783
784 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
785    of NULLs.  */
786
787 const struct ada_opname_map ada_opname_table[] = {
788   {"Oadd", "\"+\"", BINOP_ADD},
789   {"Osubtract", "\"-\"", BINOP_SUB},
790   {"Omultiply", "\"*\"", BINOP_MUL},
791   {"Odivide", "\"/\"", BINOP_DIV},
792   {"Omod", "\"mod\"", BINOP_MOD},
793   {"Orem", "\"rem\"", BINOP_REM},
794   {"Oexpon", "\"**\"", BINOP_EXP},
795   {"Olt", "\"<\"", BINOP_LESS},
796   {"Ole", "\"<=\"", BINOP_LEQ},
797   {"Ogt", "\">\"", BINOP_GTR},
798   {"Oge", "\">=\"", BINOP_GEQ},
799   {"Oeq", "\"=\"", BINOP_EQUAL},
800   {"One", "\"/=\"", BINOP_NOTEQUAL},
801   {"Oand", "\"and\"", BINOP_BITWISE_AND},
802   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
803   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
804   {"Oconcat", "\"&\"", BINOP_CONCAT},
805   {"Oabs", "\"abs\"", UNOP_ABS},
806   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
807   {"Oadd", "\"+\"", UNOP_PLUS},
808   {"Osubtract", "\"-\"", UNOP_NEG},
809   {NULL, NULL}
810 };
811
812 /* The "encoded" form of DECODED, according to GNAT conventions.
813    The result is valid until the next call to ada_encode.  */
814
815 char *
816 ada_encode (const char *decoded)
817 {
818   static char *encoding_buffer = NULL;
819   static size_t encoding_buffer_size = 0;
820   const char *p;
821   int k;
822
823   if (decoded == NULL)
824     return NULL;
825
826   GROW_VECT (encoding_buffer, encoding_buffer_size,
827              2 * strlen (decoded) + 10);
828
829   k = 0;
830   for (p = decoded; *p != '\0'; p += 1)
831     {
832       if (*p == '.')
833         {
834           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
835           k += 2;
836         }
837       else if (*p == '"')
838         {
839           const struct ada_opname_map *mapping;
840
841           for (mapping = ada_opname_table;
842                mapping->encoded != NULL
843                && strncmp (mapping->decoded, p,
844                            strlen (mapping->decoded)) != 0; mapping += 1)
845             ;
846           if (mapping->encoded == NULL)
847             error (_("invalid Ada operator name: %s"), p);
848           strcpy (encoding_buffer + k, mapping->encoded);
849           k += strlen (mapping->encoded);
850           break;
851         }
852       else
853         {
854           encoding_buffer[k] = *p;
855           k += 1;
856         }
857     }
858
859   encoding_buffer[k] = '\0';
860   return encoding_buffer;
861 }
862
863 /* Return NAME folded to lower case, or, if surrounded by single
864    quotes, unfolded, but with the quotes stripped away.  Result good
865    to next call.  */
866
867 char *
868 ada_fold_name (const char *name)
869 {
870   static char *fold_buffer = NULL;
871   static size_t fold_buffer_size = 0;
872
873   int len = strlen (name);
874   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
875
876   if (name[0] == '\'')
877     {
878       strncpy (fold_buffer, name + 1, len - 2);
879       fold_buffer[len - 2] = '\000';
880     }
881   else
882     {
883       int i;
884
885       for (i = 0; i <= len; i += 1)
886         fold_buffer[i] = tolower (name[i]);
887     }
888
889   return fold_buffer;
890 }
891
892 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
893
894 static int
895 is_lower_alphanum (const char c)
896 {
897   return (isdigit (c) || (isalpha (c) && islower (c)));
898 }
899
900 /* Remove either of these suffixes:
901      . .{DIGIT}+
902      . ${DIGIT}+
903      . ___{DIGIT}+
904      . __{DIGIT}+.
905    These are suffixes introduced by the compiler for entities such as
906    nested subprogram for instance, in order to avoid name clashes.
907    They do not serve any purpose for the debugger.  */
908
909 static void
910 ada_remove_trailing_digits (const char *encoded, int *len)
911 {
912   if (*len > 1 && isdigit (encoded[*len - 1]))
913     {
914       int i = *len - 2;
915
916       while (i > 0 && isdigit (encoded[i]))
917         i--;
918       if (i >= 0 && encoded[i] == '.')
919         *len = i;
920       else if (i >= 0 && encoded[i] == '$')
921         *len = i;
922       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
923         *len = i - 2;
924       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
925         *len = i - 1;
926     }
927 }
928
929 /* Remove the suffix introduced by the compiler for protected object
930    subprograms.  */
931
932 static void
933 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
934 {
935   /* Remove trailing N.  */
936
937   /* Protected entry subprograms are broken into two
938      separate subprograms: The first one is unprotected, and has
939      a 'N' suffix; the second is the protected version, and has
940      the 'P' suffix.  The second calls the first one after handling
941      the protection.  Since the P subprograms are internally generated,
942      we leave these names undecoded, giving the user a clue that this
943      entity is internal.  */
944
945   if (*len > 1
946       && encoded[*len - 1] == 'N'
947       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
948     *len = *len - 1;
949 }
950
951 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
952
953 static void
954 ada_remove_Xbn_suffix (const char *encoded, int *len)
955 {
956   int i = *len - 1;
957
958   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
959     i--;
960
961   if (encoded[i] != 'X')
962     return;
963
964   if (i == 0)
965     return;
966
967   if (isalnum (encoded[i-1]))
968     *len = i;
969 }
970
971 /* If ENCODED follows the GNAT entity encoding conventions, then return
972    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
973    replaced by ENCODED.
974
975    The resulting string is valid until the next call of ada_decode.
976    If the string is unchanged by decoding, the original string pointer
977    is returned.  */
978
979 const char *
980 ada_decode (const char *encoded)
981 {
982   int i, j;
983   int len0;
984   const char *p;
985   char *decoded;
986   int at_start_name;
987   static char *decoding_buffer = NULL;
988   static size_t decoding_buffer_size = 0;
989
990   /* The name of the Ada main procedure starts with "_ada_".
991      This prefix is not part of the decoded name, so skip this part
992      if we see this prefix.  */
993   if (strncmp (encoded, "_ada_", 5) == 0)
994     encoded += 5;
995
996   /* If the name starts with '_', then it is not a properly encoded
997      name, so do not attempt to decode it.  Similarly, if the name
998      starts with '<', the name should not be decoded.  */
999   if (encoded[0] == '_' || encoded[0] == '<')
1000     goto Suppress;
1001
1002   len0 = strlen (encoded);
1003
1004   ada_remove_trailing_digits (encoded, &len0);
1005   ada_remove_po_subprogram_suffix (encoded, &len0);
1006
1007   /* Remove the ___X.* suffix if present.  Do not forget to verify that
1008      the suffix is located before the current "end" of ENCODED.  We want
1009      to avoid re-matching parts of ENCODED that have previously been
1010      marked as discarded (by decrementing LEN0).  */
1011   p = strstr (encoded, "___");
1012   if (p != NULL && p - encoded < len0 - 3)
1013     {
1014       if (p[3] == 'X')
1015         len0 = p - encoded;
1016       else
1017         goto Suppress;
1018     }
1019
1020   /* Remove any trailing TKB suffix.  It tells us that this symbol
1021      is for the body of a task, but that information does not actually
1022      appear in the decoded name.  */
1023
1024   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
1025     len0 -= 3;
1026
1027   /* Remove any trailing TB suffix.  The TB suffix is slightly different
1028      from the TKB suffix because it is used for non-anonymous task
1029      bodies.  */
1030
1031   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1032     len0 -= 2;
1033
1034   /* Remove trailing "B" suffixes.  */
1035   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
1036
1037   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
1038     len0 -= 1;
1039
1040   /* Make decoded big enough for possible expansion by operator name.  */
1041
1042   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1043   decoded = decoding_buffer;
1044
1045   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
1046
1047   if (len0 > 1 && isdigit (encoded[len0 - 1]))
1048     {
1049       i = len0 - 2;
1050       while ((i >= 0 && isdigit (encoded[i]))
1051              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1052         i -= 1;
1053       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1054         len0 = i - 1;
1055       else if (encoded[i] == '$')
1056         len0 = i;
1057     }
1058
1059   /* The first few characters that are not alphabetic are not part
1060      of any encoding we use, so we can copy them over verbatim.  */
1061
1062   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1063     decoded[j] = encoded[i];
1064
1065   at_start_name = 1;
1066   while (i < len0)
1067     {
1068       /* Is this a symbol function?  */
1069       if (at_start_name && encoded[i] == 'O')
1070         {
1071           int k;
1072
1073           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1074             {
1075               int op_len = strlen (ada_opname_table[k].encoded);
1076               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1077                             op_len - 1) == 0)
1078                   && !isalnum (encoded[i + op_len]))
1079                 {
1080                   strcpy (decoded + j, ada_opname_table[k].decoded);
1081                   at_start_name = 0;
1082                   i += op_len;
1083                   j += strlen (ada_opname_table[k].decoded);
1084                   break;
1085                 }
1086             }
1087           if (ada_opname_table[k].encoded != NULL)
1088             continue;
1089         }
1090       at_start_name = 0;
1091
1092       /* Replace "TK__" with "__", which will eventually be translated
1093          into "." (just below).  */
1094
1095       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1096         i += 2;
1097
1098       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1099          be translated into "." (just below).  These are internal names
1100          generated for anonymous blocks inside which our symbol is nested.  */
1101
1102       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1103           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1104           && isdigit (encoded [i+4]))
1105         {
1106           int k = i + 5;
1107           
1108           while (k < len0 && isdigit (encoded[k]))
1109             k++;  /* Skip any extra digit.  */
1110
1111           /* Double-check that the "__B_{DIGITS}+" sequence we found
1112              is indeed followed by "__".  */
1113           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1114             i = k;
1115         }
1116
1117       /* Remove _E{DIGITS}+[sb] */
1118
1119       /* Just as for protected object subprograms, there are 2 categories
1120          of subprograms created by the compiler for each entry.  The first
1121          one implements the actual entry code, and has a suffix following
1122          the convention above; the second one implements the barrier and
1123          uses the same convention as above, except that the 'E' is replaced
1124          by a 'B'.
1125
1126          Just as above, we do not decode the name of barrier functions
1127          to give the user a clue that the code he is debugging has been
1128          internally generated.  */
1129
1130       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1131           && isdigit (encoded[i+2]))
1132         {
1133           int k = i + 3;
1134
1135           while (k < len0 && isdigit (encoded[k]))
1136             k++;
1137
1138           if (k < len0
1139               && (encoded[k] == 'b' || encoded[k] == 's'))
1140             {
1141               k++;
1142               /* Just as an extra precaution, make sure that if this
1143                  suffix is followed by anything else, it is a '_'.
1144                  Otherwise, we matched this sequence by accident.  */
1145               if (k == len0
1146                   || (k < len0 && encoded[k] == '_'))
1147                 i = k;
1148             }
1149         }
1150
1151       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1152          the GNAT front-end in protected object subprograms.  */
1153
1154       if (i < len0 + 3
1155           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1156         {
1157           /* Backtrack a bit up until we reach either the begining of
1158              the encoded name, or "__".  Make sure that we only find
1159              digits or lowercase characters.  */
1160           const char *ptr = encoded + i - 1;
1161
1162           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1163             ptr--;
1164           if (ptr < encoded
1165               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1166             i++;
1167         }
1168
1169       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1170         {
1171           /* This is a X[bn]* sequence not separated from the previous
1172              part of the name with a non-alpha-numeric character (in other
1173              words, immediately following an alpha-numeric character), then
1174              verify that it is placed at the end of the encoded name.  If
1175              not, then the encoding is not valid and we should abort the
1176              decoding.  Otherwise, just skip it, it is used in body-nested
1177              package names.  */
1178           do
1179             i += 1;
1180           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1181           if (i < len0)
1182             goto Suppress;
1183         }
1184       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1185         {
1186          /* Replace '__' by '.'.  */
1187           decoded[j] = '.';
1188           at_start_name = 1;
1189           i += 2;
1190           j += 1;
1191         }
1192       else
1193         {
1194           /* It's a character part of the decoded name, so just copy it
1195              over.  */
1196           decoded[j] = encoded[i];
1197           i += 1;
1198           j += 1;
1199         }
1200     }
1201   decoded[j] = '\000';
1202
1203   /* Decoded names should never contain any uppercase character.
1204      Double-check this, and abort the decoding if we find one.  */
1205
1206   for (i = 0; decoded[i] != '\0'; i += 1)
1207     if (isupper (decoded[i]) || decoded[i] == ' ')
1208       goto Suppress;
1209
1210   if (strcmp (decoded, encoded) == 0)
1211     return encoded;
1212   else
1213     return decoded;
1214
1215 Suppress:
1216   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1217   decoded = decoding_buffer;
1218   if (encoded[0] == '<')
1219     strcpy (decoded, encoded);
1220   else
1221     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1222   return decoded;
1223
1224 }
1225
1226 /* Table for keeping permanent unique copies of decoded names.  Once
1227    allocated, names in this table are never released.  While this is a
1228    storage leak, it should not be significant unless there are massive
1229    changes in the set of decoded names in successive versions of a 
1230    symbol table loaded during a single session.  */
1231 static struct htab *decoded_names_store;
1232
1233 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1234    in the language-specific part of GSYMBOL, if it has not been
1235    previously computed.  Tries to save the decoded name in the same
1236    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1237    in any case, the decoded symbol has a lifetime at least that of
1238    GSYMBOL).
1239    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1240    const, but nevertheless modified to a semantically equivalent form
1241    when a decoded name is cached in it.  */
1242
1243 char *
1244 ada_decode_symbol (const struct general_symbol_info *gsymbol)
1245 {
1246   char **resultp =
1247     (char **) &gsymbol->language_specific.mangled_lang.demangled_name;
1248
1249   if (*resultp == NULL)
1250     {
1251       const char *decoded = ada_decode (gsymbol->name);
1252
1253       if (gsymbol->obj_section != NULL)
1254         {
1255           struct objfile *objf = gsymbol->obj_section->objfile;
1256
1257           *resultp = obsavestring (decoded, strlen (decoded),
1258                                    &objf->objfile_obstack);
1259         }
1260       /* Sometimes, we can't find a corresponding objfile, in which
1261          case, we put the result on the heap.  Since we only decode
1262          when needed, we hope this usually does not cause a
1263          significant memory leak (FIXME).  */
1264       if (*resultp == NULL)
1265         {
1266           char **slot = (char **) htab_find_slot (decoded_names_store,
1267                                                   decoded, INSERT);
1268
1269           if (*slot == NULL)
1270             *slot = xstrdup (decoded);
1271           *resultp = *slot;
1272         }
1273     }
1274
1275   return *resultp;
1276 }
1277
1278 static char *
1279 ada_la_decode (const char *encoded, int options)
1280 {
1281   return xstrdup (ada_decode (encoded));
1282 }
1283
1284 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1285    suffixes that encode debugging information or leading _ada_ on
1286    SYM_NAME (see is_name_suffix commentary for the debugging
1287    information that is ignored).  If WILD, then NAME need only match a
1288    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1289    either argument is NULL.  */
1290
1291 static int
1292 match_name (const char *sym_name, const char *name, int wild)
1293 {
1294   if (sym_name == NULL || name == NULL)
1295     return 0;
1296   else if (wild)
1297     return wild_match (sym_name, name) == 0;
1298   else
1299     {
1300       int len_name = strlen (name);
1301
1302       return (strncmp (sym_name, name, len_name) == 0
1303               && is_name_suffix (sym_name + len_name))
1304         || (strncmp (sym_name, "_ada_", 5) == 0
1305             && strncmp (sym_name + 5, name, len_name) == 0
1306             && is_name_suffix (sym_name + len_name + 5));
1307     }
1308 }
1309 \f
1310
1311                                 /* Arrays */
1312
1313 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1314    generated by the GNAT compiler to describe the index type used
1315    for each dimension of an array, check whether it follows the latest
1316    known encoding.  If not, fix it up to conform to the latest encoding.
1317    Otherwise, do nothing.  This function also does nothing if
1318    INDEX_DESC_TYPE is NULL.
1319
1320    The GNAT encoding used to describle the array index type evolved a bit.
1321    Initially, the information would be provided through the name of each
1322    field of the structure type only, while the type of these fields was
1323    described as unspecified and irrelevant.  The debugger was then expected
1324    to perform a global type lookup using the name of that field in order
1325    to get access to the full index type description.  Because these global
1326    lookups can be very expensive, the encoding was later enhanced to make
1327    the global lookup unnecessary by defining the field type as being
1328    the full index type description.
1329
1330    The purpose of this routine is to allow us to support older versions
1331    of the compiler by detecting the use of the older encoding, and by
1332    fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1333    we essentially replace each field's meaningless type by the associated
1334    index subtype).  */
1335
1336 void
1337 ada_fixup_array_indexes_type (struct type *index_desc_type)
1338 {
1339   int i;
1340
1341   if (index_desc_type == NULL)
1342     return;
1343   gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1344
1345   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1346      to check one field only, no need to check them all).  If not, return
1347      now.
1348
1349      If our INDEX_DESC_TYPE was generated using the older encoding,
1350      the field type should be a meaningless integer type whose name
1351      is not equal to the field name.  */
1352   if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1353       && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1354                  TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1355     return;
1356
1357   /* Fixup each field of INDEX_DESC_TYPE.  */
1358   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1359    {
1360      char *name = TYPE_FIELD_NAME (index_desc_type, i);
1361      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1362
1363      if (raw_type)
1364        TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1365    }
1366 }
1367
1368 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1369
1370 static char *bound_name[] = {
1371   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1372   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1373 };
1374
1375 /* Maximum number of array dimensions we are prepared to handle.  */
1376
1377 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1378
1379
1380 /* The desc_* routines return primitive portions of array descriptors
1381    (fat pointers).  */
1382
1383 /* The descriptor or array type, if any, indicated by TYPE; removes
1384    level of indirection, if needed.  */
1385
1386 static struct type *
1387 desc_base_type (struct type *type)
1388 {
1389   if (type == NULL)
1390     return NULL;
1391   type = ada_check_typedef (type);
1392   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1393     type = ada_typedef_target_type (type);
1394
1395   if (type != NULL
1396       && (TYPE_CODE (type) == TYPE_CODE_PTR
1397           || TYPE_CODE (type) == TYPE_CODE_REF))
1398     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1399   else
1400     return type;
1401 }
1402
1403 /* True iff TYPE indicates a "thin" array pointer type.  */
1404
1405 static int
1406 is_thin_pntr (struct type *type)
1407 {
1408   return
1409     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1410     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1411 }
1412
1413 /* The descriptor type for thin pointer type TYPE.  */
1414
1415 static struct type *
1416 thin_descriptor_type (struct type *type)
1417 {
1418   struct type *base_type = desc_base_type (type);
1419
1420   if (base_type == NULL)
1421     return NULL;
1422   if (is_suffix (ada_type_name (base_type), "___XVE"))
1423     return base_type;
1424   else
1425     {
1426       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1427
1428       if (alt_type == NULL)
1429         return base_type;
1430       else
1431         return alt_type;
1432     }
1433 }
1434
1435 /* A pointer to the array data for thin-pointer value VAL.  */
1436
1437 static struct value *
1438 thin_data_pntr (struct value *val)
1439 {
1440   struct type *type = value_type (val);
1441   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1442
1443   data_type = lookup_pointer_type (data_type);
1444
1445   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1446     return value_cast (data_type, value_copy (val));
1447   else
1448     return value_from_longest (data_type, value_address (val));
1449 }
1450
1451 /* True iff TYPE indicates a "thick" array pointer type.  */
1452
1453 static int
1454 is_thick_pntr (struct type *type)
1455 {
1456   type = desc_base_type (type);
1457   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1458           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1459 }
1460
1461 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1462    pointer to one, the type of its bounds data; otherwise, NULL.  */
1463
1464 static struct type *
1465 desc_bounds_type (struct type *type)
1466 {
1467   struct type *r;
1468
1469   type = desc_base_type (type);
1470
1471   if (type == NULL)
1472     return NULL;
1473   else if (is_thin_pntr (type))
1474     {
1475       type = thin_descriptor_type (type);
1476       if (type == NULL)
1477         return NULL;
1478       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1479       if (r != NULL)
1480         return ada_check_typedef (r);
1481     }
1482   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1483     {
1484       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1485       if (r != NULL)
1486         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1487     }
1488   return NULL;
1489 }
1490
1491 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1492    one, a pointer to its bounds data.   Otherwise NULL.  */
1493
1494 static struct value *
1495 desc_bounds (struct value *arr)
1496 {
1497   struct type *type = ada_check_typedef (value_type (arr));
1498
1499   if (is_thin_pntr (type))
1500     {
1501       struct type *bounds_type =
1502         desc_bounds_type (thin_descriptor_type (type));
1503       LONGEST addr;
1504
1505       if (bounds_type == NULL)
1506         error (_("Bad GNAT array descriptor"));
1507
1508       /* NOTE: The following calculation is not really kosher, but
1509          since desc_type is an XVE-encoded type (and shouldn't be),
1510          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1511       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1512         addr = value_as_long (arr);
1513       else
1514         addr = value_address (arr);
1515
1516       return
1517         value_from_longest (lookup_pointer_type (bounds_type),
1518                             addr - TYPE_LENGTH (bounds_type));
1519     }
1520
1521   else if (is_thick_pntr (type))
1522     {
1523       struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1524                                                _("Bad GNAT array descriptor"));
1525       struct type *p_bounds_type = value_type (p_bounds);
1526
1527       if (p_bounds_type
1528           && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1529         {
1530           struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1531
1532           if (TYPE_STUB (target_type))
1533             p_bounds = value_cast (lookup_pointer_type
1534                                    (ada_check_typedef (target_type)),
1535                                    p_bounds);
1536         }
1537       else
1538         error (_("Bad GNAT array descriptor"));
1539
1540       return p_bounds;
1541     }
1542   else
1543     return NULL;
1544 }
1545
1546 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1547    position of the field containing the address of the bounds data.  */
1548
1549 static int
1550 fat_pntr_bounds_bitpos (struct type *type)
1551 {
1552   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1553 }
1554
1555 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1556    size of the field containing the address of the bounds data.  */
1557
1558 static int
1559 fat_pntr_bounds_bitsize (struct type *type)
1560 {
1561   type = desc_base_type (type);
1562
1563   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1564     return TYPE_FIELD_BITSIZE (type, 1);
1565   else
1566     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1567 }
1568
1569 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1570    pointer to one, the type of its array data (a array-with-no-bounds type);
1571    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1572    data.  */
1573
1574 static struct type *
1575 desc_data_target_type (struct type *type)
1576 {
1577   type = desc_base_type (type);
1578
1579   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1580   if (is_thin_pntr (type))
1581     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1582   else if (is_thick_pntr (type))
1583     {
1584       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1585
1586       if (data_type
1587           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1588         return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1589     }
1590
1591   return NULL;
1592 }
1593
1594 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1595    its array data.  */
1596
1597 static struct value *
1598 desc_data (struct value *arr)
1599 {
1600   struct type *type = value_type (arr);
1601
1602   if (is_thin_pntr (type))
1603     return thin_data_pntr (arr);
1604   else if (is_thick_pntr (type))
1605     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1606                              _("Bad GNAT array descriptor"));
1607   else
1608     return NULL;
1609 }
1610
1611
1612 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1613    position of the field containing the address of the data.  */
1614
1615 static int
1616 fat_pntr_data_bitpos (struct type *type)
1617 {
1618   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1619 }
1620
1621 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1622    size of the field containing the address of the data.  */
1623
1624 static int
1625 fat_pntr_data_bitsize (struct type *type)
1626 {
1627   type = desc_base_type (type);
1628
1629   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1630     return TYPE_FIELD_BITSIZE (type, 0);
1631   else
1632     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1633 }
1634
1635 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1636    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1637    bound, if WHICH is 1.  The first bound is I=1.  */
1638
1639 static struct value *
1640 desc_one_bound (struct value *bounds, int i, int which)
1641 {
1642   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1643                            _("Bad GNAT array descriptor bounds"));
1644 }
1645
1646 /* If BOUNDS is an array-bounds structure type, return the bit position
1647    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1648    bound, if WHICH is 1.  The first bound is I=1.  */
1649
1650 static int
1651 desc_bound_bitpos (struct type *type, int i, int which)
1652 {
1653   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1654 }
1655
1656 /* If BOUNDS is an array-bounds structure type, return the bit field size
1657    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1658    bound, if WHICH is 1.  The first bound is I=1.  */
1659
1660 static int
1661 desc_bound_bitsize (struct type *type, int i, int which)
1662 {
1663   type = desc_base_type (type);
1664
1665   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1666     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1667   else
1668     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1669 }
1670
1671 /* If TYPE is the type of an array-bounds structure, the type of its
1672    Ith bound (numbering from 1).  Otherwise, NULL.  */
1673
1674 static struct type *
1675 desc_index_type (struct type *type, int i)
1676 {
1677   type = desc_base_type (type);
1678
1679   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1680     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1681   else
1682     return NULL;
1683 }
1684
1685 /* The number of index positions in the array-bounds type TYPE.
1686    Return 0 if TYPE is NULL.  */
1687
1688 static int
1689 desc_arity (struct type *type)
1690 {
1691   type = desc_base_type (type);
1692
1693   if (type != NULL)
1694     return TYPE_NFIELDS (type) / 2;
1695   return 0;
1696 }
1697
1698 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1699    an array descriptor type (representing an unconstrained array
1700    type).  */
1701
1702 static int
1703 ada_is_direct_array_type (struct type *type)
1704 {
1705   if (type == NULL)
1706     return 0;
1707   type = ada_check_typedef (type);
1708   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1709           || ada_is_array_descriptor_type (type));
1710 }
1711
1712 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1713  * to one.  */
1714
1715 static int
1716 ada_is_array_type (struct type *type)
1717 {
1718   while (type != NULL 
1719          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1720              || TYPE_CODE (type) == TYPE_CODE_REF))
1721     type = TYPE_TARGET_TYPE (type);
1722   return ada_is_direct_array_type (type);
1723 }
1724
1725 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1726
1727 int
1728 ada_is_simple_array_type (struct type *type)
1729 {
1730   if (type == NULL)
1731     return 0;
1732   type = ada_check_typedef (type);
1733   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1734           || (TYPE_CODE (type) == TYPE_CODE_PTR
1735               && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
1736 }
1737
1738 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1739
1740 int
1741 ada_is_array_descriptor_type (struct type *type)
1742 {
1743   struct type *data_type = desc_data_target_type (type);
1744
1745   if (type == NULL)
1746     return 0;
1747   type = ada_check_typedef (type);
1748   return (data_type != NULL
1749           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1750           && desc_arity (desc_bounds_type (type)) > 0);
1751 }
1752
1753 /* Non-zero iff type is a partially mal-formed GNAT array
1754    descriptor.  FIXME: This is to compensate for some problems with
1755    debugging output from GNAT.  Re-examine periodically to see if it
1756    is still needed.  */
1757
1758 int
1759 ada_is_bogus_array_descriptor (struct type *type)
1760 {
1761   return
1762     type != NULL
1763     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1764     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1765         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1766     && !ada_is_array_descriptor_type (type);
1767 }
1768
1769
1770 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1771    (fat pointer) returns the type of the array data described---specifically,
1772    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1773    in from the descriptor; otherwise, they are left unspecified.  If
1774    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1775    returns NULL.  The result is simply the type of ARR if ARR is not
1776    a descriptor.  */
1777 struct type *
1778 ada_type_of_array (struct value *arr, int bounds)
1779 {
1780   if (ada_is_constrained_packed_array_type (value_type (arr)))
1781     return decode_constrained_packed_array_type (value_type (arr));
1782
1783   if (!ada_is_array_descriptor_type (value_type (arr)))
1784     return value_type (arr);
1785
1786   if (!bounds)
1787     {
1788       struct type *array_type =
1789         ada_check_typedef (desc_data_target_type (value_type (arr)));
1790
1791       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1792         TYPE_FIELD_BITSIZE (array_type, 0) =
1793           decode_packed_array_bitsize (value_type (arr));
1794       
1795       return array_type;
1796     }
1797   else
1798     {
1799       struct type *elt_type;
1800       int arity;
1801       struct value *descriptor;
1802
1803       elt_type = ada_array_element_type (value_type (arr), -1);
1804       arity = ada_array_arity (value_type (arr));
1805
1806       if (elt_type == NULL || arity == 0)
1807         return ada_check_typedef (value_type (arr));
1808
1809       descriptor = desc_bounds (arr);
1810       if (value_as_long (descriptor) == 0)
1811         return NULL;
1812       while (arity > 0)
1813         {
1814           struct type *range_type = alloc_type_copy (value_type (arr));
1815           struct type *array_type = alloc_type_copy (value_type (arr));
1816           struct value *low = desc_one_bound (descriptor, arity, 0);
1817           struct value *high = desc_one_bound (descriptor, arity, 1);
1818
1819           arity -= 1;
1820           create_range_type (range_type, value_type (low),
1821                              longest_to_int (value_as_long (low)),
1822                              longest_to_int (value_as_long (high)));
1823           elt_type = create_array_type (array_type, elt_type, range_type);
1824
1825           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1826             {
1827               /* We need to store the element packed bitsize, as well as
1828                  recompute the array size, because it was previously
1829                  computed based on the unpacked element size.  */
1830               LONGEST lo = value_as_long (low);
1831               LONGEST hi = value_as_long (high);
1832
1833               TYPE_FIELD_BITSIZE (elt_type, 0) =
1834                 decode_packed_array_bitsize (value_type (arr));
1835               /* If the array has no element, then the size is already
1836                  zero, and does not need to be recomputed.  */
1837               if (lo < hi)
1838                 {
1839                   int array_bitsize =
1840                         (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
1841
1842                   TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1843                 }
1844             }
1845         }
1846
1847       return lookup_pointer_type (elt_type);
1848     }
1849 }
1850
1851 /* If ARR does not represent an array, returns ARR unchanged.
1852    Otherwise, returns either a standard GDB array with bounds set
1853    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1854    GDB array.  Returns NULL if ARR is a null fat pointer.  */
1855
1856 struct value *
1857 ada_coerce_to_simple_array_ptr (struct value *arr)
1858 {
1859   if (ada_is_array_descriptor_type (value_type (arr)))
1860     {
1861       struct type *arrType = ada_type_of_array (arr, 1);
1862
1863       if (arrType == NULL)
1864         return NULL;
1865       return value_cast (arrType, value_copy (desc_data (arr)));
1866     }
1867   else if (ada_is_constrained_packed_array_type (value_type (arr)))
1868     return decode_constrained_packed_array (arr);
1869   else
1870     return arr;
1871 }
1872
1873 /* If ARR does not represent an array, returns ARR unchanged.
1874    Otherwise, returns a standard GDB array describing ARR (which may
1875    be ARR itself if it already is in the proper form).  */
1876
1877 struct value *
1878 ada_coerce_to_simple_array (struct value *arr)
1879 {
1880   if (ada_is_array_descriptor_type (value_type (arr)))
1881     {
1882       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1883
1884       if (arrVal == NULL)
1885         error (_("Bounds unavailable for null array pointer."));
1886       check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
1887       return value_ind (arrVal);
1888     }
1889   else if (ada_is_constrained_packed_array_type (value_type (arr)))
1890     return decode_constrained_packed_array (arr);
1891   else
1892     return arr;
1893 }
1894
1895 /* If TYPE represents a GNAT array type, return it translated to an
1896    ordinary GDB array type (possibly with BITSIZE fields indicating
1897    packing).  For other types, is the identity.  */
1898
1899 struct type *
1900 ada_coerce_to_simple_array_type (struct type *type)
1901 {
1902   if (ada_is_constrained_packed_array_type (type))
1903     return decode_constrained_packed_array_type (type);
1904
1905   if (ada_is_array_descriptor_type (type))
1906     return ada_check_typedef (desc_data_target_type (type));
1907
1908   return type;
1909 }
1910
1911 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
1912
1913 static int
1914 ada_is_packed_array_type  (struct type *type)
1915 {
1916   if (type == NULL)
1917     return 0;
1918   type = desc_base_type (type);
1919   type = ada_check_typedef (type);
1920   return
1921     ada_type_name (type) != NULL
1922     && strstr (ada_type_name (type), "___XP") != NULL;
1923 }
1924
1925 /* Non-zero iff TYPE represents a standard GNAT constrained
1926    packed-array type.  */
1927
1928 int
1929 ada_is_constrained_packed_array_type (struct type *type)
1930 {
1931   return ada_is_packed_array_type (type)
1932     && !ada_is_array_descriptor_type (type);
1933 }
1934
1935 /* Non-zero iff TYPE represents an array descriptor for a
1936    unconstrained packed-array type.  */
1937
1938 static int
1939 ada_is_unconstrained_packed_array_type (struct type *type)
1940 {
1941   return ada_is_packed_array_type (type)
1942     && ada_is_array_descriptor_type (type);
1943 }
1944
1945 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
1946    return the size of its elements in bits.  */
1947
1948 static long
1949 decode_packed_array_bitsize (struct type *type)
1950 {
1951   char *raw_name;
1952   char *tail;
1953   long bits;
1954
1955   /* Access to arrays implemented as fat pointers are encoded as a typedef
1956      of the fat pointer type.  We need the name of the fat pointer type
1957      to do the decoding, so strip the typedef layer.  */
1958   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1959     type = ada_typedef_target_type (type);
1960
1961   raw_name = ada_type_name (ada_check_typedef (type));
1962   if (!raw_name)
1963     raw_name = ada_type_name (desc_base_type (type));
1964
1965   if (!raw_name)
1966     return 0;
1967
1968   tail = strstr (raw_name, "___XP");
1969   gdb_assert (tail != NULL);
1970
1971   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1972     {
1973       lim_warning
1974         (_("could not understand bit size information on packed array"));
1975       return 0;
1976     }
1977
1978   return bits;
1979 }
1980
1981 /* Given that TYPE is a standard GDB array type with all bounds filled
1982    in, and that the element size of its ultimate scalar constituents
1983    (that is, either its elements, or, if it is an array of arrays, its
1984    elements' elements, etc.) is *ELT_BITS, return an identical type,
1985    but with the bit sizes of its elements (and those of any
1986    constituent arrays) recorded in the BITSIZE components of its
1987    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1988    in bits.  */
1989
1990 static struct type *
1991 constrained_packed_array_type (struct type *type, long *elt_bits)
1992 {
1993   struct type *new_elt_type;
1994   struct type *new_type;
1995   LONGEST low_bound, high_bound;
1996
1997   type = ada_check_typedef (type);
1998   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1999     return type;
2000
2001   new_type = alloc_type_copy (type);
2002   new_elt_type =
2003     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2004                                    elt_bits);
2005   create_array_type (new_type, new_elt_type, TYPE_INDEX_TYPE (type));
2006   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2007   TYPE_NAME (new_type) = ada_type_name (type);
2008
2009   if (get_discrete_bounds (TYPE_INDEX_TYPE (type),
2010                            &low_bound, &high_bound) < 0)
2011     low_bound = high_bound = 0;
2012   if (high_bound < low_bound)
2013     *elt_bits = TYPE_LENGTH (new_type) = 0;
2014   else
2015     {
2016       *elt_bits *= (high_bound - low_bound + 1);
2017       TYPE_LENGTH (new_type) =
2018         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2019     }
2020
2021   TYPE_FIXED_INSTANCE (new_type) = 1;
2022   return new_type;
2023 }
2024
2025 /* The array type encoded by TYPE, where
2026    ada_is_constrained_packed_array_type (TYPE).  */
2027
2028 static struct type *
2029 decode_constrained_packed_array_type (struct type *type)
2030 {
2031   char *raw_name = ada_type_name (ada_check_typedef (type));
2032   char *name;
2033   char *tail;
2034   struct type *shadow_type;
2035   long bits;
2036
2037   if (!raw_name)
2038     raw_name = ada_type_name (desc_base_type (type));
2039
2040   if (!raw_name)
2041     return NULL;
2042
2043   name = (char *) alloca (strlen (raw_name) + 1);
2044   tail = strstr (raw_name, "___XP");
2045   type = desc_base_type (type);
2046
2047   memcpy (name, raw_name, tail - raw_name);
2048   name[tail - raw_name] = '\000';
2049
2050   shadow_type = ada_find_parallel_type_with_name (type, name);
2051
2052   if (shadow_type == NULL)
2053     {
2054       lim_warning (_("could not find bounds information on packed array"));
2055       return NULL;
2056     }
2057   CHECK_TYPEDEF (shadow_type);
2058
2059   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2060     {
2061       lim_warning (_("could not understand bounds "
2062                      "information on packed array"));
2063       return NULL;
2064     }
2065
2066   bits = decode_packed_array_bitsize (type);
2067   return constrained_packed_array_type (shadow_type, &bits);
2068 }
2069
2070 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2071    array, returns a simple array that denotes that array.  Its type is a
2072    standard GDB array type except that the BITSIZEs of the array
2073    target types are set to the number of bits in each element, and the
2074    type length is set appropriately.  */
2075
2076 static struct value *
2077 decode_constrained_packed_array (struct value *arr)
2078 {
2079   struct type *type;
2080
2081   arr = ada_coerce_ref (arr);
2082
2083   /* If our value is a pointer, then dererence it.  Make sure that
2084      this operation does not cause the target type to be fixed, as
2085      this would indirectly cause this array to be decoded.  The rest
2086      of the routine assumes that the array hasn't been decoded yet,
2087      so we use the basic "value_ind" routine to perform the dereferencing,
2088      as opposed to using "ada_value_ind".  */
2089   if (TYPE_CODE (value_type (arr)) == TYPE_CODE_PTR)
2090     arr = value_ind (arr);
2091
2092   type = decode_constrained_packed_array_type (value_type (arr));
2093   if (type == NULL)
2094     {
2095       error (_("can't unpack array"));
2096       return NULL;
2097     }
2098
2099   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2100       && ada_is_modular_type (value_type (arr)))
2101     {
2102        /* This is a (right-justified) modular type representing a packed
2103          array with no wrapper.  In order to interpret the value through
2104          the (left-justified) packed array type we just built, we must
2105          first left-justify it.  */
2106       int bit_size, bit_pos;
2107       ULONGEST mod;
2108
2109       mod = ada_modulus (value_type (arr)) - 1;
2110       bit_size = 0;
2111       while (mod > 0)
2112         {
2113           bit_size += 1;
2114           mod >>= 1;
2115         }
2116       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2117       arr = ada_value_primitive_packed_val (arr, NULL,
2118                                             bit_pos / HOST_CHAR_BIT,
2119                                             bit_pos % HOST_CHAR_BIT,
2120                                             bit_size,
2121                                             type);
2122     }
2123
2124   return coerce_unspec_val_to_type (arr, type);
2125 }
2126
2127
2128 /* The value of the element of packed array ARR at the ARITY indices
2129    given in IND.   ARR must be a simple array.  */
2130
2131 static struct value *
2132 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2133 {
2134   int i;
2135   int bits, elt_off, bit_off;
2136   long elt_total_bit_offset;
2137   struct type *elt_type;
2138   struct value *v;
2139
2140   bits = 0;
2141   elt_total_bit_offset = 0;
2142   elt_type = ada_check_typedef (value_type (arr));
2143   for (i = 0; i < arity; i += 1)
2144     {
2145       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2146           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2147         error
2148           (_("attempt to do packed indexing of "
2149              "something other than a packed array"));
2150       else
2151         {
2152           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2153           LONGEST lowerbound, upperbound;
2154           LONGEST idx;
2155
2156           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2157             {
2158               lim_warning (_("don't know bounds of array"));
2159               lowerbound = upperbound = 0;
2160             }
2161
2162           idx = pos_atr (ind[i]);
2163           if (idx < lowerbound || idx > upperbound)
2164             lim_warning (_("packed array index %ld out of bounds"),
2165                          (long) idx);
2166           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2167           elt_total_bit_offset += (idx - lowerbound) * bits;
2168           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2169         }
2170     }
2171   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2172   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2173
2174   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2175                                       bits, elt_type);
2176   return v;
2177 }
2178
2179 /* Non-zero iff TYPE includes negative integer values.  */
2180
2181 static int
2182 has_negatives (struct type *type)
2183 {
2184   switch (TYPE_CODE (type))
2185     {
2186     default:
2187       return 0;
2188     case TYPE_CODE_INT:
2189       return !TYPE_UNSIGNED (type);
2190     case TYPE_CODE_RANGE:
2191       return TYPE_LOW_BOUND (type) < 0;
2192     }
2193 }
2194
2195
2196 /* Create a new value of type TYPE from the contents of OBJ starting
2197    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2198    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
2199    assigning through the result will set the field fetched from.
2200    VALADDR is ignored unless OBJ is NULL, in which case,
2201    VALADDR+OFFSET must address the start of storage containing the 
2202    packed value.  The value returned  in this case is never an lval.
2203    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
2204
2205 struct value *
2206 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2207                                 long offset, int bit_offset, int bit_size,
2208                                 struct type *type)
2209 {
2210   struct value *v;
2211   int src,                      /* Index into the source area */
2212     targ,                       /* Index into the target area */
2213     srcBitsLeft,                /* Number of source bits left to move */
2214     nsrc, ntarg,                /* Number of source and target bytes */
2215     unusedLS,                   /* Number of bits in next significant
2216                                    byte of source that are unused */
2217     accumSize;                  /* Number of meaningful bits in accum */
2218   unsigned char *bytes;         /* First byte containing data to unpack */
2219   unsigned char *unpacked;
2220   unsigned long accum;          /* Staging area for bits being transferred */
2221   unsigned char sign;
2222   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2223   /* Transmit bytes from least to most significant; delta is the direction
2224      the indices move.  */
2225   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2226
2227   type = ada_check_typedef (type);
2228
2229   if (obj == NULL)
2230     {
2231       v = allocate_value (type);
2232       bytes = (unsigned char *) (valaddr + offset);
2233     }
2234   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2235     {
2236       v = value_at (type,
2237                     value_address (obj) + offset);
2238       bytes = (unsigned char *) alloca (len);
2239       read_memory (value_address (v), bytes, len);
2240     }
2241   else
2242     {
2243       v = allocate_value (type);
2244       bytes = (unsigned char *) value_contents (obj) + offset;
2245     }
2246
2247   if (obj != NULL)
2248     {
2249       CORE_ADDR new_addr;
2250
2251       set_value_component_location (v, obj);
2252       new_addr = value_address (obj) + offset;
2253       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2254       set_value_bitsize (v, bit_size);
2255       if (value_bitpos (v) >= HOST_CHAR_BIT)
2256         {
2257           ++new_addr;
2258           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2259         }
2260       set_value_address (v, new_addr);
2261     }
2262   else
2263     set_value_bitsize (v, bit_size);
2264   unpacked = (unsigned char *) value_contents (v);
2265
2266   srcBitsLeft = bit_size;
2267   nsrc = len;
2268   ntarg = TYPE_LENGTH (type);
2269   sign = 0;
2270   if (bit_size == 0)
2271     {
2272       memset (unpacked, 0, TYPE_LENGTH (type));
2273       return v;
2274     }
2275   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2276     {
2277       src = len - 1;
2278       if (has_negatives (type)
2279           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2280         sign = ~0;
2281
2282       unusedLS =
2283         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2284         % HOST_CHAR_BIT;
2285
2286       switch (TYPE_CODE (type))
2287         {
2288         case TYPE_CODE_ARRAY:
2289         case TYPE_CODE_UNION:
2290         case TYPE_CODE_STRUCT:
2291           /* Non-scalar values must be aligned at a byte boundary...  */
2292           accumSize =
2293             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2294           /* ... And are placed at the beginning (most-significant) bytes
2295              of the target.  */
2296           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2297           ntarg = targ + 1;
2298           break;
2299         default:
2300           accumSize = 0;
2301           targ = TYPE_LENGTH (type) - 1;
2302           break;
2303         }
2304     }
2305   else
2306     {
2307       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2308
2309       src = targ = 0;
2310       unusedLS = bit_offset;
2311       accumSize = 0;
2312
2313       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2314         sign = ~0;
2315     }
2316
2317   accum = 0;
2318   while (nsrc > 0)
2319     {
2320       /* Mask for removing bits of the next source byte that are not
2321          part of the value.  */
2322       unsigned int unusedMSMask =
2323         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2324         1;
2325       /* Sign-extend bits for this byte.  */
2326       unsigned int signMask = sign & ~unusedMSMask;
2327
2328       accum |=
2329         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2330       accumSize += HOST_CHAR_BIT - unusedLS;
2331       if (accumSize >= HOST_CHAR_BIT)
2332         {
2333           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2334           accumSize -= HOST_CHAR_BIT;
2335           accum >>= HOST_CHAR_BIT;
2336           ntarg -= 1;
2337           targ += delta;
2338         }
2339       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2340       unusedLS = 0;
2341       nsrc -= 1;
2342       src += delta;
2343     }
2344   while (ntarg > 0)
2345     {
2346       accum |= sign << accumSize;
2347       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2348       accumSize -= HOST_CHAR_BIT;
2349       accum >>= HOST_CHAR_BIT;
2350       ntarg -= 1;
2351       targ += delta;
2352     }
2353
2354   return v;
2355 }
2356
2357 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2358    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2359    not overlap.  */
2360 static void
2361 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2362            int src_offset, int n, int bits_big_endian_p)
2363 {
2364   unsigned int accum, mask;
2365   int accum_bits, chunk_size;
2366
2367   target += targ_offset / HOST_CHAR_BIT;
2368   targ_offset %= HOST_CHAR_BIT;
2369   source += src_offset / HOST_CHAR_BIT;
2370   src_offset %= HOST_CHAR_BIT;
2371   if (bits_big_endian_p)
2372     {
2373       accum = (unsigned char) *source;
2374       source += 1;
2375       accum_bits = HOST_CHAR_BIT - src_offset;
2376
2377       while (n > 0)
2378         {
2379           int unused_right;
2380
2381           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2382           accum_bits += HOST_CHAR_BIT;
2383           source += 1;
2384           chunk_size = HOST_CHAR_BIT - targ_offset;
2385           if (chunk_size > n)
2386             chunk_size = n;
2387           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2388           mask = ((1 << chunk_size) - 1) << unused_right;
2389           *target =
2390             (*target & ~mask)
2391             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2392           n -= chunk_size;
2393           accum_bits -= chunk_size;
2394           target += 1;
2395           targ_offset = 0;
2396         }
2397     }
2398   else
2399     {
2400       accum = (unsigned char) *source >> src_offset;
2401       source += 1;
2402       accum_bits = HOST_CHAR_BIT - src_offset;
2403
2404       while (n > 0)
2405         {
2406           accum = accum + ((unsigned char) *source << accum_bits);
2407           accum_bits += HOST_CHAR_BIT;
2408           source += 1;
2409           chunk_size = HOST_CHAR_BIT - targ_offset;
2410           if (chunk_size > n)
2411             chunk_size = n;
2412           mask = ((1 << chunk_size) - 1) << targ_offset;
2413           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2414           n -= chunk_size;
2415           accum_bits -= chunk_size;
2416           accum >>= chunk_size;
2417           target += 1;
2418           targ_offset = 0;
2419         }
2420     }
2421 }
2422
2423 /* Store the contents of FROMVAL into the location of TOVAL.
2424    Return a new value with the location of TOVAL and contents of
2425    FROMVAL.   Handles assignment into packed fields that have
2426    floating-point or non-scalar types.  */
2427
2428 static struct value *
2429 ada_value_assign (struct value *toval, struct value *fromval)
2430 {
2431   struct type *type = value_type (toval);
2432   int bits = value_bitsize (toval);
2433
2434   toval = ada_coerce_ref (toval);
2435   fromval = ada_coerce_ref (fromval);
2436
2437   if (ada_is_direct_array_type (value_type (toval)))
2438     toval = ada_coerce_to_simple_array (toval);
2439   if (ada_is_direct_array_type (value_type (fromval)))
2440     fromval = ada_coerce_to_simple_array (fromval);
2441
2442   if (!deprecated_value_modifiable (toval))
2443     error (_("Left operand of assignment is not a modifiable lvalue."));
2444
2445   if (VALUE_LVAL (toval) == lval_memory
2446       && bits > 0
2447       && (TYPE_CODE (type) == TYPE_CODE_FLT
2448           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2449     {
2450       int len = (value_bitpos (toval)
2451                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2452       int from_size;
2453       char *buffer = (char *) alloca (len);
2454       struct value *val;
2455       CORE_ADDR to_addr = value_address (toval);
2456
2457       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2458         fromval = value_cast (type, fromval);
2459
2460       read_memory (to_addr, buffer, len);
2461       from_size = value_bitsize (fromval);
2462       if (from_size == 0)
2463         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2464       if (gdbarch_bits_big_endian (get_type_arch (type)))
2465         move_bits (buffer, value_bitpos (toval),
2466                    value_contents (fromval), from_size - bits, bits, 1);
2467       else
2468         move_bits (buffer, value_bitpos (toval),
2469                    value_contents (fromval), 0, bits, 0);
2470       write_memory (to_addr, buffer, len);
2471       observer_notify_memory_changed (to_addr, len, buffer);
2472
2473       val = value_copy (toval);
2474       memcpy (value_contents_raw (val), value_contents (fromval),
2475               TYPE_LENGTH (type));
2476       deprecated_set_value_type (val, type);
2477
2478       return val;
2479     }
2480
2481   return value_assign (toval, fromval);
2482 }
2483
2484
2485 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2486  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2487  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2488  * COMPONENT, and not the inferior's memory.  The current contents 
2489  * of COMPONENT are ignored.  */
2490 static void
2491 value_assign_to_component (struct value *container, struct value *component,
2492                            struct value *val)
2493 {
2494   LONGEST offset_in_container =
2495     (LONGEST)  (value_address (component) - value_address (container));
2496   int bit_offset_in_container = 
2497     value_bitpos (component) - value_bitpos (container);
2498   int bits;
2499   
2500   val = value_cast (value_type (component), val);
2501
2502   if (value_bitsize (component) == 0)
2503     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2504   else
2505     bits = value_bitsize (component);
2506
2507   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2508     move_bits (value_contents_writeable (container) + offset_in_container, 
2509                value_bitpos (container) + bit_offset_in_container,
2510                value_contents (val),
2511                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2512                bits, 1);
2513   else
2514     move_bits (value_contents_writeable (container) + offset_in_container, 
2515                value_bitpos (container) + bit_offset_in_container,
2516                value_contents (val), 0, bits, 0);
2517 }              
2518                         
2519 /* The value of the element of array ARR at the ARITY indices given in IND.
2520    ARR may be either a simple array, GNAT array descriptor, or pointer
2521    thereto.  */
2522
2523 struct value *
2524 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2525 {
2526   int k;
2527   struct value *elt;
2528   struct type *elt_type;
2529
2530   elt = ada_coerce_to_simple_array (arr);
2531
2532   elt_type = ada_check_typedef (value_type (elt));
2533   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2534       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2535     return value_subscript_packed (elt, arity, ind);
2536
2537   for (k = 0; k < arity; k += 1)
2538     {
2539       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2540         error (_("too many subscripts (%d expected)"), k);
2541       elt = value_subscript (elt, pos_atr (ind[k]));
2542     }
2543   return elt;
2544 }
2545
2546 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2547    value of the element of *ARR at the ARITY indices given in
2548    IND.  Does not read the entire array into memory.  */
2549
2550 static struct value *
2551 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2552                          struct value **ind)
2553 {
2554   int k;
2555
2556   for (k = 0; k < arity; k += 1)
2557     {
2558       LONGEST lwb, upb;
2559
2560       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2561         error (_("too many subscripts (%d expected)"), k);
2562       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2563                         value_copy (arr));
2564       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2565       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2566       type = TYPE_TARGET_TYPE (type);
2567     }
2568
2569   return value_ind (arr);
2570 }
2571
2572 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2573    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2574    elements starting at index LOW.  The lower bound of this array is LOW, as
2575    per Ada rules.  */
2576 static struct value *
2577 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2578                           int low, int high)
2579 {
2580   CORE_ADDR base = value_as_address (array_ptr)
2581     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type)))
2582        * TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
2583   struct type *index_type =
2584     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
2585                        low, high);
2586   struct type *slice_type =
2587     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2588
2589   return value_at_lazy (slice_type, base);
2590 }
2591
2592
2593 static struct value *
2594 ada_value_slice (struct value *array, int low, int high)
2595 {
2596   struct type *type = value_type (array);
2597   struct type *index_type =
2598     create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2599   struct type *slice_type =
2600     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2601
2602   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2603 }
2604
2605 /* If type is a record type in the form of a standard GNAT array
2606    descriptor, returns the number of dimensions for type.  If arr is a
2607    simple array, returns the number of "array of"s that prefix its
2608    type designation.  Otherwise, returns 0.  */
2609
2610 int
2611 ada_array_arity (struct type *type)
2612 {
2613   int arity;
2614
2615   if (type == NULL)
2616     return 0;
2617
2618   type = desc_base_type (type);
2619
2620   arity = 0;
2621   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2622     return desc_arity (desc_bounds_type (type));
2623   else
2624     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2625       {
2626         arity += 1;
2627         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2628       }
2629
2630   return arity;
2631 }
2632
2633 /* If TYPE is a record type in the form of a standard GNAT array
2634    descriptor or a simple array type, returns the element type for
2635    TYPE after indexing by NINDICES indices, or by all indices if
2636    NINDICES is -1.  Otherwise, returns NULL.  */
2637
2638 struct type *
2639 ada_array_element_type (struct type *type, int nindices)
2640 {
2641   type = desc_base_type (type);
2642
2643   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2644     {
2645       int k;
2646       struct type *p_array_type;
2647
2648       p_array_type = desc_data_target_type (type);
2649
2650       k = ada_array_arity (type);
2651       if (k == 0)
2652         return NULL;
2653
2654       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2655       if (nindices >= 0 && k > nindices)
2656         k = nindices;
2657       while (k > 0 && p_array_type != NULL)
2658         {
2659           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2660           k -= 1;
2661         }
2662       return p_array_type;
2663     }
2664   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2665     {
2666       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2667         {
2668           type = TYPE_TARGET_TYPE (type);
2669           nindices -= 1;
2670         }
2671       return type;
2672     }
2673
2674   return NULL;
2675 }
2676
2677 /* The type of nth index in arrays of given type (n numbering from 1).
2678    Does not examine memory.  Throws an error if N is invalid or TYPE
2679    is not an array type.  NAME is the name of the Ada attribute being
2680    evaluated ('range, 'first, 'last, or 'length); it is used in building
2681    the error message.  */
2682
2683 static struct type *
2684 ada_index_type (struct type *type, int n, const char *name)
2685 {
2686   struct type *result_type;
2687
2688   type = desc_base_type (type);
2689
2690   if (n < 0 || n > ada_array_arity (type))
2691     error (_("invalid dimension number to '%s"), name);
2692
2693   if (ada_is_simple_array_type (type))
2694     {
2695       int i;
2696
2697       for (i = 1; i < n; i += 1)
2698         type = TYPE_TARGET_TYPE (type);
2699       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2700       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2701          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2702          perhaps stabsread.c would make more sense.  */
2703       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2704         result_type = NULL;
2705     }
2706   else
2707     {
2708       result_type = desc_index_type (desc_bounds_type (type), n);
2709       if (result_type == NULL)
2710         error (_("attempt to take bound of something that is not an array"));
2711     }
2712
2713   return result_type;
2714 }
2715
2716 /* Given that arr is an array type, returns the lower bound of the
2717    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2718    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2719    array-descriptor type.  It works for other arrays with bounds supplied
2720    by run-time quantities other than discriminants.  */
2721
2722 static LONGEST
2723 ada_array_bound_from_type (struct type * arr_type, int n, int which)
2724 {
2725   struct type *type, *elt_type, *index_type_desc, *index_type;
2726   int i;
2727
2728   gdb_assert (which == 0 || which == 1);
2729
2730   if (ada_is_constrained_packed_array_type (arr_type))
2731     arr_type = decode_constrained_packed_array_type (arr_type);
2732
2733   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2734     return (LONGEST) - which;
2735
2736   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2737     type = TYPE_TARGET_TYPE (arr_type);
2738   else
2739     type = arr_type;
2740
2741   elt_type = type;
2742   for (i = n; i > 1; i--)
2743     elt_type = TYPE_TARGET_TYPE (type);
2744
2745   index_type_desc = ada_find_parallel_type (type, "___XA");
2746   ada_fixup_array_indexes_type (index_type_desc);
2747   if (index_type_desc != NULL)
2748     index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2749                                       NULL);
2750   else
2751     index_type = TYPE_INDEX_TYPE (elt_type);
2752
2753   return
2754     (LONGEST) (which == 0
2755                ? ada_discrete_type_low_bound (index_type)
2756                : ada_discrete_type_high_bound (index_type));
2757 }
2758
2759 /* Given that arr is an array value, returns the lower bound of the
2760    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2761    WHICH is 1.  This routine will also work for arrays with bounds
2762    supplied by run-time quantities other than discriminants.  */
2763
2764 static LONGEST
2765 ada_array_bound (struct value *arr, int n, int which)
2766 {
2767   struct type *arr_type = value_type (arr);
2768
2769   if (ada_is_constrained_packed_array_type (arr_type))
2770     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2771   else if (ada_is_simple_array_type (arr_type))
2772     return ada_array_bound_from_type (arr_type, n, which);
2773   else
2774     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2775 }
2776
2777 /* Given that arr is an array value, returns the length of the
2778    nth index.  This routine will also work for arrays with bounds
2779    supplied by run-time quantities other than discriminants.
2780    Does not work for arrays indexed by enumeration types with representation
2781    clauses at the moment.  */
2782
2783 static LONGEST
2784 ada_array_length (struct value *arr, int n)
2785 {
2786   struct type *arr_type = ada_check_typedef (value_type (arr));
2787
2788   if (ada_is_constrained_packed_array_type (arr_type))
2789     return ada_array_length (decode_constrained_packed_array (arr), n);
2790
2791   if (ada_is_simple_array_type (arr_type))
2792     return (ada_array_bound_from_type (arr_type, n, 1)
2793             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2794   else
2795     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2796             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2797 }
2798
2799 /* An empty array whose type is that of ARR_TYPE (an array type),
2800    with bounds LOW to LOW-1.  */
2801
2802 static struct value *
2803 empty_array (struct type *arr_type, int low)
2804 {
2805   struct type *index_type =
2806     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2807                        low, low - 1);
2808   struct type *elt_type = ada_array_element_type (arr_type, 1);
2809
2810   return allocate_value (create_array_type (NULL, elt_type, index_type));
2811 }
2812 \f
2813
2814                                 /* Name resolution */
2815
2816 /* The "decoded" name for the user-definable Ada operator corresponding
2817    to OP.  */
2818
2819 static const char *
2820 ada_decoded_op_name (enum exp_opcode op)
2821 {
2822   int i;
2823
2824   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2825     {
2826       if (ada_opname_table[i].op == op)
2827         return ada_opname_table[i].decoded;
2828     }
2829   error (_("Could not find operator name for opcode"));
2830 }
2831
2832
2833 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2834    references (marked by OP_VAR_VALUE nodes in which the symbol has an
2835    undefined namespace) and converts operators that are
2836    user-defined into appropriate function calls.  If CONTEXT_TYPE is
2837    non-null, it provides a preferred result type [at the moment, only
2838    type void has any effect---causing procedures to be preferred over
2839    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
2840    return type is preferred.  May change (expand) *EXP.  */
2841
2842 static void
2843 resolve (struct expression **expp, int void_context_p)
2844 {
2845   struct type *context_type = NULL;
2846   int pc = 0;
2847
2848   if (void_context_p)
2849     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
2850
2851   resolve_subexp (expp, &pc, 1, context_type);
2852 }
2853
2854 /* Resolve the operator of the subexpression beginning at
2855    position *POS of *EXPP.  "Resolving" consists of replacing
2856    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2857    with their resolutions, replacing built-in operators with
2858    function calls to user-defined operators, where appropriate, and,
2859    when DEPROCEDURE_P is non-zero, converting function-valued variables
2860    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
2861    are as in ada_resolve, above.  */
2862
2863 static struct value *
2864 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2865                 struct type *context_type)
2866 {
2867   int pc = *pos;
2868   int i;
2869   struct expression *exp;       /* Convenience: == *expp.  */
2870   enum exp_opcode op = (*expp)->elts[pc].opcode;
2871   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
2872   int nargs;                    /* Number of operands.  */
2873   int oplen;
2874
2875   argvec = NULL;
2876   nargs = 0;
2877   exp = *expp;
2878
2879   /* Pass one: resolve operands, saving their types and updating *pos,
2880      if needed.  */
2881   switch (op)
2882     {
2883     case OP_FUNCALL:
2884       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2885           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2886         *pos += 7;
2887       else
2888         {
2889           *pos += 3;
2890           resolve_subexp (expp, pos, 0, NULL);
2891         }
2892       nargs = longest_to_int (exp->elts[pc + 1].longconst);
2893       break;
2894
2895     case UNOP_ADDR:
2896       *pos += 1;
2897       resolve_subexp (expp, pos, 0, NULL);
2898       break;
2899
2900     case UNOP_QUAL:
2901       *pos += 3;
2902       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
2903       break;
2904
2905     case OP_ATR_MODULUS:
2906     case OP_ATR_SIZE:
2907     case OP_ATR_TAG:
2908     case OP_ATR_FIRST:
2909     case OP_ATR_LAST:
2910     case OP_ATR_LENGTH:
2911     case OP_ATR_POS:
2912     case OP_ATR_VAL:
2913     case OP_ATR_MIN:
2914     case OP_ATR_MAX:
2915     case TERNOP_IN_RANGE:
2916     case BINOP_IN_BOUNDS:
2917     case UNOP_IN_RANGE:
2918     case OP_AGGREGATE:
2919     case OP_OTHERS:
2920     case OP_CHOICES:
2921     case OP_POSITIONAL:
2922     case OP_DISCRETE_RANGE:
2923     case OP_NAME:
2924       ada_forward_operator_length (exp, pc, &oplen, &nargs);
2925       *pos += oplen;
2926       break;
2927
2928     case BINOP_ASSIGN:
2929       {
2930         struct value *arg1;
2931
2932         *pos += 1;
2933         arg1 = resolve_subexp (expp, pos, 0, NULL);
2934         if (arg1 == NULL)
2935           resolve_subexp (expp, pos, 1, NULL);
2936         else
2937           resolve_subexp (expp, pos, 1, value_type (arg1));
2938         break;
2939       }
2940
2941     case UNOP_CAST:
2942       *pos += 3;
2943       nargs = 1;
2944       break;
2945
2946     case BINOP_ADD:
2947     case BINOP_SUB:
2948     case BINOP_MUL:
2949     case BINOP_DIV:
2950     case BINOP_REM:
2951     case BINOP_MOD:
2952     case BINOP_EXP:
2953     case BINOP_CONCAT:
2954     case BINOP_LOGICAL_AND:
2955     case BINOP_LOGICAL_OR:
2956     case BINOP_BITWISE_AND:
2957     case BINOP_BITWISE_IOR:
2958     case BINOP_BITWISE_XOR:
2959
2960     case BINOP_EQUAL:
2961     case BINOP_NOTEQUAL:
2962     case BINOP_LESS:
2963     case BINOP_GTR:
2964     case BINOP_LEQ:
2965     case BINOP_GEQ:
2966
2967     case BINOP_REPEAT:
2968     case BINOP_SUBSCRIPT:
2969     case BINOP_COMMA:
2970       *pos += 1;
2971       nargs = 2;
2972       break;
2973
2974     case UNOP_NEG:
2975     case UNOP_PLUS:
2976     case UNOP_LOGICAL_NOT:
2977     case UNOP_ABS:
2978     case UNOP_IND:
2979       *pos += 1;
2980       nargs = 1;
2981       break;
2982
2983     case OP_LONG:
2984     case OP_DOUBLE:
2985     case OP_VAR_VALUE:
2986       *pos += 4;
2987       break;
2988
2989     case OP_TYPE:
2990     case OP_BOOL:
2991     case OP_LAST:
2992     case OP_INTERNALVAR:
2993       *pos += 3;
2994       break;
2995
2996     case UNOP_MEMVAL:
2997       *pos += 3;
2998       nargs = 1;
2999       break;
3000
3001     case OP_REGISTER:
3002       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3003       break;
3004
3005     case STRUCTOP_STRUCT:
3006       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3007       nargs = 1;
3008       break;
3009
3010     case TERNOP_SLICE:
3011       *pos += 1;
3012       nargs = 3;
3013       break;
3014
3015     case OP_STRING:
3016       break;
3017
3018     default:
3019       error (_("Unexpected operator during name resolution"));
3020     }
3021
3022   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3023   for (i = 0; i < nargs; i += 1)
3024     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3025   argvec[i] = NULL;
3026   exp = *expp;
3027
3028   /* Pass two: perform any resolution on principal operator.  */
3029   switch (op)
3030     {
3031     default:
3032       break;
3033
3034     case OP_VAR_VALUE:
3035       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3036         {
3037           struct ada_symbol_info *candidates;
3038           int n_candidates;
3039
3040           n_candidates =
3041             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3042                                     (exp->elts[pc + 2].symbol),
3043                                     exp->elts[pc + 1].block, VAR_DOMAIN,
3044                                     &candidates);
3045
3046           if (n_candidates > 1)
3047             {
3048               /* Types tend to get re-introduced locally, so if there
3049                  are any local symbols that are not types, first filter
3050                  out all types.  */
3051               int j;
3052               for (j = 0; j < n_candidates; j += 1)
3053                 switch (SYMBOL_CLASS (candidates[j].sym))
3054                   {
3055                   case LOC_REGISTER:
3056                   case LOC_ARG:
3057                   case LOC_REF_ARG:
3058                   case LOC_REGPARM_ADDR:
3059                   case LOC_LOCAL:
3060                   case LOC_COMPUTED:
3061                     goto FoundNonType;
3062                   default:
3063                     break;
3064                   }
3065             FoundNonType:
3066               if (j < n_candidates)
3067                 {
3068                   j = 0;
3069                   while (j < n_candidates)
3070                     {
3071                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3072                         {
3073                           candidates[j] = candidates[n_candidates - 1];
3074                           n_candidates -= 1;
3075                         }
3076                       else
3077                         j += 1;
3078                     }
3079                 }
3080             }
3081
3082           if (n_candidates == 0)
3083             error (_("No definition found for %s"),
3084                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3085           else if (n_candidates == 1)
3086             i = 0;
3087           else if (deprocedure_p
3088                    && !is_nonfunction (candidates, n_candidates))
3089             {
3090               i = ada_resolve_function
3091                 (candidates, n_candidates, NULL, 0,
3092                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3093                  context_type);
3094               if (i < 0)
3095                 error (_("Could not find a match for %s"),
3096                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3097             }
3098           else
3099             {
3100               printf_filtered (_("Multiple matches for %s\n"),
3101                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3102               user_select_syms (candidates, n_candidates, 1);
3103               i = 0;
3104             }
3105
3106           exp->elts[pc + 1].block = candidates[i].block;
3107           exp->elts[pc + 2].symbol = candidates[i].sym;
3108           if (innermost_block == NULL
3109               || contained_in (candidates[i].block, innermost_block))
3110             innermost_block = candidates[i].block;
3111         }
3112
3113       if (deprocedure_p
3114           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3115               == TYPE_CODE_FUNC))
3116         {
3117           replace_operator_with_call (expp, pc, 0, 0,
3118                                       exp->elts[pc + 2].symbol,
3119                                       exp->elts[pc + 1].block);
3120           exp = *expp;
3121         }
3122       break;
3123
3124     case OP_FUNCALL:
3125       {
3126         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3127             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3128           {
3129             struct ada_symbol_info *candidates;
3130             int n_candidates;
3131
3132             n_candidates =
3133               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3134                                       (exp->elts[pc + 5].symbol),
3135                                       exp->elts[pc + 4].block, VAR_DOMAIN,
3136                                       &candidates);
3137             if (n_candidates == 1)
3138               i = 0;
3139             else
3140               {
3141                 i = ada_resolve_function
3142                   (candidates, n_candidates,
3143                    argvec, nargs,
3144                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3145                    context_type);
3146                 if (i < 0)
3147                   error (_("Could not find a match for %s"),
3148                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3149               }
3150
3151             exp->elts[pc + 4].block = candidates[i].block;
3152             exp->elts[pc + 5].symbol = candidates[i].sym;
3153             if (innermost_block == NULL
3154                 || contained_in (candidates[i].block, innermost_block))
3155               innermost_block = candidates[i].block;
3156           }
3157       }
3158       break;
3159     case BINOP_ADD:
3160     case BINOP_SUB:
3161     case BINOP_MUL:
3162     case BINOP_DIV:
3163     case BINOP_REM:
3164     case BINOP_MOD:
3165     case BINOP_CONCAT:
3166     case BINOP_BITWISE_AND:
3167     case BINOP_BITWISE_IOR:
3168     case BINOP_BITWISE_XOR:
3169     case BINOP_EQUAL:
3170     case BINOP_NOTEQUAL:
3171     case BINOP_LESS:
3172     case BINOP_GTR:
3173     case BINOP_LEQ:
3174     case BINOP_GEQ:
3175     case BINOP_EXP:
3176     case UNOP_NEG:
3177     case UNOP_PLUS:
3178     case UNOP_LOGICAL_NOT:
3179     case UNOP_ABS:
3180       if (possible_user_operator_p (op, argvec))
3181         {
3182           struct ada_symbol_info *candidates;
3183           int n_candidates;
3184
3185           n_candidates =
3186             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3187                                     (struct block *) NULL, VAR_DOMAIN,
3188                                     &candidates);
3189           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3190                                     ada_decoded_op_name (op), NULL);
3191           if (i < 0)
3192             break;
3193
3194           replace_operator_with_call (expp, pc, nargs, 1,
3195                                       candidates[i].sym, candidates[i].block);
3196           exp = *expp;
3197         }
3198       break;
3199
3200     case OP_TYPE:
3201     case OP_REGISTER:
3202       return NULL;
3203     }
3204
3205   *pos = pc;
3206   return evaluate_subexp_type (exp, pos);
3207 }
3208
3209 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3210    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3211    a non-pointer.  */
3212 /* The term "match" here is rather loose.  The match is heuristic and
3213    liberal.  */
3214
3215 static int
3216 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3217 {
3218   ftype = ada_check_typedef (ftype);
3219   atype = ada_check_typedef (atype);
3220
3221   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3222     ftype = TYPE_TARGET_TYPE (ftype);
3223   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3224     atype = TYPE_TARGET_TYPE (atype);
3225
3226   switch (TYPE_CODE (ftype))
3227     {
3228     default:
3229       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3230     case TYPE_CODE_PTR:
3231       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3232         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3233                                TYPE_TARGET_TYPE (atype), 0);
3234       else
3235         return (may_deref
3236                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3237     case TYPE_CODE_INT:
3238     case TYPE_CODE_ENUM:
3239     case TYPE_CODE_RANGE:
3240       switch (TYPE_CODE (atype))
3241         {
3242         case TYPE_CODE_INT:
3243         case TYPE_CODE_ENUM:
3244         case TYPE_CODE_RANGE:
3245           return 1;
3246         default:
3247           return 0;
3248         }
3249
3250     case TYPE_CODE_ARRAY:
3251       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3252               || ada_is_array_descriptor_type (atype));
3253
3254     case TYPE_CODE_STRUCT:
3255       if (ada_is_array_descriptor_type (ftype))
3256         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3257                 || ada_is_array_descriptor_type (atype));
3258       else
3259         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3260                 && !ada_is_array_descriptor_type (atype));
3261
3262     case TYPE_CODE_UNION:
3263     case TYPE_CODE_FLT:
3264       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3265     }
3266 }
3267
3268 /* Return non-zero if the formals of FUNC "sufficiently match" the
3269    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3270    may also be an enumeral, in which case it is treated as a 0-
3271    argument function.  */
3272
3273 static int
3274 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3275 {
3276   int i;
3277   struct type *func_type = SYMBOL_TYPE (func);
3278
3279   if (SYMBOL_CLASS (func) == LOC_CONST
3280       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3281     return (n_actuals == 0);
3282   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3283     return 0;
3284
3285   if (TYPE_NFIELDS (func_type) != n_actuals)
3286     return 0;
3287
3288   for (i = 0; i < n_actuals; i += 1)
3289     {
3290       if (actuals[i] == NULL)
3291         return 0;
3292       else
3293         {
3294           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3295                                                                    i));
3296           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3297
3298           if (!ada_type_match (ftype, atype, 1))
3299             return 0;
3300         }
3301     }
3302   return 1;
3303 }
3304
3305 /* False iff function type FUNC_TYPE definitely does not produce a value
3306    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3307    FUNC_TYPE is not a valid function type with a non-null return type
3308    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3309
3310 static int
3311 return_match (struct type *func_type, struct type *context_type)
3312 {
3313   struct type *return_type;
3314
3315   if (func_type == NULL)
3316     return 1;
3317
3318   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3319     return_type = base_type (TYPE_TARGET_TYPE (func_type));
3320   else
3321     return_type = base_type (func_type);
3322   if (return_type == NULL)
3323     return 1;
3324
3325   context_type = base_type (context_type);
3326
3327   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3328     return context_type == NULL || return_type == context_type;
3329   else if (context_type == NULL)
3330     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3331   else
3332     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3333 }
3334
3335
3336 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3337    function (if any) that matches the types of the NARGS arguments in
3338    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3339    that returns that type, then eliminate matches that don't.  If
3340    CONTEXT_TYPE is void and there is at least one match that does not
3341    return void, eliminate all matches that do.
3342
3343    Asks the user if there is more than one match remaining.  Returns -1
3344    if there is no such symbol or none is selected.  NAME is used
3345    solely for messages.  May re-arrange and modify SYMS in
3346    the process; the index returned is for the modified vector.  */
3347
3348 static int
3349 ada_resolve_function (struct ada_symbol_info syms[],
3350                       int nsyms, struct value **args, int nargs,
3351                       const char *name, struct type *context_type)
3352 {
3353   int fallback;
3354   int k;
3355   int m;                        /* Number of hits */
3356
3357   m = 0;
3358   /* In the first pass of the loop, we only accept functions matching
3359      context_type.  If none are found, we add a second pass of the loop
3360      where every function is accepted.  */
3361   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3362     {
3363       for (k = 0; k < nsyms; k += 1)
3364         {
3365           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3366
3367           if (ada_args_match (syms[k].sym, args, nargs)
3368               && (fallback || return_match (type, context_type)))
3369             {
3370               syms[m] = syms[k];
3371               m += 1;
3372             }
3373         }
3374     }
3375
3376   if (m == 0)
3377     return -1;
3378   else if (m > 1)
3379     {
3380       printf_filtered (_("Multiple matches for %s\n"), name);
3381       user_select_syms (syms, m, 1);
3382       return 0;
3383     }
3384   return 0;
3385 }
3386
3387 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3388    in a listing of choices during disambiguation (see sort_choices, below).
3389    The idea is that overloadings of a subprogram name from the
3390    same package should sort in their source order.  We settle for ordering
3391    such symbols by their trailing number (__N  or $N).  */
3392
3393 static int
3394 encoded_ordered_before (char *N0, char *N1)
3395 {
3396   if (N1 == NULL)
3397     return 0;
3398   else if (N0 == NULL)
3399     return 1;
3400   else
3401     {
3402       int k0, k1;
3403
3404       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3405         ;
3406       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3407         ;
3408       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3409           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3410         {
3411           int n0, n1;
3412
3413           n0 = k0;
3414           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3415             n0 -= 1;
3416           n1 = k1;
3417           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3418             n1 -= 1;
3419           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3420             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3421         }
3422       return (strcmp (N0, N1) < 0);
3423     }
3424 }
3425
3426 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3427    encoded names.  */
3428
3429 static void
3430 sort_choices (struct ada_symbol_info syms[], int nsyms)
3431 {
3432   int i;
3433
3434   for (i = 1; i < nsyms; i += 1)
3435     {
3436       struct ada_symbol_info sym = syms[i];
3437       int j;
3438
3439       for (j = i - 1; j >= 0; j -= 1)
3440         {
3441           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3442                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3443             break;
3444           syms[j + 1] = syms[j];
3445         }
3446       syms[j + 1] = sym;
3447     }
3448 }
3449
3450 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3451    by asking the user (if necessary), returning the number selected, 
3452    and setting the first elements of SYMS items.  Error if no symbols
3453    selected.  */
3454
3455 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3456    to be re-integrated one of these days.  */
3457
3458 int
3459 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3460 {
3461   int i;
3462   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3463   int n_chosen;
3464   int first_choice = (max_results == 1) ? 1 : 2;
3465   const char *select_mode = multiple_symbols_select_mode ();
3466
3467   if (max_results < 1)
3468     error (_("Request to select 0 symbols!"));
3469   if (nsyms <= 1)
3470     return nsyms;
3471
3472   if (select_mode == multiple_symbols_cancel)
3473     error (_("\
3474 canceled because the command is ambiguous\n\
3475 See set/show multiple-symbol."));
3476   
3477   /* If select_mode is "all", then return all possible symbols.
3478      Only do that if more than one symbol can be selected, of course.
3479      Otherwise, display the menu as usual.  */
3480   if (select_mode == multiple_symbols_all && max_results > 1)
3481     return nsyms;
3482
3483   printf_unfiltered (_("[0] cancel\n"));
3484   if (max_results > 1)
3485     printf_unfiltered (_("[1] all\n"));
3486
3487   sort_choices (syms, nsyms);
3488
3489   for (i = 0; i < nsyms; i += 1)
3490     {
3491       if (syms[i].sym == NULL)
3492         continue;
3493
3494       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3495         {
3496           struct symtab_and_line sal =
3497             find_function_start_sal (syms[i].sym, 1);
3498
3499           if (sal.symtab == NULL)
3500             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3501                                i + first_choice,
3502                                SYMBOL_PRINT_NAME (syms[i].sym),
3503                                sal.line);
3504           else
3505             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3506                                SYMBOL_PRINT_NAME (syms[i].sym),
3507                                sal.symtab->filename, sal.line);
3508           continue;
3509         }
3510       else
3511         {
3512           int is_enumeral =
3513             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3514              && SYMBOL_TYPE (syms[i].sym) != NULL
3515              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3516           struct symtab *symtab = syms[i].sym->symtab;
3517
3518           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3519             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3520                                i + first_choice,
3521                                SYMBOL_PRINT_NAME (syms[i].sym),
3522                                symtab->filename, SYMBOL_LINE (syms[i].sym));
3523           else if (is_enumeral
3524                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3525             {
3526               printf_unfiltered (("[%d] "), i + first_choice);
3527               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3528                               gdb_stdout, -1, 0);
3529               printf_unfiltered (_("'(%s) (enumeral)\n"),
3530                                  SYMBOL_PRINT_NAME (syms[i].sym));
3531             }
3532           else if (symtab != NULL)
3533             printf_unfiltered (is_enumeral
3534                                ? _("[%d] %s in %s (enumeral)\n")
3535                                : _("[%d] %s at %s:?\n"),
3536                                i + first_choice,
3537                                SYMBOL_PRINT_NAME (syms[i].sym),
3538                                symtab->filename);
3539           else
3540             printf_unfiltered (is_enumeral
3541                                ? _("[%d] %s (enumeral)\n")
3542                                : _("[%d] %s at ?\n"),
3543                                i + first_choice,
3544                                SYMBOL_PRINT_NAME (syms[i].sym));
3545         }
3546     }
3547
3548   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3549                              "overload-choice");
3550
3551   for (i = 0; i < n_chosen; i += 1)
3552     syms[i] = syms[chosen[i]];
3553
3554   return n_chosen;
3555 }
3556
3557 /* Read and validate a set of numeric choices from the user in the
3558    range 0 .. N_CHOICES-1.  Place the results in increasing
3559    order in CHOICES[0 .. N-1], and return N.
3560
3561    The user types choices as a sequence of numbers on one line
3562    separated by blanks, encoding them as follows:
3563
3564      + A choice of 0 means to cancel the selection, throwing an error.
3565      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3566      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3567
3568    The user is not allowed to choose more than MAX_RESULTS values.
3569
3570    ANNOTATION_SUFFIX, if present, is used to annotate the input
3571    prompts (for use with the -f switch).  */
3572
3573 int
3574 get_selections (int *choices, int n_choices, int max_results,
3575                 int is_all_choice, char *annotation_suffix)
3576 {
3577   char *args;
3578   char *prompt;
3579   int n_chosen;
3580   int first_choice = is_all_choice ? 2 : 1;
3581
3582   prompt = getenv ("PS2");
3583   if (prompt == NULL)
3584     prompt = "> ";
3585
3586   args = command_line_input (prompt, 0, annotation_suffix);
3587
3588   if (args == NULL)
3589     error_no_arg (_("one or more choice numbers"));
3590
3591   n_chosen = 0;
3592
3593   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3594      order, as given in args.  Choices are validated.  */
3595   while (1)
3596     {
3597       char *args2;
3598       int choice, j;
3599
3600       while (isspace (*args))
3601         args += 1;
3602       if (*args == '\0' && n_chosen == 0)
3603         error_no_arg (_("one or more choice numbers"));
3604       else if (*args == '\0')
3605         break;
3606
3607       choice = strtol (args, &args2, 10);
3608       if (args == args2 || choice < 0
3609           || choice > n_choices + first_choice - 1)
3610         error (_("Argument must be choice number"));
3611       args = args2;
3612
3613       if (choice == 0)
3614         error (_("cancelled"));
3615
3616       if (choice < first_choice)
3617         {
3618           n_chosen = n_choices;
3619           for (j = 0; j < n_choices; j += 1)
3620             choices[j] = j;
3621           break;
3622         }
3623       choice -= first_choice;
3624
3625       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3626         {
3627         }
3628
3629       if (j < 0 || choice != choices[j])
3630         {
3631           int k;
3632
3633           for (k = n_chosen - 1; k > j; k -= 1)
3634             choices[k + 1] = choices[k];
3635           choices[j + 1] = choice;
3636           n_chosen += 1;
3637         }
3638     }
3639
3640   if (n_chosen > max_results)
3641     error (_("Select no more than %d of the above"), max_results);
3642
3643   return n_chosen;
3644 }
3645
3646 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3647    on the function identified by SYM and BLOCK, and taking NARGS
3648    arguments.  Update *EXPP as needed to hold more space.  */
3649
3650 static void
3651 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3652                             int oplen, struct symbol *sym,
3653                             struct block *block)
3654 {
3655   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3656      symbol, -oplen for operator being replaced).  */
3657   struct expression *newexp = (struct expression *)
3658     xmalloc (sizeof (struct expression)
3659              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3660   struct expression *exp = *expp;
3661
3662   newexp->nelts = exp->nelts + 7 - oplen;
3663   newexp->language_defn = exp->language_defn;
3664   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3665   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3666           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3667
3668   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3669   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3670
3671   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3672   newexp->elts[pc + 4].block = block;
3673   newexp->elts[pc + 5].symbol = sym;
3674
3675   *expp = newexp;
3676   xfree (exp);
3677 }
3678
3679 /* Type-class predicates */
3680
3681 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3682    or FLOAT).  */
3683
3684 static int
3685 numeric_type_p (struct type *type)
3686 {
3687   if (type == NULL)
3688     return 0;
3689   else
3690     {
3691       switch (TYPE_CODE (type))
3692         {
3693         case TYPE_CODE_INT:
3694         case TYPE_CODE_FLT:
3695           return 1;
3696         case TYPE_CODE_RANGE:
3697           return (type == TYPE_TARGET_TYPE (type)
3698                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3699         default:
3700           return 0;
3701         }
3702     }
3703 }
3704
3705 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3706
3707 static int
3708 integer_type_p (struct type *type)
3709 {
3710   if (type == NULL)
3711     return 0;
3712   else
3713     {
3714       switch (TYPE_CODE (type))
3715         {
3716         case TYPE_CODE_INT:
3717           return 1;
3718         case TYPE_CODE_RANGE:
3719           return (type == TYPE_TARGET_TYPE (type)
3720                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3721         default:
3722           return 0;
3723         }
3724     }
3725 }
3726
3727 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3728
3729 static int
3730 scalar_type_p (struct type *type)
3731 {
3732   if (type == NULL)
3733     return 0;
3734   else
3735     {
3736       switch (TYPE_CODE (type))
3737         {
3738         case TYPE_CODE_INT:
3739         case TYPE_CODE_RANGE:
3740         case TYPE_CODE_ENUM:
3741         case TYPE_CODE_FLT:
3742           return 1;
3743         default:
3744           return 0;
3745         }
3746     }
3747 }
3748
3749 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3750
3751 static int
3752 discrete_type_p (struct type *type)
3753 {
3754   if (type == NULL)
3755     return 0;
3756   else
3757     {
3758       switch (TYPE_CODE (type))
3759         {
3760         case TYPE_CODE_INT:
3761         case TYPE_CODE_RANGE:
3762         case TYPE_CODE_ENUM:
3763         case TYPE_CODE_BOOL:
3764           return 1;
3765         default:
3766           return 0;
3767         }
3768     }
3769 }
3770
3771 /* Returns non-zero if OP with operands in the vector ARGS could be
3772    a user-defined function.  Errs on the side of pre-defined operators
3773    (i.e., result 0).  */
3774
3775 static int
3776 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3777 {
3778   struct type *type0 =
3779     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3780   struct type *type1 =
3781     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3782
3783   if (type0 == NULL)
3784     return 0;
3785
3786   switch (op)
3787     {
3788     default:
3789       return 0;
3790
3791     case BINOP_ADD:
3792     case BINOP_SUB:
3793     case BINOP_MUL:
3794     case BINOP_DIV:
3795       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3796
3797     case BINOP_REM:
3798     case BINOP_MOD:
3799     case BINOP_BITWISE_AND:
3800     case BINOP_BITWISE_IOR:
3801     case BINOP_BITWISE_XOR:
3802       return (!(integer_type_p (type0) && integer_type_p (type1)));
3803
3804     case BINOP_EQUAL:
3805     case BINOP_NOTEQUAL:
3806     case BINOP_LESS:
3807     case BINOP_GTR:
3808     case BINOP_LEQ:
3809     case BINOP_GEQ:
3810       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3811
3812     case BINOP_CONCAT:
3813       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3814
3815     case BINOP_EXP:
3816       return (!(numeric_type_p (type0) && integer_type_p (type1)));
3817
3818     case UNOP_NEG:
3819     case UNOP_PLUS:
3820     case UNOP_LOGICAL_NOT:
3821     case UNOP_ABS:
3822       return (!numeric_type_p (type0));
3823
3824     }
3825 }
3826 \f
3827                                 /* Renaming */
3828
3829 /* NOTES: 
3830
3831    1. In the following, we assume that a renaming type's name may
3832       have an ___XD suffix.  It would be nice if this went away at some
3833       point.
3834    2. We handle both the (old) purely type-based representation of 
3835       renamings and the (new) variable-based encoding.  At some point,
3836       it is devoutly to be hoped that the former goes away 
3837       (FIXME: hilfinger-2007-07-09).
3838    3. Subprogram renamings are not implemented, although the XRS
3839       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
3840
3841 /* If SYM encodes a renaming, 
3842
3843        <renaming> renames <renamed entity>,
3844
3845    sets *LEN to the length of the renamed entity's name,
3846    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3847    the string describing the subcomponent selected from the renamed
3848    entity.  Returns ADA_NOT_RENAMING if SYM does not encode a renaming
3849    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3850    are undefined).  Otherwise, returns a value indicating the category
3851    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3852    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3853    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
3854    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3855    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3856    may be NULL, in which case they are not assigned.
3857
3858    [Currently, however, GCC does not generate subprogram renamings.]  */
3859
3860 enum ada_renaming_category
3861 ada_parse_renaming (struct symbol *sym,
3862                     const char **renamed_entity, int *len, 
3863                     const char **renaming_expr)
3864 {
3865   enum ada_renaming_category kind;
3866   const char *info;
3867   const char *suffix;
3868
3869   if (sym == NULL)
3870     return ADA_NOT_RENAMING;
3871   switch (SYMBOL_CLASS (sym)) 
3872     {
3873     default:
3874       return ADA_NOT_RENAMING;
3875     case LOC_TYPEDEF:
3876       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
3877                                        renamed_entity, len, renaming_expr);
3878     case LOC_LOCAL:
3879     case LOC_STATIC:
3880     case LOC_COMPUTED:
3881     case LOC_OPTIMIZED_OUT:
3882       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3883       if (info == NULL)
3884         return ADA_NOT_RENAMING;
3885       switch (info[5])
3886         {
3887         case '_':
3888           kind = ADA_OBJECT_RENAMING;
3889           info += 6;
3890           break;
3891         case 'E':
3892           kind = ADA_EXCEPTION_RENAMING;
3893           info += 7;
3894           break;
3895         case 'P':
3896           kind = ADA_PACKAGE_RENAMING;
3897           info += 7;
3898           break;
3899         case 'S':
3900           kind = ADA_SUBPROGRAM_RENAMING;
3901           info += 7;
3902           break;
3903         default:
3904           return ADA_NOT_RENAMING;
3905         }
3906     }
3907
3908   if (renamed_entity != NULL)
3909     *renamed_entity = info;
3910   suffix = strstr (info, "___XE");
3911   if (suffix == NULL || suffix == info)
3912     return ADA_NOT_RENAMING;
3913   if (len != NULL)
3914     *len = strlen (info) - strlen (suffix);
3915   suffix += 5;
3916   if (renaming_expr != NULL)
3917     *renaming_expr = suffix;
3918   return kind;
3919 }
3920
3921 /* Assuming TYPE encodes a renaming according to the old encoding in
3922    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3923    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
3924    ADA_NOT_RENAMING otherwise.  */
3925 static enum ada_renaming_category
3926 parse_old_style_renaming (struct type *type,
3927                           const char **renamed_entity, int *len, 
3928                           const char **renaming_expr)
3929 {
3930   enum ada_renaming_category kind;
3931   const char *name;
3932   const char *info;
3933   const char *suffix;
3934
3935   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
3936       || TYPE_NFIELDS (type) != 1)
3937     return ADA_NOT_RENAMING;
3938
3939   name = type_name_no_tag (type);
3940   if (name == NULL)
3941     return ADA_NOT_RENAMING;
3942   
3943   name = strstr (name, "___XR");
3944   if (name == NULL)
3945     return ADA_NOT_RENAMING;
3946   switch (name[5])
3947     {
3948     case '\0':
3949     case '_':
3950       kind = ADA_OBJECT_RENAMING;
3951       break;
3952     case 'E':
3953       kind = ADA_EXCEPTION_RENAMING;
3954       break;
3955     case 'P':
3956       kind = ADA_PACKAGE_RENAMING;
3957       break;
3958     case 'S':
3959       kind = ADA_SUBPROGRAM_RENAMING;
3960       break;
3961     default:
3962       return ADA_NOT_RENAMING;
3963     }
3964
3965   info = TYPE_FIELD_NAME (type, 0);
3966   if (info == NULL)
3967     return ADA_NOT_RENAMING;
3968   if (renamed_entity != NULL)
3969     *renamed_entity = info;
3970   suffix = strstr (info, "___XE");
3971   if (renaming_expr != NULL)
3972     *renaming_expr = suffix + 5;
3973   if (suffix == NULL || suffix == info)
3974     return ADA_NOT_RENAMING;
3975   if (len != NULL)
3976     *len = suffix - info;
3977   return kind;
3978 }  
3979
3980 \f
3981
3982                                 /* Evaluation: Function Calls */
3983
3984 /* Return an lvalue containing the value VAL.  This is the identity on
3985    lvalues, and otherwise has the side-effect of allocating memory
3986    in the inferior where a copy of the value contents is copied.  */
3987
3988 static struct value *
3989 ensure_lval (struct value *val)
3990 {
3991   if (VALUE_LVAL (val) == not_lval
3992       || VALUE_LVAL (val) == lval_internalvar)
3993     {
3994       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
3995       const CORE_ADDR addr =
3996         value_as_long (value_allocate_space_in_inferior (len));
3997
3998       set_value_address (val, addr);
3999       VALUE_LVAL (val) = lval_memory;
4000       write_memory (addr, value_contents (val), len);
4001     }
4002
4003   return val;
4004 }
4005
4006 /* Return the value ACTUAL, converted to be an appropriate value for a
4007    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
4008    allocating any necessary descriptors (fat pointers), or copies of
4009    values not residing in memory, updating it as needed.  */
4010
4011 struct value *
4012 ada_convert_actual (struct value *actual, struct type *formal_type0)
4013 {
4014   struct type *actual_type = ada_check_typedef (value_type (actual));
4015   struct type *formal_type = ada_check_typedef (formal_type0);
4016   struct type *formal_target =
4017     TYPE_CODE (formal_type) == TYPE_CODE_PTR
4018     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4019   struct type *actual_target =
4020     TYPE_CODE (actual_type) == TYPE_CODE_PTR
4021     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4022
4023   if (ada_is_array_descriptor_type (formal_target)
4024       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4025     return make_array_descriptor (formal_type, actual);
4026   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4027            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4028     {
4029       struct value *result;
4030
4031       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4032           && ada_is_array_descriptor_type (actual_target))
4033         result = desc_data (actual);
4034       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4035         {
4036           if (VALUE_LVAL (actual) != lval_memory)
4037             {
4038               struct value *val;
4039
4040               actual_type = ada_check_typedef (value_type (actual));
4041               val = allocate_value (actual_type);
4042               memcpy ((char *) value_contents_raw (val),
4043                       (char *) value_contents (actual),
4044                       TYPE_LENGTH (actual_type));
4045               actual = ensure_lval (val);
4046             }
4047           result = value_addr (actual);
4048         }
4049       else
4050         return actual;
4051       return value_cast_pointers (formal_type, result);
4052     }
4053   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4054     return ada_value_ind (actual);
4055
4056   return actual;
4057 }
4058
4059 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4060    type TYPE.  This is usually an inefficient no-op except on some targets
4061    (such as AVR) where the representation of a pointer and an address
4062    differs.  */
4063
4064 static CORE_ADDR
4065 value_pointer (struct value *value, struct type *type)
4066 {
4067   struct gdbarch *gdbarch = get_type_arch (type);
4068   unsigned len = TYPE_LENGTH (type);
4069   gdb_byte *buf = alloca (len);
4070   CORE_ADDR addr;
4071
4072   addr = value_address (value);
4073   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4074   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4075   return addr;
4076 }
4077
4078
4079 /* Push a descriptor of type TYPE for array value ARR on the stack at
4080    *SP, updating *SP to reflect the new descriptor.  Return either
4081    an lvalue representing the new descriptor, or (if TYPE is a pointer-
4082    to-descriptor type rather than a descriptor type), a struct value *
4083    representing a pointer to this descriptor.  */
4084
4085 static struct value *
4086 make_array_descriptor (struct type *type, struct value *arr)
4087 {
4088   struct type *bounds_type = desc_bounds_type (type);
4089   struct type *desc_type = desc_base_type (type);
4090   struct value *descriptor = allocate_value (desc_type);
4091   struct value *bounds = allocate_value (bounds_type);
4092   int i;
4093
4094   for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4095        i > 0; i -= 1)
4096     {
4097       modify_field (value_type (bounds), value_contents_writeable (bounds),
4098                     ada_array_bound (arr, i, 0),
4099                     desc_bound_bitpos (bounds_type, i, 0),
4100                     desc_bound_bitsize (bounds_type, i, 0));
4101       modify_field (value_type (bounds), value_contents_writeable (bounds),
4102                     ada_array_bound (arr, i, 1),
4103                     desc_bound_bitpos (bounds_type, i, 1),
4104                     desc_bound_bitsize (bounds_type, i, 1));
4105     }
4106
4107   bounds = ensure_lval (bounds);
4108
4109   modify_field (value_type (descriptor),
4110                 value_contents_writeable (descriptor),
4111                 value_pointer (ensure_lval (arr),
4112                                TYPE_FIELD_TYPE (desc_type, 0)),
4113                 fat_pntr_data_bitpos (desc_type),
4114                 fat_pntr_data_bitsize (desc_type));
4115
4116   modify_field (value_type (descriptor),
4117                 value_contents_writeable (descriptor),
4118                 value_pointer (bounds,
4119                                TYPE_FIELD_TYPE (desc_type, 1)),
4120                 fat_pntr_bounds_bitpos (desc_type),
4121                 fat_pntr_bounds_bitsize (desc_type));
4122
4123   descriptor = ensure_lval (descriptor);
4124
4125   if (TYPE_CODE (type) == TYPE_CODE_PTR)
4126     return value_addr (descriptor);
4127   else
4128     return descriptor;
4129 }
4130 \f
4131 /* Dummy definitions for an experimental caching module that is not
4132  * used in the public sources.  */
4133
4134 static int
4135 lookup_cached_symbol (const char *name, domain_enum namespace,
4136                       struct symbol **sym, struct block **block)
4137 {
4138   return 0;
4139 }
4140
4141 static void
4142 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
4143               struct block *block)
4144 {
4145 }
4146 \f
4147                                 /* Symbol Lookup */
4148
4149 /* Return the result of a standard (literal, C-like) lookup of NAME in
4150    given DOMAIN, visible from lexical block BLOCK.  */
4151
4152 static struct symbol *
4153 standard_lookup (const char *name, const struct block *block,
4154                  domain_enum domain)
4155 {
4156   struct symbol *sym;
4157
4158   if (lookup_cached_symbol (name, domain, &sym, NULL))
4159     return sym;
4160   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4161   cache_symbol (name, domain, sym, block_found);
4162   return sym;
4163 }
4164
4165
4166 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4167    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4168    since they contend in overloading in the same way.  */
4169 static int
4170 is_nonfunction (struct ada_symbol_info syms[], int n)
4171 {
4172   int i;
4173
4174   for (i = 0; i < n; i += 1)
4175     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4176         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4177             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4178       return 1;
4179
4180   return 0;
4181 }
4182
4183 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4184    struct types.  Otherwise, they may not.  */
4185
4186 static int
4187 equiv_types (struct type *type0, struct type *type1)
4188 {
4189   if (type0 == type1)
4190     return 1;
4191   if (type0 == NULL || type1 == NULL
4192       || TYPE_CODE (type0) != TYPE_CODE (type1))
4193     return 0;
4194   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4195        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4196       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4197       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4198     return 1;
4199
4200   return 0;
4201 }
4202
4203 /* True iff SYM0 represents the same entity as SYM1, or one that is
4204    no more defined than that of SYM1.  */
4205
4206 static int
4207 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4208 {
4209   if (sym0 == sym1)
4210     return 1;
4211   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4212       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4213     return 0;
4214
4215   switch (SYMBOL_CLASS (sym0))
4216     {
4217     case LOC_UNDEF:
4218       return 1;
4219     case LOC_TYPEDEF:
4220       {
4221         struct type *type0 = SYMBOL_TYPE (sym0);
4222         struct type *type1 = SYMBOL_TYPE (sym1);
4223         char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4224         char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4225         int len0 = strlen (name0);
4226
4227         return
4228           TYPE_CODE (type0) == TYPE_CODE (type1)
4229           && (equiv_types (type0, type1)
4230               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4231                   && strncmp (name1 + len0, "___XV", 5) == 0));
4232       }
4233     case LOC_CONST:
4234       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4235         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4236     default:
4237       return 0;
4238     }
4239 }
4240
4241 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4242    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4243
4244 static void
4245 add_defn_to_vec (struct obstack *obstackp,
4246                  struct symbol *sym,
4247                  struct block *block)
4248 {
4249   int i;
4250   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4251
4252   /* Do not try to complete stub types, as the debugger is probably
4253      already scanning all symbols matching a certain name at the
4254      time when this function is called.  Trying to replace the stub
4255      type by its associated full type will cause us to restart a scan
4256      which may lead to an infinite recursion.  Instead, the client
4257      collecting the matching symbols will end up collecting several
4258      matches, with at least one of them complete.  It can then filter
4259      out the stub ones if needed.  */
4260
4261   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4262     {
4263       if (lesseq_defined_than (sym, prevDefns[i].sym))
4264         return;
4265       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4266         {
4267           prevDefns[i].sym = sym;
4268           prevDefns[i].block = block;
4269           return;
4270         }
4271     }
4272
4273   {
4274     struct ada_symbol_info info;
4275
4276     info.sym = sym;
4277     info.block = block;
4278     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4279   }
4280 }
4281
4282 /* Number of ada_symbol_info structures currently collected in 
4283    current vector in *OBSTACKP.  */
4284
4285 static int
4286 num_defns_collected (struct obstack *obstackp)
4287 {
4288   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4289 }
4290
4291 /* Vector of ada_symbol_info structures currently collected in current 
4292    vector in *OBSTACKP.  If FINISH, close off the vector and return
4293    its final address.  */
4294
4295 static struct ada_symbol_info *
4296 defns_collected (struct obstack *obstackp, int finish)
4297 {
4298   if (finish)
4299     return obstack_finish (obstackp);
4300   else
4301     return (struct ada_symbol_info *) obstack_base (obstackp);
4302 }
4303
4304 /* Return a minimal symbol matching NAME according to Ada decoding
4305    rules.  Returns NULL if there is no such minimal symbol.  Names 
4306    prefixed with "standard__" are handled specially: "standard__" is 
4307    first stripped off, and only static and global symbols are searched.  */
4308
4309 struct minimal_symbol *
4310 ada_lookup_simple_minsym (const char *name)
4311 {
4312   struct objfile *objfile;
4313   struct minimal_symbol *msymbol;
4314   int wild_match;
4315
4316   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4317     {
4318       name += sizeof ("standard__") - 1;
4319       wild_match = 0;
4320     }
4321   else
4322     wild_match = (strstr (name, "__") == NULL);
4323
4324   ALL_MSYMBOLS (objfile, msymbol)
4325   {
4326     if (match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4327         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4328       return msymbol;
4329   }
4330
4331   return NULL;
4332 }
4333
4334 /* For all subprograms that statically enclose the subprogram of the
4335    selected frame, add symbols matching identifier NAME in DOMAIN
4336    and their blocks to the list of data in OBSTACKP, as for
4337    ada_add_block_symbols (q.v.).   If WILD, treat as NAME with a
4338    wildcard prefix.  */
4339
4340 static void
4341 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4342                                   const char *name, domain_enum namespace,
4343                                   int wild_match)
4344 {
4345 }
4346
4347 /* True if TYPE is definitely an artificial type supplied to a symbol
4348    for which no debugging information was given in the symbol file.  */
4349
4350 static int
4351 is_nondebugging_type (struct type *type)
4352 {
4353   char *name = ada_type_name (type);
4354
4355   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4356 }
4357
4358 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4359    duplicate other symbols in the list (The only case I know of where
4360    this happens is when object files containing stabs-in-ecoff are
4361    linked with files containing ordinary ecoff debugging symbols (or no
4362    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4363    Returns the number of items in the modified list.  */
4364
4365 static int
4366 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4367 {
4368   int i, j;
4369
4370   i = 0;
4371   while (i < nsyms)
4372     {
4373       int remove = 0;
4374
4375       /* If two symbols have the same name and one of them is a stub type,
4376          the get rid of the stub.  */
4377
4378       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4379           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4380         {
4381           for (j = 0; j < nsyms; j++)
4382             {
4383               if (j != i
4384                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4385                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4386                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4387                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4388                 remove = 1;
4389             }
4390         }
4391
4392       /* Two symbols with the same name, same class and same address
4393          should be identical.  */
4394
4395       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4396           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4397           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4398         {
4399           for (j = 0; j < nsyms; j += 1)
4400             {
4401               if (i != j
4402                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4403                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4404                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4405                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4406                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4407                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4408                 remove = 1;
4409             }
4410         }
4411       
4412       if (remove)
4413         {
4414           for (j = i + 1; j < nsyms; j += 1)
4415             syms[j - 1] = syms[j];
4416           nsyms -= 1;
4417         }
4418
4419       i += 1;
4420     }
4421   return nsyms;
4422 }
4423
4424 /* Given a type that corresponds to a renaming entity, use the type name
4425    to extract the scope (package name or function name, fully qualified,
4426    and following the GNAT encoding convention) where this renaming has been
4427    defined.  The string returned needs to be deallocated after use.  */
4428
4429 static char *
4430 xget_renaming_scope (struct type *renaming_type)
4431 {
4432   /* The renaming types adhere to the following convention:
4433      <scope>__<rename>___<XR extension>.
4434      So, to extract the scope, we search for the "___XR" extension,
4435      and then backtrack until we find the first "__".  */
4436
4437   const char *name = type_name_no_tag (renaming_type);
4438   char *suffix = strstr (name, "___XR");
4439   char *last;
4440   int scope_len;
4441   char *scope;
4442
4443   /* Now, backtrack a bit until we find the first "__".  Start looking
4444      at suffix - 3, as the <rename> part is at least one character long.  */
4445
4446   for (last = suffix - 3; last > name; last--)
4447     if (last[0] == '_' && last[1] == '_')
4448       break;
4449
4450   /* Make a copy of scope and return it.  */
4451
4452   scope_len = last - name;
4453   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4454
4455   strncpy (scope, name, scope_len);
4456   scope[scope_len] = '\0';
4457
4458   return scope;
4459 }
4460
4461 /* Return nonzero if NAME corresponds to a package name.  */
4462
4463 static int
4464 is_package_name (const char *name)
4465 {
4466   /* Here, We take advantage of the fact that no symbols are generated
4467      for packages, while symbols are generated for each function.
4468      So the condition for NAME represent a package becomes equivalent
4469      to NAME not existing in our list of symbols.  There is only one
4470      small complication with library-level functions (see below).  */
4471
4472   char *fun_name;
4473
4474   /* If it is a function that has not been defined at library level,
4475      then we should be able to look it up in the symbols.  */
4476   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4477     return 0;
4478
4479   /* Library-level function names start with "_ada_".  See if function
4480      "_ada_" followed by NAME can be found.  */
4481
4482   /* Do a quick check that NAME does not contain "__", since library-level
4483      functions names cannot contain "__" in them.  */
4484   if (strstr (name, "__") != NULL)
4485     return 0;
4486
4487   fun_name = xstrprintf ("_ada_%s", name);
4488
4489   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4490 }
4491
4492 /* Return nonzero if SYM corresponds to a renaming entity that is
4493    not visible from FUNCTION_NAME.  */
4494
4495 static int
4496 old_renaming_is_invisible (const struct symbol *sym, char *function_name)
4497 {
4498   char *scope;
4499
4500   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4501     return 0;
4502
4503   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4504
4505   make_cleanup (xfree, scope);
4506
4507   /* If the rename has been defined in a package, then it is visible.  */
4508   if (is_package_name (scope))
4509     return 0;
4510
4511   /* Check that the rename is in the current function scope by checking
4512      that its name starts with SCOPE.  */
4513
4514   /* If the function name starts with "_ada_", it means that it is
4515      a library-level function.  Strip this prefix before doing the
4516      comparison, as the encoding for the renaming does not contain
4517      this prefix.  */
4518   if (strncmp (function_name, "_ada_", 5) == 0)
4519     function_name += 5;
4520
4521   return (strncmp (function_name, scope, strlen (scope)) != 0);
4522 }
4523
4524 /* Remove entries from SYMS that corresponds to a renaming entity that
4525    is not visible from the function associated with CURRENT_BLOCK or
4526    that is superfluous due to the presence of more specific renaming
4527    information.  Places surviving symbols in the initial entries of
4528    SYMS and returns the number of surviving symbols.
4529    
4530    Rationale:
4531    First, in cases where an object renaming is implemented as a
4532    reference variable, GNAT may produce both the actual reference
4533    variable and the renaming encoding.  In this case, we discard the
4534    latter.
4535
4536    Second, GNAT emits a type following a specified encoding for each renaming
4537    entity.  Unfortunately, STABS currently does not support the definition
4538    of types that are local to a given lexical block, so all renamings types
4539    are emitted at library level.  As a consequence, if an application
4540    contains two renaming entities using the same name, and a user tries to
4541    print the value of one of these entities, the result of the ada symbol
4542    lookup will also contain the wrong renaming type.
4543
4544    This function partially covers for this limitation by attempting to
4545    remove from the SYMS list renaming symbols that should be visible
4546    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
4547    method with the current information available.  The implementation
4548    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
4549    
4550       - When the user tries to print a rename in a function while there
4551         is another rename entity defined in a package:  Normally, the
4552         rename in the function has precedence over the rename in the
4553         package, so the latter should be removed from the list.  This is
4554         currently not the case.
4555         
4556       - This function will incorrectly remove valid renames if
4557         the CURRENT_BLOCK corresponds to a function which symbol name
4558         has been changed by an "Export" pragma.  As a consequence,
4559         the user will be unable to print such rename entities.  */
4560
4561 static int
4562 remove_irrelevant_renamings (struct ada_symbol_info *syms,
4563                              int nsyms, const struct block *current_block)
4564 {
4565   struct symbol *current_function;
4566   char *current_function_name;
4567   int i;
4568   int is_new_style_renaming;
4569
4570   /* If there is both a renaming foo___XR... encoded as a variable and
4571      a simple variable foo in the same block, discard the latter.
4572      First, zero out such symbols, then compress.  */
4573   is_new_style_renaming = 0;
4574   for (i = 0; i < nsyms; i += 1)
4575     {
4576       struct symbol *sym = syms[i].sym;
4577       struct block *block = syms[i].block;
4578       const char *name;
4579       const char *suffix;
4580
4581       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4582         continue;
4583       name = SYMBOL_LINKAGE_NAME (sym);
4584       suffix = strstr (name, "___XR");
4585
4586       if (suffix != NULL)
4587         {
4588           int name_len = suffix - name;
4589           int j;
4590
4591           is_new_style_renaming = 1;
4592           for (j = 0; j < nsyms; j += 1)
4593             if (i != j && syms[j].sym != NULL
4594                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4595                             name_len) == 0
4596                 && block == syms[j].block)
4597               syms[j].sym = NULL;
4598         }
4599     }
4600   if (is_new_style_renaming)
4601     {
4602       int j, k;
4603
4604       for (j = k = 0; j < nsyms; j += 1)
4605         if (syms[j].sym != NULL)
4606             {
4607               syms[k] = syms[j];
4608               k += 1;
4609             }
4610       return k;
4611     }
4612
4613   /* Extract the function name associated to CURRENT_BLOCK.
4614      Abort if unable to do so.  */
4615
4616   if (current_block == NULL)
4617     return nsyms;
4618
4619   current_function = block_linkage_function (current_block);
4620   if (current_function == NULL)
4621     return nsyms;
4622
4623   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4624   if (current_function_name == NULL)
4625     return nsyms;
4626
4627   /* Check each of the symbols, and remove it from the list if it is
4628      a type corresponding to a renaming that is out of the scope of
4629      the current block.  */
4630
4631   i = 0;
4632   while (i < nsyms)
4633     {
4634       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4635           == ADA_OBJECT_RENAMING
4636           && old_renaming_is_invisible (syms[i].sym, current_function_name))
4637         {
4638           int j;
4639
4640           for (j = i + 1; j < nsyms; j += 1)
4641             syms[j - 1] = syms[j];
4642           nsyms -= 1;
4643         }
4644       else
4645         i += 1;
4646     }
4647
4648   return nsyms;
4649 }
4650
4651 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
4652    whose name and domain match NAME and DOMAIN respectively.
4653    If no match was found, then extend the search to "enclosing"
4654    routines (in other words, if we're inside a nested function,
4655    search the symbols defined inside the enclosing functions).
4656
4657    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
4658
4659 static void
4660 ada_add_local_symbols (struct obstack *obstackp, const char *name,
4661                        struct block *block, domain_enum domain,
4662                        int wild_match)
4663 {
4664   int block_depth = 0;
4665
4666   while (block != NULL)
4667     {
4668       block_depth += 1;
4669       ada_add_block_symbols (obstackp, block, name, domain, NULL, wild_match);
4670
4671       /* If we found a non-function match, assume that's the one.  */
4672       if (is_nonfunction (defns_collected (obstackp, 0),
4673                           num_defns_collected (obstackp)))
4674         return;
4675
4676       block = BLOCK_SUPERBLOCK (block);
4677     }
4678
4679   /* If no luck so far, try to find NAME as a local symbol in some lexically
4680      enclosing subprogram.  */
4681   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
4682     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match);
4683 }
4684
4685 /* An object of this type is used as the user_data argument when
4686    calling the map_matching_symbols method.  */
4687
4688 struct match_data
4689 {
4690   struct objfile *objfile;
4691   struct obstack *obstackp;
4692   struct symbol *arg_sym;
4693   int found_sym;
4694 };
4695
4696 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
4697    to a list of symbols.  DATA0 is a pointer to a struct match_data *
4698    containing the obstack that collects the symbol list, the file that SYM
4699    must come from, a flag indicating whether a non-argument symbol has
4700    been found in the current block, and the last argument symbol
4701    passed in SYM within the current block (if any).  When SYM is null,
4702    marking the end of a block, the argument symbol is added if no
4703    other has been found.  */
4704
4705 static int
4706 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
4707 {
4708   struct match_data *data = (struct match_data *) data0;
4709   
4710   if (sym == NULL)
4711     {
4712       if (!data->found_sym && data->arg_sym != NULL) 
4713         add_defn_to_vec (data->obstackp,
4714                          fixup_symbol_section (data->arg_sym, data->objfile),
4715                          block);
4716       data->found_sym = 0;
4717       data->arg_sym = NULL;
4718     }
4719   else 
4720     {
4721       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
4722         return 0;
4723       else if (SYMBOL_IS_ARGUMENT (sym))
4724         data->arg_sym = sym;
4725       else
4726         {
4727           data->found_sym = 1;
4728           add_defn_to_vec (data->obstackp,
4729                            fixup_symbol_section (sym, data->objfile),
4730                            block);
4731         }
4732     }
4733   return 0;
4734 }
4735
4736 /* Compare STRING1 to STRING2, with results as for strcmp.
4737    Compatible with strcmp_iw in that strcmp_iw (STRING1, STRING2) <= 0
4738    implies compare_names (STRING1, STRING2) (they may differ as to
4739    what symbols compare equal).  */
4740
4741 static int
4742 compare_names (const char *string1, const char *string2)
4743 {
4744   while (*string1 != '\0' && *string2 != '\0')
4745     {
4746       if (isspace (*string1) || isspace (*string2))
4747         return strcmp_iw_ordered (string1, string2);
4748       if (*string1 != *string2)
4749         break;
4750       string1 += 1;
4751       string2 += 1;
4752     }
4753   switch (*string1)
4754     {
4755     case '(':
4756       return strcmp_iw_ordered (string1, string2);
4757     case '_':
4758       if (*string2 == '\0')
4759         {
4760           if (is_name_suffix (string2))
4761             return 0;
4762           else
4763             return -1;
4764         }
4765       /* FALLTHROUGH */
4766     default:
4767       if (*string2 == '(')
4768         return strcmp_iw_ordered (string1, string2);
4769       else
4770         return *string1 - *string2;
4771     }
4772 }
4773
4774 /* Add to OBSTACKP all non-local symbols whose name and domain match
4775    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
4776    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
4777
4778 static void
4779 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
4780                       domain_enum domain, int global,
4781                       int is_wild_match)
4782 {
4783   struct objfile *objfile;
4784   struct match_data data;
4785
4786   data.obstackp = obstackp;
4787   data.arg_sym = NULL;
4788
4789   ALL_OBJFILES (objfile)
4790     {
4791       data.objfile = objfile;
4792
4793       if (is_wild_match)
4794         objfile->sf->qf->map_matching_symbols (name, domain, objfile, global,
4795                                                aux_add_nonlocal_symbols, &data,
4796                                                wild_match, NULL);
4797       else
4798         objfile->sf->qf->map_matching_symbols (name, domain, objfile, global,
4799                                                aux_add_nonlocal_symbols, &data,
4800                                                full_match, compare_names);
4801     }
4802
4803   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
4804     {
4805       ALL_OBJFILES (objfile)
4806         {
4807           char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
4808           strcpy (name1, "_ada_");
4809           strcpy (name1 + sizeof ("_ada_") - 1, name);
4810           data.objfile = objfile;
4811           objfile->sf->qf->map_matching_symbols (name1, domain,
4812                                                  objfile, global,
4813                                                  aux_add_nonlocal_symbols,
4814                                                  &data,
4815                                                  full_match, compare_names);
4816         }
4817     }           
4818 }
4819
4820 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4821    scope and in global scopes, returning the number of matches.  Sets
4822    *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4823    indicating the symbols found and the blocks and symbol tables (if
4824    any) in which they were found.  This vector are transient---good only to 
4825    the next call of ada_lookup_symbol_list.  Any non-function/non-enumeral 
4826    symbol match within the nest of blocks whose innermost member is BLOCK0,
4827    is the one match returned (no other matches in that or
4828      enclosing blocks is returned).  If there are any matches in or
4829    surrounding BLOCK0, then these alone are returned.  Otherwise, the
4830    search extends to global and file-scope (static) symbol tables.
4831    Names prefixed with "standard__" are handled specially: "standard__" 
4832    is first stripped off, and only static and global symbols are searched.  */
4833
4834 int
4835 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4836                         domain_enum namespace,
4837                         struct ada_symbol_info **results)
4838 {
4839   struct symbol *sym;
4840   struct block *block;
4841   const char *name;
4842   int wild_match;
4843   int cacheIfUnique;
4844   int ndefns;
4845
4846   obstack_free (&symbol_list_obstack, NULL);
4847   obstack_init (&symbol_list_obstack);
4848
4849   cacheIfUnique = 0;
4850
4851   /* Search specified block and its superiors.  */
4852
4853   wild_match = (strstr (name0, "__") == NULL);
4854   name = name0;
4855   block = (struct block *) block0;      /* FIXME: No cast ought to be
4856                                            needed, but adding const will
4857                                            have a cascade effect.  */
4858
4859   /* Special case: If the user specifies a symbol name inside package
4860      Standard, do a non-wild matching of the symbol name without
4861      the "standard__" prefix.  This was primarily introduced in order
4862      to allow the user to specifically access the standard exceptions
4863      using, for instance, Standard.Constraint_Error when Constraint_Error
4864      is ambiguous (due to the user defining its own Constraint_Error
4865      entity inside its program).  */
4866   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4867     {
4868       wild_match = 0;
4869       block = NULL;
4870       name = name0 + sizeof ("standard__") - 1;
4871     }
4872
4873   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
4874
4875   ada_add_local_symbols (&symbol_list_obstack, name, block, namespace,
4876                          wild_match);
4877   if (num_defns_collected (&symbol_list_obstack) > 0)
4878     goto done;
4879
4880   /* No non-global symbols found.  Check our cache to see if we have
4881      already performed this search before.  If we have, then return
4882      the same result.  */
4883
4884   cacheIfUnique = 1;
4885   if (lookup_cached_symbol (name0, namespace, &sym, &block))
4886     {
4887       if (sym != NULL)
4888         add_defn_to_vec (&symbol_list_obstack, sym, block);
4889       goto done;
4890     }
4891
4892   /* Search symbols from all global blocks.  */
4893  
4894   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
4895                         wild_match);
4896
4897   /* Now add symbols from all per-file blocks if we've gotten no hits
4898      (not strictly correct, but perhaps better than an error).  */
4899
4900   if (num_defns_collected (&symbol_list_obstack) == 0)
4901     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
4902                           wild_match);
4903
4904 done:
4905   ndefns = num_defns_collected (&symbol_list_obstack);
4906   *results = defns_collected (&symbol_list_obstack, 1);
4907
4908   ndefns = remove_extra_symbols (*results, ndefns);
4909
4910   if (ndefns == 0)
4911     cache_symbol (name0, namespace, NULL, NULL);
4912
4913   if (ndefns == 1 && cacheIfUnique)
4914     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
4915
4916   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
4917
4918   return ndefns;
4919 }
4920
4921 struct symbol *
4922 ada_lookup_encoded_symbol (const char *name, const struct block *block0,
4923                            domain_enum namespace, struct block **block_found)
4924 {
4925   struct ada_symbol_info *candidates;
4926   int n_candidates;
4927
4928   n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
4929
4930   if (n_candidates == 0)
4931     return NULL;
4932
4933   if (block_found != NULL)
4934     *block_found = candidates[0].block;
4935
4936   return fixup_symbol_section (candidates[0].sym, NULL);
4937 }  
4938
4939 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4940    scope and in global scopes, or NULL if none.  NAME is folded and
4941    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
4942    choosing the first symbol if there are multiple choices.
4943    *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4944    table in which the symbol was found (in both cases, these
4945    assignments occur only if the pointers are non-null).  */
4946 struct symbol *
4947 ada_lookup_symbol (const char *name, const struct block *block0,
4948                    domain_enum namespace, int *is_a_field_of_this)
4949 {
4950   if (is_a_field_of_this != NULL)
4951     *is_a_field_of_this = 0;
4952
4953   return
4954     ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
4955                                block0, namespace, NULL);
4956 }
4957
4958 static struct symbol *
4959 ada_lookup_symbol_nonlocal (const char *name,
4960                             const struct block *block,
4961                             const domain_enum domain)
4962 {
4963   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
4964 }
4965
4966
4967 /* True iff STR is a possible encoded suffix of a normal Ada name
4968    that is to be ignored for matching purposes.  Suffixes of parallel
4969    names (e.g., XVE) are not included here.  Currently, the possible suffixes
4970    are given by any of the regular expressions:
4971
4972    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
4973    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
4974    _E[0-9]+[bs]$    [protected object entry suffixes]
4975    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
4976
4977    Also, any leading "__[0-9]+" sequence is skipped before the suffix
4978    match is performed.  This sequence is used to differentiate homonyms,
4979    is an optional part of a valid name suffix.  */
4980
4981 static int
4982 is_name_suffix (const char *str)
4983 {
4984   int k;
4985   const char *matching;
4986   const int len = strlen (str);
4987
4988   /* Skip optional leading __[0-9]+.  */
4989
4990   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4991     {
4992       str += 3;
4993       while (isdigit (str[0]))
4994         str += 1;
4995     }
4996   
4997   /* [.$][0-9]+ */
4998
4999   if (str[0] == '.' || str[0] == '$')
5000     {
5001       matching = str + 1;
5002       while (isdigit (matching[0]))
5003         matching += 1;
5004       if (matching[0] == '\0')
5005         return 1;
5006     }
5007
5008   /* ___[0-9]+ */
5009
5010   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5011     {
5012       matching = str + 3;
5013       while (isdigit (matching[0]))
5014         matching += 1;
5015       if (matching[0] == '\0')
5016         return 1;
5017     }
5018
5019 #if 0
5020   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5021      with a N at the end.  Unfortunately, the compiler uses the same
5022      convention for other internal types it creates.  So treating
5023      all entity names that end with an "N" as a name suffix causes
5024      some regressions.  For instance, consider the case of an enumerated
5025      type.  To support the 'Image attribute, it creates an array whose
5026      name ends with N.
5027      Having a single character like this as a suffix carrying some
5028      information is a bit risky.  Perhaps we should change the encoding
5029      to be something like "_N" instead.  In the meantime, do not do
5030      the following check.  */
5031   /* Protected Object Subprograms */
5032   if (len == 1 && str [0] == 'N')
5033     return 1;
5034 #endif
5035
5036   /* _E[0-9]+[bs]$ */
5037   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5038     {
5039       matching = str + 3;
5040       while (isdigit (matching[0]))
5041         matching += 1;
5042       if ((matching[0] == 'b' || matching[0] == 's')
5043           && matching [1] == '\0')
5044         return 1;
5045     }
5046
5047   /* ??? We should not modify STR directly, as we are doing below.  This
5048      is fine in this case, but may become problematic later if we find
5049      that this alternative did not work, and want to try matching
5050      another one from the begining of STR.  Since we modified it, we
5051      won't be able to find the begining of the string anymore!  */
5052   if (str[0] == 'X')
5053     {
5054       str += 1;
5055       while (str[0] != '_' && str[0] != '\0')
5056         {
5057           if (str[0] != 'n' && str[0] != 'b')
5058             return 0;
5059           str += 1;
5060         }
5061     }
5062
5063   if (str[0] == '\000')
5064     return 1;
5065
5066   if (str[0] == '_')
5067     {
5068       if (str[1] != '_' || str[2] == '\000')
5069         return 0;
5070       if (str[2] == '_')
5071         {
5072           if (strcmp (str + 3, "JM") == 0)
5073             return 1;
5074           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5075              the LJM suffix in favor of the JM one.  But we will
5076              still accept LJM as a valid suffix for a reasonable
5077              amount of time, just to allow ourselves to debug programs
5078              compiled using an older version of GNAT.  */
5079           if (strcmp (str + 3, "LJM") == 0)
5080             return 1;
5081           if (str[3] != 'X')
5082             return 0;
5083           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5084               || str[4] == 'U' || str[4] == 'P')
5085             return 1;
5086           if (str[4] == 'R' && str[5] != 'T')
5087             return 1;
5088           return 0;
5089         }
5090       if (!isdigit (str[2]))
5091         return 0;
5092       for (k = 3; str[k] != '\0'; k += 1)
5093         if (!isdigit (str[k]) && str[k] != '_')
5094           return 0;
5095       return 1;
5096     }
5097   if (str[0] == '$' && isdigit (str[1]))
5098     {
5099       for (k = 2; str[k] != '\0'; k += 1)
5100         if (!isdigit (str[k]) && str[k] != '_')
5101           return 0;
5102       return 1;
5103     }
5104   return 0;
5105 }
5106
5107 /* Return non-zero if the string starting at NAME and ending before
5108    NAME_END contains no capital letters.  */
5109
5110 static int
5111 is_valid_name_for_wild_match (const char *name0)
5112 {
5113   const char *decoded_name = ada_decode (name0);
5114   int i;
5115
5116   /* If the decoded name starts with an angle bracket, it means that
5117      NAME0 does not follow the GNAT encoding format.  It should then
5118      not be allowed as a possible wild match.  */
5119   if (decoded_name[0] == '<')
5120     return 0;
5121
5122   for (i=0; decoded_name[i] != '\0'; i++)
5123     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5124       return 0;
5125
5126   return 1;
5127 }
5128
5129 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5130    that could start a simple name.  Assumes that *NAMEP points into
5131    the string beginning at NAME0.  */
5132
5133 static int
5134 advance_wild_match (const char **namep, const char *name0, int target0)
5135 {
5136   const char *name = *namep;
5137
5138   while (1)
5139     {
5140       int t0, t1;
5141
5142       t0 = *name;
5143       if (t0 == '_')
5144         {
5145           t1 = name[1];
5146           if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5147             {
5148               name += 1;
5149               if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5150                 break;
5151               else
5152                 name += 1;
5153             }
5154           else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5155                                  || name[2] == target0))
5156             {
5157               name += 2;
5158               break;
5159             }
5160           else
5161             return 0;
5162         }
5163       else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5164         name += 1;
5165       else
5166         return 0;
5167     }
5168
5169   *namep = name;
5170   return 1;
5171 }
5172
5173 /* Return 0 iff NAME encodes a name of the form prefix.PATN.  Ignores any
5174    informational suffixes of NAME (i.e., for which is_name_suffix is
5175    true).  Assumes that PATN is a lower-cased Ada simple name.  */
5176
5177 static int
5178 wild_match (const char *name, const char *patn)
5179 {
5180   const char *p, *n;
5181   const char *name0 = name;
5182
5183   while (1)
5184     {
5185       const char *match = name;
5186
5187       if (*name == *patn)
5188         {
5189           for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5190             if (*p != *name)
5191               break;
5192           if (*p == '\0' && is_name_suffix (name))
5193             return match != name0 && !is_valid_name_for_wild_match (name0);
5194
5195           if (name[-1] == '_')
5196             name -= 1;
5197         }
5198       if (!advance_wild_match (&name, name0, *patn))
5199         return 1;
5200     }
5201 }
5202
5203 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5204    informational suffix.  */
5205
5206 static int
5207 full_match (const char *sym_name, const char *search_name)
5208 {
5209   return !match_name (sym_name, search_name, 0);
5210 }
5211
5212
5213 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5214    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5215    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
5216    OBJFILE is the section containing BLOCK.
5217    SYMTAB is recorded with each symbol added.  */
5218
5219 static void
5220 ada_add_block_symbols (struct obstack *obstackp,
5221                        struct block *block, const char *name,
5222                        domain_enum domain, struct objfile *objfile,
5223                        int wild)
5224 {
5225   struct dict_iterator iter;
5226   int name_len = strlen (name);
5227   /* A matching argument symbol, if any.  */
5228   struct symbol *arg_sym;
5229   /* Set true when we find a matching non-argument symbol.  */
5230   int found_sym;
5231   struct symbol *sym;
5232
5233   arg_sym = NULL;
5234   found_sym = 0;
5235   if (wild)
5236     {
5237       for (sym = dict_iter_match_first (BLOCK_DICT (block), name,
5238                                         wild_match, &iter);
5239            sym != NULL; sym = dict_iter_match_next (name, wild_match, &iter))
5240       {
5241         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5242                                    SYMBOL_DOMAIN (sym), domain)
5243             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5244           {
5245             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5246               continue;
5247             else if (SYMBOL_IS_ARGUMENT (sym))
5248               arg_sym = sym;
5249             else
5250               {
5251                 found_sym = 1;
5252                 add_defn_to_vec (obstackp,
5253                                  fixup_symbol_section (sym, objfile),
5254                                  block);
5255               }
5256           }
5257       }
5258     }
5259   else
5260     {
5261      for (sym = dict_iter_match_first (BLOCK_DICT (block), name,
5262                                        full_match, &iter);
5263            sym != NULL; sym = dict_iter_match_next (name, full_match, &iter))
5264       {
5265         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5266                                    SYMBOL_DOMAIN (sym), domain))
5267           {
5268             if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5269               {
5270                 if (SYMBOL_IS_ARGUMENT (sym))
5271                   arg_sym = sym;
5272                 else
5273                   {
5274                     found_sym = 1;
5275                     add_defn_to_vec (obstackp,
5276                                      fixup_symbol_section (sym, objfile),
5277                                      block);
5278                   }
5279               }
5280           }
5281       }
5282     }
5283
5284   if (!found_sym && arg_sym != NULL)
5285     {
5286       add_defn_to_vec (obstackp,
5287                        fixup_symbol_section (arg_sym, objfile),
5288                        block);
5289     }
5290
5291   if (!wild)
5292     {
5293       arg_sym = NULL;
5294       found_sym = 0;
5295
5296       ALL_BLOCK_SYMBOLS (block, iter, sym)
5297       {
5298         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5299                                    SYMBOL_DOMAIN (sym), domain))
5300           {
5301             int cmp;
5302
5303             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5304             if (cmp == 0)
5305               {
5306                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5307                 if (cmp == 0)
5308                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5309                                  name_len);
5310               }
5311
5312             if (cmp == 0
5313                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5314               {
5315                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5316                   {
5317                     if (SYMBOL_IS_ARGUMENT (sym))
5318                       arg_sym = sym;
5319                     else
5320                       {
5321                         found_sym = 1;
5322                         add_defn_to_vec (obstackp,
5323                                          fixup_symbol_section (sym, objfile),
5324                                          block);
5325                       }
5326                   }
5327               }
5328           }
5329       }
5330
5331       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5332          They aren't parameters, right?  */
5333       if (!found_sym && arg_sym != NULL)
5334         {
5335           add_defn_to_vec (obstackp,
5336                            fixup_symbol_section (arg_sym, objfile),
5337                            block);
5338         }
5339     }
5340 }
5341 \f
5342
5343                                 /* Symbol Completion */
5344
5345 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5346    name in a form that's appropriate for the completion.  The result
5347    does not need to be deallocated, but is only good until the next call.
5348
5349    TEXT_LEN is equal to the length of TEXT.
5350    Perform a wild match if WILD_MATCH is set.
5351    ENCODED should be set if TEXT represents the start of a symbol name
5352    in its encoded form.  */
5353
5354 static const char *
5355 symbol_completion_match (const char *sym_name,
5356                          const char *text, int text_len,
5357                          int wild_match, int encoded)
5358 {
5359   const int verbatim_match = (text[0] == '<');
5360   int match = 0;
5361
5362   if (verbatim_match)
5363     {
5364       /* Strip the leading angle bracket.  */
5365       text = text + 1;
5366       text_len--;
5367     }
5368
5369   /* First, test against the fully qualified name of the symbol.  */
5370
5371   if (strncmp (sym_name, text, text_len) == 0)
5372     match = 1;
5373
5374   if (match && !encoded)
5375     {
5376       /* One needed check before declaring a positive match is to verify
5377          that iff we are doing a verbatim match, the decoded version
5378          of the symbol name starts with '<'.  Otherwise, this symbol name
5379          is not a suitable completion.  */
5380       const char *sym_name_copy = sym_name;
5381       int has_angle_bracket;
5382
5383       sym_name = ada_decode (sym_name);
5384       has_angle_bracket = (sym_name[0] == '<');
5385       match = (has_angle_bracket == verbatim_match);
5386       sym_name = sym_name_copy;
5387     }
5388
5389   if (match && !verbatim_match)
5390     {
5391       /* When doing non-verbatim match, another check that needs to
5392          be done is to verify that the potentially matching symbol name
5393          does not include capital letters, because the ada-mode would
5394          not be able to understand these symbol names without the
5395          angle bracket notation.  */
5396       const char *tmp;
5397
5398       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5399       if (*tmp != '\0')
5400         match = 0;
5401     }
5402
5403   /* Second: Try wild matching...  */
5404
5405   if (!match && wild_match)
5406     {
5407       /* Since we are doing wild matching, this means that TEXT
5408          may represent an unqualified symbol name.  We therefore must
5409          also compare TEXT against the unqualified name of the symbol.  */
5410       sym_name = ada_unqualified_name (ada_decode (sym_name));
5411
5412       if (strncmp (sym_name, text, text_len) == 0)
5413         match = 1;
5414     }
5415
5416   /* Finally: If we found a mach, prepare the result to return.  */
5417
5418   if (!match)
5419     return NULL;
5420
5421   if (verbatim_match)
5422     sym_name = add_angle_brackets (sym_name);
5423
5424   if (!encoded)
5425     sym_name = ada_decode (sym_name);
5426
5427   return sym_name;
5428 }
5429
5430 DEF_VEC_P (char_ptr);
5431
5432 /* A companion function to ada_make_symbol_completion_list().
5433    Check if SYM_NAME represents a symbol which name would be suitable
5434    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5435    it is appended at the end of the given string vector SV.
5436
5437    ORIG_TEXT is the string original string from the user command
5438    that needs to be completed.  WORD is the entire command on which
5439    completion should be performed.  These two parameters are used to
5440    determine which part of the symbol name should be added to the
5441    completion vector.
5442    if WILD_MATCH is set, then wild matching is performed.
5443    ENCODED should be set if TEXT represents a symbol name in its
5444    encoded formed (in which case the completion should also be
5445    encoded).  */
5446
5447 static void
5448 symbol_completion_add (VEC(char_ptr) **sv,
5449                        const char *sym_name,
5450                        const char *text, int text_len,
5451                        const char *orig_text, const char *word,
5452                        int wild_match, int encoded)
5453 {
5454   const char *match = symbol_completion_match (sym_name, text, text_len,
5455                                                wild_match, encoded);
5456   char *completion;
5457
5458   if (match == NULL)
5459     return;
5460
5461   /* We found a match, so add the appropriate completion to the given
5462      string vector.  */
5463
5464   if (word == orig_text)
5465     {
5466       completion = xmalloc (strlen (match) + 5);
5467       strcpy (completion, match);
5468     }
5469   else if (word > orig_text)
5470     {
5471       /* Return some portion of sym_name.  */
5472       completion = xmalloc (strlen (match) + 5);
5473       strcpy (completion, match + (word - orig_text));
5474     }
5475   else
5476     {
5477       /* Return some of ORIG_TEXT plus sym_name.  */
5478       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5479       strncpy (completion, word, orig_text - word);
5480       completion[orig_text - word] = '\0';
5481       strcat (completion, match);
5482     }
5483
5484   VEC_safe_push (char_ptr, *sv, completion);
5485 }
5486
5487 /* An object of this type is passed as the user_data argument to the
5488    map_partial_symbol_names method.  */
5489 struct add_partial_datum
5490 {
5491   VEC(char_ptr) **completions;
5492   char *text;
5493   int text_len;
5494   char *text0;
5495   char *word;
5496   int wild_match;
5497   int encoded;
5498 };
5499
5500 /* A callback for map_partial_symbol_names.  */
5501 static void
5502 ada_add_partial_symbol_completions (const char *name, void *user_data)
5503 {
5504   struct add_partial_datum *data = user_data;
5505
5506   symbol_completion_add (data->completions, name,
5507                          data->text, data->text_len, data->text0, data->word,
5508                          data->wild_match, data->encoded);
5509 }
5510
5511 /* Return a list of possible symbol names completing TEXT0.  The list
5512    is NULL terminated.  WORD is the entire command on which completion
5513    is made.  */
5514
5515 static char **
5516 ada_make_symbol_completion_list (char *text0, char *word)
5517 {
5518   char *text;
5519   int text_len;
5520   int wild_match;
5521   int encoded;
5522   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
5523   struct symbol *sym;
5524   struct symtab *s;
5525   struct minimal_symbol *msymbol;
5526   struct objfile *objfile;
5527   struct block *b, *surrounding_static_block = 0;
5528   int i;
5529   struct dict_iterator iter;
5530
5531   if (text0[0] == '<')
5532     {
5533       text = xstrdup (text0);
5534       make_cleanup (xfree, text);
5535       text_len = strlen (text);
5536       wild_match = 0;
5537       encoded = 1;
5538     }
5539   else
5540     {
5541       text = xstrdup (ada_encode (text0));
5542       make_cleanup (xfree, text);
5543       text_len = strlen (text);
5544       for (i = 0; i < text_len; i++)
5545         text[i] = tolower (text[i]);
5546
5547       encoded = (strstr (text0, "__") != NULL);
5548       /* If the name contains a ".", then the user is entering a fully
5549          qualified entity name, and the match must not be done in wild
5550          mode.  Similarly, if the user wants to complete what looks like
5551          an encoded name, the match must not be done in wild mode.  */
5552       wild_match = (strchr (text0, '.') == NULL && !encoded);
5553     }
5554
5555   /* First, look at the partial symtab symbols.  */
5556   {
5557     struct add_partial_datum data;
5558
5559     data.completions = &completions;
5560     data.text = text;
5561     data.text_len = text_len;
5562     data.text0 = text0;
5563     data.word = word;
5564     data.wild_match = wild_match;
5565     data.encoded = encoded;
5566     map_partial_symbol_names (ada_add_partial_symbol_completions, &data);
5567   }
5568
5569   /* At this point scan through the misc symbol vectors and add each
5570      symbol you find to the list.  Eventually we want to ignore
5571      anything that isn't a text symbol (everything else will be
5572      handled by the psymtab code above).  */
5573
5574   ALL_MSYMBOLS (objfile, msymbol)
5575   {
5576     QUIT;
5577     symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
5578                            text, text_len, text0, word, wild_match, encoded);
5579   }
5580
5581   /* Search upwards from currently selected frame (so that we can
5582      complete on local vars.  */
5583
5584   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5585     {
5586       if (!BLOCK_SUPERBLOCK (b))
5587         surrounding_static_block = b;   /* For elmin of dups */
5588
5589       ALL_BLOCK_SYMBOLS (b, iter, sym)
5590       {
5591         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5592                                text, text_len, text0, word,
5593                                wild_match, encoded);
5594       }
5595     }
5596
5597   /* Go through the symtabs and check the externs and statics for
5598      symbols which match.  */
5599
5600   ALL_SYMTABS (objfile, s)
5601   {
5602     QUIT;
5603     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5604     ALL_BLOCK_SYMBOLS (b, iter, sym)
5605     {
5606       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5607                              text, text_len, text0, word,
5608                              wild_match, encoded);
5609     }
5610   }
5611
5612   ALL_SYMTABS (objfile, s)
5613   {
5614     QUIT;
5615     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5616     /* Don't do this block twice.  */
5617     if (b == surrounding_static_block)
5618       continue;
5619     ALL_BLOCK_SYMBOLS (b, iter, sym)
5620     {
5621       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5622                              text, text_len, text0, word,
5623                              wild_match, encoded);
5624     }
5625   }
5626
5627   /* Append the closing NULL entry.  */
5628   VEC_safe_push (char_ptr, completions, NULL);
5629
5630   /* Make a copy of the COMPLETIONS VEC before we free it, and then
5631      return the copy.  It's unfortunate that we have to make a copy
5632      of an array that we're about to destroy, but there is nothing much
5633      we can do about it.  Fortunately, it's typically not a very large
5634      array.  */
5635   {
5636     const size_t completions_size = 
5637       VEC_length (char_ptr, completions) * sizeof (char *);
5638     char **result = xmalloc (completions_size);
5639     
5640     memcpy (result, VEC_address (char_ptr, completions), completions_size);
5641
5642     VEC_free (char_ptr, completions);
5643     return result;
5644   }
5645 }
5646
5647                                 /* Field Access */
5648
5649 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
5650    for tagged types.  */
5651
5652 static int
5653 ada_is_dispatch_table_ptr_type (struct type *type)
5654 {
5655   char *name;
5656
5657   if (TYPE_CODE (type) != TYPE_CODE_PTR)
5658     return 0;
5659
5660   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
5661   if (name == NULL)
5662     return 0;
5663
5664   return (strcmp (name, "ada__tags__dispatch_table") == 0);
5665 }
5666
5667 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
5668    to be invisible to users.  */
5669
5670 int
5671 ada_is_ignored_field (struct type *type, int field_num)
5672 {
5673   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5674     return 1;
5675    
5676   /* Check the name of that field.  */
5677   {
5678     const char *name = TYPE_FIELD_NAME (type, field_num);
5679
5680     /* Anonymous field names should not be printed.
5681        brobecker/2007-02-20: I don't think this can actually happen
5682        but we don't want to print the value of annonymous fields anyway.  */
5683     if (name == NULL)
5684       return 1;
5685
5686     /* A field named "_parent" is internally generated by GNAT for
5687        tagged types, and should not be printed either.  */
5688     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
5689       return 1;
5690   }
5691
5692   /* If this is the dispatch table of a tagged type, then ignore.  */
5693   if (ada_is_tagged_type (type, 1)
5694       && ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)))
5695     return 1;
5696
5697   /* Not a special field, so it should not be ignored.  */
5698   return 0;
5699 }
5700
5701 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
5702    pointer or reference type whose ultimate target has a tag field.  */
5703
5704 int
5705 ada_is_tagged_type (struct type *type, int refok)
5706 {
5707   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5708 }
5709
5710 /* True iff TYPE represents the type of X'Tag */
5711
5712 int
5713 ada_is_tag_type (struct type *type)
5714 {
5715   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5716     return 0;
5717   else
5718     {
5719       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5720
5721       return (name != NULL
5722               && strcmp (name, "ada__tags__dispatch_table") == 0);
5723     }
5724 }
5725
5726 /* The type of the tag on VAL.  */
5727
5728 struct type *
5729 ada_tag_type (struct value *val)
5730 {
5731   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
5732 }
5733
5734 /* The value of the tag on VAL.  */
5735
5736 struct value *
5737 ada_value_tag (struct value *val)
5738 {
5739   return ada_value_struct_elt (val, "_tag", 0);
5740 }
5741
5742 /* The value of the tag on the object of type TYPE whose contents are
5743    saved at VALADDR, if it is non-null, or is at memory address
5744    ADDRESS.  */
5745
5746 static struct value *
5747 value_tag_from_contents_and_address (struct type *type,
5748                                      const gdb_byte *valaddr,
5749                                      CORE_ADDR address)
5750 {
5751   int tag_byte_offset;
5752   struct type *tag_type;
5753
5754   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
5755                          NULL, NULL, NULL))
5756     {
5757       const gdb_byte *valaddr1 = ((valaddr == NULL)
5758                                   ? NULL
5759                                   : valaddr + tag_byte_offset);
5760       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
5761
5762       return value_from_contents_and_address (tag_type, valaddr1, address1);
5763     }
5764   return NULL;
5765 }
5766
5767 static struct type *
5768 type_from_tag (struct value *tag)
5769 {
5770   const char *type_name = ada_tag_name (tag);
5771
5772   if (type_name != NULL)
5773     return ada_find_any_type (ada_encode (type_name));
5774   return NULL;
5775 }
5776
5777 struct tag_args
5778 {
5779   struct value *tag;
5780   char *name;
5781 };
5782
5783
5784 static int ada_tag_name_1 (void *);
5785 static int ada_tag_name_2 (struct tag_args *);
5786
5787 /* Wrapper function used by ada_tag_name.  Given a struct tag_args*
5788    value ARGS, sets ARGS->name to the tag name of ARGS->tag.
5789    The value stored in ARGS->name is valid until the next call to 
5790    ada_tag_name_1.  */
5791
5792 static int
5793 ada_tag_name_1 (void *args0)
5794 {
5795   struct tag_args *args = (struct tag_args *) args0;
5796   static char name[1024];
5797   char *p;
5798   struct value *val;
5799
5800   args->name = NULL;
5801   val = ada_value_struct_elt (args->tag, "tsd", 1);
5802   if (val == NULL)
5803     return ada_tag_name_2 (args);
5804   val = ada_value_struct_elt (val, "expanded_name", 1);
5805   if (val == NULL)
5806     return 0;
5807   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5808   for (p = name; *p != '\0'; p += 1)
5809     if (isalpha (*p))
5810       *p = tolower (*p);
5811   args->name = name;
5812   return 0;
5813 }
5814
5815 /* Return the "ada__tags__type_specific_data" type.  */
5816
5817 static struct type *
5818 ada_get_tsd_type (struct inferior *inf)
5819 {
5820   struct ada_inferior_data *data = get_ada_inferior_data (inf);
5821
5822   if (data->tsd_type == 0)
5823     data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
5824   return data->tsd_type;
5825 }
5826
5827 /* Utility function for ada_tag_name_1 that tries the second
5828    representation for the dispatch table (in which there is no
5829    explicit 'tsd' field in the referent of the tag pointer, and instead
5830    the tsd pointer is stored just before the dispatch table.  */
5831    
5832 static int
5833 ada_tag_name_2 (struct tag_args *args)
5834 {
5835   struct type *info_type;
5836   static char name[1024];
5837   char *p;
5838   struct value *val, *valp;
5839
5840   args->name = NULL;
5841   info_type = ada_get_tsd_type (current_inferior());
5842   if (info_type == NULL)
5843     return 0;
5844   info_type = lookup_pointer_type (lookup_pointer_type (info_type));
5845   valp = value_cast (info_type, args->tag);
5846   if (valp == NULL)
5847     return 0;
5848   val = value_ind (value_ptradd (valp, -1));
5849   if (val == NULL)
5850     return 0;
5851   val = ada_value_struct_elt (val, "expanded_name", 1);
5852   if (val == NULL)
5853     return 0;
5854   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5855   for (p = name; *p != '\0'; p += 1)
5856     if (isalpha (*p))
5857       *p = tolower (*p);
5858   args->name = name;
5859   return 0;
5860 }
5861
5862 /* The type name of the dynamic type denoted by the 'tag value TAG, as
5863    a C string.  */
5864
5865 const char *
5866 ada_tag_name (struct value *tag)
5867 {
5868   struct tag_args args;
5869
5870   if (!ada_is_tag_type (value_type (tag)))
5871     return NULL;
5872   args.tag = tag;
5873   args.name = NULL;
5874   catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5875   return args.name;
5876 }
5877
5878 /* The parent type of TYPE, or NULL if none.  */
5879
5880 struct type *
5881 ada_parent_type (struct type *type)
5882 {
5883   int i;
5884
5885   type = ada_check_typedef (type);
5886
5887   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5888     return NULL;
5889
5890   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5891     if (ada_is_parent_field (type, i))
5892       {
5893         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
5894
5895         /* If the _parent field is a pointer, then dereference it.  */
5896         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
5897           parent_type = TYPE_TARGET_TYPE (parent_type);
5898         /* If there is a parallel XVS type, get the actual base type.  */
5899         parent_type = ada_get_base_type (parent_type);
5900
5901         return ada_check_typedef (parent_type);
5902       }
5903
5904   return NULL;
5905 }
5906
5907 /* True iff field number FIELD_NUM of structure type TYPE contains the
5908    parent-type (inherited) fields of a derived type.  Assumes TYPE is
5909    a structure type with at least FIELD_NUM+1 fields.  */
5910
5911 int
5912 ada_is_parent_field (struct type *type, int field_num)
5913 {
5914   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5915
5916   return (name != NULL
5917           && (strncmp (name, "PARENT", 6) == 0
5918               || strncmp (name, "_parent", 7) == 0));
5919 }
5920
5921 /* True iff field number FIELD_NUM of structure type TYPE is a
5922    transparent wrapper field (which should be silently traversed when doing
5923    field selection and flattened when printing).  Assumes TYPE is a
5924    structure type with at least FIELD_NUM+1 fields.  Such fields are always
5925    structures.  */
5926
5927 int
5928 ada_is_wrapper_field (struct type *type, int field_num)
5929 {
5930   const char *name = TYPE_FIELD_NAME (type, field_num);
5931
5932   return (name != NULL
5933           && (strncmp (name, "PARENT", 6) == 0
5934               || strcmp (name, "REP") == 0
5935               || strncmp (name, "_parent", 7) == 0
5936               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5937 }
5938
5939 /* True iff field number FIELD_NUM of structure or union type TYPE
5940    is a variant wrapper.  Assumes TYPE is a structure type with at least
5941    FIELD_NUM+1 fields.  */
5942
5943 int
5944 ada_is_variant_part (struct type *type, int field_num)
5945 {
5946   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5947
5948   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5949           || (is_dynamic_field (type, field_num)
5950               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
5951                   == TYPE_CODE_UNION)));
5952 }
5953
5954 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5955    whose discriminants are contained in the record type OUTER_TYPE,
5956    returns the type of the controlling discriminant for the variant.
5957    May return NULL if the type could not be found.  */
5958
5959 struct type *
5960 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5961 {
5962   char *name = ada_variant_discrim_name (var_type);
5963
5964   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
5965 }
5966
5967 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5968    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5969    represents a 'when others' clause; otherwise 0.  */
5970
5971 int
5972 ada_is_others_clause (struct type *type, int field_num)
5973 {
5974   const char *name = TYPE_FIELD_NAME (type, field_num);
5975
5976   return (name != NULL && name[0] == 'O');
5977 }
5978
5979 /* Assuming that TYPE0 is the type of the variant part of a record,
5980    returns the name of the discriminant controlling the variant.
5981    The value is valid until the next call to ada_variant_discrim_name.  */
5982
5983 char *
5984 ada_variant_discrim_name (struct type *type0)
5985 {
5986   static char *result = NULL;
5987   static size_t result_len = 0;
5988   struct type *type;
5989   const char *name;
5990   const char *discrim_end;
5991   const char *discrim_start;
5992
5993   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5994     type = TYPE_TARGET_TYPE (type0);
5995   else
5996     type = type0;
5997
5998   name = ada_type_name (type);
5999
6000   if (name == NULL || name[0] == '\000')
6001     return "";
6002
6003   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6004        discrim_end -= 1)
6005     {
6006       if (strncmp (discrim_end, "___XVN", 6) == 0)
6007         break;
6008     }
6009   if (discrim_end == name)
6010     return "";
6011
6012   for (discrim_start = discrim_end; discrim_start != name + 3;
6013        discrim_start -= 1)
6014     {
6015       if (discrim_start == name + 1)
6016         return "";
6017       if ((discrim_start > name + 3
6018            && strncmp (discrim_start - 3, "___", 3) == 0)
6019           || discrim_start[-1] == '.')
6020         break;
6021     }
6022
6023   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6024   strncpy (result, discrim_start, discrim_end - discrim_start);
6025   result[discrim_end - discrim_start] = '\0';
6026   return result;
6027 }
6028
6029 /* Scan STR for a subtype-encoded number, beginning at position K.
6030    Put the position of the character just past the number scanned in
6031    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6032    Return 1 if there was a valid number at the given position, and 0
6033    otherwise.  A "subtype-encoded" number consists of the absolute value
6034    in decimal, followed by the letter 'm' to indicate a negative number.
6035    Assumes 0m does not occur.  */
6036
6037 int
6038 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6039 {
6040   ULONGEST RU;
6041
6042   if (!isdigit (str[k]))
6043     return 0;
6044
6045   /* Do it the hard way so as not to make any assumption about
6046      the relationship of unsigned long (%lu scan format code) and
6047      LONGEST.  */
6048   RU = 0;
6049   while (isdigit (str[k]))
6050     {
6051       RU = RU * 10 + (str[k] - '0');
6052       k += 1;
6053     }
6054
6055   if (str[k] == 'm')
6056     {
6057       if (R != NULL)
6058         *R = (-(LONGEST) (RU - 1)) - 1;
6059       k += 1;
6060     }
6061   else if (R != NULL)
6062     *R = (LONGEST) RU;
6063
6064   /* NOTE on the above: Technically, C does not say what the results of
6065      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6066      number representable as a LONGEST (although either would probably work
6067      in most implementations).  When RU>0, the locution in the then branch
6068      above is always equivalent to the negative of RU.  */
6069
6070   if (new_k != NULL)
6071     *new_k = k;
6072   return 1;
6073 }
6074
6075 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6076    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6077    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6078
6079 int
6080 ada_in_variant (LONGEST val, struct type *type, int field_num)
6081 {
6082   const char *name = TYPE_FIELD_NAME (type, field_num);
6083   int p;
6084
6085   p = 0;
6086   while (1)
6087     {
6088       switch (name[p])
6089         {
6090         case '\0':
6091           return 0;
6092         case 'S':
6093           {
6094             LONGEST W;
6095
6096             if (!ada_scan_number (name, p + 1, &W, &p))
6097               return 0;
6098             if (val == W)
6099               return 1;
6100             break;
6101           }
6102         case 'R':
6103           {
6104             LONGEST L, U;
6105
6106             if (!ada_scan_number (name, p + 1, &L, &p)
6107                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6108               return 0;
6109             if (val >= L && val <= U)
6110               return 1;
6111             break;
6112           }
6113         case 'O':
6114           return 1;
6115         default:
6116           return 0;
6117         }
6118     }
6119 }
6120
6121 /* FIXME: Lots of redundancy below.  Try to consolidate.  */
6122
6123 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6124    ARG_TYPE, extract and return the value of one of its (non-static)
6125    fields.  FIELDNO says which field.   Differs from value_primitive_field
6126    only in that it can handle packed values of arbitrary type.  */
6127
6128 static struct value *
6129 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6130                            struct type *arg_type)
6131 {
6132   struct type *type;
6133
6134   arg_type = ada_check_typedef (arg_type);
6135   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6136
6137   /* Handle packed fields.  */
6138
6139   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6140     {
6141       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6142       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6143
6144       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6145                                              offset + bit_pos / 8,
6146                                              bit_pos % 8, bit_size, type);
6147     }
6148   else
6149     return value_primitive_field (arg1, offset, fieldno, arg_type);
6150 }
6151
6152 /* Find field with name NAME in object of type TYPE.  If found, 
6153    set the following for each argument that is non-null:
6154     - *FIELD_TYPE_P to the field's type; 
6155     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6156       an object of that type;
6157     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6158     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6159       0 otherwise;
6160    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6161    fields up to but not including the desired field, or by the total
6162    number of fields if not found.   A NULL value of NAME never
6163    matches; the function just counts visible fields in this case.
6164    
6165    Returns 1 if found, 0 otherwise.  */
6166
6167 static int
6168 find_struct_field (char *name, struct type *type, int offset,
6169                    struct type **field_type_p,
6170                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6171                    int *index_p)
6172 {
6173   int i;
6174
6175   type = ada_check_typedef (type);
6176
6177   if (field_type_p != NULL)
6178     *field_type_p = NULL;
6179   if (byte_offset_p != NULL)
6180     *byte_offset_p = 0;
6181   if (bit_offset_p != NULL)
6182     *bit_offset_p = 0;
6183   if (bit_size_p != NULL)
6184     *bit_size_p = 0;
6185
6186   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6187     {
6188       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6189       int fld_offset = offset + bit_pos / 8;
6190       char *t_field_name = TYPE_FIELD_NAME (type, i);
6191
6192       if (t_field_name == NULL)
6193         continue;
6194
6195       else if (name != NULL && field_name_match (t_field_name, name))
6196         {
6197           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6198
6199           if (field_type_p != NULL)
6200             *field_type_p = TYPE_FIELD_TYPE (type, i);
6201           if (byte_offset_p != NULL)
6202             *byte_offset_p = fld_offset;
6203           if (bit_offset_p != NULL)
6204             *bit_offset_p = bit_pos % 8;
6205           if (bit_size_p != NULL)
6206             *bit_size_p = bit_size;
6207           return 1;
6208         }
6209       else if (ada_is_wrapper_field (type, i))
6210         {
6211           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6212                                  field_type_p, byte_offset_p, bit_offset_p,
6213                                  bit_size_p, index_p))
6214             return 1;
6215         }
6216       else if (ada_is_variant_part (type, i))
6217         {
6218           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6219              fixed type?? */
6220           int j;
6221           struct type *field_type
6222             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6223
6224           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6225             {
6226               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6227                                      fld_offset
6228                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6229                                      field_type_p, byte_offset_p,
6230                                      bit_offset_p, bit_size_p, index_p))
6231                 return 1;
6232             }
6233         }
6234       else if (index_p != NULL)
6235         *index_p += 1;
6236     }
6237   return 0;
6238 }
6239
6240 /* Number of user-visible fields in record type TYPE.  */
6241
6242 static int
6243 num_visible_fields (struct type *type)
6244 {
6245   int n;
6246
6247   n = 0;
6248   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6249   return n;
6250 }
6251
6252 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6253    and search in it assuming it has (class) type TYPE.
6254    If found, return value, else return NULL.
6255
6256    Searches recursively through wrapper fields (e.g., '_parent').  */
6257
6258 static struct value *
6259 ada_search_struct_field (char *name, struct value *arg, int offset,
6260                          struct type *type)
6261 {
6262   int i;
6263
6264   type = ada_check_typedef (type);
6265   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6266     {
6267       char *t_field_name = TYPE_FIELD_NAME (type, i);
6268
6269       if (t_field_name == NULL)
6270         continue;
6271
6272       else if (field_name_match (t_field_name, name))
6273         return ada_value_primitive_field (arg, offset, i, type);
6274
6275       else if (ada_is_wrapper_field (type, i))
6276         {
6277           struct value *v =     /* Do not let indent join lines here.  */
6278             ada_search_struct_field (name, arg,
6279                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
6280                                      TYPE_FIELD_TYPE (type, i));
6281
6282           if (v != NULL)
6283             return v;
6284         }
6285
6286       else if (ada_is_variant_part (type, i))
6287         {
6288           /* PNH: Do we ever get here?  See find_struct_field.  */
6289           int j;
6290           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
6291                                                                         i));
6292           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
6293
6294           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6295             {
6296               struct value *v = ada_search_struct_field /* Force line
6297                                                            break.  */
6298                 (name, arg,
6299                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
6300                  TYPE_FIELD_TYPE (field_type, j));
6301
6302               if (v != NULL)
6303                 return v;
6304             }
6305         }
6306     }
6307   return NULL;
6308 }
6309
6310 static struct value *ada_index_struct_field_1 (int *, struct value *,
6311                                                int, struct type *);
6312
6313
6314 /* Return field #INDEX in ARG, where the index is that returned by
6315  * find_struct_field through its INDEX_P argument.  Adjust the address
6316  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
6317  * If found, return value, else return NULL.  */
6318
6319 static struct value *
6320 ada_index_struct_field (int index, struct value *arg, int offset,
6321                         struct type *type)
6322 {
6323   return ada_index_struct_field_1 (&index, arg, offset, type);
6324 }
6325
6326
6327 /* Auxiliary function for ada_index_struct_field.  Like
6328  * ada_index_struct_field, but takes index from *INDEX_P and modifies
6329  * *INDEX_P.  */
6330
6331 static struct value *
6332 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6333                           struct type *type)
6334 {
6335   int i;
6336   type = ada_check_typedef (type);
6337
6338   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6339     {
6340       if (TYPE_FIELD_NAME (type, i) == NULL)
6341         continue;
6342       else if (ada_is_wrapper_field (type, i))
6343         {
6344           struct value *v =     /* Do not let indent join lines here.  */
6345             ada_index_struct_field_1 (index_p, arg,
6346                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
6347                                       TYPE_FIELD_TYPE (type, i));
6348
6349           if (v != NULL)
6350             return v;
6351         }
6352
6353       else if (ada_is_variant_part (type, i))
6354         {
6355           /* PNH: Do we ever get here?  See ada_search_struct_field,
6356              find_struct_field.  */
6357           error (_("Cannot assign this kind of variant record"));
6358         }
6359       else if (*index_p == 0)
6360         return ada_value_primitive_field (arg, offset, i, type);
6361       else
6362         *index_p -= 1;
6363     }
6364   return NULL;
6365 }
6366
6367 /* Given ARG, a value of type (pointer or reference to a)*
6368    structure/union, extract the component named NAME from the ultimate
6369    target structure/union and return it as a value with its
6370    appropriate type.
6371
6372    The routine searches for NAME among all members of the structure itself
6373    and (recursively) among all members of any wrapper members
6374    (e.g., '_parent').
6375
6376    If NO_ERR, then simply return NULL in case of error, rather than 
6377    calling error.  */
6378
6379 struct value *
6380 ada_value_struct_elt (struct value *arg, char *name, int no_err)
6381 {
6382   struct type *t, *t1;
6383   struct value *v;
6384
6385   v = NULL;
6386   t1 = t = ada_check_typedef (value_type (arg));
6387   if (TYPE_CODE (t) == TYPE_CODE_REF)
6388     {
6389       t1 = TYPE_TARGET_TYPE (t);
6390       if (t1 == NULL)
6391         goto BadValue;
6392       t1 = ada_check_typedef (t1);
6393       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6394         {
6395           arg = coerce_ref (arg);
6396           t = t1;
6397         }
6398     }
6399
6400   while (TYPE_CODE (t) == TYPE_CODE_PTR)
6401     {
6402       t1 = TYPE_TARGET_TYPE (t);
6403       if (t1 == NULL)
6404         goto BadValue;
6405       t1 = ada_check_typedef (t1);
6406       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6407         {
6408           arg = value_ind (arg);
6409           t = t1;
6410         }
6411       else
6412         break;
6413     }
6414
6415   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
6416     goto BadValue;
6417
6418   if (t1 == t)
6419     v = ada_search_struct_field (name, arg, 0, t);
6420   else
6421     {
6422       int bit_offset, bit_size, byte_offset;
6423       struct type *field_type;
6424       CORE_ADDR address;
6425
6426       if (TYPE_CODE (t) == TYPE_CODE_PTR)
6427         address = value_as_address (arg);
6428       else
6429         address = unpack_pointer (t, value_contents (arg));
6430
6431       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
6432       if (find_struct_field (name, t1, 0,
6433                              &field_type, &byte_offset, &bit_offset,
6434                              &bit_size, NULL))
6435         {
6436           if (bit_size != 0)
6437             {
6438               if (TYPE_CODE (t) == TYPE_CODE_REF)
6439                 arg = ada_coerce_ref (arg);
6440               else
6441                 arg = ada_value_ind (arg);
6442               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6443                                                   bit_offset, bit_size,
6444                                                   field_type);
6445             }
6446           else
6447             v = value_at_lazy (field_type, address + byte_offset);
6448         }
6449     }
6450
6451   if (v != NULL || no_err)
6452     return v;
6453   else
6454     error (_("There is no member named %s."), name);
6455
6456  BadValue:
6457   if (no_err)
6458     return NULL;
6459   else
6460     error (_("Attempt to extract a component of "
6461              "a value that is not a record."));
6462 }
6463
6464 /* Given a type TYPE, look up the type of the component of type named NAME.
6465    If DISPP is non-null, add its byte displacement from the beginning of a
6466    structure (pointed to by a value) of type TYPE to *DISPP (does not
6467    work for packed fields).
6468
6469    Matches any field whose name has NAME as a prefix, possibly
6470    followed by "___".
6471
6472    TYPE can be either a struct or union.  If REFOK, TYPE may also 
6473    be a (pointer or reference)+ to a struct or union, and the
6474    ultimate target type will be searched.
6475
6476    Looks recursively into variant clauses and parent types.
6477
6478    If NOERR is nonzero, return NULL if NAME is not suitably defined or
6479    TYPE is not a type of the right kind.  */
6480
6481 static struct type *
6482 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6483                             int noerr, int *dispp)
6484 {
6485   int i;
6486
6487   if (name == NULL)
6488     goto BadName;
6489
6490   if (refok && type != NULL)
6491     while (1)
6492       {
6493         type = ada_check_typedef (type);
6494         if (TYPE_CODE (type) != TYPE_CODE_PTR
6495             && TYPE_CODE (type) != TYPE_CODE_REF)
6496           break;
6497         type = TYPE_TARGET_TYPE (type);
6498       }
6499
6500   if (type == NULL
6501       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6502           && TYPE_CODE (type) != TYPE_CODE_UNION))
6503     {
6504       if (noerr)
6505         return NULL;
6506       else
6507         {
6508           target_terminal_ours ();
6509           gdb_flush (gdb_stdout);
6510           if (type == NULL)
6511             error (_("Type (null) is not a structure or union type"));
6512           else
6513             {
6514               /* XXX: type_sprint */
6515               fprintf_unfiltered (gdb_stderr, _("Type "));
6516               type_print (type, "", gdb_stderr, -1);
6517               error (_(" is not a structure or union type"));
6518             }
6519         }
6520     }
6521
6522   type = to_static_fixed_type (type);
6523
6524   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6525     {
6526       char *t_field_name = TYPE_FIELD_NAME (type, i);
6527       struct type *t;
6528       int disp;
6529
6530       if (t_field_name == NULL)
6531         continue;
6532
6533       else if (field_name_match (t_field_name, name))
6534         {
6535           if (dispp != NULL)
6536             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
6537           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6538         }
6539
6540       else if (ada_is_wrapper_field (type, i))
6541         {
6542           disp = 0;
6543           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
6544                                           0, 1, &disp);
6545           if (t != NULL)
6546             {
6547               if (dispp != NULL)
6548                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6549               return t;
6550             }
6551         }
6552
6553       else if (ada_is_variant_part (type, i))
6554         {
6555           int j;
6556           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
6557                                                                         i));
6558
6559           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6560             {
6561               /* FIXME pnh 2008/01/26: We check for a field that is
6562                  NOT wrapped in a struct, since the compiler sometimes
6563                  generates these for unchecked variant types.  Revisit
6564                  if the compiler changes this practice.  */
6565               char *v_field_name = TYPE_FIELD_NAME (field_type, j);
6566               disp = 0;
6567               if (v_field_name != NULL 
6568                   && field_name_match (v_field_name, name))
6569                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
6570               else
6571                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
6572                                                                  j),
6573                                                 name, 0, 1, &disp);
6574
6575               if (t != NULL)
6576                 {
6577                   if (dispp != NULL)
6578                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6579                   return t;
6580                 }
6581             }
6582         }
6583
6584     }
6585
6586 BadName:
6587   if (!noerr)
6588     {
6589       target_terminal_ours ();
6590       gdb_flush (gdb_stdout);
6591       if (name == NULL)
6592         {
6593           /* XXX: type_sprint */
6594           fprintf_unfiltered (gdb_stderr, _("Type "));
6595           type_print (type, "", gdb_stderr, -1);
6596           error (_(" has no component named <null>"));
6597         }
6598       else
6599         {
6600           /* XXX: type_sprint */
6601           fprintf_unfiltered (gdb_stderr, _("Type "));
6602           type_print (type, "", gdb_stderr, -1);
6603           error (_(" has no component named %s"), name);
6604         }
6605     }
6606
6607   return NULL;
6608 }
6609
6610 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6611    within a value of type OUTER_TYPE, return true iff VAR_TYPE
6612    represents an unchecked union (that is, the variant part of a
6613    record that is named in an Unchecked_Union pragma).  */
6614
6615 static int
6616 is_unchecked_variant (struct type *var_type, struct type *outer_type)
6617 {
6618   char *discrim_name = ada_variant_discrim_name (var_type);
6619
6620   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
6621           == NULL);
6622 }
6623
6624
6625 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6626    within a value of type OUTER_TYPE that is stored in GDB at
6627    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6628    numbering from 0) is applicable.  Returns -1 if none are.  */
6629
6630 int
6631 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
6632                            const gdb_byte *outer_valaddr)
6633 {
6634   int others_clause;
6635   int i;
6636   char *discrim_name = ada_variant_discrim_name (var_type);
6637   struct value *outer;
6638   struct value *discrim;
6639   LONGEST discrim_val;
6640
6641   outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
6642   discrim = ada_value_struct_elt (outer, discrim_name, 1);
6643   if (discrim == NULL)
6644     return -1;
6645   discrim_val = value_as_long (discrim);
6646
6647   others_clause = -1;
6648   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6649     {
6650       if (ada_is_others_clause (var_type, i))
6651         others_clause = i;
6652       else if (ada_in_variant (discrim_val, var_type, i))
6653         return i;
6654     }
6655
6656   return others_clause;
6657 }
6658 \f
6659
6660
6661                                 /* Dynamic-Sized Records */
6662
6663 /* Strategy: The type ostensibly attached to a value with dynamic size
6664    (i.e., a size that is not statically recorded in the debugging
6665    data) does not accurately reflect the size or layout of the value.
6666    Our strategy is to convert these values to values with accurate,
6667    conventional types that are constructed on the fly.  */
6668
6669 /* There is a subtle and tricky problem here.  In general, we cannot
6670    determine the size of dynamic records without its data.  However,
6671    the 'struct value' data structure, which GDB uses to represent
6672    quantities in the inferior process (the target), requires the size
6673    of the type at the time of its allocation in order to reserve space
6674    for GDB's internal copy of the data.  That's why the
6675    'to_fixed_xxx_type' routines take (target) addresses as parameters,
6676    rather than struct value*s.
6677
6678    However, GDB's internal history variables ($1, $2, etc.) are
6679    struct value*s containing internal copies of the data that are not, in
6680    general, the same as the data at their corresponding addresses in
6681    the target.  Fortunately, the types we give to these values are all
6682    conventional, fixed-size types (as per the strategy described
6683    above), so that we don't usually have to perform the
6684    'to_fixed_xxx_type' conversions to look at their values.
6685    Unfortunately, there is one exception: if one of the internal
6686    history variables is an array whose elements are unconstrained
6687    records, then we will need to create distinct fixed types for each
6688    element selected.  */
6689
6690 /* The upshot of all of this is that many routines take a (type, host
6691    address, target address) triple as arguments to represent a value.
6692    The host address, if non-null, is supposed to contain an internal
6693    copy of the relevant data; otherwise, the program is to consult the
6694    target at the target address.  */
6695
6696 /* Assuming that VAL0 represents a pointer value, the result of
6697    dereferencing it.  Differs from value_ind in its treatment of
6698    dynamic-sized types.  */
6699
6700 struct value *
6701 ada_value_ind (struct value *val0)
6702 {
6703   struct value *val = unwrap_value (value_ind (val0));
6704
6705   return ada_to_fixed_value (val);
6706 }
6707
6708 /* The value resulting from dereferencing any "reference to"
6709    qualifiers on VAL0.  */
6710
6711 static struct value *
6712 ada_coerce_ref (struct value *val0)
6713 {
6714   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
6715     {
6716       struct value *val = val0;
6717
6718       val = coerce_ref (val);
6719       val = unwrap_value (val);
6720       return ada_to_fixed_value (val);
6721     }
6722   else
6723     return val0;
6724 }
6725
6726 /* Return OFF rounded upward if necessary to a multiple of
6727    ALIGNMENT (a power of 2).  */
6728
6729 static unsigned int
6730 align_value (unsigned int off, unsigned int alignment)
6731 {
6732   return (off + alignment - 1) & ~(alignment - 1);
6733 }
6734
6735 /* Return the bit alignment required for field #F of template type TYPE.  */
6736
6737 static unsigned int
6738 field_alignment (struct type *type, int f)
6739 {
6740   const char *name = TYPE_FIELD_NAME (type, f);
6741   int len;
6742   int align_offset;
6743
6744   /* The field name should never be null, unless the debugging information
6745      is somehow malformed.  In this case, we assume the field does not
6746      require any alignment.  */
6747   if (name == NULL)
6748     return 1;
6749
6750   len = strlen (name);
6751
6752   if (!isdigit (name[len - 1]))
6753     return 1;
6754
6755   if (isdigit (name[len - 2]))
6756     align_offset = len - 2;
6757   else
6758     align_offset = len - 1;
6759
6760   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
6761     return TARGET_CHAR_BIT;
6762
6763   return atoi (name + align_offset) * TARGET_CHAR_BIT;
6764 }
6765
6766 /* Find a symbol named NAME.  Ignores ambiguity.  */
6767
6768 struct symbol *
6769 ada_find_any_symbol (const char *name)
6770 {
6771   struct symbol *sym;
6772
6773   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6774   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6775     return sym;
6776
6777   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6778   return sym;
6779 }
6780
6781 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
6782    solely for types defined by debug info, it will not search the GDB
6783    primitive types.  */
6784
6785 struct type *
6786 ada_find_any_type (const char *name)
6787 {
6788   struct symbol *sym = ada_find_any_symbol (name);
6789
6790   if (sym != NULL)
6791     return SYMBOL_TYPE (sym);
6792
6793   return NULL;
6794 }
6795
6796 /* Given NAME and an associated BLOCK, search all symbols for
6797    NAME suffixed with  "___XR", which is the ``renaming'' symbol
6798    associated to NAME.  Return this symbol if found, return
6799    NULL otherwise.  */
6800
6801 struct symbol *
6802 ada_find_renaming_symbol (const char *name, struct block *block)
6803 {
6804   struct symbol *sym;
6805
6806   sym = find_old_style_renaming_symbol (name, block);
6807
6808   if (sym != NULL)
6809     return sym;
6810
6811   /* Not right yet.  FIXME pnh 7/20/2007.  */
6812   sym = ada_find_any_symbol (name);
6813   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
6814     return sym;
6815   else
6816     return NULL;
6817 }
6818
6819 static struct symbol *
6820 find_old_style_renaming_symbol (const char *name, struct block *block)
6821 {
6822   const struct symbol *function_sym = block_linkage_function (block);
6823   char *rename;
6824
6825   if (function_sym != NULL)
6826     {
6827       /* If the symbol is defined inside a function, NAME is not fully
6828          qualified.  This means we need to prepend the function name
6829          as well as adding the ``___XR'' suffix to build the name of
6830          the associated renaming symbol.  */
6831       char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
6832       /* Function names sometimes contain suffixes used
6833          for instance to qualify nested subprograms.  When building
6834          the XR type name, we need to make sure that this suffix is
6835          not included.  So do not include any suffix in the function
6836          name length below.  */
6837       int function_name_len = ada_name_prefix_len (function_name);
6838       const int rename_len = function_name_len + 2      /*  "__" */
6839         + strlen (name) + 6 /* "___XR\0" */ ;
6840
6841       /* Strip the suffix if necessary.  */
6842       ada_remove_trailing_digits (function_name, &function_name_len);
6843       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
6844       ada_remove_Xbn_suffix (function_name, &function_name_len);
6845
6846       /* Library-level functions are a special case, as GNAT adds
6847          a ``_ada_'' prefix to the function name to avoid namespace
6848          pollution.  However, the renaming symbols themselves do not
6849          have this prefix, so we need to skip this prefix if present.  */
6850       if (function_name_len > 5 /* "_ada_" */
6851           && strstr (function_name, "_ada_") == function_name)
6852         {
6853           function_name += 5;
6854           function_name_len -= 5;
6855         }
6856
6857       rename = (char *) alloca (rename_len * sizeof (char));
6858       strncpy (rename, function_name, function_name_len);
6859       xsnprintf (rename + function_name_len, rename_len - function_name_len,
6860                  "__%s___XR", name);
6861     }
6862   else
6863     {
6864       const int rename_len = strlen (name) + 6;
6865
6866       rename = (char *) alloca (rename_len * sizeof (char));
6867       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
6868     }
6869
6870   return ada_find_any_symbol (rename);
6871 }
6872
6873 /* Because of GNAT encoding conventions, several GDB symbols may match a
6874    given type name.  If the type denoted by TYPE0 is to be preferred to
6875    that of TYPE1 for purposes of type printing, return non-zero;
6876    otherwise return 0.  */
6877
6878 int
6879 ada_prefer_type (struct type *type0, struct type *type1)
6880 {
6881   if (type1 == NULL)
6882     return 1;
6883   else if (type0 == NULL)
6884     return 0;
6885   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6886     return 1;
6887   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6888     return 0;
6889   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
6890     return 1;
6891   else if (ada_is_constrained_packed_array_type (type0))
6892     return 1;
6893   else if (ada_is_array_descriptor_type (type0)
6894            && !ada_is_array_descriptor_type (type1))
6895     return 1;
6896   else
6897     {
6898       const char *type0_name = type_name_no_tag (type0);
6899       const char *type1_name = type_name_no_tag (type1);
6900
6901       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
6902           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
6903         return 1;
6904     }
6905   return 0;
6906 }
6907
6908 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
6909    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
6910
6911 char *
6912 ada_type_name (struct type *type)
6913 {
6914   if (type == NULL)
6915     return NULL;
6916   else if (TYPE_NAME (type) != NULL)
6917     return TYPE_NAME (type);
6918   else
6919     return TYPE_TAG_NAME (type);
6920 }
6921
6922 /* Search the list of "descriptive" types associated to TYPE for a type
6923    whose name is NAME.  */
6924
6925 static struct type *
6926 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
6927 {
6928   struct type *result;
6929
6930   /* If there no descriptive-type info, then there is no parallel type
6931      to be found.  */
6932   if (!HAVE_GNAT_AUX_INFO (type))
6933     return NULL;
6934
6935   result = TYPE_DESCRIPTIVE_TYPE (type);
6936   while (result != NULL)
6937     {
6938       char *result_name = ada_type_name (result);
6939
6940       if (result_name == NULL)
6941         {
6942           warning (_("unexpected null name on descriptive type"));
6943           return NULL;
6944         }
6945
6946       /* If the names match, stop.  */
6947       if (strcmp (result_name, name) == 0)
6948         break;
6949
6950       /* Otherwise, look at the next item on the list, if any.  */
6951       if (HAVE_GNAT_AUX_INFO (result))
6952         result = TYPE_DESCRIPTIVE_TYPE (result);
6953       else
6954         result = NULL;
6955     }
6956
6957   /* If we didn't find a match, see whether this is a packed array.  With
6958      older compilers, the descriptive type information is either absent or
6959      irrelevant when it comes to packed arrays so the above lookup fails.
6960      Fall back to using a parallel lookup by name in this case.  */
6961   if (result == NULL && ada_is_constrained_packed_array_type (type))
6962     return ada_find_any_type (name);
6963
6964   return result;
6965 }
6966
6967 /* Find a parallel type to TYPE with the specified NAME, using the
6968    descriptive type taken from the debugging information, if available,
6969    and otherwise using the (slower) name-based method.  */
6970
6971 static struct type *
6972 ada_find_parallel_type_with_name (struct type *type, const char *name)
6973 {
6974   struct type *result = NULL;
6975
6976   if (HAVE_GNAT_AUX_INFO (type))
6977     result = find_parallel_type_by_descriptive_type (type, name);
6978   else
6979     result = ada_find_any_type (name);
6980
6981   return result;
6982 }
6983
6984 /* Same as above, but specify the name of the parallel type by appending
6985    SUFFIX to the name of TYPE.  */
6986
6987 struct type *
6988 ada_find_parallel_type (struct type *type, const char *suffix)
6989 {
6990   char *name, *typename = ada_type_name (type);
6991   int len;
6992
6993   if (typename == NULL)
6994     return NULL;
6995
6996   len = strlen (typename);
6997
6998   name = (char *) alloca (len + strlen (suffix) + 1);
6999
7000   strcpy (name, typename);
7001   strcpy (name + len, suffix);
7002
7003   return ada_find_parallel_type_with_name (type, name);
7004 }
7005
7006 /* If TYPE is a variable-size record type, return the corresponding template
7007    type describing its fields.  Otherwise, return NULL.  */
7008
7009 static struct type *
7010 dynamic_template_type (struct type *type)
7011 {
7012   type = ada_check_typedef (type);
7013
7014   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7015       || ada_type_name (type) == NULL)
7016     return NULL;
7017   else
7018     {
7019       int len = strlen (ada_type_name (type));
7020
7021       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7022         return type;
7023       else
7024         return ada_find_parallel_type (type, "___XVE");
7025     }
7026 }
7027
7028 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7029    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
7030
7031 static int
7032 is_dynamic_field (struct type *templ_type, int field_num)
7033 {
7034   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7035
7036   return name != NULL
7037     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7038     && strstr (name, "___XVL") != NULL;
7039 }
7040
7041 /* The index of the variant field of TYPE, or -1 if TYPE does not
7042    represent a variant record type.  */
7043
7044 static int
7045 variant_field_index (struct type *type)
7046 {
7047   int f;
7048
7049   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7050     return -1;
7051
7052   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7053     {
7054       if (ada_is_variant_part (type, f))
7055         return f;
7056     }
7057   return -1;
7058 }
7059
7060 /* A record type with no fields.  */
7061
7062 static struct type *
7063 empty_record (struct type *template)
7064 {
7065   struct type *type = alloc_type_copy (template);
7066
7067   TYPE_CODE (type) = TYPE_CODE_STRUCT;
7068   TYPE_NFIELDS (type) = 0;
7069   TYPE_FIELDS (type) = NULL;
7070   INIT_CPLUS_SPECIFIC (type);
7071   TYPE_NAME (type) = "<empty>";
7072   TYPE_TAG_NAME (type) = NULL;
7073   TYPE_LENGTH (type) = 0;
7074   return type;
7075 }
7076
7077 /* An ordinary record type (with fixed-length fields) that describes
7078    the value of type TYPE at VALADDR or ADDRESS (see comments at
7079    the beginning of this section) VAL according to GNAT conventions.
7080    DVAL0 should describe the (portion of a) record that contains any
7081    necessary discriminants.  It should be NULL if value_type (VAL) is
7082    an outer-level type (i.e., as opposed to a branch of a variant.)  A
7083    variant field (unless unchecked) is replaced by a particular branch
7084    of the variant.
7085
7086    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7087    length are not statically known are discarded.  As a consequence,
7088    VALADDR, ADDRESS and DVAL0 are ignored.
7089
7090    NOTE: Limitations: For now, we assume that dynamic fields and
7091    variants occupy whole numbers of bytes.  However, they need not be
7092    byte-aligned.  */
7093
7094 struct type *
7095 ada_template_to_fixed_record_type_1 (struct type *type,
7096                                      const gdb_byte *valaddr,
7097                                      CORE_ADDR address, struct value *dval0,
7098                                      int keep_dynamic_fields)
7099 {
7100   struct value *mark = value_mark ();
7101   struct value *dval;
7102   struct type *rtype;
7103   int nfields, bit_len;
7104   int variant_field;
7105   long off;
7106   int fld_bit_len;
7107   int f;
7108
7109   /* Compute the number of fields in this record type that are going
7110      to be processed: unless keep_dynamic_fields, this includes only
7111      fields whose position and length are static will be processed.  */
7112   if (keep_dynamic_fields)
7113     nfields = TYPE_NFIELDS (type);
7114   else
7115     {
7116       nfields = 0;
7117       while (nfields < TYPE_NFIELDS (type)
7118              && !ada_is_variant_part (type, nfields)
7119              && !is_dynamic_field (type, nfields))
7120         nfields++;
7121     }
7122
7123   rtype = alloc_type_copy (type);
7124   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7125   INIT_CPLUS_SPECIFIC (rtype);
7126   TYPE_NFIELDS (rtype) = nfields;
7127   TYPE_FIELDS (rtype) = (struct field *)
7128     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7129   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7130   TYPE_NAME (rtype) = ada_type_name (type);
7131   TYPE_TAG_NAME (rtype) = NULL;
7132   TYPE_FIXED_INSTANCE (rtype) = 1;
7133
7134   off = 0;
7135   bit_len = 0;
7136   variant_field = -1;
7137
7138   for (f = 0; f < nfields; f += 1)
7139     {
7140       off = align_value (off, field_alignment (type, f))
7141         + TYPE_FIELD_BITPOS (type, f);
7142       TYPE_FIELD_BITPOS (rtype, f) = off;
7143       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7144
7145       if (ada_is_variant_part (type, f))
7146         {
7147           variant_field = f;
7148           fld_bit_len = 0;
7149         }
7150       else if (is_dynamic_field (type, f))
7151         {
7152           const gdb_byte *field_valaddr = valaddr;
7153           CORE_ADDR field_address = address;
7154           struct type *field_type =
7155             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7156
7157           if (dval0 == NULL)
7158             {
7159               /* rtype's length is computed based on the run-time
7160                  value of discriminants.  If the discriminants are not
7161                  initialized, the type size may be completely bogus and
7162                  GDB may fail to allocate a value for it.  So check the
7163                  size first before creating the value.  */
7164               check_size (rtype);
7165               dval = value_from_contents_and_address (rtype, valaddr, address);
7166             }
7167           else
7168             dval = dval0;
7169
7170           /* If the type referenced by this field is an aligner type, we need
7171              to unwrap that aligner type, because its size might not be set.
7172              Keeping the aligner type would cause us to compute the wrong
7173              size for this field, impacting the offset of the all the fields
7174              that follow this one.  */
7175           if (ada_is_aligner_type (field_type))
7176             {
7177               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7178
7179               field_valaddr = cond_offset_host (field_valaddr, field_offset);
7180               field_address = cond_offset_target (field_address, field_offset);
7181               field_type = ada_aligned_type (field_type);
7182             }
7183
7184           field_valaddr = cond_offset_host (field_valaddr,
7185                                             off / TARGET_CHAR_BIT);
7186           field_address = cond_offset_target (field_address,
7187                                               off / TARGET_CHAR_BIT);
7188
7189           /* Get the fixed type of the field.  Note that, in this case,
7190              we do not want to get the real type out of the tag: if
7191              the current field is the parent part of a tagged record,
7192              we will get the tag of the object.  Clearly wrong: the real
7193              type of the parent is not the real type of the child.  We
7194              would end up in an infinite loop.  */
7195           field_type = ada_get_base_type (field_type);
7196           field_type = ada_to_fixed_type (field_type, field_valaddr,
7197                                           field_address, dval, 0);
7198           /* If the field size is already larger than the maximum
7199              object size, then the record itself will necessarily
7200              be larger than the maximum object size.  We need to make
7201              this check now, because the size might be so ridiculously
7202              large (due to an uninitialized variable in the inferior)
7203              that it would cause an overflow when adding it to the
7204              record size.  */
7205           check_size (field_type);
7206
7207           TYPE_FIELD_TYPE (rtype, f) = field_type;
7208           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7209           /* The multiplication can potentially overflow.  But because
7210              the field length has been size-checked just above, and
7211              assuming that the maximum size is a reasonable value,
7212              an overflow should not happen in practice.  So rather than
7213              adding overflow recovery code to this already complex code,
7214              we just assume that it's not going to happen.  */
7215           fld_bit_len =
7216             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7217         }
7218       else
7219         {
7220           struct type *field_type = TYPE_FIELD_TYPE (type, f);
7221
7222           /* If our field is a typedef type (most likely a typedef of
7223              a fat pointer, encoding an array access), then we need to
7224              look at its target type to determine its characteristics.
7225              In particular, we would miscompute the field size if we took
7226              the size of the typedef (zero), instead of the size of
7227              the target type.  */
7228           if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7229             field_type = ada_typedef_target_type (field_type);
7230
7231           TYPE_FIELD_TYPE (rtype, f) = field_type;
7232           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7233           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7234             fld_bit_len =
7235               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7236           else
7237             fld_bit_len =
7238               TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7239         }
7240       if (off + fld_bit_len > bit_len)
7241         bit_len = off + fld_bit_len;
7242       off += fld_bit_len;
7243       TYPE_LENGTH (rtype) =
7244         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7245     }
7246
7247   /* We handle the variant part, if any, at the end because of certain
7248      odd cases in which it is re-ordered so as NOT to be the last field of
7249      the record.  This can happen in the presence of representation
7250      clauses.  */
7251   if (variant_field >= 0)
7252     {
7253       struct type *branch_type;
7254
7255       off = TYPE_FIELD_BITPOS (rtype, variant_field);
7256
7257       if (dval0 == NULL)
7258         dval = value_from_contents_and_address (rtype, valaddr, address);
7259       else
7260         dval = dval0;
7261
7262       branch_type =
7263         to_fixed_variant_branch_type
7264         (TYPE_FIELD_TYPE (type, variant_field),
7265          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7266          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7267       if (branch_type == NULL)
7268         {
7269           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
7270             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7271           TYPE_NFIELDS (rtype) -= 1;
7272         }
7273       else
7274         {
7275           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7276           TYPE_FIELD_NAME (rtype, variant_field) = "S";
7277           fld_bit_len =
7278             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
7279             TARGET_CHAR_BIT;
7280           if (off + fld_bit_len > bit_len)
7281             bit_len = off + fld_bit_len;
7282           TYPE_LENGTH (rtype) =
7283             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7284         }
7285     }
7286
7287   /* According to exp_dbug.ads, the size of TYPE for variable-size records
7288      should contain the alignment of that record, which should be a strictly
7289      positive value.  If null or negative, then something is wrong, most
7290      probably in the debug info.  In that case, we don't round up the size
7291      of the resulting type.  If this record is not part of another structure,
7292      the current RTYPE length might be good enough for our purposes.  */
7293   if (TYPE_LENGTH (type) <= 0)
7294     {
7295       if (TYPE_NAME (rtype))
7296         warning (_("Invalid type size for `%s' detected: %d."),
7297                  TYPE_NAME (rtype), TYPE_LENGTH (type));
7298       else
7299         warning (_("Invalid type size for <unnamed> detected: %d."),
7300                  TYPE_LENGTH (type));
7301     }
7302   else
7303     {
7304       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
7305                                          TYPE_LENGTH (type));
7306     }
7307
7308   value_free_to_mark (mark);
7309   if (TYPE_LENGTH (rtype) > varsize_limit)
7310     error (_("record type with dynamic size is larger than varsize-limit"));
7311   return rtype;
7312 }
7313
7314 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7315    of 1.  */
7316
7317 static struct type *
7318 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
7319                                CORE_ADDR address, struct value *dval0)
7320 {
7321   return ada_template_to_fixed_record_type_1 (type, valaddr,
7322                                               address, dval0, 1);
7323 }
7324
7325 /* An ordinary record type in which ___XVL-convention fields and
7326    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7327    static approximations, containing all possible fields.  Uses
7328    no runtime values.  Useless for use in values, but that's OK,
7329    since the results are used only for type determinations.   Works on both
7330    structs and unions.  Representation note: to save space, we memorize
7331    the result of this function in the TYPE_TARGET_TYPE of the
7332    template type.  */
7333
7334 static struct type *
7335 template_to_static_fixed_type (struct type *type0)
7336 {
7337   struct type *type;
7338   int nfields;
7339   int f;
7340
7341   if (TYPE_TARGET_TYPE (type0) != NULL)
7342     return TYPE_TARGET_TYPE (type0);
7343
7344   nfields = TYPE_NFIELDS (type0);
7345   type = type0;
7346
7347   for (f = 0; f < nfields; f += 1)
7348     {
7349       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
7350       struct type *new_type;
7351
7352       if (is_dynamic_field (type0, f))
7353         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
7354       else
7355         new_type = static_unwrap_type (field_type);
7356       if (type == type0 && new_type != field_type)
7357         {
7358           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
7359           TYPE_CODE (type) = TYPE_CODE (type0);
7360           INIT_CPLUS_SPECIFIC (type);
7361           TYPE_NFIELDS (type) = nfields;
7362           TYPE_FIELDS (type) = (struct field *)
7363             TYPE_ALLOC (type, nfields * sizeof (struct field));
7364           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7365                   sizeof (struct field) * nfields);
7366           TYPE_NAME (type) = ada_type_name (type0);
7367           TYPE_TAG_NAME (type) = NULL;
7368           TYPE_FIXED_INSTANCE (type) = 1;
7369           TYPE_LENGTH (type) = 0;
7370         }
7371       TYPE_FIELD_TYPE (type, f) = new_type;
7372       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
7373     }
7374   return type;
7375 }
7376
7377 /* Given an object of type TYPE whose contents are at VALADDR and
7378    whose address in memory is ADDRESS, returns a revision of TYPE,
7379    which should be a non-dynamic-sized record, in which the variant
7380    part, if any, is replaced with the appropriate branch.  Looks
7381    for discriminant values in DVAL0, which can be NULL if the record
7382    contains the necessary discriminant values.  */
7383
7384 static struct type *
7385 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
7386                                    CORE_ADDR address, struct value *dval0)
7387 {
7388   struct value *mark = value_mark ();
7389   struct value *dval;
7390   struct type *rtype;
7391   struct type *branch_type;
7392   int nfields = TYPE_NFIELDS (type);
7393   int variant_field = variant_field_index (type);
7394
7395   if (variant_field == -1)
7396     return type;
7397
7398   if (dval0 == NULL)
7399     dval = value_from_contents_and_address (type, valaddr, address);
7400   else
7401     dval = dval0;
7402
7403   rtype = alloc_type_copy (type);
7404   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7405   INIT_CPLUS_SPECIFIC (rtype);
7406   TYPE_NFIELDS (rtype) = nfields;
7407   TYPE_FIELDS (rtype) =
7408     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7409   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
7410           sizeof (struct field) * nfields);
7411   TYPE_NAME (rtype) = ada_type_name (type);
7412   TYPE_TAG_NAME (rtype) = NULL;
7413   TYPE_FIXED_INSTANCE (rtype) = 1;
7414   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7415
7416   branch_type = to_fixed_variant_branch_type
7417     (TYPE_FIELD_TYPE (type, variant_field),
7418      cond_offset_host (valaddr,
7419                        TYPE_FIELD_BITPOS (type, variant_field)
7420                        / TARGET_CHAR_BIT),
7421      cond_offset_target (address,
7422                          TYPE_FIELD_BITPOS (type, variant_field)
7423                          / TARGET_CHAR_BIT), dval);
7424   if (branch_type == NULL)
7425     {
7426       int f;
7427
7428       for (f = variant_field + 1; f < nfields; f += 1)
7429         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7430       TYPE_NFIELDS (rtype) -= 1;
7431     }
7432   else
7433     {
7434       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7435       TYPE_FIELD_NAME (rtype, variant_field) = "S";
7436       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
7437       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
7438     }
7439   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7440
7441   value_free_to_mark (mark);
7442   return rtype;
7443 }
7444
7445 /* An ordinary record type (with fixed-length fields) that describes
7446    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7447    beginning of this section].   Any necessary discriminants' values
7448    should be in DVAL, a record value; it may be NULL if the object
7449    at ADDR itself contains any necessary discriminant values.
7450    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7451    values from the record are needed.  Except in the case that DVAL,
7452    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7453    unchecked) is replaced by a particular branch of the variant.
7454
7455    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7456    is questionable and may be removed.  It can arise during the
7457    processing of an unconstrained-array-of-record type where all the
7458    variant branches have exactly the same size.  This is because in
7459    such cases, the compiler does not bother to use the XVS convention
7460    when encoding the record.  I am currently dubious of this
7461    shortcut and suspect the compiler should be altered.  FIXME.  */
7462
7463 static struct type *
7464 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
7465                       CORE_ADDR address, struct value *dval)
7466 {
7467   struct type *templ_type;
7468
7469   if (TYPE_FIXED_INSTANCE (type0))
7470     return type0;
7471
7472   templ_type = dynamic_template_type (type0);
7473
7474   if (templ_type != NULL)
7475     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
7476   else if (variant_field_index (type0) >= 0)
7477     {
7478       if (dval == NULL && valaddr == NULL && address == 0)
7479         return type0;
7480       return to_record_with_fixed_variant_part (type0, valaddr, address,
7481                                                 dval);
7482     }
7483   else
7484     {
7485       TYPE_FIXED_INSTANCE (type0) = 1;
7486       return type0;
7487     }
7488
7489 }
7490
7491 /* An ordinary record type (with fixed-length fields) that describes
7492    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7493    union type.  Any necessary discriminants' values should be in DVAL,
7494    a record value.  That is, this routine selects the appropriate
7495    branch of the union at ADDR according to the discriminant value
7496    indicated in the union's type name.  Returns VAR_TYPE0 itself if
7497    it represents a variant subject to a pragma Unchecked_Union.  */
7498
7499 static struct type *
7500 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
7501                               CORE_ADDR address, struct value *dval)
7502 {
7503   int which;
7504   struct type *templ_type;
7505   struct type *var_type;
7506
7507   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7508     var_type = TYPE_TARGET_TYPE (var_type0);
7509   else
7510     var_type = var_type0;
7511
7512   templ_type = ada_find_parallel_type (var_type, "___XVU");
7513
7514   if (templ_type != NULL)
7515     var_type = templ_type;
7516
7517   if (is_unchecked_variant (var_type, value_type (dval)))
7518       return var_type0;
7519   which =
7520     ada_which_variant_applies (var_type,
7521                                value_type (dval), value_contents (dval));
7522
7523   if (which < 0)
7524     return empty_record (var_type);
7525   else if (is_dynamic_field (var_type, which))
7526     return to_fixed_record_type
7527       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7528        valaddr, address, dval);
7529   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
7530     return
7531       to_fixed_record_type
7532       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
7533   else
7534     return TYPE_FIELD_TYPE (var_type, which);
7535 }
7536
7537 /* Assuming that TYPE0 is an array type describing the type of a value
7538    at ADDR, and that DVAL describes a record containing any
7539    discriminants used in TYPE0, returns a type for the value that
7540    contains no dynamic components (that is, no components whose sizes
7541    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
7542    true, gives an error message if the resulting type's size is over
7543    varsize_limit.  */
7544
7545 static struct type *
7546 to_fixed_array_type (struct type *type0, struct value *dval,
7547                      int ignore_too_big)
7548 {
7549   struct type *index_type_desc;
7550   struct type *result;
7551   int constrained_packed_array_p;
7552
7553   if (TYPE_FIXED_INSTANCE (type0))
7554     return type0;
7555
7556   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
7557   if (constrained_packed_array_p)
7558     type0 = decode_constrained_packed_array_type (type0);
7559
7560   index_type_desc = ada_find_parallel_type (type0, "___XA");
7561   ada_fixup_array_indexes_type (index_type_desc);
7562   if (index_type_desc == NULL)
7563     {
7564       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
7565
7566       /* NOTE: elt_type---the fixed version of elt_type0---should never
7567          depend on the contents of the array in properly constructed
7568          debugging data.  */
7569       /* Create a fixed version of the array element type.
7570          We're not providing the address of an element here,
7571          and thus the actual object value cannot be inspected to do
7572          the conversion.  This should not be a problem, since arrays of
7573          unconstrained objects are not allowed.  In particular, all
7574          the elements of an array of a tagged type should all be of
7575          the same type specified in the debugging info.  No need to
7576          consult the object tag.  */
7577       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
7578
7579       /* Make sure we always create a new array type when dealing with
7580          packed array types, since we're going to fix-up the array
7581          type length and element bitsize a little further down.  */
7582       if (elt_type0 == elt_type && !constrained_packed_array_p)
7583         result = type0;
7584       else
7585         result = create_array_type (alloc_type_copy (type0),
7586                                     elt_type, TYPE_INDEX_TYPE (type0));
7587     }
7588   else
7589     {
7590       int i;
7591       struct type *elt_type0;
7592
7593       elt_type0 = type0;
7594       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
7595         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
7596
7597       /* NOTE: result---the fixed version of elt_type0---should never
7598          depend on the contents of the array in properly constructed
7599          debugging data.  */
7600       /* Create a fixed version of the array element type.
7601          We're not providing the address of an element here,
7602          and thus the actual object value cannot be inspected to do
7603          the conversion.  This should not be a problem, since arrays of
7604          unconstrained objects are not allowed.  In particular, all
7605          the elements of an array of a tagged type should all be of
7606          the same type specified in the debugging info.  No need to
7607          consult the object tag.  */
7608       result =
7609         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
7610
7611       elt_type0 = type0;
7612       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
7613         {
7614           struct type *range_type =
7615             to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
7616
7617           result = create_array_type (alloc_type_copy (elt_type0),
7618                                       result, range_type);
7619           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
7620         }
7621       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
7622         error (_("array type with dynamic size is larger than varsize-limit"));
7623     }
7624
7625   if (constrained_packed_array_p)
7626     {
7627       /* So far, the resulting type has been created as if the original
7628          type was a regular (non-packed) array type.  As a result, the
7629          bitsize of the array elements needs to be set again, and the array
7630          length needs to be recomputed based on that bitsize.  */
7631       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
7632       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
7633
7634       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
7635       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
7636       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
7637         TYPE_LENGTH (result)++;
7638     }
7639
7640   TYPE_FIXED_INSTANCE (result) = 1;
7641   return result;
7642 }
7643
7644
7645 /* A standard type (containing no dynamically sized components)
7646    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
7647    DVAL describes a record containing any discriminants used in TYPE0,
7648    and may be NULL if there are none, or if the object of type TYPE at
7649    ADDRESS or in VALADDR contains these discriminants.
7650    
7651    If CHECK_TAG is not null, in the case of tagged types, this function
7652    attempts to locate the object's tag and use it to compute the actual
7653    type.  However, when ADDRESS is null, we cannot use it to determine the
7654    location of the tag, and therefore compute the tagged type's actual type.
7655    So we return the tagged type without consulting the tag.  */
7656    
7657 static struct type *
7658 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
7659                    CORE_ADDR address, struct value *dval, int check_tag)
7660 {
7661   type = ada_check_typedef (type);
7662   switch (TYPE_CODE (type))
7663     {
7664     default:
7665       return type;
7666     case TYPE_CODE_STRUCT:
7667       {
7668         struct type *static_type = to_static_fixed_type (type);
7669         struct type *fixed_record_type =
7670           to_fixed_record_type (type, valaddr, address, NULL);
7671
7672         /* If STATIC_TYPE is a tagged type and we know the object's address,
7673            then we can determine its tag, and compute the object's actual
7674            type from there.  Note that we have to use the fixed record
7675            type (the parent part of the record may have dynamic fields
7676            and the way the location of _tag is expressed may depend on
7677            them).  */
7678
7679         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
7680           {
7681             struct type *real_type =
7682               type_from_tag (value_tag_from_contents_and_address
7683                              (fixed_record_type,
7684                               valaddr,
7685                               address));
7686
7687             if (real_type != NULL)
7688               return to_fixed_record_type (real_type, valaddr, address, NULL);
7689           }
7690
7691         /* Check to see if there is a parallel ___XVZ variable.
7692            If there is, then it provides the actual size of our type.  */
7693         else if (ada_type_name (fixed_record_type) != NULL)
7694           {
7695             char *name = ada_type_name (fixed_record_type);
7696             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
7697             int xvz_found = 0;
7698             LONGEST size;
7699
7700             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
7701             size = get_int_var_value (xvz_name, &xvz_found);
7702             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
7703               {
7704                 fixed_record_type = copy_type (fixed_record_type);
7705                 TYPE_LENGTH (fixed_record_type) = size;
7706
7707                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
7708                    observed this when the debugging info is STABS, and
7709                    apparently it is something that is hard to fix.
7710
7711                    In practice, we don't need the actual type definition
7712                    at all, because the presence of the XVZ variable allows us
7713                    to assume that there must be a XVS type as well, which we
7714                    should be able to use later, when we need the actual type
7715                    definition.
7716
7717                    In the meantime, pretend that the "fixed" type we are
7718                    returning is NOT a stub, because this can cause trouble
7719                    when using this type to create new types targeting it.
7720                    Indeed, the associated creation routines often check
7721                    whether the target type is a stub and will try to replace
7722                    it, thus using a type with the wrong size.  This, in turn,
7723                    might cause the new type to have the wrong size too.
7724                    Consider the case of an array, for instance, where the size
7725                    of the array is computed from the number of elements in
7726                    our array multiplied by the size of its element.  */
7727                 TYPE_STUB (fixed_record_type) = 0;
7728               }
7729           }
7730         return fixed_record_type;
7731       }
7732     case TYPE_CODE_ARRAY:
7733       return to_fixed_array_type (type, dval, 1);
7734     case TYPE_CODE_UNION:
7735       if (dval == NULL)
7736         return type;
7737       else
7738         return to_fixed_variant_branch_type (type, valaddr, address, dval);
7739     }
7740 }
7741
7742 /* The same as ada_to_fixed_type_1, except that it preserves the type
7743    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
7744
7745    The typedef layer needs be preserved in order to differentiate between
7746    arrays and array pointers when both types are implemented using the same
7747    fat pointer.  In the array pointer case, the pointer is encoded as
7748    a typedef of the pointer type.  For instance, considering:
7749
7750           type String_Access is access String;
7751           S1 : String_Access := null;
7752
7753    To the debugger, S1 is defined as a typedef of type String.  But
7754    to the user, it is a pointer.  So if the user tries to print S1,
7755    we should not dereference the array, but print the array address
7756    instead.
7757
7758    If we didn't preserve the typedef layer, we would lose the fact that
7759    the type is to be presented as a pointer (needs de-reference before
7760    being printed).  And we would also use the source-level type name.  */
7761
7762 struct type *
7763 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
7764                    CORE_ADDR address, struct value *dval, int check_tag)
7765
7766 {
7767   struct type *fixed_type =
7768     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
7769
7770   /*  If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
7771       then preserve the typedef layer.
7772
7773       Implementation note: We can only check the main-type portion of
7774       the TYPE and FIXED_TYPE, because eliminating the typedef layer
7775       from TYPE now returns a type that has the same instance flags
7776       as TYPE.  For instance, if TYPE is a "typedef const", and its
7777       target type is a "struct", then the typedef elimination will return
7778       a "const" version of the target type.  See check_typedef for more
7779       details about how the typedef layer elimination is done.
7780
7781       brobecker/2010-11-19: It seems to me that the only case where it is
7782       useful to preserve the typedef layer is when dealing with fat pointers.
7783       Perhaps, we could add a check for that and preserve the typedef layer
7784       only in that situation.  But this seems unecessary so far, probably
7785       because we call check_typedef/ada_check_typedef pretty much everywhere.
7786       */
7787   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
7788       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
7789           == TYPE_MAIN_TYPE (fixed_type)))
7790     return type;
7791
7792   return fixed_type;
7793 }
7794
7795 /* A standard (static-sized) type corresponding as well as possible to
7796    TYPE0, but based on no runtime data.  */
7797
7798 static struct type *
7799 to_static_fixed_type (struct type *type0)
7800 {
7801   struct type *type;
7802
7803   if (type0 == NULL)
7804     return NULL;
7805
7806   if (TYPE_FIXED_INSTANCE (type0))
7807     return type0;
7808
7809   type0 = ada_check_typedef (type0);
7810
7811   switch (TYPE_CODE (type0))
7812     {
7813     default:
7814       return type0;
7815     case TYPE_CODE_STRUCT:
7816       type = dynamic_template_type (type0);
7817       if (type != NULL)
7818         return template_to_static_fixed_type (type);
7819       else
7820         return template_to_static_fixed_type (type0);
7821     case TYPE_CODE_UNION:
7822       type = ada_find_parallel_type (type0, "___XVU");
7823       if (type != NULL)
7824         return template_to_static_fixed_type (type);
7825       else
7826         return template_to_static_fixed_type (type0);
7827     }
7828 }
7829
7830 /* A static approximation of TYPE with all type wrappers removed.  */
7831
7832 static struct type *
7833 static_unwrap_type (struct type *type)
7834 {
7835   if (ada_is_aligner_type (type))
7836     {
7837       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
7838       if (ada_type_name (type1) == NULL)
7839         TYPE_NAME (type1) = ada_type_name (type);
7840
7841       return static_unwrap_type (type1);
7842     }
7843   else
7844     {
7845       struct type *raw_real_type = ada_get_base_type (type);
7846
7847       if (raw_real_type == type)
7848         return type;
7849       else
7850         return to_static_fixed_type (raw_real_type);
7851     }
7852 }
7853
7854 /* In some cases, incomplete and private types require
7855    cross-references that are not resolved as records (for example,
7856       type Foo;
7857       type FooP is access Foo;
7858       V: FooP;
7859       type Foo is array ...;
7860    ).  In these cases, since there is no mechanism for producing
7861    cross-references to such types, we instead substitute for FooP a
7862    stub enumeration type that is nowhere resolved, and whose tag is
7863    the name of the actual type.  Call these types "non-record stubs".  */
7864
7865 /* A type equivalent to TYPE that is not a non-record stub, if one
7866    exists, otherwise TYPE.  */
7867
7868 struct type *
7869 ada_check_typedef (struct type *type)
7870 {
7871   if (type == NULL)
7872     return NULL;
7873
7874   /* If our type is a typedef type of a fat pointer, then we're done.
7875      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
7876      what allows us to distinguish between fat pointers that represent
7877      array types, and fat pointers that represent array access types
7878      (in both cases, the compiler implements them as fat pointers).  */
7879   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
7880       && is_thick_pntr (ada_typedef_target_type (type)))
7881     return type;
7882
7883   CHECK_TYPEDEF (type);
7884   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
7885       || !TYPE_STUB (type)
7886       || TYPE_TAG_NAME (type) == NULL)
7887     return type;
7888   else
7889     {
7890       char *name = TYPE_TAG_NAME (type);
7891       struct type *type1 = ada_find_any_type (name);
7892
7893       if (type1 == NULL)
7894         return type;
7895
7896       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
7897          stubs pointing to arrays, as we don't create symbols for array
7898          types, only for the typedef-to-array types).  If that's the case,
7899          strip the typedef layer.  */
7900       if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
7901         type1 = ada_check_typedef (type1);
7902
7903       return type1;
7904     }
7905 }
7906
7907 /* A value representing the data at VALADDR/ADDRESS as described by
7908    type TYPE0, but with a standard (static-sized) type that correctly
7909    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
7910    type, then return VAL0 [this feature is simply to avoid redundant
7911    creation of struct values].  */
7912
7913 static struct value *
7914 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
7915                            struct value *val0)
7916 {
7917   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
7918
7919   if (type == type0 && val0 != NULL)
7920     return val0;
7921   else
7922     return value_from_contents_and_address (type, 0, address);
7923 }
7924
7925 /* A value representing VAL, but with a standard (static-sized) type
7926    that correctly describes it.  Does not necessarily create a new
7927    value.  */
7928
7929 struct value *
7930 ada_to_fixed_value (struct value *val)
7931 {
7932   return ada_to_fixed_value_create (value_type (val),
7933                                     value_address (val),
7934                                     val);
7935 }
7936 \f
7937
7938 /* Attributes */
7939
7940 /* Table mapping attribute numbers to names.
7941    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
7942
7943 static const char *attribute_names[] = {
7944   "<?>",
7945
7946   "first",
7947   "last",
7948   "length",
7949   "image",
7950   "max",
7951   "min",
7952   "modulus",
7953   "pos",
7954   "size",
7955   "tag",
7956   "val",
7957   0
7958 };
7959
7960 const char *
7961 ada_attribute_name (enum exp_opcode n)
7962 {
7963   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
7964     return attribute_names[n - OP_ATR_FIRST + 1];
7965   else
7966     return attribute_names[0];
7967 }
7968
7969 /* Evaluate the 'POS attribute applied to ARG.  */
7970
7971 static LONGEST
7972 pos_atr (struct value *arg)
7973 {
7974   struct value *val = coerce_ref (arg);
7975   struct type *type = value_type (val);
7976
7977   if (!discrete_type_p (type))
7978     error (_("'POS only defined on discrete types"));
7979
7980   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7981     {
7982       int i;
7983       LONGEST v = value_as_long (val);
7984
7985       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7986         {
7987           if (v == TYPE_FIELD_BITPOS (type, i))
7988             return i;
7989         }
7990       error (_("enumeration value is invalid: can't find 'POS"));
7991     }
7992   else
7993     return value_as_long (val);
7994 }
7995
7996 static struct value *
7997 value_pos_atr (struct type *type, struct value *arg)
7998 {
7999   return value_from_longest (type, pos_atr (arg));
8000 }
8001
8002 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
8003
8004 static struct value *
8005 value_val_atr (struct type *type, struct value *arg)
8006 {
8007   if (!discrete_type_p (type))
8008     error (_("'VAL only defined on discrete types"));
8009   if (!integer_type_p (value_type (arg)))
8010     error (_("'VAL requires integral argument"));
8011
8012   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8013     {
8014       long pos = value_as_long (arg);
8015
8016       if (pos < 0 || pos >= TYPE_NFIELDS (type))
8017         error (_("argument to 'VAL out of range"));
8018       return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
8019     }
8020   else
8021     return value_from_longest (type, value_as_long (arg));
8022 }
8023 \f
8024
8025                                 /* Evaluation */
8026
8027 /* True if TYPE appears to be an Ada character type.
8028    [At the moment, this is true only for Character and Wide_Character;
8029    It is a heuristic test that could stand improvement].  */
8030
8031 int
8032 ada_is_character_type (struct type *type)
8033 {
8034   const char *name;
8035
8036   /* If the type code says it's a character, then assume it really is,
8037      and don't check any further.  */
8038   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8039     return 1;
8040   
8041   /* Otherwise, assume it's a character type iff it is a discrete type
8042      with a known character type name.  */
8043   name = ada_type_name (type);
8044   return (name != NULL
8045           && (TYPE_CODE (type) == TYPE_CODE_INT
8046               || TYPE_CODE (type) == TYPE_CODE_RANGE)
8047           && (strcmp (name, "character") == 0
8048               || strcmp (name, "wide_character") == 0
8049               || strcmp (name, "wide_wide_character") == 0
8050               || strcmp (name, "unsigned char") == 0));
8051 }
8052
8053 /* True if TYPE appears to be an Ada string type.  */
8054
8055 int
8056 ada_is_string_type (struct type *type)
8057 {
8058   type = ada_check_typedef (type);
8059   if (type != NULL
8060       && TYPE_CODE (type) != TYPE_CODE_PTR
8061       && (ada_is_simple_array_type (type)
8062           || ada_is_array_descriptor_type (type))
8063       && ada_array_arity (type) == 1)
8064     {
8065       struct type *elttype = ada_array_element_type (type, 1);
8066
8067       return ada_is_character_type (elttype);
8068     }
8069   else
8070     return 0;
8071 }
8072
8073 /* The compiler sometimes provides a parallel XVS type for a given
8074    PAD type.  Normally, it is safe to follow the PAD type directly,
8075    but older versions of the compiler have a bug that causes the offset
8076    of its "F" field to be wrong.  Following that field in that case
8077    would lead to incorrect results, but this can be worked around
8078    by ignoring the PAD type and using the associated XVS type instead.
8079
8080    Set to True if the debugger should trust the contents of PAD types.
8081    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
8082 static int trust_pad_over_xvs = 1;
8083
8084 /* True if TYPE is a struct type introduced by the compiler to force the
8085    alignment of a value.  Such types have a single field with a
8086    distinctive name.  */
8087
8088 int
8089 ada_is_aligner_type (struct type *type)
8090 {
8091   type = ada_check_typedef (type);
8092
8093   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8094     return 0;
8095
8096   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8097           && TYPE_NFIELDS (type) == 1
8098           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8099 }
8100
8101 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8102    the parallel type.  */
8103
8104 struct type *
8105 ada_get_base_type (struct type *raw_type)
8106 {
8107   struct type *real_type_namer;
8108   struct type *raw_real_type;
8109
8110   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8111     return raw_type;
8112
8113   if (ada_is_aligner_type (raw_type))
8114     /* The encoding specifies that we should always use the aligner type.
8115        So, even if this aligner type has an associated XVS type, we should
8116        simply ignore it.
8117
8118        According to the compiler gurus, an XVS type parallel to an aligner
8119        type may exist because of a stabs limitation.  In stabs, aligner
8120        types are empty because the field has a variable-sized type, and
8121        thus cannot actually be used as an aligner type.  As a result,
8122        we need the associated parallel XVS type to decode the type.
8123        Since the policy in the compiler is to not change the internal
8124        representation based on the debugging info format, we sometimes
8125        end up having a redundant XVS type parallel to the aligner type.  */
8126     return raw_type;
8127
8128   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8129   if (real_type_namer == NULL
8130       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8131       || TYPE_NFIELDS (real_type_namer) != 1)
8132     return raw_type;
8133
8134   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8135     {
8136       /* This is an older encoding form where the base type needs to be
8137          looked up by name.  We prefer the newer enconding because it is
8138          more efficient.  */
8139       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8140       if (raw_real_type == NULL)
8141         return raw_type;
8142       else
8143         return raw_real_type;
8144     }
8145
8146   /* The field in our XVS type is a reference to the base type.  */
8147   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
8148 }
8149
8150 /* The type of value designated by TYPE, with all aligners removed.  */
8151
8152 struct type *
8153 ada_aligned_type (struct type *type)
8154 {
8155   if (ada_is_aligner_type (type))
8156     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8157   else
8158     return ada_get_base_type (type);
8159 }
8160
8161
8162 /* The address of the aligned value in an object at address VALADDR
8163    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
8164
8165 const gdb_byte *
8166 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
8167 {
8168   if (ada_is_aligner_type (type))
8169     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8170                                    valaddr +
8171                                    TYPE_FIELD_BITPOS (type,
8172                                                       0) / TARGET_CHAR_BIT);
8173   else
8174     return valaddr;
8175 }
8176
8177
8178
8179 /* The printed representation of an enumeration literal with encoded
8180    name NAME.  The value is good to the next call of ada_enum_name.  */
8181 const char *
8182 ada_enum_name (const char *name)
8183 {
8184   static char *result;
8185   static size_t result_len = 0;
8186   char *tmp;
8187
8188   /* First, unqualify the enumeration name:
8189      1. Search for the last '.' character.  If we find one, then skip
8190      all the preceeding characters, the unqualified name starts
8191      right after that dot.
8192      2. Otherwise, we may be debugging on a target where the compiler
8193      translates dots into "__".  Search forward for double underscores,
8194      but stop searching when we hit an overloading suffix, which is
8195      of the form "__" followed by digits.  */
8196
8197   tmp = strrchr (name, '.');
8198   if (tmp != NULL)
8199     name = tmp + 1;
8200   else
8201     {
8202       while ((tmp = strstr (name, "__")) != NULL)
8203         {
8204           if (isdigit (tmp[2]))
8205             break;
8206           else
8207             name = tmp + 2;
8208         }
8209     }
8210
8211   if (name[0] == 'Q')
8212     {
8213       int v;
8214
8215       if (name[1] == 'U' || name[1] == 'W')
8216         {
8217           if (sscanf (name + 2, "%x", &v) != 1)
8218             return name;
8219         }
8220       else
8221         return name;
8222
8223       GROW_VECT (result, result_len, 16);
8224       if (isascii (v) && isprint (v))
8225         xsnprintf (result, result_len, "'%c'", v);
8226       else if (name[1] == 'U')
8227         xsnprintf (result, result_len, "[\"%02x\"]", v);
8228       else
8229         xsnprintf (result, result_len, "[\"%04x\"]", v);
8230
8231       return result;
8232     }
8233   else
8234     {
8235       tmp = strstr (name, "__");
8236       if (tmp == NULL)
8237         tmp = strstr (name, "$");
8238       if (tmp != NULL)
8239         {
8240           GROW_VECT (result, result_len, tmp - name + 1);
8241           strncpy (result, name, tmp - name);
8242           result[tmp - name] = '\0';
8243           return result;
8244         }
8245
8246       return name;
8247     }
8248 }
8249
8250 /* Evaluate the subexpression of EXP starting at *POS as for
8251    evaluate_type, updating *POS to point just past the evaluated
8252    expression.  */
8253
8254 static struct value *
8255 evaluate_subexp_type (struct expression *exp, int *pos)
8256 {
8257   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8258 }
8259
8260 /* If VAL is wrapped in an aligner or subtype wrapper, return the
8261    value it wraps.  */
8262
8263 static struct value *
8264 unwrap_value (struct value *val)
8265 {
8266   struct type *type = ada_check_typedef (value_type (val));
8267
8268   if (ada_is_aligner_type (type))
8269     {
8270       struct value *v = ada_value_struct_elt (val, "F", 0);
8271       struct type *val_type = ada_check_typedef (value_type (v));
8272
8273       if (ada_type_name (val_type) == NULL)
8274         TYPE_NAME (val_type) = ada_type_name (type);
8275
8276       return unwrap_value (v);
8277     }
8278   else
8279     {
8280       struct type *raw_real_type =
8281         ada_check_typedef (ada_get_base_type (type));
8282
8283       /* If there is no parallel XVS or XVE type, then the value is
8284          already unwrapped.  Return it without further modification.  */
8285       if ((type == raw_real_type)
8286           && ada_find_parallel_type (type, "___XVE") == NULL)
8287         return val;
8288
8289       return
8290         coerce_unspec_val_to_type
8291         (val, ada_to_fixed_type (raw_real_type, 0,
8292                                  value_address (val),
8293                                  NULL, 1));
8294     }
8295 }
8296
8297 static struct value *
8298 cast_to_fixed (struct type *type, struct value *arg)
8299 {
8300   LONGEST val;
8301
8302   if (type == value_type (arg))
8303     return arg;
8304   else if (ada_is_fixed_point_type (value_type (arg)))
8305     val = ada_float_to_fixed (type,
8306                               ada_fixed_to_float (value_type (arg),
8307                                                   value_as_long (arg)));
8308   else
8309     {
8310       DOUBLEST argd = value_as_double (arg);
8311
8312       val = ada_float_to_fixed (type, argd);
8313     }
8314
8315   return value_from_longest (type, val);
8316 }
8317
8318 static struct value *
8319 cast_from_fixed (struct type *type, struct value *arg)
8320 {
8321   DOUBLEST val = ada_fixed_to_float (value_type (arg),
8322                                      value_as_long (arg));
8323
8324   return value_from_double (type, val);
8325 }
8326
8327 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
8328    return the converted value.  */
8329
8330 static struct value *
8331 coerce_for_assign (struct type *type, struct value *val)
8332 {
8333   struct type *type2 = value_type (val);
8334
8335   if (type == type2)
8336     return val;
8337
8338   type2 = ada_check_typedef (type2);
8339   type = ada_check_typedef (type);
8340
8341   if (TYPE_CODE (type2) == TYPE_CODE_PTR
8342       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8343     {
8344       val = ada_value_ind (val);
8345       type2 = value_type (val);
8346     }
8347
8348   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
8349       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8350     {
8351       if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
8352           || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8353           != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
8354         error (_("Incompatible types in assignment"));
8355       deprecated_set_value_type (val, type);
8356     }
8357   return val;
8358 }
8359
8360 static struct value *
8361 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
8362 {
8363   struct value *val;
8364   struct type *type1, *type2;
8365   LONGEST v, v1, v2;
8366
8367   arg1 = coerce_ref (arg1);
8368   arg2 = coerce_ref (arg2);
8369   type1 = base_type (ada_check_typedef (value_type (arg1)));
8370   type2 = base_type (ada_check_typedef (value_type (arg2)));
8371
8372   if (TYPE_CODE (type1) != TYPE_CODE_INT
8373       || TYPE_CODE (type2) != TYPE_CODE_INT)
8374     return value_binop (arg1, arg2, op);
8375
8376   switch (op)
8377     {
8378     case BINOP_MOD:
8379     case BINOP_DIV:
8380     case BINOP_REM:
8381       break;
8382     default:
8383       return value_binop (arg1, arg2, op);
8384     }
8385
8386   v2 = value_as_long (arg2);
8387   if (v2 == 0)
8388     error (_("second operand of %s must not be zero."), op_string (op));
8389
8390   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
8391     return value_binop (arg1, arg2, op);
8392
8393   v1 = value_as_long (arg1);
8394   switch (op)
8395     {
8396     case BINOP_DIV:
8397       v = v1 / v2;
8398       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
8399         v += v > 0 ? -1 : 1;
8400       break;
8401     case BINOP_REM:
8402       v = v1 % v2;
8403       if (v * v1 < 0)
8404         v -= v2;
8405       break;
8406     default:
8407       /* Should not reach this point.  */
8408       v = 0;
8409     }
8410
8411   val = allocate_value (type1);
8412   store_unsigned_integer (value_contents_raw (val),
8413                           TYPE_LENGTH (value_type (val)),
8414                           gdbarch_byte_order (get_type_arch (type1)), v);
8415   return val;
8416 }
8417
8418 static int
8419 ada_value_equal (struct value *arg1, struct value *arg2)
8420 {
8421   if (ada_is_direct_array_type (value_type (arg1))
8422       || ada_is_direct_array_type (value_type (arg2)))
8423     {
8424       /* Automatically dereference any array reference before
8425          we attempt to perform the comparison.  */
8426       arg1 = ada_coerce_ref (arg1);
8427       arg2 = ada_coerce_ref (arg2);
8428       
8429       arg1 = ada_coerce_to_simple_array (arg1);
8430       arg2 = ada_coerce_to_simple_array (arg2);
8431       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
8432           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
8433         error (_("Attempt to compare array with non-array"));
8434       /* FIXME: The following works only for types whose
8435          representations use all bits (no padding or undefined bits)
8436          and do not have user-defined equality.  */
8437       return
8438         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
8439         && memcmp (value_contents (arg1), value_contents (arg2),
8440                    TYPE_LENGTH (value_type (arg1))) == 0;
8441     }
8442   return value_equal (arg1, arg2);
8443 }
8444
8445 /* Total number of component associations in the aggregate starting at
8446    index PC in EXP.  Assumes that index PC is the start of an
8447    OP_AGGREGATE.  */
8448
8449 static int
8450 num_component_specs (struct expression *exp, int pc)
8451 {
8452   int n, m, i;
8453
8454   m = exp->elts[pc + 1].longconst;
8455   pc += 3;
8456   n = 0;
8457   for (i = 0; i < m; i += 1)
8458     {
8459       switch (exp->elts[pc].opcode) 
8460         {
8461         default:
8462           n += 1;
8463           break;
8464         case OP_CHOICES:
8465           n += exp->elts[pc + 1].longconst;
8466           break;
8467         }
8468       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
8469     }
8470   return n;
8471 }
8472
8473 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
8474    component of LHS (a simple array or a record), updating *POS past
8475    the expression, assuming that LHS is contained in CONTAINER.  Does
8476    not modify the inferior's memory, nor does it modify LHS (unless
8477    LHS == CONTAINER).  */
8478
8479 static void
8480 assign_component (struct value *container, struct value *lhs, LONGEST index,
8481                   struct expression *exp, int *pos)
8482 {
8483   struct value *mark = value_mark ();
8484   struct value *elt;
8485
8486   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
8487     {
8488       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
8489       struct value *index_val = value_from_longest (index_type, index);
8490
8491       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
8492     }
8493   else
8494     {
8495       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
8496       elt = ada_to_fixed_value (unwrap_value (elt));
8497     }
8498
8499   if (exp->elts[*pos].opcode == OP_AGGREGATE)
8500     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
8501   else
8502     value_assign_to_component (container, elt, 
8503                                ada_evaluate_subexp (NULL, exp, pos, 
8504                                                     EVAL_NORMAL));
8505
8506   value_free_to_mark (mark);
8507 }
8508
8509 /* Assuming that LHS represents an lvalue having a record or array
8510    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
8511    of that aggregate's value to LHS, advancing *POS past the
8512    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
8513    lvalue containing LHS (possibly LHS itself).  Does not modify
8514    the inferior's memory, nor does it modify the contents of 
8515    LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
8516
8517 static struct value *
8518 assign_aggregate (struct value *container, 
8519                   struct value *lhs, struct expression *exp, 
8520                   int *pos, enum noside noside)
8521 {
8522   struct type *lhs_type;
8523   int n = exp->elts[*pos+1].longconst;
8524   LONGEST low_index, high_index;
8525   int num_specs;
8526   LONGEST *indices;
8527   int max_indices, num_indices;
8528   int is_array_aggregate;
8529   int i;
8530
8531   *pos += 3;
8532   if (noside != EVAL_NORMAL)
8533     {
8534       int i;
8535
8536       for (i = 0; i < n; i += 1)
8537         ada_evaluate_subexp (NULL, exp, pos, noside);
8538       return container;
8539     }
8540
8541   container = ada_coerce_ref (container);
8542   if (ada_is_direct_array_type (value_type (container)))
8543     container = ada_coerce_to_simple_array (container);
8544   lhs = ada_coerce_ref (lhs);
8545   if (!deprecated_value_modifiable (lhs))
8546     error (_("Left operand of assignment is not a modifiable lvalue."));
8547
8548   lhs_type = value_type (lhs);
8549   if (ada_is_direct_array_type (lhs_type))
8550     {
8551       lhs = ada_coerce_to_simple_array (lhs);
8552       lhs_type = value_type (lhs);
8553       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
8554       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
8555       is_array_aggregate = 1;
8556     }
8557   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
8558     {
8559       low_index = 0;
8560       high_index = num_visible_fields (lhs_type) - 1;
8561       is_array_aggregate = 0;
8562     }
8563   else
8564     error (_("Left-hand side must be array or record."));
8565
8566   num_specs = num_component_specs (exp, *pos - 3);
8567   max_indices = 4 * num_specs + 4;
8568   indices = alloca (max_indices * sizeof (indices[0]));
8569   indices[0] = indices[1] = low_index - 1;
8570   indices[2] = indices[3] = high_index + 1;
8571   num_indices = 4;
8572
8573   for (i = 0; i < n; i += 1)
8574     {
8575       switch (exp->elts[*pos].opcode)
8576         {
8577         case OP_CHOICES:
8578           aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
8579                                          &num_indices, max_indices,
8580                                          low_index, high_index);
8581           break;
8582         case OP_POSITIONAL:
8583           aggregate_assign_positional (container, lhs, exp, pos, indices,
8584                                        &num_indices, max_indices,
8585                                        low_index, high_index);
8586           break;
8587         case OP_OTHERS:
8588           if (i != n-1)
8589             error (_("Misplaced 'others' clause"));
8590           aggregate_assign_others (container, lhs, exp, pos, indices, 
8591                                    num_indices, low_index, high_index);
8592           break;
8593         default:
8594           error (_("Internal error: bad aggregate clause"));
8595         }
8596     }
8597
8598   return container;
8599 }
8600               
8601 /* Assign into the component of LHS indexed by the OP_POSITIONAL
8602    construct at *POS, updating *POS past the construct, given that
8603    the positions are relative to lower bound LOW, where HIGH is the 
8604    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
8605    updating *NUM_INDICES as needed.  CONTAINER is as for
8606    assign_aggregate.  */
8607 static void
8608 aggregate_assign_positional (struct value *container,
8609                              struct value *lhs, struct expression *exp,
8610                              int *pos, LONGEST *indices, int *num_indices,
8611                              int max_indices, LONGEST low, LONGEST high) 
8612 {
8613   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
8614   
8615   if (ind - 1 == high)
8616     warning (_("Extra components in aggregate ignored."));
8617   if (ind <= high)
8618     {
8619       add_component_interval (ind, ind, indices, num_indices, max_indices);
8620       *pos += 3;
8621       assign_component (container, lhs, ind, exp, pos);
8622     }
8623   else
8624     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8625 }
8626
8627 /* Assign into the components of LHS indexed by the OP_CHOICES
8628    construct at *POS, updating *POS past the construct, given that
8629    the allowable indices are LOW..HIGH.  Record the indices assigned
8630    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
8631    needed.  CONTAINER is as for assign_aggregate.  */
8632 static void
8633 aggregate_assign_from_choices (struct value *container,
8634                                struct value *lhs, struct expression *exp,
8635                                int *pos, LONGEST *indices, int *num_indices,
8636                                int max_indices, LONGEST low, LONGEST high) 
8637 {
8638   int j;
8639   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
8640   int choice_pos, expr_pc;
8641   int is_array = ada_is_direct_array_type (value_type (lhs));
8642
8643   choice_pos = *pos += 3;
8644
8645   for (j = 0; j < n_choices; j += 1)
8646     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8647   expr_pc = *pos;
8648   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8649   
8650   for (j = 0; j < n_choices; j += 1)
8651     {
8652       LONGEST lower, upper;
8653       enum exp_opcode op = exp->elts[choice_pos].opcode;
8654
8655       if (op == OP_DISCRETE_RANGE)
8656         {
8657           choice_pos += 1;
8658           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8659                                                       EVAL_NORMAL));
8660           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
8661                                                       EVAL_NORMAL));
8662         }
8663       else if (is_array)
8664         {
8665           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
8666                                                       EVAL_NORMAL));
8667           upper = lower;
8668         }
8669       else
8670         {
8671           int ind;
8672           char *name;
8673
8674           switch (op)
8675             {
8676             case OP_NAME:
8677               name = &exp->elts[choice_pos + 2].string;
8678               break;
8679             case OP_VAR_VALUE:
8680               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
8681               break;
8682             default:
8683               error (_("Invalid record component association."));
8684             }
8685           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
8686           ind = 0;
8687           if (! find_struct_field (name, value_type (lhs), 0, 
8688                                    NULL, NULL, NULL, NULL, &ind))
8689             error (_("Unknown component name: %s."), name);
8690           lower = upper = ind;
8691         }
8692
8693       if (lower <= upper && (lower < low || upper > high))
8694         error (_("Index in component association out of bounds."));
8695
8696       add_component_interval (lower, upper, indices, num_indices,
8697                               max_indices);
8698       while (lower <= upper)
8699         {
8700           int pos1;
8701
8702           pos1 = expr_pc;
8703           assign_component (container, lhs, lower, exp, &pos1);
8704           lower += 1;
8705         }
8706     }
8707 }
8708
8709 /* Assign the value of the expression in the OP_OTHERS construct in
8710    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
8711    have not been previously assigned.  The index intervals already assigned
8712    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
8713    OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
8714 static void
8715 aggregate_assign_others (struct value *container,
8716                          struct value *lhs, struct expression *exp,
8717                          int *pos, LONGEST *indices, int num_indices,
8718                          LONGEST low, LONGEST high) 
8719 {
8720   int i;
8721   int expr_pc = *pos + 1;
8722   
8723   for (i = 0; i < num_indices - 2; i += 2)
8724     {
8725       LONGEST ind;
8726
8727       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
8728         {
8729           int localpos;
8730
8731           localpos = expr_pc;
8732           assign_component (container, lhs, ind, exp, &localpos);
8733         }
8734     }
8735   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8736 }
8737
8738 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
8739    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
8740    modifying *SIZE as needed.  It is an error if *SIZE exceeds
8741    MAX_SIZE.  The resulting intervals do not overlap.  */
8742 static void
8743 add_component_interval (LONGEST low, LONGEST high, 
8744                         LONGEST* indices, int *size, int max_size)
8745 {
8746   int i, j;
8747
8748   for (i = 0; i < *size; i += 2) {
8749     if (high >= indices[i] && low <= indices[i + 1])
8750       {
8751         int kh;
8752
8753         for (kh = i + 2; kh < *size; kh += 2)
8754           if (high < indices[kh])
8755             break;
8756         if (low < indices[i])
8757           indices[i] = low;
8758         indices[i + 1] = indices[kh - 1];
8759         if (high > indices[i + 1])
8760           indices[i + 1] = high;
8761         memcpy (indices + i + 2, indices + kh, *size - kh);
8762         *size -= kh - i - 2;
8763         return;
8764       }
8765     else if (high < indices[i])
8766       break;
8767   }
8768         
8769   if (*size == max_size)
8770     error (_("Internal error: miscounted aggregate components."));
8771   *size += 2;
8772   for (j = *size-1; j >= i+2; j -= 1)
8773     indices[j] = indices[j - 2];
8774   indices[i] = low;
8775   indices[i + 1] = high;
8776 }
8777
8778 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
8779    is different.  */
8780
8781 static struct value *
8782 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
8783 {
8784   if (type == ada_check_typedef (value_type (arg2)))
8785     return arg2;
8786
8787   if (ada_is_fixed_point_type (type))
8788     return (cast_to_fixed (type, arg2));
8789
8790   if (ada_is_fixed_point_type (value_type (arg2)))
8791     return cast_from_fixed (type, arg2);
8792
8793   return value_cast (type, arg2);
8794 }
8795
8796 /*  Evaluating Ada expressions, and printing their result.
8797     ------------------------------------------------------
8798
8799     1. Introduction:
8800     ----------------
8801
8802     We usually evaluate an Ada expression in order to print its value.
8803     We also evaluate an expression in order to print its type, which
8804     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
8805     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
8806     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
8807     the evaluation compared to the EVAL_NORMAL, but is otherwise very
8808     similar.
8809
8810     Evaluating expressions is a little more complicated for Ada entities
8811     than it is for entities in languages such as C.  The main reason for
8812     this is that Ada provides types whose definition might be dynamic.
8813     One example of such types is variant records.  Or another example
8814     would be an array whose bounds can only be known at run time.
8815
8816     The following description is a general guide as to what should be
8817     done (and what should NOT be done) in order to evaluate an expression
8818     involving such types, and when.  This does not cover how the semantic
8819     information is encoded by GNAT as this is covered separatly.  For the
8820     document used as the reference for the GNAT encoding, see exp_dbug.ads
8821     in the GNAT sources.
8822
8823     Ideally, we should embed each part of this description next to its
8824     associated code.  Unfortunately, the amount of code is so vast right
8825     now that it's hard to see whether the code handling a particular
8826     situation might be duplicated or not.  One day, when the code is
8827     cleaned up, this guide might become redundant with the comments
8828     inserted in the code, and we might want to remove it.
8829
8830     2. ``Fixing'' an Entity, the Simple Case:
8831     -----------------------------------------
8832
8833     When evaluating Ada expressions, the tricky issue is that they may
8834     reference entities whose type contents and size are not statically
8835     known.  Consider for instance a variant record:
8836
8837        type Rec (Empty : Boolean := True) is record
8838           case Empty is
8839              when True => null;
8840              when False => Value : Integer;
8841           end case;
8842        end record;
8843        Yes : Rec := (Empty => False, Value => 1);
8844        No  : Rec := (empty => True);
8845
8846     The size and contents of that record depends on the value of the
8847     descriminant (Rec.Empty).  At this point, neither the debugging
8848     information nor the associated type structure in GDB are able to
8849     express such dynamic types.  So what the debugger does is to create
8850     "fixed" versions of the type that applies to the specific object.
8851     We also informally refer to this opperation as "fixing" an object,
8852     which means creating its associated fixed type.
8853
8854     Example: when printing the value of variable "Yes" above, its fixed
8855     type would look like this:
8856
8857        type Rec is record
8858           Empty : Boolean;
8859           Value : Integer;
8860        end record;
8861
8862     On the other hand, if we printed the value of "No", its fixed type
8863     would become:
8864
8865        type Rec is record
8866           Empty : Boolean;
8867        end record;
8868
8869     Things become a little more complicated when trying to fix an entity
8870     with a dynamic type that directly contains another dynamic type,
8871     such as an array of variant records, for instance.  There are
8872     two possible cases: Arrays, and records.
8873
8874     3. ``Fixing'' Arrays:
8875     ---------------------
8876
8877     The type structure in GDB describes an array in terms of its bounds,
8878     and the type of its elements.  By design, all elements in the array
8879     have the same type and we cannot represent an array of variant elements
8880     using the current type structure in GDB.  When fixing an array,
8881     we cannot fix the array element, as we would potentially need one
8882     fixed type per element of the array.  As a result, the best we can do
8883     when fixing an array is to produce an array whose bounds and size
8884     are correct (allowing us to read it from memory), but without having
8885     touched its element type.  Fixing each element will be done later,
8886     when (if) necessary.
8887
8888     Arrays are a little simpler to handle than records, because the same
8889     amount of memory is allocated for each element of the array, even if
8890     the amount of space actually used by each element differs from element
8891     to element.  Consider for instance the following array of type Rec:
8892
8893        type Rec_Array is array (1 .. 2) of Rec;
8894
8895     The actual amount of memory occupied by each element might be different
8896     from element to element, depending on the value of their discriminant.
8897     But the amount of space reserved for each element in the array remains
8898     fixed regardless.  So we simply need to compute that size using
8899     the debugging information available, from which we can then determine
8900     the array size (we multiply the number of elements of the array by
8901     the size of each element).
8902
8903     The simplest case is when we have an array of a constrained element
8904     type. For instance, consider the following type declarations:
8905
8906         type Bounded_String (Max_Size : Integer) is
8907            Length : Integer;
8908            Buffer : String (1 .. Max_Size);
8909         end record;
8910         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
8911
8912     In this case, the compiler describes the array as an array of
8913     variable-size elements (identified by its XVS suffix) for which
8914     the size can be read in the parallel XVZ variable.
8915
8916     In the case of an array of an unconstrained element type, the compiler
8917     wraps the array element inside a private PAD type.  This type should not
8918     be shown to the user, and must be "unwrap"'ed before printing.  Note
8919     that we also use the adjective "aligner" in our code to designate
8920     these wrapper types.
8921
8922     In some cases, the size allocated for each element is statically
8923     known.  In that case, the PAD type already has the correct size,
8924     and the array element should remain unfixed.
8925
8926     But there are cases when this size is not statically known.
8927     For instance, assuming that "Five" is an integer variable:
8928
8929         type Dynamic is array (1 .. Five) of Integer;
8930         type Wrapper (Has_Length : Boolean := False) is record
8931            Data : Dynamic;
8932            case Has_Length is
8933               when True => Length : Integer;
8934               when False => null;
8935            end case;
8936         end record;
8937         type Wrapper_Array is array (1 .. 2) of Wrapper;
8938
8939         Hello : Wrapper_Array := (others => (Has_Length => True,
8940                                              Data => (others => 17),
8941                                              Length => 1));
8942
8943
8944     The debugging info would describe variable Hello as being an
8945     array of a PAD type.  The size of that PAD type is not statically
8946     known, but can be determined using a parallel XVZ variable.
8947     In that case, a copy of the PAD type with the correct size should
8948     be used for the fixed array.
8949
8950     3. ``Fixing'' record type objects:
8951     ----------------------------------
8952
8953     Things are slightly different from arrays in the case of dynamic
8954     record types.  In this case, in order to compute the associated
8955     fixed type, we need to determine the size and offset of each of
8956     its components.  This, in turn, requires us to compute the fixed
8957     type of each of these components.
8958
8959     Consider for instance the example:
8960
8961         type Bounded_String (Max_Size : Natural) is record
8962            Str : String (1 .. Max_Size);
8963            Length : Natural;
8964         end record;
8965         My_String : Bounded_String (Max_Size => 10);
8966
8967     In that case, the position of field "Length" depends on the size
8968     of field Str, which itself depends on the value of the Max_Size
8969     discriminant.  In order to fix the type of variable My_String,
8970     we need to fix the type of field Str.  Therefore, fixing a variant
8971     record requires us to fix each of its components.
8972
8973     However, if a component does not have a dynamic size, the component
8974     should not be fixed.  In particular, fields that use a PAD type
8975     should not fixed.  Here is an example where this might happen
8976     (assuming type Rec above):
8977
8978        type Container (Big : Boolean) is record
8979           First : Rec;
8980           After : Integer;
8981           case Big is
8982              when True => Another : Integer;
8983              when False => null;
8984           end case;
8985        end record;
8986        My_Container : Container := (Big => False,
8987                                     First => (Empty => True),
8988                                     After => 42);
8989
8990     In that example, the compiler creates a PAD type for component First,
8991     whose size is constant, and then positions the component After just
8992     right after it.  The offset of component After is therefore constant
8993     in this case.
8994
8995     The debugger computes the position of each field based on an algorithm
8996     that uses, among other things, the actual position and size of the field
8997     preceding it.  Let's now imagine that the user is trying to print
8998     the value of My_Container.  If the type fixing was recursive, we would
8999     end up computing the offset of field After based on the size of the
9000     fixed version of field First.  And since in our example First has
9001     only one actual field, the size of the fixed type is actually smaller
9002     than the amount of space allocated to that field, and thus we would
9003     compute the wrong offset of field After.
9004
9005     To make things more complicated, we need to watch out for dynamic
9006     components of variant records (identified by the ___XVL suffix in
9007     the component name).  Even if the target type is a PAD type, the size
9008     of that type might not be statically known.  So the PAD type needs
9009     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
9010     we might end up with the wrong size for our component.  This can be
9011     observed with the following type declarations:
9012
9013         type Octal is new Integer range 0 .. 7;
9014         type Octal_Array is array (Positive range <>) of Octal;
9015         pragma Pack (Octal_Array);
9016
9017         type Octal_Buffer (Size : Positive) is record
9018            Buffer : Octal_Array (1 .. Size);
9019            Length : Integer;
9020         end record;
9021
9022     In that case, Buffer is a PAD type whose size is unset and needs
9023     to be computed by fixing the unwrapped type.
9024
9025     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9026     ----------------------------------------------------------
9027
9028     Lastly, when should the sub-elements of an entity that remained unfixed
9029     thus far, be actually fixed?
9030
9031     The answer is: Only when referencing that element.  For instance
9032     when selecting one component of a record, this specific component
9033     should be fixed at that point in time.  Or when printing the value
9034     of a record, each component should be fixed before its value gets
9035     printed.  Similarly for arrays, the element of the array should be
9036     fixed when printing each element of the array, or when extracting
9037     one element out of that array.  On the other hand, fixing should
9038     not be performed on the elements when taking a slice of an array!
9039
9040     Note that one of the side-effects of miscomputing the offset and
9041     size of each field is that we end up also miscomputing the size
9042     of the containing type.  This can have adverse results when computing
9043     the value of an entity.  GDB fetches the value of an entity based
9044     on the size of its type, and thus a wrong size causes GDB to fetch
9045     the wrong amount of memory.  In the case where the computed size is
9046     too small, GDB fetches too little data to print the value of our
9047     entiry.  Results in this case as unpredicatble, as we usually read
9048     past the buffer containing the data =:-o.  */
9049
9050 /* Implement the evaluate_exp routine in the exp_descriptor structure
9051    for the Ada language.  */
9052
9053 static struct value *
9054 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9055                      int *pos, enum noside noside)
9056 {
9057   enum exp_opcode op;
9058   int tem;
9059   int pc;
9060   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9061   struct type *type;
9062   int nargs, oplen;
9063   struct value **argvec;
9064
9065   pc = *pos;
9066   *pos += 1;
9067   op = exp->elts[pc].opcode;
9068
9069   switch (op)
9070     {
9071     default:
9072       *pos -= 1;
9073       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9074       arg1 = unwrap_value (arg1);
9075
9076       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9077          then we need to perform the conversion manually, because
9078          evaluate_subexp_standard doesn't do it.  This conversion is
9079          necessary in Ada because the different kinds of float/fixed
9080          types in Ada have different representations.
9081
9082          Similarly, we need to perform the conversion from OP_LONG
9083          ourselves.  */
9084       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9085         arg1 = ada_value_cast (expect_type, arg1, noside);
9086
9087       return arg1;
9088
9089     case OP_STRING:
9090       {
9091         struct value *result;
9092
9093         *pos -= 1;
9094         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9095         /* The result type will have code OP_STRING, bashed there from 
9096            OP_ARRAY.  Bash it back.  */
9097         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9098           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
9099         return result;
9100       }
9101
9102     case UNOP_CAST:
9103       (*pos) += 2;
9104       type = exp->elts[pc + 1].type;
9105       arg1 = evaluate_subexp (type, exp, pos, noside);
9106       if (noside == EVAL_SKIP)
9107         goto nosideret;
9108       arg1 = ada_value_cast (type, arg1, noside);
9109       return arg1;
9110
9111     case UNOP_QUAL:
9112       (*pos) += 2;
9113       type = exp->elts[pc + 1].type;
9114       return ada_evaluate_subexp (type, exp, pos, noside);
9115
9116     case BINOP_ASSIGN:
9117       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9118       if (exp->elts[*pos].opcode == OP_AGGREGATE)
9119         {
9120           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9121           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9122             return arg1;
9123           return ada_value_assign (arg1, arg1);
9124         }
9125       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9126          except if the lhs of our assignment is a convenience variable.
9127          In the case of assigning to a convenience variable, the lhs
9128          should be exactly the result of the evaluation of the rhs.  */
9129       type = value_type (arg1);
9130       if (VALUE_LVAL (arg1) == lval_internalvar)
9131          type = NULL;
9132       arg2 = evaluate_subexp (type, exp, pos, noside);
9133       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9134         return arg1;
9135       if (ada_is_fixed_point_type (value_type (arg1)))
9136         arg2 = cast_to_fixed (value_type (arg1), arg2);
9137       else if (ada_is_fixed_point_type (value_type (arg2)))
9138         error
9139           (_("Fixed-point values must be assigned to fixed-point variables"));
9140       else
9141         arg2 = coerce_for_assign (value_type (arg1), arg2);
9142       return ada_value_assign (arg1, arg2);
9143
9144     case BINOP_ADD:
9145       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9146       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9147       if (noside == EVAL_SKIP)
9148         goto nosideret;
9149       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9150         return (value_from_longest
9151                  (value_type (arg1),
9152                   value_as_long (arg1) + value_as_long (arg2)));
9153       if ((ada_is_fixed_point_type (value_type (arg1))
9154            || ada_is_fixed_point_type (value_type (arg2)))
9155           && value_type (arg1) != value_type (arg2))
9156         error (_("Operands of fixed-point addition must have the same type"));
9157       /* Do the addition, and cast the result to the type of the first
9158          argument.  We cannot cast the result to a reference type, so if
9159          ARG1 is a reference type, find its underlying type.  */
9160       type = value_type (arg1);
9161       while (TYPE_CODE (type) == TYPE_CODE_REF)
9162         type = TYPE_TARGET_TYPE (type);
9163       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9164       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
9165
9166     case BINOP_SUB:
9167       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9168       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9169       if (noside == EVAL_SKIP)
9170         goto nosideret;
9171       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9172         return (value_from_longest
9173                  (value_type (arg1),
9174                   value_as_long (arg1) - value_as_long (arg2)));
9175       if ((ada_is_fixed_point_type (value_type (arg1))
9176            || ada_is_fixed_point_type (value_type (arg2)))
9177           && value_type (arg1) != value_type (arg2))
9178         error (_("Operands of fixed-point subtraction "
9179                  "must have the same type"));
9180       /* Do the substraction, and cast the result to the type of the first
9181          argument.  We cannot cast the result to a reference type, so if
9182          ARG1 is a reference type, find its underlying type.  */
9183       type = value_type (arg1);
9184       while (TYPE_CODE (type) == TYPE_CODE_REF)
9185         type = TYPE_TARGET_TYPE (type);
9186       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9187       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
9188
9189     case BINOP_MUL:
9190     case BINOP_DIV:
9191     case BINOP_REM:
9192     case BINOP_MOD:
9193       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9194       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9195       if (noside == EVAL_SKIP)
9196         goto nosideret;
9197       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9198         {
9199           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9200           return value_zero (value_type (arg1), not_lval);
9201         }
9202       else
9203         {
9204           type = builtin_type (exp->gdbarch)->builtin_double;
9205           if (ada_is_fixed_point_type (value_type (arg1)))
9206             arg1 = cast_from_fixed (type, arg1);
9207           if (ada_is_fixed_point_type (value_type (arg2)))
9208             arg2 = cast_from_fixed (type, arg2);
9209           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9210           return ada_value_binop (arg1, arg2, op);
9211         }
9212
9213     case BINOP_EQUAL:
9214     case BINOP_NOTEQUAL:
9215       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9216       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
9217       if (noside == EVAL_SKIP)
9218         goto nosideret;
9219       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9220         tem = 0;
9221       else
9222         {
9223           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9224           tem = ada_value_equal (arg1, arg2);
9225         }
9226       if (op == BINOP_NOTEQUAL)
9227         tem = !tem;
9228       type = language_bool_type (exp->language_defn, exp->gdbarch);
9229       return value_from_longest (type, (LONGEST) tem);
9230
9231     case UNOP_NEG:
9232       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9233       if (noside == EVAL_SKIP)
9234         goto nosideret;
9235       else if (ada_is_fixed_point_type (value_type (arg1)))
9236         return value_cast (value_type (arg1), value_neg (arg1));
9237       else
9238         {
9239           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9240           return value_neg (arg1);
9241         }
9242
9243     case BINOP_LOGICAL_AND:
9244     case BINOP_LOGICAL_OR:
9245     case UNOP_LOGICAL_NOT:
9246       {
9247         struct value *val;
9248
9249         *pos -= 1;
9250         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
9251         type = language_bool_type (exp->language_defn, exp->gdbarch);
9252         return value_cast (type, val);
9253       }
9254
9255     case BINOP_BITWISE_AND:
9256     case BINOP_BITWISE_IOR:
9257     case BINOP_BITWISE_XOR:
9258       {
9259         struct value *val;
9260
9261         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9262         *pos = pc;
9263         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
9264
9265         return value_cast (value_type (arg1), val);
9266       }
9267
9268     case OP_VAR_VALUE:
9269       *pos -= 1;
9270
9271       if (noside == EVAL_SKIP)
9272         {
9273           *pos += 4;
9274           goto nosideret;
9275         }
9276       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
9277         /* Only encountered when an unresolved symbol occurs in a
9278            context other than a function call, in which case, it is
9279            invalid.  */
9280         error (_("Unexpected unresolved symbol, %s, during evaluation"),
9281                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
9282       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9283         {
9284           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
9285           /* Check to see if this is a tagged type.  We also need to handle
9286              the case where the type is a reference to a tagged type, but
9287              we have to be careful to exclude pointers to tagged types.
9288              The latter should be shown as usual (as a pointer), whereas
9289              a reference should mostly be transparent to the user.  */
9290           if (ada_is_tagged_type (type, 0)
9291               || (TYPE_CODE(type) == TYPE_CODE_REF
9292                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
9293           {
9294             /* Tagged types are a little special in the fact that the real
9295                type is dynamic and can only be determined by inspecting the
9296                object's tag.  This means that we need to get the object's
9297                value first (EVAL_NORMAL) and then extract the actual object
9298                type from its tag.
9299
9300                Note that we cannot skip the final step where we extract
9301                the object type from its tag, because the EVAL_NORMAL phase
9302                results in dynamic components being resolved into fixed ones.
9303                This can cause problems when trying to print the type
9304                description of tagged types whose parent has a dynamic size:
9305                We use the type name of the "_parent" component in order
9306                to print the name of the ancestor type in the type description.
9307                If that component had a dynamic size, the resolution into
9308                a fixed type would result in the loss of that type name,
9309                thus preventing us from printing the name of the ancestor
9310                type in the type description.  */
9311             struct type *actual_type;
9312
9313             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
9314             actual_type = type_from_tag (ada_value_tag (arg1));
9315             if (actual_type == NULL)
9316               /* If, for some reason, we were unable to determine
9317                  the actual type from the tag, then use the static
9318                  approximation that we just computed as a fallback.
9319                  This can happen if the debugging information is
9320                  incomplete, for instance.  */
9321               actual_type = type;
9322
9323             return value_zero (actual_type, not_lval);
9324           }
9325
9326           *pos += 4;
9327           return value_zero
9328             (to_static_fixed_type
9329              (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
9330              not_lval);
9331         }
9332       else
9333         {
9334           arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9335           arg1 = unwrap_value (arg1);
9336           return ada_to_fixed_value (arg1);
9337         }
9338
9339     case OP_FUNCALL:
9340       (*pos) += 2;
9341
9342       /* Allocate arg vector, including space for the function to be
9343          called in argvec[0] and a terminating NULL.  */
9344       nargs = longest_to_int (exp->elts[pc + 1].longconst);
9345       argvec =
9346         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
9347
9348       if (exp->elts[*pos].opcode == OP_VAR_VALUE
9349           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
9350         error (_("Unexpected unresolved symbol, %s, during evaluation"),
9351                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
9352       else
9353         {
9354           for (tem = 0; tem <= nargs; tem += 1)
9355             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9356           argvec[tem] = 0;
9357
9358           if (noside == EVAL_SKIP)
9359             goto nosideret;
9360         }
9361
9362       if (ada_is_constrained_packed_array_type
9363           (desc_base_type (value_type (argvec[0]))))
9364         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
9365       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
9366                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
9367         /* This is a packed array that has already been fixed, and
9368            therefore already coerced to a simple array.  Nothing further
9369            to do.  */
9370         ;
9371       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
9372                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
9373                    && VALUE_LVAL (argvec[0]) == lval_memory))
9374         argvec[0] = value_addr (argvec[0]);
9375
9376       type = ada_check_typedef (value_type (argvec[0]));
9377
9378       /* Ada allows us to implicitly dereference arrays when subscripting
9379          them.  So, if this is an typedef (encoding use for array access
9380          types encoded as fat pointers), strip it now.  */
9381       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
9382         type = ada_typedef_target_type (type);
9383
9384       if (TYPE_CODE (type) == TYPE_CODE_PTR)
9385         {
9386           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
9387             {
9388             case TYPE_CODE_FUNC:
9389               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
9390               break;
9391             case TYPE_CODE_ARRAY:
9392               break;
9393             case TYPE_CODE_STRUCT:
9394               if (noside != EVAL_AVOID_SIDE_EFFECTS)
9395                 argvec[0] = ada_value_ind (argvec[0]);
9396               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
9397               break;
9398             default:
9399               error (_("cannot subscript or call something of type `%s'"),
9400                      ada_type_name (value_type (argvec[0])));
9401               break;
9402             }
9403         }
9404
9405       switch (TYPE_CODE (type))
9406         {
9407         case TYPE_CODE_FUNC:
9408           if (noside == EVAL_AVOID_SIDE_EFFECTS)
9409             return allocate_value (TYPE_TARGET_TYPE (type));
9410           return call_function_by_hand (argvec[0], nargs, argvec + 1);
9411         case TYPE_CODE_STRUCT:
9412           {
9413             int arity;
9414
9415             arity = ada_array_arity (type);
9416             type = ada_array_element_type (type, nargs);
9417             if (type == NULL)
9418               error (_("cannot subscript or call a record"));
9419             if (arity != nargs)
9420               error (_("wrong number of subscripts; expecting %d"), arity);
9421             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9422               return value_zero (ada_aligned_type (type), lval_memory);
9423             return
9424               unwrap_value (ada_value_subscript
9425                             (argvec[0], nargs, argvec + 1));
9426           }
9427         case TYPE_CODE_ARRAY:
9428           if (noside == EVAL_AVOID_SIDE_EFFECTS)
9429             {
9430               type = ada_array_element_type (type, nargs);
9431               if (type == NULL)
9432                 error (_("element type of array unknown"));
9433               else
9434                 return value_zero (ada_aligned_type (type), lval_memory);
9435             }
9436           return
9437             unwrap_value (ada_value_subscript
9438                           (ada_coerce_to_simple_array (argvec[0]),
9439                            nargs, argvec + 1));
9440         case TYPE_CODE_PTR:     /* Pointer to array */
9441           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
9442           if (noside == EVAL_AVOID_SIDE_EFFECTS)
9443             {
9444               type = ada_array_element_type (type, nargs);
9445               if (type == NULL)
9446                 error (_("element type of array unknown"));
9447               else
9448                 return value_zero (ada_aligned_type (type), lval_memory);
9449             }
9450           return
9451             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
9452                                                    nargs, argvec + 1));
9453
9454         default:
9455           error (_("Attempt to index or call something other than an "
9456                    "array or function"));
9457         }
9458
9459     case TERNOP_SLICE:
9460       {
9461         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9462         struct value *low_bound_val =
9463           evaluate_subexp (NULL_TYPE, exp, pos, noside);
9464         struct value *high_bound_val =
9465           evaluate_subexp (NULL_TYPE, exp, pos, noside);
9466         LONGEST low_bound;
9467         LONGEST high_bound;
9468
9469         low_bound_val = coerce_ref (low_bound_val);
9470         high_bound_val = coerce_ref (high_bound_val);
9471         low_bound = pos_atr (low_bound_val);
9472         high_bound = pos_atr (high_bound_val);
9473
9474         if (noside == EVAL_SKIP)
9475           goto nosideret;
9476
9477         /* If this is a reference to an aligner type, then remove all
9478            the aligners.  */
9479         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
9480             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
9481           TYPE_TARGET_TYPE (value_type (array)) =
9482             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
9483
9484         if (ada_is_constrained_packed_array_type (value_type (array)))
9485           error (_("cannot slice a packed array"));
9486
9487         /* If this is a reference to an array or an array lvalue,
9488            convert to a pointer.  */
9489         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
9490             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
9491                 && VALUE_LVAL (array) == lval_memory))
9492           array = value_addr (array);
9493
9494         if (noside == EVAL_AVOID_SIDE_EFFECTS
9495             && ada_is_array_descriptor_type (ada_check_typedef
9496                                              (value_type (array))))
9497           return empty_array (ada_type_of_array (array, 0), low_bound);
9498
9499         array = ada_coerce_to_simple_array_ptr (array);
9500
9501         /* If we have more than one level of pointer indirection,
9502            dereference the value until we get only one level.  */
9503         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
9504                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
9505                      == TYPE_CODE_PTR))
9506           array = value_ind (array);
9507
9508         /* Make sure we really do have an array type before going further,
9509            to avoid a SEGV when trying to get the index type or the target
9510            type later down the road if the debug info generated by
9511            the compiler is incorrect or incomplete.  */
9512         if (!ada_is_simple_array_type (value_type (array)))
9513           error (_("cannot take slice of non-array"));
9514
9515         if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
9516           {
9517             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
9518               return empty_array (TYPE_TARGET_TYPE (value_type (array)),
9519                                   low_bound);
9520             else
9521               {
9522                 struct type *arr_type0 =
9523                   to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
9524                                        NULL, 1);
9525
9526                 return ada_value_slice_from_ptr (array, arr_type0,
9527                                                  longest_to_int (low_bound),
9528                                                  longest_to_int (high_bound));
9529               }
9530           }
9531         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9532           return array;
9533         else if (high_bound < low_bound)
9534           return empty_array (value_type (array), low_bound);
9535         else
9536           return ada_value_slice (array, longest_to_int (low_bound),
9537                                   longest_to_int (high_bound));
9538       }
9539
9540     case UNOP_IN_RANGE:
9541       (*pos) += 2;
9542       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9543       type = check_typedef (exp->elts[pc + 1].type);
9544
9545       if (noside == EVAL_SKIP)
9546         goto nosideret;
9547
9548       switch (TYPE_CODE (type))
9549         {
9550         default:
9551           lim_warning (_("Membership test incompletely implemented; "
9552                          "always returns true"));
9553           type = language_bool_type (exp->language_defn, exp->gdbarch);
9554           return value_from_longest (type, (LONGEST) 1);
9555
9556         case TYPE_CODE_RANGE:
9557           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
9558           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
9559           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9560           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9561           type = language_bool_type (exp->language_defn, exp->gdbarch);
9562           return
9563             value_from_longest (type,
9564                                 (value_less (arg1, arg3)
9565                                  || value_equal (arg1, arg3))
9566                                 && (value_less (arg2, arg1)
9567                                     || value_equal (arg2, arg1)));
9568         }
9569
9570     case BINOP_IN_BOUNDS:
9571       (*pos) += 2;
9572       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9573       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9574
9575       if (noside == EVAL_SKIP)
9576         goto nosideret;
9577
9578       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9579         {
9580           type = language_bool_type (exp->language_defn, exp->gdbarch);
9581           return value_zero (type, not_lval);
9582         }
9583
9584       tem = longest_to_int (exp->elts[pc + 1].longconst);
9585
9586       type = ada_index_type (value_type (arg2), tem, "range");
9587       if (!type)
9588         type = value_type (arg1);
9589
9590       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
9591       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
9592
9593       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9594       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9595       type = language_bool_type (exp->language_defn, exp->gdbarch);
9596       return
9597         value_from_longest (type,
9598                             (value_less (arg1, arg3)
9599                              || value_equal (arg1, arg3))
9600                             && (value_less (arg2, arg1)
9601                                 || value_equal (arg2, arg1)));
9602
9603     case TERNOP_IN_RANGE:
9604       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9605       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9606       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9607
9608       if (noside == EVAL_SKIP)
9609         goto nosideret;
9610
9611       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9612       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9613       type = language_bool_type (exp->language_defn, exp->gdbarch);
9614       return
9615         value_from_longest (type,
9616                             (value_less (arg1, arg3)
9617                              || value_equal (arg1, arg3))
9618                             && (value_less (arg2, arg1)
9619                                 || value_equal (arg2, arg1)));
9620
9621     case OP_ATR_FIRST:
9622     case OP_ATR_LAST:
9623     case OP_ATR_LENGTH:
9624       {
9625         struct type *type_arg;
9626
9627         if (exp->elts[*pos].opcode == OP_TYPE)
9628           {
9629             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9630             arg1 = NULL;
9631             type_arg = check_typedef (exp->elts[pc + 2].type);
9632           }
9633         else
9634           {
9635             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9636             type_arg = NULL;
9637           }
9638
9639         if (exp->elts[*pos].opcode != OP_LONG)
9640           error (_("Invalid operand to '%s"), ada_attribute_name (op));
9641         tem = longest_to_int (exp->elts[*pos + 2].longconst);
9642         *pos += 4;
9643
9644         if (noside == EVAL_SKIP)
9645           goto nosideret;
9646
9647         if (type_arg == NULL)
9648           {
9649             arg1 = ada_coerce_ref (arg1);
9650
9651             if (ada_is_constrained_packed_array_type (value_type (arg1)))
9652               arg1 = ada_coerce_to_simple_array (arg1);
9653
9654             type = ada_index_type (value_type (arg1), tem,
9655                                    ada_attribute_name (op));
9656             if (type == NULL)
9657               type = builtin_type (exp->gdbarch)->builtin_int;
9658
9659             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9660               return allocate_value (type);
9661
9662             switch (op)
9663               {
9664               default:          /* Should never happen.  */
9665                 error (_("unexpected attribute encountered"));
9666               case OP_ATR_FIRST:
9667                 return value_from_longest
9668                         (type, ada_array_bound (arg1, tem, 0));
9669               case OP_ATR_LAST:
9670                 return value_from_longest
9671                         (type, ada_array_bound (arg1, tem, 1));
9672               case OP_ATR_LENGTH:
9673                 return value_from_longest
9674                         (type, ada_array_length (arg1, tem));
9675               }
9676           }
9677         else if (discrete_type_p (type_arg))
9678           {
9679             struct type *range_type;
9680             char *name = ada_type_name (type_arg);
9681
9682             range_type = NULL;
9683             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
9684               range_type = to_fixed_range_type (type_arg, NULL);
9685             if (range_type == NULL)
9686               range_type = type_arg;
9687             switch (op)
9688               {
9689               default:
9690                 error (_("unexpected attribute encountered"));
9691               case OP_ATR_FIRST:
9692                 return value_from_longest 
9693                   (range_type, ada_discrete_type_low_bound (range_type));
9694               case OP_ATR_LAST:
9695                 return value_from_longest
9696                   (range_type, ada_discrete_type_high_bound (range_type));
9697               case OP_ATR_LENGTH:
9698                 error (_("the 'length attribute applies only to array types"));
9699               }
9700           }
9701         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
9702           error (_("unimplemented type attribute"));
9703         else
9704           {
9705             LONGEST low, high;
9706
9707             if (ada_is_constrained_packed_array_type (type_arg))
9708               type_arg = decode_constrained_packed_array_type (type_arg);
9709
9710             type = ada_index_type (type_arg, tem, ada_attribute_name (op));
9711             if (type == NULL)
9712               type = builtin_type (exp->gdbarch)->builtin_int;
9713
9714             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9715               return allocate_value (type);
9716
9717             switch (op)
9718               {
9719               default:
9720                 error (_("unexpected attribute encountered"));
9721               case OP_ATR_FIRST:
9722                 low = ada_array_bound_from_type (type_arg, tem, 0);
9723                 return value_from_longest (type, low);
9724               case OP_ATR_LAST:
9725                 high = ada_array_bound_from_type (type_arg, tem, 1);
9726                 return value_from_longest (type, high);
9727               case OP_ATR_LENGTH:
9728                 low = ada_array_bound_from_type (type_arg, tem, 0);
9729                 high = ada_array_bound_from_type (type_arg, tem, 1);
9730                 return value_from_longest (type, high - low + 1);
9731               }
9732           }
9733       }
9734
9735     case OP_ATR_TAG:
9736       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9737       if (noside == EVAL_SKIP)
9738         goto nosideret;
9739
9740       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9741         return value_zero (ada_tag_type (arg1), not_lval);
9742
9743       return ada_value_tag (arg1);
9744
9745     case OP_ATR_MIN:
9746     case OP_ATR_MAX:
9747       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9748       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9749       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9750       if (noside == EVAL_SKIP)
9751         goto nosideret;
9752       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9753         return value_zero (value_type (arg1), not_lval);
9754       else
9755         {
9756           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9757           return value_binop (arg1, arg2,
9758                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9759         }
9760
9761     case OP_ATR_MODULUS:
9762       {
9763         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
9764
9765         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9766         if (noside == EVAL_SKIP)
9767           goto nosideret;
9768
9769         if (!ada_is_modular_type (type_arg))
9770           error (_("'modulus must be applied to modular type"));
9771
9772         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9773                                    ada_modulus (type_arg));
9774       }
9775
9776
9777     case OP_ATR_POS:
9778       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9779       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9780       if (noside == EVAL_SKIP)
9781         goto nosideret;
9782       type = builtin_type (exp->gdbarch)->builtin_int;
9783       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9784         return value_zero (type, not_lval);
9785       else
9786         return value_pos_atr (type, arg1);
9787
9788     case OP_ATR_SIZE:
9789       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9790       type = value_type (arg1);
9791
9792       /* If the argument is a reference, then dereference its type, since
9793          the user is really asking for the size of the actual object,
9794          not the size of the pointer.  */
9795       if (TYPE_CODE (type) == TYPE_CODE_REF)
9796         type = TYPE_TARGET_TYPE (type);
9797
9798       if (noside == EVAL_SKIP)
9799         goto nosideret;
9800       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9801         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
9802       else
9803         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
9804                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
9805
9806     case OP_ATR_VAL:
9807       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9808       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9809       type = exp->elts[pc + 2].type;
9810       if (noside == EVAL_SKIP)
9811         goto nosideret;
9812       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9813         return value_zero (type, not_lval);
9814       else
9815         return value_val_atr (type, arg1);
9816
9817     case BINOP_EXP:
9818       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9819       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9820       if (noside == EVAL_SKIP)
9821         goto nosideret;
9822       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9823         return value_zero (value_type (arg1), not_lval);
9824       else
9825         {
9826           /* For integer exponentiation operations,
9827              only promote the first argument.  */
9828           if (is_integral_type (value_type (arg2)))
9829             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9830           else
9831             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9832
9833           return value_binop (arg1, arg2, op);
9834         }
9835
9836     case UNOP_PLUS:
9837       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9838       if (noside == EVAL_SKIP)
9839         goto nosideret;
9840       else
9841         return arg1;
9842
9843     case UNOP_ABS:
9844       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9845       if (noside == EVAL_SKIP)
9846         goto nosideret;
9847       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9848       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
9849         return value_neg (arg1);
9850       else
9851         return arg1;
9852
9853     case UNOP_IND:
9854       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9855       if (noside == EVAL_SKIP)
9856         goto nosideret;
9857       type = ada_check_typedef (value_type (arg1));
9858       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9859         {
9860           if (ada_is_array_descriptor_type (type))
9861             /* GDB allows dereferencing GNAT array descriptors.  */
9862             {
9863               struct type *arrType = ada_type_of_array (arg1, 0);
9864
9865               if (arrType == NULL)
9866                 error (_("Attempt to dereference null array pointer."));
9867               return value_at_lazy (arrType, 0);
9868             }
9869           else if (TYPE_CODE (type) == TYPE_CODE_PTR
9870                    || TYPE_CODE (type) == TYPE_CODE_REF
9871                    /* In C you can dereference an array to get the 1st elt.  */
9872                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9873             {
9874               type = to_static_fixed_type
9875                 (ada_aligned_type
9876                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9877               check_size (type);
9878               return value_zero (type, lval_memory);
9879             }
9880           else if (TYPE_CODE (type) == TYPE_CODE_INT)
9881             {
9882               /* GDB allows dereferencing an int.  */
9883               if (expect_type == NULL)
9884                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
9885                                    lval_memory);
9886               else
9887                 {
9888                   expect_type = 
9889                     to_static_fixed_type (ada_aligned_type (expect_type));
9890                   return value_zero (expect_type, lval_memory);
9891                 }
9892             }
9893           else
9894             error (_("Attempt to take contents of a non-pointer value."));
9895         }
9896       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
9897       type = ada_check_typedef (value_type (arg1));
9898
9899       if (TYPE_CODE (type) == TYPE_CODE_INT)
9900           /* GDB allows dereferencing an int.  If we were given
9901              the expect_type, then use that as the target type.
9902              Otherwise, assume that the target type is an int.  */
9903         {
9904           if (expect_type != NULL)
9905             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
9906                                               arg1));
9907           else
9908             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
9909                                   (CORE_ADDR) value_as_address (arg1));
9910         }
9911
9912       if (ada_is_array_descriptor_type (type))
9913         /* GDB allows dereferencing GNAT array descriptors.  */
9914         return ada_coerce_to_simple_array (arg1);
9915       else
9916         return ada_value_ind (arg1);
9917
9918     case STRUCTOP_STRUCT:
9919       tem = longest_to_int (exp->elts[pc + 1].longconst);
9920       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9921       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9922       if (noside == EVAL_SKIP)
9923         goto nosideret;
9924       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9925         {
9926           struct type *type1 = value_type (arg1);
9927
9928           if (ada_is_tagged_type (type1, 1))
9929             {
9930               type = ada_lookup_struct_elt_type (type1,
9931                                                  &exp->elts[pc + 2].string,
9932                                                  1, 1, NULL);
9933               if (type == NULL)
9934                 /* In this case, we assume that the field COULD exist
9935                    in some extension of the type.  Return an object of 
9936                    "type" void, which will match any formal 
9937                    (see ada_type_match).  */
9938                 return value_zero (builtin_type (exp->gdbarch)->builtin_void,
9939                                    lval_memory);
9940             }
9941           else
9942             type =
9943               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9944                                           0, NULL);
9945
9946           return value_zero (ada_aligned_type (type), lval_memory);
9947         }
9948       else
9949         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
9950         arg1 = unwrap_value (arg1);
9951         return ada_to_fixed_value (arg1);
9952
9953     case OP_TYPE:
9954       /* The value is not supposed to be used.  This is here to make it
9955          easier to accommodate expressions that contain types.  */
9956       (*pos) += 2;
9957       if (noside == EVAL_SKIP)
9958         goto nosideret;
9959       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9960         return allocate_value (exp->elts[pc + 1].type);
9961       else
9962         error (_("Attempt to use a type name as an expression"));
9963
9964     case OP_AGGREGATE:
9965     case OP_CHOICES:
9966     case OP_OTHERS:
9967     case OP_DISCRETE_RANGE:
9968     case OP_POSITIONAL:
9969     case OP_NAME:
9970       if (noside == EVAL_NORMAL)
9971         switch (op) 
9972           {
9973           case OP_NAME:
9974             error (_("Undefined name, ambiguous name, or renaming used in "
9975                      "component association: %s."), &exp->elts[pc+2].string);
9976           case OP_AGGREGATE:
9977             error (_("Aggregates only allowed on the right of an assignment"));
9978           default:
9979             internal_error (__FILE__, __LINE__,
9980                             _("aggregate apparently mangled"));
9981           }
9982
9983       ada_forward_operator_length (exp, pc, &oplen, &nargs);
9984       *pos += oplen - 1;
9985       for (tem = 0; tem < nargs; tem += 1) 
9986         ada_evaluate_subexp (NULL, exp, pos, noside);
9987       goto nosideret;
9988     }
9989
9990 nosideret:
9991   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
9992 }
9993 \f
9994
9995                                 /* Fixed point */
9996
9997 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9998    type name that encodes the 'small and 'delta information.
9999    Otherwise, return NULL.  */
10000
10001 static const char *
10002 fixed_type_info (struct type *type)
10003 {
10004   const char *name = ada_type_name (type);
10005   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10006
10007   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10008     {
10009       const char *tail = strstr (name, "___XF_");
10010
10011       if (tail == NULL)
10012         return NULL;
10013       else
10014         return tail + 5;
10015     }
10016   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10017     return fixed_type_info (TYPE_TARGET_TYPE (type));
10018   else
10019     return NULL;
10020 }
10021
10022 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
10023
10024 int
10025 ada_is_fixed_point_type (struct type *type)
10026 {
10027   return fixed_type_info (type) != NULL;
10028 }
10029
10030 /* Return non-zero iff TYPE represents a System.Address type.  */
10031
10032 int
10033 ada_is_system_address_type (struct type *type)
10034 {
10035   return (TYPE_NAME (type)
10036           && strcmp (TYPE_NAME (type), "system__address") == 0);
10037 }
10038
10039 /* Assuming that TYPE is the representation of an Ada fixed-point
10040    type, return its delta, or -1 if the type is malformed and the
10041    delta cannot be determined.  */
10042
10043 DOUBLEST
10044 ada_delta (struct type *type)
10045 {
10046   const char *encoding = fixed_type_info (type);
10047   DOUBLEST num, den;
10048
10049   /* Strictly speaking, num and den are encoded as integer.  However,
10050      they may not fit into a long, and they will have to be converted
10051      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10052   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10053               &num, &den) < 2)
10054     return -1.0;
10055   else
10056     return num / den;
10057 }
10058
10059 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
10060    factor ('SMALL value) associated with the type.  */
10061
10062 static DOUBLEST
10063 scaling_factor (struct type *type)
10064 {
10065   const char *encoding = fixed_type_info (type);
10066   DOUBLEST num0, den0, num1, den1;
10067   int n;
10068
10069   /* Strictly speaking, num's and den's are encoded as integer.  However,
10070      they may not fit into a long, and they will have to be converted
10071      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
10072   n = sscanf (encoding,
10073               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
10074               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10075               &num0, &den0, &num1, &den1);
10076
10077   if (n < 2)
10078     return 1.0;
10079   else if (n == 4)
10080     return num1 / den1;
10081   else
10082     return num0 / den0;
10083 }
10084
10085
10086 /* Assuming that X is the representation of a value of fixed-point
10087    type TYPE, return its floating-point equivalent.  */
10088
10089 DOUBLEST
10090 ada_fixed_to_float (struct type *type, LONGEST x)
10091 {
10092   return (DOUBLEST) x *scaling_factor (type);
10093 }
10094
10095 /* The representation of a fixed-point value of type TYPE
10096    corresponding to the value X.  */
10097
10098 LONGEST
10099 ada_float_to_fixed (struct type *type, DOUBLEST x)
10100 {
10101   return (LONGEST) (x / scaling_factor (type) + 0.5);
10102 }
10103
10104 \f
10105
10106                                 /* Range types */
10107
10108 /* Scan STR beginning at position K for a discriminant name, and
10109    return the value of that discriminant field of DVAL in *PX.  If
10110    PNEW_K is not null, put the position of the character beyond the
10111    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
10112    not alter *PX and *PNEW_K if unsuccessful.  */
10113
10114 static int
10115 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
10116                     int *pnew_k)
10117 {
10118   static char *bound_buffer = NULL;
10119   static size_t bound_buffer_len = 0;
10120   char *bound;
10121   char *pend;
10122   struct value *bound_val;
10123
10124   if (dval == NULL || str == NULL || str[k] == '\0')
10125     return 0;
10126
10127   pend = strstr (str + k, "__");
10128   if (pend == NULL)
10129     {
10130       bound = str + k;
10131       k += strlen (bound);
10132     }
10133   else
10134     {
10135       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
10136       bound = bound_buffer;
10137       strncpy (bound_buffer, str + k, pend - (str + k));
10138       bound[pend - (str + k)] = '\0';
10139       k = pend - str;
10140     }
10141
10142   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
10143   if (bound_val == NULL)
10144     return 0;
10145
10146   *px = value_as_long (bound_val);
10147   if (pnew_k != NULL)
10148     *pnew_k = k;
10149   return 1;
10150 }
10151
10152 /* Value of variable named NAME in the current environment.  If
10153    no such variable found, then if ERR_MSG is null, returns 0, and
10154    otherwise causes an error with message ERR_MSG.  */
10155
10156 static struct value *
10157 get_var_value (char *name, char *err_msg)
10158 {
10159   struct ada_symbol_info *syms;
10160   int nsyms;
10161
10162   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
10163                                   &syms);
10164
10165   if (nsyms != 1)
10166     {
10167       if (err_msg == NULL)
10168         return 0;
10169       else
10170         error (("%s"), err_msg);
10171     }
10172
10173   return value_of_variable (syms[0].sym, syms[0].block);
10174 }
10175
10176 /* Value of integer variable named NAME in the current environment.  If
10177    no such variable found, returns 0, and sets *FLAG to 0.  If
10178    successful, sets *FLAG to 1.  */
10179
10180 LONGEST
10181 get_int_var_value (char *name, int *flag)
10182 {
10183   struct value *var_val = get_var_value (name, 0);
10184
10185   if (var_val == 0)
10186     {
10187       if (flag != NULL)
10188         *flag = 0;
10189       return 0;
10190     }
10191   else
10192     {
10193       if (flag != NULL)
10194         *flag = 1;
10195       return value_as_long (var_val);
10196     }
10197 }
10198
10199
10200 /* Return a range type whose base type is that of the range type named
10201    NAME in the current environment, and whose bounds are calculated
10202    from NAME according to the GNAT range encoding conventions.
10203    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
10204    corresponding range type from debug information; fall back to using it
10205    if symbol lookup fails.  If a new type must be created, allocate it
10206    like ORIG_TYPE was.  The bounds information, in general, is encoded
10207    in NAME, the base type given in the named range type.  */
10208
10209 static struct type *
10210 to_fixed_range_type (struct type *raw_type, struct value *dval)
10211 {
10212   char *name;
10213   struct type *base_type;
10214   char *subtype_info;
10215
10216   gdb_assert (raw_type != NULL);
10217   gdb_assert (TYPE_NAME (raw_type) != NULL);
10218
10219   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
10220     base_type = TYPE_TARGET_TYPE (raw_type);
10221   else
10222     base_type = raw_type;
10223
10224   name = TYPE_NAME (raw_type);
10225   subtype_info = strstr (name, "___XD");
10226   if (subtype_info == NULL)
10227     {
10228       LONGEST L = ada_discrete_type_low_bound (raw_type);
10229       LONGEST U = ada_discrete_type_high_bound (raw_type);
10230
10231       if (L < INT_MIN || U > INT_MAX)
10232         return raw_type;
10233       else
10234         return create_range_type (alloc_type_copy (raw_type), raw_type,
10235                                   ada_discrete_type_low_bound (raw_type),
10236                                   ada_discrete_type_high_bound (raw_type));
10237     }
10238   else
10239     {
10240       static char *name_buf = NULL;
10241       static size_t name_len = 0;
10242       int prefix_len = subtype_info - name;
10243       LONGEST L, U;
10244       struct type *type;
10245       char *bounds_str;
10246       int n;
10247
10248       GROW_VECT (name_buf, name_len, prefix_len + 5);
10249       strncpy (name_buf, name, prefix_len);
10250       name_buf[prefix_len] = '\0';
10251
10252       subtype_info += 5;
10253       bounds_str = strchr (subtype_info, '_');
10254       n = 1;
10255
10256       if (*subtype_info == 'L')
10257         {
10258           if (!ada_scan_number (bounds_str, n, &L, &n)
10259               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
10260             return raw_type;
10261           if (bounds_str[n] == '_')
10262             n += 2;
10263           else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
10264             n += 1;
10265           subtype_info += 1;
10266         }
10267       else
10268         {
10269           int ok;
10270
10271           strcpy (name_buf + prefix_len, "___L");
10272           L = get_int_var_value (name_buf, &ok);
10273           if (!ok)
10274             {
10275               lim_warning (_("Unknown lower bound, using 1."));
10276               L = 1;
10277             }
10278         }
10279
10280       if (*subtype_info == 'U')
10281         {
10282           if (!ada_scan_number (bounds_str, n, &U, &n)
10283               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
10284             return raw_type;
10285         }
10286       else
10287         {
10288           int ok;
10289
10290           strcpy (name_buf + prefix_len, "___U");
10291           U = get_int_var_value (name_buf, &ok);
10292           if (!ok)
10293             {
10294               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
10295               U = L;
10296             }
10297         }
10298
10299       type = create_range_type (alloc_type_copy (raw_type), base_type, L, U);
10300       TYPE_NAME (type) = name;
10301       return type;
10302     }
10303 }
10304
10305 /* True iff NAME is the name of a range type.  */
10306
10307 int
10308 ada_is_range_type_name (const char *name)
10309 {
10310   return (name != NULL && strstr (name, "___XD"));
10311 }
10312 \f
10313
10314                                 /* Modular types */
10315
10316 /* True iff TYPE is an Ada modular type.  */
10317
10318 int
10319 ada_is_modular_type (struct type *type)
10320 {
10321   struct type *subranged_type = base_type (type);
10322
10323   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
10324           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
10325           && TYPE_UNSIGNED (subranged_type));
10326 }
10327
10328 /* Try to determine the lower and upper bounds of the given modular type
10329    using the type name only.  Return non-zero and set L and U as the lower
10330    and upper bounds (respectively) if successful.  */
10331
10332 int
10333 ada_modulus_from_name (struct type *type, ULONGEST *modulus)
10334 {
10335   char *name = ada_type_name (type);
10336   char *suffix;
10337   int k;
10338   LONGEST U;
10339
10340   if (name == NULL)
10341     return 0;
10342
10343   /* Discrete type bounds are encoded using an __XD suffix.  In our case,
10344      we are looking for static bounds, which means an __XDLU suffix.
10345      Moreover, we know that the lower bound of modular types is always
10346      zero, so the actual suffix should start with "__XDLU_0__", and
10347      then be followed by the upper bound value.  */
10348   suffix = strstr (name, "__XDLU_0__");
10349   if (suffix == NULL)
10350     return 0;
10351   k = 10;
10352   if (!ada_scan_number (suffix, k, &U, NULL))
10353     return 0;
10354
10355   *modulus = (ULONGEST) U + 1;
10356   return 1;
10357 }
10358
10359 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
10360
10361 ULONGEST
10362 ada_modulus (struct type *type)
10363 {
10364   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
10365 }
10366 \f
10367
10368 /* Ada exception catchpoint support:
10369    ---------------------------------
10370
10371    We support 3 kinds of exception catchpoints:
10372      . catchpoints on Ada exceptions
10373      . catchpoints on unhandled Ada exceptions
10374      . catchpoints on failed assertions
10375
10376    Exceptions raised during failed assertions, or unhandled exceptions
10377    could perfectly be caught with the general catchpoint on Ada exceptions.
10378    However, we can easily differentiate these two special cases, and having
10379    the option to distinguish these two cases from the rest can be useful
10380    to zero-in on certain situations.
10381
10382    Exception catchpoints are a specialized form of breakpoint,
10383    since they rely on inserting breakpoints inside known routines
10384    of the GNAT runtime.  The implementation therefore uses a standard
10385    breakpoint structure of the BP_BREAKPOINT type, but with its own set
10386    of breakpoint_ops.
10387
10388    Support in the runtime for exception catchpoints have been changed
10389    a few times already, and these changes affect the implementation
10390    of these catchpoints.  In order to be able to support several
10391    variants of the runtime, we use a sniffer that will determine
10392    the runtime variant used by the program being debugged.
10393
10394    At this time, we do not support the use of conditions on Ada exception
10395    catchpoints.  The COND and COND_STRING fields are therefore set
10396    to NULL (most of the time, see below).
10397    
10398    Conditions where EXP_STRING, COND, and COND_STRING are used:
10399
10400      When a user specifies the name of a specific exception in the case
10401      of catchpoints on Ada exceptions, we store the name of that exception
10402      in the EXP_STRING.  We then translate this request into an actual
10403      condition stored in COND_STRING, and then parse it into an expression
10404      stored in COND.  */
10405
10406 /* The different types of catchpoints that we introduced for catching
10407    Ada exceptions.  */
10408
10409 enum exception_catchpoint_kind
10410 {
10411   ex_catch_exception,
10412   ex_catch_exception_unhandled,
10413   ex_catch_assert
10414 };
10415
10416 /* Ada's standard exceptions.  */
10417
10418 static char *standard_exc[] = {
10419   "constraint_error",
10420   "program_error",
10421   "storage_error",
10422   "tasking_error"
10423 };
10424
10425 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
10426
10427 /* A structure that describes how to support exception catchpoints
10428    for a given executable.  */
10429
10430 struct exception_support_info
10431 {
10432    /* The name of the symbol to break on in order to insert
10433       a catchpoint on exceptions.  */
10434    const char *catch_exception_sym;
10435
10436    /* The name of the symbol to break on in order to insert
10437       a catchpoint on unhandled exceptions.  */
10438    const char *catch_exception_unhandled_sym;
10439
10440    /* The name of the symbol to break on in order to insert
10441       a catchpoint on failed assertions.  */
10442    const char *catch_assert_sym;
10443
10444    /* Assuming that the inferior just triggered an unhandled exception
10445       catchpoint, this function is responsible for returning the address
10446       in inferior memory where the name of that exception is stored.
10447       Return zero if the address could not be computed.  */
10448    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
10449 };
10450
10451 static CORE_ADDR ada_unhandled_exception_name_addr (void);
10452 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
10453
10454 /* The following exception support info structure describes how to
10455    implement exception catchpoints with the latest version of the
10456    Ada runtime (as of 2007-03-06).  */
10457
10458 static const struct exception_support_info default_exception_support_info =
10459 {
10460   "__gnat_debug_raise_exception", /* catch_exception_sym */
10461   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
10462   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
10463   ada_unhandled_exception_name_addr
10464 };
10465
10466 /* The following exception support info structure describes how to
10467    implement exception catchpoints with a slightly older version
10468    of the Ada runtime.  */
10469
10470 static const struct exception_support_info exception_support_info_fallback =
10471 {
10472   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
10473   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
10474   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
10475   ada_unhandled_exception_name_addr_from_raise
10476 };
10477
10478 /* For each executable, we sniff which exception info structure to use
10479    and cache it in the following global variable.  */
10480
10481 static const struct exception_support_info *exception_info = NULL;
10482
10483 /* Inspect the Ada runtime and determine which exception info structure
10484    should be used to provide support for exception catchpoints.
10485
10486    This function will always set exception_info, or raise an error.  */
10487
10488 static void
10489 ada_exception_support_info_sniffer (void)
10490 {
10491   struct symbol *sym;
10492
10493   /* If the exception info is already known, then no need to recompute it.  */
10494   if (exception_info != NULL)
10495     return;
10496
10497   /* Check the latest (default) exception support info.  */
10498   sym = standard_lookup (default_exception_support_info.catch_exception_sym,
10499                          NULL, VAR_DOMAIN);
10500   if (sym != NULL)
10501     {
10502       exception_info = &default_exception_support_info;
10503       return;
10504     }
10505
10506   /* Try our fallback exception suport info.  */
10507   sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
10508                          NULL, VAR_DOMAIN);
10509   if (sym != NULL)
10510     {
10511       exception_info = &exception_support_info_fallback;
10512       return;
10513     }
10514
10515   /* Sometimes, it is normal for us to not be able to find the routine
10516      we are looking for.  This happens when the program is linked with
10517      the shared version of the GNAT runtime, and the program has not been
10518      started yet.  Inform the user of these two possible causes if
10519      applicable.  */
10520
10521   if (ada_update_initial_language (language_unknown) != language_ada)
10522     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
10523
10524   /* If the symbol does not exist, then check that the program is
10525      already started, to make sure that shared libraries have been
10526      loaded.  If it is not started, this may mean that the symbol is
10527      in a shared library.  */
10528
10529   if (ptid_get_pid (inferior_ptid) == 0)
10530     error (_("Unable to insert catchpoint. Try to start the program first."));
10531
10532   /* At this point, we know that we are debugging an Ada program and
10533      that the inferior has been started, but we still are not able to
10534      find the run-time symbols.  That can mean that we are in
10535      configurable run time mode, or that a-except as been optimized
10536      out by the linker...  In any case, at this point it is not worth
10537      supporting this feature.  */
10538
10539   error (_("Cannot insert catchpoints in this configuration."));
10540 }
10541
10542 /* An observer of "executable_changed" events.
10543    Its role is to clear certain cached values that need to be recomputed
10544    each time a new executable is loaded by GDB.  */
10545
10546 static void
10547 ada_executable_changed_observer (void)
10548 {
10549   /* If the executable changed, then it is possible that the Ada runtime
10550      is different.  So we need to invalidate the exception support info
10551      cache.  */
10552   exception_info = NULL;
10553 }
10554
10555 /* True iff FRAME is very likely to be that of a function that is
10556    part of the runtime system.  This is all very heuristic, but is
10557    intended to be used as advice as to what frames are uninteresting
10558    to most users.  */
10559
10560 static int
10561 is_known_support_routine (struct frame_info *frame)
10562 {
10563   struct symtab_and_line sal;
10564   char *func_name;
10565   enum language func_lang;
10566   int i;
10567
10568   /* If this code does not have any debugging information (no symtab),
10569      This cannot be any user code.  */
10570
10571   find_frame_sal (frame, &sal);
10572   if (sal.symtab == NULL)
10573     return 1;
10574
10575   /* If there is a symtab, but the associated source file cannot be
10576      located, then assume this is not user code:  Selecting a frame
10577      for which we cannot display the code would not be very helpful
10578      for the user.  This should also take care of case such as VxWorks
10579      where the kernel has some debugging info provided for a few units.  */
10580
10581   if (symtab_to_fullname (sal.symtab) == NULL)
10582     return 1;
10583
10584   /* Check the unit filename againt the Ada runtime file naming.
10585      We also check the name of the objfile against the name of some
10586      known system libraries that sometimes come with debugging info
10587      too.  */
10588
10589   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
10590     {
10591       re_comp (known_runtime_file_name_patterns[i]);
10592       if (re_exec (sal.symtab->filename))
10593         return 1;
10594       if (sal.symtab->objfile != NULL
10595           && re_exec (sal.symtab->objfile->name))
10596         return 1;
10597     }
10598
10599   /* Check whether the function is a GNAT-generated entity.  */
10600
10601   find_frame_funname (frame, &func_name, &func_lang, NULL);
10602   if (func_name == NULL)
10603     return 1;
10604
10605   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
10606     {
10607       re_comp (known_auxiliary_function_name_patterns[i]);
10608       if (re_exec (func_name))
10609         return 1;
10610     }
10611
10612   return 0;
10613 }
10614
10615 /* Find the first frame that contains debugging information and that is not
10616    part of the Ada run-time, starting from FI and moving upward.  */
10617
10618 void
10619 ada_find_printable_frame (struct frame_info *fi)
10620 {
10621   for (; fi != NULL; fi = get_prev_frame (fi))
10622     {
10623       if (!is_known_support_routine (fi))
10624         {
10625           select_frame (fi);
10626           break;
10627         }
10628     }
10629
10630 }
10631
10632 /* Assuming that the inferior just triggered an unhandled exception
10633    catchpoint, return the address in inferior memory where the name
10634    of the exception is stored.
10635    
10636    Return zero if the address could not be computed.  */
10637
10638 static CORE_ADDR
10639 ada_unhandled_exception_name_addr (void)
10640 {
10641   return parse_and_eval_address ("e.full_name");
10642 }
10643
10644 /* Same as ada_unhandled_exception_name_addr, except that this function
10645    should be used when the inferior uses an older version of the runtime,
10646    where the exception name needs to be extracted from a specific frame
10647    several frames up in the callstack.  */
10648
10649 static CORE_ADDR
10650 ada_unhandled_exception_name_addr_from_raise (void)
10651 {
10652   int frame_level;
10653   struct frame_info *fi;
10654
10655   /* To determine the name of this exception, we need to select
10656      the frame corresponding to RAISE_SYM_NAME.  This frame is
10657      at least 3 levels up, so we simply skip the first 3 frames
10658      without checking the name of their associated function.  */
10659   fi = get_current_frame ();
10660   for (frame_level = 0; frame_level < 3; frame_level += 1)
10661     if (fi != NULL)
10662       fi = get_prev_frame (fi); 
10663
10664   while (fi != NULL)
10665     {
10666       char *func_name;
10667       enum language func_lang;
10668
10669       find_frame_funname (fi, &func_name, &func_lang, NULL);
10670       if (func_name != NULL
10671           && strcmp (func_name, exception_info->catch_exception_sym) == 0)
10672         break; /* We found the frame we were looking for...  */
10673       fi = get_prev_frame (fi);
10674     }
10675
10676   if (fi == NULL)
10677     return 0;
10678
10679   select_frame (fi);
10680   return parse_and_eval_address ("id.full_name");
10681 }
10682
10683 /* Assuming the inferior just triggered an Ada exception catchpoint
10684    (of any type), return the address in inferior memory where the name
10685    of the exception is stored, if applicable.
10686
10687    Return zero if the address could not be computed, or if not relevant.  */
10688
10689 static CORE_ADDR
10690 ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
10691                            struct breakpoint *b)
10692 {
10693   switch (ex)
10694     {
10695       case ex_catch_exception:
10696         return (parse_and_eval_address ("e.full_name"));
10697         break;
10698
10699       case ex_catch_exception_unhandled:
10700         return exception_info->unhandled_exception_name_addr ();
10701         break;
10702       
10703       case ex_catch_assert:
10704         return 0;  /* Exception name is not relevant in this case.  */
10705         break;
10706
10707       default:
10708         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10709         break;
10710     }
10711
10712   return 0; /* Should never be reached.  */
10713 }
10714
10715 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
10716    any error that ada_exception_name_addr_1 might cause to be thrown.
10717    When an error is intercepted, a warning with the error message is printed,
10718    and zero is returned.  */
10719
10720 static CORE_ADDR
10721 ada_exception_name_addr (enum exception_catchpoint_kind ex,
10722                          struct breakpoint *b)
10723 {
10724   struct gdb_exception e;
10725   CORE_ADDR result = 0;
10726
10727   TRY_CATCH (e, RETURN_MASK_ERROR)
10728     {
10729       result = ada_exception_name_addr_1 (ex, b);
10730     }
10731
10732   if (e.reason < 0)
10733     {
10734       warning (_("failed to get exception name: %s"), e.message);
10735       return 0;
10736     }
10737
10738   return result;
10739 }
10740
10741 /* Implement the PRINT_IT method in the breakpoint_ops structure
10742    for all exception catchpoint kinds.  */
10743
10744 static enum print_stop_action
10745 print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
10746 {
10747   const CORE_ADDR addr = ada_exception_name_addr (ex, b);
10748   char exception_name[256];
10749
10750   if (addr != 0)
10751     {
10752       read_memory (addr, exception_name, sizeof (exception_name) - 1);
10753       exception_name [sizeof (exception_name) - 1] = '\0';
10754     }
10755
10756   ada_find_printable_frame (get_current_frame ());
10757
10758   annotate_catchpoint (b->number);
10759   switch (ex)
10760     {
10761       case ex_catch_exception:
10762         if (addr != 0)
10763           printf_filtered (_("\nCatchpoint %d, %s at "),
10764                            b->number, exception_name);
10765         else
10766           printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
10767         break;
10768       case ex_catch_exception_unhandled:
10769         if (addr != 0)
10770           printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
10771                            b->number, exception_name);
10772         else
10773           printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
10774                            b->number);
10775         break;
10776       case ex_catch_assert:
10777         printf_filtered (_("\nCatchpoint %d, failed assertion at "),
10778                          b->number);
10779         break;
10780     }
10781
10782   return PRINT_SRC_AND_LOC;
10783 }
10784
10785 /* Implement the PRINT_ONE method in the breakpoint_ops structure
10786    for all exception catchpoint kinds.  */
10787
10788 static void
10789 print_one_exception (enum exception_catchpoint_kind ex,
10790                      struct breakpoint *b, struct bp_location **last_loc)
10791
10792   struct value_print_options opts;
10793
10794   get_user_print_options (&opts);
10795   if (opts.addressprint)
10796     {
10797       annotate_field (4);
10798       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
10799     }
10800
10801   annotate_field (5);
10802   *last_loc = b->loc;
10803   switch (ex)
10804     {
10805       case ex_catch_exception:
10806         if (b->exp_string != NULL)
10807           {
10808             char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
10809             
10810             ui_out_field_string (uiout, "what", msg);
10811             xfree (msg);
10812           }
10813         else
10814           ui_out_field_string (uiout, "what", "all Ada exceptions");
10815         
10816         break;
10817
10818       case ex_catch_exception_unhandled:
10819         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10820         break;
10821       
10822       case ex_catch_assert:
10823         ui_out_field_string (uiout, "what", "failed Ada assertions");
10824         break;
10825
10826       default:
10827         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10828         break;
10829     }
10830 }
10831
10832 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
10833    for all exception catchpoint kinds.  */
10834
10835 static void
10836 print_mention_exception (enum exception_catchpoint_kind ex,
10837                          struct breakpoint *b)
10838 {
10839   switch (ex)
10840     {
10841       case ex_catch_exception:
10842         if (b->exp_string != NULL)
10843           printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10844                            b->number, b->exp_string);
10845         else
10846           printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10847         
10848         break;
10849
10850       case ex_catch_exception_unhandled:
10851         printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10852                          b->number);
10853         break;
10854       
10855       case ex_catch_assert:
10856         printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10857         break;
10858
10859       default:
10860         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10861         break;
10862     }
10863 }
10864
10865 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
10866    for all exception catchpoint kinds.  */
10867
10868 static void
10869 print_recreate_exception (enum exception_catchpoint_kind ex,
10870                           struct breakpoint *b, struct ui_file *fp)
10871 {
10872   switch (ex)
10873     {
10874       case ex_catch_exception:
10875         fprintf_filtered (fp, "catch exception");
10876         if (b->exp_string != NULL)
10877           fprintf_filtered (fp, " %s", b->exp_string);
10878         break;
10879
10880       case ex_catch_exception_unhandled:
10881         fprintf_filtered (fp, "catch exception unhandled");
10882         break;
10883
10884       case ex_catch_assert:
10885         fprintf_filtered (fp, "catch assert");
10886         break;
10887
10888       default:
10889         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10890     }
10891 }
10892
10893 /* Virtual table for "catch exception" breakpoints.  */
10894
10895 static enum print_stop_action
10896 print_it_catch_exception (struct breakpoint *b)
10897 {
10898   return print_it_exception (ex_catch_exception, b);
10899 }
10900
10901 static void
10902 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
10903 {
10904   print_one_exception (ex_catch_exception, b, last_loc);
10905 }
10906
10907 static void
10908 print_mention_catch_exception (struct breakpoint *b)
10909 {
10910   print_mention_exception (ex_catch_exception, b);
10911 }
10912
10913 static void
10914 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
10915 {
10916   print_recreate_exception (ex_catch_exception, b, fp);
10917 }
10918
10919 static struct breakpoint_ops catch_exception_breakpoint_ops =
10920 {
10921   NULL, /* insert */
10922   NULL, /* remove */
10923   NULL, /* breakpoint_hit */
10924   NULL, /* resources_needed */
10925   print_it_catch_exception,
10926   print_one_catch_exception,
10927   print_mention_catch_exception,
10928   print_recreate_catch_exception
10929 };
10930
10931 /* Virtual table for "catch exception unhandled" breakpoints.  */
10932
10933 static enum print_stop_action
10934 print_it_catch_exception_unhandled (struct breakpoint *b)
10935 {
10936   return print_it_exception (ex_catch_exception_unhandled, b);
10937 }
10938
10939 static void
10940 print_one_catch_exception_unhandled (struct breakpoint *b,
10941                                      struct bp_location **last_loc)
10942 {
10943   print_one_exception (ex_catch_exception_unhandled, b, last_loc);
10944 }
10945
10946 static void
10947 print_mention_catch_exception_unhandled (struct breakpoint *b)
10948 {
10949   print_mention_exception (ex_catch_exception_unhandled, b);
10950 }
10951
10952 static void
10953 print_recreate_catch_exception_unhandled (struct breakpoint *b,
10954                                           struct ui_file *fp)
10955 {
10956   print_recreate_exception (ex_catch_exception_unhandled, b, fp);
10957 }
10958
10959 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
10960   NULL, /* insert */
10961   NULL, /* remove */
10962   NULL, /* breakpoint_hit */
10963   NULL, /* resources_needed */
10964   print_it_catch_exception_unhandled,
10965   print_one_catch_exception_unhandled,
10966   print_mention_catch_exception_unhandled,
10967   print_recreate_catch_exception_unhandled
10968 };
10969
10970 /* Virtual table for "catch assert" breakpoints.  */
10971
10972 static enum print_stop_action
10973 print_it_catch_assert (struct breakpoint *b)
10974 {
10975   return print_it_exception (ex_catch_assert, b);
10976 }
10977
10978 static void
10979 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
10980 {
10981   print_one_exception (ex_catch_assert, b, last_loc);
10982 }
10983
10984 static void
10985 print_mention_catch_assert (struct breakpoint *b)
10986 {
10987   print_mention_exception (ex_catch_assert, b);
10988 }
10989
10990 static void
10991 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
10992 {
10993   print_recreate_exception (ex_catch_assert, b, fp);
10994 }
10995
10996 static struct breakpoint_ops catch_assert_breakpoint_ops = {
10997   NULL, /* insert */
10998   NULL, /* remove */
10999   NULL, /* breakpoint_hit */
11000   NULL, /* resources_needed */
11001   print_it_catch_assert,
11002   print_one_catch_assert,
11003   print_mention_catch_assert,
11004   print_recreate_catch_assert
11005 };
11006
11007 /* Return non-zero if B is an Ada exception catchpoint.  */
11008
11009 int
11010 ada_exception_catchpoint_p (struct breakpoint *b)
11011 {
11012   return (b->ops == &catch_exception_breakpoint_ops
11013           || b->ops == &catch_exception_unhandled_breakpoint_ops
11014           || b->ops == &catch_assert_breakpoint_ops);
11015 }
11016
11017 /* Return a newly allocated copy of the first space-separated token
11018    in ARGSP, and then adjust ARGSP to point immediately after that
11019    token.
11020
11021    Return NULL if ARGPS does not contain any more tokens.  */
11022
11023 static char *
11024 ada_get_next_arg (char **argsp)
11025 {
11026   char *args = *argsp;
11027   char *end;
11028   char *result;
11029
11030   /* Skip any leading white space.  */
11031
11032   while (isspace (*args))
11033     args++;
11034
11035   if (args[0] == '\0')
11036     return NULL; /* No more arguments.  */
11037   
11038   /* Find the end of the current argument.  */
11039
11040   end = args;
11041   while (*end != '\0' && !isspace (*end))
11042     end++;
11043
11044   /* Adjust ARGSP to point to the start of the next argument.  */
11045
11046   *argsp = end;
11047
11048   /* Make a copy of the current argument and return it.  */
11049
11050   result = xmalloc (end - args + 1);
11051   strncpy (result, args, end - args);
11052   result[end - args] = '\0';
11053   
11054   return result;
11055 }
11056
11057 /* Split the arguments specified in a "catch exception" command.  
11058    Set EX to the appropriate catchpoint type.
11059    Set EXP_STRING to the name of the specific exception if
11060    specified by the user.  */
11061
11062 static void
11063 catch_ada_exception_command_split (char *args,
11064                                    enum exception_catchpoint_kind *ex,
11065                                    char **exp_string)
11066 {
11067   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
11068   char *exception_name;
11069
11070   exception_name = ada_get_next_arg (&args);
11071   make_cleanup (xfree, exception_name);
11072
11073   /* Check that we do not have any more arguments.  Anything else
11074      is unexpected.  */
11075
11076   while (isspace (*args))
11077     args++;
11078
11079   if (args[0] != '\0')
11080     error (_("Junk at end of expression"));
11081
11082   discard_cleanups (old_chain);
11083
11084   if (exception_name == NULL)
11085     {
11086       /* Catch all exceptions.  */
11087       *ex = ex_catch_exception;
11088       *exp_string = NULL;
11089     }
11090   else if (strcmp (exception_name, "unhandled") == 0)
11091     {
11092       /* Catch unhandled exceptions.  */
11093       *ex = ex_catch_exception_unhandled;
11094       *exp_string = NULL;
11095     }
11096   else
11097     {
11098       /* Catch a specific exception.  */
11099       *ex = ex_catch_exception;
11100       *exp_string = exception_name;
11101     }
11102 }
11103
11104 /* Return the name of the symbol on which we should break in order to
11105    implement a catchpoint of the EX kind.  */
11106
11107 static const char *
11108 ada_exception_sym_name (enum exception_catchpoint_kind ex)
11109 {
11110   gdb_assert (exception_info != NULL);
11111
11112   switch (ex)
11113     {
11114       case ex_catch_exception:
11115         return (exception_info->catch_exception_sym);
11116         break;
11117       case ex_catch_exception_unhandled:
11118         return (exception_info->catch_exception_unhandled_sym);
11119         break;
11120       case ex_catch_assert:
11121         return (exception_info->catch_assert_sym);
11122         break;
11123       default:
11124         internal_error (__FILE__, __LINE__,
11125                         _("unexpected catchpoint kind (%d)"), ex);
11126     }
11127 }
11128
11129 /* Return the breakpoint ops "virtual table" used for catchpoints
11130    of the EX kind.  */
11131
11132 static struct breakpoint_ops *
11133 ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
11134 {
11135   switch (ex)
11136     {
11137       case ex_catch_exception:
11138         return (&catch_exception_breakpoint_ops);
11139         break;
11140       case ex_catch_exception_unhandled:
11141         return (&catch_exception_unhandled_breakpoint_ops);
11142         break;
11143       case ex_catch_assert:
11144         return (&catch_assert_breakpoint_ops);
11145         break;
11146       default:
11147         internal_error (__FILE__, __LINE__,
11148                         _("unexpected catchpoint kind (%d)"), ex);
11149     }
11150 }
11151
11152 /* Return the condition that will be used to match the current exception
11153    being raised with the exception that the user wants to catch.  This
11154    assumes that this condition is used when the inferior just triggered
11155    an exception catchpoint.
11156    
11157    The string returned is a newly allocated string that needs to be
11158    deallocated later.  */
11159
11160 static char *
11161 ada_exception_catchpoint_cond_string (const char *exp_string)
11162 {
11163   int i;
11164
11165   /* The standard exceptions are a special case.  They are defined in
11166      runtime units that have been compiled without debugging info; if
11167      EXP_STRING is the not-fully-qualified name of a standard
11168      exception (e.g. "constraint_error") then, during the evaluation
11169      of the condition expression, the symbol lookup on this name would
11170      *not* return this standard exception.  The catchpoint condition
11171      may then be set only on user-defined exceptions which have the
11172      same not-fully-qualified name (e.g. my_package.constraint_error).
11173
11174      To avoid this unexcepted behavior, these standard exceptions are
11175      systematically prefixed by "standard".  This means that "catch
11176      exception constraint_error" is rewritten into "catch exception
11177      standard.constraint_error".
11178
11179      If an exception named contraint_error is defined in another package of
11180      the inferior program, then the only way to specify this exception as a
11181      breakpoint condition is to use its fully-qualified named:
11182      e.g. my_package.constraint_error.  */
11183
11184   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
11185     {
11186       if (strcmp (standard_exc [i], exp_string) == 0)
11187         {
11188           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
11189                              exp_string);
11190         }
11191     }
11192   return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
11193 }
11194
11195 /* Return the expression corresponding to COND_STRING evaluated at SAL.  */
11196
11197 static struct expression *
11198 ada_parse_catchpoint_condition (char *cond_string,
11199                                 struct symtab_and_line sal)
11200 {
11201   return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
11202 }
11203
11204 /* Return the symtab_and_line that should be used to insert an exception
11205    catchpoint of the TYPE kind.
11206
11207    EX_STRING should contain the name of a specific exception
11208    that the catchpoint should catch, or NULL otherwise.
11209
11210    The idea behind all the remaining parameters is that their names match
11211    the name of certain fields in the breakpoint structure that are used to
11212    handle exception catchpoints.  This function returns the value to which
11213    these fields should be set, depending on the type of catchpoint we need
11214    to create.
11215    
11216    If COND and COND_STRING are both non-NULL, any value they might
11217    hold will be free'ed, and then replaced by newly allocated ones.
11218    These parameters are left untouched otherwise.  */
11219
11220 static struct symtab_and_line
11221 ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
11222                    char **addr_string, char **cond_string,
11223                    struct expression **cond, struct breakpoint_ops **ops)
11224 {
11225   const char *sym_name;
11226   struct symbol *sym;
11227   struct symtab_and_line sal;
11228
11229   /* First, find out which exception support info to use.  */
11230   ada_exception_support_info_sniffer ();
11231
11232   /* Then lookup the function on which we will break in order to catch
11233      the Ada exceptions requested by the user.  */
11234
11235   sym_name = ada_exception_sym_name (ex);
11236   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
11237
11238   /* The symbol we're looking up is provided by a unit in the GNAT runtime
11239      that should be compiled with debugging information.  As a result, we
11240      expect to find that symbol in the symtabs.  If we don't find it, then
11241      the target most likely does not support Ada exceptions, or we cannot
11242      insert exception breakpoints yet, because the GNAT runtime hasn't been
11243      loaded yet.  */
11244
11245   /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
11246      in such a way that no debugging information is produced for the symbol
11247      we are looking for.  In this case, we could search the minimal symbols
11248      as a fall-back mechanism.  This would still be operating in degraded
11249      mode, however, as we would still be missing the debugging information
11250      that is needed in order to extract the name of the exception being
11251      raised (this name is printed in the catchpoint message, and is also
11252      used when trying to catch a specific exception).  We do not handle
11253      this case for now.  */
11254
11255   if (sym == NULL)
11256     error (_("Unable to break on '%s' in this configuration."), sym_name);
11257
11258   /* Make sure that the symbol we found corresponds to a function.  */
11259   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11260     error (_("Symbol \"%s\" is not a function (class = %d)"),
11261            sym_name, SYMBOL_CLASS (sym));
11262
11263   sal = find_function_start_sal (sym, 1);
11264
11265   /* Set ADDR_STRING.  */
11266
11267   *addr_string = xstrdup (sym_name);
11268
11269   /* Set the COND and COND_STRING (if not NULL).  */
11270
11271   if (cond_string != NULL && cond != NULL)
11272     {
11273       if (*cond_string != NULL)
11274         {
11275           xfree (*cond_string);
11276           *cond_string = NULL;
11277         }
11278       if (*cond != NULL)
11279         {
11280           xfree (*cond);
11281           *cond = NULL;
11282         }
11283       if (exp_string != NULL)
11284         {
11285           *cond_string = ada_exception_catchpoint_cond_string (exp_string);
11286           *cond = ada_parse_catchpoint_condition (*cond_string, sal);
11287         }
11288     }
11289
11290   /* Set OPS.  */
11291   *ops = ada_exception_breakpoint_ops (ex);
11292
11293   return sal;
11294 }
11295
11296 /* Parse the arguments (ARGS) of the "catch exception" command.
11297  
11298    Set TYPE to the appropriate exception catchpoint type.
11299    If the user asked the catchpoint to catch only a specific
11300    exception, then save the exception name in ADDR_STRING.
11301
11302    See ada_exception_sal for a description of all the remaining
11303    function arguments of this function.  */
11304
11305 struct symtab_and_line
11306 ada_decode_exception_location (char *args, char **addr_string,
11307                                char **exp_string, char **cond_string,
11308                                struct expression **cond,
11309                                struct breakpoint_ops **ops)
11310 {
11311   enum exception_catchpoint_kind ex;
11312
11313   catch_ada_exception_command_split (args, &ex, exp_string);
11314   return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
11315                             cond, ops);
11316 }
11317
11318 struct symtab_and_line
11319 ada_decode_assert_location (char *args, char **addr_string,
11320                             struct breakpoint_ops **ops)
11321 {
11322   /* Check that no argument where provided at the end of the command.  */
11323
11324   if (args != NULL)
11325     {
11326       while (isspace (*args))
11327         args++;
11328       if (*args != '\0')
11329         error (_("Junk at end of arguments."));
11330     }
11331
11332   return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
11333                             ops);
11334 }
11335
11336                                 /* Operators */
11337 /* Information about operators given special treatment in functions
11338    below.  */
11339 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
11340
11341 #define ADA_OPERATORS \
11342     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
11343     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
11344     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
11345     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
11346     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
11347     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
11348     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
11349     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
11350     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
11351     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
11352     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
11353     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
11354     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
11355     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
11356     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
11357     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
11358     OP_DEFN (OP_OTHERS, 1, 1, 0) \
11359     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
11360     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
11361
11362 static void
11363 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
11364                      int *argsp)
11365 {
11366   switch (exp->elts[pc - 1].opcode)
11367     {
11368     default:
11369       operator_length_standard (exp, pc, oplenp, argsp);
11370       break;
11371
11372 #define OP_DEFN(op, len, args, binop) \
11373     case op: *oplenp = len; *argsp = args; break;
11374       ADA_OPERATORS;
11375 #undef OP_DEFN
11376
11377     case OP_AGGREGATE:
11378       *oplenp = 3;
11379       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
11380       break;
11381
11382     case OP_CHOICES:
11383       *oplenp = 3;
11384       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
11385       break;
11386     }
11387 }
11388
11389 /* Implementation of the exp_descriptor method operator_check.  */
11390
11391 static int
11392 ada_operator_check (struct expression *exp, int pos,
11393                     int (*objfile_func) (struct objfile *objfile, void *data),
11394                     void *data)
11395 {
11396   const union exp_element *const elts = exp->elts;
11397   struct type *type = NULL;
11398
11399   switch (elts[pos].opcode)
11400     {
11401       case UNOP_IN_RANGE:
11402       case UNOP_QUAL:
11403         type = elts[pos + 1].type;
11404         break;
11405
11406       default:
11407         return operator_check_standard (exp, pos, objfile_func, data);
11408     }
11409
11410   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
11411
11412   if (type && TYPE_OBJFILE (type)
11413       && (*objfile_func) (TYPE_OBJFILE (type), data))
11414     return 1;
11415
11416   return 0;
11417 }
11418
11419 static char *
11420 ada_op_name (enum exp_opcode opcode)
11421 {
11422   switch (opcode)
11423     {
11424     default:
11425       return op_name_standard (opcode);
11426
11427 #define OP_DEFN(op, len, args, binop) case op: return #op;
11428       ADA_OPERATORS;
11429 #undef OP_DEFN
11430
11431     case OP_AGGREGATE:
11432       return "OP_AGGREGATE";
11433     case OP_CHOICES:
11434       return "OP_CHOICES";
11435     case OP_NAME:
11436       return "OP_NAME";
11437     }
11438 }
11439
11440 /* As for operator_length, but assumes PC is pointing at the first
11441    element of the operator, and gives meaningful results only for the 
11442    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
11443
11444 static void
11445 ada_forward_operator_length (struct expression *exp, int pc,
11446                              int *oplenp, int *argsp)
11447 {
11448   switch (exp->elts[pc].opcode)
11449     {
11450     default:
11451       *oplenp = *argsp = 0;
11452       break;
11453
11454 #define OP_DEFN(op, len, args, binop) \
11455     case op: *oplenp = len; *argsp = args; break;
11456       ADA_OPERATORS;
11457 #undef OP_DEFN
11458
11459     case OP_AGGREGATE:
11460       *oplenp = 3;
11461       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
11462       break;
11463
11464     case OP_CHOICES:
11465       *oplenp = 3;
11466       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
11467       break;
11468
11469     case OP_STRING:
11470     case OP_NAME:
11471       {
11472         int len = longest_to_int (exp->elts[pc + 1].longconst);
11473
11474         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
11475         *argsp = 0;
11476         break;
11477       }
11478     }
11479 }
11480
11481 static int
11482 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
11483 {
11484   enum exp_opcode op = exp->elts[elt].opcode;
11485   int oplen, nargs;
11486   int pc = elt;
11487   int i;
11488
11489   ada_forward_operator_length (exp, elt, &oplen, &nargs);
11490
11491   switch (op)
11492     {
11493       /* Ada attributes ('Foo).  */
11494     case OP_ATR_FIRST:
11495     case OP_ATR_LAST:
11496     case OP_ATR_LENGTH:
11497     case OP_ATR_IMAGE:
11498     case OP_ATR_MAX:
11499     case OP_ATR_MIN:
11500     case OP_ATR_MODULUS:
11501     case OP_ATR_POS:
11502     case OP_ATR_SIZE:
11503     case OP_ATR_TAG:
11504     case OP_ATR_VAL:
11505       break;
11506
11507     case UNOP_IN_RANGE:
11508     case UNOP_QUAL:
11509       /* XXX: gdb_sprint_host_address, type_sprint */
11510       fprintf_filtered (stream, _("Type @"));
11511       gdb_print_host_address (exp->elts[pc + 1].type, stream);
11512       fprintf_filtered (stream, " (");
11513       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
11514       fprintf_filtered (stream, ")");
11515       break;
11516     case BINOP_IN_BOUNDS:
11517       fprintf_filtered (stream, " (%d)",
11518                         longest_to_int (exp->elts[pc + 2].longconst));
11519       break;
11520     case TERNOP_IN_RANGE:
11521       break;
11522
11523     case OP_AGGREGATE:
11524     case OP_OTHERS:
11525     case OP_DISCRETE_RANGE:
11526     case OP_POSITIONAL:
11527     case OP_CHOICES:
11528       break;
11529
11530     case OP_NAME:
11531     case OP_STRING:
11532       {
11533         char *name = &exp->elts[elt + 2].string;
11534         int len = longest_to_int (exp->elts[elt + 1].longconst);
11535
11536         fprintf_filtered (stream, "Text: `%.*s'", len, name);
11537         break;
11538       }
11539
11540     default:
11541       return dump_subexp_body_standard (exp, stream, elt);
11542     }
11543
11544   elt += oplen;
11545   for (i = 0; i < nargs; i += 1)
11546     elt = dump_subexp (exp, stream, elt);
11547
11548   return elt;
11549 }
11550
11551 /* The Ada extension of print_subexp (q.v.).  */
11552
11553 static void
11554 ada_print_subexp (struct expression *exp, int *pos,
11555                   struct ui_file *stream, enum precedence prec)
11556 {
11557   int oplen, nargs, i;
11558   int pc = *pos;
11559   enum exp_opcode op = exp->elts[pc].opcode;
11560
11561   ada_forward_operator_length (exp, pc, &oplen, &nargs);
11562
11563   *pos += oplen;
11564   switch (op)
11565     {
11566     default:
11567       *pos -= oplen;
11568       print_subexp_standard (exp, pos, stream, prec);
11569       return;
11570
11571     case OP_VAR_VALUE:
11572       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
11573       return;
11574
11575     case BINOP_IN_BOUNDS:
11576       /* XXX: sprint_subexp */
11577       print_subexp (exp, pos, stream, PREC_SUFFIX);
11578       fputs_filtered (" in ", stream);
11579       print_subexp (exp, pos, stream, PREC_SUFFIX);
11580       fputs_filtered ("'range", stream);
11581       if (exp->elts[pc + 1].longconst > 1)
11582         fprintf_filtered (stream, "(%ld)",
11583                           (long) exp->elts[pc + 1].longconst);
11584       return;
11585
11586     case TERNOP_IN_RANGE:
11587       if (prec >= PREC_EQUAL)
11588         fputs_filtered ("(", stream);
11589       /* XXX: sprint_subexp */
11590       print_subexp (exp, pos, stream, PREC_SUFFIX);
11591       fputs_filtered (" in ", stream);
11592       print_subexp (exp, pos, stream, PREC_EQUAL);
11593       fputs_filtered (" .. ", stream);
11594       print_subexp (exp, pos, stream, PREC_EQUAL);
11595       if (prec >= PREC_EQUAL)
11596         fputs_filtered (")", stream);
11597       return;
11598
11599     case OP_ATR_FIRST:
11600     case OP_ATR_LAST:
11601     case OP_ATR_LENGTH:
11602     case OP_ATR_IMAGE:
11603     case OP_ATR_MAX:
11604     case OP_ATR_MIN:
11605     case OP_ATR_MODULUS:
11606     case OP_ATR_POS:
11607     case OP_ATR_SIZE:
11608     case OP_ATR_TAG:
11609     case OP_ATR_VAL:
11610       if (exp->elts[*pos].opcode == OP_TYPE)
11611         {
11612           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
11613             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
11614           *pos += 3;
11615         }
11616       else
11617         print_subexp (exp, pos, stream, PREC_SUFFIX);
11618       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
11619       if (nargs > 1)
11620         {
11621           int tem;
11622
11623           for (tem = 1; tem < nargs; tem += 1)
11624             {
11625               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
11626               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
11627             }
11628           fputs_filtered (")", stream);
11629         }
11630       return;
11631
11632     case UNOP_QUAL:
11633       type_print (exp->elts[pc + 1].type, "", stream, 0);
11634       fputs_filtered ("'(", stream);
11635       print_subexp (exp, pos, stream, PREC_PREFIX);
11636       fputs_filtered (")", stream);
11637       return;
11638
11639     case UNOP_IN_RANGE:
11640       /* XXX: sprint_subexp */
11641       print_subexp (exp, pos, stream, PREC_SUFFIX);
11642       fputs_filtered (" in ", stream);
11643       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
11644       return;
11645
11646     case OP_DISCRETE_RANGE:
11647       print_subexp (exp, pos, stream, PREC_SUFFIX);
11648       fputs_filtered ("..", stream);
11649       print_subexp (exp, pos, stream, PREC_SUFFIX);
11650       return;
11651
11652     case OP_OTHERS:
11653       fputs_filtered ("others => ", stream);
11654       print_subexp (exp, pos, stream, PREC_SUFFIX);
11655       return;
11656
11657     case OP_CHOICES:
11658       for (i = 0; i < nargs-1; i += 1)
11659         {
11660           if (i > 0)
11661             fputs_filtered ("|", stream);
11662           print_subexp (exp, pos, stream, PREC_SUFFIX);
11663         }
11664       fputs_filtered (" => ", stream);
11665       print_subexp (exp, pos, stream, PREC_SUFFIX);
11666       return;
11667       
11668     case OP_POSITIONAL:
11669       print_subexp (exp, pos, stream, PREC_SUFFIX);
11670       return;
11671
11672     case OP_AGGREGATE:
11673       fputs_filtered ("(", stream);
11674       for (i = 0; i < nargs; i += 1)
11675         {
11676           if (i > 0)
11677             fputs_filtered (", ", stream);
11678           print_subexp (exp, pos, stream, PREC_SUFFIX);
11679         }
11680       fputs_filtered (")", stream);
11681       return;
11682     }
11683 }
11684
11685 /* Table mapping opcodes into strings for printing operators
11686    and precedences of the operators.  */
11687
11688 static const struct op_print ada_op_print_tab[] = {
11689   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
11690   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
11691   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
11692   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
11693   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
11694   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
11695   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
11696   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
11697   {"<=", BINOP_LEQ, PREC_ORDER, 0},
11698   {">=", BINOP_GEQ, PREC_ORDER, 0},
11699   {">", BINOP_GTR, PREC_ORDER, 0},
11700   {"<", BINOP_LESS, PREC_ORDER, 0},
11701   {">>", BINOP_RSH, PREC_SHIFT, 0},
11702   {"<<", BINOP_LSH, PREC_SHIFT, 0},
11703   {"+", BINOP_ADD, PREC_ADD, 0},
11704   {"-", BINOP_SUB, PREC_ADD, 0},
11705   {"&", BINOP_CONCAT, PREC_ADD, 0},
11706   {"*", BINOP_MUL, PREC_MUL, 0},
11707   {"/", BINOP_DIV, PREC_MUL, 0},
11708   {"rem", BINOP_REM, PREC_MUL, 0},
11709   {"mod", BINOP_MOD, PREC_MUL, 0},
11710   {"**", BINOP_EXP, PREC_REPEAT, 0},
11711   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
11712   {"-", UNOP_NEG, PREC_PREFIX, 0},
11713   {"+", UNOP_PLUS, PREC_PREFIX, 0},
11714   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
11715   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
11716   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
11717   {".all", UNOP_IND, PREC_SUFFIX, 1},
11718   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
11719   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
11720   {NULL, 0, 0, 0}
11721 };
11722 \f
11723 enum ada_primitive_types {
11724   ada_primitive_type_int,
11725   ada_primitive_type_long,
11726   ada_primitive_type_short,
11727   ada_primitive_type_char,
11728   ada_primitive_type_float,
11729   ada_primitive_type_double,
11730   ada_primitive_type_void,
11731   ada_primitive_type_long_long,
11732   ada_primitive_type_long_double,
11733   ada_primitive_type_natural,
11734   ada_primitive_type_positive,
11735   ada_primitive_type_system_address,
11736   nr_ada_primitive_types
11737 };
11738
11739 static void
11740 ada_language_arch_info (struct gdbarch *gdbarch,
11741                         struct language_arch_info *lai)
11742 {
11743   const struct builtin_type *builtin = builtin_type (gdbarch);
11744
11745   lai->primitive_type_vector
11746     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
11747                               struct type *);
11748
11749   lai->primitive_type_vector [ada_primitive_type_int]
11750     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11751                          0, "integer");
11752   lai->primitive_type_vector [ada_primitive_type_long]
11753     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
11754                          0, "long_integer");
11755   lai->primitive_type_vector [ada_primitive_type_short]
11756     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
11757                          0, "short_integer");
11758   lai->string_char_type
11759     = lai->primitive_type_vector [ada_primitive_type_char]
11760     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
11761   lai->primitive_type_vector [ada_primitive_type_float]
11762     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
11763                        "float", NULL);
11764   lai->primitive_type_vector [ada_primitive_type_double]
11765     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11766                        "long_float", NULL);
11767   lai->primitive_type_vector [ada_primitive_type_long_long]
11768     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
11769                          0, "long_long_integer");
11770   lai->primitive_type_vector [ada_primitive_type_long_double]
11771     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11772                        "long_long_float", NULL);
11773   lai->primitive_type_vector [ada_primitive_type_natural]
11774     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11775                          0, "natural");
11776   lai->primitive_type_vector [ada_primitive_type_positive]
11777     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11778                          0, "positive");
11779   lai->primitive_type_vector [ada_primitive_type_void]
11780     = builtin->builtin_void;
11781
11782   lai->primitive_type_vector [ada_primitive_type_system_address]
11783     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
11784   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
11785     = "system__address";
11786
11787   lai->bool_type_symbol = NULL;
11788   lai->bool_type_default = builtin->builtin_bool;
11789 }
11790 \f
11791                                 /* Language vector */
11792
11793 /* Not really used, but needed in the ada_language_defn.  */
11794
11795 static void
11796 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
11797 {
11798   ada_emit_char (c, type, stream, quoter, 1);
11799 }
11800
11801 static int
11802 parse (void)
11803 {
11804   warnings_issued = 0;
11805   return ada_parse ();
11806 }
11807
11808 static const struct exp_descriptor ada_exp_descriptor = {
11809   ada_print_subexp,
11810   ada_operator_length,
11811   ada_operator_check,
11812   ada_op_name,
11813   ada_dump_subexp_body,
11814   ada_evaluate_subexp
11815 };
11816
11817 const struct language_defn ada_language_defn = {
11818   "ada",                        /* Language name */
11819   language_ada,
11820   range_check_off,
11821   type_check_off,
11822   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
11823                                    that's not quite what this means.  */
11824   array_row_major,
11825   macro_expansion_no,
11826   &ada_exp_descriptor,
11827   parse,
11828   ada_error,
11829   resolve,
11830   ada_printchar,                /* Print a character constant */
11831   ada_printstr,                 /* Function to print string constant */
11832   emit_char,                    /* Function to print single char (not used) */
11833   ada_print_type,               /* Print a type using appropriate syntax */
11834   ada_print_typedef,            /* Print a typedef using appropriate syntax */
11835   ada_val_print,                /* Print a value using appropriate syntax */
11836   ada_value_print,              /* Print a top-level value */
11837   NULL,                         /* Language specific skip_trampoline */
11838   NULL,                         /* name_of_this */
11839   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
11840   basic_lookup_transparent_type,        /* lookup_transparent_type */
11841   ada_la_decode,                /* Language specific symbol demangler */
11842   NULL,                         /* Language specific
11843                                    class_name_from_physname */
11844   ada_op_print_tab,             /* expression operators for printing */
11845   0,                            /* c-style arrays */
11846   1,                            /* String lower bound */
11847   ada_get_gdb_completer_word_break_characters,
11848   ada_make_symbol_completion_list,
11849   ada_language_arch_info,
11850   ada_print_array_index,
11851   default_pass_by_reference,
11852   c_get_string,
11853   LANG_MAGIC
11854 };
11855
11856 /* Provide a prototype to silence -Wmissing-prototypes.  */
11857 extern initialize_file_ftype _initialize_ada_language;
11858
11859 /* Command-list for the "set/show ada" prefix command.  */
11860 static struct cmd_list_element *set_ada_list;
11861 static struct cmd_list_element *show_ada_list;
11862
11863 /* Implement the "set ada" prefix command.  */
11864
11865 static void
11866 set_ada_command (char *arg, int from_tty)
11867 {
11868   printf_unfiltered (_(\
11869 "\"set ada\" must be followed by the name of a setting.\n"));
11870   help_list (set_ada_list, "set ada ", -1, gdb_stdout);
11871 }
11872
11873 /* Implement the "show ada" prefix command.  */
11874
11875 static void
11876 show_ada_command (char *args, int from_tty)
11877 {
11878   cmd_show_list (show_ada_list, from_tty, "");
11879 }
11880
11881 void
11882 _initialize_ada_language (void)
11883 {
11884   add_language (&ada_language_defn);
11885
11886   add_prefix_cmd ("ada", no_class, set_ada_command,
11887                   _("Prefix command for changing Ada-specfic settings"),
11888                   &set_ada_list, "set ada ", 0, &setlist);
11889
11890   add_prefix_cmd ("ada", no_class, show_ada_command,
11891                   _("Generic command for showing Ada-specific settings."),
11892                   &show_ada_list, "show ada ", 0, &showlist);
11893
11894   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
11895                            &trust_pad_over_xvs, _("\
11896 Enable or disable an optimization trusting PAD types over XVS types"), _("\
11897 Show whether an optimization trusting PAD types over XVS types is activated"),
11898                            _("\
11899 This is related to the encoding used by the GNAT compiler.  The debugger\n\
11900 should normally trust the contents of PAD types, but certain older versions\n\
11901 of GNAT have a bug that sometimes causes the information in the PAD type\n\
11902 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
11903 work around this bug.  It is always safe to turn this option \"off\", but\n\
11904 this incurs a slight performance penalty, so it is recommended to NOT change\n\
11905 this option to \"off\" unless necessary."),
11906                             NULL, NULL, &set_ada_list, &show_ada_list);
11907
11908   varsize_limit = 65536;
11909
11910   obstack_init (&symbol_list_obstack);
11911
11912   decoded_names_store = htab_create_alloc
11913     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
11914      NULL, xcalloc, xfree);
11915
11916   observer_attach_executable_changed (ada_executable_changed_observer);
11917
11918   /* Setup per-inferior data.  */
11919   observer_attach_inferior_exit (ada_inferior_exit);
11920   ada_inferior_data
11921     = register_inferior_data_with_cleanup (ada_inferior_data_cleanup);
11922 }