1 /* Ada language support routines for GDB, the GNU debugger. Copyright (C)
3 1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004, 2005 Free
4 Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
26 #include "gdb_string.h"
30 #include "gdb_regex.h"
35 #include "expression.h"
36 #include "parser-defs.h"
42 #include "breakpoint.h"
45 #include "gdb_obstack.h"
47 #include "completer.h"
54 #include "dictionary.h"
55 #include "exceptions.h"
57 #ifndef ADA_RETAIN_DOTS
58 #define ADA_RETAIN_DOTS 0
61 /* Define whether or not the C operator '/' truncates towards zero for
62 differently signed operands (truncation direction is undefined in C).
63 Copied from valarith.c. */
65 #ifndef TRUNCATION_TOWARDS_ZERO
66 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
70 static void extract_string (CORE_ADDR addr, char *buf);
72 static struct type *ada_create_fundamental_type (struct objfile *, int);
74 static void modify_general_field (char *, LONGEST, int, int);
76 static struct type *desc_base_type (struct type *);
78 static struct type *desc_bounds_type (struct type *);
80 static struct value *desc_bounds (struct value *);
82 static int fat_pntr_bounds_bitpos (struct type *);
84 static int fat_pntr_bounds_bitsize (struct type *);
86 static struct type *desc_data_type (struct type *);
88 static struct value *desc_data (struct value *);
90 static int fat_pntr_data_bitpos (struct type *);
92 static int fat_pntr_data_bitsize (struct type *);
94 static struct value *desc_one_bound (struct value *, int, int);
96 static int desc_bound_bitpos (struct type *, int, int);
98 static int desc_bound_bitsize (struct type *, int, int);
100 static struct type *desc_index_type (struct type *, int);
102 static int desc_arity (struct type *);
104 static int ada_type_match (struct type *, struct type *, int);
106 static int ada_args_match (struct symbol *, struct value **, int);
108 static struct value *ensure_lval (struct value *, CORE_ADDR *);
110 static struct value *convert_actual (struct value *, struct type *,
113 static struct value *make_array_descriptor (struct type *, struct value *,
116 static void ada_add_block_symbols (struct obstack *,
117 struct block *, const char *,
118 domain_enum, struct objfile *,
119 struct symtab *, int);
121 static int is_nonfunction (struct ada_symbol_info *, int);
123 static void add_defn_to_vec (struct obstack *, struct symbol *,
124 struct block *, struct symtab *);
126 static int num_defns_collected (struct obstack *);
128 static struct ada_symbol_info *defns_collected (struct obstack *, int);
130 static struct partial_symbol *ada_lookup_partial_symbol (struct partial_symtab
131 *, const char *, int,
134 static struct symtab *symtab_for_sym (struct symbol *);
136 static struct value *resolve_subexp (struct expression **, int *, int,
139 static void replace_operator_with_call (struct expression **, int, int, int,
140 struct symbol *, struct block *);
142 static int possible_user_operator_p (enum exp_opcode, struct value **);
144 static char *ada_op_name (enum exp_opcode);
146 static const char *ada_decoded_op_name (enum exp_opcode);
148 static int numeric_type_p (struct type *);
150 static int integer_type_p (struct type *);
152 static int scalar_type_p (struct type *);
154 static int discrete_type_p (struct type *);
156 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
159 static struct value *evaluate_subexp (struct type *, struct expression *,
162 static struct value *evaluate_subexp_type (struct expression *, int *);
164 static int is_dynamic_field (struct type *, int);
166 static struct type *to_fixed_variant_branch_type (struct type *,
168 CORE_ADDR, struct value *);
170 static struct type *to_fixed_array_type (struct type *, struct value *, int);
172 static struct type *to_fixed_range_type (char *, struct value *,
175 static struct type *to_static_fixed_type (struct type *);
177 static struct value *unwrap_value (struct value *);
179 static struct type *packed_array_type (struct type *, long *);
181 static struct type *decode_packed_array_type (struct type *);
183 static struct value *decode_packed_array (struct value *);
185 static struct value *value_subscript_packed (struct value *, int,
188 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int);
190 static struct value *coerce_unspec_val_to_type (struct value *,
193 static struct value *get_var_value (char *, char *);
195 static int lesseq_defined_than (struct symbol *, struct symbol *);
197 static int equiv_types (struct type *, struct type *);
199 static int is_name_suffix (const char *);
201 static int wild_match (const char *, int, const char *);
203 static struct value *ada_coerce_ref (struct value *);
205 static LONGEST pos_atr (struct value *);
207 static struct value *value_pos_atr (struct value *);
209 static struct value *value_val_atr (struct type *, struct value *);
211 static struct symbol *standard_lookup (const char *, const struct block *,
214 static struct value *ada_search_struct_field (char *, struct value *, int,
217 static struct value *ada_value_primitive_field (struct value *, int, int,
220 static int find_struct_field (char *, struct type *, int,
221 struct type **, int *, int *, int *, int *);
223 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
226 static struct value *ada_to_fixed_value (struct value *);
228 static int ada_resolve_function (struct ada_symbol_info *, int,
229 struct value **, int, const char *,
232 static struct value *ada_coerce_to_simple_array (struct value *);
234 static int ada_is_direct_array_type (struct type *);
236 static void ada_language_arch_info (struct gdbarch *,
237 struct language_arch_info *);
239 static void check_size (const struct type *);
241 static struct value *ada_index_struct_field (int, struct value *, int,
244 static struct value *assign_aggregate (struct value *, struct value *,
245 struct expression *, int *, enum noside);
247 static void aggregate_assign_from_choices (struct value *, struct value *,
249 int *, LONGEST *, int *,
250 int, LONGEST, LONGEST);
252 static void aggregate_assign_positional (struct value *, struct value *,
254 int *, LONGEST *, int *, int,
258 static void aggregate_assign_others (struct value *, struct value *,
260 int *, LONGEST *, int, LONGEST, LONGEST);
263 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
266 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
269 static void ada_forward_operator_length (struct expression *, int, int *,
274 /* Maximum-sized dynamic type. */
275 static unsigned int varsize_limit;
277 /* FIXME: brobecker/2003-09-17: No longer a const because it is
278 returned by a function that does not return a const char *. */
279 static char *ada_completer_word_break_characters =
281 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
283 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
286 /* The name of the symbol to use to get the name of the main subprogram. */
287 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
288 = "__gnat_ada_main_program_name";
290 /* The name of the runtime function called when an exception is raised. */
291 static const char raise_sym_name[] = "__gnat_raise_nodefer_with_msg";
293 /* The name of the runtime function called when an unhandled exception
295 static const char raise_unhandled_sym_name[] = "__gnat_unhandled_exception";
297 /* The name of the runtime function called when an assert failure is
299 static const char raise_assert_sym_name[] =
300 "system__assertions__raise_assert_failure";
302 /* A string that reflects the longest exception expression rewrite,
303 aside from the exception name. */
304 static const char longest_exception_template[] =
305 "'__gnat_raise_nodefer_with_msg' if long_integer(e) = long_integer(&)";
307 /* Limit on the number of warnings to raise per expression evaluation. */
308 static int warning_limit = 2;
310 /* Number of warning messages issued; reset to 0 by cleanups after
311 expression evaluation. */
312 static int warnings_issued = 0;
314 static const char *known_runtime_file_name_patterns[] = {
315 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
318 static const char *known_auxiliary_function_name_patterns[] = {
319 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
322 /* Space for allocating results of ada_lookup_symbol_list. */
323 static struct obstack symbol_list_obstack;
329 ada_get_gdb_completer_word_break_characters (void)
331 return ada_completer_word_break_characters;
334 /* Print an array element index using the Ada syntax. */
337 ada_print_array_index (struct value *index_value, struct ui_file *stream,
338 int format, enum val_prettyprint pretty)
340 LA_VALUE_PRINT (index_value, stream, format, pretty);
341 fprintf_filtered (stream, " => ");
344 /* Read the string located at ADDR from the inferior and store the
348 extract_string (CORE_ADDR addr, char *buf)
352 /* Loop, reading one byte at a time, until we reach the '\000'
353 end-of-string marker. */
356 target_read_memory (addr + char_index * sizeof (char),
357 buf + char_index * sizeof (char), sizeof (char));
360 while (buf[char_index - 1] != '\000');
363 /* Assuming VECT points to an array of *SIZE objects of size
364 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
365 updating *SIZE as necessary and returning the (new) array. */
368 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
370 if (*size < min_size)
373 if (*size < min_size)
375 vect = xrealloc (vect, *size * element_size);
380 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
381 suffix of FIELD_NAME beginning "___". */
384 field_name_match (const char *field_name, const char *target)
386 int len = strlen (target);
388 (strncmp (field_name, target, len) == 0
389 && (field_name[len] == '\0'
390 || (strncmp (field_name + len, "___", 3) == 0
391 && strcmp (field_name + strlen (field_name) - 6,
396 /* Assuming TYPE is a TYPE_CODE_STRUCT, find the field whose name matches
397 FIELD_NAME, and return its index. This function also handles fields
398 whose name have ___ suffixes because the compiler sometimes alters
399 their name by adding such a suffix to represent fields with certain
400 constraints. If the field could not be found, return a negative
401 number if MAYBE_MISSING is set. Otherwise raise an error. */
404 ada_get_field_index (const struct type *type, const char *field_name,
408 for (fieldno = 0; fieldno < TYPE_NFIELDS (type); fieldno++)
409 if (field_name_match (TYPE_FIELD_NAME (type, fieldno), field_name))
413 error (_("Unable to find field %s in struct %s. Aborting"),
414 field_name, TYPE_NAME (type));
419 /* The length of the prefix of NAME prior to any "___" suffix. */
422 ada_name_prefix_len (const char *name)
428 const char *p = strstr (name, "___");
430 return strlen (name);
436 /* Return non-zero if SUFFIX is a suffix of STR.
437 Return zero if STR is null. */
440 is_suffix (const char *str, const char *suffix)
446 len2 = strlen (suffix);
447 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
450 /* Create a value of type TYPE whose contents come from VALADDR, if it
451 is non-null, and whose memory address (in the inferior) is
455 value_from_contents_and_address (struct type *type,
456 const gdb_byte *valaddr,
459 struct value *v = allocate_value (type);
461 set_value_lazy (v, 1);
463 memcpy (value_contents_raw (v), valaddr, TYPE_LENGTH (type));
464 VALUE_ADDRESS (v) = address;
466 VALUE_LVAL (v) = lval_memory;
470 /* The contents of value VAL, treated as a value of type TYPE. The
471 result is an lval in memory if VAL is. */
473 static struct value *
474 coerce_unspec_val_to_type (struct value *val, struct type *type)
476 type = ada_check_typedef (type);
477 if (value_type (val) == type)
481 struct value *result;
483 /* Make sure that the object size is not unreasonable before
484 trying to allocate some memory for it. */
487 result = allocate_value (type);
488 VALUE_LVAL (result) = VALUE_LVAL (val);
489 set_value_bitsize (result, value_bitsize (val));
490 set_value_bitpos (result, value_bitpos (val));
491 VALUE_ADDRESS (result) = VALUE_ADDRESS (val) + value_offset (val);
493 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
494 set_value_lazy (result, 1);
496 memcpy (value_contents_raw (result), value_contents (val),
502 static const gdb_byte *
503 cond_offset_host (const gdb_byte *valaddr, long offset)
508 return valaddr + offset;
512 cond_offset_target (CORE_ADDR address, long offset)
517 return address + offset;
520 /* Issue a warning (as for the definition of warning in utils.c, but
521 with exactly one argument rather than ...), unless the limit on the
522 number of warnings has passed during the evaluation of the current
525 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
526 provided by "complaint". */
527 static void lim_warning (const char *format, ...) ATTR_FORMAT (printf, 1, 2);
530 lim_warning (const char *format, ...)
533 va_start (args, format);
535 warnings_issued += 1;
536 if (warnings_issued <= warning_limit)
537 vwarning (format, args);
542 /* Issue an error if the size of an object of type T is unreasonable,
543 i.e. if it would be a bad idea to allocate a value of this type in
547 check_size (const struct type *type)
549 if (TYPE_LENGTH (type) > varsize_limit)
550 error (_("object size is larger than varsize-limit"));
554 /* Note: would have used MAX_OF_TYPE and MIN_OF_TYPE macros from
555 gdbtypes.h, but some of the necessary definitions in that file
556 seem to have gone missing. */
558 /* Maximum value of a SIZE-byte signed integer type. */
560 max_of_size (int size)
562 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
563 return top_bit | (top_bit - 1);
566 /* Minimum value of a SIZE-byte signed integer type. */
568 min_of_size (int size)
570 return -max_of_size (size) - 1;
573 /* Maximum value of a SIZE-byte unsigned integer type. */
575 umax_of_size (int size)
577 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
578 return top_bit | (top_bit - 1);
581 /* Maximum value of integral type T, as a signed quantity. */
583 max_of_type (struct type *t)
585 if (TYPE_UNSIGNED (t))
586 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
588 return max_of_size (TYPE_LENGTH (t));
591 /* Minimum value of integral type T, as a signed quantity. */
593 min_of_type (struct type *t)
595 if (TYPE_UNSIGNED (t))
598 return min_of_size (TYPE_LENGTH (t));
601 /* The largest value in the domain of TYPE, a discrete type, as an integer. */
602 static struct value *
603 discrete_type_high_bound (struct type *type)
605 switch (TYPE_CODE (type))
607 case TYPE_CODE_RANGE:
608 return value_from_longest (TYPE_TARGET_TYPE (type),
609 TYPE_HIGH_BOUND (type));
612 value_from_longest (type,
613 TYPE_FIELD_BITPOS (type,
614 TYPE_NFIELDS (type) - 1));
616 return value_from_longest (type, max_of_type (type));
618 error (_("Unexpected type in discrete_type_high_bound."));
622 /* The largest value in the domain of TYPE, a discrete type, as an integer. */
623 static struct value *
624 discrete_type_low_bound (struct type *type)
626 switch (TYPE_CODE (type))
628 case TYPE_CODE_RANGE:
629 return value_from_longest (TYPE_TARGET_TYPE (type),
630 TYPE_LOW_BOUND (type));
632 return value_from_longest (type, TYPE_FIELD_BITPOS (type, 0));
634 return value_from_longest (type, min_of_type (type));
636 error (_("Unexpected type in discrete_type_low_bound."));
640 /* The identity on non-range types. For range types, the underlying
641 non-range scalar type. */
644 base_type (struct type *type)
646 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
648 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
650 type = TYPE_TARGET_TYPE (type);
656 /* Language Selection */
658 /* If the main program is in Ada, return language_ada, otherwise return LANG
659 (the main program is in Ada iif the adainit symbol is found).
661 MAIN_PST is not used. */
664 ada_update_initial_language (enum language lang,
665 struct partial_symtab *main_pst)
667 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
668 (struct objfile *) NULL) != NULL)
674 /* If the main procedure is written in Ada, then return its name.
675 The result is good until the next call. Return NULL if the main
676 procedure doesn't appear to be in Ada. */
681 struct minimal_symbol *msym;
682 CORE_ADDR main_program_name_addr;
683 static char main_program_name[1024];
685 /* For Ada, the name of the main procedure is stored in a specific
686 string constant, generated by the binder. Look for that symbol,
687 extract its address, and then read that string. If we didn't find
688 that string, then most probably the main procedure is not written
690 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
694 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
695 if (main_program_name_addr == 0)
696 error (_("Invalid address for Ada main program name."));
698 extract_string (main_program_name_addr, main_program_name);
699 return main_program_name;
702 /* The main procedure doesn't seem to be in Ada. */
708 /* Table of Ada operators and their GNAT-encoded names. Last entry is pair
711 const struct ada_opname_map ada_opname_table[] = {
712 {"Oadd", "\"+\"", BINOP_ADD},
713 {"Osubtract", "\"-\"", BINOP_SUB},
714 {"Omultiply", "\"*\"", BINOP_MUL},
715 {"Odivide", "\"/\"", BINOP_DIV},
716 {"Omod", "\"mod\"", BINOP_MOD},
717 {"Orem", "\"rem\"", BINOP_REM},
718 {"Oexpon", "\"**\"", BINOP_EXP},
719 {"Olt", "\"<\"", BINOP_LESS},
720 {"Ole", "\"<=\"", BINOP_LEQ},
721 {"Ogt", "\">\"", BINOP_GTR},
722 {"Oge", "\">=\"", BINOP_GEQ},
723 {"Oeq", "\"=\"", BINOP_EQUAL},
724 {"One", "\"/=\"", BINOP_NOTEQUAL},
725 {"Oand", "\"and\"", BINOP_BITWISE_AND},
726 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
727 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
728 {"Oconcat", "\"&\"", BINOP_CONCAT},
729 {"Oabs", "\"abs\"", UNOP_ABS},
730 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
731 {"Oadd", "\"+\"", UNOP_PLUS},
732 {"Osubtract", "\"-\"", UNOP_NEG},
736 /* Return non-zero if STR should be suppressed in info listings. */
739 is_suppressed_name (const char *str)
741 if (strncmp (str, "_ada_", 5) == 0)
743 if (str[0] == '_' || str[0] == '\000')
748 const char *suffix = strstr (str, "___");
749 if (suffix != NULL && suffix[3] != 'X')
752 suffix = str + strlen (str);
753 for (p = suffix - 1; p != str; p -= 1)
757 if (p[0] == 'X' && p[-1] != '_')
761 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
762 if (strncmp (ada_opname_table[i].encoded, p,
763 strlen (ada_opname_table[i].encoded)) == 0)
772 /* The "encoded" form of DECODED, according to GNAT conventions.
773 The result is valid until the next call to ada_encode. */
776 ada_encode (const char *decoded)
778 static char *encoding_buffer = NULL;
779 static size_t encoding_buffer_size = 0;
786 GROW_VECT (encoding_buffer, encoding_buffer_size,
787 2 * strlen (decoded) + 10);
790 for (p = decoded; *p != '\0'; p += 1)
792 if (!ADA_RETAIN_DOTS && *p == '.')
794 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
799 const struct ada_opname_map *mapping;
801 for (mapping = ada_opname_table;
802 mapping->encoded != NULL
803 && strncmp (mapping->decoded, p,
804 strlen (mapping->decoded)) != 0; mapping += 1)
806 if (mapping->encoded == NULL)
807 error (_("invalid Ada operator name: %s"), p);
808 strcpy (encoding_buffer + k, mapping->encoded);
809 k += strlen (mapping->encoded);
814 encoding_buffer[k] = *p;
819 encoding_buffer[k] = '\0';
820 return encoding_buffer;
823 /* Return NAME folded to lower case, or, if surrounded by single
824 quotes, unfolded, but with the quotes stripped away. Result good
828 ada_fold_name (const char *name)
830 static char *fold_buffer = NULL;
831 static size_t fold_buffer_size = 0;
833 int len = strlen (name);
834 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
838 strncpy (fold_buffer, name + 1, len - 2);
839 fold_buffer[len - 2] = '\000';
844 for (i = 0; i <= len; i += 1)
845 fold_buffer[i] = tolower (name[i]);
851 /* Return nonzero if C is either a digit or a lowercase alphabet character. */
854 is_lower_alphanum (const char c)
856 return (isdigit (c) || (isalpha (c) && islower (c)));
860 . Discard trailing .{DIGIT}+, ${DIGIT}+ or ___{DIGIT}+
861 These are suffixes introduced by GNAT5 to nested subprogram
862 names, and do not serve any purpose for the debugger.
863 . Discard final __{DIGIT}+ or $({DIGIT}+(__{DIGIT}+)*)
864 . Discard final N if it follows a lowercase alphanumeric character
865 (protected object subprogram suffix)
866 . Convert other instances of embedded "__" to `.'.
867 . Discard leading _ada_.
868 . Convert operator names to the appropriate quoted symbols.
869 . Remove everything after first ___ if it is followed by
871 . Replace TK__ with __, and a trailing B or TKB with nothing.
872 . Replace _[EB]{DIGIT}+[sb] with nothing (protected object entries)
873 . Put symbols that should be suppressed in <...> brackets.
874 . Remove trailing X[bn]* suffix (indicating names in package bodies).
876 The resulting string is valid until the next call of ada_decode.
877 If the string is unchanged by demangling, the original string pointer
881 ada_decode (const char *encoded)
888 static char *decoding_buffer = NULL;
889 static size_t decoding_buffer_size = 0;
891 if (strncmp (encoded, "_ada_", 5) == 0)
894 if (encoded[0] == '_' || encoded[0] == '<')
897 /* Remove trailing .{DIGIT}+ or ___{DIGIT}+ or __{DIGIT}+. */
898 len0 = strlen (encoded);
899 if (len0 > 1 && isdigit (encoded[len0 - 1]))
902 while (i > 0 && isdigit (encoded[i]))
904 if (i >= 0 && encoded[i] == '.')
906 else if (i >= 0 && encoded[i] == '$')
908 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
910 else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
914 /* Remove trailing N. */
916 /* Protected entry subprograms are broken into two
917 separate subprograms: The first one is unprotected, and has
918 a 'N' suffix; the second is the protected version, and has
919 the 'P' suffix. The second calls the first one after handling
920 the protection. Since the P subprograms are internally generated,
921 we leave these names undecoded, giving the user a clue that this
922 entity is internal. */
925 && encoded[len0 - 1] == 'N'
926 && (isdigit (encoded[len0 - 2]) || islower (encoded[len0 - 2])))
929 /* Remove the ___X.* suffix if present. Do not forget to verify that
930 the suffix is located before the current "end" of ENCODED. We want
931 to avoid re-matching parts of ENCODED that have previously been
932 marked as discarded (by decrementing LEN0). */
933 p = strstr (encoded, "___");
934 if (p != NULL && p - encoded < len0 - 3)
942 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
945 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
948 /* Make decoded big enough for possible expansion by operator name. */
949 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
950 decoded = decoding_buffer;
952 if (len0 > 1 && isdigit (encoded[len0 - 1]))
955 while ((i >= 0 && isdigit (encoded[i]))
956 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
958 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
960 else if (encoded[i] == '$')
964 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
965 decoded[j] = encoded[i];
970 if (at_start_name && encoded[i] == 'O')
973 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
975 int op_len = strlen (ada_opname_table[k].encoded);
976 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
978 && !isalnum (encoded[i + op_len]))
980 strcpy (decoded + j, ada_opname_table[k].decoded);
983 j += strlen (ada_opname_table[k].decoded);
987 if (ada_opname_table[k].encoded != NULL)
992 /* Replace "TK__" with "__", which will eventually be translated
993 into "." (just below). */
995 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
998 /* Remove _E{DIGITS}+[sb] */
1000 /* Just as for protected object subprograms, there are 2 categories
1001 of subprograms created by the compiler for each entry. The first
1002 one implements the actual entry code, and has a suffix following
1003 the convention above; the second one implements the barrier and
1004 uses the same convention as above, except that the 'E' is replaced
1007 Just as above, we do not decode the name of barrier functions
1008 to give the user a clue that the code he is debugging has been
1009 internally generated. */
1011 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1012 && isdigit (encoded[i+2]))
1016 while (k < len0 && isdigit (encoded[k]))
1020 && (encoded[k] == 'b' || encoded[k] == 's'))
1023 /* Just as an extra precaution, make sure that if this
1024 suffix is followed by anything else, it is a '_'.
1025 Otherwise, we matched this sequence by accident. */
1027 || (k < len0 && encoded[k] == '_'))
1032 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1033 the GNAT front-end in protected object subprograms. */
1036 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1038 /* Backtrack a bit up until we reach either the begining of
1039 the encoded name, or "__". Make sure that we only find
1040 digits or lowercase characters. */
1041 const char *ptr = encoded + i - 1;
1043 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1046 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1050 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1054 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1058 else if (!ADA_RETAIN_DOTS
1059 && i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1068 decoded[j] = encoded[i];
1073 decoded[j] = '\000';
1075 for (i = 0; decoded[i] != '\0'; i += 1)
1076 if (isupper (decoded[i]) || decoded[i] == ' ')
1079 if (strcmp (decoded, encoded) == 0)
1085 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1086 decoded = decoding_buffer;
1087 if (encoded[0] == '<')
1088 strcpy (decoded, encoded);
1090 sprintf (decoded, "<%s>", encoded);
1095 /* Table for keeping permanent unique copies of decoded names. Once
1096 allocated, names in this table are never released. While this is a
1097 storage leak, it should not be significant unless there are massive
1098 changes in the set of decoded names in successive versions of a
1099 symbol table loaded during a single session. */
1100 static struct htab *decoded_names_store;
1102 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1103 in the language-specific part of GSYMBOL, if it has not been
1104 previously computed. Tries to save the decoded name in the same
1105 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1106 in any case, the decoded symbol has a lifetime at least that of
1108 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1109 const, but nevertheless modified to a semantically equivalent form
1110 when a decoded name is cached in it.
1114 ada_decode_symbol (const struct general_symbol_info *gsymbol)
1117 (char **) &gsymbol->language_specific.cplus_specific.demangled_name;
1118 if (*resultp == NULL)
1120 const char *decoded = ada_decode (gsymbol->name);
1121 if (gsymbol->bfd_section != NULL)
1123 bfd *obfd = gsymbol->bfd_section->owner;
1126 struct objfile *objf;
1129 if (obfd == objf->obfd)
1131 *resultp = obsavestring (decoded, strlen (decoded),
1132 &objf->objfile_obstack);
1138 /* Sometimes, we can't find a corresponding objfile, in which
1139 case, we put the result on the heap. Since we only decode
1140 when needed, we hope this usually does not cause a
1141 significant memory leak (FIXME). */
1142 if (*resultp == NULL)
1144 char **slot = (char **) htab_find_slot (decoded_names_store,
1147 *slot = xstrdup (decoded);
1156 ada_la_decode (const char *encoded, int options)
1158 return xstrdup (ada_decode (encoded));
1161 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1162 suffixes that encode debugging information or leading _ada_ on
1163 SYM_NAME (see is_name_suffix commentary for the debugging
1164 information that is ignored). If WILD, then NAME need only match a
1165 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1166 either argument is NULL. */
1169 ada_match_name (const char *sym_name, const char *name, int wild)
1171 if (sym_name == NULL || name == NULL)
1174 return wild_match (name, strlen (name), sym_name);
1177 int len_name = strlen (name);
1178 return (strncmp (sym_name, name, len_name) == 0
1179 && is_name_suffix (sym_name + len_name))
1180 || (strncmp (sym_name, "_ada_", 5) == 0
1181 && strncmp (sym_name + 5, name, len_name) == 0
1182 && is_name_suffix (sym_name + len_name + 5));
1186 /* True (non-zero) iff, in Ada mode, the symbol SYM should be
1187 suppressed in info listings. */
1190 ada_suppress_symbol_printing (struct symbol *sym)
1192 if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN)
1195 return is_suppressed_name (SYMBOL_LINKAGE_NAME (sym));
1201 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
1203 static char *bound_name[] = {
1204 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1205 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1208 /* Maximum number of array dimensions we are prepared to handle. */
1210 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1212 /* Like modify_field, but allows bitpos > wordlength. */
1215 modify_general_field (char *addr, LONGEST fieldval, int bitpos, int bitsize)
1217 modify_field (addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
1221 /* The desc_* routines return primitive portions of array descriptors
1224 /* The descriptor or array type, if any, indicated by TYPE; removes
1225 level of indirection, if needed. */
1227 static struct type *
1228 desc_base_type (struct type *type)
1232 type = ada_check_typedef (type);
1234 && (TYPE_CODE (type) == TYPE_CODE_PTR
1235 || TYPE_CODE (type) == TYPE_CODE_REF))
1236 return ada_check_typedef (TYPE_TARGET_TYPE (type));
1241 /* True iff TYPE indicates a "thin" array pointer type. */
1244 is_thin_pntr (struct type *type)
1247 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1248 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1251 /* The descriptor type for thin pointer type TYPE. */
1253 static struct type *
1254 thin_descriptor_type (struct type *type)
1256 struct type *base_type = desc_base_type (type);
1257 if (base_type == NULL)
1259 if (is_suffix (ada_type_name (base_type), "___XVE"))
1263 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1264 if (alt_type == NULL)
1271 /* A pointer to the array data for thin-pointer value VAL. */
1273 static struct value *
1274 thin_data_pntr (struct value *val)
1276 struct type *type = value_type (val);
1277 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1278 return value_cast (desc_data_type (thin_descriptor_type (type)),
1281 return value_from_longest (desc_data_type (thin_descriptor_type (type)),
1282 VALUE_ADDRESS (val) + value_offset (val));
1285 /* True iff TYPE indicates a "thick" array pointer type. */
1288 is_thick_pntr (struct type *type)
1290 type = desc_base_type (type);
1291 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1292 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1295 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1296 pointer to one, the type of its bounds data; otherwise, NULL. */
1298 static struct type *
1299 desc_bounds_type (struct type *type)
1303 type = desc_base_type (type);
1307 else if (is_thin_pntr (type))
1309 type = thin_descriptor_type (type);
1312 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1314 return ada_check_typedef (r);
1316 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1318 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1320 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1325 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1326 one, a pointer to its bounds data. Otherwise NULL. */
1328 static struct value *
1329 desc_bounds (struct value *arr)
1331 struct type *type = ada_check_typedef (value_type (arr));
1332 if (is_thin_pntr (type))
1334 struct type *bounds_type =
1335 desc_bounds_type (thin_descriptor_type (type));
1338 if (desc_bounds_type == NULL)
1339 error (_("Bad GNAT array descriptor"));
1341 /* NOTE: The following calculation is not really kosher, but
1342 since desc_type is an XVE-encoded type (and shouldn't be),
1343 the correct calculation is a real pain. FIXME (and fix GCC). */
1344 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1345 addr = value_as_long (arr);
1347 addr = VALUE_ADDRESS (arr) + value_offset (arr);
1350 value_from_longest (lookup_pointer_type (bounds_type),
1351 addr - TYPE_LENGTH (bounds_type));
1354 else if (is_thick_pntr (type))
1355 return value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1356 _("Bad GNAT array descriptor"));
1361 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1362 position of the field containing the address of the bounds data. */
1365 fat_pntr_bounds_bitpos (struct type *type)
1367 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1370 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1371 size of the field containing the address of the bounds data. */
1374 fat_pntr_bounds_bitsize (struct type *type)
1376 type = desc_base_type (type);
1378 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1379 return TYPE_FIELD_BITSIZE (type, 1);
1381 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1384 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1385 pointer to one, the type of its array data (a
1386 pointer-to-array-with-no-bounds type); otherwise, NULL. Use
1387 ada_type_of_array to get an array type with bounds data. */
1389 static struct type *
1390 desc_data_type (struct type *type)
1392 type = desc_base_type (type);
1394 /* NOTE: The following is bogus; see comment in desc_bounds. */
1395 if (is_thin_pntr (type))
1396 return lookup_pointer_type
1397 (desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1)));
1398 else if (is_thick_pntr (type))
1399 return lookup_struct_elt_type (type, "P_ARRAY", 1);
1404 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1407 static struct value *
1408 desc_data (struct value *arr)
1410 struct type *type = value_type (arr);
1411 if (is_thin_pntr (type))
1412 return thin_data_pntr (arr);
1413 else if (is_thick_pntr (type))
1414 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1415 _("Bad GNAT array descriptor"));
1421 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1422 position of the field containing the address of the data. */
1425 fat_pntr_data_bitpos (struct type *type)
1427 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1430 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1431 size of the field containing the address of the data. */
1434 fat_pntr_data_bitsize (struct type *type)
1436 type = desc_base_type (type);
1438 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1439 return TYPE_FIELD_BITSIZE (type, 0);
1441 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1444 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1445 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1446 bound, if WHICH is 1. The first bound is I=1. */
1448 static struct value *
1449 desc_one_bound (struct value *bounds, int i, int which)
1451 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1452 _("Bad GNAT array descriptor bounds"));
1455 /* If BOUNDS is an array-bounds structure type, return the bit position
1456 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1457 bound, if WHICH is 1. The first bound is I=1. */
1460 desc_bound_bitpos (struct type *type, int i, int which)
1462 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1465 /* If BOUNDS is an array-bounds structure type, return the bit field size
1466 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1467 bound, if WHICH is 1. The first bound is I=1. */
1470 desc_bound_bitsize (struct type *type, int i, int which)
1472 type = desc_base_type (type);
1474 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1475 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1477 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1480 /* If TYPE is the type of an array-bounds structure, the type of its
1481 Ith bound (numbering from 1). Otherwise, NULL. */
1483 static struct type *
1484 desc_index_type (struct type *type, int i)
1486 type = desc_base_type (type);
1488 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1489 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1494 /* The number of index positions in the array-bounds type TYPE.
1495 Return 0 if TYPE is NULL. */
1498 desc_arity (struct type *type)
1500 type = desc_base_type (type);
1503 return TYPE_NFIELDS (type) / 2;
1507 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1508 an array descriptor type (representing an unconstrained array
1512 ada_is_direct_array_type (struct type *type)
1516 type = ada_check_typedef (type);
1517 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1518 || ada_is_array_descriptor_type (type));
1521 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1525 ada_is_array_type (struct type *type)
1528 && (TYPE_CODE (type) == TYPE_CODE_PTR
1529 || TYPE_CODE (type) == TYPE_CODE_REF))
1530 type = TYPE_TARGET_TYPE (type);
1531 return ada_is_direct_array_type (type);
1534 /* Non-zero iff TYPE is a simple array type or pointer to one. */
1537 ada_is_simple_array_type (struct type *type)
1541 type = ada_check_typedef (type);
1542 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1543 || (TYPE_CODE (type) == TYPE_CODE_PTR
1544 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
1547 /* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1550 ada_is_array_descriptor_type (struct type *type)
1552 struct type *data_type = desc_data_type (type);
1556 type = ada_check_typedef (type);
1559 && ((TYPE_CODE (data_type) == TYPE_CODE_PTR
1560 && TYPE_TARGET_TYPE (data_type) != NULL
1561 && TYPE_CODE (TYPE_TARGET_TYPE (data_type)) == TYPE_CODE_ARRAY)
1562 || TYPE_CODE (data_type) == TYPE_CODE_ARRAY)
1563 && desc_arity (desc_bounds_type (type)) > 0;
1566 /* Non-zero iff type is a partially mal-formed GNAT array
1567 descriptor. FIXME: This is to compensate for some problems with
1568 debugging output from GNAT. Re-examine periodically to see if it
1572 ada_is_bogus_array_descriptor (struct type *type)
1576 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1577 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1578 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1579 && !ada_is_array_descriptor_type (type);
1583 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1584 (fat pointer) returns the type of the array data described---specifically,
1585 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
1586 in from the descriptor; otherwise, they are left unspecified. If
1587 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1588 returns NULL. The result is simply the type of ARR if ARR is not
1591 ada_type_of_array (struct value *arr, int bounds)
1593 if (ada_is_packed_array_type (value_type (arr)))
1594 return decode_packed_array_type (value_type (arr));
1596 if (!ada_is_array_descriptor_type (value_type (arr)))
1597 return value_type (arr);
1601 ada_check_typedef (TYPE_TARGET_TYPE (desc_data_type (value_type (arr))));
1604 struct type *elt_type;
1606 struct value *descriptor;
1607 struct objfile *objf = TYPE_OBJFILE (value_type (arr));
1609 elt_type = ada_array_element_type (value_type (arr), -1);
1610 arity = ada_array_arity (value_type (arr));
1612 if (elt_type == NULL || arity == 0)
1613 return ada_check_typedef (value_type (arr));
1615 descriptor = desc_bounds (arr);
1616 if (value_as_long (descriptor) == 0)
1620 struct type *range_type = alloc_type (objf);
1621 struct type *array_type = alloc_type (objf);
1622 struct value *low = desc_one_bound (descriptor, arity, 0);
1623 struct value *high = desc_one_bound (descriptor, arity, 1);
1626 create_range_type (range_type, value_type (low),
1627 longest_to_int (value_as_long (low)),
1628 longest_to_int (value_as_long (high)));
1629 elt_type = create_array_type (array_type, elt_type, range_type);
1632 return lookup_pointer_type (elt_type);
1636 /* If ARR does not represent an array, returns ARR unchanged.
1637 Otherwise, returns either a standard GDB array with bounds set
1638 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1639 GDB array. Returns NULL if ARR is a null fat pointer. */
1642 ada_coerce_to_simple_array_ptr (struct value *arr)
1644 if (ada_is_array_descriptor_type (value_type (arr)))
1646 struct type *arrType = ada_type_of_array (arr, 1);
1647 if (arrType == NULL)
1649 return value_cast (arrType, value_copy (desc_data (arr)));
1651 else if (ada_is_packed_array_type (value_type (arr)))
1652 return decode_packed_array (arr);
1657 /* If ARR does not represent an array, returns ARR unchanged.
1658 Otherwise, returns a standard GDB array describing ARR (which may
1659 be ARR itself if it already is in the proper form). */
1661 static struct value *
1662 ada_coerce_to_simple_array (struct value *arr)
1664 if (ada_is_array_descriptor_type (value_type (arr)))
1666 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1668 error (_("Bounds unavailable for null array pointer."));
1669 check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
1670 return value_ind (arrVal);
1672 else if (ada_is_packed_array_type (value_type (arr)))
1673 return decode_packed_array (arr);
1678 /* If TYPE represents a GNAT array type, return it translated to an
1679 ordinary GDB array type (possibly with BITSIZE fields indicating
1680 packing). For other types, is the identity. */
1683 ada_coerce_to_simple_array_type (struct type *type)
1685 struct value *mark = value_mark ();
1686 struct value *dummy = value_from_longest (builtin_type_long, 0);
1687 struct type *result;
1688 deprecated_set_value_type (dummy, type);
1689 result = ada_type_of_array (dummy, 0);
1690 value_free_to_mark (mark);
1694 /* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1697 ada_is_packed_array_type (struct type *type)
1701 type = desc_base_type (type);
1702 type = ada_check_typedef (type);
1704 ada_type_name (type) != NULL
1705 && strstr (ada_type_name (type), "___XP") != NULL;
1708 /* Given that TYPE is a standard GDB array type with all bounds filled
1709 in, and that the element size of its ultimate scalar constituents
1710 (that is, either its elements, or, if it is an array of arrays, its
1711 elements' elements, etc.) is *ELT_BITS, return an identical type,
1712 but with the bit sizes of its elements (and those of any
1713 constituent arrays) recorded in the BITSIZE components of its
1714 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1717 static struct type *
1718 packed_array_type (struct type *type, long *elt_bits)
1720 struct type *new_elt_type;
1721 struct type *new_type;
1722 LONGEST low_bound, high_bound;
1724 type = ada_check_typedef (type);
1725 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1728 new_type = alloc_type (TYPE_OBJFILE (type));
1729 new_elt_type = packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
1731 create_array_type (new_type, new_elt_type, TYPE_FIELD_TYPE (type, 0));
1732 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
1733 TYPE_NAME (new_type) = ada_type_name (type);
1735 if (get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
1736 &low_bound, &high_bound) < 0)
1737 low_bound = high_bound = 0;
1738 if (high_bound < low_bound)
1739 *elt_bits = TYPE_LENGTH (new_type) = 0;
1742 *elt_bits *= (high_bound - low_bound + 1);
1743 TYPE_LENGTH (new_type) =
1744 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1747 TYPE_FLAGS (new_type) |= TYPE_FLAG_FIXED_INSTANCE;
1751 /* The array type encoded by TYPE, where ada_is_packed_array_type (TYPE). */
1753 static struct type *
1754 decode_packed_array_type (struct type *type)
1757 struct block **blocks;
1758 const char *raw_name = ada_type_name (ada_check_typedef (type));
1759 char *name = (char *) alloca (strlen (raw_name) + 1);
1760 char *tail = strstr (raw_name, "___XP");
1761 struct type *shadow_type;
1765 type = desc_base_type (type);
1767 memcpy (name, raw_name, tail - raw_name);
1768 name[tail - raw_name] = '\000';
1770 sym = standard_lookup (name, get_selected_block (0), VAR_DOMAIN);
1771 if (sym == NULL || SYMBOL_TYPE (sym) == NULL)
1773 lim_warning (_("could not find bounds information on packed array"));
1776 shadow_type = SYMBOL_TYPE (sym);
1778 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
1780 lim_warning (_("could not understand bounds information on packed array"));
1784 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1787 (_("could not understand bit size information on packed array"));
1791 return packed_array_type (shadow_type, &bits);
1794 /* Given that ARR is a struct value *indicating a GNAT packed array,
1795 returns a simple array that denotes that array. Its type is a
1796 standard GDB array type except that the BITSIZEs of the array
1797 target types are set to the number of bits in each element, and the
1798 type length is set appropriately. */
1800 static struct value *
1801 decode_packed_array (struct value *arr)
1805 arr = ada_coerce_ref (arr);
1806 if (TYPE_CODE (value_type (arr)) == TYPE_CODE_PTR)
1807 arr = ada_value_ind (arr);
1809 type = decode_packed_array_type (value_type (arr));
1812 error (_("can't unpack array"));
1816 if (BITS_BIG_ENDIAN && ada_is_modular_type (value_type (arr)))
1818 /* This is a (right-justified) modular type representing a packed
1819 array with no wrapper. In order to interpret the value through
1820 the (left-justified) packed array type we just built, we must
1821 first left-justify it. */
1822 int bit_size, bit_pos;
1825 mod = ada_modulus (value_type (arr)) - 1;
1832 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
1833 arr = ada_value_primitive_packed_val (arr, NULL,
1834 bit_pos / HOST_CHAR_BIT,
1835 bit_pos % HOST_CHAR_BIT,
1840 return coerce_unspec_val_to_type (arr, type);
1844 /* The value of the element of packed array ARR at the ARITY indices
1845 given in IND. ARR must be a simple array. */
1847 static struct value *
1848 value_subscript_packed (struct value *arr, int arity, struct value **ind)
1851 int bits, elt_off, bit_off;
1852 long elt_total_bit_offset;
1853 struct type *elt_type;
1857 elt_total_bit_offset = 0;
1858 elt_type = ada_check_typedef (value_type (arr));
1859 for (i = 0; i < arity; i += 1)
1861 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
1862 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
1864 (_("attempt to do packed indexing of something other than a packed array"));
1867 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
1868 LONGEST lowerbound, upperbound;
1871 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
1873 lim_warning (_("don't know bounds of array"));
1874 lowerbound = upperbound = 0;
1877 idx = value_as_long (value_pos_atr (ind[i]));
1878 if (idx < lowerbound || idx > upperbound)
1879 lim_warning (_("packed array index %ld out of bounds"), (long) idx);
1880 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
1881 elt_total_bit_offset += (idx - lowerbound) * bits;
1882 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
1885 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
1886 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
1888 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
1893 /* Non-zero iff TYPE includes negative integer values. */
1896 has_negatives (struct type *type)
1898 switch (TYPE_CODE (type))
1903 return !TYPE_UNSIGNED (type);
1904 case TYPE_CODE_RANGE:
1905 return TYPE_LOW_BOUND (type) < 0;
1910 /* Create a new value of type TYPE from the contents of OBJ starting
1911 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
1912 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
1913 assigning through the result will set the field fetched from.
1914 VALADDR is ignored unless OBJ is NULL, in which case,
1915 VALADDR+OFFSET must address the start of storage containing the
1916 packed value. The value returned in this case is never an lval.
1917 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
1920 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
1921 long offset, int bit_offset, int bit_size,
1925 int src, /* Index into the source area */
1926 targ, /* Index into the target area */
1927 srcBitsLeft, /* Number of source bits left to move */
1928 nsrc, ntarg, /* Number of source and target bytes */
1929 unusedLS, /* Number of bits in next significant
1930 byte of source that are unused */
1931 accumSize; /* Number of meaningful bits in accum */
1932 unsigned char *bytes; /* First byte containing data to unpack */
1933 unsigned char *unpacked;
1934 unsigned long accum; /* Staging area for bits being transferred */
1936 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
1937 /* Transmit bytes from least to most significant; delta is the direction
1938 the indices move. */
1939 int delta = BITS_BIG_ENDIAN ? -1 : 1;
1941 type = ada_check_typedef (type);
1945 v = allocate_value (type);
1946 bytes = (unsigned char *) (valaddr + offset);
1948 else if (value_lazy (obj))
1951 VALUE_ADDRESS (obj) + value_offset (obj) + offset);
1952 bytes = (unsigned char *) alloca (len);
1953 read_memory (VALUE_ADDRESS (v), bytes, len);
1957 v = allocate_value (type);
1958 bytes = (unsigned char *) value_contents (obj) + offset;
1963 VALUE_LVAL (v) = VALUE_LVAL (obj);
1964 if (VALUE_LVAL (obj) == lval_internalvar)
1965 VALUE_LVAL (v) = lval_internalvar_component;
1966 VALUE_ADDRESS (v) = VALUE_ADDRESS (obj) + value_offset (obj) + offset;
1967 set_value_bitpos (v, bit_offset + value_bitpos (obj));
1968 set_value_bitsize (v, bit_size);
1969 if (value_bitpos (v) >= HOST_CHAR_BIT)
1971 VALUE_ADDRESS (v) += 1;
1972 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
1976 set_value_bitsize (v, bit_size);
1977 unpacked = (unsigned char *) value_contents (v);
1979 srcBitsLeft = bit_size;
1981 ntarg = TYPE_LENGTH (type);
1985 memset (unpacked, 0, TYPE_LENGTH (type));
1988 else if (BITS_BIG_ENDIAN)
1991 if (has_negatives (type)
1992 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
1996 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
1999 switch (TYPE_CODE (type))
2001 case TYPE_CODE_ARRAY:
2002 case TYPE_CODE_UNION:
2003 case TYPE_CODE_STRUCT:
2004 /* Non-scalar values must be aligned at a byte boundary... */
2006 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2007 /* ... And are placed at the beginning (most-significant) bytes
2009 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2013 targ = TYPE_LENGTH (type) - 1;
2019 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2022 unusedLS = bit_offset;
2025 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2032 /* Mask for removing bits of the next source byte that are not
2033 part of the value. */
2034 unsigned int unusedMSMask =
2035 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2037 /* Sign-extend bits for this byte. */
2038 unsigned int signMask = sign & ~unusedMSMask;
2040 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2041 accumSize += HOST_CHAR_BIT - unusedLS;
2042 if (accumSize >= HOST_CHAR_BIT)
2044 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2045 accumSize -= HOST_CHAR_BIT;
2046 accum >>= HOST_CHAR_BIT;
2050 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2057 accum |= sign << accumSize;
2058 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2059 accumSize -= HOST_CHAR_BIT;
2060 accum >>= HOST_CHAR_BIT;
2068 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2069 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
2072 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2073 int src_offset, int n)
2075 unsigned int accum, mask;
2076 int accum_bits, chunk_size;
2078 target += targ_offset / HOST_CHAR_BIT;
2079 targ_offset %= HOST_CHAR_BIT;
2080 source += src_offset / HOST_CHAR_BIT;
2081 src_offset %= HOST_CHAR_BIT;
2082 if (BITS_BIG_ENDIAN)
2084 accum = (unsigned char) *source;
2086 accum_bits = HOST_CHAR_BIT - src_offset;
2091 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2092 accum_bits += HOST_CHAR_BIT;
2094 chunk_size = HOST_CHAR_BIT - targ_offset;
2097 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2098 mask = ((1 << chunk_size) - 1) << unused_right;
2101 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2103 accum_bits -= chunk_size;
2110 accum = (unsigned char) *source >> src_offset;
2112 accum_bits = HOST_CHAR_BIT - src_offset;
2116 accum = accum + ((unsigned char) *source << accum_bits);
2117 accum_bits += HOST_CHAR_BIT;
2119 chunk_size = HOST_CHAR_BIT - targ_offset;
2122 mask = ((1 << chunk_size) - 1) << targ_offset;
2123 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2125 accum_bits -= chunk_size;
2126 accum >>= chunk_size;
2133 /* Store the contents of FROMVAL into the location of TOVAL.
2134 Return a new value with the location of TOVAL and contents of
2135 FROMVAL. Handles assignment into packed fields that have
2136 floating-point or non-scalar types. */
2138 static struct value *
2139 ada_value_assign (struct value *toval, struct value *fromval)
2141 struct type *type = value_type (toval);
2142 int bits = value_bitsize (toval);
2144 toval = ada_coerce_ref (toval);
2145 fromval = ada_coerce_ref (fromval);
2147 if (ada_is_direct_array_type (value_type (toval)))
2148 toval = ada_coerce_to_simple_array (toval);
2149 if (ada_is_direct_array_type (value_type (fromval)))
2150 fromval = ada_coerce_to_simple_array (fromval);
2152 if (!deprecated_value_modifiable (toval))
2153 error (_("Left operand of assignment is not a modifiable lvalue."));
2155 if (VALUE_LVAL (toval) == lval_memory
2157 && (TYPE_CODE (type) == TYPE_CODE_FLT
2158 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2160 int len = (value_bitpos (toval)
2161 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2162 char *buffer = (char *) alloca (len);
2164 CORE_ADDR to_addr = VALUE_ADDRESS (toval) + value_offset (toval);
2166 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2167 fromval = value_cast (type, fromval);
2169 read_memory (to_addr, buffer, len);
2170 if (BITS_BIG_ENDIAN)
2171 move_bits (buffer, value_bitpos (toval),
2172 value_contents (fromval),
2173 TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT -
2176 move_bits (buffer, value_bitpos (toval), value_contents (fromval),
2178 write_memory (to_addr, buffer, len);
2179 if (deprecated_memory_changed_hook)
2180 deprecated_memory_changed_hook (to_addr, len);
2182 val = value_copy (toval);
2183 memcpy (value_contents_raw (val), value_contents (fromval),
2184 TYPE_LENGTH (type));
2185 deprecated_set_value_type (val, type);
2190 return value_assign (toval, fromval);
2194 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2195 * CONTAINER, assign the contents of VAL to COMPONENTS's place in
2196 * CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2197 * COMPONENT, and not the inferior's memory. The current contents
2198 * of COMPONENT are ignored. */
2200 value_assign_to_component (struct value *container, struct value *component,
2203 LONGEST offset_in_container =
2204 (LONGEST) (VALUE_ADDRESS (component) + value_offset (component)
2205 - VALUE_ADDRESS (container) - value_offset (container));
2206 int bit_offset_in_container =
2207 value_bitpos (component) - value_bitpos (container);
2210 val = value_cast (value_type (component), val);
2212 if (value_bitsize (component) == 0)
2213 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2215 bits = value_bitsize (component);
2217 if (BITS_BIG_ENDIAN)
2218 move_bits (value_contents_writeable (container) + offset_in_container,
2219 value_bitpos (container) + bit_offset_in_container,
2220 value_contents (val),
2221 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2224 move_bits (value_contents_writeable (container) + offset_in_container,
2225 value_bitpos (container) + bit_offset_in_container,
2226 value_contents (val), 0, bits);
2229 /* The value of the element of array ARR at the ARITY indices given in IND.
2230 ARR may be either a simple array, GNAT array descriptor, or pointer
2234 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2238 struct type *elt_type;
2240 elt = ada_coerce_to_simple_array (arr);
2242 elt_type = ada_check_typedef (value_type (elt));
2243 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2244 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2245 return value_subscript_packed (elt, arity, ind);
2247 for (k = 0; k < arity; k += 1)
2249 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2250 error (_("too many subscripts (%d expected)"), k);
2251 elt = value_subscript (elt, value_pos_atr (ind[k]));
2256 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2257 value of the element of *ARR at the ARITY indices given in
2258 IND. Does not read the entire array into memory. */
2261 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2266 for (k = 0; k < arity; k += 1)
2271 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2272 error (_("too many subscripts (%d expected)"), k);
2273 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2275 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2276 idx = value_pos_atr (ind[k]);
2278 idx = value_sub (idx, value_from_longest (builtin_type_int, lwb));
2279 arr = value_add (arr, idx);
2280 type = TYPE_TARGET_TYPE (type);
2283 return value_ind (arr);
2286 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2287 actual type of ARRAY_PTR is ignored), returns a reference to
2288 the Ada slice of HIGH-LOW+1 elements starting at index LOW. The lower
2289 bound of this array is LOW, as per Ada rules. */
2290 static struct value *
2291 ada_value_slice_ptr (struct value *array_ptr, struct type *type,
2294 CORE_ADDR base = value_as_address (array_ptr)
2295 + ((low - TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)))
2296 * TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
2297 struct type *index_type =
2298 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
2300 struct type *slice_type =
2301 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2302 return value_from_pointer (lookup_reference_type (slice_type), base);
2306 static struct value *
2307 ada_value_slice (struct value *array, int low, int high)
2309 struct type *type = value_type (array);
2310 struct type *index_type =
2311 create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2312 struct type *slice_type =
2313 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2314 return value_cast (slice_type, value_slice (array, low, high - low + 1));
2317 /* If type is a record type in the form of a standard GNAT array
2318 descriptor, returns the number of dimensions for type. If arr is a
2319 simple array, returns the number of "array of"s that prefix its
2320 type designation. Otherwise, returns 0. */
2323 ada_array_arity (struct type *type)
2330 type = desc_base_type (type);
2333 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2334 return desc_arity (desc_bounds_type (type));
2336 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2339 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2345 /* If TYPE is a record type in the form of a standard GNAT array
2346 descriptor or a simple array type, returns the element type for
2347 TYPE after indexing by NINDICES indices, or by all indices if
2348 NINDICES is -1. Otherwise, returns NULL. */
2351 ada_array_element_type (struct type *type, int nindices)
2353 type = desc_base_type (type);
2355 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2358 struct type *p_array_type;
2360 p_array_type = desc_data_type (type);
2362 k = ada_array_arity (type);
2366 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
2367 if (nindices >= 0 && k > nindices)
2369 p_array_type = TYPE_TARGET_TYPE (p_array_type);
2370 while (k > 0 && p_array_type != NULL)
2372 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2375 return p_array_type;
2377 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2379 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2381 type = TYPE_TARGET_TYPE (type);
2390 /* The type of nth index in arrays of given type (n numbering from 1).
2391 Does not examine memory. */
2394 ada_index_type (struct type *type, int n)
2396 struct type *result_type;
2398 type = desc_base_type (type);
2400 if (n > ada_array_arity (type))
2403 if (ada_is_simple_array_type (type))
2407 for (i = 1; i < n; i += 1)
2408 type = TYPE_TARGET_TYPE (type);
2409 result_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0));
2410 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2411 has a target type of TYPE_CODE_UNDEF. We compensate here, but
2412 perhaps stabsread.c would make more sense. */
2413 if (result_type == NULL || TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2414 result_type = builtin_type_int;
2419 return desc_index_type (desc_bounds_type (type), n);
2422 /* Given that arr is an array type, returns the lower bound of the
2423 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2424 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
2425 array-descriptor type. If TYPEP is non-null, *TYPEP is set to the
2426 bounds type. It works for other arrays with bounds supplied by
2427 run-time quantities other than discriminants. */
2430 ada_array_bound_from_type (struct type * arr_type, int n, int which,
2431 struct type ** typep)
2434 struct type *index_type_desc;
2436 if (ada_is_packed_array_type (arr_type))
2437 arr_type = decode_packed_array_type (arr_type);
2439 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2442 *typep = builtin_type_int;
2443 return (LONGEST) - which;
2446 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2447 type = TYPE_TARGET_TYPE (arr_type);
2451 index_type_desc = ada_find_parallel_type (type, "___XA");
2452 if (index_type_desc == NULL)
2454 struct type *range_type;
2455 struct type *index_type;
2459 type = TYPE_TARGET_TYPE (type);
2463 range_type = TYPE_INDEX_TYPE (type);
2464 index_type = TYPE_TARGET_TYPE (range_type);
2465 if (TYPE_CODE (index_type) == TYPE_CODE_UNDEF)
2466 index_type = builtin_type_long;
2468 *typep = index_type;
2470 (LONGEST) (which == 0
2471 ? TYPE_LOW_BOUND (range_type)
2472 : TYPE_HIGH_BOUND (range_type));
2476 struct type *index_type =
2477 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2478 NULL, TYPE_OBJFILE (arr_type));
2480 *typep = TYPE_TARGET_TYPE (index_type);
2482 (LONGEST) (which == 0
2483 ? TYPE_LOW_BOUND (index_type)
2484 : TYPE_HIGH_BOUND (index_type));
2488 /* Given that arr is an array value, returns the lower bound of the
2489 nth index (numbering from 1) if which is 0, and the upper bound if
2490 which is 1. This routine will also work for arrays with bounds
2491 supplied by run-time quantities other than discriminants. */
2494 ada_array_bound (struct value *arr, int n, int which)
2496 struct type *arr_type = value_type (arr);
2498 if (ada_is_packed_array_type (arr_type))
2499 return ada_array_bound (decode_packed_array (arr), n, which);
2500 else if (ada_is_simple_array_type (arr_type))
2503 LONGEST v = ada_array_bound_from_type (arr_type, n, which, &type);
2504 return value_from_longest (type, v);
2507 return desc_one_bound (desc_bounds (arr), n, which);
2510 /* Given that arr is an array value, returns the length of the
2511 nth index. This routine will also work for arrays with bounds
2512 supplied by run-time quantities other than discriminants.
2513 Does not work for arrays indexed by enumeration types with representation
2514 clauses at the moment. */
2517 ada_array_length (struct value *arr, int n)
2519 struct type *arr_type = ada_check_typedef (value_type (arr));
2521 if (ada_is_packed_array_type (arr_type))
2522 return ada_array_length (decode_packed_array (arr), n);
2524 if (ada_is_simple_array_type (arr_type))
2528 ada_array_bound_from_type (arr_type, n, 1, &type) -
2529 ada_array_bound_from_type (arr_type, n, 0, NULL) + 1;
2530 return value_from_longest (type, v);
2534 value_from_longest (builtin_type_int,
2535 value_as_long (desc_one_bound (desc_bounds (arr),
2537 - value_as_long (desc_one_bound (desc_bounds (arr),
2541 /* An empty array whose type is that of ARR_TYPE (an array type),
2542 with bounds LOW to LOW-1. */
2544 static struct value *
2545 empty_array (struct type *arr_type, int low)
2547 struct type *index_type =
2548 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2550 struct type *elt_type = ada_array_element_type (arr_type, 1);
2551 return allocate_value (create_array_type (NULL, elt_type, index_type));
2555 /* Name resolution */
2557 /* The "decoded" name for the user-definable Ada operator corresponding
2561 ada_decoded_op_name (enum exp_opcode op)
2565 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2567 if (ada_opname_table[i].op == op)
2568 return ada_opname_table[i].decoded;
2570 error (_("Could not find operator name for opcode"));
2574 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2575 references (marked by OP_VAR_VALUE nodes in which the symbol has an
2576 undefined namespace) and converts operators that are
2577 user-defined into appropriate function calls. If CONTEXT_TYPE is
2578 non-null, it provides a preferred result type [at the moment, only
2579 type void has any effect---causing procedures to be preferred over
2580 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
2581 return type is preferred. May change (expand) *EXP. */
2584 resolve (struct expression **expp, int void_context_p)
2588 resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
2591 /* Resolve the operator of the subexpression beginning at
2592 position *POS of *EXPP. "Resolving" consists of replacing
2593 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2594 with their resolutions, replacing built-in operators with
2595 function calls to user-defined operators, where appropriate, and,
2596 when DEPROCEDURE_P is non-zero, converting function-valued variables
2597 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
2598 are as in ada_resolve, above. */
2600 static struct value *
2601 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2602 struct type *context_type)
2606 struct expression *exp; /* Convenience: == *expp. */
2607 enum exp_opcode op = (*expp)->elts[pc].opcode;
2608 struct value **argvec; /* Vector of operand types (alloca'ed). */
2609 int nargs; /* Number of operands. */
2616 /* Pass one: resolve operands, saving their types and updating *pos,
2621 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2622 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2627 resolve_subexp (expp, pos, 0, NULL);
2629 nargs = longest_to_int (exp->elts[pc + 1].longconst);
2634 resolve_subexp (expp, pos, 0, NULL);
2639 resolve_subexp (expp, pos, 1, exp->elts[pc + 1].type);
2642 case OP_ATR_MODULUS:
2652 case TERNOP_IN_RANGE:
2653 case BINOP_IN_BOUNDS:
2659 case OP_DISCRETE_RANGE:
2661 ada_forward_operator_length (exp, pc, &oplen, &nargs);
2670 arg1 = resolve_subexp (expp, pos, 0, NULL);
2672 resolve_subexp (expp, pos, 1, NULL);
2674 resolve_subexp (expp, pos, 1, value_type (arg1));
2691 case BINOP_LOGICAL_AND:
2692 case BINOP_LOGICAL_OR:
2693 case BINOP_BITWISE_AND:
2694 case BINOP_BITWISE_IOR:
2695 case BINOP_BITWISE_XOR:
2698 case BINOP_NOTEQUAL:
2705 case BINOP_SUBSCRIPT:
2710 case UNOP_LOGICAL_NOT:
2727 case OP_INTERNALVAR:
2736 case STRUCTOP_STRUCT:
2737 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2750 error (_("Unexpected operator during name resolution"));
2753 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2754 for (i = 0; i < nargs; i += 1)
2755 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2759 /* Pass two: perform any resolution on principal operator. */
2766 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2768 struct ada_symbol_info *candidates;
2772 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2773 (exp->elts[pc + 2].symbol),
2774 exp->elts[pc + 1].block, VAR_DOMAIN,
2777 if (n_candidates > 1)
2779 /* Types tend to get re-introduced locally, so if there
2780 are any local symbols that are not types, first filter
2783 for (j = 0; j < n_candidates; j += 1)
2784 switch (SYMBOL_CLASS (candidates[j].sym))
2790 case LOC_REGPARM_ADDR:
2794 case LOC_BASEREG_ARG:
2796 case LOC_COMPUTED_ARG:
2802 if (j < n_candidates)
2805 while (j < n_candidates)
2807 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2809 candidates[j] = candidates[n_candidates - 1];
2818 if (n_candidates == 0)
2819 error (_("No definition found for %s"),
2820 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2821 else if (n_candidates == 1)
2823 else if (deprocedure_p
2824 && !is_nonfunction (candidates, n_candidates))
2826 i = ada_resolve_function
2827 (candidates, n_candidates, NULL, 0,
2828 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
2831 error (_("Could not find a match for %s"),
2832 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2836 printf_filtered (_("Multiple matches for %s\n"),
2837 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2838 user_select_syms (candidates, n_candidates, 1);
2842 exp->elts[pc + 1].block = candidates[i].block;
2843 exp->elts[pc + 2].symbol = candidates[i].sym;
2844 if (innermost_block == NULL
2845 || contained_in (candidates[i].block, innermost_block))
2846 innermost_block = candidates[i].block;
2850 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2853 replace_operator_with_call (expp, pc, 0, 0,
2854 exp->elts[pc + 2].symbol,
2855 exp->elts[pc + 1].block);
2862 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2863 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2865 struct ada_symbol_info *candidates;
2869 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2870 (exp->elts[pc + 5].symbol),
2871 exp->elts[pc + 4].block, VAR_DOMAIN,
2873 if (n_candidates == 1)
2877 i = ada_resolve_function
2878 (candidates, n_candidates,
2880 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
2883 error (_("Could not find a match for %s"),
2884 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2887 exp->elts[pc + 4].block = candidates[i].block;
2888 exp->elts[pc + 5].symbol = candidates[i].sym;
2889 if (innermost_block == NULL
2890 || contained_in (candidates[i].block, innermost_block))
2891 innermost_block = candidates[i].block;
2902 case BINOP_BITWISE_AND:
2903 case BINOP_BITWISE_IOR:
2904 case BINOP_BITWISE_XOR:
2906 case BINOP_NOTEQUAL:
2914 case UNOP_LOGICAL_NOT:
2916 if (possible_user_operator_p (op, argvec))
2918 struct ada_symbol_info *candidates;
2922 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
2923 (struct block *) NULL, VAR_DOMAIN,
2925 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
2926 ada_decoded_op_name (op), NULL);
2930 replace_operator_with_call (expp, pc, nargs, 1,
2931 candidates[i].sym, candidates[i].block);
2941 return evaluate_subexp_type (exp, pos);
2944 /* Return non-zero if formal type FTYPE matches actual type ATYPE. If
2945 MAY_DEREF is non-zero, the formal may be a pointer and the actual
2946 a non-pointer. A type of 'void' (which is never a valid expression type)
2947 by convention matches anything. */
2948 /* The term "match" here is rather loose. The match is heuristic and
2949 liberal. FIXME: TOO liberal, in fact. */
2952 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
2954 ftype = ada_check_typedef (ftype);
2955 atype = ada_check_typedef (atype);
2957 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
2958 ftype = TYPE_TARGET_TYPE (ftype);
2959 if (TYPE_CODE (atype) == TYPE_CODE_REF)
2960 atype = TYPE_TARGET_TYPE (atype);
2962 if (TYPE_CODE (ftype) == TYPE_CODE_VOID
2963 || TYPE_CODE (atype) == TYPE_CODE_VOID)
2966 switch (TYPE_CODE (ftype))
2971 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
2972 return ada_type_match (TYPE_TARGET_TYPE (ftype),
2973 TYPE_TARGET_TYPE (atype), 0);
2976 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
2978 case TYPE_CODE_ENUM:
2979 case TYPE_CODE_RANGE:
2980 switch (TYPE_CODE (atype))
2983 case TYPE_CODE_ENUM:
2984 case TYPE_CODE_RANGE:
2990 case TYPE_CODE_ARRAY:
2991 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2992 || ada_is_array_descriptor_type (atype));
2994 case TYPE_CODE_STRUCT:
2995 if (ada_is_array_descriptor_type (ftype))
2996 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2997 || ada_is_array_descriptor_type (atype));
2999 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3000 && !ada_is_array_descriptor_type (atype));
3002 case TYPE_CODE_UNION:
3004 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3008 /* Return non-zero if the formals of FUNC "sufficiently match" the
3009 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3010 may also be an enumeral, in which case it is treated as a 0-
3011 argument function. */
3014 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3017 struct type *func_type = SYMBOL_TYPE (func);
3019 if (SYMBOL_CLASS (func) == LOC_CONST
3020 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3021 return (n_actuals == 0);
3022 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3025 if (TYPE_NFIELDS (func_type) != n_actuals)
3028 for (i = 0; i < n_actuals; i += 1)
3030 if (actuals[i] == NULL)
3034 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type, i));
3035 struct type *atype = ada_check_typedef (value_type (actuals[i]));
3037 if (!ada_type_match (ftype, atype, 1))
3044 /* False iff function type FUNC_TYPE definitely does not produce a value
3045 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3046 FUNC_TYPE is not a valid function type with a non-null return type
3047 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3050 return_match (struct type *func_type, struct type *context_type)
3052 struct type *return_type;
3054 if (func_type == NULL)
3057 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3058 return_type = base_type (TYPE_TARGET_TYPE (func_type));
3060 return_type = base_type (func_type);
3061 if (return_type == NULL)
3064 context_type = base_type (context_type);
3066 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3067 return context_type == NULL || return_type == context_type;
3068 else if (context_type == NULL)
3069 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3071 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3075 /* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
3076 function (if any) that matches the types of the NARGS arguments in
3077 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3078 that returns that type, then eliminate matches that don't. If
3079 CONTEXT_TYPE is void and there is at least one match that does not
3080 return void, eliminate all matches that do.
3082 Asks the user if there is more than one match remaining. Returns -1
3083 if there is no such symbol or none is selected. NAME is used
3084 solely for messages. May re-arrange and modify SYMS in
3085 the process; the index returned is for the modified vector. */
3088 ada_resolve_function (struct ada_symbol_info syms[],
3089 int nsyms, struct value **args, int nargs,
3090 const char *name, struct type *context_type)
3093 int m; /* Number of hits */
3094 struct type *fallback;
3095 struct type *return_type;
3097 return_type = context_type;
3098 if (context_type == NULL)
3099 fallback = builtin_type_void;
3106 for (k = 0; k < nsyms; k += 1)
3108 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3110 if (ada_args_match (syms[k].sym, args, nargs)
3111 && return_match (type, return_type))
3117 if (m > 0 || return_type == fallback)
3120 return_type = fallback;
3127 printf_filtered (_("Multiple matches for %s\n"), name);
3128 user_select_syms (syms, m, 1);
3134 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3135 in a listing of choices during disambiguation (see sort_choices, below).
3136 The idea is that overloadings of a subprogram name from the
3137 same package should sort in their source order. We settle for ordering
3138 such symbols by their trailing number (__N or $N). */
3141 encoded_ordered_before (char *N0, char *N1)
3145 else if (N0 == NULL)
3150 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3152 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3154 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3155 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3159 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3162 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3164 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3165 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3167 return (strcmp (N0, N1) < 0);
3171 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3175 sort_choices (struct ada_symbol_info syms[], int nsyms)
3178 for (i = 1; i < nsyms; i += 1)
3180 struct ada_symbol_info sym = syms[i];
3183 for (j = i - 1; j >= 0; j -= 1)
3185 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3186 SYMBOL_LINKAGE_NAME (sym.sym)))
3188 syms[j + 1] = syms[j];
3194 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3195 by asking the user (if necessary), returning the number selected,
3196 and setting the first elements of SYMS items. Error if no symbols
3199 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3200 to be re-integrated one of these days. */
3203 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3206 int *chosen = (int *) alloca (sizeof (int) * nsyms);
3208 int first_choice = (max_results == 1) ? 1 : 2;
3210 if (max_results < 1)
3211 error (_("Request to select 0 symbols!"));
3215 printf_unfiltered (_("[0] cancel\n"));
3216 if (max_results > 1)
3217 printf_unfiltered (_("[1] all\n"));
3219 sort_choices (syms, nsyms);
3221 for (i = 0; i < nsyms; i += 1)
3223 if (syms[i].sym == NULL)
3226 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3228 struct symtab_and_line sal =
3229 find_function_start_sal (syms[i].sym, 1);
3230 if (sal.symtab == NULL)
3231 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3233 SYMBOL_PRINT_NAME (syms[i].sym),
3236 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3237 SYMBOL_PRINT_NAME (syms[i].sym),
3238 sal.symtab->filename, sal.line);
3244 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3245 && SYMBOL_TYPE (syms[i].sym) != NULL
3246 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3247 struct symtab *symtab = symtab_for_sym (syms[i].sym);
3249 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3250 printf_unfiltered (_("[%d] %s at %s:%d\n"),
3252 SYMBOL_PRINT_NAME (syms[i].sym),
3253 symtab->filename, SYMBOL_LINE (syms[i].sym));
3254 else if (is_enumeral
3255 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3257 printf_unfiltered (("[%d] "), i + first_choice);
3258 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3260 printf_unfiltered (_("'(%s) (enumeral)\n"),
3261 SYMBOL_PRINT_NAME (syms[i].sym));
3263 else if (symtab != NULL)
3264 printf_unfiltered (is_enumeral
3265 ? _("[%d] %s in %s (enumeral)\n")
3266 : _("[%d] %s at %s:?\n"),
3268 SYMBOL_PRINT_NAME (syms[i].sym),
3271 printf_unfiltered (is_enumeral
3272 ? _("[%d] %s (enumeral)\n")
3273 : _("[%d] %s at ?\n"),
3275 SYMBOL_PRINT_NAME (syms[i].sym));
3279 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3282 for (i = 0; i < n_chosen; i += 1)
3283 syms[i] = syms[chosen[i]];
3288 /* Read and validate a set of numeric choices from the user in the
3289 range 0 .. N_CHOICES-1. Place the results in increasing
3290 order in CHOICES[0 .. N-1], and return N.
3292 The user types choices as a sequence of numbers on one line
3293 separated by blanks, encoding them as follows:
3295 + A choice of 0 means to cancel the selection, throwing an error.
3296 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3297 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3299 The user is not allowed to choose more than MAX_RESULTS values.
3301 ANNOTATION_SUFFIX, if present, is used to annotate the input
3302 prompts (for use with the -f switch). */
3305 get_selections (int *choices, int n_choices, int max_results,
3306 int is_all_choice, char *annotation_suffix)
3311 int first_choice = is_all_choice ? 2 : 1;
3313 prompt = getenv ("PS2");
3317 printf_unfiltered (("%s "), prompt);
3318 gdb_flush (gdb_stdout);
3320 args = command_line_input ((char *) NULL, 0, annotation_suffix);
3323 error_no_arg (_("one or more choice numbers"));
3327 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3328 order, as given in args. Choices are validated. */
3334 while (isspace (*args))
3336 if (*args == '\0' && n_chosen == 0)
3337 error_no_arg (_("one or more choice numbers"));
3338 else if (*args == '\0')
3341 choice = strtol (args, &args2, 10);
3342 if (args == args2 || choice < 0
3343 || choice > n_choices + first_choice - 1)
3344 error (_("Argument must be choice number"));
3348 error (_("cancelled"));
3350 if (choice < first_choice)
3352 n_chosen = n_choices;
3353 for (j = 0; j < n_choices; j += 1)
3357 choice -= first_choice;
3359 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3363 if (j < 0 || choice != choices[j])
3366 for (k = n_chosen - 1; k > j; k -= 1)
3367 choices[k + 1] = choices[k];
3368 choices[j + 1] = choice;
3373 if (n_chosen > max_results)
3374 error (_("Select no more than %d of the above"), max_results);
3379 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3380 on the function identified by SYM and BLOCK, and taking NARGS
3381 arguments. Update *EXPP as needed to hold more space. */
3384 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3385 int oplen, struct symbol *sym,
3386 struct block *block)
3388 /* A new expression, with 6 more elements (3 for funcall, 4 for function
3389 symbol, -oplen for operator being replaced). */
3390 struct expression *newexp = (struct expression *)
3391 xmalloc (sizeof (struct expression)
3392 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3393 struct expression *exp = *expp;
3395 newexp->nelts = exp->nelts + 7 - oplen;
3396 newexp->language_defn = exp->language_defn;
3397 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3398 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3399 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3401 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3402 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3404 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3405 newexp->elts[pc + 4].block = block;
3406 newexp->elts[pc + 5].symbol = sym;
3412 /* Type-class predicates */
3414 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3418 numeric_type_p (struct type *type)
3424 switch (TYPE_CODE (type))
3429 case TYPE_CODE_RANGE:
3430 return (type == TYPE_TARGET_TYPE (type)
3431 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3438 /* True iff TYPE is integral (an INT or RANGE of INTs). */
3441 integer_type_p (struct type *type)
3447 switch (TYPE_CODE (type))
3451 case TYPE_CODE_RANGE:
3452 return (type == TYPE_TARGET_TYPE (type)
3453 || integer_type_p (TYPE_TARGET_TYPE (type)));
3460 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
3463 scalar_type_p (struct type *type)
3469 switch (TYPE_CODE (type))
3472 case TYPE_CODE_RANGE:
3473 case TYPE_CODE_ENUM:
3482 /* True iff TYPE is discrete (INT, RANGE, ENUM). */
3485 discrete_type_p (struct type *type)
3491 switch (TYPE_CODE (type))
3494 case TYPE_CODE_RANGE:
3495 case TYPE_CODE_ENUM:
3503 /* Returns non-zero if OP with operands in the vector ARGS could be
3504 a user-defined function. Errs on the side of pre-defined operators
3505 (i.e., result 0). */
3508 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3510 struct type *type0 =
3511 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3512 struct type *type1 =
3513 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3527 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3531 case BINOP_BITWISE_AND:
3532 case BINOP_BITWISE_IOR:
3533 case BINOP_BITWISE_XOR:
3534 return (!(integer_type_p (type0) && integer_type_p (type1)));
3537 case BINOP_NOTEQUAL:
3542 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3546 ((TYPE_CODE (type0) != TYPE_CODE_ARRAY
3547 && (TYPE_CODE (type0) != TYPE_CODE_PTR
3548 || TYPE_CODE (TYPE_TARGET_TYPE (type0)) != TYPE_CODE_ARRAY))
3549 || (TYPE_CODE (type1) != TYPE_CODE_ARRAY
3550 && (TYPE_CODE (type1) != TYPE_CODE_PTR
3551 || (TYPE_CODE (TYPE_TARGET_TYPE (type1))
3552 != TYPE_CODE_ARRAY))));
3555 return (!(numeric_type_p (type0) && integer_type_p (type1)));
3559 case UNOP_LOGICAL_NOT:
3561 return (!numeric_type_p (type0));
3568 /* NOTE: In the following, we assume that a renaming type's name may
3569 have an ___XD suffix. It would be nice if this went away at some
3572 /* If TYPE encodes a renaming, returns the renaming suffix, which
3573 is XR for an object renaming, XRP for a procedure renaming, XRE for
3574 an exception renaming, and XRS for a subprogram renaming. Returns
3575 NULL if NAME encodes none of these. */
3578 ada_renaming_type (struct type *type)
3580 if (type != NULL && TYPE_CODE (type) == TYPE_CODE_ENUM)
3582 const char *name = type_name_no_tag (type);
3583 const char *suffix = (name == NULL) ? NULL : strstr (name, "___XR");
3585 || (suffix[5] != '\000' && strchr ("PES_", suffix[5]) == NULL))
3594 /* Return non-zero iff SYM encodes an object renaming. */
3597 ada_is_object_renaming (struct symbol *sym)
3599 const char *renaming_type = ada_renaming_type (SYMBOL_TYPE (sym));
3600 return renaming_type != NULL
3601 && (renaming_type[2] == '\0' || renaming_type[2] == '_');
3604 /* Assuming that SYM encodes a non-object renaming, returns the original
3605 name of the renamed entity. The name is good until the end of
3609 ada_simple_renamed_entity (struct symbol *sym)
3612 const char *raw_name;
3616 type = SYMBOL_TYPE (sym);
3617 if (type == NULL || TYPE_NFIELDS (type) < 1)
3618 error (_("Improperly encoded renaming."));
3620 raw_name = TYPE_FIELD_NAME (type, 0);
3621 len = (raw_name == NULL ? 0 : strlen (raw_name)) - 5;
3623 error (_("Improperly encoded renaming."));
3625 result = xmalloc (len + 1);
3626 strncpy (result, raw_name, len);
3627 result[len] = '\000';
3633 /* Evaluation: Function Calls */
3635 /* Return an lvalue containing the value VAL. This is the identity on
3636 lvalues, and otherwise has the side-effect of pushing a copy of VAL
3637 on the stack, using and updating *SP as the stack pointer, and
3638 returning an lvalue whose VALUE_ADDRESS points to the copy. */
3640 static struct value *
3641 ensure_lval (struct value *val, CORE_ADDR *sp)
3643 if (! VALUE_LVAL (val))
3645 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
3647 /* The following is taken from the structure-return code in
3648 call_function_by_hand. FIXME: Therefore, some refactoring seems
3650 if (INNER_THAN (1, 2))
3652 /* Stack grows downward. Align SP and VALUE_ADDRESS (val) after
3653 reserving sufficient space. */
3655 if (gdbarch_frame_align_p (current_gdbarch))
3656 *sp = gdbarch_frame_align (current_gdbarch, *sp);
3657 VALUE_ADDRESS (val) = *sp;
3661 /* Stack grows upward. Align the frame, allocate space, and
3662 then again, re-align the frame. */
3663 if (gdbarch_frame_align_p (current_gdbarch))
3664 *sp = gdbarch_frame_align (current_gdbarch, *sp);
3665 VALUE_ADDRESS (val) = *sp;
3667 if (gdbarch_frame_align_p (current_gdbarch))
3668 *sp = gdbarch_frame_align (current_gdbarch, *sp);
3671 write_memory (VALUE_ADDRESS (val), value_contents_raw (val), len);
3677 /* Return the value ACTUAL, converted to be an appropriate value for a
3678 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
3679 allocating any necessary descriptors (fat pointers), or copies of
3680 values not residing in memory, updating it as needed. */
3682 static struct value *
3683 convert_actual (struct value *actual, struct type *formal_type0,
3686 struct type *actual_type = ada_check_typedef (value_type (actual));
3687 struct type *formal_type = ada_check_typedef (formal_type0);
3688 struct type *formal_target =
3689 TYPE_CODE (formal_type) == TYPE_CODE_PTR
3690 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3691 struct type *actual_target =
3692 TYPE_CODE (actual_type) == TYPE_CODE_PTR
3693 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3695 if (ada_is_array_descriptor_type (formal_target)
3696 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3697 return make_array_descriptor (formal_type, actual, sp);
3698 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR)
3700 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3701 && ada_is_array_descriptor_type (actual_target))
3702 return desc_data (actual);
3703 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3705 if (VALUE_LVAL (actual) != lval_memory)
3708 actual_type = ada_check_typedef (value_type (actual));
3709 val = allocate_value (actual_type);
3710 memcpy ((char *) value_contents_raw (val),
3711 (char *) value_contents (actual),
3712 TYPE_LENGTH (actual_type));
3713 actual = ensure_lval (val, sp);
3715 return value_addr (actual);
3718 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3719 return ada_value_ind (actual);
3725 /* Push a descriptor of type TYPE for array value ARR on the stack at
3726 *SP, updating *SP to reflect the new descriptor. Return either
3727 an lvalue representing the new descriptor, or (if TYPE is a pointer-
3728 to-descriptor type rather than a descriptor type), a struct value *
3729 representing a pointer to this descriptor. */
3731 static struct value *
3732 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3734 struct type *bounds_type = desc_bounds_type (type);
3735 struct type *desc_type = desc_base_type (type);
3736 struct value *descriptor = allocate_value (desc_type);
3737 struct value *bounds = allocate_value (bounds_type);
3740 for (i = ada_array_arity (ada_check_typedef (value_type (arr))); i > 0; i -= 1)
3742 modify_general_field (value_contents_writeable (bounds),
3743 value_as_long (ada_array_bound (arr, i, 0)),
3744 desc_bound_bitpos (bounds_type, i, 0),
3745 desc_bound_bitsize (bounds_type, i, 0));
3746 modify_general_field (value_contents_writeable (bounds),
3747 value_as_long (ada_array_bound (arr, i, 1)),
3748 desc_bound_bitpos (bounds_type, i, 1),
3749 desc_bound_bitsize (bounds_type, i, 1));
3752 bounds = ensure_lval (bounds, sp);
3754 modify_general_field (value_contents_writeable (descriptor),
3755 VALUE_ADDRESS (ensure_lval (arr, sp)),
3756 fat_pntr_data_bitpos (desc_type),
3757 fat_pntr_data_bitsize (desc_type));
3759 modify_general_field (value_contents_writeable (descriptor),
3760 VALUE_ADDRESS (bounds),
3761 fat_pntr_bounds_bitpos (desc_type),
3762 fat_pntr_bounds_bitsize (desc_type));
3764 descriptor = ensure_lval (descriptor, sp);
3766 if (TYPE_CODE (type) == TYPE_CODE_PTR)
3767 return value_addr (descriptor);
3773 /* Assuming a dummy frame has been established on the target, perform any
3774 conversions needed for calling function FUNC on the NARGS actual
3775 parameters in ARGS, other than standard C conversions. Does
3776 nothing if FUNC does not have Ada-style prototype data, or if NARGS
3777 does not match the number of arguments expected. Use *SP as a
3778 stack pointer for additional data that must be pushed, updating its
3782 ada_convert_actuals (struct value *func, int nargs, struct value *args[],
3787 if (TYPE_NFIELDS (value_type (func)) == 0
3788 || nargs != TYPE_NFIELDS (value_type (func)))
3791 for (i = 0; i < nargs; i += 1)
3793 convert_actual (args[i], TYPE_FIELD_TYPE (value_type (func), i), sp);
3796 /* Dummy definitions for an experimental caching module that is not
3797 * used in the public sources. */
3800 lookup_cached_symbol (const char *name, domain_enum namespace,
3801 struct symbol **sym, struct block **block,
3802 struct symtab **symtab)
3808 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3809 struct block *block, struct symtab *symtab)
3815 /* Return the result of a standard (literal, C-like) lookup of NAME in
3816 given DOMAIN, visible from lexical block BLOCK. */
3818 static struct symbol *
3819 standard_lookup (const char *name, const struct block *block,
3823 struct symtab *symtab;
3825 if (lookup_cached_symbol (name, domain, &sym, NULL, NULL))
3828 lookup_symbol_in_language (name, block, domain, language_c, 0, &symtab);
3829 cache_symbol (name, domain, sym, block_found, symtab);
3834 /* Non-zero iff there is at least one non-function/non-enumeral symbol
3835 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
3836 since they contend in overloading in the same way. */
3838 is_nonfunction (struct ada_symbol_info syms[], int n)
3842 for (i = 0; i < n; i += 1)
3843 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
3844 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
3845 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
3851 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
3852 struct types. Otherwise, they may not. */
3855 equiv_types (struct type *type0, struct type *type1)
3859 if (type0 == NULL || type1 == NULL
3860 || TYPE_CODE (type0) != TYPE_CODE (type1))
3862 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
3863 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
3864 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
3865 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
3871 /* True iff SYM0 represents the same entity as SYM1, or one that is
3872 no more defined than that of SYM1. */
3875 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
3879 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
3880 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
3883 switch (SYMBOL_CLASS (sym0))
3889 struct type *type0 = SYMBOL_TYPE (sym0);
3890 struct type *type1 = SYMBOL_TYPE (sym1);
3891 char *name0 = SYMBOL_LINKAGE_NAME (sym0);
3892 char *name1 = SYMBOL_LINKAGE_NAME (sym1);
3893 int len0 = strlen (name0);
3895 TYPE_CODE (type0) == TYPE_CODE (type1)
3896 && (equiv_types (type0, type1)
3897 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
3898 && strncmp (name1 + len0, "___XV", 5) == 0));
3901 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
3902 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
3908 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
3909 records in OBSTACKP. Do nothing if SYM is a duplicate. */
3912 add_defn_to_vec (struct obstack *obstackp,
3914 struct block *block, struct symtab *symtab)
3918 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
3920 /* Do not try to complete stub types, as the debugger is probably
3921 already scanning all symbols matching a certain name at the
3922 time when this function is called. Trying to replace the stub
3923 type by its associated full type will cause us to restart a scan
3924 which may lead to an infinite recursion. Instead, the client
3925 collecting the matching symbols will end up collecting several
3926 matches, with at least one of them complete. It can then filter
3927 out the stub ones if needed. */
3929 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
3931 if (lesseq_defined_than (sym, prevDefns[i].sym))
3933 else if (lesseq_defined_than (prevDefns[i].sym, sym))
3935 prevDefns[i].sym = sym;
3936 prevDefns[i].block = block;
3937 prevDefns[i].symtab = symtab;
3943 struct ada_symbol_info info;
3947 info.symtab = symtab;
3948 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
3952 /* Number of ada_symbol_info structures currently collected in
3953 current vector in *OBSTACKP. */
3956 num_defns_collected (struct obstack *obstackp)
3958 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
3961 /* Vector of ada_symbol_info structures currently collected in current
3962 vector in *OBSTACKP. If FINISH, close off the vector and return
3963 its final address. */
3965 static struct ada_symbol_info *
3966 defns_collected (struct obstack *obstackp, int finish)
3969 return obstack_finish (obstackp);
3971 return (struct ada_symbol_info *) obstack_base (obstackp);
3974 /* Look, in partial_symtab PST, for symbol NAME in given namespace.
3975 Check the global symbols if GLOBAL, the static symbols if not.
3976 Do wild-card match if WILD. */
3978 static struct partial_symbol *
3979 ada_lookup_partial_symbol (struct partial_symtab *pst, const char *name,
3980 int global, domain_enum namespace, int wild)
3982 struct partial_symbol **start;
3983 int name_len = strlen (name);
3984 int length = (global ? pst->n_global_syms : pst->n_static_syms);
3993 pst->objfile->global_psymbols.list + pst->globals_offset :
3994 pst->objfile->static_psymbols.list + pst->statics_offset);
3998 for (i = 0; i < length; i += 1)
4000 struct partial_symbol *psym = start[i];
4002 if (SYMBOL_DOMAIN (psym) == namespace
4003 && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (psym)))
4017 int M = (U + i) >> 1;
4018 struct partial_symbol *psym = start[M];
4019 if (SYMBOL_LINKAGE_NAME (psym)[0] < name[0])
4021 else if (SYMBOL_LINKAGE_NAME (psym)[0] > name[0])
4023 else if (strcmp (SYMBOL_LINKAGE_NAME (psym), name) < 0)
4034 struct partial_symbol *psym = start[i];
4036 if (SYMBOL_DOMAIN (psym) == namespace)
4038 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym), name_len);
4046 && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4060 int M = (U + i) >> 1;
4061 struct partial_symbol *psym = start[M];
4062 if (SYMBOL_LINKAGE_NAME (psym)[0] < '_')
4064 else if (SYMBOL_LINKAGE_NAME (psym)[0] > '_')
4066 else if (strcmp (SYMBOL_LINKAGE_NAME (psym), "_ada_") < 0)
4077 struct partial_symbol *psym = start[i];
4079 if (SYMBOL_DOMAIN (psym) == namespace)
4083 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (psym)[0];
4086 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (psym), 5);
4088 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym) + 5,
4098 && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4108 /* Find a symbol table containing symbol SYM or NULL if none. */
4110 static struct symtab *
4111 symtab_for_sym (struct symbol *sym)
4114 struct objfile *objfile;
4116 struct symbol *tmp_sym;
4117 struct dict_iterator iter;
4120 ALL_SYMTABS (objfile, s)
4122 switch (SYMBOL_CLASS (sym))
4130 case LOC_CONST_BYTES:
4131 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4132 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4134 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4135 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4141 switch (SYMBOL_CLASS (sym))
4147 case LOC_REGPARM_ADDR:
4152 case LOC_BASEREG_ARG:
4154 case LOC_COMPUTED_ARG:
4155 for (j = FIRST_LOCAL_BLOCK;
4156 j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
4158 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
4159 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4170 /* Return a minimal symbol matching NAME according to Ada decoding
4171 rules. Returns NULL if there is no such minimal symbol. Names
4172 prefixed with "standard__" are handled specially: "standard__" is
4173 first stripped off, and only static and global symbols are searched. */
4175 struct minimal_symbol *
4176 ada_lookup_simple_minsym (const char *name)
4178 struct objfile *objfile;
4179 struct minimal_symbol *msymbol;
4182 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4184 name += sizeof ("standard__") - 1;
4188 wild_match = (strstr (name, "__") == NULL);
4190 ALL_MSYMBOLS (objfile, msymbol)
4192 if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4193 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4200 /* For all subprograms that statically enclose the subprogram of the
4201 selected frame, add symbols matching identifier NAME in DOMAIN
4202 and their blocks to the list of data in OBSTACKP, as for
4203 ada_add_block_symbols (q.v.). If WILD, treat as NAME with a
4207 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4208 const char *name, domain_enum namespace,
4213 /* FIXME: The next two routines belong in symtab.c */
4216 restore_language (void *lang)
4218 set_language ((enum language) lang);
4221 /* As for lookup_symbol, but performed as if the current language
4225 lookup_symbol_in_language (const char *name, const struct block *block,
4226 domain_enum domain, enum language lang,
4227 int *is_a_field_of_this, struct symtab **symtab)
4229 struct cleanup *old_chain
4230 = make_cleanup (restore_language, (void *) current_language->la_language);
4231 struct symbol *result;
4232 set_language (lang);
4233 result = lookup_symbol (name, block, domain, is_a_field_of_this, symtab);
4234 do_cleanups (old_chain);
4238 /* True if TYPE is definitely an artificial type supplied to a symbol
4239 for which no debugging information was given in the symbol file. */
4242 is_nondebugging_type (struct type *type)
4244 char *name = ada_type_name (type);
4245 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4248 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4249 duplicate other symbols in the list (The only case I know of where
4250 this happens is when object files containing stabs-in-ecoff are
4251 linked with files containing ordinary ecoff debugging symbols (or no
4252 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4253 Returns the number of items in the modified list. */
4256 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4263 if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4264 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4265 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4267 for (j = 0; j < nsyms; j += 1)
4270 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4271 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4272 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4273 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4274 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4275 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4278 for (k = i + 1; k < nsyms; k += 1)
4279 syms[k - 1] = syms[k];
4292 /* Given a type that corresponds to a renaming entity, use the type name
4293 to extract the scope (package name or function name, fully qualified,
4294 and following the GNAT encoding convention) where this renaming has been
4295 defined. The string returned needs to be deallocated after use. */
4298 xget_renaming_scope (struct type *renaming_type)
4300 /* The renaming types adhere to the following convention:
4301 <scope>__<rename>___<XR extension>.
4302 So, to extract the scope, we search for the "___XR" extension,
4303 and then backtrack until we find the first "__". */
4305 const char *name = type_name_no_tag (renaming_type);
4306 char *suffix = strstr (name, "___XR");
4311 /* Now, backtrack a bit until we find the first "__". Start looking
4312 at suffix - 3, as the <rename> part is at least one character long. */
4314 for (last = suffix - 3; last > name; last--)
4315 if (last[0] == '_' && last[1] == '_')
4318 /* Make a copy of scope and return it. */
4320 scope_len = last - name;
4321 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4323 strncpy (scope, name, scope_len);
4324 scope[scope_len] = '\0';
4329 /* Return nonzero if NAME corresponds to a package name. */
4332 is_package_name (const char *name)
4334 /* Here, We take advantage of the fact that no symbols are generated
4335 for packages, while symbols are generated for each function.
4336 So the condition for NAME represent a package becomes equivalent
4337 to NAME not existing in our list of symbols. There is only one
4338 small complication with library-level functions (see below). */
4342 /* If it is a function that has not been defined at library level,
4343 then we should be able to look it up in the symbols. */
4344 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4347 /* Library-level function names start with "_ada_". See if function
4348 "_ada_" followed by NAME can be found. */
4350 /* Do a quick check that NAME does not contain "__", since library-level
4351 functions names cannot contain "__" in them. */
4352 if (strstr (name, "__") != NULL)
4355 fun_name = xstrprintf ("_ada_%s", name);
4357 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4360 /* Return nonzero if SYM corresponds to a renaming entity that is
4361 visible from FUNCTION_NAME. */
4364 renaming_is_visible (const struct symbol *sym, char *function_name)
4366 char *scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4368 make_cleanup (xfree, scope);
4370 /* If the rename has been defined in a package, then it is visible. */
4371 if (is_package_name (scope))
4374 /* Check that the rename is in the current function scope by checking
4375 that its name starts with SCOPE. */
4377 /* If the function name starts with "_ada_", it means that it is
4378 a library-level function. Strip this prefix before doing the
4379 comparison, as the encoding for the renaming does not contain
4381 if (strncmp (function_name, "_ada_", 5) == 0)
4384 return (strncmp (function_name, scope, strlen (scope)) == 0);
4387 /* Iterates over the SYMS list and remove any entry that corresponds to
4388 a renaming entity that is not visible from the function associated
4392 GNAT emits a type following a specified encoding for each renaming
4393 entity. Unfortunately, STABS currently does not support the definition
4394 of types that are local to a given lexical block, so all renamings types
4395 are emitted at library level. As a consequence, if an application
4396 contains two renaming entities using the same name, and a user tries to
4397 print the value of one of these entities, the result of the ada symbol
4398 lookup will also contain the wrong renaming type.
4400 This function partially covers for this limitation by attempting to
4401 remove from the SYMS list renaming symbols that should be visible
4402 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
4403 method with the current information available. The implementation
4404 below has a couple of limitations (FIXME: brobecker-2003-05-12):
4406 - When the user tries to print a rename in a function while there
4407 is another rename entity defined in a package: Normally, the
4408 rename in the function has precedence over the rename in the
4409 package, so the latter should be removed from the list. This is
4410 currently not the case.
4412 - This function will incorrectly remove valid renames if
4413 the CURRENT_BLOCK corresponds to a function which symbol name
4414 has been changed by an "Export" pragma. As a consequence,
4415 the user will be unable to print such rename entities. */
4418 remove_out_of_scope_renamings (struct ada_symbol_info *syms,
4419 int nsyms, struct block *current_block)
4421 struct symbol *current_function;
4422 char *current_function_name;
4425 /* Extract the function name associated to CURRENT_BLOCK.
4426 Abort if unable to do so. */
4428 if (current_block == NULL)
4431 current_function = block_function (current_block);
4432 if (current_function == NULL)
4435 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4436 if (current_function_name == NULL)
4439 /* Check each of the symbols, and remove it from the list if it is
4440 a type corresponding to a renaming that is out of the scope of
4441 the current block. */
4446 if (ada_is_object_renaming (syms[i].sym)
4447 && !renaming_is_visible (syms[i].sym, current_function_name))
4450 for (j = i + 1; j < nsyms; j++)
4451 syms[j - 1] = syms[j];
4461 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4462 scope and in global scopes, returning the number of matches. Sets
4463 *RESULTS to point to a vector of (SYM,BLOCK,SYMTAB) triples,
4464 indicating the symbols found and the blocks and symbol tables (if
4465 any) in which they were found. This vector are transient---good only to
4466 the next call of ada_lookup_symbol_list. Any non-function/non-enumeral
4467 symbol match within the nest of blocks whose innermost member is BLOCK0,
4468 is the one match returned (no other matches in that or
4469 enclosing blocks is returned). If there are any matches in or
4470 surrounding BLOCK0, then these alone are returned. Otherwise, the
4471 search extends to global and file-scope (static) symbol tables.
4472 Names prefixed with "standard__" are handled specially: "standard__"
4473 is first stripped off, and only static and global symbols are searched. */
4476 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4477 domain_enum namespace,
4478 struct ada_symbol_info **results)
4482 struct partial_symtab *ps;
4483 struct blockvector *bv;
4484 struct objfile *objfile;
4485 struct block *block;
4487 struct minimal_symbol *msymbol;
4493 obstack_free (&symbol_list_obstack, NULL);
4494 obstack_init (&symbol_list_obstack);
4498 /* Search specified block and its superiors. */
4500 wild_match = (strstr (name0, "__") == NULL);
4502 block = (struct block *) block0; /* FIXME: No cast ought to be
4503 needed, but adding const will
4504 have a cascade effect. */
4505 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4509 name = name0 + sizeof ("standard__") - 1;
4513 while (block != NULL)
4516 ada_add_block_symbols (&symbol_list_obstack, block, name,
4517 namespace, NULL, NULL, wild_match);
4519 /* If we found a non-function match, assume that's the one. */
4520 if (is_nonfunction (defns_collected (&symbol_list_obstack, 0),
4521 num_defns_collected (&symbol_list_obstack)))
4524 block = BLOCK_SUPERBLOCK (block);
4527 /* If no luck so far, try to find NAME as a local symbol in some lexically
4528 enclosing subprogram. */
4529 if (num_defns_collected (&symbol_list_obstack) == 0 && block_depth > 2)
4530 add_symbols_from_enclosing_procs (&symbol_list_obstack,
4531 name, namespace, wild_match);
4533 /* If we found ANY matches among non-global symbols, we're done. */
4535 if (num_defns_collected (&symbol_list_obstack) > 0)
4539 if (lookup_cached_symbol (name0, namespace, &sym, &block, &s))
4542 add_defn_to_vec (&symbol_list_obstack, sym, block, s);
4546 /* Now add symbols from all global blocks: symbol tables, minimal symbol
4547 tables, and psymtab's. */
4549 ALL_SYMTABS (objfile, s)
4554 bv = BLOCKVECTOR (s);
4555 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4556 ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4557 objfile, s, wild_match);
4560 if (namespace == VAR_DOMAIN)
4562 ALL_MSYMBOLS (objfile, msymbol)
4564 if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match))
4566 switch (MSYMBOL_TYPE (msymbol))
4568 case mst_solib_trampoline:
4571 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
4574 int ndefns0 = num_defns_collected (&symbol_list_obstack);
4576 bv = BLOCKVECTOR (s);
4577 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4578 ada_add_block_symbols (&symbol_list_obstack, block,
4579 SYMBOL_LINKAGE_NAME (msymbol),
4580 namespace, objfile, s, wild_match);
4582 if (num_defns_collected (&symbol_list_obstack) == ndefns0)
4584 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4585 ada_add_block_symbols (&symbol_list_obstack, block,
4586 SYMBOL_LINKAGE_NAME (msymbol),
4587 namespace, objfile, s,
4596 ALL_PSYMTABS (objfile, ps)
4600 && ada_lookup_partial_symbol (ps, name, 1, namespace, wild_match))
4602 s = PSYMTAB_TO_SYMTAB (ps);
4605 bv = BLOCKVECTOR (s);
4606 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4607 ada_add_block_symbols (&symbol_list_obstack, block, name,
4608 namespace, objfile, s, wild_match);
4612 /* Now add symbols from all per-file blocks if we've gotten no hits
4613 (Not strictly correct, but perhaps better than an error).
4614 Do the symtabs first, then check the psymtabs. */
4616 if (num_defns_collected (&symbol_list_obstack) == 0)
4619 ALL_SYMTABS (objfile, s)
4624 bv = BLOCKVECTOR (s);
4625 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4626 ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4627 objfile, s, wild_match);
4630 ALL_PSYMTABS (objfile, ps)
4634 && ada_lookup_partial_symbol (ps, name, 0, namespace, wild_match))
4636 s = PSYMTAB_TO_SYMTAB (ps);
4637 bv = BLOCKVECTOR (s);
4640 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4641 ada_add_block_symbols (&symbol_list_obstack, block, name,
4642 namespace, objfile, s, wild_match);
4648 ndefns = num_defns_collected (&symbol_list_obstack);
4649 *results = defns_collected (&symbol_list_obstack, 1);
4651 ndefns = remove_extra_symbols (*results, ndefns);
4654 cache_symbol (name0, namespace, NULL, NULL, NULL);
4656 if (ndefns == 1 && cacheIfUnique)
4657 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block,
4658 (*results)[0].symtab);
4660 ndefns = remove_out_of_scope_renamings (*results, ndefns,
4661 (struct block *) block0);
4666 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4667 scope and in global scopes, or NULL if none. NAME is folded and
4668 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
4669 choosing the first symbol if there are multiple choices.
4670 *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4671 table in which the symbol was found (in both cases, these
4672 assignments occur only if the pointers are non-null). */
4675 ada_lookup_symbol (const char *name, const struct block *block0,
4676 domain_enum namespace, int *is_a_field_of_this,
4677 struct symtab **symtab)
4679 struct ada_symbol_info *candidates;
4682 n_candidates = ada_lookup_symbol_list (ada_encode (ada_fold_name (name)),
4683 block0, namespace, &candidates);
4685 if (n_candidates == 0)
4688 if (is_a_field_of_this != NULL)
4689 *is_a_field_of_this = 0;
4693 *symtab = candidates[0].symtab;
4694 if (*symtab == NULL && candidates[0].block != NULL)
4696 struct objfile *objfile;
4699 struct blockvector *bv;
4701 /* Search the list of symtabs for one which contains the
4702 address of the start of this block. */
4703 ALL_SYMTABS (objfile, s)
4705 bv = BLOCKVECTOR (s);
4706 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4707 if (BLOCK_START (b) <= BLOCK_START (candidates[0].block)
4708 && BLOCK_END (b) > BLOCK_START (candidates[0].block))
4711 return fixup_symbol_section (candidates[0].sym, objfile);
4714 /* FIXME: brobecker/2004-11-12: I think that we should never
4715 reach this point. I don't see a reason why we would not
4716 find a symtab for a given block, so I suggest raising an
4717 internal_error exception here. Otherwise, we end up
4718 returning a symbol but no symtab, which certain parts of
4719 the code that rely (indirectly) on this function do not
4720 expect, eventually causing a SEGV. */
4721 return fixup_symbol_section (candidates[0].sym, NULL);
4724 return candidates[0].sym;
4727 static struct symbol *
4728 ada_lookup_symbol_nonlocal (const char *name,
4729 const char *linkage_name,
4730 const struct block *block,
4731 const domain_enum domain, struct symtab **symtab)
4733 if (linkage_name == NULL)
4734 linkage_name = name;
4735 return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
4740 /* True iff STR is a possible encoded suffix of a normal Ada name
4741 that is to be ignored for matching purposes. Suffixes of parallel
4742 names (e.g., XVE) are not included here. Currently, the possible suffixes
4743 are given by either of the regular expression:
4745 (__[0-9]+)?[.$][0-9]+ [nested subprogram suffix, on platforms such
4747 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
4748 _E[0-9]+[bs]$ [protected object entry suffixes]
4749 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
4753 is_name_suffix (const char *str)
4756 const char *matching;
4757 const int len = strlen (str);
4759 /* (__[0-9]+)?\.[0-9]+ */
4761 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4764 while (isdigit (matching[0]))
4766 if (matching[0] == '\0')
4770 if (matching[0] == '.' || matching[0] == '$')
4773 while (isdigit (matching[0]))
4775 if (matching[0] == '\0')
4780 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4783 while (isdigit (matching[0]))
4785 if (matching[0] == '\0')
4790 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
4791 with a N at the end. Unfortunately, the compiler uses the same
4792 convention for other internal types it creates. So treating
4793 all entity names that end with an "N" as a name suffix causes
4794 some regressions. For instance, consider the case of an enumerated
4795 type. To support the 'Image attribute, it creates an array whose
4797 Having a single character like this as a suffix carrying some
4798 information is a bit risky. Perhaps we should change the encoding
4799 to be something like "_N" instead. In the meantime, do not do
4800 the following check. */
4801 /* Protected Object Subprograms */
4802 if (len == 1 && str [0] == 'N')
4807 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
4810 while (isdigit (matching[0]))
4812 if ((matching[0] == 'b' || matching[0] == 's')
4813 && matching [1] == '\0')
4817 /* ??? We should not modify STR directly, as we are doing below. This
4818 is fine in this case, but may become problematic later if we find
4819 that this alternative did not work, and want to try matching
4820 another one from the begining of STR. Since we modified it, we
4821 won't be able to find the begining of the string anymore! */
4825 while (str[0] != '_' && str[0] != '\0')
4827 if (str[0] != 'n' && str[0] != 'b')
4832 if (str[0] == '\000')
4836 if (str[1] != '_' || str[2] == '\000')
4840 if (strcmp (str + 3, "JM") == 0)
4842 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
4843 the LJM suffix in favor of the JM one. But we will
4844 still accept LJM as a valid suffix for a reasonable
4845 amount of time, just to allow ourselves to debug programs
4846 compiled using an older version of GNAT. */
4847 if (strcmp (str + 3, "LJM") == 0)
4851 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
4852 || str[4] == 'U' || str[4] == 'P')
4854 if (str[4] == 'R' && str[5] != 'T')
4858 if (!isdigit (str[2]))
4860 for (k = 3; str[k] != '\0'; k += 1)
4861 if (!isdigit (str[k]) && str[k] != '_')
4865 if (str[0] == '$' && isdigit (str[1]))
4867 for (k = 2; str[k] != '\0'; k += 1)
4868 if (!isdigit (str[k]) && str[k] != '_')
4875 /* Return nonzero if the given string starts with a dot ('.')
4876 followed by zero or more digits.
4878 Note: brobecker/2003-11-10: A forward declaration has not been
4879 added at the begining of this file yet, because this function
4880 is only used to work around a problem found during wild matching
4881 when trying to match minimal symbol names against symbol names
4882 obtained from dwarf-2 data. This function is therefore currently
4883 only used in wild_match() and is likely to be deleted when the
4884 problem in dwarf-2 is fixed. */
4887 is_dot_digits_suffix (const char *str)
4893 while (isdigit (str[0]))
4895 return (str[0] == '\0');
4898 /* Return non-zero if NAME0 is a valid match when doing wild matching.
4899 Certain symbols appear at first to match, except that they turn out
4900 not to follow the Ada encoding and hence should not be used as a wild
4901 match of a given pattern. */
4904 is_valid_name_for_wild_match (const char *name0)
4906 const char *decoded_name = ada_decode (name0);
4909 for (i=0; decoded_name[i] != '\0'; i++)
4910 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
4916 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
4917 PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1. Ignores
4918 informational suffixes of NAME (i.e., for which is_name_suffix is
4922 wild_match (const char *patn0, int patn_len, const char *name0)
4928 /* FIXME: brobecker/2003-11-10: For some reason, the symbol name
4929 stored in the symbol table for nested function names is sometimes
4930 different from the name of the associated entity stored in
4931 the dwarf-2 data: This is the case for nested subprograms, where
4932 the minimal symbol name contains a trailing ".[:digit:]+" suffix,
4933 while the symbol name from the dwarf-2 data does not.
4935 Although the DWARF-2 standard documents that entity names stored
4936 in the dwarf-2 data should be identical to the name as seen in
4937 the source code, GNAT takes a different approach as we already use
4938 a special encoding mechanism to convey the information so that
4939 a C debugger can still use the information generated to debug
4940 Ada programs. A corollary is that the symbol names in the dwarf-2
4941 data should match the names found in the symbol table. I therefore
4942 consider this issue as a compiler defect.
4944 Until the compiler is properly fixed, we work-around the problem
4945 by ignoring such suffixes during the match. We do so by making
4946 a copy of PATN0 and NAME0, and then by stripping such a suffix
4947 if present. We then perform the match on the resulting strings. */
4950 name_len = strlen (name0);
4952 name = (char *) alloca ((name_len + 1) * sizeof (char));
4953 strcpy (name, name0);
4954 dot = strrchr (name, '.');
4955 if (dot != NULL && is_dot_digits_suffix (dot))
4958 patn = (char *) alloca ((patn_len + 1) * sizeof (char));
4959 strncpy (patn, patn0, patn_len);
4960 patn[patn_len] = '\0';
4961 dot = strrchr (patn, '.');
4962 if (dot != NULL && is_dot_digits_suffix (dot))
4965 patn_len = dot - patn;
4969 /* Now perform the wild match. */
4971 name_len = strlen (name);
4972 if (name_len >= patn_len + 5 && strncmp (name, "_ada_", 5) == 0
4973 && strncmp (patn, name + 5, patn_len) == 0
4974 && is_name_suffix (name + patn_len + 5))
4977 while (name_len >= patn_len)
4979 if (strncmp (patn, name, patn_len) == 0
4980 && is_name_suffix (name + patn_len))
4981 return (is_valid_name_for_wild_match (name0));
4988 && name[0] != '.' && (name[0] != '_' || name[1] != '_'));
4993 if (!islower (name[2]))
5000 if (!islower (name[1]))
5011 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5012 vector *defn_symbols, updating the list of symbols in OBSTACKP
5013 (if necessary). If WILD, treat as NAME with a wildcard prefix.
5014 OBJFILE is the section containing BLOCK.
5015 SYMTAB is recorded with each symbol added. */
5018 ada_add_block_symbols (struct obstack *obstackp,
5019 struct block *block, const char *name,
5020 domain_enum domain, struct objfile *objfile,
5021 struct symtab *symtab, int wild)
5023 struct dict_iterator iter;
5024 int name_len = strlen (name);
5025 /* A matching argument symbol, if any. */
5026 struct symbol *arg_sym;
5027 /* Set true when we find a matching non-argument symbol. */
5036 ALL_BLOCK_SYMBOLS (block, iter, sym)
5038 if (SYMBOL_DOMAIN (sym) == domain
5039 && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
5041 switch (SYMBOL_CLASS (sym))
5047 case LOC_REGPARM_ADDR:
5048 case LOC_BASEREG_ARG:
5049 case LOC_COMPUTED_ARG:
5052 case LOC_UNRESOLVED:
5056 add_defn_to_vec (obstackp,
5057 fixup_symbol_section (sym, objfile),
5066 ALL_BLOCK_SYMBOLS (block, iter, sym)
5068 if (SYMBOL_DOMAIN (sym) == domain)
5070 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
5072 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
5074 switch (SYMBOL_CLASS (sym))
5080 case LOC_REGPARM_ADDR:
5081 case LOC_BASEREG_ARG:
5082 case LOC_COMPUTED_ARG:
5085 case LOC_UNRESOLVED:
5089 add_defn_to_vec (obstackp,
5090 fixup_symbol_section (sym, objfile),
5099 if (!found_sym && arg_sym != NULL)
5101 add_defn_to_vec (obstackp,
5102 fixup_symbol_section (arg_sym, objfile),
5111 ALL_BLOCK_SYMBOLS (block, iter, sym)
5113 if (SYMBOL_DOMAIN (sym) == domain)
5117 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5120 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5122 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5127 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5129 switch (SYMBOL_CLASS (sym))
5135 case LOC_REGPARM_ADDR:
5136 case LOC_BASEREG_ARG:
5137 case LOC_COMPUTED_ARG:
5140 case LOC_UNRESOLVED:
5144 add_defn_to_vec (obstackp,
5145 fixup_symbol_section (sym, objfile),
5153 /* NOTE: This really shouldn't be needed for _ada_ symbols.
5154 They aren't parameters, right? */
5155 if (!found_sym && arg_sym != NULL)
5157 add_defn_to_vec (obstackp,
5158 fixup_symbol_section (arg_sym, objfile),
5166 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
5167 to be invisible to users. */
5170 ada_is_ignored_field (struct type *type, int field_num)
5172 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5176 const char *name = TYPE_FIELD_NAME (type, field_num);
5177 return (name == NULL
5178 || (name[0] == '_' && strncmp (name, "_parent", 7) != 0));
5182 /* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
5183 pointer or reference type whose ultimate target has a tag field. */
5186 ada_is_tagged_type (struct type *type, int refok)
5188 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5191 /* True iff TYPE represents the type of X'Tag */
5194 ada_is_tag_type (struct type *type)
5196 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5200 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5201 return (name != NULL
5202 && strcmp (name, "ada__tags__dispatch_table") == 0);
5206 /* The type of the tag on VAL. */
5209 ada_tag_type (struct value *val)
5211 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
5214 /* The value of the tag on VAL. */
5217 ada_value_tag (struct value *val)
5219 return ada_value_struct_elt (val, "_tag", 0);
5222 /* The value of the tag on the object of type TYPE whose contents are
5223 saved at VALADDR, if it is non-null, or is at memory address
5226 static struct value *
5227 value_tag_from_contents_and_address (struct type *type,
5228 const gdb_byte *valaddr,
5231 int tag_byte_offset, dummy1, dummy2;
5232 struct type *tag_type;
5233 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
5236 const gdb_byte *valaddr1 = ((valaddr == NULL)
5238 : valaddr + tag_byte_offset);
5239 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
5241 return value_from_contents_and_address (tag_type, valaddr1, address1);
5246 static struct type *
5247 type_from_tag (struct value *tag)
5249 const char *type_name = ada_tag_name (tag);
5250 if (type_name != NULL)
5251 return ada_find_any_type (ada_encode (type_name));
5262 static int ada_tag_name_1 (void *);
5263 static int ada_tag_name_2 (struct tag_args *);
5265 /* Wrapper function used by ada_tag_name. Given a struct tag_args*
5266 value ARGS, sets ARGS->name to the tag name of ARGS->tag.
5267 The value stored in ARGS->name is valid until the next call to
5271 ada_tag_name_1 (void *args0)
5273 struct tag_args *args = (struct tag_args *) args0;
5274 static char name[1024];
5278 val = ada_value_struct_elt (args->tag, "tsd", 1);
5280 return ada_tag_name_2 (args);
5281 val = ada_value_struct_elt (val, "expanded_name", 1);
5284 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5285 for (p = name; *p != '\0'; p += 1)
5292 /* Utility function for ada_tag_name_1 that tries the second
5293 representation for the dispatch table (in which there is no
5294 explicit 'tsd' field in the referent of the tag pointer, and instead
5295 the tsd pointer is stored just before the dispatch table. */
5298 ada_tag_name_2 (struct tag_args *args)
5300 struct type *info_type;
5301 static char name[1024];
5303 struct value *val, *valp;
5306 info_type = ada_find_any_type ("ada__tags__type_specific_data");
5307 if (info_type == NULL)
5309 info_type = lookup_pointer_type (lookup_pointer_type (info_type));
5310 valp = value_cast (info_type, args->tag);
5313 val = value_ind (value_add (valp, value_from_longest (builtin_type_int, -1)));
5316 val = ada_value_struct_elt (val, "expanded_name", 1);
5319 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5320 for (p = name; *p != '\0'; p += 1)
5327 /* The type name of the dynamic type denoted by the 'tag value TAG, as
5331 ada_tag_name (struct value *tag)
5333 struct tag_args args;
5334 if (!ada_is_tag_type (value_type (tag)))
5338 catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5342 /* The parent type of TYPE, or NULL if none. */
5345 ada_parent_type (struct type *type)
5349 type = ada_check_typedef (type);
5351 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5354 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5355 if (ada_is_parent_field (type, i))
5356 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5361 /* True iff field number FIELD_NUM of structure type TYPE contains the
5362 parent-type (inherited) fields of a derived type. Assumes TYPE is
5363 a structure type with at least FIELD_NUM+1 fields. */
5366 ada_is_parent_field (struct type *type, int field_num)
5368 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5369 return (name != NULL
5370 && (strncmp (name, "PARENT", 6) == 0
5371 || strncmp (name, "_parent", 7) == 0));
5374 /* True iff field number FIELD_NUM of structure type TYPE is a
5375 transparent wrapper field (which should be silently traversed when doing
5376 field selection and flattened when printing). Assumes TYPE is a
5377 structure type with at least FIELD_NUM+1 fields. Such fields are always
5381 ada_is_wrapper_field (struct type *type, int field_num)
5383 const char *name = TYPE_FIELD_NAME (type, field_num);
5384 return (name != NULL
5385 && (strncmp (name, "PARENT", 6) == 0
5386 || strcmp (name, "REP") == 0
5387 || strncmp (name, "_parent", 7) == 0
5388 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5391 /* True iff field number FIELD_NUM of structure or union type TYPE
5392 is a variant wrapper. Assumes TYPE is a structure type with at least
5393 FIELD_NUM+1 fields. */
5396 ada_is_variant_part (struct type *type, int field_num)
5398 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5399 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5400 || (is_dynamic_field (type, field_num)
5401 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
5402 == TYPE_CODE_UNION)));
5405 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5406 whose discriminants are contained in the record type OUTER_TYPE,
5407 returns the type of the controlling discriminant for the variant. */
5410 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5412 char *name = ada_variant_discrim_name (var_type);
5414 ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
5416 return builtin_type_int;
5421 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5422 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5423 represents a 'when others' clause; otherwise 0. */
5426 ada_is_others_clause (struct type *type, int field_num)
5428 const char *name = TYPE_FIELD_NAME (type, field_num);
5429 return (name != NULL && name[0] == 'O');
5432 /* Assuming that TYPE0 is the type of the variant part of a record,
5433 returns the name of the discriminant controlling the variant.
5434 The value is valid until the next call to ada_variant_discrim_name. */
5437 ada_variant_discrim_name (struct type *type0)
5439 static char *result = NULL;
5440 static size_t result_len = 0;
5443 const char *discrim_end;
5444 const char *discrim_start;
5446 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5447 type = TYPE_TARGET_TYPE (type0);
5451 name = ada_type_name (type);
5453 if (name == NULL || name[0] == '\000')
5456 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5459 if (strncmp (discrim_end, "___XVN", 6) == 0)
5462 if (discrim_end == name)
5465 for (discrim_start = discrim_end; discrim_start != name + 3;
5468 if (discrim_start == name + 1)
5470 if ((discrim_start > name + 3
5471 && strncmp (discrim_start - 3, "___", 3) == 0)
5472 || discrim_start[-1] == '.')
5476 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5477 strncpy (result, discrim_start, discrim_end - discrim_start);
5478 result[discrim_end - discrim_start] = '\0';
5482 /* Scan STR for a subtype-encoded number, beginning at position K.
5483 Put the position of the character just past the number scanned in
5484 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
5485 Return 1 if there was a valid number at the given position, and 0
5486 otherwise. A "subtype-encoded" number consists of the absolute value
5487 in decimal, followed by the letter 'm' to indicate a negative number.
5488 Assumes 0m does not occur. */
5491 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
5495 if (!isdigit (str[k]))
5498 /* Do it the hard way so as not to make any assumption about
5499 the relationship of unsigned long (%lu scan format code) and
5502 while (isdigit (str[k]))
5504 RU = RU * 10 + (str[k] - '0');
5511 *R = (-(LONGEST) (RU - 1)) - 1;
5517 /* NOTE on the above: Technically, C does not say what the results of
5518 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5519 number representable as a LONGEST (although either would probably work
5520 in most implementations). When RU>0, the locution in the then branch
5521 above is always equivalent to the negative of RU. */
5528 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5529 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5530 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
5533 ada_in_variant (LONGEST val, struct type *type, int field_num)
5535 const char *name = TYPE_FIELD_NAME (type, field_num);
5548 if (!ada_scan_number (name, p + 1, &W, &p))
5557 if (!ada_scan_number (name, p + 1, &L, &p)
5558 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
5560 if (val >= L && val <= U)
5572 /* FIXME: Lots of redundancy below. Try to consolidate. */
5574 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
5575 ARG_TYPE, extract and return the value of one of its (non-static)
5576 fields. FIELDNO says which field. Differs from value_primitive_field
5577 only in that it can handle packed values of arbitrary type. */
5579 static struct value *
5580 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
5581 struct type *arg_type)
5585 arg_type = ada_check_typedef (arg_type);
5586 type = TYPE_FIELD_TYPE (arg_type, fieldno);
5588 /* Handle packed fields. */
5590 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5592 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5593 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
5595 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
5596 offset + bit_pos / 8,
5597 bit_pos % 8, bit_size, type);
5600 return value_primitive_field (arg1, offset, fieldno, arg_type);
5603 /* Find field with name NAME in object of type TYPE. If found,
5604 set the following for each argument that is non-null:
5605 - *FIELD_TYPE_P to the field's type;
5606 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
5607 an object of that type;
5608 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
5609 - *BIT_SIZE_P to its size in bits if the field is packed, and
5611 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
5612 fields up to but not including the desired field, or by the total
5613 number of fields if not found. A NULL value of NAME never
5614 matches; the function just counts visible fields in this case.
5616 Returns 1 if found, 0 otherwise. */
5619 find_struct_field (char *name, struct type *type, int offset,
5620 struct type **field_type_p,
5621 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
5626 type = ada_check_typedef (type);
5628 if (field_type_p != NULL)
5629 *field_type_p = NULL;
5630 if (byte_offset_p != NULL)
5632 if (bit_offset_p != NULL)
5634 if (bit_size_p != NULL)
5637 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5639 int bit_pos = TYPE_FIELD_BITPOS (type, i);
5640 int fld_offset = offset + bit_pos / 8;
5641 char *t_field_name = TYPE_FIELD_NAME (type, i);
5643 if (t_field_name == NULL)
5646 else if (name != NULL && field_name_match (t_field_name, name))
5648 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5649 if (field_type_p != NULL)
5650 *field_type_p = TYPE_FIELD_TYPE (type, i);
5651 if (byte_offset_p != NULL)
5652 *byte_offset_p = fld_offset;
5653 if (bit_offset_p != NULL)
5654 *bit_offset_p = bit_pos % 8;
5655 if (bit_size_p != NULL)
5656 *bit_size_p = bit_size;
5659 else if (ada_is_wrapper_field (type, i))
5661 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
5662 field_type_p, byte_offset_p, bit_offset_p,
5663 bit_size_p, index_p))
5666 else if (ada_is_variant_part (type, i))
5668 /* PNH: Wait. Do we ever execute this section, or is ARG always of
5671 struct type *field_type
5672 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5674 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
5676 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
5678 + TYPE_FIELD_BITPOS (field_type, j) / 8,
5679 field_type_p, byte_offset_p,
5680 bit_offset_p, bit_size_p, index_p))
5684 else if (index_p != NULL)
5690 /* Number of user-visible fields in record type TYPE. */
5693 num_visible_fields (struct type *type)
5697 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
5701 /* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
5702 and search in it assuming it has (class) type TYPE.
5703 If found, return value, else return NULL.
5705 Searches recursively through wrapper fields (e.g., '_parent'). */
5707 static struct value *
5708 ada_search_struct_field (char *name, struct value *arg, int offset,
5712 type = ada_check_typedef (type);
5714 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5716 char *t_field_name = TYPE_FIELD_NAME (type, i);
5718 if (t_field_name == NULL)
5721 else if (field_name_match (t_field_name, name))
5722 return ada_value_primitive_field (arg, offset, i, type);
5724 else if (ada_is_wrapper_field (type, i))
5726 struct value *v = /* Do not let indent join lines here. */
5727 ada_search_struct_field (name, arg,
5728 offset + TYPE_FIELD_BITPOS (type, i) / 8,
5729 TYPE_FIELD_TYPE (type, i));
5734 else if (ada_is_variant_part (type, i))
5736 /* PNH: Do we ever get here? See find_struct_field. */
5738 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5739 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
5741 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
5743 struct value *v = ada_search_struct_field /* Force line break. */
5745 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
5746 TYPE_FIELD_TYPE (field_type, j));
5755 static struct value *ada_index_struct_field_1 (int *, struct value *,
5756 int, struct type *);
5759 /* Return field #INDEX in ARG, where the index is that returned by
5760 * find_struct_field through its INDEX_P argument. Adjust the address
5761 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
5762 * If found, return value, else return NULL. */
5764 static struct value *
5765 ada_index_struct_field (int index, struct value *arg, int offset,
5768 return ada_index_struct_field_1 (&index, arg, offset, type);
5772 /* Auxiliary function for ada_index_struct_field. Like
5773 * ada_index_struct_field, but takes index from *INDEX_P and modifies
5776 static struct value *
5777 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
5781 type = ada_check_typedef (type);
5783 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5785 if (TYPE_FIELD_NAME (type, i) == NULL)
5787 else if (ada_is_wrapper_field (type, i))
5789 struct value *v = /* Do not let indent join lines here. */
5790 ada_index_struct_field_1 (index_p, arg,
5791 offset + TYPE_FIELD_BITPOS (type, i) / 8,
5792 TYPE_FIELD_TYPE (type, i));
5797 else if (ada_is_variant_part (type, i))
5799 /* PNH: Do we ever get here? See ada_search_struct_field,
5800 find_struct_field. */
5801 error (_("Cannot assign this kind of variant record"));
5803 else if (*index_p == 0)
5804 return ada_value_primitive_field (arg, offset, i, type);
5811 /* Given ARG, a value of type (pointer or reference to a)*
5812 structure/union, extract the component named NAME from the ultimate
5813 target structure/union and return it as a value with its
5814 appropriate type. If ARG is a pointer or reference and the field
5815 is not packed, returns a reference to the field, otherwise the
5816 value of the field (an lvalue if ARG is an lvalue).
5818 The routine searches for NAME among all members of the structure itself
5819 and (recursively) among all members of any wrapper members
5822 If NO_ERR, then simply return NULL in case of error, rather than
5826 ada_value_struct_elt (struct value *arg, char *name, int no_err)
5828 struct type *t, *t1;
5832 t1 = t = ada_check_typedef (value_type (arg));
5833 if (TYPE_CODE (t) == TYPE_CODE_REF)
5835 t1 = TYPE_TARGET_TYPE (t);
5838 t1 = ada_check_typedef (t1);
5839 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
5841 arg = coerce_ref (arg);
5846 while (TYPE_CODE (t) == TYPE_CODE_PTR)
5848 t1 = TYPE_TARGET_TYPE (t);
5851 t1 = ada_check_typedef (t1);
5852 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
5854 arg = value_ind (arg);
5861 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
5865 v = ada_search_struct_field (name, arg, 0, t);
5868 int bit_offset, bit_size, byte_offset;
5869 struct type *field_type;
5872 if (TYPE_CODE (t) == TYPE_CODE_PTR)
5873 address = value_as_address (arg);
5875 address = unpack_pointer (t, value_contents (arg));
5877 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL);
5878 if (find_struct_field (name, t1, 0,
5879 &field_type, &byte_offset, &bit_offset,
5884 if (TYPE_CODE (t) == TYPE_CODE_REF)
5885 arg = ada_coerce_ref (arg);
5887 arg = ada_value_ind (arg);
5888 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
5889 bit_offset, bit_size,
5893 v = value_from_pointer (lookup_reference_type (field_type),
5894 address + byte_offset);
5898 if (v != NULL || no_err)
5901 error (_("There is no member named %s."), name);
5907 error (_("Attempt to extract a component of a value that is not a record."));
5910 /* Given a type TYPE, look up the type of the component of type named NAME.
5911 If DISPP is non-null, add its byte displacement from the beginning of a
5912 structure (pointed to by a value) of type TYPE to *DISPP (does not
5913 work for packed fields).
5915 Matches any field whose name has NAME as a prefix, possibly
5918 TYPE can be either a struct or union. If REFOK, TYPE may also
5919 be a (pointer or reference)+ to a struct or union, and the
5920 ultimate target type will be searched.
5922 Looks recursively into variant clauses and parent types.
5924 If NOERR is nonzero, return NULL if NAME is not suitably defined or
5925 TYPE is not a type of the right kind. */
5927 static struct type *
5928 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
5929 int noerr, int *dispp)
5936 if (refok && type != NULL)
5939 type = ada_check_typedef (type);
5940 if (TYPE_CODE (type) != TYPE_CODE_PTR
5941 && TYPE_CODE (type) != TYPE_CODE_REF)
5943 type = TYPE_TARGET_TYPE (type);
5947 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
5948 && TYPE_CODE (type) != TYPE_CODE_UNION))
5954 target_terminal_ours ();
5955 gdb_flush (gdb_stdout);
5957 error (_("Type (null) is not a structure or union type"));
5960 /* XXX: type_sprint */
5961 fprintf_unfiltered (gdb_stderr, _("Type "));
5962 type_print (type, "", gdb_stderr, -1);
5963 error (_(" is not a structure or union type"));
5968 type = to_static_fixed_type (type);
5970 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5972 char *t_field_name = TYPE_FIELD_NAME (type, i);
5976 if (t_field_name == NULL)
5979 else if (field_name_match (t_field_name, name))
5982 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
5983 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5986 else if (ada_is_wrapper_field (type, i))
5989 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
5994 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5999 else if (ada_is_variant_part (type, i))
6002 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6004 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6007 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
6012 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6023 target_terminal_ours ();
6024 gdb_flush (gdb_stdout);
6027 /* XXX: type_sprint */
6028 fprintf_unfiltered (gdb_stderr, _("Type "));
6029 type_print (type, "", gdb_stderr, -1);
6030 error (_(" has no component named <null>"));
6034 /* XXX: type_sprint */
6035 fprintf_unfiltered (gdb_stderr, _("Type "));
6036 type_print (type, "", gdb_stderr, -1);
6037 error (_(" has no component named %s"), name);
6044 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6045 within a value of type OUTER_TYPE that is stored in GDB at
6046 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6047 numbering from 0) is applicable. Returns -1 if none are. */
6050 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
6051 const gdb_byte *outer_valaddr)
6056 struct type *discrim_type;
6057 char *discrim_name = ada_variant_discrim_name (var_type);
6058 LONGEST discrim_val;
6062 ada_lookup_struct_elt_type (outer_type, discrim_name, 1, 1, &disp);
6063 if (discrim_type == NULL)
6065 discrim_val = unpack_long (discrim_type, outer_valaddr + disp);
6068 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6070 if (ada_is_others_clause (var_type, i))
6072 else if (ada_in_variant (discrim_val, var_type, i))
6076 return others_clause;
6081 /* Dynamic-Sized Records */
6083 /* Strategy: The type ostensibly attached to a value with dynamic size
6084 (i.e., a size that is not statically recorded in the debugging
6085 data) does not accurately reflect the size or layout of the value.
6086 Our strategy is to convert these values to values with accurate,
6087 conventional types that are constructed on the fly. */
6089 /* There is a subtle and tricky problem here. In general, we cannot
6090 determine the size of dynamic records without its data. However,
6091 the 'struct value' data structure, which GDB uses to represent
6092 quantities in the inferior process (the target), requires the size
6093 of the type at the time of its allocation in order to reserve space
6094 for GDB's internal copy of the data. That's why the
6095 'to_fixed_xxx_type' routines take (target) addresses as parameters,
6096 rather than struct value*s.
6098 However, GDB's internal history variables ($1, $2, etc.) are
6099 struct value*s containing internal copies of the data that are not, in
6100 general, the same as the data at their corresponding addresses in
6101 the target. Fortunately, the types we give to these values are all
6102 conventional, fixed-size types (as per the strategy described
6103 above), so that we don't usually have to perform the
6104 'to_fixed_xxx_type' conversions to look at their values.
6105 Unfortunately, there is one exception: if one of the internal
6106 history variables is an array whose elements are unconstrained
6107 records, then we will need to create distinct fixed types for each
6108 element selected. */
6110 /* The upshot of all of this is that many routines take a (type, host
6111 address, target address) triple as arguments to represent a value.
6112 The host address, if non-null, is supposed to contain an internal
6113 copy of the relevant data; otherwise, the program is to consult the
6114 target at the target address. */
6116 /* Assuming that VAL0 represents a pointer value, the result of
6117 dereferencing it. Differs from value_ind in its treatment of
6118 dynamic-sized types. */
6121 ada_value_ind (struct value *val0)
6123 struct value *val = unwrap_value (value_ind (val0));
6124 return ada_to_fixed_value (val);
6127 /* The value resulting from dereferencing any "reference to"
6128 qualifiers on VAL0. */
6130 static struct value *
6131 ada_coerce_ref (struct value *val0)
6133 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
6135 struct value *val = val0;
6136 val = coerce_ref (val);
6137 val = unwrap_value (val);
6138 return ada_to_fixed_value (val);
6144 /* Return OFF rounded upward if necessary to a multiple of
6145 ALIGNMENT (a power of 2). */
6148 align_value (unsigned int off, unsigned int alignment)
6150 return (off + alignment - 1) & ~(alignment - 1);
6153 /* Return the bit alignment required for field #F of template type TYPE. */
6156 field_alignment (struct type *type, int f)
6158 const char *name = TYPE_FIELD_NAME (type, f);
6159 int len = (name == NULL) ? 0 : strlen (name);
6162 if (!isdigit (name[len - 1]))
6165 if (isdigit (name[len - 2]))
6166 align_offset = len - 2;
6168 align_offset = len - 1;
6170 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
6171 return TARGET_CHAR_BIT;
6173 return atoi (name + align_offset) * TARGET_CHAR_BIT;
6176 /* Find a symbol named NAME. Ignores ambiguity. */
6179 ada_find_any_symbol (const char *name)
6183 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6184 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6187 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6191 /* Find a type named NAME. Ignores ambiguity. */
6194 ada_find_any_type (const char *name)
6196 struct symbol *sym = ada_find_any_symbol (name);
6199 return SYMBOL_TYPE (sym);
6204 /* Given a symbol NAME and its associated BLOCK, search all symbols
6205 for its ___XR counterpart, which is the ``renaming'' symbol
6206 associated to NAME. Return this symbol if found, return
6210 ada_find_renaming_symbol (const char *name, struct block *block)
6212 const struct symbol *function_sym = block_function (block);
6215 if (function_sym != NULL)
6217 /* If the symbol is defined inside a function, NAME is not fully
6218 qualified. This means we need to prepend the function name
6219 as well as adding the ``___XR'' suffix to build the name of
6220 the associated renaming symbol. */
6221 char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
6222 /* Function names sometimes contain suffixes used
6223 for instance to qualify nested subprograms. When building
6224 the XR type name, we need to make sure that this suffix is
6225 not included. So do not include any suffix in the function
6226 name length below. */
6227 const int function_name_len = ada_name_prefix_len (function_name);
6228 const int rename_len = function_name_len + 2 /* "__" */
6229 + strlen (name) + 6 /* "___XR\0" */ ;
6231 /* Strip the suffix if necessary. */
6232 function_name[function_name_len] = '\0';
6234 /* Library-level functions are a special case, as GNAT adds
6235 a ``_ada_'' prefix to the function name to avoid namespace
6236 pollution. However, the renaming symbol themselves do not
6237 have this prefix, so we need to skip this prefix if present. */
6238 if (function_name_len > 5 /* "_ada_" */
6239 && strstr (function_name, "_ada_") == function_name)
6240 function_name = function_name + 5;
6242 rename = (char *) alloca (rename_len * sizeof (char));
6243 sprintf (rename, "%s__%s___XR", function_name, name);
6247 const int rename_len = strlen (name) + 6;
6248 rename = (char *) alloca (rename_len * sizeof (char));
6249 sprintf (rename, "%s___XR", name);
6252 return ada_find_any_symbol (rename);
6255 /* Because of GNAT encoding conventions, several GDB symbols may match a
6256 given type name. If the type denoted by TYPE0 is to be preferred to
6257 that of TYPE1 for purposes of type printing, return non-zero;
6258 otherwise return 0. */
6261 ada_prefer_type (struct type *type0, struct type *type1)
6265 else if (type0 == NULL)
6267 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6269 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6271 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
6273 else if (ada_is_packed_array_type (type0))
6275 else if (ada_is_array_descriptor_type (type0)
6276 && !ada_is_array_descriptor_type (type1))
6278 else if (ada_renaming_type (type0) != NULL
6279 && ada_renaming_type (type1) == NULL)
6284 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
6285 null, its TYPE_TAG_NAME. Null if TYPE is null. */
6288 ada_type_name (struct type *type)
6292 else if (TYPE_NAME (type) != NULL)
6293 return TYPE_NAME (type);
6295 return TYPE_TAG_NAME (type);
6298 /* Find a parallel type to TYPE whose name is formed by appending
6299 SUFFIX to the name of TYPE. */
6302 ada_find_parallel_type (struct type *type, const char *suffix)
6305 static size_t name_len = 0;
6307 char *typename = ada_type_name (type);
6309 if (typename == NULL)
6312 len = strlen (typename);
6314 GROW_VECT (name, name_len, len + strlen (suffix) + 1);
6316 strcpy (name, typename);
6317 strcpy (name + len, suffix);
6319 return ada_find_any_type (name);
6323 /* If TYPE is a variable-size record type, return the corresponding template
6324 type describing its fields. Otherwise, return NULL. */
6326 static struct type *
6327 dynamic_template_type (struct type *type)
6329 type = ada_check_typedef (type);
6331 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6332 || ada_type_name (type) == NULL)
6336 int len = strlen (ada_type_name (type));
6337 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
6340 return ada_find_parallel_type (type, "___XVE");
6344 /* Assuming that TEMPL_TYPE is a union or struct type, returns
6345 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
6348 is_dynamic_field (struct type *templ_type, int field_num)
6350 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
6352 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6353 && strstr (name, "___XVL") != NULL;
6356 /* The index of the variant field of TYPE, or -1 if TYPE does not
6357 represent a variant record type. */
6360 variant_field_index (struct type *type)
6364 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6367 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
6369 if (ada_is_variant_part (type, f))
6375 /* A record type with no fields. */
6377 static struct type *
6378 empty_record (struct objfile *objfile)
6380 struct type *type = alloc_type (objfile);
6381 TYPE_CODE (type) = TYPE_CODE_STRUCT;
6382 TYPE_NFIELDS (type) = 0;
6383 TYPE_FIELDS (type) = NULL;
6384 TYPE_NAME (type) = "<empty>";
6385 TYPE_TAG_NAME (type) = NULL;
6386 TYPE_FLAGS (type) = 0;
6387 TYPE_LENGTH (type) = 0;
6391 /* An ordinary record type (with fixed-length fields) that describes
6392 the value of type TYPE at VALADDR or ADDRESS (see comments at
6393 the beginning of this section) VAL according to GNAT conventions.
6394 DVAL0 should describe the (portion of a) record that contains any
6395 necessary discriminants. It should be NULL if value_type (VAL) is
6396 an outer-level type (i.e., as opposed to a branch of a variant.) A
6397 variant field (unless unchecked) is replaced by a particular branch
6400 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
6401 length are not statically known are discarded. As a consequence,
6402 VALADDR, ADDRESS and DVAL0 are ignored.
6404 NOTE: Limitations: For now, we assume that dynamic fields and
6405 variants occupy whole numbers of bytes. However, they need not be
6409 ada_template_to_fixed_record_type_1 (struct type *type,
6410 const gdb_byte *valaddr,
6411 CORE_ADDR address, struct value *dval0,
6412 int keep_dynamic_fields)
6414 struct value *mark = value_mark ();
6417 int nfields, bit_len;
6420 int fld_bit_len, bit_incr;
6423 /* Compute the number of fields in this record type that are going
6424 to be processed: unless keep_dynamic_fields, this includes only
6425 fields whose position and length are static will be processed. */
6426 if (keep_dynamic_fields)
6427 nfields = TYPE_NFIELDS (type);
6431 while (nfields < TYPE_NFIELDS (type)
6432 && !ada_is_variant_part (type, nfields)
6433 && !is_dynamic_field (type, nfields))
6437 rtype = alloc_type (TYPE_OBJFILE (type));
6438 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6439 INIT_CPLUS_SPECIFIC (rtype);
6440 TYPE_NFIELDS (rtype) = nfields;
6441 TYPE_FIELDS (rtype) = (struct field *)
6442 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6443 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6444 TYPE_NAME (rtype) = ada_type_name (type);
6445 TYPE_TAG_NAME (rtype) = NULL;
6446 TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
6452 for (f = 0; f < nfields; f += 1)
6454 off = align_value (off, field_alignment (type, f))
6455 + TYPE_FIELD_BITPOS (type, f);
6456 TYPE_FIELD_BITPOS (rtype, f) = off;
6457 TYPE_FIELD_BITSIZE (rtype, f) = 0;
6459 if (ada_is_variant_part (type, f))
6462 fld_bit_len = bit_incr = 0;
6464 else if (is_dynamic_field (type, f))
6467 dval = value_from_contents_and_address (rtype, valaddr, address);
6471 TYPE_FIELD_TYPE (rtype, f) =
6474 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
6475 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6476 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6477 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6478 bit_incr = fld_bit_len =
6479 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6483 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
6484 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6485 if (TYPE_FIELD_BITSIZE (type, f) > 0)
6486 bit_incr = fld_bit_len =
6487 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6489 bit_incr = fld_bit_len =
6490 TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
6492 if (off + fld_bit_len > bit_len)
6493 bit_len = off + fld_bit_len;
6495 TYPE_LENGTH (rtype) =
6496 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6499 /* We handle the variant part, if any, at the end because of certain
6500 odd cases in which it is re-ordered so as NOT the last field of
6501 the record. This can happen in the presence of representation
6503 if (variant_field >= 0)
6505 struct type *branch_type;
6507 off = TYPE_FIELD_BITPOS (rtype, variant_field);
6510 dval = value_from_contents_and_address (rtype, valaddr, address);
6515 to_fixed_variant_branch_type
6516 (TYPE_FIELD_TYPE (type, variant_field),
6517 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6518 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6519 if (branch_type == NULL)
6521 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
6522 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
6523 TYPE_NFIELDS (rtype) -= 1;
6527 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
6528 TYPE_FIELD_NAME (rtype, variant_field) = "S";
6530 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
6532 if (off + fld_bit_len > bit_len)
6533 bit_len = off + fld_bit_len;
6534 TYPE_LENGTH (rtype) =
6535 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6539 /* According to exp_dbug.ads, the size of TYPE for variable-size records
6540 should contain the alignment of that record, which should be a strictly
6541 positive value. If null or negative, then something is wrong, most
6542 probably in the debug info. In that case, we don't round up the size
6543 of the resulting type. If this record is not part of another structure,
6544 the current RTYPE length might be good enough for our purposes. */
6545 if (TYPE_LENGTH (type) <= 0)
6547 if (TYPE_NAME (rtype))
6548 warning (_("Invalid type size for `%s' detected: %d."),
6549 TYPE_NAME (rtype), TYPE_LENGTH (type));
6551 warning (_("Invalid type size for <unnamed> detected: %d."),
6552 TYPE_LENGTH (type));
6556 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
6557 TYPE_LENGTH (type));
6560 value_free_to_mark (mark);
6561 if (TYPE_LENGTH (rtype) > varsize_limit)
6562 error (_("record type with dynamic size is larger than varsize-limit"));
6566 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
6569 static struct type *
6570 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
6571 CORE_ADDR address, struct value *dval0)
6573 return ada_template_to_fixed_record_type_1 (type, valaddr,
6577 /* An ordinary record type in which ___XVL-convention fields and
6578 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
6579 static approximations, containing all possible fields. Uses
6580 no runtime values. Useless for use in values, but that's OK,
6581 since the results are used only for type determinations. Works on both
6582 structs and unions. Representation note: to save space, we memorize
6583 the result of this function in the TYPE_TARGET_TYPE of the
6586 static struct type *
6587 template_to_static_fixed_type (struct type *type0)
6593 if (TYPE_TARGET_TYPE (type0) != NULL)
6594 return TYPE_TARGET_TYPE (type0);
6596 nfields = TYPE_NFIELDS (type0);
6599 for (f = 0; f < nfields; f += 1)
6601 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
6602 struct type *new_type;
6604 if (is_dynamic_field (type0, f))
6605 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
6607 new_type = to_static_fixed_type (field_type);
6608 if (type == type0 && new_type != field_type)
6610 TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
6611 TYPE_CODE (type) = TYPE_CODE (type0);
6612 INIT_CPLUS_SPECIFIC (type);
6613 TYPE_NFIELDS (type) = nfields;
6614 TYPE_FIELDS (type) = (struct field *)
6615 TYPE_ALLOC (type, nfields * sizeof (struct field));
6616 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
6617 sizeof (struct field) * nfields);
6618 TYPE_NAME (type) = ada_type_name (type0);
6619 TYPE_TAG_NAME (type) = NULL;
6620 TYPE_FLAGS (type) |= TYPE_FLAG_FIXED_INSTANCE;
6621 TYPE_LENGTH (type) = 0;
6623 TYPE_FIELD_TYPE (type, f) = new_type;
6624 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
6629 /* Given an object of type TYPE whose contents are at VALADDR and
6630 whose address in memory is ADDRESS, returns a revision of TYPE --
6631 a non-dynamic-sized record with a variant part -- in which
6632 the variant part is replaced with the appropriate branch. Looks
6633 for discriminant values in DVAL0, which can be NULL if the record
6634 contains the necessary discriminant values. */
6636 static struct type *
6637 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
6638 CORE_ADDR address, struct value *dval0)
6640 struct value *mark = value_mark ();
6643 struct type *branch_type;
6644 int nfields = TYPE_NFIELDS (type);
6645 int variant_field = variant_field_index (type);
6647 if (variant_field == -1)
6651 dval = value_from_contents_and_address (type, valaddr, address);
6655 rtype = alloc_type (TYPE_OBJFILE (type));
6656 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6657 INIT_CPLUS_SPECIFIC (rtype);
6658 TYPE_NFIELDS (rtype) = nfields;
6659 TYPE_FIELDS (rtype) =
6660 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6661 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
6662 sizeof (struct field) * nfields);
6663 TYPE_NAME (rtype) = ada_type_name (type);
6664 TYPE_TAG_NAME (rtype) = NULL;
6665 TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
6666 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
6668 branch_type = to_fixed_variant_branch_type
6669 (TYPE_FIELD_TYPE (type, variant_field),
6670 cond_offset_host (valaddr,
6671 TYPE_FIELD_BITPOS (type, variant_field)
6673 cond_offset_target (address,
6674 TYPE_FIELD_BITPOS (type, variant_field)
6675 / TARGET_CHAR_BIT), dval);
6676 if (branch_type == NULL)
6679 for (f = variant_field + 1; f < nfields; f += 1)
6680 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
6681 TYPE_NFIELDS (rtype) -= 1;
6685 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
6686 TYPE_FIELD_NAME (rtype, variant_field) = "S";
6687 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
6688 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
6690 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
6692 value_free_to_mark (mark);
6696 /* An ordinary record type (with fixed-length fields) that describes
6697 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
6698 beginning of this section]. Any necessary discriminants' values
6699 should be in DVAL, a record value; it may be NULL if the object
6700 at ADDR itself contains any necessary discriminant values.
6701 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
6702 values from the record are needed. Except in the case that DVAL,
6703 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
6704 unchecked) is replaced by a particular branch of the variant.
6706 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
6707 is questionable and may be removed. It can arise during the
6708 processing of an unconstrained-array-of-record type where all the
6709 variant branches have exactly the same size. This is because in
6710 such cases, the compiler does not bother to use the XVS convention
6711 when encoding the record. I am currently dubious of this
6712 shortcut and suspect the compiler should be altered. FIXME. */
6714 static struct type *
6715 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
6716 CORE_ADDR address, struct value *dval)
6718 struct type *templ_type;
6720 if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6723 templ_type = dynamic_template_type (type0);
6725 if (templ_type != NULL)
6726 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
6727 else if (variant_field_index (type0) >= 0)
6729 if (dval == NULL && valaddr == NULL && address == 0)
6731 return to_record_with_fixed_variant_part (type0, valaddr, address,
6736 TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE;
6742 /* An ordinary record type (with fixed-length fields) that describes
6743 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
6744 union type. Any necessary discriminants' values should be in DVAL,
6745 a record value. That is, this routine selects the appropriate
6746 branch of the union at ADDR according to the discriminant value
6747 indicated in the union's type name. */
6749 static struct type *
6750 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
6751 CORE_ADDR address, struct value *dval)
6754 struct type *templ_type;
6755 struct type *var_type;
6757 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
6758 var_type = TYPE_TARGET_TYPE (var_type0);
6760 var_type = var_type0;
6762 templ_type = ada_find_parallel_type (var_type, "___XVU");
6764 if (templ_type != NULL)
6765 var_type = templ_type;
6768 ada_which_variant_applies (var_type,
6769 value_type (dval), value_contents (dval));
6772 return empty_record (TYPE_OBJFILE (var_type));
6773 else if (is_dynamic_field (var_type, which))
6774 return to_fixed_record_type
6775 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
6776 valaddr, address, dval);
6777 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
6779 to_fixed_record_type
6780 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
6782 return TYPE_FIELD_TYPE (var_type, which);
6785 /* Assuming that TYPE0 is an array type describing the type of a value
6786 at ADDR, and that DVAL describes a record containing any
6787 discriminants used in TYPE0, returns a type for the value that
6788 contains no dynamic components (that is, no components whose sizes
6789 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
6790 true, gives an error message if the resulting type's size is over
6793 static struct type *
6794 to_fixed_array_type (struct type *type0, struct value *dval,
6797 struct type *index_type_desc;
6798 struct type *result;
6800 if (ada_is_packed_array_type (type0) /* revisit? */
6801 || (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
6804 index_type_desc = ada_find_parallel_type (type0, "___XA");
6805 if (index_type_desc == NULL)
6807 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
6808 /* NOTE: elt_type---the fixed version of elt_type0---should never
6809 depend on the contents of the array in properly constructed
6811 /* Create a fixed version of the array element type.
6812 We're not providing the address of an element here,
6813 and thus the actual object value cannot be inspected to do
6814 the conversion. This should not be a problem, since arrays of
6815 unconstrained objects are not allowed. In particular, all
6816 the elements of an array of a tagged type should all be of
6817 the same type specified in the debugging info. No need to
6818 consult the object tag. */
6819 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval);
6821 if (elt_type0 == elt_type)
6824 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6825 elt_type, TYPE_INDEX_TYPE (type0));
6830 struct type *elt_type0;
6833 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
6834 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
6836 /* NOTE: result---the fixed version of elt_type0---should never
6837 depend on the contents of the array in properly constructed
6839 /* Create a fixed version of the array element type.
6840 We're not providing the address of an element here,
6841 and thus the actual object value cannot be inspected to do
6842 the conversion. This should not be a problem, since arrays of
6843 unconstrained objects are not allowed. In particular, all
6844 the elements of an array of a tagged type should all be of
6845 the same type specified in the debugging info. No need to
6846 consult the object tag. */
6847 result = ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval);
6848 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
6850 struct type *range_type =
6851 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
6852 dval, TYPE_OBJFILE (type0));
6853 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6854 result, range_type);
6856 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
6857 error (_("array type with dynamic size is larger than varsize-limit"));
6860 TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE;
6865 /* A standard type (containing no dynamically sized components)
6866 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
6867 DVAL describes a record containing any discriminants used in TYPE0,
6868 and may be NULL if there are none, or if the object of type TYPE at
6869 ADDRESS or in VALADDR contains these discriminants.
6871 In the case of tagged types, this function attempts to locate the object's
6872 tag and use it to compute the actual type. However, when ADDRESS is null,
6873 we cannot use it to determine the location of the tag, and therefore
6874 compute the tagged type's actual type. So we return the tagged type
6875 without consulting the tag. */
6878 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
6879 CORE_ADDR address, struct value *dval)
6881 type = ada_check_typedef (type);
6882 switch (TYPE_CODE (type))
6886 case TYPE_CODE_STRUCT:
6888 struct type *static_type = to_static_fixed_type (type);
6890 /* If STATIC_TYPE is a tagged type and we know the object's address,
6891 then we can determine its tag, and compute the object's actual
6894 if (address != 0 && ada_is_tagged_type (static_type, 0))
6896 struct type *real_type =
6897 type_from_tag (value_tag_from_contents_and_address (static_type,
6900 if (real_type != NULL)
6903 return to_fixed_record_type (type, valaddr, address, NULL);
6905 case TYPE_CODE_ARRAY:
6906 return to_fixed_array_type (type, dval, 1);
6907 case TYPE_CODE_UNION:
6911 return to_fixed_variant_branch_type (type, valaddr, address, dval);
6915 /* A standard (static-sized) type corresponding as well as possible to
6916 TYPE0, but based on no runtime data. */
6918 static struct type *
6919 to_static_fixed_type (struct type *type0)
6926 if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6929 type0 = ada_check_typedef (type0);
6931 switch (TYPE_CODE (type0))
6935 case TYPE_CODE_STRUCT:
6936 type = dynamic_template_type (type0);
6938 return template_to_static_fixed_type (type);
6940 return template_to_static_fixed_type (type0);
6941 case TYPE_CODE_UNION:
6942 type = ada_find_parallel_type (type0, "___XVU");
6944 return template_to_static_fixed_type (type);
6946 return template_to_static_fixed_type (type0);
6950 /* A static approximation of TYPE with all type wrappers removed. */
6952 static struct type *
6953 static_unwrap_type (struct type *type)
6955 if (ada_is_aligner_type (type))
6957 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
6958 if (ada_type_name (type1) == NULL)
6959 TYPE_NAME (type1) = ada_type_name (type);
6961 return static_unwrap_type (type1);
6965 struct type *raw_real_type = ada_get_base_type (type);
6966 if (raw_real_type == type)
6969 return to_static_fixed_type (raw_real_type);
6973 /* In some cases, incomplete and private types require
6974 cross-references that are not resolved as records (for example,
6976 type FooP is access Foo;
6978 type Foo is array ...;
6979 ). In these cases, since there is no mechanism for producing
6980 cross-references to such types, we instead substitute for FooP a
6981 stub enumeration type that is nowhere resolved, and whose tag is
6982 the name of the actual type. Call these types "non-record stubs". */
6984 /* A type equivalent to TYPE that is not a non-record stub, if one
6985 exists, otherwise TYPE. */
6988 ada_check_typedef (struct type *type)
6990 CHECK_TYPEDEF (type);
6991 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
6992 || !TYPE_STUB (type)
6993 || TYPE_TAG_NAME (type) == NULL)
6997 char *name = TYPE_TAG_NAME (type);
6998 struct type *type1 = ada_find_any_type (name);
6999 return (type1 == NULL) ? type : type1;
7003 /* A value representing the data at VALADDR/ADDRESS as described by
7004 type TYPE0, but with a standard (static-sized) type that correctly
7005 describes it. If VAL0 is not NULL and TYPE0 already is a standard
7006 type, then return VAL0 [this feature is simply to avoid redundant
7007 creation of struct values]. */
7009 static struct value *
7010 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
7013 struct type *type = ada_to_fixed_type (type0, 0, address, NULL);
7014 if (type == type0 && val0 != NULL)
7017 return value_from_contents_and_address (type, 0, address);
7020 /* A value representing VAL, but with a standard (static-sized) type
7021 that correctly describes it. Does not necessarily create a new
7024 static struct value *
7025 ada_to_fixed_value (struct value *val)
7027 return ada_to_fixed_value_create (value_type (val),
7028 VALUE_ADDRESS (val) + value_offset (val),
7032 /* A value representing VAL, but with a standard (static-sized) type
7033 chosen to approximate the real type of VAL as well as possible, but
7034 without consulting any runtime values. For Ada dynamic-sized
7035 types, therefore, the type of the result is likely to be inaccurate. */
7038 ada_to_static_fixed_value (struct value *val)
7041 to_static_fixed_type (static_unwrap_type (value_type (val)));
7042 if (type == value_type (val))
7045 return coerce_unspec_val_to_type (val, type);
7051 /* Table mapping attribute numbers to names.
7052 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
7054 static const char *attribute_names[] = {
7072 ada_attribute_name (enum exp_opcode n)
7074 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
7075 return attribute_names[n - OP_ATR_FIRST + 1];
7077 return attribute_names[0];
7080 /* Evaluate the 'POS attribute applied to ARG. */
7083 pos_atr (struct value *arg)
7085 struct type *type = value_type (arg);
7087 if (!discrete_type_p (type))
7088 error (_("'POS only defined on discrete types"));
7090 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7093 LONGEST v = value_as_long (arg);
7095 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7097 if (v == TYPE_FIELD_BITPOS (type, i))
7100 error (_("enumeration value is invalid: can't find 'POS"));
7103 return value_as_long (arg);
7106 static struct value *
7107 value_pos_atr (struct value *arg)
7109 return value_from_longest (builtin_type_int, pos_atr (arg));
7112 /* Evaluate the TYPE'VAL attribute applied to ARG. */
7114 static struct value *
7115 value_val_atr (struct type *type, struct value *arg)
7117 if (!discrete_type_p (type))
7118 error (_("'VAL only defined on discrete types"));
7119 if (!integer_type_p (value_type (arg)))
7120 error (_("'VAL requires integral argument"));
7122 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7124 long pos = value_as_long (arg);
7125 if (pos < 0 || pos >= TYPE_NFIELDS (type))
7126 error (_("argument to 'VAL out of range"));
7127 return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
7130 return value_from_longest (type, value_as_long (arg));
7136 /* True if TYPE appears to be an Ada character type.
7137 [At the moment, this is true only for Character and Wide_Character;
7138 It is a heuristic test that could stand improvement]. */
7141 ada_is_character_type (struct type *type)
7143 const char *name = ada_type_name (type);
7146 && (TYPE_CODE (type) == TYPE_CODE_CHAR
7147 || TYPE_CODE (type) == TYPE_CODE_INT
7148 || TYPE_CODE (type) == TYPE_CODE_RANGE)
7149 && (strcmp (name, "character") == 0
7150 || strcmp (name, "wide_character") == 0
7151 || strcmp (name, "unsigned char") == 0);
7154 /* True if TYPE appears to be an Ada string type. */
7157 ada_is_string_type (struct type *type)
7159 type = ada_check_typedef (type);
7161 && TYPE_CODE (type) != TYPE_CODE_PTR
7162 && (ada_is_simple_array_type (type)
7163 || ada_is_array_descriptor_type (type))
7164 && ada_array_arity (type) == 1)
7166 struct type *elttype = ada_array_element_type (type, 1);
7168 return ada_is_character_type (elttype);
7175 /* True if TYPE is a struct type introduced by the compiler to force the
7176 alignment of a value. Such types have a single field with a
7177 distinctive name. */
7180 ada_is_aligner_type (struct type *type)
7182 type = ada_check_typedef (type);
7184 /* If we can find a parallel XVS type, then the XVS type should
7185 be used instead of this type. And hence, this is not an aligner
7187 if (ada_find_parallel_type (type, "___XVS") != NULL)
7190 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
7191 && TYPE_NFIELDS (type) == 1
7192 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
7195 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
7196 the parallel type. */
7199 ada_get_base_type (struct type *raw_type)
7201 struct type *real_type_namer;
7202 struct type *raw_real_type;
7204 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
7207 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
7208 if (real_type_namer == NULL
7209 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
7210 || TYPE_NFIELDS (real_type_namer) != 1)
7213 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
7214 if (raw_real_type == NULL)
7217 return raw_real_type;
7220 /* The type of value designated by TYPE, with all aligners removed. */
7223 ada_aligned_type (struct type *type)
7225 if (ada_is_aligner_type (type))
7226 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
7228 return ada_get_base_type (type);
7232 /* The address of the aligned value in an object at address VALADDR
7233 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
7236 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
7238 if (ada_is_aligner_type (type))
7239 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
7241 TYPE_FIELD_BITPOS (type,
7242 0) / TARGET_CHAR_BIT);
7249 /* The printed representation of an enumeration literal with encoded
7250 name NAME. The value is good to the next call of ada_enum_name. */
7252 ada_enum_name (const char *name)
7254 static char *result;
7255 static size_t result_len = 0;
7258 /* First, unqualify the enumeration name:
7259 1. Search for the last '.' character. If we find one, then skip
7260 all the preceeding characters, the unqualified name starts
7261 right after that dot.
7262 2. Otherwise, we may be debugging on a target where the compiler
7263 translates dots into "__". Search forward for double underscores,
7264 but stop searching when we hit an overloading suffix, which is
7265 of the form "__" followed by digits. */
7267 tmp = strrchr (name, '.');
7272 while ((tmp = strstr (name, "__")) != NULL)
7274 if (isdigit (tmp[2]))
7284 if (name[1] == 'U' || name[1] == 'W')
7286 if (sscanf (name + 2, "%x", &v) != 1)
7292 GROW_VECT (result, result_len, 16);
7293 if (isascii (v) && isprint (v))
7294 sprintf (result, "'%c'", v);
7295 else if (name[1] == 'U')
7296 sprintf (result, "[\"%02x\"]", v);
7298 sprintf (result, "[\"%04x\"]", v);
7304 tmp = strstr (name, "__");
7306 tmp = strstr (name, "$");
7309 GROW_VECT (result, result_len, tmp - name + 1);
7310 strncpy (result, name, tmp - name);
7311 result[tmp - name] = '\0';
7319 static struct value *
7320 evaluate_subexp (struct type *expect_type, struct expression *exp, int *pos,
7323 return (*exp->language_defn->la_exp_desc->evaluate_exp)
7324 (expect_type, exp, pos, noside);
7327 /* Evaluate the subexpression of EXP starting at *POS as for
7328 evaluate_type, updating *POS to point just past the evaluated
7331 static struct value *
7332 evaluate_subexp_type (struct expression *exp, int *pos)
7334 return (*exp->language_defn->la_exp_desc->evaluate_exp)
7335 (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
7338 /* If VAL is wrapped in an aligner or subtype wrapper, return the
7341 static struct value *
7342 unwrap_value (struct value *val)
7344 struct type *type = ada_check_typedef (value_type (val));
7345 if (ada_is_aligner_type (type))
7347 struct value *v = value_struct_elt (&val, NULL, "F",
7348 NULL, "internal structure");
7349 struct type *val_type = ada_check_typedef (value_type (v));
7350 if (ada_type_name (val_type) == NULL)
7351 TYPE_NAME (val_type) = ada_type_name (type);
7353 return unwrap_value (v);
7357 struct type *raw_real_type =
7358 ada_check_typedef (ada_get_base_type (type));
7360 if (type == raw_real_type)
7364 coerce_unspec_val_to_type
7365 (val, ada_to_fixed_type (raw_real_type, 0,
7366 VALUE_ADDRESS (val) + value_offset (val),
7371 static struct value *
7372 cast_to_fixed (struct type *type, struct value *arg)
7376 if (type == value_type (arg))
7378 else if (ada_is_fixed_point_type (value_type (arg)))
7379 val = ada_float_to_fixed (type,
7380 ada_fixed_to_float (value_type (arg),
7381 value_as_long (arg)));
7385 value_as_double (value_cast (builtin_type_double, value_copy (arg)));
7386 val = ada_float_to_fixed (type, argd);
7389 return value_from_longest (type, val);
7392 static struct value *
7393 cast_from_fixed_to_double (struct value *arg)
7395 DOUBLEST val = ada_fixed_to_float (value_type (arg),
7396 value_as_long (arg));
7397 return value_from_double (builtin_type_double, val);
7400 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
7401 return the converted value. */
7403 static struct value *
7404 coerce_for_assign (struct type *type, struct value *val)
7406 struct type *type2 = value_type (val);
7410 type2 = ada_check_typedef (type2);
7411 type = ada_check_typedef (type);
7413 if (TYPE_CODE (type2) == TYPE_CODE_PTR
7414 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7416 val = ada_value_ind (val);
7417 type2 = value_type (val);
7420 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
7421 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7423 if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
7424 || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
7425 != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
7426 error (_("Incompatible types in assignment"));
7427 deprecated_set_value_type (val, type);
7432 static struct value *
7433 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
7436 struct type *type1, *type2;
7439 arg1 = coerce_ref (arg1);
7440 arg2 = coerce_ref (arg2);
7441 type1 = base_type (ada_check_typedef (value_type (arg1)));
7442 type2 = base_type (ada_check_typedef (value_type (arg2)));
7444 if (TYPE_CODE (type1) != TYPE_CODE_INT
7445 || TYPE_CODE (type2) != TYPE_CODE_INT)
7446 return value_binop (arg1, arg2, op);
7455 return value_binop (arg1, arg2, op);
7458 v2 = value_as_long (arg2);
7460 error (_("second operand of %s must not be zero."), op_string (op));
7462 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
7463 return value_binop (arg1, arg2, op);
7465 v1 = value_as_long (arg1);
7470 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
7471 v += v > 0 ? -1 : 1;
7479 /* Should not reach this point. */
7483 val = allocate_value (type1);
7484 store_unsigned_integer (value_contents_raw (val),
7485 TYPE_LENGTH (value_type (val)), v);
7490 ada_value_equal (struct value *arg1, struct value *arg2)
7492 if (ada_is_direct_array_type (value_type (arg1))
7493 || ada_is_direct_array_type (value_type (arg2)))
7495 arg1 = ada_coerce_to_simple_array (arg1);
7496 arg2 = ada_coerce_to_simple_array (arg2);
7497 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
7498 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
7499 error (_("Attempt to compare array with non-array"));
7500 /* FIXME: The following works only for types whose
7501 representations use all bits (no padding or undefined bits)
7502 and do not have user-defined equality. */
7504 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
7505 && memcmp (value_contents (arg1), value_contents (arg2),
7506 TYPE_LENGTH (value_type (arg1))) == 0;
7508 return value_equal (arg1, arg2);
7511 /* Total number of component associations in the aggregate starting at
7512 index PC in EXP. Assumes that index PC is the start of an
7516 num_component_specs (struct expression *exp, int pc)
7519 m = exp->elts[pc + 1].longconst;
7522 for (i = 0; i < m; i += 1)
7524 switch (exp->elts[pc].opcode)
7530 n += exp->elts[pc + 1].longconst;
7533 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
7538 /* Assign the result of evaluating EXP starting at *POS to the INDEXth
7539 component of LHS (a simple array or a record), updating *POS past
7540 the expression, assuming that LHS is contained in CONTAINER. Does
7541 not modify the inferior's memory, nor does it modify LHS (unless
7542 LHS == CONTAINER). */
7545 assign_component (struct value *container, struct value *lhs, LONGEST index,
7546 struct expression *exp, int *pos)
7548 struct value *mark = value_mark ();
7550 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
7552 struct value *index_val = value_from_longest (builtin_type_int, index);
7553 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
7557 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
7558 elt = ada_to_fixed_value (unwrap_value (elt));
7561 if (exp->elts[*pos].opcode == OP_AGGREGATE)
7562 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
7564 value_assign_to_component (container, elt,
7565 ada_evaluate_subexp (NULL, exp, pos,
7568 value_free_to_mark (mark);
7571 /* Assuming that LHS represents an lvalue having a record or array
7572 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
7573 of that aggregate's value to LHS, advancing *POS past the
7574 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
7575 lvalue containing LHS (possibly LHS itself). Does not modify
7576 the inferior's memory, nor does it modify the contents of
7577 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
7579 static struct value *
7580 assign_aggregate (struct value *container,
7581 struct value *lhs, struct expression *exp,
7582 int *pos, enum noside noside)
7584 struct type *lhs_type;
7585 int n = exp->elts[*pos+1].longconst;
7586 LONGEST low_index, high_index;
7589 int max_indices, num_indices;
7590 int is_array_aggregate;
7592 struct value *mark = value_mark ();
7595 if (noside != EVAL_NORMAL)
7598 for (i = 0; i < n; i += 1)
7599 ada_evaluate_subexp (NULL, exp, pos, noside);
7603 container = ada_coerce_ref (container);
7604 if (ada_is_direct_array_type (value_type (container)))
7605 container = ada_coerce_to_simple_array (container);
7606 lhs = ada_coerce_ref (lhs);
7607 if (!deprecated_value_modifiable (lhs))
7608 error (_("Left operand of assignment is not a modifiable lvalue."));
7610 lhs_type = value_type (lhs);
7611 if (ada_is_direct_array_type (lhs_type))
7613 lhs = ada_coerce_to_simple_array (lhs);
7614 lhs_type = value_type (lhs);
7615 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
7616 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
7617 is_array_aggregate = 1;
7619 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
7622 high_index = num_visible_fields (lhs_type) - 1;
7623 is_array_aggregate = 0;
7626 error (_("Left-hand side must be array or record."));
7628 num_specs = num_component_specs (exp, *pos - 3);
7629 max_indices = 4 * num_specs + 4;
7630 indices = alloca (max_indices * sizeof (indices[0]));
7631 indices[0] = indices[1] = low_index - 1;
7632 indices[2] = indices[3] = high_index + 1;
7635 for (i = 0; i < n; i += 1)
7637 switch (exp->elts[*pos].opcode)
7640 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
7641 &num_indices, max_indices,
7642 low_index, high_index);
7645 aggregate_assign_positional (container, lhs, exp, pos, indices,
7646 &num_indices, max_indices,
7647 low_index, high_index);
7651 error (_("Misplaced 'others' clause"));
7652 aggregate_assign_others (container, lhs, exp, pos, indices,
7653 num_indices, low_index, high_index);
7656 error (_("Internal error: bad aggregate clause"));
7663 /* Assign into the component of LHS indexed by the OP_POSITIONAL
7664 construct at *POS, updating *POS past the construct, given that
7665 the positions are relative to lower bound LOW, where HIGH is the
7666 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
7667 updating *NUM_INDICES as needed. CONTAINER is as for
7668 assign_aggregate. */
7670 aggregate_assign_positional (struct value *container,
7671 struct value *lhs, struct expression *exp,
7672 int *pos, LONGEST *indices, int *num_indices,
7673 int max_indices, LONGEST low, LONGEST high)
7675 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
7677 if (ind - 1 == high)
7678 warning (_("Extra components in aggregate ignored."));
7681 add_component_interval (ind, ind, indices, num_indices, max_indices);
7683 assign_component (container, lhs, ind, exp, pos);
7686 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
7689 /* Assign into the components of LHS indexed by the OP_CHOICES
7690 construct at *POS, updating *POS past the construct, given that
7691 the allowable indices are LOW..HIGH. Record the indices assigned
7692 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
7693 needed. CONTAINER is as for assign_aggregate. */
7695 aggregate_assign_from_choices (struct value *container,
7696 struct value *lhs, struct expression *exp,
7697 int *pos, LONGEST *indices, int *num_indices,
7698 int max_indices, LONGEST low, LONGEST high)
7701 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
7702 int choice_pos, expr_pc;
7703 int is_array = ada_is_direct_array_type (value_type (lhs));
7705 choice_pos = *pos += 3;
7707 for (j = 0; j < n_choices; j += 1)
7708 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
7710 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
7712 for (j = 0; j < n_choices; j += 1)
7714 LONGEST lower, upper;
7715 enum exp_opcode op = exp->elts[choice_pos].opcode;
7716 if (op == OP_DISCRETE_RANGE)
7719 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
7721 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
7726 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
7737 name = &exp->elts[choice_pos + 2].string;
7740 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
7743 error (_("Invalid record component association."));
7745 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
7747 if (! find_struct_field (name, value_type (lhs), 0,
7748 NULL, NULL, NULL, NULL, &ind))
7749 error (_("Unknown component name: %s."), name);
7750 lower = upper = ind;
7753 if (lower <= upper && (lower < low || upper > high))
7754 error (_("Index in component association out of bounds."));
7756 add_component_interval (lower, upper, indices, num_indices,
7758 while (lower <= upper)
7762 assign_component (container, lhs, lower, exp, &pos1);
7768 /* Assign the value of the expression in the OP_OTHERS construct in
7769 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
7770 have not been previously assigned. The index intervals already assigned
7771 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
7772 OP_OTHERS clause. CONTAINER is as for assign_aggregate*/
7774 aggregate_assign_others (struct value *container,
7775 struct value *lhs, struct expression *exp,
7776 int *pos, LONGEST *indices, int num_indices,
7777 LONGEST low, LONGEST high)
7780 int expr_pc = *pos+1;
7782 for (i = 0; i < num_indices - 2; i += 2)
7785 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
7789 assign_component (container, lhs, ind, exp, &pos);
7792 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
7795 /* Add the interval [LOW .. HIGH] to the sorted set of intervals
7796 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
7797 modifying *SIZE as needed. It is an error if *SIZE exceeds
7798 MAX_SIZE. The resulting intervals do not overlap. */
7800 add_component_interval (LONGEST low, LONGEST high,
7801 LONGEST* indices, int *size, int max_size)
7804 for (i = 0; i < *size; i += 2) {
7805 if (high >= indices[i] && low <= indices[i + 1])
7808 for (kh = i + 2; kh < *size; kh += 2)
7809 if (high < indices[kh])
7811 if (low < indices[i])
7813 indices[i + 1] = indices[kh - 1];
7814 if (high > indices[i + 1])
7815 indices[i + 1] = high;
7816 memcpy (indices + i + 2, indices + kh, *size - kh);
7817 *size -= kh - i - 2;
7820 else if (high < indices[i])
7824 if (*size == max_size)
7825 error (_("Internal error: miscounted aggregate components."));
7827 for (j = *size-1; j >= i+2; j -= 1)
7828 indices[j] = indices[j - 2];
7830 indices[i + 1] = high;
7833 static struct value *
7834 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
7835 int *pos, enum noside noside)
7838 int tem, tem2, tem3;
7840 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
7843 struct value **argvec;
7847 op = exp->elts[pc].opcode;
7854 unwrap_value (evaluate_subexp_standard
7855 (expect_type, exp, pos, noside));
7859 struct value *result;
7861 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
7862 /* The result type will have code OP_STRING, bashed there from
7863 OP_ARRAY. Bash it back. */
7864 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
7865 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
7871 type = exp->elts[pc + 1].type;
7872 arg1 = evaluate_subexp (type, exp, pos, noside);
7873 if (noside == EVAL_SKIP)
7875 if (type != ada_check_typedef (value_type (arg1)))
7877 if (ada_is_fixed_point_type (type))
7878 arg1 = cast_to_fixed (type, arg1);
7879 else if (ada_is_fixed_point_type (value_type (arg1)))
7880 arg1 = value_cast (type, cast_from_fixed_to_double (arg1));
7881 else if (VALUE_LVAL (arg1) == lval_memory)
7883 /* This is in case of the really obscure (and undocumented,
7884 but apparently expected) case of (Foo) Bar.all, where Bar
7885 is an integer constant and Foo is a dynamic-sized type.
7886 If we don't do this, ARG1 will simply be relabeled with
7888 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7889 return value_zero (to_static_fixed_type (type), not_lval);
7891 ada_to_fixed_value_create
7892 (type, VALUE_ADDRESS (arg1) + value_offset (arg1), 0);
7895 arg1 = value_cast (type, arg1);
7901 type = exp->elts[pc + 1].type;
7902 return ada_evaluate_subexp (type, exp, pos, noside);
7905 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7906 if (exp->elts[*pos].opcode == OP_AGGREGATE)
7908 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
7909 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
7911 return ada_value_assign (arg1, arg1);
7913 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
7914 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
7916 if (ada_is_fixed_point_type (value_type (arg1)))
7917 arg2 = cast_to_fixed (value_type (arg1), arg2);
7918 else if (ada_is_fixed_point_type (value_type (arg2)))
7920 (_("Fixed-point values must be assigned to fixed-point variables"));
7922 arg2 = coerce_for_assign (value_type (arg1), arg2);
7923 return ada_value_assign (arg1, arg2);
7926 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
7927 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
7928 if (noside == EVAL_SKIP)
7930 if ((ada_is_fixed_point_type (value_type (arg1))
7931 || ada_is_fixed_point_type (value_type (arg2)))
7932 && value_type (arg1) != value_type (arg2))
7933 error (_("Operands of fixed-point addition must have the same type"));
7934 return value_cast (value_type (arg1), value_add (arg1, arg2));
7937 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
7938 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
7939 if (noside == EVAL_SKIP)
7941 if ((ada_is_fixed_point_type (value_type (arg1))
7942 || ada_is_fixed_point_type (value_type (arg2)))
7943 && value_type (arg1) != value_type (arg2))
7944 error (_("Operands of fixed-point subtraction must have the same type"));
7945 return value_cast (value_type (arg1), value_sub (arg1, arg2));
7949 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7950 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7951 if (noside == EVAL_SKIP)
7953 else if (noside == EVAL_AVOID_SIDE_EFFECTS
7954 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
7955 return value_zero (value_type (arg1), not_lval);
7958 if (ada_is_fixed_point_type (value_type (arg1)))
7959 arg1 = cast_from_fixed_to_double (arg1);
7960 if (ada_is_fixed_point_type (value_type (arg2)))
7961 arg2 = cast_from_fixed_to_double (arg2);
7962 return ada_value_binop (arg1, arg2, op);
7967 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7968 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7969 if (noside == EVAL_SKIP)
7971 else if (noside == EVAL_AVOID_SIDE_EFFECTS
7972 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
7973 return value_zero (value_type (arg1), not_lval);
7975 return ada_value_binop (arg1, arg2, op);
7978 case BINOP_NOTEQUAL:
7979 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7980 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
7981 if (noside == EVAL_SKIP)
7983 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7986 tem = ada_value_equal (arg1, arg2);
7987 if (op == BINOP_NOTEQUAL)
7989 return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
7992 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7993 if (noside == EVAL_SKIP)
7995 else if (ada_is_fixed_point_type (value_type (arg1)))
7996 return value_cast (value_type (arg1), value_neg (arg1));
7998 return value_neg (arg1);
8002 if (noside == EVAL_SKIP)
8007 else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
8008 /* Only encountered when an unresolved symbol occurs in a
8009 context other than a function call, in which case, it is
8011 error (_("Unexpected unresolved symbol, %s, during evaluation"),
8012 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
8013 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8017 (to_static_fixed_type
8018 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8024 unwrap_value (evaluate_subexp_standard
8025 (expect_type, exp, pos, noside));
8026 return ada_to_fixed_value (arg1);
8032 /* Allocate arg vector, including space for the function to be
8033 called in argvec[0] and a terminating NULL. */
8034 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8036 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8038 if (exp->elts[*pos].opcode == OP_VAR_VALUE
8039 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
8040 error (_("Unexpected unresolved symbol, %s, during evaluation"),
8041 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
8044 for (tem = 0; tem <= nargs; tem += 1)
8045 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8048 if (noside == EVAL_SKIP)
8052 if (ada_is_packed_array_type (desc_base_type (value_type (argvec[0]))))
8053 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
8054 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
8055 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8056 && VALUE_LVAL (argvec[0]) == lval_memory))
8057 argvec[0] = value_addr (argvec[0]);
8059 type = ada_check_typedef (value_type (argvec[0]));
8060 if (TYPE_CODE (type) == TYPE_CODE_PTR)
8062 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
8064 case TYPE_CODE_FUNC:
8065 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8067 case TYPE_CODE_ARRAY:
8069 case TYPE_CODE_STRUCT:
8070 if (noside != EVAL_AVOID_SIDE_EFFECTS)
8071 argvec[0] = ada_value_ind (argvec[0]);
8072 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8075 error (_("cannot subscript or call something of type `%s'"),
8076 ada_type_name (value_type (argvec[0])));
8081 switch (TYPE_CODE (type))
8083 case TYPE_CODE_FUNC:
8084 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8085 return allocate_value (TYPE_TARGET_TYPE (type));
8086 return call_function_by_hand (argvec[0], nargs, argvec + 1);
8087 case TYPE_CODE_STRUCT:
8091 arity = ada_array_arity (type);
8092 type = ada_array_element_type (type, nargs);
8094 error (_("cannot subscript or call a record"));
8096 error (_("wrong number of subscripts; expecting %d"), arity);
8097 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8098 return allocate_value (ada_aligned_type (type));
8100 unwrap_value (ada_value_subscript
8101 (argvec[0], nargs, argvec + 1));
8103 case TYPE_CODE_ARRAY:
8104 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8106 type = ada_array_element_type (type, nargs);
8108 error (_("element type of array unknown"));
8110 return allocate_value (ada_aligned_type (type));
8113 unwrap_value (ada_value_subscript
8114 (ada_coerce_to_simple_array (argvec[0]),
8115 nargs, argvec + 1));
8116 case TYPE_CODE_PTR: /* Pointer to array */
8117 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
8118 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8120 type = ada_array_element_type (type, nargs);
8122 error (_("element type of array unknown"));
8124 return allocate_value (ada_aligned_type (type));
8127 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
8128 nargs, argvec + 1));
8131 error (_("Attempt to index or call something other than an "
8132 "array or function"));
8137 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8138 struct value *low_bound_val =
8139 evaluate_subexp (NULL_TYPE, exp, pos, noside);
8140 struct value *high_bound_val =
8141 evaluate_subexp (NULL_TYPE, exp, pos, noside);
8144 low_bound_val = coerce_ref (low_bound_val);
8145 high_bound_val = coerce_ref (high_bound_val);
8146 low_bound = pos_atr (low_bound_val);
8147 high_bound = pos_atr (high_bound_val);
8149 if (noside == EVAL_SKIP)
8152 /* If this is a reference to an aligner type, then remove all
8154 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8155 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
8156 TYPE_TARGET_TYPE (value_type (array)) =
8157 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
8159 if (ada_is_packed_array_type (value_type (array)))
8160 error (_("cannot slice a packed array"));
8162 /* If this is a reference to an array or an array lvalue,
8163 convert to a pointer. */
8164 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8165 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
8166 && VALUE_LVAL (array) == lval_memory))
8167 array = value_addr (array);
8169 if (noside == EVAL_AVOID_SIDE_EFFECTS
8170 && ada_is_array_descriptor_type (ada_check_typedef
8171 (value_type (array))))
8172 return empty_array (ada_type_of_array (array, 0), low_bound);
8174 array = ada_coerce_to_simple_array_ptr (array);
8176 /* If we have more than one level of pointer indirection,
8177 dereference the value until we get only one level. */
8178 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
8179 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
8181 array = value_ind (array);
8183 /* Make sure we really do have an array type before going further,
8184 to avoid a SEGV when trying to get the index type or the target
8185 type later down the road if the debug info generated by
8186 the compiler is incorrect or incomplete. */
8187 if (!ada_is_simple_array_type (value_type (array)))
8188 error (_("cannot take slice of non-array"));
8190 if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
8192 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
8193 return empty_array (TYPE_TARGET_TYPE (value_type (array)),
8197 struct type *arr_type0 =
8198 to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
8200 return ada_value_slice_ptr (array, arr_type0,
8201 longest_to_int (low_bound),
8202 longest_to_int (high_bound));
8205 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8207 else if (high_bound < low_bound)
8208 return empty_array (value_type (array), low_bound);
8210 return ada_value_slice (array, longest_to_int (low_bound),
8211 longest_to_int (high_bound));
8216 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8217 type = exp->elts[pc + 1].type;
8219 if (noside == EVAL_SKIP)
8222 switch (TYPE_CODE (type))
8225 lim_warning (_("Membership test incompletely implemented; "
8226 "always returns true"));
8227 return value_from_longest (builtin_type_int, (LONGEST) 1);
8229 case TYPE_CODE_RANGE:
8230 arg2 = value_from_longest (builtin_type_int, TYPE_LOW_BOUND (type));
8231 arg3 = value_from_longest (builtin_type_int,
8232 TYPE_HIGH_BOUND (type));
8234 value_from_longest (builtin_type_int,
8235 (value_less (arg1, arg3)
8236 || value_equal (arg1, arg3))
8237 && (value_less (arg2, arg1)
8238 || value_equal (arg2, arg1)));
8241 case BINOP_IN_BOUNDS:
8243 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8244 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8246 if (noside == EVAL_SKIP)
8249 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8250 return value_zero (builtin_type_int, not_lval);
8252 tem = longest_to_int (exp->elts[pc + 1].longconst);
8254 if (tem < 1 || tem > ada_array_arity (value_type (arg2)))
8255 error (_("invalid dimension number to 'range"));
8257 arg3 = ada_array_bound (arg2, tem, 1);
8258 arg2 = ada_array_bound (arg2, tem, 0);
8261 value_from_longest (builtin_type_int,
8262 (value_less (arg1, arg3)
8263 || value_equal (arg1, arg3))
8264 && (value_less (arg2, arg1)
8265 || value_equal (arg2, arg1)));
8267 case TERNOP_IN_RANGE:
8268 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8269 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8270 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8272 if (noside == EVAL_SKIP)
8276 value_from_longest (builtin_type_int,
8277 (value_less (arg1, arg3)
8278 || value_equal (arg1, arg3))
8279 && (value_less (arg2, arg1)
8280 || value_equal (arg2, arg1)));
8286 struct type *type_arg;
8287 if (exp->elts[*pos].opcode == OP_TYPE)
8289 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8291 type_arg = exp->elts[pc + 2].type;
8295 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8299 if (exp->elts[*pos].opcode != OP_LONG)
8300 error (_("Invalid operand to '%s"), ada_attribute_name (op));
8301 tem = longest_to_int (exp->elts[*pos + 2].longconst);
8304 if (noside == EVAL_SKIP)
8307 if (type_arg == NULL)
8309 arg1 = ada_coerce_ref (arg1);
8311 if (ada_is_packed_array_type (value_type (arg1)))
8312 arg1 = ada_coerce_to_simple_array (arg1);
8314 if (tem < 1 || tem > ada_array_arity (value_type (arg1)))
8315 error (_("invalid dimension number to '%s"),
8316 ada_attribute_name (op));
8318 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8320 type = ada_index_type (value_type (arg1), tem);
8323 (_("attempt to take bound of something that is not an array"));
8324 return allocate_value (type);
8329 default: /* Should never happen. */
8330 error (_("unexpected attribute encountered"));
8332 return ada_array_bound (arg1, tem, 0);
8334 return ada_array_bound (arg1, tem, 1);
8336 return ada_array_length (arg1, tem);
8339 else if (discrete_type_p (type_arg))
8341 struct type *range_type;
8342 char *name = ada_type_name (type_arg);
8344 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
8346 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
8347 if (range_type == NULL)
8348 range_type = type_arg;
8352 error (_("unexpected attribute encountered"));
8354 return discrete_type_low_bound (range_type);
8356 return discrete_type_high_bound (range_type);
8358 error (_("the 'length attribute applies only to array types"));
8361 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
8362 error (_("unimplemented type attribute"));
8367 if (ada_is_packed_array_type (type_arg))
8368 type_arg = decode_packed_array_type (type_arg);
8370 if (tem < 1 || tem > ada_array_arity (type_arg))
8371 error (_("invalid dimension number to '%s"),
8372 ada_attribute_name (op));
8374 type = ada_index_type (type_arg, tem);
8377 (_("attempt to take bound of something that is not an array"));
8378 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8379 return allocate_value (type);
8384 error (_("unexpected attribute encountered"));
8386 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
8387 return value_from_longest (type, low);
8389 high = ada_array_bound_from_type (type_arg, tem, 1, &type);
8390 return value_from_longest (type, high);
8392 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
8393 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
8394 return value_from_longest (type, high - low + 1);
8400 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8401 if (noside == EVAL_SKIP)
8404 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8405 return value_zero (ada_tag_type (arg1), not_lval);
8407 return ada_value_tag (arg1);
8411 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8412 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8413 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8414 if (noside == EVAL_SKIP)
8416 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8417 return value_zero (value_type (arg1), not_lval);
8419 return value_binop (arg1, arg2,
8420 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
8422 case OP_ATR_MODULUS:
8424 struct type *type_arg = exp->elts[pc + 2].type;
8425 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8427 if (noside == EVAL_SKIP)
8430 if (!ada_is_modular_type (type_arg))
8431 error (_("'modulus must be applied to modular type"));
8433 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
8434 ada_modulus (type_arg));
8439 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8440 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8441 if (noside == EVAL_SKIP)
8443 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8444 return value_zero (builtin_type_int, not_lval);
8446 return value_pos_atr (arg1);
8449 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8450 if (noside == EVAL_SKIP)
8452 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8453 return value_zero (builtin_type_int, not_lval);
8455 return value_from_longest (builtin_type_int,
8457 * TYPE_LENGTH (value_type (arg1)));
8460 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8461 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8462 type = exp->elts[pc + 2].type;
8463 if (noside == EVAL_SKIP)
8465 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8466 return value_zero (type, not_lval);
8468 return value_val_atr (type, arg1);
8471 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8472 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8473 if (noside == EVAL_SKIP)
8475 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8476 return value_zero (value_type (arg1), not_lval);
8478 return value_binop (arg1, arg2, op);
8481 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8482 if (noside == EVAL_SKIP)
8488 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8489 if (noside == EVAL_SKIP)
8491 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
8492 return value_neg (arg1);
8497 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
8498 expect_type = TYPE_TARGET_TYPE (ada_check_typedef (expect_type));
8499 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
8500 if (noside == EVAL_SKIP)
8502 type = ada_check_typedef (value_type (arg1));
8503 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8505 if (ada_is_array_descriptor_type (type))
8506 /* GDB allows dereferencing GNAT array descriptors. */
8508 struct type *arrType = ada_type_of_array (arg1, 0);
8509 if (arrType == NULL)
8510 error (_("Attempt to dereference null array pointer."));
8511 return value_at_lazy (arrType, 0);
8513 else if (TYPE_CODE (type) == TYPE_CODE_PTR
8514 || TYPE_CODE (type) == TYPE_CODE_REF
8515 /* In C you can dereference an array to get the 1st elt. */
8516 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
8518 type = to_static_fixed_type
8520 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
8522 return value_zero (type, lval_memory);
8524 else if (TYPE_CODE (type) == TYPE_CODE_INT)
8525 /* GDB allows dereferencing an int. */
8526 return value_zero (builtin_type_int, lval_memory);
8528 error (_("Attempt to take contents of a non-pointer value."));
8530 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
8531 type = ada_check_typedef (value_type (arg1));
8533 if (ada_is_array_descriptor_type (type))
8534 /* GDB allows dereferencing GNAT array descriptors. */
8535 return ada_coerce_to_simple_array (arg1);
8537 return ada_value_ind (arg1);
8539 case STRUCTOP_STRUCT:
8540 tem = longest_to_int (exp->elts[pc + 1].longconst);
8541 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
8542 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8543 if (noside == EVAL_SKIP)
8545 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8547 struct type *type1 = value_type (arg1);
8548 if (ada_is_tagged_type (type1, 1))
8550 type = ada_lookup_struct_elt_type (type1,
8551 &exp->elts[pc + 2].string,
8554 /* In this case, we assume that the field COULD exist
8555 in some extension of the type. Return an object of
8556 "type" void, which will match any formal
8557 (see ada_type_match). */
8558 return value_zero (builtin_type_void, lval_memory);
8562 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
8565 return value_zero (ada_aligned_type (type), lval_memory);
8569 ada_to_fixed_value (unwrap_value
8570 (ada_value_struct_elt
8571 (arg1, &exp->elts[pc + 2].string, 0)));
8573 /* The value is not supposed to be used. This is here to make it
8574 easier to accommodate expressions that contain types. */
8576 if (noside == EVAL_SKIP)
8578 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8579 return allocate_value (builtin_type_void);
8581 error (_("Attempt to use a type name as an expression"));
8586 case OP_DISCRETE_RANGE:
8589 if (noside == EVAL_NORMAL)
8593 error (_("Undefined name, ambiguous name, or renaming used in "
8594 "component association: %s."), &exp->elts[pc+2].string);
8596 error (_("Aggregates only allowed on the right of an assignment"));
8598 internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
8601 ada_forward_operator_length (exp, pc, &oplen, &nargs);
8603 for (tem = 0; tem < nargs; tem += 1)
8604 ada_evaluate_subexp (NULL, exp, pos, noside);
8609 return value_from_longest (builtin_type_long, (LONGEST) 1);
8615 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
8616 type name that encodes the 'small and 'delta information.
8617 Otherwise, return NULL. */
8620 fixed_type_info (struct type *type)
8622 const char *name = ada_type_name (type);
8623 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
8625 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
8627 const char *tail = strstr (name, "___XF_");
8633 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
8634 return fixed_type_info (TYPE_TARGET_TYPE (type));
8639 /* Returns non-zero iff TYPE represents an Ada fixed-point type. */
8642 ada_is_fixed_point_type (struct type *type)
8644 return fixed_type_info (type) != NULL;
8647 /* Return non-zero iff TYPE represents a System.Address type. */
8650 ada_is_system_address_type (struct type *type)
8652 return (TYPE_NAME (type)
8653 && strcmp (TYPE_NAME (type), "system__address") == 0);
8656 /* Assuming that TYPE is the representation of an Ada fixed-point
8657 type, return its delta, or -1 if the type is malformed and the
8658 delta cannot be determined. */
8661 ada_delta (struct type *type)
8663 const char *encoding = fixed_type_info (type);
8666 if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
8669 return (DOUBLEST) num / (DOUBLEST) den;
8672 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
8673 factor ('SMALL value) associated with the type. */
8676 scaling_factor (struct type *type)
8678 const char *encoding = fixed_type_info (type);
8679 unsigned long num0, den0, num1, den1;
8682 n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
8687 return (DOUBLEST) num1 / (DOUBLEST) den1;
8689 return (DOUBLEST) num0 / (DOUBLEST) den0;
8693 /* Assuming that X is the representation of a value of fixed-point
8694 type TYPE, return its floating-point equivalent. */
8697 ada_fixed_to_float (struct type *type, LONGEST x)
8699 return (DOUBLEST) x *scaling_factor (type);
8702 /* The representation of a fixed-point value of type TYPE
8703 corresponding to the value X. */
8706 ada_float_to_fixed (struct type *type, DOUBLEST x)
8708 return (LONGEST) (x / scaling_factor (type) + 0.5);
8712 /* VAX floating formats */
8714 /* Non-zero iff TYPE represents one of the special VAX floating-point
8718 ada_is_vax_floating_type (struct type *type)
8721 (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
8724 && (TYPE_CODE (type) == TYPE_CODE_INT
8725 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8726 && strncmp (ada_type_name (type) + name_len - 6, "___XF", 5) == 0;
8729 /* The type of special VAX floating-point type this is, assuming
8730 ada_is_vax_floating_point. */
8733 ada_vax_float_type_suffix (struct type *type)
8735 return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
8738 /* A value representing the special debugging function that outputs
8739 VAX floating-point values of the type represented by TYPE. Assumes
8740 ada_is_vax_floating_type (TYPE). */
8743 ada_vax_float_print_function (struct type *type)
8745 switch (ada_vax_float_type_suffix (type))
8748 return get_var_value ("DEBUG_STRING_F", 0);
8750 return get_var_value ("DEBUG_STRING_D", 0);
8752 return get_var_value ("DEBUG_STRING_G", 0);
8754 error (_("invalid VAX floating-point type"));
8761 /* Scan STR beginning at position K for a discriminant name, and
8762 return the value of that discriminant field of DVAL in *PX. If
8763 PNEW_K is not null, put the position of the character beyond the
8764 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
8765 not alter *PX and *PNEW_K if unsuccessful. */
8768 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
8771 static char *bound_buffer = NULL;
8772 static size_t bound_buffer_len = 0;
8775 struct value *bound_val;
8777 if (dval == NULL || str == NULL || str[k] == '\0')
8780 pend = strstr (str + k, "__");
8784 k += strlen (bound);
8788 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
8789 bound = bound_buffer;
8790 strncpy (bound_buffer, str + k, pend - (str + k));
8791 bound[pend - (str + k)] = '\0';
8795 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
8796 if (bound_val == NULL)
8799 *px = value_as_long (bound_val);
8805 /* Value of variable named NAME in the current environment. If
8806 no such variable found, then if ERR_MSG is null, returns 0, and
8807 otherwise causes an error with message ERR_MSG. */
8809 static struct value *
8810 get_var_value (char *name, char *err_msg)
8812 struct ada_symbol_info *syms;
8815 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
8820 if (err_msg == NULL)
8823 error (("%s"), err_msg);
8826 return value_of_variable (syms[0].sym, syms[0].block);
8829 /* Value of integer variable named NAME in the current environment. If
8830 no such variable found, returns 0, and sets *FLAG to 0. If
8831 successful, sets *FLAG to 1. */
8834 get_int_var_value (char *name, int *flag)
8836 struct value *var_val = get_var_value (name, 0);
8848 return value_as_long (var_val);
8853 /* Return a range type whose base type is that of the range type named
8854 NAME in the current environment, and whose bounds are calculated
8855 from NAME according to the GNAT range encoding conventions.
8856 Extract discriminant values, if needed, from DVAL. If a new type
8857 must be created, allocate in OBJFILE's space. The bounds
8858 information, in general, is encoded in NAME, the base type given in
8859 the named range type. */
8861 static struct type *
8862 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
8864 struct type *raw_type = ada_find_any_type (name);
8865 struct type *base_type;
8868 if (raw_type == NULL)
8869 base_type = builtin_type_int;
8870 else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
8871 base_type = TYPE_TARGET_TYPE (raw_type);
8873 base_type = raw_type;
8875 subtype_info = strstr (name, "___XD");
8876 if (subtype_info == NULL)
8880 static char *name_buf = NULL;
8881 static size_t name_len = 0;
8882 int prefix_len = subtype_info - name;
8888 GROW_VECT (name_buf, name_len, prefix_len + 5);
8889 strncpy (name_buf, name, prefix_len);
8890 name_buf[prefix_len] = '\0';
8893 bounds_str = strchr (subtype_info, '_');
8896 if (*subtype_info == 'L')
8898 if (!ada_scan_number (bounds_str, n, &L, &n)
8899 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
8901 if (bounds_str[n] == '_')
8903 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
8910 strcpy (name_buf + prefix_len, "___L");
8911 L = get_int_var_value (name_buf, &ok);
8914 lim_warning (_("Unknown lower bound, using 1."));
8919 if (*subtype_info == 'U')
8921 if (!ada_scan_number (bounds_str, n, &U, &n)
8922 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
8928 strcpy (name_buf + prefix_len, "___U");
8929 U = get_int_var_value (name_buf, &ok);
8932 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
8937 if (objfile == NULL)
8938 objfile = TYPE_OBJFILE (base_type);
8939 type = create_range_type (alloc_type (objfile), base_type, L, U);
8940 TYPE_NAME (type) = name;
8945 /* True iff NAME is the name of a range type. */
8948 ada_is_range_type_name (const char *name)
8950 return (name != NULL && strstr (name, "___XD"));
8956 /* True iff TYPE is an Ada modular type. */
8959 ada_is_modular_type (struct type *type)
8961 struct type *subranged_type = base_type (type);
8963 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
8964 && TYPE_CODE (subranged_type) != TYPE_CODE_ENUM
8965 && TYPE_UNSIGNED (subranged_type));
8968 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
8971 ada_modulus (struct type * type)
8973 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
8977 /* Information about operators given special treatment in functions
8979 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
8981 #define ADA_OPERATORS \
8982 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
8983 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
8984 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
8985 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
8986 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
8987 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
8988 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
8989 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
8990 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
8991 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
8992 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
8993 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
8994 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
8995 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
8996 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
8997 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
8998 OP_DEFN (OP_OTHERS, 1, 1, 0) \
8999 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
9000 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
9003 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
9005 switch (exp->elts[pc - 1].opcode)
9008 operator_length_standard (exp, pc, oplenp, argsp);
9011 #define OP_DEFN(op, len, args, binop) \
9012 case op: *oplenp = len; *argsp = args; break;
9018 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
9023 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
9029 ada_op_name (enum exp_opcode opcode)
9034 return op_name_standard (opcode);
9036 #define OP_DEFN(op, len, args, binop) case op: return #op;
9041 return "OP_AGGREGATE";
9043 return "OP_CHOICES";
9049 /* As for operator_length, but assumes PC is pointing at the first
9050 element of the operator, and gives meaningful results only for the
9051 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
9054 ada_forward_operator_length (struct expression *exp, int pc,
9055 int *oplenp, int *argsp)
9057 switch (exp->elts[pc].opcode)
9060 *oplenp = *argsp = 0;
9063 #define OP_DEFN(op, len, args, binop) \
9064 case op: *oplenp = len; *argsp = args; break;
9070 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
9075 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
9081 int len = longest_to_int (exp->elts[pc + 1].longconst);
9082 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
9090 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
9092 enum exp_opcode op = exp->elts[elt].opcode;
9097 ada_forward_operator_length (exp, elt, &oplen, &nargs);
9101 /* Ada attributes ('Foo). */
9108 case OP_ATR_MODULUS:
9117 /* XXX: gdb_sprint_host_address, type_sprint */
9118 fprintf_filtered (stream, _("Type @"));
9119 gdb_print_host_address (exp->elts[pc + 1].type, stream);
9120 fprintf_filtered (stream, " (");
9121 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
9122 fprintf_filtered (stream, ")");
9124 case BINOP_IN_BOUNDS:
9125 fprintf_filtered (stream, " (%d)",
9126 longest_to_int (exp->elts[pc + 2].longconst));
9128 case TERNOP_IN_RANGE:
9133 case OP_DISCRETE_RANGE:
9141 char *name = &exp->elts[elt + 2].string;
9142 int len = longest_to_int (exp->elts[elt + 1].longconst);
9143 fprintf_filtered (stream, "Text: `%.*s'", len, name);
9148 return dump_subexp_body_standard (exp, stream, elt);
9152 for (i = 0; i < nargs; i += 1)
9153 elt = dump_subexp (exp, stream, elt);
9158 /* The Ada extension of print_subexp (q.v.). */
9161 ada_print_subexp (struct expression *exp, int *pos,
9162 struct ui_file *stream, enum precedence prec)
9164 int oplen, nargs, i;
9166 enum exp_opcode op = exp->elts[pc].opcode;
9168 ada_forward_operator_length (exp, pc, &oplen, &nargs);
9175 print_subexp_standard (exp, pos, stream, prec);
9179 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
9182 case BINOP_IN_BOUNDS:
9183 /* XXX: sprint_subexp */
9184 print_subexp (exp, pos, stream, PREC_SUFFIX);
9185 fputs_filtered (" in ", stream);
9186 print_subexp (exp, pos, stream, PREC_SUFFIX);
9187 fputs_filtered ("'range", stream);
9188 if (exp->elts[pc + 1].longconst > 1)
9189 fprintf_filtered (stream, "(%ld)",
9190 (long) exp->elts[pc + 1].longconst);
9193 case TERNOP_IN_RANGE:
9194 if (prec >= PREC_EQUAL)
9195 fputs_filtered ("(", stream);
9196 /* XXX: sprint_subexp */
9197 print_subexp (exp, pos, stream, PREC_SUFFIX);
9198 fputs_filtered (" in ", stream);
9199 print_subexp (exp, pos, stream, PREC_EQUAL);
9200 fputs_filtered (" .. ", stream);
9201 print_subexp (exp, pos, stream, PREC_EQUAL);
9202 if (prec >= PREC_EQUAL)
9203 fputs_filtered (")", stream);
9212 case OP_ATR_MODULUS:
9217 if (exp->elts[*pos].opcode == OP_TYPE)
9219 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
9220 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
9224 print_subexp (exp, pos, stream, PREC_SUFFIX);
9225 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
9229 for (tem = 1; tem < nargs; tem += 1)
9231 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
9232 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
9234 fputs_filtered (")", stream);
9239 type_print (exp->elts[pc + 1].type, "", stream, 0);
9240 fputs_filtered ("'(", stream);
9241 print_subexp (exp, pos, stream, PREC_PREFIX);
9242 fputs_filtered (")", stream);
9246 /* XXX: sprint_subexp */
9247 print_subexp (exp, pos, stream, PREC_SUFFIX);
9248 fputs_filtered (" in ", stream);
9249 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
9252 case OP_DISCRETE_RANGE:
9253 print_subexp (exp, pos, stream, PREC_SUFFIX);
9254 fputs_filtered ("..", stream);
9255 print_subexp (exp, pos, stream, PREC_SUFFIX);
9259 fputs_filtered ("others => ", stream);
9260 print_subexp (exp, pos, stream, PREC_SUFFIX);
9264 for (i = 0; i < nargs-1; i += 1)
9267 fputs_filtered ("|", stream);
9268 print_subexp (exp, pos, stream, PREC_SUFFIX);
9270 fputs_filtered (" => ", stream);
9271 print_subexp (exp, pos, stream, PREC_SUFFIX);
9275 print_subexp (exp, pos, stream, PREC_SUFFIX);
9279 fputs_filtered ("(", stream);
9280 for (i = 0; i < nargs; i += 1)
9283 fputs_filtered (", ", stream);
9284 print_subexp (exp, pos, stream, PREC_SUFFIX);
9286 fputs_filtered (")", stream);
9291 /* Table mapping opcodes into strings for printing operators
9292 and precedences of the operators. */
9294 static const struct op_print ada_op_print_tab[] = {
9295 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
9296 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
9297 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
9298 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
9299 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
9300 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
9301 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
9302 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
9303 {"<=", BINOP_LEQ, PREC_ORDER, 0},
9304 {">=", BINOP_GEQ, PREC_ORDER, 0},
9305 {">", BINOP_GTR, PREC_ORDER, 0},
9306 {"<", BINOP_LESS, PREC_ORDER, 0},
9307 {">>", BINOP_RSH, PREC_SHIFT, 0},
9308 {"<<", BINOP_LSH, PREC_SHIFT, 0},
9309 {"+", BINOP_ADD, PREC_ADD, 0},
9310 {"-", BINOP_SUB, PREC_ADD, 0},
9311 {"&", BINOP_CONCAT, PREC_ADD, 0},
9312 {"*", BINOP_MUL, PREC_MUL, 0},
9313 {"/", BINOP_DIV, PREC_MUL, 0},
9314 {"rem", BINOP_REM, PREC_MUL, 0},
9315 {"mod", BINOP_MOD, PREC_MUL, 0},
9316 {"**", BINOP_EXP, PREC_REPEAT, 0},
9317 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
9318 {"-", UNOP_NEG, PREC_PREFIX, 0},
9319 {"+", UNOP_PLUS, PREC_PREFIX, 0},
9320 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
9321 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
9322 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
9323 {".all", UNOP_IND, PREC_SUFFIX, 1},
9324 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
9325 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
9329 /* Fundamental Ada Types */
9331 /* Create a fundamental Ada type using default reasonable for the current
9334 Some object/debugging file formats (DWARF version 1, COFF, etc) do not
9335 define fundamental types such as "int" or "double". Others (stabs or
9336 DWARF version 2, etc) do define fundamental types. For the formats which
9337 don't provide fundamental types, gdb can create such types using this
9340 FIXME: Some compilers distinguish explicitly signed integral types
9341 (signed short, signed int, signed long) from "regular" integral types
9342 (short, int, long) in the debugging information. There is some dis-
9343 agreement as to how useful this feature is. In particular, gcc does
9344 not support this. Also, only some debugging formats allow the
9345 distinction to be passed on to a debugger. For now, we always just
9346 use "short", "int", or "long" as the type name, for both the implicit
9347 and explicitly signed types. This also makes life easier for the
9348 gdb test suite since we don't have to account for the differences
9349 in output depending upon what the compiler and debugging format
9350 support. We will probably have to re-examine the issue when gdb
9351 starts taking it's fundamental type information directly from the
9354 static struct type *
9355 ada_create_fundamental_type (struct objfile *objfile, int typeid)
9357 struct type *type = NULL;
9362 /* FIXME: For now, if we are asked to produce a type not in this
9363 language, create the equivalent of a C integer type with the
9364 name "<?type?>". When all the dust settles from the type
9365 reconstruction work, this should probably become an error. */
9366 type = init_type (TYPE_CODE_INT,
9367 TARGET_INT_BIT / TARGET_CHAR_BIT,
9368 0, "<?type?>", objfile);
9369 warning (_("internal error: no Ada fundamental type %d"), typeid);
9372 type = init_type (TYPE_CODE_VOID,
9373 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
9374 0, "void", objfile);
9377 type = init_type (TYPE_CODE_INT,
9378 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
9379 0, "character", objfile);
9381 case FT_SIGNED_CHAR:
9382 type = init_type (TYPE_CODE_INT,
9383 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
9384 0, "signed char", objfile);
9386 case FT_UNSIGNED_CHAR:
9387 type = init_type (TYPE_CODE_INT,
9388 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
9389 TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
9392 type = init_type (TYPE_CODE_INT,
9393 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
9394 0, "short_integer", objfile);
9396 case FT_SIGNED_SHORT:
9397 type = init_type (TYPE_CODE_INT,
9398 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
9399 0, "short_integer", objfile);
9401 case FT_UNSIGNED_SHORT:
9402 type = init_type (TYPE_CODE_INT,
9403 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
9404 TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
9407 type = init_type (TYPE_CODE_INT,
9408 TARGET_INT_BIT / TARGET_CHAR_BIT,
9409 0, "integer", objfile);
9411 case FT_SIGNED_INTEGER:
9412 type = init_type (TYPE_CODE_INT, TARGET_INT_BIT /
9414 0, "integer", objfile); /* FIXME -fnf */
9416 case FT_UNSIGNED_INTEGER:
9417 type = init_type (TYPE_CODE_INT,
9418 TARGET_INT_BIT / TARGET_CHAR_BIT,
9419 TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
9422 type = init_type (TYPE_CODE_INT,
9423 TARGET_LONG_BIT / TARGET_CHAR_BIT,
9424 0, "long_integer", objfile);
9426 case FT_SIGNED_LONG:
9427 type = init_type (TYPE_CODE_INT,
9428 TARGET_LONG_BIT / TARGET_CHAR_BIT,
9429 0, "long_integer", objfile);
9431 case FT_UNSIGNED_LONG:
9432 type = init_type (TYPE_CODE_INT,
9433 TARGET_LONG_BIT / TARGET_CHAR_BIT,
9434 TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
9437 type = init_type (TYPE_CODE_INT,
9438 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
9439 0, "long_long_integer", objfile);
9441 case FT_SIGNED_LONG_LONG:
9442 type = init_type (TYPE_CODE_INT,
9443 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
9444 0, "long_long_integer", objfile);
9446 case FT_UNSIGNED_LONG_LONG:
9447 type = init_type (TYPE_CODE_INT,
9448 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
9449 TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
9452 type = init_type (TYPE_CODE_FLT,
9453 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
9454 0, "float", objfile);
9456 case FT_DBL_PREC_FLOAT:
9457 type = init_type (TYPE_CODE_FLT,
9458 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
9459 0, "long_float", objfile);
9461 case FT_EXT_PREC_FLOAT:
9462 type = init_type (TYPE_CODE_FLT,
9463 TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
9464 0, "long_long_float", objfile);
9470 enum ada_primitive_types {
9471 ada_primitive_type_int,
9472 ada_primitive_type_long,
9473 ada_primitive_type_short,
9474 ada_primitive_type_char,
9475 ada_primitive_type_float,
9476 ada_primitive_type_double,
9477 ada_primitive_type_void,
9478 ada_primitive_type_long_long,
9479 ada_primitive_type_long_double,
9480 ada_primitive_type_natural,
9481 ada_primitive_type_positive,
9482 ada_primitive_type_system_address,
9483 nr_ada_primitive_types
9487 ada_language_arch_info (struct gdbarch *current_gdbarch,
9488 struct language_arch_info *lai)
9490 const struct builtin_type *builtin = builtin_type (current_gdbarch);
9491 lai->primitive_type_vector
9492 = GDBARCH_OBSTACK_CALLOC (current_gdbarch, nr_ada_primitive_types + 1,
9494 lai->primitive_type_vector [ada_primitive_type_int] =
9495 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
9496 0, "integer", (struct objfile *) NULL);
9497 lai->primitive_type_vector [ada_primitive_type_long] =
9498 init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
9499 0, "long_integer", (struct objfile *) NULL);
9500 lai->primitive_type_vector [ada_primitive_type_short] =
9501 init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
9502 0, "short_integer", (struct objfile *) NULL);
9503 lai->string_char_type =
9504 lai->primitive_type_vector [ada_primitive_type_char] =
9505 init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
9506 0, "character", (struct objfile *) NULL);
9507 lai->primitive_type_vector [ada_primitive_type_float] =
9508 init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
9509 0, "float", (struct objfile *) NULL);
9510 lai->primitive_type_vector [ada_primitive_type_double] =
9511 init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
9512 0, "long_float", (struct objfile *) NULL);
9513 lai->primitive_type_vector [ada_primitive_type_long_long] =
9514 init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
9515 0, "long_long_integer", (struct objfile *) NULL);
9516 lai->primitive_type_vector [ada_primitive_type_long_double] =
9517 init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
9518 0, "long_long_float", (struct objfile *) NULL);
9519 lai->primitive_type_vector [ada_primitive_type_natural] =
9520 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
9521 0, "natural", (struct objfile *) NULL);
9522 lai->primitive_type_vector [ada_primitive_type_positive] =
9523 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
9524 0, "positive", (struct objfile *) NULL);
9525 lai->primitive_type_vector [ada_primitive_type_void] = builtin->builtin_void;
9527 lai->primitive_type_vector [ada_primitive_type_system_address] =
9528 lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
9529 (struct objfile *) NULL));
9530 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
9531 = "system__address";
9534 /* Language vector */
9536 /* Not really used, but needed in the ada_language_defn. */
9539 emit_char (int c, struct ui_file *stream, int quoter)
9541 ada_emit_char (c, stream, quoter, 1);
9547 warnings_issued = 0;
9548 return ada_parse ();
9551 static const struct exp_descriptor ada_exp_descriptor = {
9553 ada_operator_length,
9555 ada_dump_subexp_body,
9559 const struct language_defn ada_language_defn = {
9560 "ada", /* Language name */
9565 case_sensitive_on, /* Yes, Ada is case-insensitive, but
9566 that's not quite what this means. */
9568 &ada_exp_descriptor,
9572 ada_printchar, /* Print a character constant */
9573 ada_printstr, /* Function to print string constant */
9574 emit_char, /* Function to print single char (not used) */
9575 ada_create_fundamental_type, /* Create fundamental type in this language */
9576 ada_print_type, /* Print a type using appropriate syntax */
9577 ada_val_print, /* Print a value using appropriate syntax */
9578 ada_value_print, /* Print a top-level value */
9579 NULL, /* Language specific skip_trampoline */
9580 NULL, /* value_of_this */
9581 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
9582 basic_lookup_transparent_type, /* lookup_transparent_type */
9583 ada_la_decode, /* Language specific symbol demangler */
9584 NULL, /* Language specific class_name_from_physname */
9585 ada_op_print_tab, /* expression operators for printing */
9586 0, /* c-style arrays */
9587 1, /* String lower bound */
9589 ada_get_gdb_completer_word_break_characters,
9590 ada_language_arch_info,
9591 ada_print_array_index,
9596 _initialize_ada_language (void)
9598 add_language (&ada_language_defn);
9600 varsize_limit = 65536;
9602 obstack_init (&symbol_list_obstack);
9604 decoded_names_store = htab_create_alloc
9605 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
9606 NULL, xcalloc, xfree);