xref: /openbsd/gnu/usr.bin/binutils/gdb/ada-lang.c (revision 11efff7f)
1 /* Ada language support routines for GDB, the GNU debugger.  Copyright
2    1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004.
3    Free Software Foundation, Inc.
4 
5 This file is part of GDB.
6 
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11 
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
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 
54 #ifndef ADA_RETAIN_DOTS
55 #define ADA_RETAIN_DOTS 0
56 #endif
57 
58 /* Define whether or not the C operator '/' truncates towards zero for
59    differently signed operands (truncation direction is undefined in C).
60    Copied from valarith.c.  */
61 
62 #ifndef TRUNCATION_TOWARDS_ZERO
63 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
64 #endif
65 
66 
67 static void extract_string (CORE_ADDR addr, char *buf);
68 
69 static struct type *ada_create_fundamental_type (struct objfile *, int);
70 
71 static void modify_general_field (char *, LONGEST, int, int);
72 
73 static struct type *desc_base_type (struct type *);
74 
75 static struct type *desc_bounds_type (struct type *);
76 
77 static struct value *desc_bounds (struct value *);
78 
79 static int fat_pntr_bounds_bitpos (struct type *);
80 
81 static int fat_pntr_bounds_bitsize (struct type *);
82 
83 static struct type *desc_data_type (struct type *);
84 
85 static struct value *desc_data (struct value *);
86 
87 static int fat_pntr_data_bitpos (struct type *);
88 
89 static int fat_pntr_data_bitsize (struct type *);
90 
91 static struct value *desc_one_bound (struct value *, int, int);
92 
93 static int desc_bound_bitpos (struct type *, int, int);
94 
95 static int desc_bound_bitsize (struct type *, int, int);
96 
97 static struct type *desc_index_type (struct type *, int);
98 
99 static int desc_arity (struct type *);
100 
101 static int ada_type_match (struct type *, struct type *, int);
102 
103 static int ada_args_match (struct symbol *, struct value **, int);
104 
105 static struct value *ensure_lval (struct value *, CORE_ADDR *);
106 
107 static struct value *convert_actual (struct value *, struct type *,
108                                      CORE_ADDR *);
109 
110 static struct value *make_array_descriptor (struct type *, struct value *,
111                                             CORE_ADDR *);
112 
113 static void ada_add_block_symbols (struct obstack *,
114                                    struct block *, const char *,
115                                    domain_enum, struct objfile *,
116                                    struct symtab *, int);
117 
118 static int is_nonfunction (struct ada_symbol_info *, int);
119 
120 static void add_defn_to_vec (struct obstack *, struct symbol *,
121                              struct block *, struct symtab *);
122 
123 static int num_defns_collected (struct obstack *);
124 
125 static struct ada_symbol_info *defns_collected (struct obstack *, int);
126 
127 static struct partial_symbol *ada_lookup_partial_symbol (struct partial_symtab
128                                                          *, const char *, int,
129                                                          domain_enum, int);
130 
131 static struct symtab *symtab_for_sym (struct symbol *);
132 
133 static struct value *resolve_subexp (struct expression **, int *, int,
134                                      struct type *);
135 
136 static void replace_operator_with_call (struct expression **, int, int, int,
137                                         struct symbol *, struct block *);
138 
139 static int possible_user_operator_p (enum exp_opcode, struct value **);
140 
141 static char *ada_op_name (enum exp_opcode);
142 
143 static const char *ada_decoded_op_name (enum exp_opcode);
144 
145 static int numeric_type_p (struct type *);
146 
147 static int integer_type_p (struct type *);
148 
149 static int scalar_type_p (struct type *);
150 
151 static int discrete_type_p (struct type *);
152 
153 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
154                                                 int, int, int *);
155 
156 static struct value *evaluate_subexp (struct type *, struct expression *,
157                                       int *, enum noside);
158 
159 static struct value *evaluate_subexp_type (struct expression *, int *);
160 
161 static int is_dynamic_field (struct type *, int);
162 
163 static struct type *to_fixed_variant_branch_type (struct type *, char *,
164                                                   CORE_ADDR, struct value *);
165 
166 static struct type *to_fixed_array_type (struct type *, struct value *, int);
167 
168 static struct type *to_fixed_range_type (char *, struct value *,
169                                          struct objfile *);
170 
171 static struct type *to_static_fixed_type (struct type *);
172 
173 static struct value *unwrap_value (struct value *);
174 
175 static struct type *packed_array_type (struct type *, long *);
176 
177 static struct type *decode_packed_array_type (struct type *);
178 
179 static struct value *decode_packed_array (struct value *);
180 
181 static struct value *value_subscript_packed (struct value *, int,
182                                              struct value **);
183 
184 static struct value *coerce_unspec_val_to_type (struct value *,
185                                                 struct type *);
186 
187 static struct value *get_var_value (char *, char *);
188 
189 static int lesseq_defined_than (struct symbol *, struct symbol *);
190 
191 static int equiv_types (struct type *, struct type *);
192 
193 static int is_name_suffix (const char *);
194 
195 static int wild_match (const char *, int, const char *);
196 
197 static struct value *ada_coerce_ref (struct value *);
198 
199 static LONGEST pos_atr (struct value *);
200 
201 static struct value *value_pos_atr (struct value *);
202 
203 static struct value *value_val_atr (struct type *, struct value *);
204 
205 static struct symbol *standard_lookup (const char *, const struct block *,
206                                        domain_enum);
207 
208 static struct value *ada_search_struct_field (char *, struct value *, int,
209                                               struct type *);
210 
211 static struct value *ada_value_primitive_field (struct value *, int, int,
212                                                 struct type *);
213 
214 static int find_struct_field (char *, struct type *, int,
215                               struct type **, int *, int *, int *);
216 
217 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
218                                                 struct value *);
219 
220 static struct value *ada_to_fixed_value (struct value *);
221 
222 static int ada_resolve_function (struct ada_symbol_info *, int,
223                                  struct value **, int, const char *,
224                                  struct type *);
225 
226 static struct value *ada_coerce_to_simple_array (struct value *);
227 
228 static int ada_is_direct_array_type (struct type *);
229 
230 static void ada_language_arch_info (struct gdbarch *,
231 				    struct language_arch_info *);
232 
233 static void check_size (const struct type *);
234 
235 
236 
237 /* Maximum-sized dynamic type.  */
238 static unsigned int varsize_limit;
239 
240 /* FIXME: brobecker/2003-09-17: No longer a const because it is
241    returned by a function that does not return a const char *.  */
242 static char *ada_completer_word_break_characters =
243 #ifdef VMS
244   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
245 #else
246   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
247 #endif
248 
249 /* The name of the symbol to use to get the name of the main subprogram.  */
250 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
251   = "__gnat_ada_main_program_name";
252 
253 /* The name of the runtime function called when an exception is raised.  */
254 static const char raise_sym_name[] = "__gnat_raise_nodefer_with_msg";
255 
256 /* The name of the runtime function called when an unhandled exception
257    is raised.  */
258 static const char raise_unhandled_sym_name[] = "__gnat_unhandled_exception";
259 
260 /* The name of the runtime function called when an assert failure is
261    raised.  */
262 static const char raise_assert_sym_name[] =
263   "system__assertions__raise_assert_failure";
264 
265 /* When GDB stops on an unhandled exception, GDB will go up the stack until
266    if finds a frame corresponding to this function, in order to extract the
267    name of the exception that has been raised from one of the parameters.  */
268 static const char process_raise_exception_name[] =
269   "ada__exceptions__process_raise_exception";
270 
271 /* A string that reflects the longest exception expression rewrite,
272    aside from the exception name.  */
273 static const char longest_exception_template[] =
274   "'__gnat_raise_nodefer_with_msg' if long_integer(e) = long_integer(&)";
275 
276 /* Limit on the number of warnings to raise per expression evaluation.  */
277 static int warning_limit = 2;
278 
279 /* Number of warning messages issued; reset to 0 by cleanups after
280    expression evaluation.  */
281 static int warnings_issued = 0;
282 
283 static const char *known_runtime_file_name_patterns[] = {
284   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
285 };
286 
287 static const char *known_auxiliary_function_name_patterns[] = {
288   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
289 };
290 
291 /* Space for allocating results of ada_lookup_symbol_list.  */
292 static struct obstack symbol_list_obstack;
293 
294                         /* Utilities */
295 
296 
297 static char *
ada_get_gdb_completer_word_break_characters(void)298 ada_get_gdb_completer_word_break_characters (void)
299 {
300   return ada_completer_word_break_characters;
301 }
302 
303 /* Read the string located at ADDR from the inferior and store the
304    result into BUF.  */
305 
306 static void
extract_string(CORE_ADDR addr,char * buf)307 extract_string (CORE_ADDR addr, char *buf)
308 {
309   int char_index = 0;
310 
311   /* Loop, reading one byte at a time, until we reach the '\000'
312      end-of-string marker.  */
313   do
314     {
315       target_read_memory (addr + char_index * sizeof (char),
316                           buf + char_index * sizeof (char), sizeof (char));
317       char_index++;
318     }
319   while (buf[char_index - 1] != '\000');
320 }
321 
322 /* Assuming *OLD_VECT points to an array of *SIZE objects of size
323    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
324    updating *OLD_VECT and *SIZE as necessary.  */
325 
326 void
grow_vect(void ** old_vect,size_t * size,size_t min_size,int element_size)327 grow_vect (void **old_vect, size_t * size, size_t min_size, int element_size)
328 {
329   if (*size < min_size)
330     {
331       *size *= 2;
332       if (*size < min_size)
333         *size = min_size;
334       *old_vect = xrealloc (*old_vect, *size * element_size);
335     }
336 }
337 
338 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
339    suffix of FIELD_NAME beginning "___".  */
340 
341 static int
field_name_match(const char * field_name,const char * target)342 field_name_match (const char *field_name, const char *target)
343 {
344   int len = strlen (target);
345   return
346     (strncmp (field_name, target, len) == 0
347      && (field_name[len] == '\0'
348          || (strncmp (field_name + len, "___", 3) == 0
349              && strcmp (field_name + strlen (field_name) - 6,
350                         "___XVN") != 0)));
351 }
352 
353 
354 /* Assuming TYPE is a TYPE_CODE_STRUCT, find the field whose name matches
355    FIELD_NAME, and return its index.  This function also handles fields
356    whose name have ___ suffixes because the compiler sometimes alters
357    their name by adding such a suffix to represent fields with certain
358    constraints.  If the field could not be found, return a negative
359    number if MAYBE_MISSING is set.  Otherwise raise an error.  */
360 
361 int
ada_get_field_index(const struct type * type,const char * field_name,int maybe_missing)362 ada_get_field_index (const struct type *type, const char *field_name,
363                      int maybe_missing)
364 {
365   int fieldno;
366   for (fieldno = 0; fieldno < TYPE_NFIELDS (type); fieldno++)
367     if (field_name_match (TYPE_FIELD_NAME (type, fieldno), field_name))
368       return fieldno;
369 
370   if (!maybe_missing)
371     error ("Unable to find field %s in struct %s.  Aborting",
372            field_name, TYPE_NAME (type));
373 
374   return -1;
375 }
376 
377 /* The length of the prefix of NAME prior to any "___" suffix.  */
378 
379 int
ada_name_prefix_len(const char * name)380 ada_name_prefix_len (const char *name)
381 {
382   if (name == NULL)
383     return 0;
384   else
385     {
386       const char *p = strstr (name, "___");
387       if (p == NULL)
388         return strlen (name);
389       else
390         return p - name;
391     }
392 }
393 
394 /* Return non-zero if SUFFIX is a suffix of STR.
395    Return zero if STR is null.  */
396 
397 static int
is_suffix(const char * str,const char * suffix)398 is_suffix (const char *str, const char *suffix)
399 {
400   int len1, len2;
401   if (str == NULL)
402     return 0;
403   len1 = strlen (str);
404   len2 = strlen (suffix);
405   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
406 }
407 
408 /* Create a value of type TYPE whose contents come from VALADDR, if it
409    is non-null, and whose memory address (in the inferior) is
410    ADDRESS.  */
411 
412 struct value *
value_from_contents_and_address(struct type * type,char * valaddr,CORE_ADDR address)413 value_from_contents_and_address (struct type *type, char *valaddr,
414                                  CORE_ADDR address)
415 {
416   struct value *v = allocate_value (type);
417   if (valaddr == NULL)
418     VALUE_LAZY (v) = 1;
419   else
420     memcpy (VALUE_CONTENTS_RAW (v), valaddr, TYPE_LENGTH (type));
421   VALUE_ADDRESS (v) = address;
422   if (address != 0)
423     VALUE_LVAL (v) = lval_memory;
424   return v;
425 }
426 
427 /* The contents of value VAL, treated as a value of type TYPE.  The
428    result is an lval in memory if VAL is.  */
429 
430 static struct value *
coerce_unspec_val_to_type(struct value * val,struct type * type)431 coerce_unspec_val_to_type (struct value *val, struct type *type)
432 {
433   type = ada_check_typedef (type);
434   if (VALUE_TYPE (val) == type)
435     return val;
436   else
437     {
438       struct value *result;
439 
440       /* Make sure that the object size is not unreasonable before
441          trying to allocate some memory for it.  */
442       check_size (type);
443 
444       result = allocate_value (type);
445       VALUE_LVAL (result) = VALUE_LVAL (val);
446       VALUE_BITSIZE (result) = VALUE_BITSIZE (val);
447       VALUE_BITPOS (result) = VALUE_BITPOS (val);
448       VALUE_ADDRESS (result) = VALUE_ADDRESS (val) + VALUE_OFFSET (val);
449       if (VALUE_LAZY (val)
450           || TYPE_LENGTH (type) > TYPE_LENGTH (VALUE_TYPE (val)))
451         VALUE_LAZY (result) = 1;
452       else
453         memcpy (VALUE_CONTENTS_RAW (result), VALUE_CONTENTS (val),
454                 TYPE_LENGTH (type));
455       return result;
456     }
457 }
458 
459 static char *
cond_offset_host(char * valaddr,long offset)460 cond_offset_host (char *valaddr, long offset)
461 {
462   if (valaddr == NULL)
463     return NULL;
464   else
465     return valaddr + offset;
466 }
467 
468 static CORE_ADDR
cond_offset_target(CORE_ADDR address,long offset)469 cond_offset_target (CORE_ADDR address, long offset)
470 {
471   if (address == 0)
472     return 0;
473   else
474     return address + offset;
475 }
476 
477 /* Issue a warning (as for the definition of warning in utils.c, but
478    with exactly one argument rather than ...), unless the limit on the
479    number of warnings has passed during the evaluation of the current
480    expression.  */
481 
482 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
483    provided by "complaint".  */
484 static void lim_warning (const char *format, ...) ATTR_FORMAT (printf, 1, 2);
485 
486 static void
lim_warning(const char * format,...)487 lim_warning (const char *format, ...)
488 {
489   va_list args;
490   va_start (args, format);
491 
492   warnings_issued += 1;
493   if (warnings_issued <= warning_limit)
494     vwarning (format, args);
495 
496   va_end (args);
497 }
498 
499 /* Issue an error if the size of an object of type T is unreasonable,
500    i.e. if it would be a bad idea to allocate a value of this type in
501    GDB.  */
502 
503 static void
check_size(const struct type * type)504 check_size (const struct type *type)
505 {
506   if (TYPE_LENGTH (type) > varsize_limit)
507     error ("object size is larger than varsize-limit");
508 }
509 
510 
511 /* Note: would have used MAX_OF_TYPE and MIN_OF_TYPE macros from
512    gdbtypes.h, but some of the necessary definitions in that file
513    seem to have gone missing. */
514 
515 /* Maximum value of a SIZE-byte signed integer type. */
516 static LONGEST
max_of_size(int size)517 max_of_size (int size)
518 {
519   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
520   return top_bit | (top_bit - 1);
521 }
522 
523 /* Minimum value of a SIZE-byte signed integer type. */
524 static LONGEST
min_of_size(int size)525 min_of_size (int size)
526 {
527   return -max_of_size (size) - 1;
528 }
529 
530 /* Maximum value of a SIZE-byte unsigned integer type. */
531 static ULONGEST
umax_of_size(int size)532 umax_of_size (int size)
533 {
534   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
535   return top_bit | (top_bit - 1);
536 }
537 
538 /* Maximum value of integral type T, as a signed quantity. */
539 static LONGEST
max_of_type(struct type * t)540 max_of_type (struct type *t)
541 {
542   if (TYPE_UNSIGNED (t))
543     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
544   else
545     return max_of_size (TYPE_LENGTH (t));
546 }
547 
548 /* Minimum value of integral type T, as a signed quantity. */
549 static LONGEST
min_of_type(struct type * t)550 min_of_type (struct type *t)
551 {
552   if (TYPE_UNSIGNED (t))
553     return 0;
554   else
555     return min_of_size (TYPE_LENGTH (t));
556 }
557 
558 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
559 static struct value *
discrete_type_high_bound(struct type * type)560 discrete_type_high_bound (struct type *type)
561 {
562   switch (TYPE_CODE (type))
563     {
564     case TYPE_CODE_RANGE:
565       return value_from_longest (TYPE_TARGET_TYPE (type),
566                                  TYPE_HIGH_BOUND (type));
567     case TYPE_CODE_ENUM:
568       return
569         value_from_longest (type,
570                             TYPE_FIELD_BITPOS (type,
571                                                TYPE_NFIELDS (type) - 1));
572     case TYPE_CODE_INT:
573       return value_from_longest (type, max_of_type (type));
574     default:
575       error ("Unexpected type in discrete_type_high_bound.");
576     }
577 }
578 
579 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
580 static struct value *
discrete_type_low_bound(struct type * type)581 discrete_type_low_bound (struct type *type)
582 {
583   switch (TYPE_CODE (type))
584     {
585     case TYPE_CODE_RANGE:
586       return value_from_longest (TYPE_TARGET_TYPE (type),
587                                  TYPE_LOW_BOUND (type));
588     case TYPE_CODE_ENUM:
589       return value_from_longest (type, TYPE_FIELD_BITPOS (type, 0));
590     case TYPE_CODE_INT:
591       return value_from_longest (type, min_of_type (type));
592     default:
593       error ("Unexpected type in discrete_type_low_bound.");
594     }
595 }
596 
597 /* The identity on non-range types.  For range types, the underlying
598    non-range scalar type.  */
599 
600 static struct type *
base_type(struct type * type)601 base_type (struct type *type)
602 {
603   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
604     {
605       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
606         return type;
607       type = TYPE_TARGET_TYPE (type);
608     }
609   return type;
610 }
611 
612 
613                                 /* Language Selection */
614 
615 /* If the main program is in Ada, return language_ada, otherwise return LANG
616    (the main program is in Ada iif the adainit symbol is found).
617 
618    MAIN_PST is not used.  */
619 
620 enum language
ada_update_initial_language(enum language lang,struct partial_symtab * main_pst)621 ada_update_initial_language (enum language lang,
622                              struct partial_symtab *main_pst)
623 {
624   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
625                              (struct objfile *) NULL) != NULL)
626     return language_ada;
627 
628   return lang;
629 }
630 
631 /* If the main procedure is written in Ada, then return its name.
632    The result is good until the next call.  Return NULL if the main
633    procedure doesn't appear to be in Ada.  */
634 
635 char *
ada_main_name(void)636 ada_main_name (void)
637 {
638   struct minimal_symbol *msym;
639   CORE_ADDR main_program_name_addr;
640   static char main_program_name[1024];
641 
642   /* For Ada, the name of the main procedure is stored in a specific
643      string constant, generated by the binder.  Look for that symbol,
644      extract its address, and then read that string.  If we didn't find
645      that string, then most probably the main procedure is not written
646      in Ada.  */
647   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
648 
649   if (msym != NULL)
650     {
651       main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
652       if (main_program_name_addr == 0)
653         error ("Invalid address for Ada main program name.");
654 
655       extract_string (main_program_name_addr, main_program_name);
656       return main_program_name;
657     }
658 
659   /* The main procedure doesn't seem to be in Ada.  */
660   return NULL;
661 }
662 
663                                 /* Symbols */
664 
665 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
666    of NULLs.  */
667 
668 const struct ada_opname_map ada_opname_table[] = {
669   {"Oadd", "\"+\"", BINOP_ADD},
670   {"Osubtract", "\"-\"", BINOP_SUB},
671   {"Omultiply", "\"*\"", BINOP_MUL},
672   {"Odivide", "\"/\"", BINOP_DIV},
673   {"Omod", "\"mod\"", BINOP_MOD},
674   {"Orem", "\"rem\"", BINOP_REM},
675   {"Oexpon", "\"**\"", BINOP_EXP},
676   {"Olt", "\"<\"", BINOP_LESS},
677   {"Ole", "\"<=\"", BINOP_LEQ},
678   {"Ogt", "\">\"", BINOP_GTR},
679   {"Oge", "\">=\"", BINOP_GEQ},
680   {"Oeq", "\"=\"", BINOP_EQUAL},
681   {"One", "\"/=\"", BINOP_NOTEQUAL},
682   {"Oand", "\"and\"", BINOP_BITWISE_AND},
683   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
684   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
685   {"Oconcat", "\"&\"", BINOP_CONCAT},
686   {"Oabs", "\"abs\"", UNOP_ABS},
687   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
688   {"Oadd", "\"+\"", UNOP_PLUS},
689   {"Osubtract", "\"-\"", UNOP_NEG},
690   {NULL, NULL}
691 };
692 
693 /* Return non-zero if STR should be suppressed in info listings.  */
694 
695 static int
is_suppressed_name(const char * str)696 is_suppressed_name (const char *str)
697 {
698   if (strncmp (str, "_ada_", 5) == 0)
699     str += 5;
700   if (str[0] == '_' || str[0] == '\000')
701     return 1;
702   else
703     {
704       const char *p;
705       const char *suffix = strstr (str, "___");
706       if (suffix != NULL && suffix[3] != 'X')
707         return 1;
708       if (suffix == NULL)
709         suffix = str + strlen (str);
710       for (p = suffix - 1; p != str; p -= 1)
711         if (isupper (*p))
712           {
713             int i;
714             if (p[0] == 'X' && p[-1] != '_')
715               goto OK;
716             if (*p != 'O')
717               return 1;
718             for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
719               if (strncmp (ada_opname_table[i].encoded, p,
720                            strlen (ada_opname_table[i].encoded)) == 0)
721                 goto OK;
722             return 1;
723           OK:;
724           }
725       return 0;
726     }
727 }
728 
729 /* The "encoded" form of DECODED, according to GNAT conventions.
730    The result is valid until the next call to ada_encode.  */
731 
732 char *
ada_encode(const char * decoded)733 ada_encode (const char *decoded)
734 {
735   static char *encoding_buffer = NULL;
736   static size_t encoding_buffer_size = 0;
737   const char *p;
738   int k;
739 
740   if (decoded == NULL)
741     return NULL;
742 
743   GROW_VECT (encoding_buffer, encoding_buffer_size,
744              2 * strlen (decoded) + 10);
745 
746   k = 0;
747   for (p = decoded; *p != '\0'; p += 1)
748     {
749       if (!ADA_RETAIN_DOTS && *p == '.')
750         {
751           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
752           k += 2;
753         }
754       else if (*p == '"')
755         {
756           const struct ada_opname_map *mapping;
757 
758           for (mapping = ada_opname_table;
759                mapping->encoded != NULL
760                && strncmp (mapping->decoded, p,
761                            strlen (mapping->decoded)) != 0; mapping += 1)
762             ;
763           if (mapping->encoded == NULL)
764             error ("invalid Ada operator name: %s", p);
765           strcpy (encoding_buffer + k, mapping->encoded);
766           k += strlen (mapping->encoded);
767           break;
768         }
769       else
770         {
771           encoding_buffer[k] = *p;
772           k += 1;
773         }
774     }
775 
776   encoding_buffer[k] = '\0';
777   return encoding_buffer;
778 }
779 
780 /* Return NAME folded to lower case, or, if surrounded by single
781    quotes, unfolded, but with the quotes stripped away.  Result good
782    to next call.  */
783 
784 char *
ada_fold_name(const char * name)785 ada_fold_name (const char *name)
786 {
787   static char *fold_buffer = NULL;
788   static size_t fold_buffer_size = 0;
789 
790   int len = strlen (name);
791   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
792 
793   if (name[0] == '\'')
794     {
795       strncpy (fold_buffer, name + 1, len - 2);
796       fold_buffer[len - 2] = '\000';
797     }
798   else
799     {
800       int i;
801       for (i = 0; i <= len; i += 1)
802         fold_buffer[i] = tolower (name[i]);
803     }
804 
805   return fold_buffer;
806 }
807 
808 /* decode:
809      0. Discard trailing .{DIGIT}+ or trailing ___{DIGIT}+
810         These are suffixes introduced by GNAT5 to nested subprogram
811         names, and do not serve any purpose for the debugger.
812      1. Discard final __{DIGIT}+ or $({DIGIT}+(__{DIGIT}+)*)
813      2. Convert other instances of embedded "__" to `.'.
814      3. Discard leading _ada_.
815      4. Convert operator names to the appropriate quoted symbols.
816      5. Remove everything after first ___ if it is followed by
817         'X'.
818      6. Replace TK__ with __, and a trailing B or TKB with nothing.
819      7. Put symbols that should be suppressed in <...> brackets.
820      8. Remove trailing X[bn]* suffix (indicating names in package bodies).
821 
822    The resulting string is valid until the next call of ada_decode.
823    If the string is unchanged by demangling, the original string pointer
824    is returned.  */
825 
826 const char *
ada_decode(const char * encoded)827 ada_decode (const char *encoded)
828 {
829   int i, j;
830   int len0;
831   const char *p;
832   char *decoded;
833   int at_start_name;
834   static char *decoding_buffer = NULL;
835   static size_t decoding_buffer_size = 0;
836 
837   if (strncmp (encoded, "_ada_", 5) == 0)
838     encoded += 5;
839 
840   if (encoded[0] == '_' || encoded[0] == '<')
841     goto Suppress;
842 
843   /* Remove trailing .{DIGIT}+ or ___{DIGIT}+.  */
844   len0 = strlen (encoded);
845   if (len0 > 1 && isdigit (encoded[len0 - 1]))
846     {
847       i = len0 - 2;
848       while (i > 0 && isdigit (encoded[i]))
849         i--;
850       if (i >= 0 && encoded[i] == '.')
851         len0 = i;
852       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
853         len0 = i - 2;
854     }
855 
856   /* Remove the ___X.* suffix if present.  Do not forget to verify that
857      the suffix is located before the current "end" of ENCODED.  We want
858      to avoid re-matching parts of ENCODED that have previously been
859      marked as discarded (by decrementing LEN0).  */
860   p = strstr (encoded, "___");
861   if (p != NULL && p - encoded < len0 - 3)
862     {
863       if (p[3] == 'X')
864         len0 = p - encoded;
865       else
866         goto Suppress;
867     }
868 
869   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
870     len0 -= 3;
871 
872   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
873     len0 -= 1;
874 
875   /* Make decoded big enough for possible expansion by operator name.  */
876   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
877   decoded = decoding_buffer;
878 
879   if (len0 > 1 && isdigit (encoded[len0 - 1]))
880     {
881       i = len0 - 2;
882       while ((i >= 0 && isdigit (encoded[i]))
883              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
884         i -= 1;
885       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
886         len0 = i - 1;
887       else if (encoded[i] == '$')
888         len0 = i;
889     }
890 
891   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
892     decoded[j] = encoded[i];
893 
894   at_start_name = 1;
895   while (i < len0)
896     {
897       if (at_start_name && encoded[i] == 'O')
898         {
899           int k;
900           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
901             {
902               int op_len = strlen (ada_opname_table[k].encoded);
903               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
904                             op_len - 1) == 0)
905                   && !isalnum (encoded[i + op_len]))
906                 {
907                   strcpy (decoded + j, ada_opname_table[k].decoded);
908                   at_start_name = 0;
909                   i += op_len;
910                   j += strlen (ada_opname_table[k].decoded);
911                   break;
912                 }
913             }
914           if (ada_opname_table[k].encoded != NULL)
915             continue;
916         }
917       at_start_name = 0;
918 
919       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
920         i += 2;
921       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
922         {
923           do
924             i += 1;
925           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
926           if (i < len0)
927             goto Suppress;
928         }
929       else if (!ADA_RETAIN_DOTS
930                && i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
931         {
932           decoded[j] = '.';
933           at_start_name = 1;
934           i += 2;
935           j += 1;
936         }
937       else
938         {
939           decoded[j] = encoded[i];
940           i += 1;
941           j += 1;
942         }
943     }
944   decoded[j] = '\000';
945 
946   for (i = 0; decoded[i] != '\0'; i += 1)
947     if (isupper (decoded[i]) || decoded[i] == ' ')
948       goto Suppress;
949 
950   if (strcmp (decoded, encoded) == 0)
951     return encoded;
952   else
953     return decoded;
954 
955 Suppress:
956   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
957   decoded = decoding_buffer;
958   if (encoded[0] == '<')
959     strcpy (decoded, encoded);
960   else
961     sprintf (decoded, "<%s>", encoded);
962   return decoded;
963 
964 }
965 
966 /* Table for keeping permanent unique copies of decoded names.  Once
967    allocated, names in this table are never released.  While this is a
968    storage leak, it should not be significant unless there are massive
969    changes in the set of decoded names in successive versions of a
970    symbol table loaded during a single session.  */
971 static struct htab *decoded_names_store;
972 
973 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
974    in the language-specific part of GSYMBOL, if it has not been
975    previously computed.  Tries to save the decoded name in the same
976    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
977    in any case, the decoded symbol has a lifetime at least that of
978    GSYMBOL).
979    The GSYMBOL parameter is "mutable" in the C++ sense: logically
980    const, but nevertheless modified to a semantically equivalent form
981    when a decoded name is cached in it.
982 */
983 
984 char *
ada_decode_symbol(const struct general_symbol_info * gsymbol)985 ada_decode_symbol (const struct general_symbol_info *gsymbol)
986 {
987   char **resultp =
988     (char **) &gsymbol->language_specific.cplus_specific.demangled_name;
989   if (*resultp == NULL)
990     {
991       const char *decoded = ada_decode (gsymbol->name);
992       if (gsymbol->bfd_section != NULL)
993         {
994           bfd *obfd = gsymbol->bfd_section->owner;
995           if (obfd != NULL)
996             {
997               struct objfile *objf;
998               ALL_OBJFILES (objf)
999               {
1000                 if (obfd == objf->obfd)
1001                   {
1002                     *resultp = obsavestring (decoded, strlen (decoded),
1003                                              &objf->objfile_obstack);
1004                     break;
1005                   }
1006               }
1007             }
1008         }
1009       /* Sometimes, we can't find a corresponding objfile, in which
1010          case, we put the result on the heap.  Since we only decode
1011          when needed, we hope this usually does not cause a
1012          significant memory leak (FIXME).  */
1013       if (*resultp == NULL)
1014         {
1015           char **slot = (char **) htab_find_slot (decoded_names_store,
1016                                                   decoded, INSERT);
1017           if (*slot == NULL)
1018             *slot = xstrdup (decoded);
1019           *resultp = *slot;
1020         }
1021     }
1022 
1023   return *resultp;
1024 }
1025 
1026 char *
ada_la_decode(const char * encoded,int options)1027 ada_la_decode (const char *encoded, int options)
1028 {
1029   return xstrdup (ada_decode (encoded));
1030 }
1031 
1032 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1033    suffixes that encode debugging information or leading _ada_ on
1034    SYM_NAME (see is_name_suffix commentary for the debugging
1035    information that is ignored).  If WILD, then NAME need only match a
1036    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1037    either argument is NULL.  */
1038 
1039 int
ada_match_name(const char * sym_name,const char * name,int wild)1040 ada_match_name (const char *sym_name, const char *name, int wild)
1041 {
1042   if (sym_name == NULL || name == NULL)
1043     return 0;
1044   else if (wild)
1045     return wild_match (name, strlen (name), sym_name);
1046   else
1047     {
1048       int len_name = strlen (name);
1049       return (strncmp (sym_name, name, len_name) == 0
1050               && is_name_suffix (sym_name + len_name))
1051         || (strncmp (sym_name, "_ada_", 5) == 0
1052             && strncmp (sym_name + 5, name, len_name) == 0
1053             && is_name_suffix (sym_name + len_name + 5));
1054     }
1055 }
1056 
1057 /* True (non-zero) iff, in Ada mode, the symbol SYM should be
1058    suppressed in info listings.  */
1059 
1060 int
ada_suppress_symbol_printing(struct symbol * sym)1061 ada_suppress_symbol_printing (struct symbol *sym)
1062 {
1063   if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN)
1064     return 1;
1065   else
1066     return is_suppressed_name (SYMBOL_LINKAGE_NAME (sym));
1067 }
1068 
1069 
1070                                 /* Arrays */
1071 
1072 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1073 
1074 static char *bound_name[] = {
1075   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1076   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1077 };
1078 
1079 /* Maximum number of array dimensions we are prepared to handle.  */
1080 
1081 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1082 
1083 /* Like modify_field, but allows bitpos > wordlength.  */
1084 
1085 static void
modify_general_field(char * addr,LONGEST fieldval,int bitpos,int bitsize)1086 modify_general_field (char *addr, LONGEST fieldval, int bitpos, int bitsize)
1087 {
1088   modify_field (addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
1089 }
1090 
1091 
1092 /* The desc_* routines return primitive portions of array descriptors
1093    (fat pointers).  */
1094 
1095 /* The descriptor or array type, if any, indicated by TYPE; removes
1096    level of indirection, if needed.  */
1097 
1098 static struct type *
desc_base_type(struct type * type)1099 desc_base_type (struct type *type)
1100 {
1101   if (type == NULL)
1102     return NULL;
1103   type = ada_check_typedef (type);
1104   if (type != NULL
1105       && (TYPE_CODE (type) == TYPE_CODE_PTR
1106           || TYPE_CODE (type) == TYPE_CODE_REF))
1107     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1108   else
1109     return type;
1110 }
1111 
1112 /* True iff TYPE indicates a "thin" array pointer type.  */
1113 
1114 static int
is_thin_pntr(struct type * type)1115 is_thin_pntr (struct type *type)
1116 {
1117   return
1118     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1119     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1120 }
1121 
1122 /* The descriptor type for thin pointer type TYPE.  */
1123 
1124 static struct type *
thin_descriptor_type(struct type * type)1125 thin_descriptor_type (struct type *type)
1126 {
1127   struct type *base_type = desc_base_type (type);
1128   if (base_type == NULL)
1129     return NULL;
1130   if (is_suffix (ada_type_name (base_type), "___XVE"))
1131     return base_type;
1132   else
1133     {
1134       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1135       if (alt_type == NULL)
1136         return base_type;
1137       else
1138         return alt_type;
1139     }
1140 }
1141 
1142 /* A pointer to the array data for thin-pointer value VAL.  */
1143 
1144 static struct value *
thin_data_pntr(struct value * val)1145 thin_data_pntr (struct value *val)
1146 {
1147   struct type *type = VALUE_TYPE (val);
1148   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1149     return value_cast (desc_data_type (thin_descriptor_type (type)),
1150                        value_copy (val));
1151   else
1152     return value_from_longest (desc_data_type (thin_descriptor_type (type)),
1153                                VALUE_ADDRESS (val) + VALUE_OFFSET (val));
1154 }
1155 
1156 /* True iff TYPE indicates a "thick" array pointer type.  */
1157 
1158 static int
is_thick_pntr(struct type * type)1159 is_thick_pntr (struct type *type)
1160 {
1161   type = desc_base_type (type);
1162   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1163           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1164 }
1165 
1166 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1167    pointer to one, the type of its bounds data; otherwise, NULL.  */
1168 
1169 static struct type *
desc_bounds_type(struct type * type)1170 desc_bounds_type (struct type *type)
1171 {
1172   struct type *r;
1173 
1174   type = desc_base_type (type);
1175 
1176   if (type == NULL)
1177     return NULL;
1178   else if (is_thin_pntr (type))
1179     {
1180       type = thin_descriptor_type (type);
1181       if (type == NULL)
1182         return NULL;
1183       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1184       if (r != NULL)
1185         return ada_check_typedef (r);
1186     }
1187   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1188     {
1189       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1190       if (r != NULL)
1191         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1192     }
1193   return NULL;
1194 }
1195 
1196 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1197    one, a pointer to its bounds data.   Otherwise NULL.  */
1198 
1199 static struct value *
desc_bounds(struct value * arr)1200 desc_bounds (struct value *arr)
1201 {
1202   struct type *type = ada_check_typedef (VALUE_TYPE (arr));
1203   if (is_thin_pntr (type))
1204     {
1205       struct type *bounds_type =
1206         desc_bounds_type (thin_descriptor_type (type));
1207       LONGEST addr;
1208 
1209       if (desc_bounds_type == NULL)
1210         error ("Bad GNAT array descriptor");
1211 
1212       /* NOTE: The following calculation is not really kosher, but
1213          since desc_type is an XVE-encoded type (and shouldn't be),
1214          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1215       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1216         addr = value_as_long (arr);
1217       else
1218         addr = VALUE_ADDRESS (arr) + VALUE_OFFSET (arr);
1219 
1220       return
1221         value_from_longest (lookup_pointer_type (bounds_type),
1222                             addr - TYPE_LENGTH (bounds_type));
1223     }
1224 
1225   else if (is_thick_pntr (type))
1226     return value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1227                              "Bad GNAT array descriptor");
1228   else
1229     return NULL;
1230 }
1231 
1232 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1233    position of the field containing the address of the bounds data.  */
1234 
1235 static int
fat_pntr_bounds_bitpos(struct type * type)1236 fat_pntr_bounds_bitpos (struct type *type)
1237 {
1238   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1239 }
1240 
1241 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1242    size of the field containing the address of the bounds data.  */
1243 
1244 static int
fat_pntr_bounds_bitsize(struct type * type)1245 fat_pntr_bounds_bitsize (struct type *type)
1246 {
1247   type = desc_base_type (type);
1248 
1249   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1250     return TYPE_FIELD_BITSIZE (type, 1);
1251   else
1252     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1253 }
1254 
1255 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1256    pointer to one, the type of its array data (a
1257    pointer-to-array-with-no-bounds type); otherwise, NULL.  Use
1258    ada_type_of_array to get an array type with bounds data.  */
1259 
1260 static struct type *
desc_data_type(struct type * type)1261 desc_data_type (struct type *type)
1262 {
1263   type = desc_base_type (type);
1264 
1265   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1266   if (is_thin_pntr (type))
1267     return lookup_pointer_type
1268       (desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1)));
1269   else if (is_thick_pntr (type))
1270     return lookup_struct_elt_type (type, "P_ARRAY", 1);
1271   else
1272     return NULL;
1273 }
1274 
1275 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1276    its array data.  */
1277 
1278 static struct value *
desc_data(struct value * arr)1279 desc_data (struct value *arr)
1280 {
1281   struct type *type = VALUE_TYPE (arr);
1282   if (is_thin_pntr (type))
1283     return thin_data_pntr (arr);
1284   else if (is_thick_pntr (type))
1285     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1286                              "Bad GNAT array descriptor");
1287   else
1288     return NULL;
1289 }
1290 
1291 
1292 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1293    position of the field containing the address of the data.  */
1294 
1295 static int
fat_pntr_data_bitpos(struct type * type)1296 fat_pntr_data_bitpos (struct type *type)
1297 {
1298   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1299 }
1300 
1301 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1302    size of the field containing the address of the data.  */
1303 
1304 static int
fat_pntr_data_bitsize(struct type * type)1305 fat_pntr_data_bitsize (struct type *type)
1306 {
1307   type = desc_base_type (type);
1308 
1309   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1310     return TYPE_FIELD_BITSIZE (type, 0);
1311   else
1312     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1313 }
1314 
1315 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1316    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1317    bound, if WHICH is 1.  The first bound is I=1.  */
1318 
1319 static struct value *
desc_one_bound(struct value * bounds,int i,int which)1320 desc_one_bound (struct value *bounds, int i, int which)
1321 {
1322   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1323                            "Bad GNAT array descriptor bounds");
1324 }
1325 
1326 /* If BOUNDS is an array-bounds structure type, return the bit position
1327    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1328    bound, if WHICH is 1.  The first bound is I=1.  */
1329 
1330 static int
desc_bound_bitpos(struct type * type,int i,int which)1331 desc_bound_bitpos (struct type *type, int i, int which)
1332 {
1333   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1334 }
1335 
1336 /* If BOUNDS is an array-bounds structure type, return the bit field size
1337    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1338    bound, if WHICH is 1.  The first bound is I=1.  */
1339 
1340 static int
desc_bound_bitsize(struct type * type,int i,int which)1341 desc_bound_bitsize (struct type *type, int i, int which)
1342 {
1343   type = desc_base_type (type);
1344 
1345   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1346     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1347   else
1348     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1349 }
1350 
1351 /* If TYPE is the type of an array-bounds structure, the type of its
1352    Ith bound (numbering from 1).  Otherwise, NULL.  */
1353 
1354 static struct type *
desc_index_type(struct type * type,int i)1355 desc_index_type (struct type *type, int i)
1356 {
1357   type = desc_base_type (type);
1358 
1359   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1360     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1361   else
1362     return NULL;
1363 }
1364 
1365 /* The number of index positions in the array-bounds type TYPE.
1366    Return 0 if TYPE is NULL.  */
1367 
1368 static int
desc_arity(struct type * type)1369 desc_arity (struct type *type)
1370 {
1371   type = desc_base_type (type);
1372 
1373   if (type != NULL)
1374     return TYPE_NFIELDS (type) / 2;
1375   return 0;
1376 }
1377 
1378 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1379    an array descriptor type (representing an unconstrained array
1380    type).  */
1381 
1382 static int
ada_is_direct_array_type(struct type * type)1383 ada_is_direct_array_type (struct type *type)
1384 {
1385   if (type == NULL)
1386     return 0;
1387   type = ada_check_typedef (type);
1388   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1389           || ada_is_array_descriptor_type (type));
1390 }
1391 
1392 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1393 
1394 int
ada_is_simple_array_type(struct type * type)1395 ada_is_simple_array_type (struct type *type)
1396 {
1397   if (type == NULL)
1398     return 0;
1399   type = ada_check_typedef (type);
1400   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1401           || (TYPE_CODE (type) == TYPE_CODE_PTR
1402               && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
1403 }
1404 
1405 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1406 
1407 int
ada_is_array_descriptor_type(struct type * type)1408 ada_is_array_descriptor_type (struct type *type)
1409 {
1410   struct type *data_type = desc_data_type (type);
1411 
1412   if (type == NULL)
1413     return 0;
1414   type = ada_check_typedef (type);
1415   return
1416     data_type != NULL
1417     && ((TYPE_CODE (data_type) == TYPE_CODE_PTR
1418          && TYPE_TARGET_TYPE (data_type) != NULL
1419          && TYPE_CODE (TYPE_TARGET_TYPE (data_type)) == TYPE_CODE_ARRAY)
1420         || TYPE_CODE (data_type) == TYPE_CODE_ARRAY)
1421     && desc_arity (desc_bounds_type (type)) > 0;
1422 }
1423 
1424 /* Non-zero iff type is a partially mal-formed GNAT array
1425    descriptor.  FIXME: This is to compensate for some problems with
1426    debugging output from GNAT.  Re-examine periodically to see if it
1427    is still needed.  */
1428 
1429 int
ada_is_bogus_array_descriptor(struct type * type)1430 ada_is_bogus_array_descriptor (struct type *type)
1431 {
1432   return
1433     type != NULL
1434     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1435     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1436         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1437     && !ada_is_array_descriptor_type (type);
1438 }
1439 
1440 
1441 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1442    (fat pointer) returns the type of the array data described---specifically,
1443    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1444    in from the descriptor; otherwise, they are left unspecified.  If
1445    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1446    returns NULL.  The result is simply the type of ARR if ARR is not
1447    a descriptor.  */
1448 struct type *
ada_type_of_array(struct value * arr,int bounds)1449 ada_type_of_array (struct value *arr, int bounds)
1450 {
1451   if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1452     return decode_packed_array_type (VALUE_TYPE (arr));
1453 
1454   if (!ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1455     return VALUE_TYPE (arr);
1456 
1457   if (!bounds)
1458     return
1459       ada_check_typedef (TYPE_TARGET_TYPE (desc_data_type (VALUE_TYPE (arr))));
1460   else
1461     {
1462       struct type *elt_type;
1463       int arity;
1464       struct value *descriptor;
1465       struct objfile *objf = TYPE_OBJFILE (VALUE_TYPE (arr));
1466 
1467       elt_type = ada_array_element_type (VALUE_TYPE (arr), -1);
1468       arity = ada_array_arity (VALUE_TYPE (arr));
1469 
1470       if (elt_type == NULL || arity == 0)
1471         return ada_check_typedef (VALUE_TYPE (arr));
1472 
1473       descriptor = desc_bounds (arr);
1474       if (value_as_long (descriptor) == 0)
1475         return NULL;
1476       while (arity > 0)
1477         {
1478           struct type *range_type = alloc_type (objf);
1479           struct type *array_type = alloc_type (objf);
1480           struct value *low = desc_one_bound (descriptor, arity, 0);
1481           struct value *high = desc_one_bound (descriptor, arity, 1);
1482           arity -= 1;
1483 
1484           create_range_type (range_type, VALUE_TYPE (low),
1485                              (int) value_as_long (low),
1486                              (int) value_as_long (high));
1487           elt_type = create_array_type (array_type, elt_type, range_type);
1488         }
1489 
1490       return lookup_pointer_type (elt_type);
1491     }
1492 }
1493 
1494 /* If ARR does not represent an array, returns ARR unchanged.
1495    Otherwise, returns either a standard GDB array with bounds set
1496    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1497    GDB array.  Returns NULL if ARR is a null fat pointer.  */
1498 
1499 struct value *
ada_coerce_to_simple_array_ptr(struct value * arr)1500 ada_coerce_to_simple_array_ptr (struct value *arr)
1501 {
1502   if (ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1503     {
1504       struct type *arrType = ada_type_of_array (arr, 1);
1505       if (arrType == NULL)
1506         return NULL;
1507       return value_cast (arrType, value_copy (desc_data (arr)));
1508     }
1509   else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1510     return decode_packed_array (arr);
1511   else
1512     return arr;
1513 }
1514 
1515 /* If ARR does not represent an array, returns ARR unchanged.
1516    Otherwise, returns a standard GDB array describing ARR (which may
1517    be ARR itself if it already is in the proper form).  */
1518 
1519 static struct value *
ada_coerce_to_simple_array(struct value * arr)1520 ada_coerce_to_simple_array (struct value *arr)
1521 {
1522   if (ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1523     {
1524       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1525       if (arrVal == NULL)
1526         error ("Bounds unavailable for null array pointer.");
1527       return value_ind (arrVal);
1528     }
1529   else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1530     return decode_packed_array (arr);
1531   else
1532     return arr;
1533 }
1534 
1535 /* If TYPE represents a GNAT array type, return it translated to an
1536    ordinary GDB array type (possibly with BITSIZE fields indicating
1537    packing).  For other types, is the identity.  */
1538 
1539 struct type *
ada_coerce_to_simple_array_type(struct type * type)1540 ada_coerce_to_simple_array_type (struct type *type)
1541 {
1542   struct value *mark = value_mark ();
1543   struct value *dummy = value_from_longest (builtin_type_long, 0);
1544   struct type *result;
1545   VALUE_TYPE (dummy) = type;
1546   result = ada_type_of_array (dummy, 0);
1547   value_free_to_mark (mark);
1548   return result;
1549 }
1550 
1551 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
1552 
1553 int
ada_is_packed_array_type(struct type * type)1554 ada_is_packed_array_type (struct type *type)
1555 {
1556   if (type == NULL)
1557     return 0;
1558   type = desc_base_type (type);
1559   type = ada_check_typedef (type);
1560   return
1561     ada_type_name (type) != NULL
1562     && strstr (ada_type_name (type), "___XP") != NULL;
1563 }
1564 
1565 /* Given that TYPE is a standard GDB array type with all bounds filled
1566    in, and that the element size of its ultimate scalar constituents
1567    (that is, either its elements, or, if it is an array of arrays, its
1568    elements' elements, etc.) is *ELT_BITS, return an identical type,
1569    but with the bit sizes of its elements (and those of any
1570    constituent arrays) recorded in the BITSIZE components of its
1571    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1572    in bits.  */
1573 
1574 static struct type *
packed_array_type(struct type * type,long * elt_bits)1575 packed_array_type (struct type *type, long *elt_bits)
1576 {
1577   struct type *new_elt_type;
1578   struct type *new_type;
1579   LONGEST low_bound, high_bound;
1580 
1581   type = ada_check_typedef (type);
1582   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1583     return type;
1584 
1585   new_type = alloc_type (TYPE_OBJFILE (type));
1586   new_elt_type = packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
1587                                     elt_bits);
1588   create_array_type (new_type, new_elt_type, TYPE_FIELD_TYPE (type, 0));
1589   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
1590   TYPE_NAME (new_type) = ada_type_name (type);
1591 
1592   if (get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
1593                            &low_bound, &high_bound) < 0)
1594     low_bound = high_bound = 0;
1595   if (high_bound < low_bound)
1596     *elt_bits = TYPE_LENGTH (new_type) = 0;
1597   else
1598     {
1599       *elt_bits *= (high_bound - low_bound + 1);
1600       TYPE_LENGTH (new_type) =
1601         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1602     }
1603 
1604   TYPE_FLAGS (new_type) |= TYPE_FLAG_FIXED_INSTANCE;
1605   return new_type;
1606 }
1607 
1608 /* The array type encoded by TYPE, where ada_is_packed_array_type (TYPE).  */
1609 
1610 static struct type *
decode_packed_array_type(struct type * type)1611 decode_packed_array_type (struct type *type)
1612 {
1613   struct symbol *sym;
1614   struct block **blocks;
1615   const char *raw_name = ada_type_name (ada_check_typedef (type));
1616   char *name = (char *) alloca (strlen (raw_name) + 1);
1617   char *tail = strstr (raw_name, "___XP");
1618   struct type *shadow_type;
1619   long bits;
1620   int i, n;
1621 
1622   type = desc_base_type (type);
1623 
1624   memcpy (name, raw_name, tail - raw_name);
1625   name[tail - raw_name] = '\000';
1626 
1627   sym = standard_lookup (name, get_selected_block (0), VAR_DOMAIN);
1628   if (sym == NULL || SYMBOL_TYPE (sym) == NULL)
1629     {
1630       lim_warning ("could not find bounds information on packed array");
1631       return NULL;
1632     }
1633   shadow_type = SYMBOL_TYPE (sym);
1634 
1635   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
1636     {
1637       lim_warning ("could not understand bounds information on packed array");
1638       return NULL;
1639     }
1640 
1641   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1642     {
1643       lim_warning
1644 	("could not understand bit size information on packed array");
1645       return NULL;
1646     }
1647 
1648   return packed_array_type (shadow_type, &bits);
1649 }
1650 
1651 /* Given that ARR is a struct value *indicating a GNAT packed array,
1652    returns a simple array that denotes that array.  Its type is a
1653    standard GDB array type except that the BITSIZEs of the array
1654    target types are set to the number of bits in each element, and the
1655    type length is set appropriately.  */
1656 
1657 static struct value *
decode_packed_array(struct value * arr)1658 decode_packed_array (struct value *arr)
1659 {
1660   struct type *type;
1661 
1662   arr = ada_coerce_ref (arr);
1663   if (TYPE_CODE (VALUE_TYPE (arr)) == TYPE_CODE_PTR)
1664     arr = ada_value_ind (arr);
1665 
1666   type = decode_packed_array_type (VALUE_TYPE (arr));
1667   if (type == NULL)
1668     {
1669       error ("can't unpack array");
1670       return NULL;
1671     }
1672 
1673   if (BITS_BIG_ENDIAN && ada_is_modular_type (VALUE_TYPE (arr)))
1674     {
1675        /* This is a (right-justified) modular type representing a packed
1676  	 array with no wrapper.  In order to interpret the value through
1677  	 the (left-justified) packed array type we just built, we must
1678  	 first left-justify it.  */
1679       int bit_size, bit_pos;
1680       ULONGEST mod;
1681 
1682       mod = ada_modulus (VALUE_TYPE (arr)) - 1;
1683       bit_size = 0;
1684       while (mod > 0)
1685 	{
1686 	  bit_size += 1;
1687 	  mod >>= 1;
1688 	}
1689       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (VALUE_TYPE (arr)) - bit_size;
1690       arr = ada_value_primitive_packed_val (arr, NULL,
1691 					    bit_pos / HOST_CHAR_BIT,
1692 					    bit_pos % HOST_CHAR_BIT,
1693 					    bit_size,
1694 					    type);
1695     }
1696 
1697   return coerce_unspec_val_to_type (arr, type);
1698 }
1699 
1700 
1701 /* The value of the element of packed array ARR at the ARITY indices
1702    given in IND.   ARR must be a simple array.  */
1703 
1704 static struct value *
value_subscript_packed(struct value * arr,int arity,struct value ** ind)1705 value_subscript_packed (struct value *arr, int arity, struct value **ind)
1706 {
1707   int i;
1708   int bits, elt_off, bit_off;
1709   long elt_total_bit_offset;
1710   struct type *elt_type;
1711   struct value *v;
1712 
1713   bits = 0;
1714   elt_total_bit_offset = 0;
1715   elt_type = ada_check_typedef (VALUE_TYPE (arr));
1716   for (i = 0; i < arity; i += 1)
1717     {
1718       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
1719           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
1720         error
1721           ("attempt to do packed indexing of something other than a packed array");
1722       else
1723         {
1724           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
1725           LONGEST lowerbound, upperbound;
1726           LONGEST idx;
1727 
1728           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
1729             {
1730               lim_warning ("don't know bounds of array");
1731               lowerbound = upperbound = 0;
1732             }
1733 
1734           idx = value_as_long (value_pos_atr (ind[i]));
1735           if (idx < lowerbound || idx > upperbound)
1736             lim_warning ("packed array index %ld out of bounds", (long) idx);
1737           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
1738           elt_total_bit_offset += (idx - lowerbound) * bits;
1739           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
1740         }
1741     }
1742   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
1743   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
1744 
1745   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
1746                                       bits, elt_type);
1747   if (VALUE_LVAL (arr) == lval_internalvar)
1748     VALUE_LVAL (v) = lval_internalvar_component;
1749   else
1750     VALUE_LVAL (v) = VALUE_LVAL (arr);
1751   return v;
1752 }
1753 
1754 /* Non-zero iff TYPE includes negative integer values.  */
1755 
1756 static int
has_negatives(struct type * type)1757 has_negatives (struct type *type)
1758 {
1759   switch (TYPE_CODE (type))
1760     {
1761     default:
1762       return 0;
1763     case TYPE_CODE_INT:
1764       return !TYPE_UNSIGNED (type);
1765     case TYPE_CODE_RANGE:
1766       return TYPE_LOW_BOUND (type) < 0;
1767     }
1768 }
1769 
1770 
1771 /* Create a new value of type TYPE from the contents of OBJ starting
1772    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
1773    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
1774    assigning through the result will set the field fetched from.
1775    VALADDR is ignored unless OBJ is NULL, in which case,
1776    VALADDR+OFFSET must address the start of storage containing the
1777    packed value.  The value returned  in this case is never an lval.
1778    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
1779 
1780 struct value *
ada_value_primitive_packed_val(struct value * obj,char * valaddr,long offset,int bit_offset,int bit_size,struct type * type)1781 ada_value_primitive_packed_val (struct value *obj, char *valaddr, long offset,
1782                                 int bit_offset, int bit_size,
1783                                 struct type *type)
1784 {
1785   struct value *v;
1786   int src,                      /* Index into the source area */
1787     targ,                       /* Index into the target area */
1788     srcBitsLeft,                /* Number of source bits left to move */
1789     nsrc, ntarg,                /* Number of source and target bytes */
1790     unusedLS,                   /* Number of bits in next significant
1791                                    byte of source that are unused */
1792     accumSize;                  /* Number of meaningful bits in accum */
1793   unsigned char *bytes;         /* First byte containing data to unpack */
1794   unsigned char *unpacked;
1795   unsigned long accum;          /* Staging area for bits being transferred */
1796   unsigned char sign;
1797   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
1798   /* Transmit bytes from least to most significant; delta is the direction
1799      the indices move.  */
1800   int delta = BITS_BIG_ENDIAN ? -1 : 1;
1801 
1802   type = ada_check_typedef (type);
1803 
1804   if (obj == NULL)
1805     {
1806       v = allocate_value (type);
1807       bytes = (unsigned char *) (valaddr + offset);
1808     }
1809   else if (VALUE_LAZY (obj))
1810     {
1811       v = value_at (type,
1812                     VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset, NULL);
1813       bytes = (unsigned char *) alloca (len);
1814       read_memory (VALUE_ADDRESS (v), bytes, len);
1815     }
1816   else
1817     {
1818       v = allocate_value (type);
1819       bytes = (unsigned char *) VALUE_CONTENTS (obj) + offset;
1820     }
1821 
1822   if (obj != NULL)
1823     {
1824       VALUE_LVAL (v) = VALUE_LVAL (obj);
1825       if (VALUE_LVAL (obj) == lval_internalvar)
1826         VALUE_LVAL (v) = lval_internalvar_component;
1827       VALUE_ADDRESS (v) = VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset;
1828       VALUE_BITPOS (v) = bit_offset + VALUE_BITPOS (obj);
1829       VALUE_BITSIZE (v) = bit_size;
1830       if (VALUE_BITPOS (v) >= HOST_CHAR_BIT)
1831         {
1832           VALUE_ADDRESS (v) += 1;
1833           VALUE_BITPOS (v) -= HOST_CHAR_BIT;
1834         }
1835     }
1836   else
1837     VALUE_BITSIZE (v) = bit_size;
1838   unpacked = (unsigned char *) VALUE_CONTENTS (v);
1839 
1840   srcBitsLeft = bit_size;
1841   nsrc = len;
1842   ntarg = TYPE_LENGTH (type);
1843   sign = 0;
1844   if (bit_size == 0)
1845     {
1846       memset (unpacked, 0, TYPE_LENGTH (type));
1847       return v;
1848     }
1849   else if (BITS_BIG_ENDIAN)
1850     {
1851       src = len - 1;
1852       if (has_negatives (type)
1853           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
1854         sign = ~0;
1855 
1856       unusedLS =
1857         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
1858         % HOST_CHAR_BIT;
1859 
1860       switch (TYPE_CODE (type))
1861         {
1862         case TYPE_CODE_ARRAY:
1863         case TYPE_CODE_UNION:
1864         case TYPE_CODE_STRUCT:
1865           /* Non-scalar values must be aligned at a byte boundary...  */
1866           accumSize =
1867             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
1868           /* ... And are placed at the beginning (most-significant) bytes
1869              of the target.  */
1870           targ = src;
1871           break;
1872         default:
1873           accumSize = 0;
1874           targ = TYPE_LENGTH (type) - 1;
1875           break;
1876         }
1877     }
1878   else
1879     {
1880       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
1881 
1882       src = targ = 0;
1883       unusedLS = bit_offset;
1884       accumSize = 0;
1885 
1886       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
1887         sign = ~0;
1888     }
1889 
1890   accum = 0;
1891   while (nsrc > 0)
1892     {
1893       /* Mask for removing bits of the next source byte that are not
1894          part of the value.  */
1895       unsigned int unusedMSMask =
1896         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
1897         1;
1898       /* Sign-extend bits for this byte.  */
1899       unsigned int signMask = sign & ~unusedMSMask;
1900       accum |=
1901         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
1902       accumSize += HOST_CHAR_BIT - unusedLS;
1903       if (accumSize >= HOST_CHAR_BIT)
1904         {
1905           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1906           accumSize -= HOST_CHAR_BIT;
1907           accum >>= HOST_CHAR_BIT;
1908           ntarg -= 1;
1909           targ += delta;
1910         }
1911       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
1912       unusedLS = 0;
1913       nsrc -= 1;
1914       src += delta;
1915     }
1916   while (ntarg > 0)
1917     {
1918       accum |= sign << accumSize;
1919       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1920       accumSize -= HOST_CHAR_BIT;
1921       accum >>= HOST_CHAR_BIT;
1922       ntarg -= 1;
1923       targ += delta;
1924     }
1925 
1926   return v;
1927 }
1928 
1929 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
1930    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
1931    not overlap.  */
1932 static void
move_bits(char * target,int targ_offset,char * source,int src_offset,int n)1933 move_bits (char *target, int targ_offset, char *source, int src_offset, int n)
1934 {
1935   unsigned int accum, mask;
1936   int accum_bits, chunk_size;
1937 
1938   target += targ_offset / HOST_CHAR_BIT;
1939   targ_offset %= HOST_CHAR_BIT;
1940   source += src_offset / HOST_CHAR_BIT;
1941   src_offset %= HOST_CHAR_BIT;
1942   if (BITS_BIG_ENDIAN)
1943     {
1944       accum = (unsigned char) *source;
1945       source += 1;
1946       accum_bits = HOST_CHAR_BIT - src_offset;
1947 
1948       while (n > 0)
1949         {
1950           int unused_right;
1951           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
1952           accum_bits += HOST_CHAR_BIT;
1953           source += 1;
1954           chunk_size = HOST_CHAR_BIT - targ_offset;
1955           if (chunk_size > n)
1956             chunk_size = n;
1957           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
1958           mask = ((1 << chunk_size) - 1) << unused_right;
1959           *target =
1960             (*target & ~mask)
1961             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
1962           n -= chunk_size;
1963           accum_bits -= chunk_size;
1964           target += 1;
1965           targ_offset = 0;
1966         }
1967     }
1968   else
1969     {
1970       accum = (unsigned char) *source >> src_offset;
1971       source += 1;
1972       accum_bits = HOST_CHAR_BIT - src_offset;
1973 
1974       while (n > 0)
1975         {
1976           accum = accum + ((unsigned char) *source << accum_bits);
1977           accum_bits += HOST_CHAR_BIT;
1978           source += 1;
1979           chunk_size = HOST_CHAR_BIT - targ_offset;
1980           if (chunk_size > n)
1981             chunk_size = n;
1982           mask = ((1 << chunk_size) - 1) << targ_offset;
1983           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
1984           n -= chunk_size;
1985           accum_bits -= chunk_size;
1986           accum >>= chunk_size;
1987           target += 1;
1988           targ_offset = 0;
1989         }
1990     }
1991 }
1992 
1993 
1994 /* Store the contents of FROMVAL into the location of TOVAL.
1995    Return a new value with the location of TOVAL and contents of
1996    FROMVAL.   Handles assignment into packed fields that have
1997    floating-point or non-scalar types.  */
1998 
1999 static struct value *
ada_value_assign(struct value * toval,struct value * fromval)2000 ada_value_assign (struct value *toval, struct value *fromval)
2001 {
2002   struct type *type = VALUE_TYPE (toval);
2003   int bits = VALUE_BITSIZE (toval);
2004 
2005   if (!toval->modifiable)
2006     error ("Left operand of assignment is not a modifiable lvalue.");
2007 
2008   COERCE_REF (toval);
2009 
2010   if (VALUE_LVAL (toval) == lval_memory
2011       && bits > 0
2012       && (TYPE_CODE (type) == TYPE_CODE_FLT
2013           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2014     {
2015       int len =
2016         (VALUE_BITPOS (toval) + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2017       char *buffer = (char *) alloca (len);
2018       struct value *val;
2019 
2020       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2021         fromval = value_cast (type, fromval);
2022 
2023       read_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer, len);
2024       if (BITS_BIG_ENDIAN)
2025         move_bits (buffer, VALUE_BITPOS (toval),
2026                    VALUE_CONTENTS (fromval),
2027                    TYPE_LENGTH (VALUE_TYPE (fromval)) * TARGET_CHAR_BIT -
2028                    bits, bits);
2029       else
2030         move_bits (buffer, VALUE_BITPOS (toval), VALUE_CONTENTS (fromval),
2031                    0, bits);
2032       write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer,
2033                     len);
2034 
2035       val = value_copy (toval);
2036       memcpy (VALUE_CONTENTS_RAW (val), VALUE_CONTENTS (fromval),
2037               TYPE_LENGTH (type));
2038       VALUE_TYPE (val) = type;
2039 
2040       return val;
2041     }
2042 
2043   return value_assign (toval, fromval);
2044 }
2045 
2046 
2047 /* The value of the element of array ARR at the ARITY indices given in IND.
2048    ARR may be either a simple array, GNAT array descriptor, or pointer
2049    thereto.  */
2050 
2051 struct value *
ada_value_subscript(struct value * arr,int arity,struct value ** ind)2052 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2053 {
2054   int k;
2055   struct value *elt;
2056   struct type *elt_type;
2057 
2058   elt = ada_coerce_to_simple_array (arr);
2059 
2060   elt_type = ada_check_typedef (VALUE_TYPE (elt));
2061   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2062       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2063     return value_subscript_packed (elt, arity, ind);
2064 
2065   for (k = 0; k < arity; k += 1)
2066     {
2067       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2068         error ("too many subscripts (%d expected)", k);
2069       elt = value_subscript (elt, value_pos_atr (ind[k]));
2070     }
2071   return elt;
2072 }
2073 
2074 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2075    value of the element of *ARR at the ARITY indices given in
2076    IND.  Does not read the entire array into memory.  */
2077 
2078 struct value *
ada_value_ptr_subscript(struct value * arr,struct type * type,int arity,struct value ** ind)2079 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2080                          struct value **ind)
2081 {
2082   int k;
2083 
2084   for (k = 0; k < arity; k += 1)
2085     {
2086       LONGEST lwb, upb;
2087       struct value *idx;
2088 
2089       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2090         error ("too many subscripts (%d expected)", k);
2091       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2092                         value_copy (arr));
2093       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2094       idx = value_pos_atr (ind[k]);
2095       if (lwb != 0)
2096         idx = value_sub (idx, value_from_longest (builtin_type_int, lwb));
2097       arr = value_add (arr, idx);
2098       type = TYPE_TARGET_TYPE (type);
2099     }
2100 
2101   return value_ind (arr);
2102 }
2103 
2104 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2105    actual type of ARRAY_PTR is ignored), returns a reference to
2106    the Ada slice of HIGH-LOW+1 elements starting at index LOW.  The lower
2107    bound of this array is LOW, as per Ada rules. */
2108 static struct value *
ada_value_slice_ptr(struct value * array_ptr,struct type * type,int low,int high)2109 ada_value_slice_ptr (struct value *array_ptr, struct type *type,
2110                      int low, int high)
2111 {
2112   CORE_ADDR base = value_as_address (array_ptr)
2113     + ((low - TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)))
2114        * TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
2115   struct type *index_type =
2116     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
2117                        low, high);
2118   struct type *slice_type =
2119     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2120   return value_from_pointer (lookup_reference_type (slice_type), base);
2121 }
2122 
2123 
2124 static struct value *
ada_value_slice(struct value * array,int low,int high)2125 ada_value_slice (struct value *array, int low, int high)
2126 {
2127   struct type *type = VALUE_TYPE (array);
2128   struct type *index_type =
2129     create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2130   struct type *slice_type =
2131     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2132   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2133 }
2134 
2135 /* If type is a record type in the form of a standard GNAT array
2136    descriptor, returns the number of dimensions for type.  If arr is a
2137    simple array, returns the number of "array of"s that prefix its
2138    type designation.  Otherwise, returns 0.  */
2139 
2140 int
ada_array_arity(struct type * type)2141 ada_array_arity (struct type *type)
2142 {
2143   int arity;
2144 
2145   if (type == NULL)
2146     return 0;
2147 
2148   type = desc_base_type (type);
2149 
2150   arity = 0;
2151   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2152     return desc_arity (desc_bounds_type (type));
2153   else
2154     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2155       {
2156         arity += 1;
2157         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2158       }
2159 
2160   return arity;
2161 }
2162 
2163 /* If TYPE is a record type in the form of a standard GNAT array
2164    descriptor or a simple array type, returns the element type for
2165    TYPE after indexing by NINDICES indices, or by all indices if
2166    NINDICES is -1.  Otherwise, returns NULL.  */
2167 
2168 struct type *
ada_array_element_type(struct type * type,int nindices)2169 ada_array_element_type (struct type *type, int nindices)
2170 {
2171   type = desc_base_type (type);
2172 
2173   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2174     {
2175       int k;
2176       struct type *p_array_type;
2177 
2178       p_array_type = desc_data_type (type);
2179 
2180       k = ada_array_arity (type);
2181       if (k == 0)
2182         return NULL;
2183 
2184       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2185       if (nindices >= 0 && k > nindices)
2186         k = nindices;
2187       p_array_type = TYPE_TARGET_TYPE (p_array_type);
2188       while (k > 0 && p_array_type != NULL)
2189         {
2190           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2191           k -= 1;
2192         }
2193       return p_array_type;
2194     }
2195   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2196     {
2197       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2198         {
2199           type = TYPE_TARGET_TYPE (type);
2200           nindices -= 1;
2201         }
2202       return type;
2203     }
2204 
2205   return NULL;
2206 }
2207 
2208 /* The type of nth index in arrays of given type (n numbering from 1).
2209    Does not examine memory.  */
2210 
2211 struct type *
ada_index_type(struct type * type,int n)2212 ada_index_type (struct type *type, int n)
2213 {
2214   struct type *result_type;
2215 
2216   type = desc_base_type (type);
2217 
2218   if (n > ada_array_arity (type))
2219     return NULL;
2220 
2221   if (ada_is_simple_array_type (type))
2222     {
2223       int i;
2224 
2225       for (i = 1; i < n; i += 1)
2226         type = TYPE_TARGET_TYPE (type);
2227       result_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0));
2228       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2229          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2230          perhaps stabsread.c would make more sense.  */
2231       if (result_type == NULL || TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2232         result_type = builtin_type_int;
2233 
2234       return result_type;
2235     }
2236   else
2237     return desc_index_type (desc_bounds_type (type), n);
2238 }
2239 
2240 /* Given that arr is an array type, returns the lower bound of the
2241    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2242    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2243    array-descriptor type.  If TYPEP is non-null, *TYPEP is set to the
2244    bounds type.  It works for other arrays with bounds supplied by
2245    run-time quantities other than discriminants.  */
2246 
2247 LONGEST
ada_array_bound_from_type(struct type * arr_type,int n,int which,struct type ** typep)2248 ada_array_bound_from_type (struct type * arr_type, int n, int which,
2249                            struct type ** typep)
2250 {
2251   struct type *type;
2252   struct type *index_type_desc;
2253 
2254   if (ada_is_packed_array_type (arr_type))
2255     arr_type = decode_packed_array_type (arr_type);
2256 
2257   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2258     {
2259       if (typep != NULL)
2260         *typep = builtin_type_int;
2261       return (LONGEST) - which;
2262     }
2263 
2264   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2265     type = TYPE_TARGET_TYPE (arr_type);
2266   else
2267     type = arr_type;
2268 
2269   index_type_desc = ada_find_parallel_type (type, "___XA");
2270   if (index_type_desc == NULL)
2271     {
2272       struct type *range_type;
2273       struct type *index_type;
2274 
2275       while (n > 1)
2276         {
2277           type = TYPE_TARGET_TYPE (type);
2278           n -= 1;
2279         }
2280 
2281       range_type = TYPE_INDEX_TYPE (type);
2282       index_type = TYPE_TARGET_TYPE (range_type);
2283       if (TYPE_CODE (index_type) == TYPE_CODE_UNDEF)
2284         index_type = builtin_type_long;
2285       if (typep != NULL)
2286         *typep = index_type;
2287       return
2288         (LONGEST) (which == 0
2289                    ? TYPE_LOW_BOUND (range_type)
2290                    : TYPE_HIGH_BOUND (range_type));
2291     }
2292   else
2293     {
2294       struct type *index_type =
2295         to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2296                              NULL, TYPE_OBJFILE (arr_type));
2297       if (typep != NULL)
2298         *typep = TYPE_TARGET_TYPE (index_type);
2299       return
2300         (LONGEST) (which == 0
2301                    ? TYPE_LOW_BOUND (index_type)
2302                    : TYPE_HIGH_BOUND (index_type));
2303     }
2304 }
2305 
2306 /* Given that arr is an array value, returns the lower bound of the
2307    nth index (numbering from 1) if which is 0, and the upper bound if
2308    which is 1.  This routine will also work for arrays with bounds
2309    supplied by run-time quantities other than discriminants.  */
2310 
2311 struct value *
ada_array_bound(struct value * arr,int n,int which)2312 ada_array_bound (struct value *arr, int n, int which)
2313 {
2314   struct type *arr_type = VALUE_TYPE (arr);
2315 
2316   if (ada_is_packed_array_type (arr_type))
2317     return ada_array_bound (decode_packed_array (arr), n, which);
2318   else if (ada_is_simple_array_type (arr_type))
2319     {
2320       struct type *type;
2321       LONGEST v = ada_array_bound_from_type (arr_type, n, which, &type);
2322       return value_from_longest (type, v);
2323     }
2324   else
2325     return desc_one_bound (desc_bounds (arr), n, which);
2326 }
2327 
2328 /* Given that arr is an array value, returns the length of the
2329    nth index.  This routine will also work for arrays with bounds
2330    supplied by run-time quantities other than discriminants.
2331    Does not work for arrays indexed by enumeration types with representation
2332    clauses at the moment.  */
2333 
2334 struct value *
ada_array_length(struct value * arr,int n)2335 ada_array_length (struct value *arr, int n)
2336 {
2337   struct type *arr_type = ada_check_typedef (VALUE_TYPE (arr));
2338 
2339   if (ada_is_packed_array_type (arr_type))
2340     return ada_array_length (decode_packed_array (arr), n);
2341 
2342   if (ada_is_simple_array_type (arr_type))
2343     {
2344       struct type *type;
2345       LONGEST v =
2346         ada_array_bound_from_type (arr_type, n, 1, &type) -
2347         ada_array_bound_from_type (arr_type, n, 0, NULL) + 1;
2348       return value_from_longest (type, v);
2349     }
2350   else
2351     return
2352       value_from_longest (builtin_type_int,
2353                           value_as_long (desc_one_bound (desc_bounds (arr),
2354                                                          n, 1))
2355                           - value_as_long (desc_one_bound (desc_bounds (arr),
2356                                                            n, 0)) + 1);
2357 }
2358 
2359 /* An empty array whose type is that of ARR_TYPE (an array type),
2360    with bounds LOW to LOW-1.  */
2361 
2362 static struct value *
empty_array(struct type * arr_type,int low)2363 empty_array (struct type *arr_type, int low)
2364 {
2365   struct type *index_type =
2366     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2367                        low, low - 1);
2368   struct type *elt_type = ada_array_element_type (arr_type, 1);
2369   return allocate_value (create_array_type (NULL, elt_type, index_type));
2370 }
2371 
2372 
2373                                 /* Name resolution */
2374 
2375 /* The "decoded" name for the user-definable Ada operator corresponding
2376    to OP.  */
2377 
2378 static const char *
ada_decoded_op_name(enum exp_opcode op)2379 ada_decoded_op_name (enum exp_opcode op)
2380 {
2381   int i;
2382 
2383   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2384     {
2385       if (ada_opname_table[i].op == op)
2386         return ada_opname_table[i].decoded;
2387     }
2388   error ("Could not find operator name for opcode");
2389 }
2390 
2391 
2392 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2393    references (marked by OP_VAR_VALUE nodes in which the symbol has an
2394    undefined namespace) and converts operators that are
2395    user-defined into appropriate function calls.  If CONTEXT_TYPE is
2396    non-null, it provides a preferred result type [at the moment, only
2397    type void has any effect---causing procedures to be preferred over
2398    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
2399    return type is preferred.  May change (expand) *EXP.  */
2400 
2401 static void
resolve(struct expression ** expp,int void_context_p)2402 resolve (struct expression **expp, int void_context_p)
2403 {
2404   int pc;
2405   pc = 0;
2406   resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
2407 }
2408 
2409 /* Resolve the operator of the subexpression beginning at
2410    position *POS of *EXPP.  "Resolving" consists of replacing
2411    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2412    with their resolutions, replacing built-in operators with
2413    function calls to user-defined operators, where appropriate, and,
2414    when DEPROCEDURE_P is non-zero, converting function-valued variables
2415    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
2416    are as in ada_resolve, above.  */
2417 
2418 static struct value *
resolve_subexp(struct expression ** expp,int * pos,int deprocedure_p,struct type * context_type)2419 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2420                 struct type *context_type)
2421 {
2422   int pc = *pos;
2423   int i;
2424   struct expression *exp;       /* Convenience: == *expp.  */
2425   enum exp_opcode op = (*expp)->elts[pc].opcode;
2426   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
2427   int nargs;                    /* Number of operands.  */
2428 
2429   argvec = NULL;
2430   nargs = 0;
2431   exp = *expp;
2432 
2433   /* Pass one: resolve operands, saving their types and updating *pos.  */
2434   switch (op)
2435     {
2436     case OP_FUNCALL:
2437       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2438           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2439         *pos += 7;
2440       else
2441         {
2442           *pos += 3;
2443           resolve_subexp (expp, pos, 0, NULL);
2444         }
2445       nargs = longest_to_int (exp->elts[pc + 1].longconst);
2446       break;
2447 
2448     case UNOP_QUAL:
2449       *pos += 3;
2450       resolve_subexp (expp, pos, 1, exp->elts[pc + 1].type);
2451       break;
2452 
2453     case UNOP_ADDR:
2454       *pos += 1;
2455       resolve_subexp (expp, pos, 0, NULL);
2456       break;
2457 
2458     case OP_ATR_MODULUS:
2459       *pos += 4;
2460       break;
2461 
2462     case OP_ATR_SIZE:
2463     case OP_ATR_TAG:
2464       *pos += 1;
2465       nargs = 1;
2466       break;
2467 
2468     case OP_ATR_FIRST:
2469     case OP_ATR_LAST:
2470     case OP_ATR_LENGTH:
2471     case OP_ATR_POS:
2472     case OP_ATR_VAL:
2473       *pos += 1;
2474       nargs = 2;
2475       break;
2476 
2477     case OP_ATR_MIN:
2478     case OP_ATR_MAX:
2479       *pos += 1;
2480       nargs = 3;
2481       break;
2482 
2483     case BINOP_ASSIGN:
2484       {
2485         struct value *arg1;
2486 
2487         *pos += 1;
2488         arg1 = resolve_subexp (expp, pos, 0, NULL);
2489         if (arg1 == NULL)
2490           resolve_subexp (expp, pos, 1, NULL);
2491         else
2492           resolve_subexp (expp, pos, 1, VALUE_TYPE (arg1));
2493         break;
2494       }
2495 
2496     case UNOP_CAST:
2497     case UNOP_IN_RANGE:
2498       *pos += 3;
2499       nargs = 1;
2500       break;
2501 
2502     case BINOP_ADD:
2503     case BINOP_SUB:
2504     case BINOP_MUL:
2505     case BINOP_DIV:
2506     case BINOP_REM:
2507     case BINOP_MOD:
2508     case BINOP_EXP:
2509     case BINOP_CONCAT:
2510     case BINOP_LOGICAL_AND:
2511     case BINOP_LOGICAL_OR:
2512     case BINOP_BITWISE_AND:
2513     case BINOP_BITWISE_IOR:
2514     case BINOP_BITWISE_XOR:
2515 
2516     case BINOP_EQUAL:
2517     case BINOP_NOTEQUAL:
2518     case BINOP_LESS:
2519     case BINOP_GTR:
2520     case BINOP_LEQ:
2521     case BINOP_GEQ:
2522 
2523     case BINOP_REPEAT:
2524     case BINOP_SUBSCRIPT:
2525     case BINOP_COMMA:
2526       *pos += 1;
2527       nargs = 2;
2528       break;
2529 
2530     case UNOP_NEG:
2531     case UNOP_PLUS:
2532     case UNOP_LOGICAL_NOT:
2533     case UNOP_ABS:
2534     case UNOP_IND:
2535       *pos += 1;
2536       nargs = 1;
2537       break;
2538 
2539     case OP_LONG:
2540     case OP_DOUBLE:
2541     case OP_VAR_VALUE:
2542       *pos += 4;
2543       break;
2544 
2545     case OP_TYPE:
2546     case OP_BOOL:
2547     case OP_LAST:
2548     case OP_REGISTER:
2549     case OP_INTERNALVAR:
2550       *pos += 3;
2551       break;
2552 
2553     case UNOP_MEMVAL:
2554       *pos += 3;
2555       nargs = 1;
2556       break;
2557 
2558     case STRUCTOP_STRUCT:
2559       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2560       nargs = 1;
2561       break;
2562 
2563     case OP_STRING:
2564       (*pos) += 3
2565         + BYTES_TO_EXP_ELEM (longest_to_int (exp->elts[pc + 1].longconst)
2566                              + 1);
2567       break;
2568 
2569     case TERNOP_SLICE:
2570     case TERNOP_IN_RANGE:
2571       *pos += 1;
2572       nargs = 3;
2573       break;
2574 
2575     case BINOP_IN_BOUNDS:
2576       *pos += 3;
2577       nargs = 2;
2578       break;
2579 
2580     default:
2581       error ("Unexpected operator during name resolution");
2582     }
2583 
2584   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2585   for (i = 0; i < nargs; i += 1)
2586     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2587   argvec[i] = NULL;
2588   exp = *expp;
2589 
2590   /* Pass two: perform any resolution on principal operator.  */
2591   switch (op)
2592     {
2593     default:
2594       break;
2595 
2596     case OP_VAR_VALUE:
2597       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2598         {
2599           struct ada_symbol_info *candidates;
2600           int n_candidates;
2601 
2602           n_candidates =
2603             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2604                                     (exp->elts[pc + 2].symbol),
2605                                     exp->elts[pc + 1].block, VAR_DOMAIN,
2606                                     &candidates);
2607 
2608           if (n_candidates > 1)
2609             {
2610               /* Types tend to get re-introduced locally, so if there
2611                  are any local symbols that are not types, first filter
2612                  out all types.  */
2613               int j;
2614               for (j = 0; j < n_candidates; j += 1)
2615                 switch (SYMBOL_CLASS (candidates[j].sym))
2616                   {
2617                   case LOC_REGISTER:
2618                   case LOC_ARG:
2619                   case LOC_REF_ARG:
2620                   case LOC_REGPARM:
2621                   case LOC_REGPARM_ADDR:
2622                   case LOC_LOCAL:
2623                   case LOC_LOCAL_ARG:
2624                   case LOC_BASEREG:
2625                   case LOC_BASEREG_ARG:
2626                   case LOC_COMPUTED:
2627                   case LOC_COMPUTED_ARG:
2628                     goto FoundNonType;
2629                   default:
2630                     break;
2631                   }
2632             FoundNonType:
2633               if (j < n_candidates)
2634                 {
2635                   j = 0;
2636                   while (j < n_candidates)
2637                     {
2638                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2639                         {
2640                           candidates[j] = candidates[n_candidates - 1];
2641                           n_candidates -= 1;
2642                         }
2643                       else
2644                         j += 1;
2645                     }
2646                 }
2647             }
2648 
2649           if (n_candidates == 0)
2650             error ("No definition found for %s",
2651                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2652           else if (n_candidates == 1)
2653             i = 0;
2654           else if (deprocedure_p
2655                    && !is_nonfunction (candidates, n_candidates))
2656             {
2657               i = ada_resolve_function
2658                 (candidates, n_candidates, NULL, 0,
2659                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
2660                  context_type);
2661               if (i < 0)
2662                 error ("Could not find a match for %s",
2663                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2664             }
2665           else
2666             {
2667               printf_filtered ("Multiple matches for %s\n",
2668                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2669               user_select_syms (candidates, n_candidates, 1);
2670               i = 0;
2671             }
2672 
2673           exp->elts[pc + 1].block = candidates[i].block;
2674           exp->elts[pc + 2].symbol = candidates[i].sym;
2675           if (innermost_block == NULL
2676               || contained_in (candidates[i].block, innermost_block))
2677             innermost_block = candidates[i].block;
2678         }
2679 
2680       if (deprocedure_p
2681           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2682               == TYPE_CODE_FUNC))
2683         {
2684           replace_operator_with_call (expp, pc, 0, 0,
2685                                       exp->elts[pc + 2].symbol,
2686                                       exp->elts[pc + 1].block);
2687           exp = *expp;
2688         }
2689       break;
2690 
2691     case OP_FUNCALL:
2692       {
2693         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2694             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2695           {
2696             struct ada_symbol_info *candidates;
2697             int n_candidates;
2698 
2699             n_candidates =
2700               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2701                                       (exp->elts[pc + 5].symbol),
2702                                       exp->elts[pc + 4].block, VAR_DOMAIN,
2703                                       &candidates);
2704             if (n_candidates == 1)
2705               i = 0;
2706             else
2707               {
2708                 i = ada_resolve_function
2709                   (candidates, n_candidates,
2710                    argvec, nargs,
2711                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
2712                    context_type);
2713                 if (i < 0)
2714                   error ("Could not find a match for %s",
2715                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2716               }
2717 
2718             exp->elts[pc + 4].block = candidates[i].block;
2719             exp->elts[pc + 5].symbol = candidates[i].sym;
2720             if (innermost_block == NULL
2721                 || contained_in (candidates[i].block, innermost_block))
2722               innermost_block = candidates[i].block;
2723           }
2724       }
2725       break;
2726     case BINOP_ADD:
2727     case BINOP_SUB:
2728     case BINOP_MUL:
2729     case BINOP_DIV:
2730     case BINOP_REM:
2731     case BINOP_MOD:
2732     case BINOP_CONCAT:
2733     case BINOP_BITWISE_AND:
2734     case BINOP_BITWISE_IOR:
2735     case BINOP_BITWISE_XOR:
2736     case BINOP_EQUAL:
2737     case BINOP_NOTEQUAL:
2738     case BINOP_LESS:
2739     case BINOP_GTR:
2740     case BINOP_LEQ:
2741     case BINOP_GEQ:
2742     case BINOP_EXP:
2743     case UNOP_NEG:
2744     case UNOP_PLUS:
2745     case UNOP_LOGICAL_NOT:
2746     case UNOP_ABS:
2747       if (possible_user_operator_p (op, argvec))
2748         {
2749           struct ada_symbol_info *candidates;
2750           int n_candidates;
2751 
2752           n_candidates =
2753             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
2754                                     (struct block *) NULL, VAR_DOMAIN,
2755                                     &candidates);
2756           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
2757                                     ada_decoded_op_name (op), NULL);
2758           if (i < 0)
2759             break;
2760 
2761           replace_operator_with_call (expp, pc, nargs, 1,
2762                                       candidates[i].sym, candidates[i].block);
2763           exp = *expp;
2764         }
2765       break;
2766 
2767     case OP_TYPE:
2768       return NULL;
2769     }
2770 
2771   *pos = pc;
2772   return evaluate_subexp_type (exp, pos);
2773 }
2774 
2775 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
2776    MAY_DEREF is non-zero, the formal may be a pointer and the actual
2777    a non-pointer.   A type of 'void' (which is never a valid expression type)
2778    by convention matches anything. */
2779 /* The term "match" here is rather loose.  The match is heuristic and
2780    liberal.  FIXME: TOO liberal, in fact.  */
2781 
2782 static int
ada_type_match(struct type * ftype,struct type * atype,int may_deref)2783 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
2784 {
2785   ftype = ada_check_typedef (ftype);
2786   atype = ada_check_typedef (atype);
2787 
2788   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
2789     ftype = TYPE_TARGET_TYPE (ftype);
2790   if (TYPE_CODE (atype) == TYPE_CODE_REF)
2791     atype = TYPE_TARGET_TYPE (atype);
2792 
2793   if (TYPE_CODE (ftype) == TYPE_CODE_VOID
2794       || TYPE_CODE (atype) == TYPE_CODE_VOID)
2795     return 1;
2796 
2797   switch (TYPE_CODE (ftype))
2798     {
2799     default:
2800       return 1;
2801     case TYPE_CODE_PTR:
2802       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
2803         return ada_type_match (TYPE_TARGET_TYPE (ftype),
2804                                TYPE_TARGET_TYPE (atype), 0);
2805       else
2806         return (may_deref
2807                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
2808     case TYPE_CODE_INT:
2809     case TYPE_CODE_ENUM:
2810     case TYPE_CODE_RANGE:
2811       switch (TYPE_CODE (atype))
2812         {
2813         case TYPE_CODE_INT:
2814         case TYPE_CODE_ENUM:
2815         case TYPE_CODE_RANGE:
2816           return 1;
2817         default:
2818           return 0;
2819         }
2820 
2821     case TYPE_CODE_ARRAY:
2822       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2823               || ada_is_array_descriptor_type (atype));
2824 
2825     case TYPE_CODE_STRUCT:
2826       if (ada_is_array_descriptor_type (ftype))
2827         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2828                 || ada_is_array_descriptor_type (atype));
2829       else
2830         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
2831                 && !ada_is_array_descriptor_type (atype));
2832 
2833     case TYPE_CODE_UNION:
2834     case TYPE_CODE_FLT:
2835       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
2836     }
2837 }
2838 
2839 /* Return non-zero if the formals of FUNC "sufficiently match" the
2840    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
2841    may also be an enumeral, in which case it is treated as a 0-
2842    argument function.  */
2843 
2844 static int
ada_args_match(struct symbol * func,struct value ** actuals,int n_actuals)2845 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
2846 {
2847   int i;
2848   struct type *func_type = SYMBOL_TYPE (func);
2849 
2850   if (SYMBOL_CLASS (func) == LOC_CONST
2851       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
2852     return (n_actuals == 0);
2853   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
2854     return 0;
2855 
2856   if (TYPE_NFIELDS (func_type) != n_actuals)
2857     return 0;
2858 
2859   for (i = 0; i < n_actuals; i += 1)
2860     {
2861       if (actuals[i] == NULL)
2862         return 0;
2863       else
2864         {
2865           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type, i));
2866           struct type *atype = ada_check_typedef (VALUE_TYPE (actuals[i]));
2867 
2868           if (!ada_type_match (ftype, atype, 1))
2869             return 0;
2870         }
2871     }
2872   return 1;
2873 }
2874 
2875 /* False iff function type FUNC_TYPE definitely does not produce a value
2876    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
2877    FUNC_TYPE is not a valid function type with a non-null return type
2878    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
2879 
2880 static int
return_match(struct type * func_type,struct type * context_type)2881 return_match (struct type *func_type, struct type *context_type)
2882 {
2883   struct type *return_type;
2884 
2885   if (func_type == NULL)
2886     return 1;
2887 
2888   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
2889     return_type = base_type (TYPE_TARGET_TYPE (func_type));
2890   else
2891     return_type = base_type (func_type);
2892   if (return_type == NULL)
2893     return 1;
2894 
2895   context_type = base_type (context_type);
2896 
2897   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
2898     return context_type == NULL || return_type == context_type;
2899   else if (context_type == NULL)
2900     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
2901   else
2902     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
2903 }
2904 
2905 
2906 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
2907    function (if any) that matches the types of the NARGS arguments in
2908    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
2909    that returns that type, then eliminate matches that don't.  If
2910    CONTEXT_TYPE is void and there is at least one match that does not
2911    return void, eliminate all matches that do.
2912 
2913    Asks the user if there is more than one match remaining.  Returns -1
2914    if there is no such symbol or none is selected.  NAME is used
2915    solely for messages.  May re-arrange and modify SYMS in
2916    the process; the index returned is for the modified vector.  */
2917 
2918 static int
ada_resolve_function(struct ada_symbol_info syms[],int nsyms,struct value ** args,int nargs,const char * name,struct type * context_type)2919 ada_resolve_function (struct ada_symbol_info syms[],
2920                       int nsyms, struct value **args, int nargs,
2921                       const char *name, struct type *context_type)
2922 {
2923   int k;
2924   int m;                        /* Number of hits */
2925   struct type *fallback;
2926   struct type *return_type;
2927 
2928   return_type = context_type;
2929   if (context_type == NULL)
2930     fallback = builtin_type_void;
2931   else
2932     fallback = NULL;
2933 
2934   m = 0;
2935   while (1)
2936     {
2937       for (k = 0; k < nsyms; k += 1)
2938         {
2939           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
2940 
2941           if (ada_args_match (syms[k].sym, args, nargs)
2942               && return_match (type, return_type))
2943             {
2944               syms[m] = syms[k];
2945               m += 1;
2946             }
2947         }
2948       if (m > 0 || return_type == fallback)
2949         break;
2950       else
2951         return_type = fallback;
2952     }
2953 
2954   if (m == 0)
2955     return -1;
2956   else if (m > 1)
2957     {
2958       printf_filtered ("Multiple matches for %s\n", name);
2959       user_select_syms (syms, m, 1);
2960       return 0;
2961     }
2962   return 0;
2963 }
2964 
2965 /* Returns true (non-zero) iff decoded name N0 should appear before N1
2966    in a listing of choices during disambiguation (see sort_choices, below).
2967    The idea is that overloadings of a subprogram name from the
2968    same package should sort in their source order.  We settle for ordering
2969    such symbols by their trailing number (__N  or $N).  */
2970 
2971 static int
encoded_ordered_before(char * N0,char * N1)2972 encoded_ordered_before (char *N0, char *N1)
2973 {
2974   if (N1 == NULL)
2975     return 0;
2976   else if (N0 == NULL)
2977     return 1;
2978   else
2979     {
2980       int k0, k1;
2981       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
2982         ;
2983       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
2984         ;
2985       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
2986           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
2987         {
2988           int n0, n1;
2989           n0 = k0;
2990           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
2991             n0 -= 1;
2992           n1 = k1;
2993           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
2994             n1 -= 1;
2995           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
2996             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
2997         }
2998       return (strcmp (N0, N1) < 0);
2999     }
3000 }
3001 
3002 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3003    encoded names.  */
3004 
3005 static void
sort_choices(struct ada_symbol_info syms[],int nsyms)3006 sort_choices (struct ada_symbol_info syms[], int nsyms)
3007 {
3008   int i;
3009   for (i = 1; i < nsyms; i += 1)
3010     {
3011       struct ada_symbol_info sym = syms[i];
3012       int j;
3013 
3014       for (j = i - 1; j >= 0; j -= 1)
3015         {
3016           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3017                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3018             break;
3019           syms[j + 1] = syms[j];
3020         }
3021       syms[j + 1] = sym;
3022     }
3023 }
3024 
3025 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3026    by asking the user (if necessary), returning the number selected,
3027    and setting the first elements of SYMS items.  Error if no symbols
3028    selected.  */
3029 
3030 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3031    to be re-integrated one of these days.  */
3032 
3033 int
user_select_syms(struct ada_symbol_info * syms,int nsyms,int max_results)3034 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3035 {
3036   int i;
3037   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3038   int n_chosen;
3039   int first_choice = (max_results == 1) ? 1 : 2;
3040 
3041   if (max_results < 1)
3042     error ("Request to select 0 symbols!");
3043   if (nsyms <= 1)
3044     return nsyms;
3045 
3046   printf_unfiltered ("[0] cancel\n");
3047   if (max_results > 1)
3048     printf_unfiltered ("[1] all\n");
3049 
3050   sort_choices (syms, nsyms);
3051 
3052   for (i = 0; i < nsyms; i += 1)
3053     {
3054       if (syms[i].sym == NULL)
3055         continue;
3056 
3057       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3058         {
3059           struct symtab_and_line sal =
3060             find_function_start_sal (syms[i].sym, 1);
3061           printf_unfiltered ("[%d] %s at %s:%d\n", i + first_choice,
3062                              SYMBOL_PRINT_NAME (syms[i].sym),
3063                              (sal.symtab == NULL
3064                               ? "<no source file available>"
3065                               : sal.symtab->filename), sal.line);
3066           continue;
3067         }
3068       else
3069         {
3070           int is_enumeral =
3071             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3072              && SYMBOL_TYPE (syms[i].sym) != NULL
3073              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3074           struct symtab *symtab = symtab_for_sym (syms[i].sym);
3075 
3076           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3077             printf_unfiltered ("[%d] %s at %s:%d\n",
3078                                i + first_choice,
3079                                SYMBOL_PRINT_NAME (syms[i].sym),
3080                                symtab->filename, SYMBOL_LINE (syms[i].sym));
3081           else if (is_enumeral
3082                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3083             {
3084               printf_unfiltered ("[%d] ", i + first_choice);
3085               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3086                               gdb_stdout, -1, 0);
3087               printf_unfiltered ("'(%s) (enumeral)\n",
3088                                  SYMBOL_PRINT_NAME (syms[i].sym));
3089             }
3090           else if (symtab != NULL)
3091             printf_unfiltered (is_enumeral
3092                                ? "[%d] %s in %s (enumeral)\n"
3093                                : "[%d] %s at %s:?\n",
3094                                i + first_choice,
3095                                SYMBOL_PRINT_NAME (syms[i].sym),
3096                                symtab->filename);
3097           else
3098             printf_unfiltered (is_enumeral
3099                                ? "[%d] %s (enumeral)\n"
3100                                : "[%d] %s at ?\n",
3101                                i + first_choice,
3102                                SYMBOL_PRINT_NAME (syms[i].sym));
3103         }
3104     }
3105 
3106   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3107                              "overload-choice");
3108 
3109   for (i = 0; i < n_chosen; i += 1)
3110     syms[i] = syms[chosen[i]];
3111 
3112   return n_chosen;
3113 }
3114 
3115 /* Read and validate a set of numeric choices from the user in the
3116    range 0 .. N_CHOICES-1.  Place the results in increasing
3117    order in CHOICES[0 .. N-1], and return N.
3118 
3119    The user types choices as a sequence of numbers on one line
3120    separated by blanks, encoding them as follows:
3121 
3122      + A choice of 0 means to cancel the selection, throwing an error.
3123      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3124      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3125 
3126    The user is not allowed to choose more than MAX_RESULTS values.
3127 
3128    ANNOTATION_SUFFIX, if present, is used to annotate the input
3129    prompts (for use with the -f switch).  */
3130 
3131 int
get_selections(int * choices,int n_choices,int max_results,int is_all_choice,char * annotation_suffix)3132 get_selections (int *choices, int n_choices, int max_results,
3133                 int is_all_choice, char *annotation_suffix)
3134 {
3135   char *args;
3136   const char *prompt;
3137   int n_chosen;
3138   int first_choice = is_all_choice ? 2 : 1;
3139 
3140   prompt = getenv ("PS2");
3141   if (prompt == NULL)
3142     prompt = ">";
3143 
3144   printf_unfiltered ("%s ", prompt);
3145   gdb_flush (gdb_stdout);
3146 
3147   args = command_line_input ((char *) NULL, 0, annotation_suffix);
3148 
3149   if (args == NULL)
3150     error_no_arg ("one or more choice numbers");
3151 
3152   n_chosen = 0;
3153 
3154   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3155      order, as given in args.  Choices are validated.  */
3156   while (1)
3157     {
3158       char *args2;
3159       int choice, j;
3160 
3161       while (isspace (*args))
3162         args += 1;
3163       if (*args == '\0' && n_chosen == 0)
3164         error_no_arg ("one or more choice numbers");
3165       else if (*args == '\0')
3166         break;
3167 
3168       choice = strtol (args, &args2, 10);
3169       if (args == args2 || choice < 0
3170           || choice > n_choices + first_choice - 1)
3171         error ("Argument must be choice number");
3172       args = args2;
3173 
3174       if (choice == 0)
3175         error ("cancelled");
3176 
3177       if (choice < first_choice)
3178         {
3179           n_chosen = n_choices;
3180           for (j = 0; j < n_choices; j += 1)
3181             choices[j] = j;
3182           break;
3183         }
3184       choice -= first_choice;
3185 
3186       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3187         {
3188         }
3189 
3190       if (j < 0 || choice != choices[j])
3191         {
3192           int k;
3193           for (k = n_chosen - 1; k > j; k -= 1)
3194             choices[k + 1] = choices[k];
3195           choices[j + 1] = choice;
3196           n_chosen += 1;
3197         }
3198     }
3199 
3200   if (n_chosen > max_results)
3201     error ("Select no more than %d of the above", max_results);
3202 
3203   return n_chosen;
3204 }
3205 
3206 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3207    on the function identified by SYM and BLOCK, and taking NARGS
3208    arguments.  Update *EXPP as needed to hold more space.  */
3209 
3210 static void
replace_operator_with_call(struct expression ** expp,int pc,int nargs,int oplen,struct symbol * sym,struct block * block)3211 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3212                             int oplen, struct symbol *sym,
3213                             struct block *block)
3214 {
3215   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3216      symbol, -oplen for operator being replaced).  */
3217   struct expression *newexp = (struct expression *)
3218     xmalloc (sizeof (struct expression)
3219              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3220   struct expression *exp = *expp;
3221 
3222   newexp->nelts = exp->nelts + 7 - oplen;
3223   newexp->language_defn = exp->language_defn;
3224   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3225   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3226           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3227 
3228   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3229   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3230 
3231   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3232   newexp->elts[pc + 4].block = block;
3233   newexp->elts[pc + 5].symbol = sym;
3234 
3235   *expp = newexp;
3236   xfree (exp);
3237 }
3238 
3239 /* Type-class predicates */
3240 
3241 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3242    or FLOAT).  */
3243 
3244 static int
numeric_type_p(struct type * type)3245 numeric_type_p (struct type *type)
3246 {
3247   if (type == NULL)
3248     return 0;
3249   else
3250     {
3251       switch (TYPE_CODE (type))
3252         {
3253         case TYPE_CODE_INT:
3254         case TYPE_CODE_FLT:
3255           return 1;
3256         case TYPE_CODE_RANGE:
3257           return (type == TYPE_TARGET_TYPE (type)
3258                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3259         default:
3260           return 0;
3261         }
3262     }
3263 }
3264 
3265 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3266 
3267 static int
integer_type_p(struct type * type)3268 integer_type_p (struct type *type)
3269 {
3270   if (type == NULL)
3271     return 0;
3272   else
3273     {
3274       switch (TYPE_CODE (type))
3275         {
3276         case TYPE_CODE_INT:
3277           return 1;
3278         case TYPE_CODE_RANGE:
3279           return (type == TYPE_TARGET_TYPE (type)
3280                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3281         default:
3282           return 0;
3283         }
3284     }
3285 }
3286 
3287 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3288 
3289 static int
scalar_type_p(struct type * type)3290 scalar_type_p (struct type *type)
3291 {
3292   if (type == NULL)
3293     return 0;
3294   else
3295     {
3296       switch (TYPE_CODE (type))
3297         {
3298         case TYPE_CODE_INT:
3299         case TYPE_CODE_RANGE:
3300         case TYPE_CODE_ENUM:
3301         case TYPE_CODE_FLT:
3302           return 1;
3303         default:
3304           return 0;
3305         }
3306     }
3307 }
3308 
3309 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3310 
3311 static int
discrete_type_p(struct type * type)3312 discrete_type_p (struct type *type)
3313 {
3314   if (type == NULL)
3315     return 0;
3316   else
3317     {
3318       switch (TYPE_CODE (type))
3319         {
3320         case TYPE_CODE_INT:
3321         case TYPE_CODE_RANGE:
3322         case TYPE_CODE_ENUM:
3323           return 1;
3324         default:
3325           return 0;
3326         }
3327     }
3328 }
3329 
3330 /* Returns non-zero if OP with operands in the vector ARGS could be
3331    a user-defined function.  Errs on the side of pre-defined operators
3332    (i.e., result 0).  */
3333 
3334 static int
possible_user_operator_p(enum exp_opcode op,struct value * args[])3335 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3336 {
3337   struct type *type0 =
3338     (args[0] == NULL) ? NULL : ada_check_typedef (VALUE_TYPE (args[0]));
3339   struct type *type1 =
3340     (args[1] == NULL) ? NULL : ada_check_typedef (VALUE_TYPE (args[1]));
3341 
3342   if (type0 == NULL)
3343     return 0;
3344 
3345   switch (op)
3346     {
3347     default:
3348       return 0;
3349 
3350     case BINOP_ADD:
3351     case BINOP_SUB:
3352     case BINOP_MUL:
3353     case BINOP_DIV:
3354       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3355 
3356     case BINOP_REM:
3357     case BINOP_MOD:
3358     case BINOP_BITWISE_AND:
3359     case BINOP_BITWISE_IOR:
3360     case BINOP_BITWISE_XOR:
3361       return (!(integer_type_p (type0) && integer_type_p (type1)));
3362 
3363     case BINOP_EQUAL:
3364     case BINOP_NOTEQUAL:
3365     case BINOP_LESS:
3366     case BINOP_GTR:
3367     case BINOP_LEQ:
3368     case BINOP_GEQ:
3369       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3370 
3371     case BINOP_CONCAT:
3372       return
3373         ((TYPE_CODE (type0) != TYPE_CODE_ARRAY
3374           && (TYPE_CODE (type0) != TYPE_CODE_PTR
3375               || TYPE_CODE (TYPE_TARGET_TYPE (type0)) != TYPE_CODE_ARRAY))
3376          || (TYPE_CODE (type1) != TYPE_CODE_ARRAY
3377              && (TYPE_CODE (type1) != TYPE_CODE_PTR
3378                  || (TYPE_CODE (TYPE_TARGET_TYPE (type1))
3379 		     != TYPE_CODE_ARRAY))));
3380 
3381     case BINOP_EXP:
3382       return (!(numeric_type_p (type0) && integer_type_p (type1)));
3383 
3384     case UNOP_NEG:
3385     case UNOP_PLUS:
3386     case UNOP_LOGICAL_NOT:
3387     case UNOP_ABS:
3388       return (!numeric_type_p (type0));
3389 
3390     }
3391 }
3392 
3393                                 /* Renaming */
3394 
3395 /* NOTE: In the following, we assume that a renaming type's name may
3396    have an ___XD suffix.  It would be nice if this went away at some
3397    point.  */
3398 
3399 /* If TYPE encodes a renaming, returns the renaming suffix, which
3400    is XR for an object renaming, XRP for a procedure renaming, XRE for
3401    an exception renaming, and XRS for a subprogram renaming.  Returns
3402    NULL if NAME encodes none of these.  */
3403 
3404 const char *
ada_renaming_type(struct type * type)3405 ada_renaming_type (struct type *type)
3406 {
3407   if (type != NULL && TYPE_CODE (type) == TYPE_CODE_ENUM)
3408     {
3409       const char *name = type_name_no_tag (type);
3410       const char *suffix = (name == NULL) ? NULL : strstr (name, "___XR");
3411       if (suffix == NULL
3412           || (suffix[5] != '\000' && strchr ("PES_", suffix[5]) == NULL))
3413         return NULL;
3414       else
3415         return suffix + 3;
3416     }
3417   else
3418     return NULL;
3419 }
3420 
3421 /* Return non-zero iff SYM encodes an object renaming.  */
3422 
3423 int
ada_is_object_renaming(struct symbol * sym)3424 ada_is_object_renaming (struct symbol *sym)
3425 {
3426   const char *renaming_type = ada_renaming_type (SYMBOL_TYPE (sym));
3427   return renaming_type != NULL
3428     && (renaming_type[2] == '\0' || renaming_type[2] == '_');
3429 }
3430 
3431 /* Assuming that SYM encodes a non-object renaming, returns the original
3432    name of the renamed entity.  The name is good until the end of
3433    parsing.  */
3434 
3435 char *
ada_simple_renamed_entity(struct symbol * sym)3436 ada_simple_renamed_entity (struct symbol *sym)
3437 {
3438   struct type *type;
3439   const char *raw_name;
3440   int len;
3441   char *result;
3442 
3443   type = SYMBOL_TYPE (sym);
3444   if (type == NULL || TYPE_NFIELDS (type) < 1)
3445     error ("Improperly encoded renaming.");
3446 
3447   raw_name = TYPE_FIELD_NAME (type, 0);
3448   len = (raw_name == NULL ? 0 : strlen (raw_name)) - 5;
3449   if (len <= 0)
3450     error ("Improperly encoded renaming.");
3451 
3452   result = xmalloc (len + 1);
3453   strncpy (result, raw_name, len);
3454   result[len] = '\000';
3455   return result;
3456 }
3457 
3458 
3459                                 /* Evaluation: Function Calls */
3460 
3461 /* Return an lvalue containing the value VAL.  This is the identity on
3462    lvalues, and otherwise has the side-effect of pushing a copy of VAL
3463    on the stack, using and updating *SP as the stack pointer, and
3464    returning an lvalue whose VALUE_ADDRESS points to the copy.  */
3465 
3466 static struct value *
ensure_lval(struct value * val,CORE_ADDR * sp)3467 ensure_lval (struct value *val, CORE_ADDR *sp)
3468 {
3469   if (! VALUE_LVAL (val))
3470     {
3471       int len = TYPE_LENGTH (ada_check_typedef (VALUE_TYPE (val)));
3472 
3473       /* The following is taken from the structure-return code in
3474 	 call_function_by_hand. FIXME: Therefore, some refactoring seems
3475 	 indicated. */
3476       if (INNER_THAN (1, 2))
3477 	{
3478 	  /* Stack grows downward.  Align SP and VALUE_ADDRESS (val) after
3479 	     reserving sufficient space. */
3480 	  *sp -= len;
3481 	  if (gdbarch_frame_align_p (current_gdbarch))
3482 	    *sp = gdbarch_frame_align (current_gdbarch, *sp);
3483 	  VALUE_ADDRESS (val) = *sp;
3484 	}
3485       else
3486 	{
3487 	  /* Stack grows upward.  Align the frame, allocate space, and
3488 	     then again, re-align the frame. */
3489 	  if (gdbarch_frame_align_p (current_gdbarch))
3490 	    *sp = gdbarch_frame_align (current_gdbarch, *sp);
3491 	  VALUE_ADDRESS (val) = *sp;
3492 	  *sp += len;
3493 	  if (gdbarch_frame_align_p (current_gdbarch))
3494 	    *sp = gdbarch_frame_align (current_gdbarch, *sp);
3495 	}
3496 
3497       write_memory (VALUE_ADDRESS (val), VALUE_CONTENTS_RAW (val), len);
3498     }
3499 
3500   return val;
3501 }
3502 
3503 /* Return the value ACTUAL, converted to be an appropriate value for a
3504    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
3505    allocating any necessary descriptors (fat pointers), or copies of
3506    values not residing in memory, updating it as needed.  */
3507 
3508 static struct value *
convert_actual(struct value * actual,struct type * formal_type0,CORE_ADDR * sp)3509 convert_actual (struct value *actual, struct type *formal_type0,
3510                 CORE_ADDR *sp)
3511 {
3512   struct type *actual_type = ada_check_typedef (VALUE_TYPE (actual));
3513   struct type *formal_type = ada_check_typedef (formal_type0);
3514   struct type *formal_target =
3515     TYPE_CODE (formal_type) == TYPE_CODE_PTR
3516     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3517   struct type *actual_target =
3518     TYPE_CODE (actual_type) == TYPE_CODE_PTR
3519     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3520 
3521   if (ada_is_array_descriptor_type (formal_target)
3522       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3523     return make_array_descriptor (formal_type, actual, sp);
3524   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR)
3525     {
3526       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3527           && ada_is_array_descriptor_type (actual_target))
3528         return desc_data (actual);
3529       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3530         {
3531           if (VALUE_LVAL (actual) != lval_memory)
3532             {
3533               struct value *val;
3534               actual_type = ada_check_typedef (VALUE_TYPE (actual));
3535               val = allocate_value (actual_type);
3536               memcpy ((char *) VALUE_CONTENTS_RAW (val),
3537                       (char *) VALUE_CONTENTS (actual),
3538                       TYPE_LENGTH (actual_type));
3539               actual = ensure_lval (val, sp);
3540             }
3541           return value_addr (actual);
3542         }
3543     }
3544   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3545     return ada_value_ind (actual);
3546 
3547   return actual;
3548 }
3549 
3550 
3551 /* Push a descriptor of type TYPE for array value ARR on the stack at
3552    *SP, updating *SP to reflect the new descriptor.  Return either
3553    an lvalue representing the new descriptor, or (if TYPE is a pointer-
3554    to-descriptor type rather than a descriptor type), a struct value *
3555    representing a pointer to this descriptor.  */
3556 
3557 static struct value *
make_array_descriptor(struct type * type,struct value * arr,CORE_ADDR * sp)3558 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3559 {
3560   struct type *bounds_type = desc_bounds_type (type);
3561   struct type *desc_type = desc_base_type (type);
3562   struct value *descriptor = allocate_value (desc_type);
3563   struct value *bounds = allocate_value (bounds_type);
3564   int i;
3565 
3566   for (i = ada_array_arity (ada_check_typedef (VALUE_TYPE (arr))); i > 0; i -= 1)
3567     {
3568       modify_general_field (VALUE_CONTENTS (bounds),
3569                             value_as_long (ada_array_bound (arr, i, 0)),
3570                             desc_bound_bitpos (bounds_type, i, 0),
3571                             desc_bound_bitsize (bounds_type, i, 0));
3572       modify_general_field (VALUE_CONTENTS (bounds),
3573                             value_as_long (ada_array_bound (arr, i, 1)),
3574                             desc_bound_bitpos (bounds_type, i, 1),
3575                             desc_bound_bitsize (bounds_type, i, 1));
3576     }
3577 
3578   bounds = ensure_lval (bounds, sp);
3579 
3580   modify_general_field (VALUE_CONTENTS (descriptor),
3581                         VALUE_ADDRESS (ensure_lval (arr, sp)),
3582                         fat_pntr_data_bitpos (desc_type),
3583                         fat_pntr_data_bitsize (desc_type));
3584 
3585   modify_general_field (VALUE_CONTENTS (descriptor),
3586                         VALUE_ADDRESS (bounds),
3587                         fat_pntr_bounds_bitpos (desc_type),
3588                         fat_pntr_bounds_bitsize (desc_type));
3589 
3590   descriptor = ensure_lval (descriptor, sp);
3591 
3592   if (TYPE_CODE (type) == TYPE_CODE_PTR)
3593     return value_addr (descriptor);
3594   else
3595     return descriptor;
3596 }
3597 
3598 
3599 /* Assuming a dummy frame has been established on the target, perform any
3600    conversions needed for calling function FUNC on the NARGS actual
3601    parameters in ARGS, other than standard C conversions.  Does
3602    nothing if FUNC does not have Ada-style prototype data, or if NARGS
3603    does not match the number of arguments expected.  Use *SP as a
3604    stack pointer for additional data that must be pushed, updating its
3605    value as needed.  */
3606 
3607 void
ada_convert_actuals(struct value * func,int nargs,struct value * args[],CORE_ADDR * sp)3608 ada_convert_actuals (struct value *func, int nargs, struct value *args[],
3609                      CORE_ADDR *sp)
3610 {
3611   int i;
3612 
3613   if (TYPE_NFIELDS (VALUE_TYPE (func)) == 0
3614       || nargs != TYPE_NFIELDS (VALUE_TYPE (func)))
3615     return;
3616 
3617   for (i = 0; i < nargs; i += 1)
3618     args[i] =
3619       convert_actual (args[i], TYPE_FIELD_TYPE (VALUE_TYPE (func), i), sp);
3620 }
3621 
3622 /* Dummy definitions for an experimental caching module that is not
3623  * used in the public sources. */
3624 
3625 static int
lookup_cached_symbol(const char * name,domain_enum namespace,struct symbol ** sym,struct block ** block,struct symtab ** symtab)3626 lookup_cached_symbol (const char *name, domain_enum namespace,
3627                       struct symbol **sym, struct block **block,
3628                       struct symtab **symtab)
3629 {
3630   return 0;
3631 }
3632 
3633 static void
cache_symbol(const char * name,domain_enum namespace,struct symbol * sym,struct block * block,struct symtab * symtab)3634 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3635               struct block *block, struct symtab *symtab)
3636 {
3637 }
3638 
3639                                 /* Symbol Lookup */
3640 
3641 /* Return the result of a standard (literal, C-like) lookup of NAME in
3642    given DOMAIN, visible from lexical block BLOCK.  */
3643 
3644 static struct symbol *
standard_lookup(const char * name,const struct block * block,domain_enum domain)3645 standard_lookup (const char *name, const struct block *block,
3646                  domain_enum domain)
3647 {
3648   struct symbol *sym;
3649   struct symtab *symtab;
3650 
3651   if (lookup_cached_symbol (name, domain, &sym, NULL, NULL))
3652     return sym;
3653   sym =
3654     lookup_symbol_in_language (name, block, domain, language_c, 0, &symtab);
3655   cache_symbol (name, domain, sym, block_found, symtab);
3656   return sym;
3657 }
3658 
3659 
3660 /* Non-zero iff there is at least one non-function/non-enumeral symbol
3661    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions,
3662    since they contend in overloading in the same way.  */
3663 static int
is_nonfunction(struct ada_symbol_info syms[],int n)3664 is_nonfunction (struct ada_symbol_info syms[], int n)
3665 {
3666   int i;
3667 
3668   for (i = 0; i < n; i += 1)
3669     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
3670         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
3671             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
3672       return 1;
3673 
3674   return 0;
3675 }
3676 
3677 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
3678    struct types.  Otherwise, they may not.  */
3679 
3680 static int
equiv_types(struct type * type0,struct type * type1)3681 equiv_types (struct type *type0, struct type *type1)
3682 {
3683   if (type0 == type1)
3684     return 1;
3685   if (type0 == NULL || type1 == NULL
3686       || TYPE_CODE (type0) != TYPE_CODE (type1))
3687     return 0;
3688   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
3689        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
3690       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
3691       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
3692     return 1;
3693 
3694   return 0;
3695 }
3696 
3697 /* True iff SYM0 represents the same entity as SYM1, or one that is
3698    no more defined than that of SYM1.  */
3699 
3700 static int
lesseq_defined_than(struct symbol * sym0,struct symbol * sym1)3701 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
3702 {
3703   if (sym0 == sym1)
3704     return 1;
3705   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
3706       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
3707     return 0;
3708 
3709   switch (SYMBOL_CLASS (sym0))
3710     {
3711     case LOC_UNDEF:
3712       return 1;
3713     case LOC_TYPEDEF:
3714       {
3715         struct type *type0 = SYMBOL_TYPE (sym0);
3716         struct type *type1 = SYMBOL_TYPE (sym1);
3717         char *name0 = SYMBOL_LINKAGE_NAME (sym0);
3718         char *name1 = SYMBOL_LINKAGE_NAME (sym1);
3719         int len0 = strlen (name0);
3720         return
3721           TYPE_CODE (type0) == TYPE_CODE (type1)
3722           && (equiv_types (type0, type1)
3723               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
3724                   && strncmp (name1 + len0, "___XV", 5) == 0));
3725       }
3726     case LOC_CONST:
3727       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
3728         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
3729     default:
3730       return 0;
3731     }
3732 }
3733 
3734 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
3735    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
3736 
3737 static void
add_defn_to_vec(struct obstack * obstackp,struct symbol * sym,struct block * block,struct symtab * symtab)3738 add_defn_to_vec (struct obstack *obstackp,
3739                  struct symbol *sym,
3740                  struct block *block, struct symtab *symtab)
3741 {
3742   int i;
3743   size_t tmp;
3744   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
3745 
3746   if (SYMBOL_TYPE (sym) != NULL)
3747     SYMBOL_TYPE (sym) = ada_check_typedef (SYMBOL_TYPE (sym));
3748   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
3749     {
3750       if (lesseq_defined_than (sym, prevDefns[i].sym))
3751         return;
3752       else if (lesseq_defined_than (prevDefns[i].sym, sym))
3753         {
3754           prevDefns[i].sym = sym;
3755           prevDefns[i].block = block;
3756           prevDefns[i].symtab = symtab;
3757           return;
3758         }
3759     }
3760 
3761   {
3762     struct ada_symbol_info info;
3763 
3764     info.sym = sym;
3765     info.block = block;
3766     info.symtab = symtab;
3767     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
3768   }
3769 }
3770 
3771 /* Number of ada_symbol_info structures currently collected in
3772    current vector in *OBSTACKP.  */
3773 
3774 static int
num_defns_collected(struct obstack * obstackp)3775 num_defns_collected (struct obstack *obstackp)
3776 {
3777   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
3778 }
3779 
3780 /* Vector of ada_symbol_info structures currently collected in current
3781    vector in *OBSTACKP.  If FINISH, close off the vector and return
3782    its final address.  */
3783 
3784 static struct ada_symbol_info *
defns_collected(struct obstack * obstackp,int finish)3785 defns_collected (struct obstack *obstackp, int finish)
3786 {
3787   if (finish)
3788     return obstack_finish (obstackp);
3789   else
3790     return (struct ada_symbol_info *) obstack_base (obstackp);
3791 }
3792 
3793 /* Look, in partial_symtab PST, for symbol NAME in given namespace.
3794    Check the global symbols if GLOBAL, the static symbols if not.
3795    Do wild-card match if WILD.  */
3796 
3797 static struct partial_symbol *
ada_lookup_partial_symbol(struct partial_symtab * pst,const char * name,int global,domain_enum namespace,int wild)3798 ada_lookup_partial_symbol (struct partial_symtab *pst, const char *name,
3799                            int global, domain_enum namespace, int wild)
3800 {
3801   struct partial_symbol **start;
3802   int name_len = strlen (name);
3803   int length = (global ? pst->n_global_syms : pst->n_static_syms);
3804   int i;
3805 
3806   if (length == 0)
3807     {
3808       return (NULL);
3809     }
3810 
3811   start = (global ?
3812            pst->objfile->global_psymbols.list + pst->globals_offset :
3813            pst->objfile->static_psymbols.list + pst->statics_offset);
3814 
3815   if (wild)
3816     {
3817       for (i = 0; i < length; i += 1)
3818         {
3819           struct partial_symbol *psym = start[i];
3820 
3821           if (SYMBOL_DOMAIN (psym) == namespace
3822               && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (psym)))
3823             return psym;
3824         }
3825       return NULL;
3826     }
3827   else
3828     {
3829       if (global)
3830         {
3831           int U;
3832           i = 0;
3833           U = length - 1;
3834           while (U - i > 4)
3835             {
3836               int M = (U + i) >> 1;
3837               struct partial_symbol *psym = start[M];
3838               if (SYMBOL_LINKAGE_NAME (psym)[0] < name[0])
3839                 i = M + 1;
3840               else if (SYMBOL_LINKAGE_NAME (psym)[0] > name[0])
3841                 U = M - 1;
3842               else if (strcmp (SYMBOL_LINKAGE_NAME (psym), name) < 0)
3843                 i = M + 1;
3844               else
3845                 U = M;
3846             }
3847         }
3848       else
3849         i = 0;
3850 
3851       while (i < length)
3852         {
3853           struct partial_symbol *psym = start[i];
3854 
3855           if (SYMBOL_DOMAIN (psym) == namespace)
3856             {
3857               int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym), name_len);
3858 
3859               if (cmp < 0)
3860                 {
3861                   if (global)
3862                     break;
3863                 }
3864               else if (cmp == 0
3865                        && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
3866                                           + name_len))
3867                 return psym;
3868             }
3869           i += 1;
3870         }
3871 
3872       if (global)
3873         {
3874           int U;
3875           i = 0;
3876           U = length - 1;
3877           while (U - i > 4)
3878             {
3879               int M = (U + i) >> 1;
3880               struct partial_symbol *psym = start[M];
3881               if (SYMBOL_LINKAGE_NAME (psym)[0] < '_')
3882                 i = M + 1;
3883               else if (SYMBOL_LINKAGE_NAME (psym)[0] > '_')
3884                 U = M - 1;
3885               else if (strcmp (SYMBOL_LINKAGE_NAME (psym), "_ada_") < 0)
3886                 i = M + 1;
3887               else
3888                 U = M;
3889             }
3890         }
3891       else
3892         i = 0;
3893 
3894       while (i < length)
3895         {
3896           struct partial_symbol *psym = start[i];
3897 
3898           if (SYMBOL_DOMAIN (psym) == namespace)
3899             {
3900               int cmp;
3901 
3902               cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (psym)[0];
3903               if (cmp == 0)
3904                 {
3905                   cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (psym), 5);
3906                   if (cmp == 0)
3907                     cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym) + 5,
3908                                    name_len);
3909                 }
3910 
3911               if (cmp < 0)
3912                 {
3913                   if (global)
3914                     break;
3915                 }
3916               else if (cmp == 0
3917                        && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
3918                                           + name_len + 5))
3919                 return psym;
3920             }
3921           i += 1;
3922         }
3923     }
3924   return NULL;
3925 }
3926 
3927 /* Find a symbol table containing symbol SYM or NULL if none.  */
3928 
3929 static struct symtab *
symtab_for_sym(struct symbol * sym)3930 symtab_for_sym (struct symbol *sym)
3931 {
3932   struct symtab *s;
3933   struct objfile *objfile;
3934   struct block *b;
3935   struct symbol *tmp_sym;
3936   struct dict_iterator iter;
3937   int j;
3938 
3939   ALL_SYMTABS (objfile, s)
3940   {
3941     switch (SYMBOL_CLASS (sym))
3942       {
3943       case LOC_CONST:
3944       case LOC_STATIC:
3945       case LOC_TYPEDEF:
3946       case LOC_REGISTER:
3947       case LOC_LABEL:
3948       case LOC_BLOCK:
3949       case LOC_CONST_BYTES:
3950         b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3951         ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
3952           return s;
3953         b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3954         ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
3955           return s;
3956         break;
3957       default:
3958         break;
3959       }
3960     switch (SYMBOL_CLASS (sym))
3961       {
3962       case LOC_REGISTER:
3963       case LOC_ARG:
3964       case LOC_REF_ARG:
3965       case LOC_REGPARM:
3966       case LOC_REGPARM_ADDR:
3967       case LOC_LOCAL:
3968       case LOC_TYPEDEF:
3969       case LOC_LOCAL_ARG:
3970       case LOC_BASEREG:
3971       case LOC_BASEREG_ARG:
3972       case LOC_COMPUTED:
3973       case LOC_COMPUTED_ARG:
3974         for (j = FIRST_LOCAL_BLOCK;
3975              j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
3976           {
3977             b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
3978             ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
3979               return s;
3980           }
3981         break;
3982       default:
3983         break;
3984       }
3985   }
3986   return NULL;
3987 }
3988 
3989 /* Return a minimal symbol matching NAME according to Ada decoding
3990    rules.  Returns NULL if there is no such minimal symbol.  Names
3991    prefixed with "standard__" are handled specially: "standard__" is
3992    first stripped off, and only static and global symbols are searched.  */
3993 
3994 struct minimal_symbol *
ada_lookup_simple_minsym(const char * name)3995 ada_lookup_simple_minsym (const char *name)
3996 {
3997   struct objfile *objfile;
3998   struct minimal_symbol *msymbol;
3999   int wild_match;
4000 
4001   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4002     {
4003       name += sizeof ("standard__") - 1;
4004       wild_match = 0;
4005     }
4006   else
4007     wild_match = (strstr (name, "__") == NULL);
4008 
4009   ALL_MSYMBOLS (objfile, msymbol)
4010   {
4011     if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4012         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4013       return msymbol;
4014   }
4015 
4016   return NULL;
4017 }
4018 
4019 /* For all subprograms that statically enclose the subprogram of the
4020    selected frame, add symbols matching identifier NAME in DOMAIN
4021    and their blocks to the list of data in OBSTACKP, as for
4022    ada_add_block_symbols (q.v.).   If WILD, treat as NAME with a
4023    wildcard prefix.  */
4024 
4025 static void
add_symbols_from_enclosing_procs(struct obstack * obstackp,const char * name,domain_enum namespace,int wild_match)4026 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4027                                   const char *name, domain_enum namespace,
4028                                   int wild_match)
4029 {
4030 }
4031 
4032 /* FIXME: The next two routines belong in symtab.c */
4033 
4034 static void
restore_language(void * lang)4035 restore_language (void *lang)
4036 {
4037   set_language ((enum language) lang);
4038 }
4039 
4040 /* As for lookup_symbol, but performed as if the current language
4041    were LANG. */
4042 
4043 struct symbol *
lookup_symbol_in_language(const char * name,const struct block * block,domain_enum domain,enum language lang,int * is_a_field_of_this,struct symtab ** symtab)4044 lookup_symbol_in_language (const char *name, const struct block *block,
4045                            domain_enum domain, enum language lang,
4046                            int *is_a_field_of_this, struct symtab **symtab)
4047 {
4048   struct cleanup *old_chain
4049     = make_cleanup (restore_language, (void *) current_language->la_language);
4050   struct symbol *result;
4051   set_language (lang);
4052   result = lookup_symbol (name, block, domain, is_a_field_of_this, symtab);
4053   do_cleanups (old_chain);
4054   return result;
4055 }
4056 
4057 /* True if TYPE is definitely an artificial type supplied to a symbol
4058    for which no debugging information was given in the symbol file.  */
4059 
4060 static int
is_nondebugging_type(struct type * type)4061 is_nondebugging_type (struct type *type)
4062 {
4063   char *name = ada_type_name (type);
4064   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4065 }
4066 
4067 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4068    duplicate other symbols in the list (The only case I know of where
4069    this happens is when object files containing stabs-in-ecoff are
4070    linked with files containing ordinary ecoff debugging symbols (or no
4071    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4072    Returns the number of items in the modified list.  */
4073 
4074 static int
remove_extra_symbols(struct ada_symbol_info * syms,int nsyms)4075 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4076 {
4077   int i, j;
4078 
4079   i = 0;
4080   while (i < nsyms)
4081     {
4082       if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4083           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4084           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4085         {
4086           for (j = 0; j < nsyms; j += 1)
4087             {
4088               if (i != j
4089                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4090                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4091                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4092                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4093                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4094                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4095                 {
4096                   int k;
4097                   for (k = i + 1; k < nsyms; k += 1)
4098                     syms[k - 1] = syms[k];
4099                   nsyms -= 1;
4100                   goto NextSymbol;
4101                 }
4102             }
4103         }
4104       i += 1;
4105     NextSymbol:
4106       ;
4107     }
4108   return nsyms;
4109 }
4110 
4111 /* Given a type that corresponds to a renaming entity, use the type name
4112    to extract the scope (package name or function name, fully qualified,
4113    and following the GNAT encoding convention) where this renaming has been
4114    defined.  The string returned needs to be deallocated after use.  */
4115 
4116 static char *
xget_renaming_scope(struct type * renaming_type)4117 xget_renaming_scope (struct type *renaming_type)
4118 {
4119   /* The renaming types adhere to the following convention:
4120      <scope>__<rename>___<XR extension>.
4121      So, to extract the scope, we search for the "___XR" extension,
4122      and then backtrack until we find the first "__".  */
4123 
4124   const char *name = type_name_no_tag (renaming_type);
4125   char *suffix = strstr (name, "___XR");
4126   char *last;
4127   int scope_len;
4128   char *scope;
4129 
4130   /* Now, backtrack a bit until we find the first "__".  Start looking
4131      at suffix - 3, as the <rename> part is at least one character long.  */
4132 
4133   for (last = suffix - 3; last > name; last--)
4134     if (last[0] == '_' && last[1] == '_')
4135       break;
4136 
4137   /* Make a copy of scope and return it.  */
4138 
4139   scope_len = last - name;
4140   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4141 
4142   strncpy (scope, name, scope_len);
4143   scope[scope_len] = '\0';
4144 
4145   return scope;
4146 }
4147 
4148 /* Return nonzero if NAME corresponds to a package name.  */
4149 
4150 static int
is_package_name(const char * name)4151 is_package_name (const char *name)
4152 {
4153   /* Here, We take advantage of the fact that no symbols are generated
4154      for packages, while symbols are generated for each function.
4155      So the condition for NAME represent a package becomes equivalent
4156      to NAME not existing in our list of symbols.  There is only one
4157      small complication with library-level functions (see below).  */
4158 
4159   char *fun_name;
4160 
4161   /* If it is a function that has not been defined at library level,
4162      then we should be able to look it up in the symbols.  */
4163   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4164     return 0;
4165 
4166   /* Library-level function names start with "_ada_".  See if function
4167      "_ada_" followed by NAME can be found.  */
4168 
4169   /* Do a quick check that NAME does not contain "__", since library-level
4170      functions names can not contain "__" in them.  */
4171   if (strstr (name, "__") != NULL)
4172     return 0;
4173 
4174   fun_name = xstrprintf ("_ada_%s", name);
4175 
4176   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4177 }
4178 
4179 /* Return nonzero if SYM corresponds to a renaming entity that is
4180    visible from FUNCTION_NAME.  */
4181 
4182 static int
renaming_is_visible(const struct symbol * sym,char * function_name)4183 renaming_is_visible (const struct symbol *sym, char *function_name)
4184 {
4185   char *scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4186 
4187   make_cleanup (xfree, scope);
4188 
4189   /* If the rename has been defined in a package, then it is visible.  */
4190   if (is_package_name (scope))
4191     return 1;
4192 
4193   /* Check that the rename is in the current function scope by checking
4194      that its name starts with SCOPE.  */
4195 
4196   /* If the function name starts with "_ada_", it means that it is
4197      a library-level function.  Strip this prefix before doing the
4198      comparison, as the encoding for the renaming does not contain
4199      this prefix.  */
4200   if (strncmp (function_name, "_ada_", 5) == 0)
4201     function_name += 5;
4202 
4203   return (strncmp (function_name, scope, strlen (scope)) == 0);
4204 }
4205 
4206 /* Iterates over the SYMS list and remove any entry that corresponds to
4207    a renaming entity that is not visible from the function associated
4208    with CURRENT_BLOCK.
4209 
4210    Rationale:
4211    GNAT emits a type following a specified encoding for each renaming
4212    entity.  Unfortunately, STABS currently does not support the definition
4213    of types that are local to a given lexical block, so all renamings types
4214    are emitted at library level.  As a consequence, if an application
4215    contains two renaming entities using the same name, and a user tries to
4216    print the value of one of these entities, the result of the ada symbol
4217    lookup will also contain the wrong renaming type.
4218 
4219    This function partially covers for this limitation by attempting to
4220    remove from the SYMS list renaming symbols that should be visible
4221    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
4222    method with the current information available.  The implementation
4223    below has a couple of limitations (FIXME: brobecker-2003-05-12):
4224 
4225       - When the user tries to print a rename in a function while there
4226         is another rename entity defined in a package:  Normally, the
4227         rename in the function has precedence over the rename in the
4228         package, so the latter should be removed from the list.  This is
4229         currently not the case.
4230 
4231       - This function will incorrectly remove valid renames if
4232         the CURRENT_BLOCK corresponds to a function which symbol name
4233         has been changed by an "Export" pragma.  As a consequence,
4234         the user will be unable to print such rename entities.  */
4235 
4236 static int
remove_out_of_scope_renamings(struct ada_symbol_info * syms,int nsyms,struct block * current_block)4237 remove_out_of_scope_renamings (struct ada_symbol_info *syms,
4238                                int nsyms, struct block *current_block)
4239 {
4240   struct symbol *current_function;
4241   char *current_function_name;
4242   int i;
4243 
4244   /* Extract the function name associated to CURRENT_BLOCK.
4245      Abort if unable to do so.  */
4246 
4247   if (current_block == NULL)
4248     return nsyms;
4249 
4250   current_function = block_function (current_block);
4251   if (current_function == NULL)
4252     return nsyms;
4253 
4254   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4255   if (current_function_name == NULL)
4256     return nsyms;
4257 
4258   /* Check each of the symbols, and remove it from the list if it is
4259      a type corresponding to a renaming that is out of the scope of
4260      the current block.  */
4261 
4262   i = 0;
4263   while (i < nsyms)
4264     {
4265       if (ada_is_object_renaming (syms[i].sym)
4266           && !renaming_is_visible (syms[i].sym, current_function_name))
4267         {
4268           int j;
4269           for (j = i + 1; j < nsyms; j++)
4270             syms[j - 1] = syms[j];
4271           nsyms -= 1;
4272         }
4273       else
4274         i += 1;
4275     }
4276 
4277   return nsyms;
4278 }
4279 
4280 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4281    scope and in global scopes, returning the number of matches.  Sets
4282    *RESULTS to point to a vector of (SYM,BLOCK,SYMTAB) triples,
4283    indicating the symbols found and the blocks and symbol tables (if
4284    any) in which they were found.  This vector are transient---good only to
4285    the next call of ada_lookup_symbol_list.  Any non-function/non-enumeral
4286    symbol match within the nest of blocks whose innermost member is BLOCK0,
4287    is the one match returned (no other matches in that or
4288      enclosing blocks is returned).  If there are any matches in or
4289    surrounding BLOCK0, then these alone are returned.  Otherwise, the
4290    search extends to global and file-scope (static) symbol tables.
4291    Names prefixed with "standard__" are handled specially: "standard__"
4292    is first stripped off, and only static and global symbols are searched.  */
4293 
4294 int
ada_lookup_symbol_list(const char * name0,const struct block * block0,domain_enum namespace,struct ada_symbol_info ** results)4295 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4296                         domain_enum namespace,
4297                         struct ada_symbol_info **results)
4298 {
4299   struct symbol *sym;
4300   struct symtab *s;
4301   struct partial_symtab *ps;
4302   struct blockvector *bv;
4303   struct objfile *objfile;
4304   struct block *block;
4305   const char *name;
4306   struct minimal_symbol *msymbol;
4307   int wild_match;
4308   int cacheIfUnique;
4309   int block_depth;
4310   int ndefns;
4311 
4312   obstack_free (&symbol_list_obstack, NULL);
4313   obstack_init (&symbol_list_obstack);
4314 
4315   cacheIfUnique = 0;
4316 
4317   /* Search specified block and its superiors.  */
4318 
4319   wild_match = (strstr (name0, "__") == NULL);
4320   name = name0;
4321   block = (struct block *) block0;      /* FIXME: No cast ought to be
4322                                            needed, but adding const will
4323                                            have a cascade effect.  */
4324   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4325     {
4326       wild_match = 0;
4327       block = NULL;
4328       name = name0 + sizeof ("standard__") - 1;
4329     }
4330 
4331   block_depth = 0;
4332   while (block != NULL)
4333     {
4334       block_depth += 1;
4335       ada_add_block_symbols (&symbol_list_obstack, block, name,
4336                              namespace, NULL, NULL, wild_match);
4337 
4338       /* If we found a non-function match, assume that's the one.  */
4339       if (is_nonfunction (defns_collected (&symbol_list_obstack, 0),
4340                           num_defns_collected (&symbol_list_obstack)))
4341         goto done;
4342 
4343       block = BLOCK_SUPERBLOCK (block);
4344     }
4345 
4346   /* If no luck so far, try to find NAME as a local symbol in some lexically
4347      enclosing subprogram.  */
4348   if (num_defns_collected (&symbol_list_obstack) == 0 && block_depth > 2)
4349     add_symbols_from_enclosing_procs (&symbol_list_obstack,
4350                                       name, namespace, wild_match);
4351 
4352   /* If we found ANY matches among non-global symbols, we're done.  */
4353 
4354   if (num_defns_collected (&symbol_list_obstack) > 0)
4355     goto done;
4356 
4357   cacheIfUnique = 1;
4358   if (lookup_cached_symbol (name0, namespace, &sym, &block, &s))
4359     {
4360       if (sym != NULL)
4361         add_defn_to_vec (&symbol_list_obstack, sym, block, s);
4362       goto done;
4363     }
4364 
4365   /* Now add symbols from all global blocks: symbol tables, minimal symbol
4366      tables, and psymtab's.  */
4367 
4368   ALL_SYMTABS (objfile, s)
4369   {
4370     QUIT;
4371     if (!s->primary)
4372       continue;
4373     bv = BLOCKVECTOR (s);
4374     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4375     ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4376                            objfile, s, wild_match);
4377   }
4378 
4379   if (namespace == VAR_DOMAIN)
4380     {
4381       ALL_MSYMBOLS (objfile, msymbol)
4382       {
4383         if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match))
4384           {
4385             switch (MSYMBOL_TYPE (msymbol))
4386               {
4387               case mst_solib_trampoline:
4388                 break;
4389               default:
4390                 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
4391                 if (s != NULL)
4392                   {
4393                     int ndefns0 = num_defns_collected (&symbol_list_obstack);
4394                     QUIT;
4395                     bv = BLOCKVECTOR (s);
4396                     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4397                     ada_add_block_symbols (&symbol_list_obstack, block,
4398                                            SYMBOL_LINKAGE_NAME (msymbol),
4399                                            namespace, objfile, s, wild_match);
4400 
4401                     if (num_defns_collected (&symbol_list_obstack) == ndefns0)
4402                       {
4403                         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4404                         ada_add_block_symbols (&symbol_list_obstack, block,
4405                                                SYMBOL_LINKAGE_NAME (msymbol),
4406                                                namespace, objfile, s,
4407                                                wild_match);
4408                       }
4409                   }
4410               }
4411           }
4412       }
4413     }
4414 
4415   ALL_PSYMTABS (objfile, ps)
4416   {
4417     QUIT;
4418     if (!ps->readin
4419         && ada_lookup_partial_symbol (ps, name, 1, namespace, wild_match))
4420       {
4421         s = PSYMTAB_TO_SYMTAB (ps);
4422         if (!s->primary)
4423           continue;
4424         bv = BLOCKVECTOR (s);
4425         block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4426         ada_add_block_symbols (&symbol_list_obstack, block, name,
4427                                namespace, objfile, s, wild_match);
4428       }
4429   }
4430 
4431   /* Now add symbols from all per-file blocks if we've gotten no hits
4432      (Not strictly correct, but perhaps better than an error).
4433      Do the symtabs first, then check the psymtabs.  */
4434 
4435   if (num_defns_collected (&symbol_list_obstack) == 0)
4436     {
4437 
4438       ALL_SYMTABS (objfile, s)
4439       {
4440         QUIT;
4441         if (!s->primary)
4442           continue;
4443         bv = BLOCKVECTOR (s);
4444         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4445         ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4446                                objfile, s, wild_match);
4447       }
4448 
4449       ALL_PSYMTABS (objfile, ps)
4450       {
4451         QUIT;
4452         if (!ps->readin
4453             && ada_lookup_partial_symbol (ps, name, 0, namespace, wild_match))
4454           {
4455             s = PSYMTAB_TO_SYMTAB (ps);
4456             bv = BLOCKVECTOR (s);
4457             if (!s->primary)
4458               continue;
4459             block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4460             ada_add_block_symbols (&symbol_list_obstack, block, name,
4461                                    namespace, objfile, s, wild_match);
4462           }
4463       }
4464     }
4465 
4466 done:
4467   ndefns = num_defns_collected (&symbol_list_obstack);
4468   *results = defns_collected (&symbol_list_obstack, 1);
4469 
4470   ndefns = remove_extra_symbols (*results, ndefns);
4471 
4472   if (ndefns == 0)
4473     cache_symbol (name0, namespace, NULL, NULL, NULL);
4474 
4475   if (ndefns == 1 && cacheIfUnique)
4476     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block,
4477                   (*results)[0].symtab);
4478 
4479   ndefns = remove_out_of_scope_renamings (*results, ndefns,
4480                                           (struct block *) block0);
4481 
4482   return ndefns;
4483 }
4484 
4485 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4486    scope and in global scopes, or NULL if none.  NAME is folded and
4487    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
4488    choosing the first symbol if there are multiple choices.
4489    *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4490    table in which the symbol was found (in both cases, these
4491    assignments occur only if the pointers are non-null).  */
4492 
4493 struct symbol *
ada_lookup_symbol(const char * name,const struct block * block0,domain_enum namespace,int * is_a_field_of_this,struct symtab ** symtab)4494 ada_lookup_symbol (const char *name, const struct block *block0,
4495                    domain_enum namespace, int *is_a_field_of_this,
4496                    struct symtab **symtab)
4497 {
4498   struct ada_symbol_info *candidates;
4499   int n_candidates;
4500 
4501   n_candidates = ada_lookup_symbol_list (ada_encode (ada_fold_name (name)),
4502                                          block0, namespace, &candidates);
4503 
4504   if (n_candidates == 0)
4505     return NULL;
4506 
4507   if (is_a_field_of_this != NULL)
4508     *is_a_field_of_this = 0;
4509 
4510   if (symtab != NULL)
4511     {
4512       *symtab = candidates[0].symtab;
4513       if (*symtab == NULL && candidates[0].block != NULL)
4514         {
4515           struct objfile *objfile;
4516           struct symtab *s;
4517           struct block *b;
4518           struct blockvector *bv;
4519 
4520           /* Search the list of symtabs for one which contains the
4521              address of the start of this block.  */
4522           ALL_SYMTABS (objfile, s)
4523           {
4524             bv = BLOCKVECTOR (s);
4525             b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4526             if (BLOCK_START (b) <= BLOCK_START (candidates[0].block)
4527                 && BLOCK_END (b) > BLOCK_START (candidates[0].block))
4528               {
4529                 *symtab = s;
4530                 return fixup_symbol_section (candidates[0].sym, objfile);
4531               }
4532             return fixup_symbol_section (candidates[0].sym, NULL);
4533           }
4534         }
4535     }
4536   return candidates[0].sym;
4537 }
4538 
4539 static struct symbol *
ada_lookup_symbol_nonlocal(const char * name,const char * linkage_name,const struct block * block,const domain_enum domain,struct symtab ** symtab)4540 ada_lookup_symbol_nonlocal (const char *name,
4541                             const char *linkage_name,
4542                             const struct block *block,
4543                             const domain_enum domain, struct symtab **symtab)
4544 {
4545   if (linkage_name == NULL)
4546     linkage_name = name;
4547   return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
4548                             NULL, symtab);
4549 }
4550 
4551 
4552 /* True iff STR is a possible encoded suffix of a normal Ada name
4553    that is to be ignored for matching purposes.  Suffixes of parallel
4554    names (e.g., XVE) are not included here.  Currently, the possible suffixes
4555    are given by either of the regular expression:
4556 
4557    (__[0-9]+)?\.[0-9]+  [nested subprogram suffix, on platforms such
4558                          as GNU/Linux]
4559    ___[0-9]+            [nested subprogram suffix, on platforms such as HP/UX]
4560    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
4561  */
4562 
4563 static int
is_name_suffix(const char * str)4564 is_name_suffix (const char *str)
4565 {
4566   int k;
4567   const char *matching;
4568   const int len = strlen (str);
4569 
4570   /* (__[0-9]+)?\.[0-9]+ */
4571   matching = str;
4572   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4573     {
4574       matching += 3;
4575       while (isdigit (matching[0]))
4576         matching += 1;
4577       if (matching[0] == '\0')
4578         return 1;
4579     }
4580 
4581   if (matching[0] == '.')
4582     {
4583       matching += 1;
4584       while (isdigit (matching[0]))
4585         matching += 1;
4586       if (matching[0] == '\0')
4587         return 1;
4588     }
4589 
4590   /* ___[0-9]+ */
4591   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4592     {
4593       matching = str + 3;
4594       while (isdigit (matching[0]))
4595         matching += 1;
4596       if (matching[0] == '\0')
4597         return 1;
4598     }
4599 
4600   /* ??? We should not modify STR directly, as we are doing below.  This
4601      is fine in this case, but may become problematic later if we find
4602      that this alternative did not work, and want to try matching
4603      another one from the begining of STR.  Since we modified it, we
4604      won't be able to find the begining of the string anymore!  */
4605   if (str[0] == 'X')
4606     {
4607       str += 1;
4608       while (str[0] != '_' && str[0] != '\0')
4609         {
4610           if (str[0] != 'n' && str[0] != 'b')
4611             return 0;
4612           str += 1;
4613         }
4614     }
4615   if (str[0] == '\000')
4616     return 1;
4617   if (str[0] == '_')
4618     {
4619       if (str[1] != '_' || str[2] == '\000')
4620         return 0;
4621       if (str[2] == '_')
4622         {
4623           if (strcmp (str + 3, "JM") == 0)
4624             return 1;
4625           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
4626              the LJM suffix in favor of the JM one.  But we will
4627              still accept LJM as a valid suffix for a reasonable
4628              amount of time, just to allow ourselves to debug programs
4629              compiled using an older version of GNAT.  */
4630           if (strcmp (str + 3, "LJM") == 0)
4631             return 1;
4632           if (str[3] != 'X')
4633             return 0;
4634           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
4635               || str[4] == 'U' || str[4] == 'P')
4636             return 1;
4637           if (str[4] == 'R' && str[5] != 'T')
4638             return 1;
4639           return 0;
4640         }
4641       if (!isdigit (str[2]))
4642         return 0;
4643       for (k = 3; str[k] != '\0'; k += 1)
4644         if (!isdigit (str[k]) && str[k] != '_')
4645           return 0;
4646       return 1;
4647     }
4648   if (str[0] == '$' && isdigit (str[1]))
4649     {
4650       for (k = 2; str[k] != '\0'; k += 1)
4651         if (!isdigit (str[k]) && str[k] != '_')
4652           return 0;
4653       return 1;
4654     }
4655   return 0;
4656 }
4657 
4658 /* Return nonzero if the given string starts with a dot ('.')
4659    followed by zero or more digits.
4660 
4661    Note: brobecker/2003-11-10: A forward declaration has not been
4662    added at the begining of this file yet, because this function
4663    is only used to work around a problem found during wild matching
4664    when trying to match minimal symbol names against symbol names
4665    obtained from dwarf-2 data.  This function is therefore currently
4666    only used in wild_match() and is likely to be deleted when the
4667    problem in dwarf-2 is fixed.  */
4668 
4669 static int
is_dot_digits_suffix(const char * str)4670 is_dot_digits_suffix (const char *str)
4671 {
4672   if (str[0] != '.')
4673     return 0;
4674 
4675   str++;
4676   while (isdigit (str[0]))
4677     str++;
4678   return (str[0] == '\0');
4679 }
4680 
4681 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
4682    PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1.  Ignores
4683    informational suffixes of NAME (i.e., for which is_name_suffix is
4684    true).  */
4685 
4686 static int
wild_match(const char * patn0,int patn_len,const char * name0)4687 wild_match (const char *patn0, int patn_len, const char *name0)
4688 {
4689   int name_len;
4690   char *name;
4691   char *patn;
4692 
4693   /* FIXME: brobecker/2003-11-10: For some reason, the symbol name
4694      stored in the symbol table for nested function names is sometimes
4695      different from the name of the associated entity stored in
4696      the dwarf-2 data: This is the case for nested subprograms, where
4697      the minimal symbol name contains a trailing ".[:digit:]+" suffix,
4698      while the symbol name from the dwarf-2 data does not.
4699 
4700      Although the DWARF-2 standard documents that entity names stored
4701      in the dwarf-2 data should be identical to the name as seen in
4702      the source code, GNAT takes a different approach as we already use
4703      a special encoding mechanism to convey the information so that
4704      a C debugger can still use the information generated to debug
4705      Ada programs.  A corollary is that the symbol names in the dwarf-2
4706      data should match the names found in the symbol table.  I therefore
4707      consider this issue as a compiler defect.
4708 
4709      Until the compiler is properly fixed, we work-around the problem
4710      by ignoring such suffixes during the match.  We do so by making
4711      a copy of PATN0 and NAME0, and then by stripping such a suffix
4712      if present.  We then perform the match on the resulting strings.  */
4713   {
4714     char *dot;
4715     name_len = strlen (name0);
4716 
4717     name = (char *) alloca ((name_len + 1) * sizeof (char));
4718     strcpy (name, name0);
4719     dot = strrchr (name, '.');
4720     if (dot != NULL && is_dot_digits_suffix (dot))
4721       *dot = '\0';
4722 
4723     patn = (char *) alloca ((patn_len + 1) * sizeof (char));
4724     strncpy (patn, patn0, patn_len);
4725     patn[patn_len] = '\0';
4726     dot = strrchr (patn, '.');
4727     if (dot != NULL && is_dot_digits_suffix (dot))
4728       {
4729         *dot = '\0';
4730         patn_len = dot - patn;
4731       }
4732   }
4733 
4734   /* Now perform the wild match.  */
4735 
4736   name_len = strlen (name);
4737   if (name_len >= patn_len + 5 && strncmp (name, "_ada_", 5) == 0
4738       && strncmp (patn, name + 5, patn_len) == 0
4739       && is_name_suffix (name + patn_len + 5))
4740     return 1;
4741 
4742   while (name_len >= patn_len)
4743     {
4744       if (strncmp (patn, name, patn_len) == 0
4745           && is_name_suffix (name + patn_len))
4746         return 1;
4747       do
4748         {
4749           name += 1;
4750           name_len -= 1;
4751         }
4752       while (name_len > 0
4753              && name[0] != '.' && (name[0] != '_' || name[1] != '_'));
4754       if (name_len <= 0)
4755         return 0;
4756       if (name[0] == '_')
4757         {
4758           if (!islower (name[2]))
4759             return 0;
4760           name += 2;
4761           name_len -= 2;
4762         }
4763       else
4764         {
4765           if (!islower (name[1]))
4766             return 0;
4767           name += 1;
4768           name_len -= 1;
4769         }
4770     }
4771 
4772   return 0;
4773 }
4774 
4775 
4776 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
4777    vector *defn_symbols, updating the list of symbols in OBSTACKP
4778    (if necessary).  If WILD, treat as NAME with a wildcard prefix.
4779    OBJFILE is the section containing BLOCK.
4780    SYMTAB is recorded with each symbol added.  */
4781 
4782 static void
ada_add_block_symbols(struct obstack * obstackp,struct block * block,const char * name,domain_enum domain,struct objfile * objfile,struct symtab * symtab,int wild)4783 ada_add_block_symbols (struct obstack *obstackp,
4784                        struct block *block, const char *name,
4785                        domain_enum domain, struct objfile *objfile,
4786                        struct symtab *symtab, int wild)
4787 {
4788   struct dict_iterator iter;
4789   int name_len = strlen (name);
4790   /* A matching argument symbol, if any.  */
4791   struct symbol *arg_sym;
4792   /* Set true when we find a matching non-argument symbol.  */
4793   int found_sym;
4794   struct symbol *sym;
4795 
4796   arg_sym = NULL;
4797   found_sym = 0;
4798   if (wild)
4799     {
4800       struct symbol *sym;
4801       ALL_BLOCK_SYMBOLS (block, iter, sym)
4802       {
4803         if (SYMBOL_DOMAIN (sym) == domain
4804             && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
4805           {
4806             switch (SYMBOL_CLASS (sym))
4807               {
4808               case LOC_ARG:
4809               case LOC_LOCAL_ARG:
4810               case LOC_REF_ARG:
4811               case LOC_REGPARM:
4812               case LOC_REGPARM_ADDR:
4813               case LOC_BASEREG_ARG:
4814               case LOC_COMPUTED_ARG:
4815                 arg_sym = sym;
4816                 break;
4817               case LOC_UNRESOLVED:
4818                 continue;
4819               default:
4820                 found_sym = 1;
4821                 add_defn_to_vec (obstackp,
4822                                  fixup_symbol_section (sym, objfile),
4823                                  block, symtab);
4824                 break;
4825               }
4826           }
4827       }
4828     }
4829   else
4830     {
4831       ALL_BLOCK_SYMBOLS (block, iter, sym)
4832       {
4833         if (SYMBOL_DOMAIN (sym) == domain)
4834           {
4835             int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
4836             if (cmp == 0
4837                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
4838               {
4839                 switch (SYMBOL_CLASS (sym))
4840                   {
4841                   case LOC_ARG:
4842                   case LOC_LOCAL_ARG:
4843                   case LOC_REF_ARG:
4844                   case LOC_REGPARM:
4845                   case LOC_REGPARM_ADDR:
4846                   case LOC_BASEREG_ARG:
4847                   case LOC_COMPUTED_ARG:
4848                     arg_sym = sym;
4849                     break;
4850                   case LOC_UNRESOLVED:
4851                     break;
4852                   default:
4853                     found_sym = 1;
4854                     add_defn_to_vec (obstackp,
4855                                      fixup_symbol_section (sym, objfile),
4856                                      block, symtab);
4857                     break;
4858                   }
4859               }
4860           }
4861       }
4862     }
4863 
4864   if (!found_sym && arg_sym != NULL)
4865     {
4866       add_defn_to_vec (obstackp,
4867                        fixup_symbol_section (arg_sym, objfile),
4868                        block, symtab);
4869     }
4870 
4871   if (!wild)
4872     {
4873       arg_sym = NULL;
4874       found_sym = 0;
4875 
4876       ALL_BLOCK_SYMBOLS (block, iter, sym)
4877       {
4878         if (SYMBOL_DOMAIN (sym) == domain)
4879           {
4880             int cmp;
4881 
4882             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
4883             if (cmp == 0)
4884               {
4885                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
4886                 if (cmp == 0)
4887                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
4888                                  name_len);
4889               }
4890 
4891             if (cmp == 0
4892                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
4893               {
4894                 switch (SYMBOL_CLASS (sym))
4895                   {
4896                   case LOC_ARG:
4897                   case LOC_LOCAL_ARG:
4898                   case LOC_REF_ARG:
4899                   case LOC_REGPARM:
4900                   case LOC_REGPARM_ADDR:
4901                   case LOC_BASEREG_ARG:
4902                   case LOC_COMPUTED_ARG:
4903                     arg_sym = sym;
4904                     break;
4905                   case LOC_UNRESOLVED:
4906                     break;
4907                   default:
4908                     found_sym = 1;
4909                     add_defn_to_vec (obstackp,
4910                                      fixup_symbol_section (sym, objfile),
4911                                      block, symtab);
4912                     break;
4913                   }
4914               }
4915           }
4916       }
4917 
4918       /* NOTE: This really shouldn't be needed for _ada_ symbols.
4919          They aren't parameters, right?  */
4920       if (!found_sym && arg_sym != NULL)
4921         {
4922           add_defn_to_vec (obstackp,
4923                            fixup_symbol_section (arg_sym, objfile),
4924                            block, symtab);
4925         }
4926     }
4927 }
4928 
4929                                 /* Field Access */
4930 
4931 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
4932    to be invisible to users.  */
4933 
4934 int
ada_is_ignored_field(struct type * type,int field_num)4935 ada_is_ignored_field (struct type *type, int field_num)
4936 {
4937   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
4938     return 1;
4939   else
4940     {
4941       const char *name = TYPE_FIELD_NAME (type, field_num);
4942       return (name == NULL
4943               || (name[0] == '_' && strncmp (name, "_parent", 7) != 0));
4944     }
4945 }
4946 
4947 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
4948    pointer or reference type whose ultimate target has a tag field. */
4949 
4950 int
ada_is_tagged_type(struct type * type,int refok)4951 ada_is_tagged_type (struct type *type, int refok)
4952 {
4953   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
4954 }
4955 
4956 /* True iff TYPE represents the type of X'Tag */
4957 
4958 int
ada_is_tag_type(struct type * type)4959 ada_is_tag_type (struct type *type)
4960 {
4961   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
4962     return 0;
4963   else
4964     {
4965       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
4966       return (name != NULL
4967               && strcmp (name, "ada__tags__dispatch_table") == 0);
4968     }
4969 }
4970 
4971 /* The type of the tag on VAL.  */
4972 
4973 struct type *
ada_tag_type(struct value * val)4974 ada_tag_type (struct value *val)
4975 {
4976   return ada_lookup_struct_elt_type (VALUE_TYPE (val), "_tag", 1, 0, NULL);
4977 }
4978 
4979 /* The value of the tag on VAL.  */
4980 
4981 struct value *
ada_value_tag(struct value * val)4982 ada_value_tag (struct value *val)
4983 {
4984   return ada_value_struct_elt (val, "_tag", "record");
4985 }
4986 
4987 /* The value of the tag on the object of type TYPE whose contents are
4988    saved at VALADDR, if it is non-null, or is at memory address
4989    ADDRESS. */
4990 
4991 static struct value *
value_tag_from_contents_and_address(struct type * type,char * valaddr,CORE_ADDR address)4992 value_tag_from_contents_and_address (struct type *type, char *valaddr,
4993                                      CORE_ADDR address)
4994 {
4995   int tag_byte_offset, dummy1, dummy2;
4996   struct type *tag_type;
4997   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
4998                          &dummy1, &dummy2))
4999     {
5000       char *valaddr1 = (valaddr == NULL) ? NULL : valaddr + tag_byte_offset;
5001       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
5002 
5003       return value_from_contents_and_address (tag_type, valaddr1, address1);
5004     }
5005   return NULL;
5006 }
5007 
5008 static struct type *
type_from_tag(struct value * tag)5009 type_from_tag (struct value *tag)
5010 {
5011   const char *type_name = ada_tag_name (tag);
5012   if (type_name != NULL)
5013     return ada_find_any_type (ada_encode (type_name));
5014   return NULL;
5015 }
5016 
5017 struct tag_args
5018 {
5019   struct value *tag;
5020   char *name;
5021 };
5022 
5023 /* Wrapper function used by ada_tag_name.  Given a struct tag_args*
5024    value ARGS, sets ARGS->name to the tag name of ARGS->tag.
5025    The value stored in ARGS->name is valid until the next call to
5026    ada_tag_name_1.  */
5027 
5028 static int
ada_tag_name_1(void * args0)5029 ada_tag_name_1 (void *args0)
5030 {
5031   struct tag_args *args = (struct tag_args *) args0;
5032   static char name[1024];
5033   char *p;
5034   struct value *val;
5035   args->name = NULL;
5036   val = ada_value_struct_elt (args->tag, "tsd", NULL);
5037   if (val == NULL)
5038     return 0;
5039   val = ada_value_struct_elt (val, "expanded_name", NULL);
5040   if (val == NULL)
5041     return 0;
5042   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5043   for (p = name; *p != '\0'; p += 1)
5044     if (isalpha (*p))
5045       *p = tolower (*p);
5046   args->name = name;
5047   return 0;
5048 }
5049 
5050 /* The type name of the dynamic type denoted by the 'tag value TAG, as
5051  * a C string.  */
5052 
5053 const char *
ada_tag_name(struct value * tag)5054 ada_tag_name (struct value *tag)
5055 {
5056   struct tag_args args;
5057   if (!ada_is_tag_type (VALUE_TYPE (tag)))
5058     return NULL;
5059   args.tag = tag;
5060   args.name = NULL;
5061   catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5062   return args.name;
5063 }
5064 
5065 /* The parent type of TYPE, or NULL if none.  */
5066 
5067 struct type *
ada_parent_type(struct type * type)5068 ada_parent_type (struct type *type)
5069 {
5070   int i;
5071 
5072   type = ada_check_typedef (type);
5073 
5074   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5075     return NULL;
5076 
5077   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5078     if (ada_is_parent_field (type, i))
5079       return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5080 
5081   return NULL;
5082 }
5083 
5084 /* True iff field number FIELD_NUM of structure type TYPE contains the
5085    parent-type (inherited) fields of a derived type.  Assumes TYPE is
5086    a structure type with at least FIELD_NUM+1 fields.  */
5087 
5088 int
ada_is_parent_field(struct type * type,int field_num)5089 ada_is_parent_field (struct type *type, int field_num)
5090 {
5091   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5092   return (name != NULL
5093           && (strncmp (name, "PARENT", 6) == 0
5094               || strncmp (name, "_parent", 7) == 0));
5095 }
5096 
5097 /* True iff field number FIELD_NUM of structure type TYPE is a
5098    transparent wrapper field (which should be silently traversed when doing
5099    field selection and flattened when printing).  Assumes TYPE is a
5100    structure type with at least FIELD_NUM+1 fields.  Such fields are always
5101    structures.  */
5102 
5103 int
ada_is_wrapper_field(struct type * type,int field_num)5104 ada_is_wrapper_field (struct type *type, int field_num)
5105 {
5106   const char *name = TYPE_FIELD_NAME (type, field_num);
5107   return (name != NULL
5108           && (strncmp (name, "PARENT", 6) == 0
5109               || strcmp (name, "REP") == 0
5110               || strncmp (name, "_parent", 7) == 0
5111               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5112 }
5113 
5114 /* True iff field number FIELD_NUM of structure or union type TYPE
5115    is a variant wrapper.  Assumes TYPE is a structure type with at least
5116    FIELD_NUM+1 fields.  */
5117 
5118 int
ada_is_variant_part(struct type * type,int field_num)5119 ada_is_variant_part (struct type *type, int field_num)
5120 {
5121   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5122   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5123           || (is_dynamic_field (type, field_num)
5124               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
5125 		  == TYPE_CODE_UNION)));
5126 }
5127 
5128 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5129    whose discriminants are contained in the record type OUTER_TYPE,
5130    returns the type of the controlling discriminant for the variant.  */
5131 
5132 struct type *
ada_variant_discrim_type(struct type * var_type,struct type * outer_type)5133 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5134 {
5135   char *name = ada_variant_discrim_name (var_type);
5136   struct type *type =
5137     ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
5138   if (type == NULL)
5139     return builtin_type_int;
5140   else
5141     return type;
5142 }
5143 
5144 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5145    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5146    represents a 'when others' clause; otherwise 0.  */
5147 
5148 int
ada_is_others_clause(struct type * type,int field_num)5149 ada_is_others_clause (struct type *type, int field_num)
5150 {
5151   const char *name = TYPE_FIELD_NAME (type, field_num);
5152   return (name != NULL && name[0] == 'O');
5153 }
5154 
5155 /* Assuming that TYPE0 is the type of the variant part of a record,
5156    returns the name of the discriminant controlling the variant.
5157    The value is valid until the next call to ada_variant_discrim_name.  */
5158 
5159 char *
ada_variant_discrim_name(struct type * type0)5160 ada_variant_discrim_name (struct type *type0)
5161 {
5162   static char *result = NULL;
5163   static size_t result_len = 0;
5164   struct type *type;
5165   const char *name;
5166   const char *discrim_end;
5167   const char *discrim_start;
5168 
5169   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5170     type = TYPE_TARGET_TYPE (type0);
5171   else
5172     type = type0;
5173 
5174   name = ada_type_name (type);
5175 
5176   if (name == NULL || name[0] == '\000')
5177     return "";
5178 
5179   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5180        discrim_end -= 1)
5181     {
5182       if (strncmp (discrim_end, "___XVN", 6) == 0)
5183         break;
5184     }
5185   if (discrim_end == name)
5186     return "";
5187 
5188   for (discrim_start = discrim_end; discrim_start != name + 3;
5189        discrim_start -= 1)
5190     {
5191       if (discrim_start == name + 1)
5192         return "";
5193       if ((discrim_start > name + 3
5194            && strncmp (discrim_start - 3, "___", 3) == 0)
5195           || discrim_start[-1] == '.')
5196         break;
5197     }
5198 
5199   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5200   strncpy (result, discrim_start, discrim_end - discrim_start);
5201   result[discrim_end - discrim_start] = '\0';
5202   return result;
5203 }
5204 
5205 /* Scan STR for a subtype-encoded number, beginning at position K.
5206    Put the position of the character just past the number scanned in
5207    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
5208    Return 1 if there was a valid number at the given position, and 0
5209    otherwise.  A "subtype-encoded" number consists of the absolute value
5210    in decimal, followed by the letter 'm' to indicate a negative number.
5211    Assumes 0m does not occur.  */
5212 
5213 int
ada_scan_number(const char str[],int k,LONGEST * R,int * new_k)5214 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
5215 {
5216   ULONGEST RU;
5217 
5218   if (!isdigit (str[k]))
5219     return 0;
5220 
5221   /* Do it the hard way so as not to make any assumption about
5222      the relationship of unsigned long (%lu scan format code) and
5223      LONGEST.  */
5224   RU = 0;
5225   while (isdigit (str[k]))
5226     {
5227       RU = RU * 10 + (str[k] - '0');
5228       k += 1;
5229     }
5230 
5231   if (str[k] == 'm')
5232     {
5233       if (R != NULL)
5234         *R = (-(LONGEST) (RU - 1)) - 1;
5235       k += 1;
5236     }
5237   else if (R != NULL)
5238     *R = (LONGEST) RU;
5239 
5240   /* NOTE on the above: Technically, C does not say what the results of
5241      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5242      number representable as a LONGEST (although either would probably work
5243      in most implementations).  When RU>0, the locution in the then branch
5244      above is always equivalent to the negative of RU.  */
5245 
5246   if (new_k != NULL)
5247     *new_k = k;
5248   return 1;
5249 }
5250 
5251 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5252    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5253    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
5254 
5255 int
ada_in_variant(LONGEST val,struct type * type,int field_num)5256 ada_in_variant (LONGEST val, struct type *type, int field_num)
5257 {
5258   const char *name = TYPE_FIELD_NAME (type, field_num);
5259   int p;
5260 
5261   p = 0;
5262   while (1)
5263     {
5264       switch (name[p])
5265         {
5266         case '\0':
5267           return 0;
5268         case 'S':
5269           {
5270             LONGEST W;
5271             if (!ada_scan_number (name, p + 1, &W, &p))
5272               return 0;
5273             if (val == W)
5274               return 1;
5275             break;
5276           }
5277         case 'R':
5278           {
5279             LONGEST L, U;
5280             if (!ada_scan_number (name, p + 1, &L, &p)
5281                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
5282               return 0;
5283             if (val >= L && val <= U)
5284               return 1;
5285             break;
5286           }
5287         case 'O':
5288           return 1;
5289         default:
5290           return 0;
5291         }
5292     }
5293 }
5294 
5295 /* FIXME: Lots of redundancy below.  Try to consolidate. */
5296 
5297 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
5298    ARG_TYPE, extract and return the value of one of its (non-static)
5299    fields.  FIELDNO says which field.   Differs from value_primitive_field
5300    only in that it can handle packed values of arbitrary type.  */
5301 
5302 static struct value *
ada_value_primitive_field(struct value * arg1,int offset,int fieldno,struct type * arg_type)5303 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
5304                            struct type *arg_type)
5305 {
5306   struct type *type;
5307 
5308   arg_type = ada_check_typedef (arg_type);
5309   type = TYPE_FIELD_TYPE (arg_type, fieldno);
5310 
5311   /* Handle packed fields.  */
5312 
5313   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5314     {
5315       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5316       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
5317 
5318       return ada_value_primitive_packed_val (arg1, VALUE_CONTENTS (arg1),
5319                                              offset + bit_pos / 8,
5320                                              bit_pos % 8, bit_size, type);
5321     }
5322   else
5323     return value_primitive_field (arg1, offset, fieldno, arg_type);
5324 }
5325 
5326 /* Find field with name NAME in object of type TYPE.  If found, return 1
5327    after setting *FIELD_TYPE_P to the field's type, *BYTE_OFFSET_P to
5328    OFFSET + the byte offset of the field within an object of that type,
5329    *BIT_OFFSET_P to the bit offset modulo byte size of the field, and
5330    *BIT_SIZE_P to its size in bits if the field is packed, and 0 otherwise.
5331    Looks inside wrappers for the field.  Returns 0 if field not
5332    found. */
5333 static int
find_struct_field(char * name,struct type * type,int offset,struct type ** field_type_p,int * byte_offset_p,int * bit_offset_p,int * bit_size_p)5334 find_struct_field (char *name, struct type *type, int offset,
5335                    struct type **field_type_p,
5336                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p)
5337 {
5338   int i;
5339 
5340   type = ada_check_typedef (type);
5341   *field_type_p = NULL;
5342   *byte_offset_p = *bit_offset_p = *bit_size_p = 0;
5343 
5344   for (i = TYPE_NFIELDS (type) - 1; i >= 0; i -= 1)
5345     {
5346       int bit_pos = TYPE_FIELD_BITPOS (type, i);
5347       int fld_offset = offset + bit_pos / 8;
5348       char *t_field_name = TYPE_FIELD_NAME (type, i);
5349 
5350       if (t_field_name == NULL)
5351         continue;
5352 
5353       else if (field_name_match (t_field_name, name))
5354         {
5355           int bit_size = TYPE_FIELD_BITSIZE (type, i);
5356           *field_type_p = TYPE_FIELD_TYPE (type, i);
5357           *byte_offset_p = fld_offset;
5358           *bit_offset_p = bit_pos % 8;
5359           *bit_size_p = bit_size;
5360           return 1;
5361         }
5362       else if (ada_is_wrapper_field (type, i))
5363         {
5364           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
5365                                  field_type_p, byte_offset_p, bit_offset_p,
5366                                  bit_size_p))
5367             return 1;
5368         }
5369       else if (ada_is_variant_part (type, i))
5370         {
5371           int j;
5372           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5373 
5374           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5375             {
5376               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
5377                                      fld_offset
5378                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
5379                                      field_type_p, byte_offset_p,
5380                                      bit_offset_p, bit_size_p))
5381                 return 1;
5382             }
5383         }
5384     }
5385   return 0;
5386 }
5387 
5388 
5389 
5390 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
5391    and search in it assuming it has (class) type TYPE.
5392    If found, return value, else return NULL.
5393 
5394    Searches recursively through wrapper fields (e.g., '_parent').  */
5395 
5396 static struct value *
ada_search_struct_field(char * name,struct value * arg,int offset,struct type * type)5397 ada_search_struct_field (char *name, struct value *arg, int offset,
5398                          struct type *type)
5399 {
5400   int i;
5401   type = ada_check_typedef (type);
5402 
5403   for (i = TYPE_NFIELDS (type) - 1; i >= 0; i -= 1)
5404     {
5405       char *t_field_name = TYPE_FIELD_NAME (type, i);
5406 
5407       if (t_field_name == NULL)
5408         continue;
5409 
5410       else if (field_name_match (t_field_name, name))
5411         return ada_value_primitive_field (arg, offset, i, type);
5412 
5413       else if (ada_is_wrapper_field (type, i))
5414         {
5415           struct value *v =     /* Do not let indent join lines here. */
5416             ada_search_struct_field (name, arg,
5417                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
5418                                      TYPE_FIELD_TYPE (type, i));
5419           if (v != NULL)
5420             return v;
5421         }
5422 
5423       else if (ada_is_variant_part (type, i))
5424         {
5425           int j;
5426           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5427           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
5428 
5429           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5430             {
5431               struct value *v = ada_search_struct_field /* Force line break.  */
5432                 (name, arg,
5433                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
5434                  TYPE_FIELD_TYPE (field_type, j));
5435               if (v != NULL)
5436                 return v;
5437             }
5438         }
5439     }
5440   return NULL;
5441 }
5442 
5443 /* Given ARG, a value of type (pointer or reference to a)*
5444    structure/union, extract the component named NAME from the ultimate
5445    target structure/union and return it as a value with its
5446    appropriate type.  If ARG is a pointer or reference and the field
5447    is not packed, returns a reference to the field, otherwise the
5448    value of the field (an lvalue if ARG is an lvalue).
5449 
5450    The routine searches for NAME among all members of the structure itself
5451    and (recursively) among all members of any wrapper members
5452    (e.g., '_parent').
5453 
5454    ERR is a name (for use in error messages) that identifies the class
5455    of entity that ARG is supposed to be.  ERR may be null, indicating
5456    that on error, the function simply returns NULL, and does not
5457    throw an error.  (FIXME: True only if ARG is a pointer or reference
5458    at the moment). */
5459 
5460 struct value *
ada_value_struct_elt(struct value * arg,char * name,char * err)5461 ada_value_struct_elt (struct value *arg, char *name, char *err)
5462 {
5463   struct type *t, *t1;
5464   struct value *v;
5465 
5466   v = NULL;
5467   t1 = t = ada_check_typedef (VALUE_TYPE (arg));
5468   if (TYPE_CODE (t) == TYPE_CODE_REF)
5469     {
5470       t1 = TYPE_TARGET_TYPE (t);
5471       if (t1 == NULL)
5472         {
5473           if (err == NULL)
5474             return NULL;
5475           else
5476             error ("Bad value type in a %s.", err);
5477         }
5478       t1 = ada_check_typedef (t1);
5479       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
5480         {
5481           COERCE_REF (arg);
5482           t = t1;
5483         }
5484     }
5485 
5486   while (TYPE_CODE (t) == TYPE_CODE_PTR)
5487     {
5488       t1 = TYPE_TARGET_TYPE (t);
5489       if (t1 == NULL)
5490         {
5491           if (err == NULL)
5492             return NULL;
5493           else
5494             error ("Bad value type in a %s.", err);
5495         }
5496       t1 = ada_check_typedef (t1);
5497       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
5498         {
5499           arg = value_ind (arg);
5500           t = t1;
5501         }
5502       else
5503         break;
5504     }
5505 
5506   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
5507     {
5508       if (err == NULL)
5509         return NULL;
5510       else
5511         error ("Attempt to extract a component of a value that is not a %s.",
5512                err);
5513     }
5514 
5515   if (t1 == t)
5516     v = ada_search_struct_field (name, arg, 0, t);
5517   else
5518     {
5519       int bit_offset, bit_size, byte_offset;
5520       struct type *field_type;
5521       CORE_ADDR address;
5522 
5523       if (TYPE_CODE (t) == TYPE_CODE_PTR)
5524         address = value_as_address (arg);
5525       else
5526         address = unpack_pointer (t, VALUE_CONTENTS (arg));
5527 
5528       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL);
5529       if (find_struct_field (name, t1, 0,
5530                              &field_type, &byte_offset, &bit_offset,
5531                              &bit_size))
5532         {
5533           if (bit_size != 0)
5534             {
5535               if (TYPE_CODE (t) == TYPE_CODE_REF)
5536                 arg = ada_coerce_ref (arg);
5537               else
5538                 arg = ada_value_ind (arg);
5539               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
5540                                                   bit_offset, bit_size,
5541                                                   field_type);
5542             }
5543           else
5544             v = value_from_pointer (lookup_reference_type (field_type),
5545                                     address + byte_offset);
5546         }
5547     }
5548 
5549   if (v == NULL && err != NULL)
5550     error ("There is no member named %s.", name);
5551 
5552   return v;
5553 }
5554 
5555 /* Given a type TYPE, look up the type of the component of type named NAME.
5556    If DISPP is non-null, add its byte displacement from the beginning of a
5557    structure (pointed to by a value) of type TYPE to *DISPP (does not
5558    work for packed fields).
5559 
5560    Matches any field whose name has NAME as a prefix, possibly
5561    followed by "___".
5562 
5563    TYPE can be either a struct or union. If REFOK, TYPE may also
5564    be a (pointer or reference)+ to a struct or union, and the
5565    ultimate target type will be searched.
5566 
5567    Looks recursively into variant clauses and parent types.
5568 
5569    If NOERR is nonzero, return NULL if NAME is not suitably defined or
5570    TYPE is not a type of the right kind.  */
5571 
5572 static struct type *
ada_lookup_struct_elt_type(struct type * type,char * name,int refok,int noerr,int * dispp)5573 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
5574                             int noerr, int *dispp)
5575 {
5576   int i;
5577 
5578   if (name == NULL)
5579     goto BadName;
5580 
5581   if (refok && type != NULL)
5582     while (1)
5583       {
5584         type = ada_check_typedef (type);
5585         if (TYPE_CODE (type) != TYPE_CODE_PTR
5586             && TYPE_CODE (type) != TYPE_CODE_REF)
5587           break;
5588         type = TYPE_TARGET_TYPE (type);
5589       }
5590 
5591   if (type == NULL
5592       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
5593           && TYPE_CODE (type) != TYPE_CODE_UNION))
5594     {
5595       if (noerr)
5596         return NULL;
5597       else
5598         {
5599           target_terminal_ours ();
5600           gdb_flush (gdb_stdout);
5601           fprintf_unfiltered (gdb_stderr, "Type ");
5602           if (type == NULL)
5603             fprintf_unfiltered (gdb_stderr, "(null)");
5604           else
5605             type_print (type, "", gdb_stderr, -1);
5606           error (" is not a structure or union type");
5607         }
5608     }
5609 
5610   type = to_static_fixed_type (type);
5611 
5612   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5613     {
5614       char *t_field_name = TYPE_FIELD_NAME (type, i);
5615       struct type *t;
5616       int disp;
5617 
5618       if (t_field_name == NULL)
5619         continue;
5620 
5621       else if (field_name_match (t_field_name, name))
5622         {
5623           if (dispp != NULL)
5624             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
5625           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5626         }
5627 
5628       else if (ada_is_wrapper_field (type, i))
5629         {
5630           disp = 0;
5631           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
5632                                           0, 1, &disp);
5633           if (t != NULL)
5634             {
5635               if (dispp != NULL)
5636                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5637               return t;
5638             }
5639         }
5640 
5641       else if (ada_is_variant_part (type, i))
5642         {
5643           int j;
5644           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5645 
5646           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5647             {
5648               disp = 0;
5649               t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
5650                                               name, 0, 1, &disp);
5651               if (t != NULL)
5652                 {
5653                   if (dispp != NULL)
5654                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5655                   return t;
5656                 }
5657             }
5658         }
5659 
5660     }
5661 
5662 BadName:
5663   if (!noerr)
5664     {
5665       target_terminal_ours ();
5666       gdb_flush (gdb_stdout);
5667       fprintf_unfiltered (gdb_stderr, "Type ");
5668       type_print (type, "", gdb_stderr, -1);
5669       fprintf_unfiltered (gdb_stderr, " has no component named ");
5670       error ("%s", name == NULL ? "<null>" : name);
5671     }
5672 
5673   return NULL;
5674 }
5675 
5676 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
5677    within a value of type OUTER_TYPE that is stored in GDB at
5678    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
5679    numbering from 0) is applicable.  Returns -1 if none are.  */
5680 
5681 int
ada_which_variant_applies(struct type * var_type,struct type * outer_type,char * outer_valaddr)5682 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
5683                            char *outer_valaddr)
5684 {
5685   int others_clause;
5686   int i;
5687   int disp;
5688   struct type *discrim_type;
5689   char *discrim_name = ada_variant_discrim_name (var_type);
5690   LONGEST discrim_val;
5691 
5692   disp = 0;
5693   discrim_type =
5694     ada_lookup_struct_elt_type (outer_type, discrim_name, 1, 1, &disp);
5695   if (discrim_type == NULL)
5696     return -1;
5697   discrim_val = unpack_long (discrim_type, outer_valaddr + disp);
5698 
5699   others_clause = -1;
5700   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
5701     {
5702       if (ada_is_others_clause (var_type, i))
5703         others_clause = i;
5704       else if (ada_in_variant (discrim_val, var_type, i))
5705         return i;
5706     }
5707 
5708   return others_clause;
5709 }
5710 
5711 
5712 
5713                                 /* Dynamic-Sized Records */
5714 
5715 /* Strategy: The type ostensibly attached to a value with dynamic size
5716    (i.e., a size that is not statically recorded in the debugging
5717    data) does not accurately reflect the size or layout of the value.
5718    Our strategy is to convert these values to values with accurate,
5719    conventional types that are constructed on the fly.  */
5720 
5721 /* There is a subtle and tricky problem here.  In general, we cannot
5722    determine the size of dynamic records without its data.  However,
5723    the 'struct value' data structure, which GDB uses to represent
5724    quantities in the inferior process (the target), requires the size
5725    of the type at the time of its allocation in order to reserve space
5726    for GDB's internal copy of the data.  That's why the
5727    'to_fixed_xxx_type' routines take (target) addresses as parameters,
5728    rather than struct value*s.
5729 
5730    However, GDB's internal history variables ($1, $2, etc.) are
5731    struct value*s containing internal copies of the data that are not, in
5732    general, the same as the data at their corresponding addresses in
5733    the target.  Fortunately, the types we give to these values are all
5734    conventional, fixed-size types (as per the strategy described
5735    above), so that we don't usually have to perform the
5736    'to_fixed_xxx_type' conversions to look at their values.
5737    Unfortunately, there is one exception: if one of the internal
5738    history variables is an array whose elements are unconstrained
5739    records, then we will need to create distinct fixed types for each
5740    element selected.  */
5741 
5742 /* The upshot of all of this is that many routines take a (type, host
5743    address, target address) triple as arguments to represent a value.
5744    The host address, if non-null, is supposed to contain an internal
5745    copy of the relevant data; otherwise, the program is to consult the
5746    target at the target address.  */
5747 
5748 /* Assuming that VAL0 represents a pointer value, the result of
5749    dereferencing it.  Differs from value_ind in its treatment of
5750    dynamic-sized types.  */
5751 
5752 struct value *
ada_value_ind(struct value * val0)5753 ada_value_ind (struct value *val0)
5754 {
5755   struct value *val = unwrap_value (value_ind (val0));
5756   return ada_to_fixed_value (val);
5757 }
5758 
5759 /* The value resulting from dereferencing any "reference to"
5760    qualifiers on VAL0.  */
5761 
5762 static struct value *
ada_coerce_ref(struct value * val0)5763 ada_coerce_ref (struct value *val0)
5764 {
5765   if (TYPE_CODE (VALUE_TYPE (val0)) == TYPE_CODE_REF)
5766     {
5767       struct value *val = val0;
5768       COERCE_REF (val);
5769       val = unwrap_value (val);
5770       return ada_to_fixed_value (val);
5771     }
5772   else
5773     return val0;
5774 }
5775 
5776 /* Return OFF rounded upward if necessary to a multiple of
5777    ALIGNMENT (a power of 2).  */
5778 
5779 static unsigned int
align_value(unsigned int off,unsigned int alignment)5780 align_value (unsigned int off, unsigned int alignment)
5781 {
5782   return (off + alignment - 1) & ~(alignment - 1);
5783 }
5784 
5785 /* Return the bit alignment required for field #F of template type TYPE.  */
5786 
5787 static unsigned int
field_alignment(struct type * type,int f)5788 field_alignment (struct type *type, int f)
5789 {
5790   const char *name = TYPE_FIELD_NAME (type, f);
5791   int len = (name == NULL) ? 0 : strlen (name);
5792   int align_offset;
5793 
5794   if (!isdigit (name[len - 1]))
5795     return 1;
5796 
5797   if (isdigit (name[len - 2]))
5798     align_offset = len - 2;
5799   else
5800     align_offset = len - 1;
5801 
5802   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
5803     return TARGET_CHAR_BIT;
5804 
5805   return atoi (name + align_offset) * TARGET_CHAR_BIT;
5806 }
5807 
5808 /* Find a symbol named NAME.  Ignores ambiguity.  */
5809 
5810 struct symbol *
ada_find_any_symbol(const char * name)5811 ada_find_any_symbol (const char *name)
5812 {
5813   struct symbol *sym;
5814 
5815   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
5816   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5817     return sym;
5818 
5819   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
5820   return sym;
5821 }
5822 
5823 /* Find a type named NAME.  Ignores ambiguity.  */
5824 
5825 struct type *
ada_find_any_type(const char * name)5826 ada_find_any_type (const char *name)
5827 {
5828   struct symbol *sym = ada_find_any_symbol (name);
5829 
5830   if (sym != NULL)
5831     return SYMBOL_TYPE (sym);
5832 
5833   return NULL;
5834 }
5835 
5836 /* Given a symbol NAME and its associated BLOCK, search all symbols
5837    for its ___XR counterpart, which is the ``renaming'' symbol
5838    associated to NAME.  Return this symbol if found, return
5839    NULL otherwise.  */
5840 
5841 struct symbol *
ada_find_renaming_symbol(const char * name,struct block * block)5842 ada_find_renaming_symbol (const char *name, struct block *block)
5843 {
5844   const struct symbol *function_sym = block_function (block);
5845   char *rename;
5846 
5847   if (function_sym != NULL)
5848     {
5849       /* If the symbol is defined inside a function, NAME is not fully
5850          qualified.  This means we need to prepend the function name
5851          as well as adding the ``___XR'' suffix to build the name of
5852          the associated renaming symbol.  */
5853       char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
5854       const int function_name_len = strlen (function_name);
5855       const int rename_len = function_name_len + 2      /*  "__" */
5856         + strlen (name) + 6 /* "___XR\0" */ ;
5857 
5858       /* Library-level functions are a special case, as GNAT adds
5859          a ``_ada_'' prefix to the function name to avoid namespace
5860          pollution.  However, the renaming symbol themselves do not
5861          have this prefix, so we need to skip this prefix if present.  */
5862       if (function_name_len > 5 /* "_ada_" */
5863           && strstr (function_name, "_ada_") == function_name)
5864         function_name = function_name + 5;
5865 
5866       rename = (char *) alloca (rename_len * sizeof (char));
5867       sprintf (rename, "%s__%s___XR", function_name, name);
5868     }
5869   else
5870     {
5871       const int rename_len = strlen (name) + 6;
5872       rename = (char *) alloca (rename_len * sizeof (char));
5873       sprintf (rename, "%s___XR", name);
5874     }
5875 
5876   return ada_find_any_symbol (rename);
5877 }
5878 
5879 /* Because of GNAT encoding conventions, several GDB symbols may match a
5880    given type name.  If the type denoted by TYPE0 is to be preferred to
5881    that of TYPE1 for purposes of type printing, return non-zero;
5882    otherwise return 0.  */
5883 
5884 int
ada_prefer_type(struct type * type0,struct type * type1)5885 ada_prefer_type (struct type *type0, struct type *type1)
5886 {
5887   if (type1 == NULL)
5888     return 1;
5889   else if (type0 == NULL)
5890     return 0;
5891   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
5892     return 1;
5893   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
5894     return 0;
5895   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
5896     return 1;
5897   else if (ada_is_packed_array_type (type0))
5898     return 1;
5899   else if (ada_is_array_descriptor_type (type0)
5900            && !ada_is_array_descriptor_type (type1))
5901     return 1;
5902   else if (ada_renaming_type (type0) != NULL
5903            && ada_renaming_type (type1) == NULL)
5904     return 1;
5905   return 0;
5906 }
5907 
5908 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
5909    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
5910 
5911 char *
ada_type_name(struct type * type)5912 ada_type_name (struct type *type)
5913 {
5914   if (type == NULL)
5915     return NULL;
5916   else if (TYPE_NAME (type) != NULL)
5917     return TYPE_NAME (type);
5918   else
5919     return TYPE_TAG_NAME (type);
5920 }
5921 
5922 /* Find a parallel type to TYPE whose name is formed by appending
5923    SUFFIX to the name of TYPE.  */
5924 
5925 struct type *
ada_find_parallel_type(struct type * type,const char * suffix)5926 ada_find_parallel_type (struct type *type, const char *suffix)
5927 {
5928   static char *name;
5929   static size_t name_len = 0;
5930   int len;
5931   char *typename = ada_type_name (type);
5932 
5933   if (typename == NULL)
5934     return NULL;
5935 
5936   len = strlen (typename);
5937 
5938   GROW_VECT (name, name_len, len + strlen (suffix) + 1);
5939 
5940   strcpy (name, typename);
5941   strcpy (name + len, suffix);
5942 
5943   return ada_find_any_type (name);
5944 }
5945 
5946 
5947 /* If TYPE is a variable-size record type, return the corresponding template
5948    type describing its fields.  Otherwise, return NULL.  */
5949 
5950 static struct type *
dynamic_template_type(struct type * type)5951 dynamic_template_type (struct type *type)
5952 {
5953   type = ada_check_typedef (type);
5954 
5955   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
5956       || ada_type_name (type) == NULL)
5957     return NULL;
5958   else
5959     {
5960       int len = strlen (ada_type_name (type));
5961       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
5962         return type;
5963       else
5964         return ada_find_parallel_type (type, "___XVE");
5965     }
5966 }
5967 
5968 /* Assuming that TEMPL_TYPE is a union or struct type, returns
5969    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
5970 
5971 static int
is_dynamic_field(struct type * templ_type,int field_num)5972 is_dynamic_field (struct type *templ_type, int field_num)
5973 {
5974   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5975   return name != NULL
5976     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
5977     && strstr (name, "___XVL") != NULL;
5978 }
5979 
5980 /* The index of the variant field of TYPE, or -1 if TYPE does not
5981    represent a variant record type.  */
5982 
5983 static int
variant_field_index(struct type * type)5984 variant_field_index (struct type *type)
5985 {
5986   int f;
5987 
5988   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5989     return -1;
5990 
5991   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
5992     {
5993       if (ada_is_variant_part (type, f))
5994         return f;
5995     }
5996   return -1;
5997 }
5998 
5999 /* A record type with no fields.  */
6000 
6001 static struct type *
empty_record(struct objfile * objfile)6002 empty_record (struct objfile *objfile)
6003 {
6004   struct type *type = alloc_type (objfile);
6005   TYPE_CODE (type) = TYPE_CODE_STRUCT;
6006   TYPE_NFIELDS (type) = 0;
6007   TYPE_FIELDS (type) = NULL;
6008   TYPE_NAME (type) = "<empty>";
6009   TYPE_TAG_NAME (type) = NULL;
6010   TYPE_FLAGS (type) = 0;
6011   TYPE_LENGTH (type) = 0;
6012   return type;
6013 }
6014 
6015 /* An ordinary record type (with fixed-length fields) that describes
6016    the value of type TYPE at VALADDR or ADDRESS (see comments at
6017    the beginning of this section) VAL according to GNAT conventions.
6018    DVAL0 should describe the (portion of a) record that contains any
6019    necessary discriminants.  It should be NULL if VALUE_TYPE (VAL) is
6020    an outer-level type (i.e., as opposed to a branch of a variant.)  A
6021    variant field (unless unchecked) is replaced by a particular branch
6022    of the variant.
6023 
6024    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
6025    length are not statically known are discarded.  As a consequence,
6026    VALADDR, ADDRESS and DVAL0 are ignored.
6027 
6028    NOTE: Limitations: For now, we assume that dynamic fields and
6029    variants occupy whole numbers of bytes.  However, they need not be
6030    byte-aligned.  */
6031 
6032 struct type *
ada_template_to_fixed_record_type_1(struct type * type,char * valaddr,CORE_ADDR address,struct value * dval0,int keep_dynamic_fields)6033 ada_template_to_fixed_record_type_1 (struct type *type, char *valaddr,
6034                                      CORE_ADDR address, struct value *dval0,
6035                                      int keep_dynamic_fields)
6036 {
6037   struct value *mark = value_mark ();
6038   struct value *dval;
6039   struct type *rtype;
6040   int nfields, bit_len;
6041   int variant_field;
6042   long off;
6043   int fld_bit_len, bit_incr;
6044   int f;
6045 
6046   /* Compute the number of fields in this record type that are going
6047      to be processed: unless keep_dynamic_fields, this includes only
6048      fields whose position and length are static will be processed.  */
6049   if (keep_dynamic_fields)
6050     nfields = TYPE_NFIELDS (type);
6051   else
6052     {
6053       nfields = 0;
6054       while (nfields < TYPE_NFIELDS (type)
6055              && !ada_is_variant_part (type, nfields)
6056              && !is_dynamic_field (type, nfields))
6057         nfields++;
6058     }
6059 
6060   rtype = alloc_type (TYPE_OBJFILE (type));
6061   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6062   INIT_CPLUS_SPECIFIC (rtype);
6063   TYPE_NFIELDS (rtype) = nfields;
6064   TYPE_FIELDS (rtype) = (struct field *)
6065     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6066   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6067   TYPE_NAME (rtype) = ada_type_name (type);
6068   TYPE_TAG_NAME (rtype) = NULL;
6069   TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
6070 
6071   off = 0;
6072   bit_len = 0;
6073   variant_field = -1;
6074 
6075   for (f = 0; f < nfields; f += 1)
6076     {
6077       off = align_value (off, field_alignment (type, f))
6078 	+ TYPE_FIELD_BITPOS (type, f);
6079       TYPE_FIELD_BITPOS (rtype, f) = off;
6080       TYPE_FIELD_BITSIZE (rtype, f) = 0;
6081 
6082       if (ada_is_variant_part (type, f))
6083         {
6084           variant_field = f;
6085           fld_bit_len = bit_incr = 0;
6086         }
6087       else if (is_dynamic_field (type, f))
6088         {
6089           if (dval0 == NULL)
6090             dval = value_from_contents_and_address (rtype, valaddr, address);
6091           else
6092             dval = dval0;
6093 
6094           TYPE_FIELD_TYPE (rtype, f) =
6095             ada_to_fixed_type
6096             (ada_get_base_type
6097              (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
6098              cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6099              cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6100           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6101           bit_incr = fld_bit_len =
6102             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6103         }
6104       else
6105         {
6106           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
6107           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6108           if (TYPE_FIELD_BITSIZE (type, f) > 0)
6109             bit_incr = fld_bit_len =
6110               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6111           else
6112             bit_incr = fld_bit_len =
6113               TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
6114         }
6115       if (off + fld_bit_len > bit_len)
6116         bit_len = off + fld_bit_len;
6117       off += bit_incr;
6118       TYPE_LENGTH (rtype) =
6119         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6120     }
6121 
6122   /* We handle the variant part, if any, at the end because of certain
6123      odd cases in which it is re-ordered so as NOT the last field of
6124      the record.  This can happen in the presence of representation
6125      clauses.  */
6126   if (variant_field >= 0)
6127     {
6128       struct type *branch_type;
6129 
6130       off = TYPE_FIELD_BITPOS (rtype, variant_field);
6131 
6132       if (dval0 == NULL)
6133         dval = value_from_contents_and_address (rtype, valaddr, address);
6134       else
6135         dval = dval0;
6136 
6137       branch_type =
6138         to_fixed_variant_branch_type
6139         (TYPE_FIELD_TYPE (type, variant_field),
6140          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6141          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6142       if (branch_type == NULL)
6143         {
6144           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
6145             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
6146           TYPE_NFIELDS (rtype) -= 1;
6147         }
6148       else
6149         {
6150           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
6151           TYPE_FIELD_NAME (rtype, variant_field) = "S";
6152           fld_bit_len =
6153             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
6154             TARGET_CHAR_BIT;
6155           if (off + fld_bit_len > bit_len)
6156             bit_len = off + fld_bit_len;
6157           TYPE_LENGTH (rtype) =
6158             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6159         }
6160     }
6161 
6162   /* According to exp_dbug.ads, the size of TYPE for variable-size records
6163      should contain the alignment of that record, which should be a strictly
6164      positive value.  If null or negative, then something is wrong, most
6165      probably in the debug info.  In that case, we don't round up the size
6166      of the resulting type. If this record is not part of another structure,
6167      the current RTYPE length might be good enough for our purposes.  */
6168   if (TYPE_LENGTH (type) <= 0)
6169     {
6170       warning ("Invalid type size for `%s' detected: %d.",
6171                TYPE_NAME (rtype) ? TYPE_NAME (rtype) : "<unnamed>",
6172                TYPE_LENGTH (type));
6173     }
6174   else
6175     {
6176       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
6177                                          TYPE_LENGTH (type));
6178     }
6179 
6180   value_free_to_mark (mark);
6181   if (TYPE_LENGTH (rtype) > varsize_limit)
6182     error ("record type with dynamic size is larger than varsize-limit");
6183   return rtype;
6184 }
6185 
6186 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
6187    of 1.  */
6188 
6189 static struct type *
template_to_fixed_record_type(struct type * type,char * valaddr,CORE_ADDR address,struct value * dval0)6190 template_to_fixed_record_type (struct type *type, char *valaddr,
6191                                CORE_ADDR address, struct value *dval0)
6192 {
6193   return ada_template_to_fixed_record_type_1 (type, valaddr,
6194                                               address, dval0, 1);
6195 }
6196 
6197 /* An ordinary record type in which ___XVL-convention fields and
6198    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
6199    static approximations, containing all possible fields.  Uses
6200    no runtime values.  Useless for use in values, but that's OK,
6201    since the results are used only for type determinations.   Works on both
6202    structs and unions.  Representation note: to save space, we memorize
6203    the result of this function in the TYPE_TARGET_TYPE of the
6204    template type.  */
6205 
6206 static struct type *
template_to_static_fixed_type(struct type * type0)6207 template_to_static_fixed_type (struct type *type0)
6208 {
6209   struct type *type;
6210   int nfields;
6211   int f;
6212 
6213   if (TYPE_TARGET_TYPE (type0) != NULL)
6214     return TYPE_TARGET_TYPE (type0);
6215 
6216   nfields = TYPE_NFIELDS (type0);
6217   type = type0;
6218 
6219   for (f = 0; f < nfields; f += 1)
6220     {
6221       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
6222       struct type *new_type;
6223 
6224       if (is_dynamic_field (type0, f))
6225         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
6226       else
6227         new_type = to_static_fixed_type (field_type);
6228       if (type == type0 && new_type != field_type)
6229         {
6230           TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
6231           TYPE_CODE (type) = TYPE_CODE (type0);
6232           INIT_CPLUS_SPECIFIC (type);
6233           TYPE_NFIELDS (type) = nfields;
6234           TYPE_FIELDS (type) = (struct field *)
6235             TYPE_ALLOC (type, nfields * sizeof (struct field));
6236           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
6237                   sizeof (struct field) * nfields);
6238           TYPE_NAME (type) = ada_type_name (type0);
6239           TYPE_TAG_NAME (type) = NULL;
6240           TYPE_FLAGS (type) |= TYPE_FLAG_FIXED_INSTANCE;
6241           TYPE_LENGTH (type) = 0;
6242         }
6243       TYPE_FIELD_TYPE (type, f) = new_type;
6244       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
6245     }
6246   return type;
6247 }
6248 
6249 /* Given an object of type TYPE whose contents are at VALADDR and
6250    whose address in memory is ADDRESS, returns a revision of TYPE --
6251    a non-dynamic-sized record with a variant part -- in which
6252    the variant part is replaced with the appropriate branch.  Looks
6253    for discriminant values in DVAL0, which can be NULL if the record
6254    contains the necessary discriminant values.  */
6255 
6256 static struct type *
to_record_with_fixed_variant_part(struct type * type,char * valaddr,CORE_ADDR address,struct value * dval0)6257 to_record_with_fixed_variant_part (struct type *type, char *valaddr,
6258                                    CORE_ADDR address, struct value *dval0)
6259 {
6260   struct value *mark = value_mark ();
6261   struct value *dval;
6262   struct type *rtype;
6263   struct type *branch_type;
6264   int nfields = TYPE_NFIELDS (type);
6265   int variant_field = variant_field_index (type);
6266 
6267   if (variant_field == -1)
6268     return type;
6269 
6270   if (dval0 == NULL)
6271     dval = value_from_contents_and_address (type, valaddr, address);
6272   else
6273     dval = dval0;
6274 
6275   rtype = alloc_type (TYPE_OBJFILE (type));
6276   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6277   INIT_CPLUS_SPECIFIC (rtype);
6278   TYPE_NFIELDS (rtype) = nfields;
6279   TYPE_FIELDS (rtype) =
6280     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6281   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
6282           sizeof (struct field) * nfields);
6283   TYPE_NAME (rtype) = ada_type_name (type);
6284   TYPE_TAG_NAME (rtype) = NULL;
6285   TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
6286   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
6287 
6288   branch_type = to_fixed_variant_branch_type
6289     (TYPE_FIELD_TYPE (type, variant_field),
6290      cond_offset_host (valaddr,
6291                        TYPE_FIELD_BITPOS (type, variant_field)
6292                        / TARGET_CHAR_BIT),
6293      cond_offset_target (address,
6294                          TYPE_FIELD_BITPOS (type, variant_field)
6295                          / TARGET_CHAR_BIT), dval);
6296   if (branch_type == NULL)
6297     {
6298       int f;
6299       for (f = variant_field + 1; f < nfields; f += 1)
6300         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
6301       TYPE_NFIELDS (rtype) -= 1;
6302     }
6303   else
6304     {
6305       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
6306       TYPE_FIELD_NAME (rtype, variant_field) = "S";
6307       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
6308       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
6309     }
6310   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
6311 
6312   value_free_to_mark (mark);
6313   return rtype;
6314 }
6315 
6316 /* An ordinary record type (with fixed-length fields) that describes
6317    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
6318    beginning of this section].   Any necessary discriminants' values
6319    should be in DVAL, a record value; it may be NULL if the object
6320    at ADDR itself contains any necessary discriminant values.
6321    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
6322    values from the record are needed.  Except in the case that DVAL,
6323    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
6324    unchecked) is replaced by a particular branch of the variant.
6325 
6326    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
6327    is questionable and may be removed.  It can arise during the
6328    processing of an unconstrained-array-of-record type where all the
6329    variant branches have exactly the same size.  This is because in
6330    such cases, the compiler does not bother to use the XVS convention
6331    when encoding the record.  I am currently dubious of this
6332    shortcut and suspect the compiler should be altered.  FIXME.  */
6333 
6334 static struct type *
to_fixed_record_type(struct type * type0,char * valaddr,CORE_ADDR address,struct value * dval)6335 to_fixed_record_type (struct type *type0, char *valaddr,
6336                       CORE_ADDR address, struct value *dval)
6337 {
6338   struct type *templ_type;
6339 
6340   if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6341     return type0;
6342 
6343   templ_type = dynamic_template_type (type0);
6344 
6345   if (templ_type != NULL)
6346     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
6347   else if (variant_field_index (type0) >= 0)
6348     {
6349       if (dval == NULL && valaddr == NULL && address == 0)
6350         return type0;
6351       return to_record_with_fixed_variant_part (type0, valaddr, address,
6352                                                 dval);
6353     }
6354   else
6355     {
6356       TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE;
6357       return type0;
6358     }
6359 
6360 }
6361 
6362 /* An ordinary record type (with fixed-length fields) that describes
6363    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
6364    union type.  Any necessary discriminants' values should be in DVAL,
6365    a record value.  That is, this routine selects the appropriate
6366    branch of the union at ADDR according to the discriminant value
6367    indicated in the union's type name.  */
6368 
6369 static struct type *
to_fixed_variant_branch_type(struct type * var_type0,char * valaddr,CORE_ADDR address,struct value * dval)6370 to_fixed_variant_branch_type (struct type *var_type0, char *valaddr,
6371                               CORE_ADDR address, struct value *dval)
6372 {
6373   int which;
6374   struct type *templ_type;
6375   struct type *var_type;
6376 
6377   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
6378     var_type = TYPE_TARGET_TYPE (var_type0);
6379   else
6380     var_type = var_type0;
6381 
6382   templ_type = ada_find_parallel_type (var_type, "___XVU");
6383 
6384   if (templ_type != NULL)
6385     var_type = templ_type;
6386 
6387   which =
6388     ada_which_variant_applies (var_type,
6389                                VALUE_TYPE (dval), VALUE_CONTENTS (dval));
6390 
6391   if (which < 0)
6392     return empty_record (TYPE_OBJFILE (var_type));
6393   else if (is_dynamic_field (var_type, which))
6394     return to_fixed_record_type
6395       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
6396        valaddr, address, dval);
6397   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
6398     return
6399       to_fixed_record_type
6400       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
6401   else
6402     return TYPE_FIELD_TYPE (var_type, which);
6403 }
6404 
6405 /* Assuming that TYPE0 is an array type describing the type of a value
6406    at ADDR, and that DVAL describes a record containing any
6407    discriminants used in TYPE0, returns a type for the value that
6408    contains no dynamic components (that is, no components whose sizes
6409    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
6410    true, gives an error message if the resulting type's size is over
6411    varsize_limit.  */
6412 
6413 static struct type *
to_fixed_array_type(struct type * type0,struct value * dval,int ignore_too_big)6414 to_fixed_array_type (struct type *type0, struct value *dval,
6415                      int ignore_too_big)
6416 {
6417   struct type *index_type_desc;
6418   struct type *result;
6419 
6420   if (ada_is_packed_array_type (type0)  /* revisit? */
6421       || (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
6422     return type0;
6423 
6424   index_type_desc = ada_find_parallel_type (type0, "___XA");
6425   if (index_type_desc == NULL)
6426     {
6427       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
6428       /* NOTE: elt_type---the fixed version of elt_type0---should never
6429          depend on the contents of the array in properly constructed
6430          debugging data.  */
6431       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval);
6432 
6433       if (elt_type0 == elt_type)
6434         result = type0;
6435       else
6436         result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6437                                     elt_type, TYPE_INDEX_TYPE (type0));
6438     }
6439   else
6440     {
6441       int i;
6442       struct type *elt_type0;
6443 
6444       elt_type0 = type0;
6445       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
6446         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
6447 
6448       /* NOTE: result---the fixed version of elt_type0---should never
6449          depend on the contents of the array in properly constructed
6450          debugging data.  */
6451       result = ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval);
6452       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
6453         {
6454           struct type *range_type =
6455             to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
6456                                  dval, TYPE_OBJFILE (type0));
6457           result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6458                                       result, range_type);
6459         }
6460       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
6461         error ("array type with dynamic size is larger than varsize-limit");
6462     }
6463 
6464   TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE;
6465   return result;
6466 }
6467 
6468 
6469 /* A standard type (containing no dynamically sized components)
6470    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
6471    DVAL describes a record containing any discriminants used in TYPE0,
6472    and may be NULL if there are none, or if the object of type TYPE at
6473    ADDRESS or in VALADDR contains these discriminants.  */
6474 
6475 struct type *
ada_to_fixed_type(struct type * type,char * valaddr,CORE_ADDR address,struct value * dval)6476 ada_to_fixed_type (struct type *type, char *valaddr,
6477                    CORE_ADDR address, struct value *dval)
6478 {
6479   type = ada_check_typedef (type);
6480   switch (TYPE_CODE (type))
6481     {
6482     default:
6483       return type;
6484     case TYPE_CODE_STRUCT:
6485       {
6486         struct type *static_type = to_static_fixed_type (type);
6487         if (ada_is_tagged_type (static_type, 0))
6488           {
6489             struct type *real_type =
6490               type_from_tag (value_tag_from_contents_and_address (static_type,
6491                                                                   valaddr,
6492                                                                   address));
6493             if (real_type != NULL)
6494               type = real_type;
6495           }
6496         return to_fixed_record_type (type, valaddr, address, NULL);
6497       }
6498     case TYPE_CODE_ARRAY:
6499       return to_fixed_array_type (type, dval, 1);
6500     case TYPE_CODE_UNION:
6501       if (dval == NULL)
6502         return type;
6503       else
6504         return to_fixed_variant_branch_type (type, valaddr, address, dval);
6505     }
6506 }
6507 
6508 /* A standard (static-sized) type corresponding as well as possible to
6509    TYPE0, but based on no runtime data.  */
6510 
6511 static struct type *
to_static_fixed_type(struct type * type0)6512 to_static_fixed_type (struct type *type0)
6513 {
6514   struct type *type;
6515 
6516   if (type0 == NULL)
6517     return NULL;
6518 
6519   if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6520     return type0;
6521 
6522   type0 = ada_check_typedef (type0);
6523 
6524   switch (TYPE_CODE (type0))
6525     {
6526     default:
6527       return type0;
6528     case TYPE_CODE_STRUCT:
6529       type = dynamic_template_type (type0);
6530       if (type != NULL)
6531         return template_to_static_fixed_type (type);
6532       else
6533         return template_to_static_fixed_type (type0);
6534     case TYPE_CODE_UNION:
6535       type = ada_find_parallel_type (type0, "___XVU");
6536       if (type != NULL)
6537         return template_to_static_fixed_type (type);
6538       else
6539         return template_to_static_fixed_type (type0);
6540     }
6541 }
6542 
6543 /* A static approximation of TYPE with all type wrappers removed.  */
6544 
6545 static struct type *
static_unwrap_type(struct type * type)6546 static_unwrap_type (struct type *type)
6547 {
6548   if (ada_is_aligner_type (type))
6549     {
6550       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
6551       if (ada_type_name (type1) == NULL)
6552         TYPE_NAME (type1) = ada_type_name (type);
6553 
6554       return static_unwrap_type (type1);
6555     }
6556   else
6557     {
6558       struct type *raw_real_type = ada_get_base_type (type);
6559       if (raw_real_type == type)
6560         return type;
6561       else
6562         return to_static_fixed_type (raw_real_type);
6563     }
6564 }
6565 
6566 /* In some cases, incomplete and private types require
6567    cross-references that are not resolved as records (for example,
6568       type Foo;
6569       type FooP is access Foo;
6570       V: FooP;
6571       type Foo is array ...;
6572    ).  In these cases, since there is no mechanism for producing
6573    cross-references to such types, we instead substitute for FooP a
6574    stub enumeration type that is nowhere resolved, and whose tag is
6575    the name of the actual type.  Call these types "non-record stubs".  */
6576 
6577 /* A type equivalent to TYPE that is not a non-record stub, if one
6578    exists, otherwise TYPE.  */
6579 
6580 struct type *
ada_check_typedef(struct type * type)6581 ada_check_typedef (struct type *type)
6582 {
6583   CHECK_TYPEDEF (type);
6584   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
6585       || (TYPE_FLAGS (type) & TYPE_FLAG_STUB) == 0
6586       || TYPE_TAG_NAME (type) == NULL)
6587     return type;
6588   else
6589     {
6590       char *name = TYPE_TAG_NAME (type);
6591       struct type *type1 = ada_find_any_type (name);
6592       return (type1 == NULL) ? type : type1;
6593     }
6594 }
6595 
6596 /* A value representing the data at VALADDR/ADDRESS as described by
6597    type TYPE0, but with a standard (static-sized) type that correctly
6598    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
6599    type, then return VAL0 [this feature is simply to avoid redundant
6600    creation of struct values].  */
6601 
6602 static struct value *
ada_to_fixed_value_create(struct type * type0,CORE_ADDR address,struct value * val0)6603 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
6604                            struct value *val0)
6605 {
6606   struct type *type = ada_to_fixed_type (type0, 0, address, NULL);
6607   if (type == type0 && val0 != NULL)
6608     return val0;
6609   else
6610     return value_from_contents_and_address (type, 0, address);
6611 }
6612 
6613 /* A value representing VAL, but with a standard (static-sized) type
6614    that correctly describes it.  Does not necessarily create a new
6615    value.  */
6616 
6617 static struct value *
ada_to_fixed_value(struct value * val)6618 ada_to_fixed_value (struct value *val)
6619 {
6620   return ada_to_fixed_value_create (VALUE_TYPE (val),
6621                                     VALUE_ADDRESS (val) + VALUE_OFFSET (val),
6622                                     val);
6623 }
6624 
6625 /* A value representing VAL, but with a standard (static-sized) type
6626    chosen to approximate the real type of VAL as well as possible, but
6627    without consulting any runtime values.  For Ada dynamic-sized
6628    types, therefore, the type of the result is likely to be inaccurate.  */
6629 
6630 struct value *
ada_to_static_fixed_value(struct value * val)6631 ada_to_static_fixed_value (struct value *val)
6632 {
6633   struct type *type =
6634     to_static_fixed_type (static_unwrap_type (VALUE_TYPE (val)));
6635   if (type == VALUE_TYPE (val))
6636     return val;
6637   else
6638     return coerce_unspec_val_to_type (val, type);
6639 }
6640 
6641 
6642 /* Attributes */
6643 
6644 /* Table mapping attribute numbers to names.
6645    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
6646 
6647 static const char *attribute_names[] = {
6648   "<?>",
6649 
6650   "first",
6651   "last",
6652   "length",
6653   "image",
6654   "max",
6655   "min",
6656   "modulus",
6657   "pos",
6658   "size",
6659   "tag",
6660   "val",
6661   0
6662 };
6663 
6664 const char *
ada_attribute_name(enum exp_opcode n)6665 ada_attribute_name (enum exp_opcode n)
6666 {
6667   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
6668     return attribute_names[n - OP_ATR_FIRST + 1];
6669   else
6670     return attribute_names[0];
6671 }
6672 
6673 /* Evaluate the 'POS attribute applied to ARG.  */
6674 
6675 static LONGEST
pos_atr(struct value * arg)6676 pos_atr (struct value *arg)
6677 {
6678   struct type *type = VALUE_TYPE (arg);
6679 
6680   if (!discrete_type_p (type))
6681     error ("'POS only defined on discrete types");
6682 
6683   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
6684     {
6685       int i;
6686       LONGEST v = value_as_long (arg);
6687 
6688       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6689         {
6690           if (v == TYPE_FIELD_BITPOS (type, i))
6691             return i;
6692         }
6693       error ("enumeration value is invalid: can't find 'POS");
6694     }
6695   else
6696     return value_as_long (arg);
6697 }
6698 
6699 static struct value *
value_pos_atr(struct value * arg)6700 value_pos_atr (struct value *arg)
6701 {
6702   return value_from_longest (builtin_type_int, pos_atr (arg));
6703 }
6704 
6705 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
6706 
6707 static struct value *
value_val_atr(struct type * type,struct value * arg)6708 value_val_atr (struct type *type, struct value *arg)
6709 {
6710   if (!discrete_type_p (type))
6711     error ("'VAL only defined on discrete types");
6712   if (!integer_type_p (VALUE_TYPE (arg)))
6713     error ("'VAL requires integral argument");
6714 
6715   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
6716     {
6717       long pos = value_as_long (arg);
6718       if (pos < 0 || pos >= TYPE_NFIELDS (type))
6719         error ("argument to 'VAL out of range");
6720       return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
6721     }
6722   else
6723     return value_from_longest (type, value_as_long (arg));
6724 }
6725 
6726 
6727                                 /* Evaluation */
6728 
6729 /* True if TYPE appears to be an Ada character type.
6730    [At the moment, this is true only for Character and Wide_Character;
6731    It is a heuristic test that could stand improvement].  */
6732 
6733 int
ada_is_character_type(struct type * type)6734 ada_is_character_type (struct type *type)
6735 {
6736   const char *name = ada_type_name (type);
6737   return
6738     name != NULL
6739     && (TYPE_CODE (type) == TYPE_CODE_CHAR
6740         || TYPE_CODE (type) == TYPE_CODE_INT
6741         || TYPE_CODE (type) == TYPE_CODE_RANGE)
6742     && (strcmp (name, "character") == 0
6743         || strcmp (name, "wide_character") == 0
6744         || strcmp (name, "unsigned char") == 0);
6745 }
6746 
6747 /* True if TYPE appears to be an Ada string type.  */
6748 
6749 int
ada_is_string_type(struct type * type)6750 ada_is_string_type (struct type *type)
6751 {
6752   type = ada_check_typedef (type);
6753   if (type != NULL
6754       && TYPE_CODE (type) != TYPE_CODE_PTR
6755       && (ada_is_simple_array_type (type)
6756           || ada_is_array_descriptor_type (type))
6757       && ada_array_arity (type) == 1)
6758     {
6759       struct type *elttype = ada_array_element_type (type, 1);
6760 
6761       return ada_is_character_type (elttype);
6762     }
6763   else
6764     return 0;
6765 }
6766 
6767 
6768 /* True if TYPE is a struct type introduced by the compiler to force the
6769    alignment of a value.  Such types have a single field with a
6770    distinctive name.  */
6771 
6772 int
ada_is_aligner_type(struct type * type)6773 ada_is_aligner_type (struct type *type)
6774 {
6775   type = ada_check_typedef (type);
6776 
6777   /* If we can find a parallel XVS type, then the XVS type should
6778      be used instead of this type.  And hence, this is not an aligner
6779      type.  */
6780   if (ada_find_parallel_type (type, "___XVS") != NULL)
6781     return 0;
6782 
6783   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
6784           && TYPE_NFIELDS (type) == 1
6785           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
6786 }
6787 
6788 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
6789    the parallel type.  */
6790 
6791 struct type *
ada_get_base_type(struct type * raw_type)6792 ada_get_base_type (struct type *raw_type)
6793 {
6794   struct type *real_type_namer;
6795   struct type *raw_real_type;
6796 
6797   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
6798     return raw_type;
6799 
6800   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
6801   if (real_type_namer == NULL
6802       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
6803       || TYPE_NFIELDS (real_type_namer) != 1)
6804     return raw_type;
6805 
6806   raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
6807   if (raw_real_type == NULL)
6808     return raw_type;
6809   else
6810     return raw_real_type;
6811 }
6812 
6813 /* The type of value designated by TYPE, with all aligners removed.  */
6814 
6815 struct type *
ada_aligned_type(struct type * type)6816 ada_aligned_type (struct type *type)
6817 {
6818   if (ada_is_aligner_type (type))
6819     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
6820   else
6821     return ada_get_base_type (type);
6822 }
6823 
6824 
6825 /* The address of the aligned value in an object at address VALADDR
6826    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
6827 
6828 char *
ada_aligned_value_addr(struct type * type,char * valaddr)6829 ada_aligned_value_addr (struct type *type, char *valaddr)
6830 {
6831   if (ada_is_aligner_type (type))
6832     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
6833                                    valaddr +
6834                                    TYPE_FIELD_BITPOS (type,
6835                                                       0) / TARGET_CHAR_BIT);
6836   else
6837     return valaddr;
6838 }
6839 
6840 
6841 
6842 /* The printed representation of an enumeration literal with encoded
6843    name NAME.  The value is good to the next call of ada_enum_name.  */
6844 const char *
ada_enum_name(const char * name)6845 ada_enum_name (const char *name)
6846 {
6847   static char *result;
6848   static size_t result_len = 0;
6849   char *tmp;
6850 
6851   /* First, unqualify the enumeration name:
6852      1. Search for the last '.' character.  If we find one, then skip
6853      all the preceeding characters, the unqualified name starts
6854      right after that dot.
6855      2. Otherwise, we may be debugging on a target where the compiler
6856      translates dots into "__".  Search forward for double underscores,
6857      but stop searching when we hit an overloading suffix, which is
6858      of the form "__" followed by digits.  */
6859 
6860   tmp = strrchr (name, '.');
6861   if (tmp != NULL)
6862     name = tmp + 1;
6863   else
6864     {
6865       while ((tmp = strstr (name, "__")) != NULL)
6866         {
6867           if (isdigit (tmp[2]))
6868             break;
6869           else
6870             name = tmp + 2;
6871         }
6872     }
6873 
6874   if (name[0] == 'Q')
6875     {
6876       int v;
6877       if (name[1] == 'U' || name[1] == 'W')
6878         {
6879           if (sscanf (name + 2, "%x", &v) != 1)
6880             return name;
6881         }
6882       else
6883         return name;
6884 
6885       GROW_VECT (result, result_len, 16);
6886       if (isascii (v) && isprint (v))
6887         sprintf (result, "'%c'", v);
6888       else if (name[1] == 'U')
6889         sprintf (result, "[\"%02x\"]", v);
6890       else
6891         sprintf (result, "[\"%04x\"]", v);
6892 
6893       return result;
6894     }
6895   else
6896     {
6897       tmp = strstr (name, "__");
6898       if (tmp == NULL)
6899 	tmp = strstr (name, "$");
6900       if (tmp != NULL)
6901         {
6902           GROW_VECT (result, result_len, tmp - name + 1);
6903           strncpy (result, name, tmp - name);
6904           result[tmp - name] = '\0';
6905           return result;
6906         }
6907 
6908       return name;
6909     }
6910 }
6911 
6912 static struct value *
evaluate_subexp(struct type * expect_type,struct expression * exp,int * pos,enum noside noside)6913 evaluate_subexp (struct type *expect_type, struct expression *exp, int *pos,
6914                  enum noside noside)
6915 {
6916   return (*exp->language_defn->la_exp_desc->evaluate_exp)
6917     (expect_type, exp, pos, noside);
6918 }
6919 
6920 /* Evaluate the subexpression of EXP starting at *POS as for
6921    evaluate_type, updating *POS to point just past the evaluated
6922    expression.  */
6923 
6924 static struct value *
evaluate_subexp_type(struct expression * exp,int * pos)6925 evaluate_subexp_type (struct expression *exp, int *pos)
6926 {
6927   return (*exp->language_defn->la_exp_desc->evaluate_exp)
6928     (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
6929 }
6930 
6931 /* If VAL is wrapped in an aligner or subtype wrapper, return the
6932    value it wraps.  */
6933 
6934 static struct value *
unwrap_value(struct value * val)6935 unwrap_value (struct value *val)
6936 {
6937   struct type *type = ada_check_typedef (VALUE_TYPE (val));
6938   if (ada_is_aligner_type (type))
6939     {
6940       struct value *v = value_struct_elt (&val, NULL, "F",
6941                                           NULL, "internal structure");
6942       struct type *val_type = ada_check_typedef (VALUE_TYPE (v));
6943       if (ada_type_name (val_type) == NULL)
6944         TYPE_NAME (val_type) = ada_type_name (type);
6945 
6946       return unwrap_value (v);
6947     }
6948   else
6949     {
6950       struct type *raw_real_type =
6951         ada_check_typedef (ada_get_base_type (type));
6952 
6953       if (type == raw_real_type)
6954         return val;
6955 
6956       return
6957         coerce_unspec_val_to_type
6958         (val, ada_to_fixed_type (raw_real_type, 0,
6959                                  VALUE_ADDRESS (val) + VALUE_OFFSET (val),
6960                                  NULL));
6961     }
6962 }
6963 
6964 static struct value *
cast_to_fixed(struct type * type,struct value * arg)6965 cast_to_fixed (struct type *type, struct value *arg)
6966 {
6967   LONGEST val;
6968 
6969   if (type == VALUE_TYPE (arg))
6970     return arg;
6971   else if (ada_is_fixed_point_type (VALUE_TYPE (arg)))
6972     val = ada_float_to_fixed (type,
6973                               ada_fixed_to_float (VALUE_TYPE (arg),
6974                                                   value_as_long (arg)));
6975   else
6976     {
6977       DOUBLEST argd =
6978         value_as_double (value_cast (builtin_type_double, value_copy (arg)));
6979       val = ada_float_to_fixed (type, argd);
6980     }
6981 
6982   return value_from_longest (type, val);
6983 }
6984 
6985 static struct value *
cast_from_fixed_to_double(struct value * arg)6986 cast_from_fixed_to_double (struct value *arg)
6987 {
6988   DOUBLEST val = ada_fixed_to_float (VALUE_TYPE (arg),
6989                                      value_as_long (arg));
6990   return value_from_double (builtin_type_double, val);
6991 }
6992 
6993 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
6994    return the converted value.  */
6995 
6996 static struct value *
coerce_for_assign(struct type * type,struct value * val)6997 coerce_for_assign (struct type *type, struct value *val)
6998 {
6999   struct type *type2 = VALUE_TYPE (val);
7000   if (type == type2)
7001     return val;
7002 
7003   type2 = ada_check_typedef (type2);
7004   type = ada_check_typedef (type);
7005 
7006   if (TYPE_CODE (type2) == TYPE_CODE_PTR
7007       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7008     {
7009       val = ada_value_ind (val);
7010       type2 = VALUE_TYPE (val);
7011     }
7012 
7013   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
7014       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7015     {
7016       if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
7017           || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
7018           != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
7019         error ("Incompatible types in assignment");
7020       VALUE_TYPE (val) = type;
7021     }
7022   return val;
7023 }
7024 
7025 static struct value *
ada_value_binop(struct value * arg1,struct value * arg2,enum exp_opcode op)7026 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
7027 {
7028   struct value *val;
7029   struct type *type1, *type2;
7030   LONGEST v, v1, v2;
7031 
7032   COERCE_REF (arg1);
7033   COERCE_REF (arg2);
7034   type1 = base_type (ada_check_typedef (VALUE_TYPE (arg1)));
7035   type2 = base_type (ada_check_typedef (VALUE_TYPE (arg2)));
7036 
7037   if (TYPE_CODE (type1) != TYPE_CODE_INT
7038       || TYPE_CODE (type2) != TYPE_CODE_INT)
7039     return value_binop (arg1, arg2, op);
7040 
7041   switch (op)
7042     {
7043     case BINOP_MOD:
7044     case BINOP_DIV:
7045     case BINOP_REM:
7046       break;
7047     default:
7048       return value_binop (arg1, arg2, op);
7049     }
7050 
7051   v2 = value_as_long (arg2);
7052   if (v2 == 0)
7053     error ("second operand of %s must not be zero.", op_string (op));
7054 
7055   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
7056     return value_binop (arg1, arg2, op);
7057 
7058   v1 = value_as_long (arg1);
7059   switch (op)
7060     {
7061     case BINOP_DIV:
7062       v = v1 / v2;
7063       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
7064         v += v > 0 ? -1 : 1;
7065       break;
7066     case BINOP_REM:
7067       v = v1 % v2;
7068       if (v * v1 < 0)
7069         v -= v2;
7070       break;
7071     default:
7072       /* Should not reach this point.  */
7073       v = 0;
7074     }
7075 
7076   val = allocate_value (type1);
7077   store_unsigned_integer (VALUE_CONTENTS_RAW (val),
7078                           TYPE_LENGTH (VALUE_TYPE (val)), v);
7079   return val;
7080 }
7081 
7082 static int
ada_value_equal(struct value * arg1,struct value * arg2)7083 ada_value_equal (struct value *arg1, struct value *arg2)
7084 {
7085   if (ada_is_direct_array_type (VALUE_TYPE (arg1))
7086       || ada_is_direct_array_type (VALUE_TYPE (arg2)))
7087     {
7088       arg1 = ada_coerce_to_simple_array (arg1);
7089       arg2 = ada_coerce_to_simple_array (arg2);
7090       if (TYPE_CODE (VALUE_TYPE (arg1)) != TYPE_CODE_ARRAY
7091           || TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_ARRAY)
7092         error ("Attempt to compare array with non-array");
7093       /* FIXME: The following works only for types whose
7094          representations use all bits (no padding or undefined bits)
7095          and do not have user-defined equality.  */
7096       return
7097         TYPE_LENGTH (VALUE_TYPE (arg1)) == TYPE_LENGTH (VALUE_TYPE (arg2))
7098         && memcmp (VALUE_CONTENTS (arg1), VALUE_CONTENTS (arg2),
7099                    TYPE_LENGTH (VALUE_TYPE (arg1))) == 0;
7100     }
7101   return value_equal (arg1, arg2);
7102 }
7103 
7104 struct value *
ada_evaluate_subexp(struct type * expect_type,struct expression * exp,int * pos,enum noside noside)7105 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
7106                      int *pos, enum noside noside)
7107 {
7108   enum exp_opcode op;
7109   int tem, tem2, tem3;
7110   int pc;
7111   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
7112   struct type *type;
7113   int nargs;
7114   struct value **argvec;
7115 
7116   pc = *pos;
7117   *pos += 1;
7118   op = exp->elts[pc].opcode;
7119 
7120   switch (op)
7121     {
7122     default:
7123       *pos -= 1;
7124       return
7125         unwrap_value (evaluate_subexp_standard
7126                       (expect_type, exp, pos, noside));
7127 
7128     case OP_STRING:
7129       {
7130         struct value *result;
7131         *pos -= 1;
7132         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
7133         /* The result type will have code OP_STRING, bashed there from
7134            OP_ARRAY.  Bash it back.  */
7135         if (TYPE_CODE (VALUE_TYPE (result)) == TYPE_CODE_STRING)
7136           TYPE_CODE (VALUE_TYPE (result)) = TYPE_CODE_ARRAY;
7137         return result;
7138       }
7139 
7140     case UNOP_CAST:
7141       (*pos) += 2;
7142       type = exp->elts[pc + 1].type;
7143       arg1 = evaluate_subexp (type, exp, pos, noside);
7144       if (noside == EVAL_SKIP)
7145         goto nosideret;
7146       if (type != ada_check_typedef (VALUE_TYPE (arg1)))
7147         {
7148           if (ada_is_fixed_point_type (type))
7149             arg1 = cast_to_fixed (type, arg1);
7150           else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7151             arg1 = value_cast (type, cast_from_fixed_to_double (arg1));
7152           else if (VALUE_LVAL (arg1) == lval_memory)
7153             {
7154               /* This is in case of the really obscure (and undocumented,
7155                  but apparently expected) case of (Foo) Bar.all, where Bar
7156                  is an integer constant and Foo is a dynamic-sized type.
7157                  If we don't do this, ARG1 will simply be relabeled with
7158                  TYPE.  */
7159               if (noside == EVAL_AVOID_SIDE_EFFECTS)
7160                 return value_zero (to_static_fixed_type (type), not_lval);
7161               arg1 =
7162                 ada_to_fixed_value_create
7163                 (type, VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1), 0);
7164             }
7165           else
7166             arg1 = value_cast (type, arg1);
7167         }
7168       return arg1;
7169 
7170     case UNOP_QUAL:
7171       (*pos) += 2;
7172       type = exp->elts[pc + 1].type;
7173       return ada_evaluate_subexp (type, exp, pos, noside);
7174 
7175     case BINOP_ASSIGN:
7176       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7177       arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
7178       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
7179         return arg1;
7180       if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7181         arg2 = cast_to_fixed (VALUE_TYPE (arg1), arg2);
7182       else if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7183         error
7184           ("Fixed-point values must be assigned to fixed-point variables");
7185       else
7186         arg2 = coerce_for_assign (VALUE_TYPE (arg1), arg2);
7187       return ada_value_assign (arg1, arg2);
7188 
7189     case BINOP_ADD:
7190       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
7191       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
7192       if (noside == EVAL_SKIP)
7193         goto nosideret;
7194       if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
7195            || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7196           && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
7197         error ("Operands of fixed-point addition must have the same type");
7198       return value_cast (VALUE_TYPE (arg1), value_add (arg1, arg2));
7199 
7200     case BINOP_SUB:
7201       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
7202       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
7203       if (noside == EVAL_SKIP)
7204         goto nosideret;
7205       if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
7206            || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7207           && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
7208         error ("Operands of fixed-point subtraction must have the same type");
7209       return value_cast (VALUE_TYPE (arg1), value_sub (arg1, arg2));
7210 
7211     case BINOP_MUL:
7212     case BINOP_DIV:
7213       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7214       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7215       if (noside == EVAL_SKIP)
7216         goto nosideret;
7217       else if (noside == EVAL_AVOID_SIDE_EFFECTS
7218                && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
7219         return value_zero (VALUE_TYPE (arg1), not_lval);
7220       else
7221         {
7222           if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7223             arg1 = cast_from_fixed_to_double (arg1);
7224           if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7225             arg2 = cast_from_fixed_to_double (arg2);
7226           return ada_value_binop (arg1, arg2, op);
7227         }
7228 
7229     case BINOP_REM:
7230     case BINOP_MOD:
7231       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7232       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7233       if (noside == EVAL_SKIP)
7234         goto nosideret;
7235       else if (noside == EVAL_AVOID_SIDE_EFFECTS
7236                && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
7237         return value_zero (VALUE_TYPE (arg1), not_lval);
7238       else
7239         return ada_value_binop (arg1, arg2, op);
7240 
7241     case BINOP_EQUAL:
7242     case BINOP_NOTEQUAL:
7243       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7244       arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
7245       if (noside == EVAL_SKIP)
7246         goto nosideret;
7247       if (noside == EVAL_AVOID_SIDE_EFFECTS)
7248         tem = 0;
7249       else
7250         tem = ada_value_equal (arg1, arg2);
7251       if (op == BINOP_NOTEQUAL)
7252         tem = !tem;
7253       return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
7254 
7255     case UNOP_NEG:
7256       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7257       if (noside == EVAL_SKIP)
7258         goto nosideret;
7259       else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7260         return value_cast (VALUE_TYPE (arg1), value_neg (arg1));
7261       else
7262         return value_neg (arg1);
7263 
7264     case OP_VAR_VALUE:
7265       *pos -= 1;
7266       if (noside == EVAL_SKIP)
7267         {
7268           *pos += 4;
7269           goto nosideret;
7270         }
7271       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
7272         /* Only encountered when an unresolved symbol occurs in a
7273            context other than a function call, in which case, it is
7274            illegal.  */
7275         error ("Unexpected unresolved symbol, %s, during evaluation",
7276                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
7277       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7278         {
7279           *pos += 4;
7280           return value_zero
7281             (to_static_fixed_type
7282              (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
7283              not_lval);
7284         }
7285       else
7286         {
7287           arg1 =
7288             unwrap_value (evaluate_subexp_standard
7289                           (expect_type, exp, pos, noside));
7290           return ada_to_fixed_value (arg1);
7291         }
7292 
7293     case OP_FUNCALL:
7294       (*pos) += 2;
7295 
7296       /* Allocate arg vector, including space for the function to be
7297          called in argvec[0] and a terminating NULL.  */
7298       nargs = longest_to_int (exp->elts[pc + 1].longconst);
7299       argvec =
7300         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
7301 
7302       if (exp->elts[*pos].opcode == OP_VAR_VALUE
7303           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
7304         error ("Unexpected unresolved symbol, %s, during evaluation",
7305                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
7306       else
7307         {
7308           for (tem = 0; tem <= nargs; tem += 1)
7309             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7310           argvec[tem] = 0;
7311 
7312           if (noside == EVAL_SKIP)
7313             goto nosideret;
7314         }
7315 
7316       if (ada_is_packed_array_type (desc_base_type (VALUE_TYPE (argvec[0]))))
7317         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
7318       else if (TYPE_CODE (VALUE_TYPE (argvec[0])) == TYPE_CODE_REF
7319                || (TYPE_CODE (VALUE_TYPE (argvec[0])) == TYPE_CODE_ARRAY
7320                    && VALUE_LVAL (argvec[0]) == lval_memory))
7321         argvec[0] = value_addr (argvec[0]);
7322 
7323       type = ada_check_typedef (VALUE_TYPE (argvec[0]));
7324       if (TYPE_CODE (type) == TYPE_CODE_PTR)
7325         {
7326           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
7327             {
7328             case TYPE_CODE_FUNC:
7329               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
7330               break;
7331             case TYPE_CODE_ARRAY:
7332               break;
7333             case TYPE_CODE_STRUCT:
7334               if (noside != EVAL_AVOID_SIDE_EFFECTS)
7335                 argvec[0] = ada_value_ind (argvec[0]);
7336               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
7337               break;
7338             default:
7339               error ("cannot subscript or call something of type `%s'",
7340                      ada_type_name (VALUE_TYPE (argvec[0])));
7341               break;
7342             }
7343         }
7344 
7345       switch (TYPE_CODE (type))
7346         {
7347         case TYPE_CODE_FUNC:
7348           if (noside == EVAL_AVOID_SIDE_EFFECTS)
7349             return allocate_value (TYPE_TARGET_TYPE (type));
7350           return call_function_by_hand (argvec[0], nargs, argvec + 1);
7351         case TYPE_CODE_STRUCT:
7352           {
7353             int arity;
7354 
7355             arity = ada_array_arity (type);
7356             type = ada_array_element_type (type, nargs);
7357             if (type == NULL)
7358               error ("cannot subscript or call a record");
7359             if (arity != nargs)
7360               error ("wrong number of subscripts; expecting %d", arity);
7361             if (noside == EVAL_AVOID_SIDE_EFFECTS)
7362               return allocate_value (ada_aligned_type (type));
7363             return
7364               unwrap_value (ada_value_subscript
7365                             (argvec[0], nargs, argvec + 1));
7366           }
7367         case TYPE_CODE_ARRAY:
7368           if (noside == EVAL_AVOID_SIDE_EFFECTS)
7369             {
7370               type = ada_array_element_type (type, nargs);
7371               if (type == NULL)
7372                 error ("element type of array unknown");
7373               else
7374                 return allocate_value (ada_aligned_type (type));
7375             }
7376           return
7377             unwrap_value (ada_value_subscript
7378                           (ada_coerce_to_simple_array (argvec[0]),
7379                            nargs, argvec + 1));
7380         case TYPE_CODE_PTR:     /* Pointer to array */
7381           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
7382           if (noside == EVAL_AVOID_SIDE_EFFECTS)
7383             {
7384               type = ada_array_element_type (type, nargs);
7385               if (type == NULL)
7386                 error ("element type of array unknown");
7387               else
7388                 return allocate_value (ada_aligned_type (type));
7389             }
7390           return
7391             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
7392                                                    nargs, argvec + 1));
7393 
7394         default:
7395           error ("Attempt to index or call something other than an "
7396 		 "array or function");
7397         }
7398 
7399     case TERNOP_SLICE:
7400       {
7401         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7402         struct value *low_bound_val =
7403           evaluate_subexp (NULL_TYPE, exp, pos, noside);
7404         struct value *high_bound_val =
7405           evaluate_subexp (NULL_TYPE, exp, pos, noside);
7406         LONGEST low_bound;
7407         LONGEST high_bound;
7408         COERCE_REF (low_bound_val);
7409         COERCE_REF (high_bound_val);
7410         low_bound = pos_atr (low_bound_val);
7411         high_bound = pos_atr (high_bound_val);
7412 
7413         if (noside == EVAL_SKIP)
7414           goto nosideret;
7415 
7416         /* If this is a reference to an aligner type, then remove all
7417            the aligners.  */
7418         if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_REF
7419             && ada_is_aligner_type (TYPE_TARGET_TYPE (VALUE_TYPE (array))))
7420           TYPE_TARGET_TYPE (VALUE_TYPE (array)) =
7421             ada_aligned_type (TYPE_TARGET_TYPE (VALUE_TYPE (array)));
7422 
7423         if (ada_is_packed_array_type (VALUE_TYPE (array)))
7424           error ("cannot slice a packed array");
7425 
7426         /* If this is a reference to an array or an array lvalue,
7427            convert to a pointer.  */
7428         if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_REF
7429             || (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_ARRAY
7430                 && VALUE_LVAL (array) == lval_memory))
7431           array = value_addr (array);
7432 
7433         if (noside == EVAL_AVOID_SIDE_EFFECTS
7434             && ada_is_array_descriptor_type (ada_check_typedef
7435                                              (VALUE_TYPE (array))))
7436           return empty_array (ada_type_of_array (array, 0), low_bound);
7437 
7438         array = ada_coerce_to_simple_array_ptr (array);
7439 
7440         /* If we have more than one level of pointer indirection,
7441            dereference the value until we get only one level.  */
7442         while (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_PTR
7443                && (TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (array)))
7444                      == TYPE_CODE_PTR))
7445           array = value_ind (array);
7446 
7447         /* Make sure we really do have an array type before going further,
7448            to avoid a SEGV when trying to get the index type or the target
7449            type later down the road if the debug info generated by
7450            the compiler is incorrect or incomplete.  */
7451         if (!ada_is_simple_array_type (VALUE_TYPE (array)))
7452           error ("cannot take slice of non-array");
7453 
7454         if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_PTR)
7455           {
7456             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
7457               return empty_array (TYPE_TARGET_TYPE (VALUE_TYPE (array)),
7458                                   low_bound);
7459             else
7460               {
7461                 struct type *arr_type0 =
7462                   to_fixed_array_type (TYPE_TARGET_TYPE (VALUE_TYPE (array)),
7463                                        NULL, 1);
7464                 return ada_value_slice_ptr (array, arr_type0,
7465                                             (int) low_bound,
7466 					    (int) high_bound);
7467               }
7468           }
7469         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7470           return array;
7471         else if (high_bound < low_bound)
7472           return empty_array (VALUE_TYPE (array), low_bound);
7473         else
7474           return ada_value_slice (array, (int) low_bound, (int) high_bound);
7475       }
7476 
7477     case UNOP_IN_RANGE:
7478       (*pos) += 2;
7479       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7480       type = exp->elts[pc + 1].type;
7481 
7482       if (noside == EVAL_SKIP)
7483         goto nosideret;
7484 
7485       switch (TYPE_CODE (type))
7486         {
7487         default:
7488           lim_warning ("Membership test incompletely implemented; "
7489                        "always returns true");
7490           return value_from_longest (builtin_type_int, (LONGEST) 1);
7491 
7492         case TYPE_CODE_RANGE:
7493           arg2 = value_from_longest (builtin_type_int, TYPE_LOW_BOUND (type));
7494           arg3 = value_from_longest (builtin_type_int,
7495                                      TYPE_HIGH_BOUND (type));
7496           return
7497             value_from_longest (builtin_type_int,
7498                                 (value_less (arg1, arg3)
7499                                  || value_equal (arg1, arg3))
7500                                 && (value_less (arg2, arg1)
7501                                     || value_equal (arg2, arg1)));
7502         }
7503 
7504     case BINOP_IN_BOUNDS:
7505       (*pos) += 2;
7506       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7507       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7508 
7509       if (noside == EVAL_SKIP)
7510         goto nosideret;
7511 
7512       if (noside == EVAL_AVOID_SIDE_EFFECTS)
7513         return value_zero (builtin_type_int, not_lval);
7514 
7515       tem = longest_to_int (exp->elts[pc + 1].longconst);
7516 
7517       if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg2)))
7518         error ("invalid dimension number to '%s", "range");
7519 
7520       arg3 = ada_array_bound (arg2, tem, 1);
7521       arg2 = ada_array_bound (arg2, tem, 0);
7522 
7523       return
7524         value_from_longest (builtin_type_int,
7525                             (value_less (arg1, arg3)
7526                              || value_equal (arg1, arg3))
7527                             && (value_less (arg2, arg1)
7528                                 || value_equal (arg2, arg1)));
7529 
7530     case TERNOP_IN_RANGE:
7531       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7532       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7533       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7534 
7535       if (noside == EVAL_SKIP)
7536         goto nosideret;
7537 
7538       return
7539         value_from_longest (builtin_type_int,
7540                             (value_less (arg1, arg3)
7541                              || value_equal (arg1, arg3))
7542                             && (value_less (arg2, arg1)
7543                                 || value_equal (arg2, arg1)));
7544 
7545     case OP_ATR_FIRST:
7546     case OP_ATR_LAST:
7547     case OP_ATR_LENGTH:
7548       {
7549         struct type *type_arg;
7550         if (exp->elts[*pos].opcode == OP_TYPE)
7551           {
7552             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7553             arg1 = NULL;
7554             type_arg = exp->elts[pc + 2].type;
7555           }
7556         else
7557           {
7558             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7559             type_arg = NULL;
7560           }
7561 
7562         if (exp->elts[*pos].opcode != OP_LONG)
7563           error ("illegal operand to '%s", ada_attribute_name (op));
7564         tem = longest_to_int (exp->elts[*pos + 2].longconst);
7565         *pos += 4;
7566 
7567         if (noside == EVAL_SKIP)
7568           goto nosideret;
7569 
7570         if (type_arg == NULL)
7571           {
7572             arg1 = ada_coerce_ref (arg1);
7573 
7574             if (ada_is_packed_array_type (VALUE_TYPE (arg1)))
7575               arg1 = ada_coerce_to_simple_array (arg1);
7576 
7577             if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg1)))
7578               error ("invalid dimension number to '%s",
7579                      ada_attribute_name (op));
7580 
7581             if (noside == EVAL_AVOID_SIDE_EFFECTS)
7582               {
7583                 type = ada_index_type (VALUE_TYPE (arg1), tem);
7584                 if (type == NULL)
7585                   error
7586                     ("attempt to take bound of something that is not an array");
7587                 return allocate_value (type);
7588               }
7589 
7590             switch (op)
7591               {
7592               default:          /* Should never happen.  */
7593                 error ("unexpected attribute encountered");
7594               case OP_ATR_FIRST:
7595                 return ada_array_bound (arg1, tem, 0);
7596               case OP_ATR_LAST:
7597                 return ada_array_bound (arg1, tem, 1);
7598               case OP_ATR_LENGTH:
7599                 return ada_array_length (arg1, tem);
7600               }
7601           }
7602         else if (discrete_type_p (type_arg))
7603           {
7604             struct type *range_type;
7605             char *name = ada_type_name (type_arg);
7606             range_type = NULL;
7607             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
7608               range_type =
7609                 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
7610             if (range_type == NULL)
7611               range_type = type_arg;
7612             switch (op)
7613               {
7614               default:
7615                 error ("unexpected attribute encountered");
7616               case OP_ATR_FIRST:
7617                 return discrete_type_low_bound (range_type);
7618               case OP_ATR_LAST:
7619                 return discrete_type_high_bound (range_type);
7620               case OP_ATR_LENGTH:
7621                 error ("the 'length attribute applies only to array types");
7622               }
7623           }
7624         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
7625           error ("unimplemented type attribute");
7626         else
7627           {
7628             LONGEST low, high;
7629 
7630             if (ada_is_packed_array_type (type_arg))
7631               type_arg = decode_packed_array_type (type_arg);
7632 
7633             if (tem < 1 || tem > ada_array_arity (type_arg))
7634               error ("invalid dimension number to '%s",
7635                      ada_attribute_name (op));
7636 
7637             type = ada_index_type (type_arg, tem);
7638             if (type == NULL)
7639               error
7640                 ("attempt to take bound of something that is not an array");
7641             if (noside == EVAL_AVOID_SIDE_EFFECTS)
7642               return allocate_value (type);
7643 
7644             switch (op)
7645               {
7646               default:
7647                 error ("unexpected attribute encountered");
7648               case OP_ATR_FIRST:
7649                 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
7650                 return value_from_longest (type, low);
7651               case OP_ATR_LAST:
7652                 high = ada_array_bound_from_type (type_arg, tem, 1, &type);
7653                 return value_from_longest (type, high);
7654               case OP_ATR_LENGTH:
7655                 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
7656                 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
7657                 return value_from_longest (type, high - low + 1);
7658               }
7659           }
7660       }
7661 
7662     case OP_ATR_TAG:
7663       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7664       if (noside == EVAL_SKIP)
7665         goto nosideret;
7666 
7667       if (noside == EVAL_AVOID_SIDE_EFFECTS)
7668         return value_zero (ada_tag_type (arg1), not_lval);
7669 
7670       return ada_value_tag (arg1);
7671 
7672     case OP_ATR_MIN:
7673     case OP_ATR_MAX:
7674       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7675       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7676       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7677       if (noside == EVAL_SKIP)
7678         goto nosideret;
7679       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7680         return value_zero (VALUE_TYPE (arg1), not_lval);
7681       else
7682         return value_binop (arg1, arg2,
7683                             op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
7684 
7685     case OP_ATR_MODULUS:
7686       {
7687         struct type *type_arg = exp->elts[pc + 2].type;
7688         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7689 
7690         if (noside == EVAL_SKIP)
7691           goto nosideret;
7692 
7693         if (!ada_is_modular_type (type_arg))
7694           error ("'modulus must be applied to modular type");
7695 
7696         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
7697                                    ada_modulus (type_arg));
7698       }
7699 
7700 
7701     case OP_ATR_POS:
7702       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7703       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7704       if (noside == EVAL_SKIP)
7705         goto nosideret;
7706       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7707         return value_zero (builtin_type_int, not_lval);
7708       else
7709         return value_pos_atr (arg1);
7710 
7711     case OP_ATR_SIZE:
7712       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7713       if (noside == EVAL_SKIP)
7714         goto nosideret;
7715       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7716         return value_zero (builtin_type_int, not_lval);
7717       else
7718         return value_from_longest (builtin_type_int,
7719                                    TARGET_CHAR_BIT
7720                                    * TYPE_LENGTH (VALUE_TYPE (arg1)));
7721 
7722     case OP_ATR_VAL:
7723       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7724       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7725       type = exp->elts[pc + 2].type;
7726       if (noside == EVAL_SKIP)
7727         goto nosideret;
7728       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7729         return value_zero (type, not_lval);
7730       else
7731         return value_val_atr (type, arg1);
7732 
7733     case BINOP_EXP:
7734       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7735       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7736       if (noside == EVAL_SKIP)
7737         goto nosideret;
7738       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7739         return value_zero (VALUE_TYPE (arg1), not_lval);
7740       else
7741         return value_binop (arg1, arg2, op);
7742 
7743     case UNOP_PLUS:
7744       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7745       if (noside == EVAL_SKIP)
7746         goto nosideret;
7747       else
7748         return arg1;
7749 
7750     case UNOP_ABS:
7751       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7752       if (noside == EVAL_SKIP)
7753         goto nosideret;
7754       if (value_less (arg1, value_zero (VALUE_TYPE (arg1), not_lval)))
7755         return value_neg (arg1);
7756       else
7757         return arg1;
7758 
7759     case UNOP_IND:
7760       if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
7761         expect_type = TYPE_TARGET_TYPE (ada_check_typedef (expect_type));
7762       arg1 = evaluate_subexp (expect_type, exp, pos, noside);
7763       if (noside == EVAL_SKIP)
7764         goto nosideret;
7765       type = ada_check_typedef (VALUE_TYPE (arg1));
7766       if (noside == EVAL_AVOID_SIDE_EFFECTS)
7767         {
7768           if (ada_is_array_descriptor_type (type))
7769             /* GDB allows dereferencing GNAT array descriptors.  */
7770             {
7771               struct type *arrType = ada_type_of_array (arg1, 0);
7772               if (arrType == NULL)
7773                 error ("Attempt to dereference null array pointer.");
7774               return value_at_lazy (arrType, 0, NULL);
7775             }
7776           else if (TYPE_CODE (type) == TYPE_CODE_PTR
7777                    || TYPE_CODE (type) == TYPE_CODE_REF
7778                    /* In C you can dereference an array to get the 1st elt.  */
7779                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
7780             {
7781               type = to_static_fixed_type
7782                 (ada_aligned_type
7783                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
7784               check_size (type);
7785               return value_zero (type, lval_memory);
7786             }
7787           else if (TYPE_CODE (type) == TYPE_CODE_INT)
7788             /* GDB allows dereferencing an int.  */
7789             return value_zero (builtin_type_int, lval_memory);
7790           else
7791             error ("Attempt to take contents of a non-pointer value.");
7792         }
7793       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for?? */
7794       type = ada_check_typedef (VALUE_TYPE (arg1));
7795 
7796       if (ada_is_array_descriptor_type (type))
7797         /* GDB allows dereferencing GNAT array descriptors.  */
7798         return ada_coerce_to_simple_array (arg1);
7799       else
7800         return ada_value_ind (arg1);
7801 
7802     case STRUCTOP_STRUCT:
7803       tem = longest_to_int (exp->elts[pc + 1].longconst);
7804       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
7805       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7806       if (noside == EVAL_SKIP)
7807         goto nosideret;
7808       if (noside == EVAL_AVOID_SIDE_EFFECTS)
7809         {
7810           struct type *type1 = VALUE_TYPE (arg1);
7811           if (ada_is_tagged_type (type1, 1))
7812             {
7813               type = ada_lookup_struct_elt_type (type1,
7814                                                  &exp->elts[pc + 2].string,
7815                                                  1, 1, NULL);
7816               if (type == NULL)
7817                 /* In this case, we assume that the field COULD exist
7818                    in some extension of the type.  Return an object of
7819                    "type" void, which will match any formal
7820                    (see ada_type_match). */
7821                 return value_zero (builtin_type_void, lval_memory);
7822             }
7823           else
7824             type =
7825               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
7826                                           0, NULL);
7827 
7828           return value_zero (ada_aligned_type (type), lval_memory);
7829         }
7830       else
7831         return
7832           ada_to_fixed_value (unwrap_value
7833                               (ada_value_struct_elt
7834                                (arg1, &exp->elts[pc + 2].string, "record")));
7835     case OP_TYPE:
7836       /* The value is not supposed to be used.  This is here to make it
7837          easier to accommodate expressions that contain types.  */
7838       (*pos) += 2;
7839       if (noside == EVAL_SKIP)
7840         goto nosideret;
7841       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7842         return allocate_value (builtin_type_void);
7843       else
7844         error ("Attempt to use a type name as an expression");
7845     }
7846 
7847 nosideret:
7848   return value_from_longest (builtin_type_long, (LONGEST) 1);
7849 }
7850 
7851 
7852                                 /* Fixed point */
7853 
7854 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
7855    type name that encodes the 'small and 'delta information.
7856    Otherwise, return NULL.  */
7857 
7858 static const char *
fixed_type_info(struct type * type)7859 fixed_type_info (struct type *type)
7860 {
7861   const char *name = ada_type_name (type);
7862   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
7863 
7864   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
7865     {
7866       const char *tail = strstr (name, "___XF_");
7867       if (tail == NULL)
7868         return NULL;
7869       else
7870         return tail + 5;
7871     }
7872   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
7873     return fixed_type_info (TYPE_TARGET_TYPE (type));
7874   else
7875     return NULL;
7876 }
7877 
7878 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
7879 
7880 int
ada_is_fixed_point_type(struct type * type)7881 ada_is_fixed_point_type (struct type *type)
7882 {
7883   return fixed_type_info (type) != NULL;
7884 }
7885 
7886 /* Return non-zero iff TYPE represents a System.Address type.  */
7887 
7888 int
ada_is_system_address_type(struct type * type)7889 ada_is_system_address_type (struct type *type)
7890 {
7891   return (TYPE_NAME (type)
7892           && strcmp (TYPE_NAME (type), "system__address") == 0);
7893 }
7894 
7895 /* Assuming that TYPE is the representation of an Ada fixed-point
7896    type, return its delta, or -1 if the type is malformed and the
7897    delta cannot be determined.  */
7898 
7899 DOUBLEST
ada_delta(struct type * type)7900 ada_delta (struct type *type)
7901 {
7902   const char *encoding = fixed_type_info (type);
7903   long num, den;
7904 
7905   if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
7906     return -1.0;
7907   else
7908     return (DOUBLEST) num / (DOUBLEST) den;
7909 }
7910 
7911 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
7912    factor ('SMALL value) associated with the type.  */
7913 
7914 static DOUBLEST
scaling_factor(struct type * type)7915 scaling_factor (struct type *type)
7916 {
7917   const char *encoding = fixed_type_info (type);
7918   unsigned long num0, den0, num1, den1;
7919   int n;
7920 
7921   n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
7922 
7923   if (n < 2)
7924     return 1.0;
7925   else if (n == 4)
7926     return (DOUBLEST) num1 / (DOUBLEST) den1;
7927   else
7928     return (DOUBLEST) num0 / (DOUBLEST) den0;
7929 }
7930 
7931 
7932 /* Assuming that X is the representation of a value of fixed-point
7933    type TYPE, return its floating-point equivalent.  */
7934 
7935 DOUBLEST
ada_fixed_to_float(struct type * type,LONGEST x)7936 ada_fixed_to_float (struct type *type, LONGEST x)
7937 {
7938   return (DOUBLEST) x *scaling_factor (type);
7939 }
7940 
7941 /* The representation of a fixed-point value of type TYPE
7942    corresponding to the value X.  */
7943 
7944 LONGEST
ada_float_to_fixed(struct type * type,DOUBLEST x)7945 ada_float_to_fixed (struct type *type, DOUBLEST x)
7946 {
7947   return (LONGEST) (x / scaling_factor (type) + 0.5);
7948 }
7949 
7950 
7951                                 /* VAX floating formats */
7952 
7953 /* Non-zero iff TYPE represents one of the special VAX floating-point
7954    types.  */
7955 
7956 int
ada_is_vax_floating_type(struct type * type)7957 ada_is_vax_floating_type (struct type *type)
7958 {
7959   int name_len =
7960     (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
7961   return
7962     name_len > 6
7963     && (TYPE_CODE (type) == TYPE_CODE_INT
7964         || TYPE_CODE (type) == TYPE_CODE_RANGE)
7965     && strncmp (ada_type_name (type) + name_len - 6, "___XF", 5) == 0;
7966 }
7967 
7968 /* The type of special VAX floating-point type this is, assuming
7969    ada_is_vax_floating_point.  */
7970 
7971 int
ada_vax_float_type_suffix(struct type * type)7972 ada_vax_float_type_suffix (struct type *type)
7973 {
7974   return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
7975 }
7976 
7977 /* A value representing the special debugging function that outputs
7978    VAX floating-point values of the type represented by TYPE.  Assumes
7979    ada_is_vax_floating_type (TYPE).  */
7980 
7981 struct value *
ada_vax_float_print_function(struct type * type)7982 ada_vax_float_print_function (struct type *type)
7983 {
7984   switch (ada_vax_float_type_suffix (type))
7985     {
7986     case 'F':
7987       return get_var_value ("DEBUG_STRING_F", 0);
7988     case 'D':
7989       return get_var_value ("DEBUG_STRING_D", 0);
7990     case 'G':
7991       return get_var_value ("DEBUG_STRING_G", 0);
7992     default:
7993       error ("invalid VAX floating-point type");
7994     }
7995 }
7996 
7997 
7998                                 /* Range types */
7999 
8000 /* Scan STR beginning at position K for a discriminant name, and
8001    return the value of that discriminant field of DVAL in *PX.  If
8002    PNEW_K is not null, put the position of the character beyond the
8003    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
8004    not alter *PX and *PNEW_K if unsuccessful.  */
8005 
8006 static int
scan_discrim_bound(char * str,int k,struct value * dval,LONGEST * px,int * pnew_k)8007 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
8008                     int *pnew_k)
8009 {
8010   static char *bound_buffer = NULL;
8011   static size_t bound_buffer_len = 0;
8012   char *bound;
8013   char *pend;
8014   struct value *bound_val;
8015 
8016   if (dval == NULL || str == NULL || str[k] == '\0')
8017     return 0;
8018 
8019   pend = strstr (str + k, "__");
8020   if (pend == NULL)
8021     {
8022       bound = str + k;
8023       k += strlen (bound);
8024     }
8025   else
8026     {
8027       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
8028       bound = bound_buffer;
8029       strncpy (bound_buffer, str + k, pend - (str + k));
8030       bound[pend - (str + k)] = '\0';
8031       k = pend - str;
8032     }
8033 
8034   bound_val = ada_search_struct_field (bound, dval, 0, VALUE_TYPE (dval));
8035   if (bound_val == NULL)
8036     return 0;
8037 
8038   *px = value_as_long (bound_val);
8039   if (pnew_k != NULL)
8040     *pnew_k = k;
8041   return 1;
8042 }
8043 
8044 /* Value of variable named NAME in the current environment.  If
8045    no such variable found, then if ERR_MSG is null, returns 0, and
8046    otherwise causes an error with message ERR_MSG.  */
8047 
8048 static struct value *
get_var_value(char * name,char * err_msg)8049 get_var_value (char *name, char *err_msg)
8050 {
8051   struct ada_symbol_info *syms;
8052   int nsyms;
8053 
8054   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
8055                                   &syms);
8056 
8057   if (nsyms != 1)
8058     {
8059       if (err_msg == NULL)
8060         return 0;
8061       else
8062         error ("%s", err_msg);
8063     }
8064 
8065   return value_of_variable (syms[0].sym, syms[0].block);
8066 }
8067 
8068 /* Value of integer variable named NAME in the current environment.  If
8069    no such variable found, returns 0, and sets *FLAG to 0.  If
8070    successful, sets *FLAG to 1.  */
8071 
8072 LONGEST
get_int_var_value(char * name,int * flag)8073 get_int_var_value (char *name, int *flag)
8074 {
8075   struct value *var_val = get_var_value (name, 0);
8076 
8077   if (var_val == 0)
8078     {
8079       if (flag != NULL)
8080         *flag = 0;
8081       return 0;
8082     }
8083   else
8084     {
8085       if (flag != NULL)
8086         *flag = 1;
8087       return value_as_long (var_val);
8088     }
8089 }
8090 
8091 
8092 /* Return a range type whose base type is that of the range type named
8093    NAME in the current environment, and whose bounds are calculated
8094    from NAME according to the GNAT range encoding conventions.
8095    Extract discriminant values, if needed, from DVAL.  If a new type
8096    must be created, allocate in OBJFILE's space.  The bounds
8097    information, in general, is encoded in NAME, the base type given in
8098    the named range type.  */
8099 
8100 static struct type *
to_fixed_range_type(char * name,struct value * dval,struct objfile * objfile)8101 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
8102 {
8103   struct type *raw_type = ada_find_any_type (name);
8104   struct type *base_type;
8105   char *subtype_info;
8106 
8107   if (raw_type == NULL)
8108     base_type = builtin_type_int;
8109   else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
8110     base_type = TYPE_TARGET_TYPE (raw_type);
8111   else
8112     base_type = raw_type;
8113 
8114   subtype_info = strstr (name, "___XD");
8115   if (subtype_info == NULL)
8116     return raw_type;
8117   else
8118     {
8119       static char *name_buf = NULL;
8120       static size_t name_len = 0;
8121       int prefix_len = subtype_info - name;
8122       LONGEST L, U;
8123       struct type *type;
8124       char *bounds_str;
8125       int n;
8126 
8127       GROW_VECT (name_buf, name_len, prefix_len + 5);
8128       strncpy (name_buf, name, prefix_len);
8129       name_buf[prefix_len] = '\0';
8130 
8131       subtype_info += 5;
8132       bounds_str = strchr (subtype_info, '_');
8133       n = 1;
8134 
8135       if (*subtype_info == 'L')
8136         {
8137           if (!ada_scan_number (bounds_str, n, &L, &n)
8138               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
8139             return raw_type;
8140           if (bounds_str[n] == '_')
8141             n += 2;
8142           else if (bounds_str[n] == '.')        /* FIXME? SGI Workshop kludge.  */
8143             n += 1;
8144           subtype_info += 1;
8145         }
8146       else
8147         {
8148           int ok;
8149           strcpy (name_buf + prefix_len, "___L");
8150           L = get_int_var_value (name_buf, &ok);
8151           if (!ok)
8152             {
8153               lim_warning ("Unknown lower bound, using 1.");
8154               L = 1;
8155             }
8156         }
8157 
8158       if (*subtype_info == 'U')
8159         {
8160           if (!ada_scan_number (bounds_str, n, &U, &n)
8161               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
8162             return raw_type;
8163         }
8164       else
8165         {
8166           int ok;
8167           strcpy (name_buf + prefix_len, "___U");
8168           U = get_int_var_value (name_buf, &ok);
8169           if (!ok)
8170             {
8171               lim_warning ("Unknown upper bound, using %ld.", (long) L);
8172               U = L;
8173             }
8174         }
8175 
8176       if (objfile == NULL)
8177         objfile = TYPE_OBJFILE (base_type);
8178       type = create_range_type (alloc_type (objfile), base_type, L, U);
8179       TYPE_NAME (type) = name;
8180       return type;
8181     }
8182 }
8183 
8184 /* True iff NAME is the name of a range type.  */
8185 
8186 int
ada_is_range_type_name(const char * name)8187 ada_is_range_type_name (const char *name)
8188 {
8189   return (name != NULL && strstr (name, "___XD"));
8190 }
8191 
8192 
8193                                 /* Modular types */
8194 
8195 /* True iff TYPE is an Ada modular type.  */
8196 
8197 int
ada_is_modular_type(struct type * type)8198 ada_is_modular_type (struct type *type)
8199 {
8200   struct type *subranged_type = base_type (type);
8201 
8202   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
8203           && TYPE_CODE (subranged_type) != TYPE_CODE_ENUM
8204           && TYPE_UNSIGNED (subranged_type));
8205 }
8206 
8207 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
8208 
8209 ULONGEST
ada_modulus(struct type * type)8210 ada_modulus (struct type * type)
8211 {
8212   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
8213 }
8214 
8215                                 /* Operators */
8216 /* Information about operators given special treatment in functions
8217    below.  */
8218 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
8219 
8220 #define ADA_OPERATORS \
8221     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
8222     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
8223     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
8224     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
8225     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
8226     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
8227     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
8228     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
8229     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
8230     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
8231     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
8232     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
8233     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
8234     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
8235     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
8236     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0)
8237 
8238 static void
ada_operator_length(struct expression * exp,int pc,int * oplenp,int * argsp)8239 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
8240 {
8241   switch (exp->elts[pc - 1].opcode)
8242     {
8243     default:
8244       operator_length_standard (exp, pc, oplenp, argsp);
8245       break;
8246 
8247 #define OP_DEFN(op, len, args, binop) \
8248     case op: *oplenp = len; *argsp = args; break;
8249       ADA_OPERATORS;
8250 #undef OP_DEFN
8251     }
8252 }
8253 
8254 static char *
ada_op_name(enum exp_opcode opcode)8255 ada_op_name (enum exp_opcode opcode)
8256 {
8257   switch (opcode)
8258     {
8259     default:
8260       return op_name_standard (opcode);
8261 #define OP_DEFN(op, len, args, binop) case op: return #op;
8262       ADA_OPERATORS;
8263 #undef OP_DEFN
8264     }
8265 }
8266 
8267 /* As for operator_length, but assumes PC is pointing at the first
8268    element of the operator, and gives meaningful results only for the
8269    Ada-specific operators.  */
8270 
8271 static void
ada_forward_operator_length(struct expression * exp,int pc,int * oplenp,int * argsp)8272 ada_forward_operator_length (struct expression *exp, int pc,
8273                              int *oplenp, int *argsp)
8274 {
8275   switch (exp->elts[pc].opcode)
8276     {
8277     default:
8278       *oplenp = *argsp = 0;
8279       break;
8280 #define OP_DEFN(op, len, args, binop) \
8281     case op: *oplenp = len; *argsp = args; break;
8282       ADA_OPERATORS;
8283 #undef OP_DEFN
8284     }
8285 }
8286 
8287 static int
ada_dump_subexp_body(struct expression * exp,struct ui_file * stream,int elt)8288 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
8289 {
8290   enum exp_opcode op = exp->elts[elt].opcode;
8291   int oplen, nargs;
8292   int pc = elt;
8293   int i;
8294 
8295   ada_forward_operator_length (exp, elt, &oplen, &nargs);
8296 
8297   switch (op)
8298     {
8299       /* Ada attributes ('Foo).  */
8300     case OP_ATR_FIRST:
8301     case OP_ATR_LAST:
8302     case OP_ATR_LENGTH:
8303     case OP_ATR_IMAGE:
8304     case OP_ATR_MAX:
8305     case OP_ATR_MIN:
8306     case OP_ATR_MODULUS:
8307     case OP_ATR_POS:
8308     case OP_ATR_SIZE:
8309     case OP_ATR_TAG:
8310     case OP_ATR_VAL:
8311       break;
8312 
8313     case UNOP_IN_RANGE:
8314     case UNOP_QUAL:
8315       fprintf_filtered (stream, "Type @");
8316       gdb_print_host_address (exp->elts[pc + 1].type, stream);
8317       fprintf_filtered (stream, " (");
8318       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
8319       fprintf_filtered (stream, ")");
8320       break;
8321     case BINOP_IN_BOUNDS:
8322       fprintf_filtered (stream, " (%d)", (int) exp->elts[pc + 2].longconst);
8323       break;
8324     case TERNOP_IN_RANGE:
8325       break;
8326 
8327     default:
8328       return dump_subexp_body_standard (exp, stream, elt);
8329     }
8330 
8331   elt += oplen;
8332   for (i = 0; i < nargs; i += 1)
8333     elt = dump_subexp (exp, stream, elt);
8334 
8335   return elt;
8336 }
8337 
8338 /* The Ada extension of print_subexp (q.v.).  */
8339 
8340 static void
ada_print_subexp(struct expression * exp,int * pos,struct ui_file * stream,enum precedence prec)8341 ada_print_subexp (struct expression *exp, int *pos,
8342                   struct ui_file *stream, enum precedence prec)
8343 {
8344   int oplen, nargs;
8345   int pc = *pos;
8346   enum exp_opcode op = exp->elts[pc].opcode;
8347 
8348   ada_forward_operator_length (exp, pc, &oplen, &nargs);
8349 
8350   switch (op)
8351     {
8352     default:
8353       print_subexp_standard (exp, pos, stream, prec);
8354       return;
8355 
8356     case OP_VAR_VALUE:
8357       *pos += oplen;
8358       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
8359       return;
8360 
8361     case BINOP_IN_BOUNDS:
8362       *pos += oplen;
8363       print_subexp (exp, pos, stream, PREC_SUFFIX);
8364       fputs_filtered (" in ", stream);
8365       print_subexp (exp, pos, stream, PREC_SUFFIX);
8366       fputs_filtered ("'range", stream);
8367       if (exp->elts[pc + 1].longconst > 1)
8368         fprintf_filtered (stream, "(%ld)",
8369                           (long) exp->elts[pc + 1].longconst);
8370       return;
8371 
8372     case TERNOP_IN_RANGE:
8373       *pos += oplen;
8374       if (prec >= PREC_EQUAL)
8375         fputs_filtered ("(", stream);
8376       print_subexp (exp, pos, stream, PREC_SUFFIX);
8377       fputs_filtered (" in ", stream);
8378       print_subexp (exp, pos, stream, PREC_EQUAL);
8379       fputs_filtered (" .. ", stream);
8380       print_subexp (exp, pos, stream, PREC_EQUAL);
8381       if (prec >= PREC_EQUAL)
8382         fputs_filtered (")", stream);
8383       return;
8384 
8385     case OP_ATR_FIRST:
8386     case OP_ATR_LAST:
8387     case OP_ATR_LENGTH:
8388     case OP_ATR_IMAGE:
8389     case OP_ATR_MAX:
8390     case OP_ATR_MIN:
8391     case OP_ATR_MODULUS:
8392     case OP_ATR_POS:
8393     case OP_ATR_SIZE:
8394     case OP_ATR_TAG:
8395     case OP_ATR_VAL:
8396       *pos += oplen;
8397       if (exp->elts[*pos].opcode == OP_TYPE)
8398         {
8399           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
8400             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
8401           *pos += 3;
8402         }
8403       else
8404         print_subexp (exp, pos, stream, PREC_SUFFIX);
8405       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
8406       if (nargs > 1)
8407         {
8408           int tem;
8409           for (tem = 1; tem < nargs; tem += 1)
8410             {
8411               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
8412               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
8413             }
8414           fputs_filtered (")", stream);
8415         }
8416       return;
8417 
8418     case UNOP_QUAL:
8419       *pos += oplen;
8420       type_print (exp->elts[pc + 1].type, "", stream, 0);
8421       fputs_filtered ("'(", stream);
8422       print_subexp (exp, pos, stream, PREC_PREFIX);
8423       fputs_filtered (")", stream);
8424       return;
8425 
8426     case UNOP_IN_RANGE:
8427       *pos += oplen;
8428       print_subexp (exp, pos, stream, PREC_SUFFIX);
8429       fputs_filtered (" in ", stream);
8430       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
8431       return;
8432     }
8433 }
8434 
8435 /* Table mapping opcodes into strings for printing operators
8436    and precedences of the operators.  */
8437 
8438 static const struct op_print ada_op_print_tab[] = {
8439   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
8440   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
8441   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
8442   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
8443   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
8444   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
8445   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
8446   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
8447   {"<=", BINOP_LEQ, PREC_ORDER, 0},
8448   {">=", BINOP_GEQ, PREC_ORDER, 0},
8449   {">", BINOP_GTR, PREC_ORDER, 0},
8450   {"<", BINOP_LESS, PREC_ORDER, 0},
8451   {">>", BINOP_RSH, PREC_SHIFT, 0},
8452   {"<<", BINOP_LSH, PREC_SHIFT, 0},
8453   {"+", BINOP_ADD, PREC_ADD, 0},
8454   {"-", BINOP_SUB, PREC_ADD, 0},
8455   {"&", BINOP_CONCAT, PREC_ADD, 0},
8456   {"*", BINOP_MUL, PREC_MUL, 0},
8457   {"/", BINOP_DIV, PREC_MUL, 0},
8458   {"rem", BINOP_REM, PREC_MUL, 0},
8459   {"mod", BINOP_MOD, PREC_MUL, 0},
8460   {"**", BINOP_EXP, PREC_REPEAT, 0},
8461   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
8462   {"-", UNOP_NEG, PREC_PREFIX, 0},
8463   {"+", UNOP_PLUS, PREC_PREFIX, 0},
8464   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
8465   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
8466   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
8467   {".all", UNOP_IND, PREC_SUFFIX, 1},
8468   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
8469   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
8470   {NULL, 0, 0, 0}
8471 };
8472 
8473 				/* Fundamental Ada Types */
8474 
8475 /* Create a fundamental Ada type using default reasonable for the current
8476    target machine.
8477 
8478    Some object/debugging file formats (DWARF version 1, COFF, etc) do not
8479    define fundamental types such as "int" or "double".  Others (stabs or
8480    DWARF version 2, etc) do define fundamental types.  For the formats which
8481    don't provide fundamental types, gdb can create such types using this
8482    function.
8483 
8484    FIXME:  Some compilers distinguish explicitly signed integral types
8485    (signed short, signed int, signed long) from "regular" integral types
8486    (short, int, long) in the debugging information.  There is some dis-
8487    agreement as to how useful this feature is.  In particular, gcc does
8488    not support this.  Also, only some debugging formats allow the
8489    distinction to be passed on to a debugger.  For now, we always just
8490    use "short", "int", or "long" as the type name, for both the implicit
8491    and explicitly signed types.  This also makes life easier for the
8492    gdb test suite since we don't have to account for the differences
8493    in output depending upon what the compiler and debugging format
8494    support.  We will probably have to re-examine the issue when gdb
8495    starts taking it's fundamental type information directly from the
8496    debugging information supplied by the compiler.  fnf@cygnus.com */
8497 
8498 static struct type *
ada_create_fundamental_type(struct objfile * objfile,int typeid)8499 ada_create_fundamental_type (struct objfile *objfile, int typeid)
8500 {
8501   struct type *type = NULL;
8502 
8503   switch (typeid)
8504     {
8505     default:
8506       /* FIXME:  For now, if we are asked to produce a type not in this
8507          language, create the equivalent of a C integer type with the
8508          name "<?type?>".  When all the dust settles from the type
8509          reconstruction work, this should probably become an error.  */
8510       type = init_type (TYPE_CODE_INT,
8511                         TARGET_INT_BIT / TARGET_CHAR_BIT,
8512                         0, "<?type?>", objfile);
8513       warning ("internal error: no Ada fundamental type %d", typeid);
8514       break;
8515     case FT_VOID:
8516       type = init_type (TYPE_CODE_VOID,
8517                         TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8518                         0, "void", objfile);
8519       break;
8520     case FT_CHAR:
8521       type = init_type (TYPE_CODE_INT,
8522                         TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8523                         0, "character", objfile);
8524       break;
8525     case FT_SIGNED_CHAR:
8526       type = init_type (TYPE_CODE_INT,
8527                         TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8528                         0, "signed char", objfile);
8529       break;
8530     case FT_UNSIGNED_CHAR:
8531       type = init_type (TYPE_CODE_INT,
8532                         TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8533                         TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
8534       break;
8535     case FT_SHORT:
8536       type = init_type (TYPE_CODE_INT,
8537                         TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8538                         0, "short_integer", objfile);
8539       break;
8540     case FT_SIGNED_SHORT:
8541       type = init_type (TYPE_CODE_INT,
8542                         TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8543                         0, "short_integer", objfile);
8544       break;
8545     case FT_UNSIGNED_SHORT:
8546       type = init_type (TYPE_CODE_INT,
8547                         TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8548                         TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
8549       break;
8550     case FT_INTEGER:
8551       type = init_type (TYPE_CODE_INT,
8552                         TARGET_INT_BIT / TARGET_CHAR_BIT,
8553                         0, "integer", objfile);
8554       break;
8555     case FT_SIGNED_INTEGER:
8556       type = init_type (TYPE_CODE_INT, TARGET_INT_BIT /
8557 			TARGET_CHAR_BIT,
8558 			0, "integer", objfile);        /* FIXME -fnf */
8559       break;
8560     case FT_UNSIGNED_INTEGER:
8561       type = init_type (TYPE_CODE_INT,
8562                         TARGET_INT_BIT / TARGET_CHAR_BIT,
8563                         TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
8564       break;
8565     case FT_LONG:
8566       type = init_type (TYPE_CODE_INT,
8567                         TARGET_LONG_BIT / TARGET_CHAR_BIT,
8568                         0, "long_integer", objfile);
8569       break;
8570     case FT_SIGNED_LONG:
8571       type = init_type (TYPE_CODE_INT,
8572                         TARGET_LONG_BIT / TARGET_CHAR_BIT,
8573                         0, "long_integer", objfile);
8574       break;
8575     case FT_UNSIGNED_LONG:
8576       type = init_type (TYPE_CODE_INT,
8577                         TARGET_LONG_BIT / TARGET_CHAR_BIT,
8578                         TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
8579       break;
8580     case FT_LONG_LONG:
8581       type = init_type (TYPE_CODE_INT,
8582                         TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8583                         0, "long_long_integer", objfile);
8584       break;
8585     case FT_SIGNED_LONG_LONG:
8586       type = init_type (TYPE_CODE_INT,
8587                         TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8588                         0, "long_long_integer", objfile);
8589       break;
8590     case FT_UNSIGNED_LONG_LONG:
8591       type = init_type (TYPE_CODE_INT,
8592                         TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8593                         TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
8594       break;
8595     case FT_FLOAT:
8596       type = init_type (TYPE_CODE_FLT,
8597                         TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
8598                         0, "float", objfile);
8599       break;
8600     case FT_DBL_PREC_FLOAT:
8601       type = init_type (TYPE_CODE_FLT,
8602                         TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
8603                         0, "long_float", objfile);
8604       break;
8605     case FT_EXT_PREC_FLOAT:
8606       type = init_type (TYPE_CODE_FLT,
8607                         TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
8608                         0, "long_long_float", objfile);
8609       break;
8610     }
8611   return (type);
8612 }
8613 
8614 enum ada_primitive_types {
8615   ada_primitive_type_int,
8616   ada_primitive_type_long,
8617   ada_primitive_type_short,
8618   ada_primitive_type_char,
8619   ada_primitive_type_float,
8620   ada_primitive_type_double,
8621   ada_primitive_type_void,
8622   ada_primitive_type_long_long,
8623   ada_primitive_type_long_double,
8624   ada_primitive_type_natural,
8625   ada_primitive_type_positive,
8626   ada_primitive_type_system_address,
8627   nr_ada_primitive_types
8628 };
8629 
8630 static void
ada_language_arch_info(struct gdbarch * current_gdbarch,struct language_arch_info * lai)8631 ada_language_arch_info (struct gdbarch *current_gdbarch,
8632 			struct language_arch_info *lai)
8633 {
8634   const struct builtin_type *builtin = builtin_type (current_gdbarch);
8635   lai->primitive_type_vector
8636     = GDBARCH_OBSTACK_CALLOC (current_gdbarch, nr_ada_primitive_types + 1,
8637 			      struct type *);
8638   lai->primitive_type_vector [ada_primitive_type_int] =
8639     init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8640                0, "integer", (struct objfile *) NULL);
8641   lai->primitive_type_vector [ada_primitive_type_long] =
8642     init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
8643                0, "long_integer", (struct objfile *) NULL);
8644   lai->primitive_type_vector [ada_primitive_type_short] =
8645     init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8646                0, "short_integer", (struct objfile *) NULL);
8647   lai->string_char_type =
8648     lai->primitive_type_vector [ada_primitive_type_char] =
8649     init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8650                0, "character", (struct objfile *) NULL);
8651   lai->primitive_type_vector [ada_primitive_type_float] =
8652     init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
8653                0, "float", (struct objfile *) NULL);
8654   lai->primitive_type_vector [ada_primitive_type_double] =
8655     init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
8656                0, "long_float", (struct objfile *) NULL);
8657   lai->primitive_type_vector [ada_primitive_type_long_long] =
8658     init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8659                0, "long_long_integer", (struct objfile *) NULL);
8660   lai->primitive_type_vector [ada_primitive_type_long_double] =
8661     init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
8662                0, "long_long_float", (struct objfile *) NULL);
8663   lai->primitive_type_vector [ada_primitive_type_natural] =
8664     init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8665                0, "natural", (struct objfile *) NULL);
8666   lai->primitive_type_vector [ada_primitive_type_positive] =
8667     init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8668                0, "positive", (struct objfile *) NULL);
8669   lai->primitive_type_vector [ada_primitive_type_void] = builtin->builtin_void;
8670 
8671   lai->primitive_type_vector [ada_primitive_type_system_address] =
8672     lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
8673                                     (struct objfile *) NULL));
8674   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
8675     = "system__address";
8676 }
8677 
8678 				/* Language vector */
8679 
8680 /* Not really used, but needed in the ada_language_defn.  */
8681 
8682 static void
emit_char(int c,struct ui_file * stream,int quoter)8683 emit_char (int c, struct ui_file *stream, int quoter)
8684 {
8685   ada_emit_char (c, stream, quoter, 1);
8686 }
8687 
8688 static int
parse(void)8689 parse (void)
8690 {
8691   warnings_issued = 0;
8692   return ada_parse ();
8693 }
8694 
8695 static const struct exp_descriptor ada_exp_descriptor = {
8696   ada_print_subexp,
8697   ada_operator_length,
8698   ada_op_name,
8699   ada_dump_subexp_body,
8700   ada_evaluate_subexp
8701 };
8702 
8703 const struct language_defn ada_language_defn = {
8704   "ada",                        /* Language name */
8705   language_ada,
8706   NULL,
8707   range_check_off,
8708   type_check_off,
8709   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
8710                                    that's not quite what this means.  */
8711   array_row_major,
8712   &ada_exp_descriptor,
8713   parse,
8714   ada_error,
8715   resolve,
8716   ada_printchar,                /* Print a character constant */
8717   ada_printstr,                 /* Function to print string constant */
8718   emit_char,                    /* Function to print single char (not used) */
8719   ada_create_fundamental_type,  /* Create fundamental type in this language */
8720   ada_print_type,               /* Print a type using appropriate syntax */
8721   ada_val_print,                /* Print a value using appropriate syntax */
8722   ada_value_print,              /* Print a top-level value */
8723   NULL,                         /* Language specific skip_trampoline */
8724   NULL,                         /* value_of_this */
8725   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
8726   basic_lookup_transparent_type,        /* lookup_transparent_type */
8727   ada_la_decode,                /* Language specific symbol demangler */
8728   NULL,                         /* Language specific class_name_from_physname */
8729   ada_op_print_tab,             /* expression operators for printing */
8730   0,                            /* c-style arrays */
8731   1,                            /* String lower bound */
8732   NULL,
8733   ada_get_gdb_completer_word_break_characters,
8734   ada_language_arch_info,
8735   LANG_MAGIC
8736 };
8737 
8738 void
_initialize_ada_language(void)8739 _initialize_ada_language (void)
8740 {
8741   add_language (&ada_language_defn);
8742 
8743   varsize_limit = 65536;
8744 
8745   obstack_init (&symbol_list_obstack);
8746 
8747   decoded_names_store = htab_create_alloc
8748     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
8749      NULL, xcalloc, xfree);
8750 }
8751