1 /* Ada language support routines for GDB, the GNU debugger. Copyright
2 1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004
3 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
22 #include "gdb_string.h"
30 #include "expression.h"
31 #include "parser-defs.h"
37 #include "breakpoint.h"
43 #include "dictionary.h"
45 struct cleanup *unresolved_names;
47 void extract_string (CORE_ADDR addr, char *buf);
49 static struct type *ada_create_fundamental_type (struct objfile *, int);
51 static void modify_general_field (char *, LONGEST, int, int);
53 static struct type *desc_base_type (struct type *);
55 static struct type *desc_bounds_type (struct type *);
57 static struct value *desc_bounds (struct value *);
59 static int fat_pntr_bounds_bitpos (struct type *);
61 static int fat_pntr_bounds_bitsize (struct type *);
63 static struct type *desc_data_type (struct type *);
65 static struct value *desc_data (struct value *);
67 static int fat_pntr_data_bitpos (struct type *);
69 static int fat_pntr_data_bitsize (struct type *);
71 static struct value *desc_one_bound (struct value *, int, int);
73 static int desc_bound_bitpos (struct type *, int, int);
75 static int desc_bound_bitsize (struct type *, int, int);
77 static struct type *desc_index_type (struct type *, int);
79 static int desc_arity (struct type *);
81 static int ada_type_match (struct type *, struct type *, int);
83 static int ada_args_match (struct symbol *, struct value **, int);
85 static struct value *place_on_stack (struct value *, CORE_ADDR *);
87 static struct value *convert_actual (struct value *, struct type *,
90 static struct value *make_array_descriptor (struct type *, struct value *,
93 static void ada_add_block_symbols (struct block *, const char *,
94 domain_enum, struct objfile *, int);
96 static void fill_in_ada_prototype (struct symbol *);
98 static int is_nonfunction (struct symbol **, int);
100 static void add_defn_to_vec (struct symbol *, struct block *);
102 static struct partial_symbol *ada_lookup_partial_symbol (struct partial_symtab
103 *, const char *, int,
106 static struct symtab *symtab_for_sym (struct symbol *);
108 static struct value *ada_resolve_subexp (struct expression **, int *, int,
111 static void replace_operator_with_call (struct expression **, int, int, int,
112 struct symbol *, struct block *);
114 static int possible_user_operator_p (enum exp_opcode, struct value **);
116 static const char *ada_op_name (enum exp_opcode);
118 static int numeric_type_p (struct type *);
120 static int integer_type_p (struct type *);
122 static int scalar_type_p (struct type *);
124 static int discrete_type_p (struct type *);
126 static char *extended_canonical_line_spec (struct symtab_and_line,
129 static struct value *evaluate_subexp (struct type *, struct expression *,
132 static struct value *evaluate_subexp_type (struct expression *, int *);
134 static struct type *ada_create_fundamental_type (struct objfile *, int);
136 static int is_dynamic_field (struct type *, int);
138 static struct type *to_fixed_variant_branch_type (struct type *, char *,
139 CORE_ADDR, struct value *);
141 static struct type *to_fixed_range_type (char *, struct value *,
144 static struct type *to_static_fixed_type (struct type *);
146 static struct value *unwrap_value (struct value *);
148 static struct type *packed_array_type (struct type *, long *);
150 static struct type *decode_packed_array_type (struct type *);
152 static struct value *decode_packed_array (struct value *);
154 static struct value *value_subscript_packed (struct value *, int,
157 static struct value *coerce_unspec_val_to_type (struct value *, long,
160 static struct value *get_var_value (char *, char *);
162 static int lesseq_defined_than (struct symbol *, struct symbol *);
164 static int equiv_types (struct type *, struct type *);
166 static int is_name_suffix (const char *);
168 static int wild_match (const char *, int, const char *);
170 static struct symtabs_and_lines find_sal_from_funcs_and_line (const char *,
175 static int find_line_in_linetable (struct linetable *, int, struct symbol **,
178 static int find_next_line_in_linetable (struct linetable *, int, int, int);
180 static struct symtabs_and_lines all_sals_for_line (const char *, int,
183 static void read_all_symtabs (const char *);
185 static int is_plausible_func_for_line (struct symbol *, int);
187 static struct value *ada_coerce_ref (struct value *);
189 static struct value *value_pos_atr (struct value *);
191 static struct value *value_val_atr (struct type *, struct value *);
193 static struct symbol *standard_lookup (const char *, domain_enum);
195 extern void markTimeStart (int index);
196 extern void markTimeStop (int index);
200 /* Maximum-sized dynamic type. */
201 static unsigned int varsize_limit;
203 static const char *ada_completer_word_break_characters =
204 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
206 /* The name of the symbol to use to get the name of the main subprogram */
207 #define ADA_MAIN_PROGRAM_SYMBOL_NAME "__gnat_ada_main_program_name"
213 * read the string located at ADDR from the inferior and store the
217 extract_string (CORE_ADDR addr, char *buf)
221 /* Loop, reading one byte at a time, until we reach the '\000'
222 end-of-string marker */
225 target_read_memory (addr + char_index * sizeof (char),
226 buf + char_index * sizeof (char), sizeof (char));
229 while (buf[char_index - 1] != '\000');
232 /* Assuming *OLD_VECT points to an array of *SIZE objects of size
233 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
234 updating *OLD_VECT and *SIZE as necessary. */
237 grow_vect (void **old_vect, size_t * size, size_t min_size, int element_size)
239 if (*size < min_size)
242 if (*size < min_size)
244 *old_vect = xrealloc (*old_vect, *size * element_size);
248 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
249 suffix of FIELD_NAME beginning "___" */
252 field_name_match (const char *field_name, const char *target)
254 int len = strlen (target);
256 DEPRECATED_STREQN (field_name, target, len)
257 && (field_name[len] == '\0'
258 || (DEPRECATED_STREQN (field_name + len, "___", 3)
259 && !DEPRECATED_STREQ (field_name + strlen (field_name) - 6, "___XVN")));
263 /* The length of the prefix of NAME prior to any "___" suffix. */
266 ada_name_prefix_len (const char *name)
272 const char *p = strstr (name, "___");
274 return strlen (name);
280 /* SUFFIX is a suffix of STR. False if STR is null. */
282 is_suffix (const char *str, const char *suffix)
288 len2 = strlen (suffix);
289 return (len1 >= len2 && DEPRECATED_STREQ (str + len1 - len2, suffix));
292 /* Create a value of type TYPE whose contents come from VALADDR, if it
293 * is non-null, and whose memory address (in the inferior) is
296 value_from_contents_and_address (struct type *type, char *valaddr,
299 struct value *v = allocate_value (type);
303 memcpy (VALUE_CONTENTS_RAW (v), valaddr, TYPE_LENGTH (type));
304 VALUE_ADDRESS (v) = address;
306 VALUE_LVAL (v) = lval_memory;
310 /* The contents of value VAL, beginning at offset OFFSET, treated as a
311 value of type TYPE. The result is an lval in memory if VAL is. */
313 static struct value *
314 coerce_unspec_val_to_type (struct value *val, long offset, struct type *type)
316 CHECK_TYPEDEF (type);
317 if (VALUE_LVAL (val) == lval_memory)
318 return value_at_lazy (type,
319 VALUE_ADDRESS (val) + VALUE_OFFSET (val) + offset,
323 struct value *result = allocate_value (type);
324 VALUE_LVAL (result) = not_lval;
325 if (VALUE_ADDRESS (val) == 0)
326 memcpy (VALUE_CONTENTS_RAW (result), VALUE_CONTENTS (val) + offset,
327 TYPE_LENGTH (type) > TYPE_LENGTH (VALUE_TYPE (val))
328 ? TYPE_LENGTH (VALUE_TYPE (val)) : TYPE_LENGTH (type));
331 VALUE_ADDRESS (result) =
332 VALUE_ADDRESS (val) + VALUE_OFFSET (val) + offset;
333 VALUE_LAZY (result) = 1;
340 cond_offset_host (char *valaddr, long offset)
345 return valaddr + offset;
349 cond_offset_target (CORE_ADDR address, long offset)
354 return address + offset;
357 /* Perform execute_command on the result of concatenating all
358 arguments up to NULL. */
360 do_command (const char *arg, ...)
371 for (; s != NULL; s = va_arg (ap, const char *))
375 cmd1 = alloca (len + 1);
381 execute_command (cmd, 0);
385 /* Language Selection */
387 /* If the main program is in Ada, return language_ada, otherwise return LANG
388 (the main program is in Ada iif the adainit symbol is found).
390 MAIN_PST is not used. */
393 ada_update_initial_language (enum language lang,
394 struct partial_symtab *main_pst)
396 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
397 (struct objfile *) NULL) != NULL)
398 /* return language_ada; */
399 /* FIXME: language_ada should be defined in defs.h */
400 return language_unknown;
408 /* Table of Ada operators and their GNAT-mangled names. Last entry is pair
411 const struct ada_opname_map ada_opname_table[] = {
412 {"Oadd", "\"+\"", BINOP_ADD},
413 {"Osubtract", "\"-\"", BINOP_SUB},
414 {"Omultiply", "\"*\"", BINOP_MUL},
415 {"Odivide", "\"/\"", BINOP_DIV},
416 {"Omod", "\"mod\"", BINOP_MOD},
417 {"Orem", "\"rem\"", BINOP_REM},
418 {"Oexpon", "\"**\"", BINOP_EXP},
419 {"Olt", "\"<\"", BINOP_LESS},
420 {"Ole", "\"<=\"", BINOP_LEQ},
421 {"Ogt", "\">\"", BINOP_GTR},
422 {"Oge", "\">=\"", BINOP_GEQ},
423 {"Oeq", "\"=\"", BINOP_EQUAL},
424 {"One", "\"/=\"", BINOP_NOTEQUAL},
425 {"Oand", "\"and\"", BINOP_BITWISE_AND},
426 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
427 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
428 {"Oconcat", "\"&\"", BINOP_CONCAT},
429 {"Oabs", "\"abs\"", UNOP_ABS},
430 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
431 {"Oadd", "\"+\"", UNOP_PLUS},
432 {"Osubtract", "\"-\"", UNOP_NEG},
436 /* True if STR should be suppressed in info listings. */
438 is_suppressed_name (const char *str)
440 if (DEPRECATED_STREQN (str, "_ada_", 5))
442 if (str[0] == '_' || str[0] == '\000')
447 const char *suffix = strstr (str, "___");
448 if (suffix != NULL && suffix[3] != 'X')
451 suffix = str + strlen (str);
452 for (p = suffix - 1; p != str; p -= 1)
456 if (p[0] == 'X' && p[-1] != '_')
460 for (i = 0; ada_opname_table[i].mangled != NULL; i += 1)
461 if (DEPRECATED_STREQN (ada_opname_table[i].mangled, p,
462 strlen (ada_opname_table[i].mangled)))
471 /* The "mangled" form of DEMANGLED, according to GNAT conventions.
472 * The result is valid until the next call to ada_mangle. */
474 ada_mangle (const char *demangled)
476 static char *mangling_buffer = NULL;
477 static size_t mangling_buffer_size = 0;
481 if (demangled == NULL)
484 GROW_VECT (mangling_buffer, mangling_buffer_size,
485 2 * strlen (demangled) + 10);
488 for (p = demangled; *p != '\0'; p += 1)
492 mangling_buffer[k] = mangling_buffer[k + 1] = '_';
497 const struct ada_opname_map *mapping;
499 for (mapping = ada_opname_table;
500 mapping->mangled != NULL &&
501 !DEPRECATED_STREQN (mapping->demangled, p, strlen (mapping->demangled));
504 if (mapping->mangled == NULL)
505 error ("invalid Ada operator name: %s", p);
506 strcpy (mangling_buffer + k, mapping->mangled);
507 k += strlen (mapping->mangled);
512 mangling_buffer[k] = *p;
517 mangling_buffer[k] = '\0';
518 return mangling_buffer;
521 /* Return NAME folded to lower case, or, if surrounded by single
522 * quotes, unfolded, but with the quotes stripped away. Result good
525 ada_fold_name (const char *name)
527 static char *fold_buffer = NULL;
528 static size_t fold_buffer_size = 0;
530 int len = strlen (name);
531 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
535 strncpy (fold_buffer, name + 1, len - 2);
536 fold_buffer[len - 2] = '\000';
541 for (i = 0; i <= len; i += 1)
542 fold_buffer[i] = tolower (name[i]);
549 1. Discard final __{DIGIT}+ or ${DIGIT}+
550 2. Convert other instances of embedded "__" to `.'.
551 3. Discard leading _ada_.
552 4. Convert operator names to the appropriate quoted symbols.
553 5. Remove everything after first ___ if it is followed by
555 6. Replace TK__ with __, and a trailing B or TKB with nothing.
556 7. Put symbols that should be suppressed in <...> brackets.
557 8. Remove trailing X[bn]* suffix (indicating names in package bodies).
558 The resulting string is valid until the next call of ada_demangle.
562 ada_demangle (const char *mangled)
569 static char *demangling_buffer = NULL;
570 static size_t demangling_buffer_size = 0;
572 if (DEPRECATED_STREQN (mangled, "_ada_", 5))
575 if (mangled[0] == '_' || mangled[0] == '<')
578 p = strstr (mangled, "___");
580 len0 = strlen (mangled);
588 if (len0 > 3 && DEPRECATED_STREQ (mangled + len0 - 3, "TKB"))
590 if (len0 > 1 && DEPRECATED_STREQ (mangled + len0 - 1, "B"))
593 /* Make demangled big enough for possible expansion by operator name. */
594 GROW_VECT (demangling_buffer, demangling_buffer_size, 2 * len0 + 1);
595 demangled = demangling_buffer;
597 if (isdigit (mangled[len0 - 1]))
599 for (i = len0 - 2; i >= 0 && isdigit (mangled[i]); i -= 1)
601 if (i > 1 && mangled[i] == '_' && mangled[i - 1] == '_')
603 else if (mangled[i] == '$')
607 for (i = 0, j = 0; i < len0 && !isalpha (mangled[i]); i += 1, j += 1)
608 demangled[j] = mangled[i];
613 if (at_start_name && mangled[i] == 'O')
616 for (k = 0; ada_opname_table[k].mangled != NULL; k += 1)
618 int op_len = strlen (ada_opname_table[k].mangled);
619 if (DEPRECATED_STREQN
620 (ada_opname_table[k].mangled + 1, mangled + i + 1,
621 op_len - 1) && !isalnum (mangled[i + op_len]))
623 strcpy (demangled + j, ada_opname_table[k].demangled);
626 j += strlen (ada_opname_table[k].demangled);
630 if (ada_opname_table[k].mangled != NULL)
635 if (i < len0 - 4 && DEPRECATED_STREQN (mangled + i, "TK__", 4))
637 if (mangled[i] == 'X' && i != 0 && isalnum (mangled[i - 1]))
641 while (i < len0 && (mangled[i] == 'b' || mangled[i] == 'n'));
645 else if (i < len0 - 2 && mangled[i] == '_' && mangled[i + 1] == '_')
654 demangled[j] = mangled[i];
659 demangled[j] = '\000';
661 for (i = 0; demangled[i] != '\0'; i += 1)
662 if (isupper (demangled[i]) || demangled[i] == ' ')
668 GROW_VECT (demangling_buffer, demangling_buffer_size, strlen (mangled) + 3);
669 demangled = demangling_buffer;
670 if (mangled[0] == '<')
671 strcpy (demangled, mangled);
673 sprintf (demangled, "<%s>", mangled);
678 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
679 * suffixes that encode debugging information or leading _ada_ on
680 * SYM_NAME (see is_name_suffix commentary for the debugging
681 * information that is ignored). If WILD, then NAME need only match a
682 * suffix of SYM_NAME minus the same suffixes. Also returns 0 if
683 * either argument is NULL. */
686 ada_match_name (const char *sym_name, const char *name, int wild)
688 if (sym_name == NULL || name == NULL)
691 return wild_match (name, strlen (name), sym_name);
694 int len_name = strlen (name);
695 return (DEPRECATED_STREQN (sym_name, name, len_name)
696 && is_name_suffix (sym_name + len_name))
697 || (DEPRECATED_STREQN (sym_name, "_ada_", 5)
698 && DEPRECATED_STREQN (sym_name + 5, name, len_name)
699 && is_name_suffix (sym_name + len_name + 5));
703 /* True (non-zero) iff in Ada mode, the symbol SYM should be
704 suppressed in info listings. */
707 ada_suppress_symbol_printing (struct symbol *sym)
709 if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN)
712 return is_suppressed_name (DEPRECATED_SYMBOL_NAME (sym));
718 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of
719 array descriptors. */
721 static char *bound_name[] = {
722 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
723 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
726 /* Maximum number of array dimensions we are prepared to handle. */
728 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char*)))
730 /* Like modify_field, but allows bitpos > wordlength. */
733 modify_general_field (char *addr, LONGEST fieldval, int bitpos, int bitsize)
735 modify_field (addr + sizeof (LONGEST) * bitpos / (8 * sizeof (LONGEST)),
736 fieldval, bitpos % (8 * sizeof (LONGEST)), bitsize);
740 /* The desc_* routines return primitive portions of array descriptors
743 /* The descriptor or array type, if any, indicated by TYPE; removes
744 level of indirection, if needed. */
746 desc_base_type (struct type *type)
750 CHECK_TYPEDEF (type);
751 if (type != NULL && TYPE_CODE (type) == TYPE_CODE_PTR)
752 return check_typedef (TYPE_TARGET_TYPE (type));
757 /* True iff TYPE indicates a "thin" array pointer type. */
759 is_thin_pntr (struct type *type)
762 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
763 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
766 /* The descriptor type for thin pointer type TYPE. */
768 thin_descriptor_type (struct type *type)
770 struct type *base_type = desc_base_type (type);
771 if (base_type == NULL)
773 if (is_suffix (ada_type_name (base_type), "___XVE"))
777 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
778 if (alt_type == NULL)
785 /* A pointer to the array data for thin-pointer value VAL. */
786 static struct value *
787 thin_data_pntr (struct value *val)
789 struct type *type = VALUE_TYPE (val);
790 if (TYPE_CODE (type) == TYPE_CODE_PTR)
791 return value_cast (desc_data_type (thin_descriptor_type (type)),
794 return value_from_longest (desc_data_type (thin_descriptor_type (type)),
795 VALUE_ADDRESS (val) + VALUE_OFFSET (val));
798 /* True iff TYPE indicates a "thick" array pointer type. */
800 is_thick_pntr (struct type *type)
802 type = desc_base_type (type);
803 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
804 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
807 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
808 pointer to one, the type of its bounds data; otherwise, NULL. */
810 desc_bounds_type (struct type *type)
814 type = desc_base_type (type);
818 else if (is_thin_pntr (type))
820 type = thin_descriptor_type (type);
823 r = lookup_struct_elt_type (type, "BOUNDS", 1);
825 return check_typedef (r);
827 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
829 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
831 return check_typedef (TYPE_TARGET_TYPE (check_typedef (r)));
836 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
837 one, a pointer to its bounds data. Otherwise NULL. */
838 static struct value *
839 desc_bounds (struct value *arr)
841 struct type *type = check_typedef (VALUE_TYPE (arr));
842 if (is_thin_pntr (type))
844 struct type *bounds_type =
845 desc_bounds_type (thin_descriptor_type (type));
848 if (desc_bounds_type == NULL)
849 error ("Bad GNAT array descriptor");
851 /* NOTE: The following calculation is not really kosher, but
852 since desc_type is an XVE-encoded type (and shouldn't be),
853 the correct calculation is a real pain. FIXME (and fix GCC). */
854 if (TYPE_CODE (type) == TYPE_CODE_PTR)
855 addr = value_as_long (arr);
857 addr = VALUE_ADDRESS (arr) + VALUE_OFFSET (arr);
860 value_from_longest (lookup_pointer_type (bounds_type),
861 addr - TYPE_LENGTH (bounds_type));
864 else if (is_thick_pntr (type))
865 return value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
866 "Bad GNAT array descriptor");
871 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
872 position of the field containing the address of the bounds data. */
874 fat_pntr_bounds_bitpos (struct type *type)
876 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
879 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
880 size of the field containing the address of the bounds data. */
882 fat_pntr_bounds_bitsize (struct type *type)
884 type = desc_base_type (type);
886 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
887 return TYPE_FIELD_BITSIZE (type, 1);
889 return 8 * TYPE_LENGTH (check_typedef (TYPE_FIELD_TYPE (type, 1)));
892 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
893 pointer to one, the type of its array data (a
894 pointer-to-array-with-no-bounds type); otherwise, NULL. Use
895 ada_type_of_array to get an array type with bounds data. */
897 desc_data_type (struct type *type)
899 type = desc_base_type (type);
901 /* NOTE: The following is bogus; see comment in desc_bounds. */
902 if (is_thin_pntr (type))
903 return lookup_pointer_type
904 (desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1)));
905 else if (is_thick_pntr (type))
906 return lookup_struct_elt_type (type, "P_ARRAY", 1);
911 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
913 static struct value *
914 desc_data (struct value *arr)
916 struct type *type = VALUE_TYPE (arr);
917 if (is_thin_pntr (type))
918 return thin_data_pntr (arr);
919 else if (is_thick_pntr (type))
920 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
921 "Bad GNAT array descriptor");
927 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
928 position of the field containing the address of the data. */
930 fat_pntr_data_bitpos (struct type *type)
932 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
935 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
936 size of the field containing the address of the data. */
938 fat_pntr_data_bitsize (struct type *type)
940 type = desc_base_type (type);
942 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
943 return TYPE_FIELD_BITSIZE (type, 0);
945 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
948 /* If BOUNDS is an array-bounds structure (or pointer to one), return
949 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
950 bound, if WHICH is 1. The first bound is I=1. */
951 static struct value *
952 desc_one_bound (struct value *bounds, int i, int which)
954 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
955 "Bad GNAT array descriptor bounds");
958 /* If BOUNDS is an array-bounds structure type, return the bit position
959 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
960 bound, if WHICH is 1. The first bound is I=1. */
962 desc_bound_bitpos (struct type *type, int i, int which)
964 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
967 /* If BOUNDS is an array-bounds structure type, return the bit field size
968 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
969 bound, if WHICH is 1. The first bound is I=1. */
971 desc_bound_bitsize (struct type *type, int i, int which)
973 type = desc_base_type (type);
975 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
976 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
978 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
981 /* If TYPE is the type of an array-bounds structure, the type of its
982 Ith bound (numbering from 1). Otherwise, NULL. */
984 desc_index_type (struct type *type, int i)
986 type = desc_base_type (type);
988 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
989 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
994 /* The number of index positions in the array-bounds type TYPE. 0
997 desc_arity (struct type *type)
999 type = desc_base_type (type);
1002 return TYPE_NFIELDS (type) / 2;
1007 /* Non-zero iff type is a simple array type (or pointer to one). */
1009 ada_is_simple_array (struct type *type)
1013 CHECK_TYPEDEF (type);
1014 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1015 || (TYPE_CODE (type) == TYPE_CODE_PTR
1016 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
1019 /* Non-zero iff type belongs to a GNAT array descriptor. */
1021 ada_is_array_descriptor (struct type *type)
1023 struct type *data_type = desc_data_type (type);
1027 CHECK_TYPEDEF (type);
1030 && ((TYPE_CODE (data_type) == TYPE_CODE_PTR
1031 && TYPE_TARGET_TYPE (data_type) != NULL
1032 && TYPE_CODE (TYPE_TARGET_TYPE (data_type)) == TYPE_CODE_ARRAY)
1034 TYPE_CODE (data_type) == TYPE_CODE_ARRAY)
1035 && desc_arity (desc_bounds_type (type)) > 0;
1038 /* Non-zero iff type is a partially mal-formed GNAT array
1039 descriptor. (FIXME: This is to compensate for some problems with
1040 debugging output from GNAT. Re-examine periodically to see if it
1043 ada_is_bogus_array_descriptor (struct type *type)
1047 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1048 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1049 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1050 && !ada_is_array_descriptor (type);
1054 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1055 (fat pointer) returns the type of the array data described---specifically,
1056 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
1057 in from the descriptor; otherwise, they are left unspecified. If
1058 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1059 returns NULL. The result is simply the type of ARR if ARR is not
1062 ada_type_of_array (struct value *arr, int bounds)
1064 if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1065 return decode_packed_array_type (VALUE_TYPE (arr));
1067 if (!ada_is_array_descriptor (VALUE_TYPE (arr)))
1068 return VALUE_TYPE (arr);
1072 check_typedef (TYPE_TARGET_TYPE (desc_data_type (VALUE_TYPE (arr))));
1075 struct type *elt_type;
1077 struct value *descriptor;
1078 struct objfile *objf = TYPE_OBJFILE (VALUE_TYPE (arr));
1080 elt_type = ada_array_element_type (VALUE_TYPE (arr), -1);
1081 arity = ada_array_arity (VALUE_TYPE (arr));
1083 if (elt_type == NULL || arity == 0)
1084 return check_typedef (VALUE_TYPE (arr));
1086 descriptor = desc_bounds (arr);
1087 if (value_as_long (descriptor) == 0)
1091 struct type *range_type = alloc_type (objf);
1092 struct type *array_type = alloc_type (objf);
1093 struct value *low = desc_one_bound (descriptor, arity, 0);
1094 struct value *high = desc_one_bound (descriptor, arity, 1);
1097 create_range_type (range_type, VALUE_TYPE (low),
1098 (int) value_as_long (low),
1099 (int) value_as_long (high));
1100 elt_type = create_array_type (array_type, elt_type, range_type);
1103 return lookup_pointer_type (elt_type);
1107 /* If ARR does not represent an array, returns ARR unchanged.
1108 Otherwise, returns either a standard GDB array with bounds set
1109 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1110 GDB array. Returns NULL if ARR is a null fat pointer. */
1112 ada_coerce_to_simple_array_ptr (struct value *arr)
1114 if (ada_is_array_descriptor (VALUE_TYPE (arr)))
1116 struct type *arrType = ada_type_of_array (arr, 1);
1117 if (arrType == NULL)
1119 return value_cast (arrType, value_copy (desc_data (arr)));
1121 else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1122 return decode_packed_array (arr);
1127 /* If ARR does not represent an array, returns ARR unchanged.
1128 Otherwise, returns a standard GDB array describing ARR (which may
1129 be ARR itself if it already is in the proper form). */
1131 ada_coerce_to_simple_array (struct value *arr)
1133 if (ada_is_array_descriptor (VALUE_TYPE (arr)))
1135 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1137 error ("Bounds unavailable for null array pointer.");
1138 return value_ind (arrVal);
1140 else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1141 return decode_packed_array (arr);
1146 /* If TYPE represents a GNAT array type, return it translated to an
1147 ordinary GDB array type (possibly with BITSIZE fields indicating
1148 packing). For other types, is the identity. */
1150 ada_coerce_to_simple_array_type (struct type *type)
1152 struct value *mark = value_mark ();
1153 struct value *dummy = value_from_longest (builtin_type_long, 0);
1154 struct type *result;
1155 VALUE_TYPE (dummy) = type;
1156 result = ada_type_of_array (dummy, 0);
1157 value_free_to_mark (dummy);
1161 /* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1163 ada_is_packed_array_type (struct type *type)
1167 CHECK_TYPEDEF (type);
1169 ada_type_name (type) != NULL
1170 && strstr (ada_type_name (type), "___XP") != NULL;
1173 /* Given that TYPE is a standard GDB array type with all bounds filled
1174 in, and that the element size of its ultimate scalar constituents
1175 (that is, either its elements, or, if it is an array of arrays, its
1176 elements' elements, etc.) is *ELT_BITS, return an identical type,
1177 but with the bit sizes of its elements (and those of any
1178 constituent arrays) recorded in the BITSIZE components of its
1179 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1181 static struct type *
1182 packed_array_type (struct type *type, long *elt_bits)
1184 struct type *new_elt_type;
1185 struct type *new_type;
1186 LONGEST low_bound, high_bound;
1188 CHECK_TYPEDEF (type);
1189 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1192 new_type = alloc_type (TYPE_OBJFILE (type));
1193 new_elt_type = packed_array_type (check_typedef (TYPE_TARGET_TYPE (type)),
1195 create_array_type (new_type, new_elt_type, TYPE_FIELD_TYPE (type, 0));
1196 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
1197 TYPE_NAME (new_type) = ada_type_name (type);
1199 if (get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
1200 &low_bound, &high_bound) < 0)
1201 low_bound = high_bound = 0;
1202 if (high_bound < low_bound)
1203 *elt_bits = TYPE_LENGTH (new_type) = 0;
1206 *elt_bits *= (high_bound - low_bound + 1);
1207 TYPE_LENGTH (new_type) =
1208 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1211 /* TYPE_FLAGS (new_type) |= TYPE_FLAG_FIXED_INSTANCE; */
1212 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
1216 /* The array type encoded by TYPE, where ada_is_packed_array_type (TYPE).
1218 static struct type *
1219 decode_packed_array_type (struct type *type)
1221 struct symbol **syms;
1222 struct block **blocks;
1223 const char *raw_name = ada_type_name (check_typedef (type));
1224 char *name = (char *) alloca (strlen (raw_name) + 1);
1225 char *tail = strstr (raw_name, "___XP");
1226 struct type *shadow_type;
1230 memcpy (name, raw_name, tail - raw_name);
1231 name[tail - raw_name] = '\000';
1233 /* NOTE: Use ada_lookup_symbol_list because of bug in some versions
1234 * of gcc (Solaris, e.g.). FIXME when compiler is fixed. */
1235 n = ada_lookup_symbol_list (name, get_selected_block (NULL),
1236 VAR_DOMAIN, &syms, &blocks);
1237 for (i = 0; i < n; i += 1)
1238 if (syms[i] != NULL && SYMBOL_CLASS (syms[i]) == LOC_TYPEDEF
1239 && DEPRECATED_STREQ (name, ada_type_name (SYMBOL_TYPE (syms[i]))))
1243 warning ("could not find bounds information on packed array");
1246 shadow_type = SYMBOL_TYPE (syms[i]);
1248 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
1250 warning ("could not understand bounds information on packed array");
1254 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1256 warning ("could not understand bit size information on packed array");
1260 return packed_array_type (shadow_type, &bits);
1263 /* Given that ARR is a struct value* indicating a GNAT packed array,
1264 returns a simple array that denotes that array. Its type is a
1265 standard GDB array type except that the BITSIZEs of the array
1266 target types are set to the number of bits in each element, and the
1267 type length is set appropriately. */
1269 static struct value *
1270 decode_packed_array (struct value *arr)
1272 struct type *type = decode_packed_array_type (VALUE_TYPE (arr));
1276 error ("can't unpack array");
1280 return coerce_unspec_val_to_type (arr, 0, type);
1284 /* The value of the element of packed array ARR at the ARITY indices
1285 given in IND. ARR must be a simple array. */
1287 static struct value *
1288 value_subscript_packed (struct value *arr, int arity, struct value **ind)
1291 int bits, elt_off, bit_off;
1292 long elt_total_bit_offset;
1293 struct type *elt_type;
1297 elt_total_bit_offset = 0;
1298 elt_type = check_typedef (VALUE_TYPE (arr));
1299 for (i = 0; i < arity; i += 1)
1301 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
1302 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
1304 ("attempt to do packed indexing of something other than a packed array");
1307 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
1308 LONGEST lowerbound, upperbound;
1311 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
1313 warning ("don't know bounds of array");
1314 lowerbound = upperbound = 0;
1317 idx = value_as_long (value_pos_atr (ind[i]));
1318 if (idx < lowerbound || idx > upperbound)
1319 warning ("packed array index %ld out of bounds", (long) idx);
1320 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
1321 elt_total_bit_offset += (idx - lowerbound) * bits;
1322 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
1325 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
1326 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
1328 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
1330 if (VALUE_LVAL (arr) == lval_internalvar)
1331 VALUE_LVAL (v) = lval_internalvar_component;
1333 VALUE_LVAL (v) = VALUE_LVAL (arr);
1337 /* Non-zero iff TYPE includes negative integer values. */
1340 has_negatives (struct type *type)
1342 switch (TYPE_CODE (type))
1347 return !TYPE_UNSIGNED (type);
1348 case TYPE_CODE_RANGE:
1349 return TYPE_LOW_BOUND (type) < 0;
1354 /* Create a new value of type TYPE from the contents of OBJ starting
1355 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
1356 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
1357 assigning through the result will set the field fetched from. OBJ
1358 may also be NULL, in which case, VALADDR+OFFSET must address the
1359 start of storage containing the packed value. The value returned
1360 in this case is never an lval.
1361 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
1364 ada_value_primitive_packed_val (struct value *obj, char *valaddr, long offset,
1365 int bit_offset, int bit_size,
1369 int src, /* Index into the source area. */
1370 targ, /* Index into the target area. */
1371 i, srcBitsLeft, /* Number of source bits left to move. */
1372 nsrc, ntarg, /* Number of source and target bytes. */
1373 unusedLS, /* Number of bits in next significant
1374 * byte of source that are unused. */
1375 accumSize; /* Number of meaningful bits in accum */
1376 unsigned char *bytes; /* First byte containing data to unpack. */
1377 unsigned char *unpacked;
1378 unsigned long accum; /* Staging area for bits being transferred */
1380 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
1381 /* Transmit bytes from least to most significant; delta is the
1382 * direction the indices move. */
1383 int delta = BITS_BIG_ENDIAN ? -1 : 1;
1385 CHECK_TYPEDEF (type);
1389 v = allocate_value (type);
1390 bytes = (unsigned char *) (valaddr + offset);
1392 else if (VALUE_LAZY (obj))
1395 VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset, NULL);
1396 bytes = (unsigned char *) alloca (len);
1397 read_memory (VALUE_ADDRESS (v), bytes, len);
1401 v = allocate_value (type);
1402 bytes = (unsigned char *) VALUE_CONTENTS (obj) + offset;
1407 VALUE_LVAL (v) = VALUE_LVAL (obj);
1408 if (VALUE_LVAL (obj) == lval_internalvar)
1409 VALUE_LVAL (v) = lval_internalvar_component;
1410 VALUE_ADDRESS (v) = VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset;
1411 VALUE_BITPOS (v) = bit_offset + VALUE_BITPOS (obj);
1412 VALUE_BITSIZE (v) = bit_size;
1413 if (VALUE_BITPOS (v) >= HOST_CHAR_BIT)
1415 VALUE_ADDRESS (v) += 1;
1416 VALUE_BITPOS (v) -= HOST_CHAR_BIT;
1420 VALUE_BITSIZE (v) = bit_size;
1421 unpacked = (unsigned char *) VALUE_CONTENTS (v);
1423 srcBitsLeft = bit_size;
1425 ntarg = TYPE_LENGTH (type);
1429 memset (unpacked, 0, TYPE_LENGTH (type));
1432 else if (BITS_BIG_ENDIAN)
1435 if (has_negatives (type) &&
1436 ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
1440 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
1443 switch (TYPE_CODE (type))
1445 case TYPE_CODE_ARRAY:
1446 case TYPE_CODE_UNION:
1447 case TYPE_CODE_STRUCT:
1448 /* Non-scalar values must be aligned at a byte boundary. */
1450 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
1451 /* And are placed at the beginning (most-significant) bytes
1457 targ = TYPE_LENGTH (type) - 1;
1463 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
1466 unusedLS = bit_offset;
1469 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
1476 /* Mask for removing bits of the next source byte that are not
1477 * part of the value. */
1478 unsigned int unusedMSMask =
1479 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
1481 /* Sign-extend bits for this byte. */
1482 unsigned int signMask = sign & ~unusedMSMask;
1484 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
1485 accumSize += HOST_CHAR_BIT - unusedLS;
1486 if (accumSize >= HOST_CHAR_BIT)
1488 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1489 accumSize -= HOST_CHAR_BIT;
1490 accum >>= HOST_CHAR_BIT;
1494 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
1501 accum |= sign << accumSize;
1502 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1503 accumSize -= HOST_CHAR_BIT;
1504 accum >>= HOST_CHAR_BIT;
1512 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
1513 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
1516 move_bits (char *target, int targ_offset, char *source, int src_offset, int n)
1518 unsigned int accum, mask;
1519 int accum_bits, chunk_size;
1521 target += targ_offset / HOST_CHAR_BIT;
1522 targ_offset %= HOST_CHAR_BIT;
1523 source += src_offset / HOST_CHAR_BIT;
1524 src_offset %= HOST_CHAR_BIT;
1525 if (BITS_BIG_ENDIAN)
1527 accum = (unsigned char) *source;
1529 accum_bits = HOST_CHAR_BIT - src_offset;
1534 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
1535 accum_bits += HOST_CHAR_BIT;
1537 chunk_size = HOST_CHAR_BIT - targ_offset;
1540 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
1541 mask = ((1 << chunk_size) - 1) << unused_right;
1544 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
1546 accum_bits -= chunk_size;
1553 accum = (unsigned char) *source >> src_offset;
1555 accum_bits = HOST_CHAR_BIT - src_offset;
1559 accum = accum + ((unsigned char) *source << accum_bits);
1560 accum_bits += HOST_CHAR_BIT;
1562 chunk_size = HOST_CHAR_BIT - targ_offset;
1565 mask = ((1 << chunk_size) - 1) << targ_offset;
1566 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
1568 accum_bits -= chunk_size;
1569 accum >>= chunk_size;
1577 /* Store the contents of FROMVAL into the location of TOVAL.
1578 Return a new value with the location of TOVAL and contents of
1579 FROMVAL. Handles assignment into packed fields that have
1580 floating-point or non-scalar types. */
1582 static struct value *
1583 ada_value_assign (struct value *toval, struct value *fromval)
1585 struct type *type = VALUE_TYPE (toval);
1586 int bits = VALUE_BITSIZE (toval);
1588 if (!toval->modifiable)
1589 error ("Left operand of assignment is not a modifiable lvalue.");
1593 if (VALUE_LVAL (toval) == lval_memory
1595 && (TYPE_CODE (type) == TYPE_CODE_FLT
1596 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
1599 (VALUE_BITPOS (toval) + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1600 char *buffer = (char *) alloca (len);
1603 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1604 fromval = value_cast (type, fromval);
1606 read_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer, len);
1607 if (BITS_BIG_ENDIAN)
1608 move_bits (buffer, VALUE_BITPOS (toval),
1609 VALUE_CONTENTS (fromval),
1610 TYPE_LENGTH (VALUE_TYPE (fromval)) * TARGET_CHAR_BIT -
1613 move_bits (buffer, VALUE_BITPOS (toval), VALUE_CONTENTS (fromval),
1615 write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer,
1618 val = value_copy (toval);
1619 memcpy (VALUE_CONTENTS_RAW (val), VALUE_CONTENTS (fromval),
1620 TYPE_LENGTH (type));
1621 VALUE_TYPE (val) = type;
1626 return value_assign (toval, fromval);
1630 /* The value of the element of array ARR at the ARITY indices given in IND.
1631 ARR may be either a simple array, GNAT array descriptor, or pointer
1635 ada_value_subscript (struct value *arr, int arity, struct value **ind)
1639 struct type *elt_type;
1641 elt = ada_coerce_to_simple_array (arr);
1643 elt_type = check_typedef (VALUE_TYPE (elt));
1644 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
1645 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
1646 return value_subscript_packed (elt, arity, ind);
1648 for (k = 0; k < arity; k += 1)
1650 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
1651 error ("too many subscripts (%d expected)", k);
1652 elt = value_subscript (elt, value_pos_atr (ind[k]));
1657 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
1658 value of the element of *ARR at the ARITY indices given in
1659 IND. Does not read the entire array into memory. */
1662 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
1667 for (k = 0; k < arity; k += 1)
1672 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1673 error ("too many subscripts (%d expected)", k);
1674 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
1676 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
1680 idx = value_sub (ind[k], value_from_longest (builtin_type_int, lwb));
1681 arr = value_add (arr, idx);
1682 type = TYPE_TARGET_TYPE (type);
1685 return value_ind (arr);
1688 /* If type is a record type in the form of a standard GNAT array
1689 descriptor, returns the number of dimensions for type. If arr is a
1690 simple array, returns the number of "array of"s that prefix its
1691 type designation. Otherwise, returns 0. */
1694 ada_array_arity (struct type *type)
1701 type = desc_base_type (type);
1704 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1705 return desc_arity (desc_bounds_type (type));
1707 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1710 type = check_typedef (TYPE_TARGET_TYPE (type));
1716 /* If TYPE is a record type in the form of a standard GNAT array
1717 descriptor or a simple array type, returns the element type for
1718 TYPE after indexing by NINDICES indices, or by all indices if
1719 NINDICES is -1. Otherwise, returns NULL. */
1722 ada_array_element_type (struct type *type, int nindices)
1724 type = desc_base_type (type);
1726 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1729 struct type *p_array_type;
1731 p_array_type = desc_data_type (type);
1733 k = ada_array_arity (type);
1737 /* Initially p_array_type = elt_type(*)[]...(k times)...[] */
1738 if (nindices >= 0 && k > nindices)
1740 p_array_type = TYPE_TARGET_TYPE (p_array_type);
1741 while (k > 0 && p_array_type != NULL)
1743 p_array_type = check_typedef (TYPE_TARGET_TYPE (p_array_type));
1746 return p_array_type;
1748 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1750 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
1752 type = TYPE_TARGET_TYPE (type);
1761 /* The type of nth index in arrays of given type (n numbering from 1). Does
1762 not examine memory. */
1765 ada_index_type (struct type *type, int n)
1767 type = desc_base_type (type);
1769 if (n > ada_array_arity (type))
1772 if (ada_is_simple_array (type))
1776 for (i = 1; i < n; i += 1)
1777 type = TYPE_TARGET_TYPE (type);
1779 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0));
1782 return desc_index_type (desc_bounds_type (type), n);
1785 /* Given that arr is an array type, returns the lower bound of the
1786 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
1787 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1788 array-descriptor type. If TYPEP is non-null, *TYPEP is set to the
1789 bounds type. It works for other arrays with bounds supplied by
1790 run-time quantities other than discriminants. */
1793 ada_array_bound_from_type (struct type * arr_type, int n, int which,
1794 struct type ** typep)
1797 struct type *index_type_desc;
1799 if (ada_is_packed_array_type (arr_type))
1800 arr_type = decode_packed_array_type (arr_type);
1802 if (arr_type == NULL || !ada_is_simple_array (arr_type))
1805 *typep = builtin_type_int;
1806 return (LONGEST) - which;
1809 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
1810 type = TYPE_TARGET_TYPE (arr_type);
1814 index_type_desc = ada_find_parallel_type (type, "___XA");
1815 if (index_type_desc == NULL)
1817 struct type *range_type;
1818 struct type *index_type;
1822 type = TYPE_TARGET_TYPE (type);
1826 range_type = TYPE_INDEX_TYPE (type);
1827 index_type = TYPE_TARGET_TYPE (range_type);
1828 if (TYPE_CODE (index_type) == TYPE_CODE_UNDEF)
1829 index_type = builtin_type_long;
1831 *typep = index_type;
1833 (LONGEST) (which == 0
1834 ? TYPE_LOW_BOUND (range_type)
1835 : TYPE_HIGH_BOUND (range_type));
1839 struct type *index_type =
1840 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
1841 NULL, TYPE_OBJFILE (arr_type));
1843 *typep = TYPE_TARGET_TYPE (index_type);
1845 (LONGEST) (which == 0
1846 ? TYPE_LOW_BOUND (index_type)
1847 : TYPE_HIGH_BOUND (index_type));
1851 /* Given that arr is an array value, returns the lower bound of the
1852 nth index (numbering from 1) if which is 0, and the upper bound if
1853 which is 1. This routine will also work for arrays with bounds
1854 supplied by run-time quantities other than discriminants. */
1857 ada_array_bound (struct value *arr, int n, int which)
1859 struct type *arr_type = VALUE_TYPE (arr);
1861 if (ada_is_packed_array_type (arr_type))
1862 return ada_array_bound (decode_packed_array (arr), n, which);
1863 else if (ada_is_simple_array (arr_type))
1866 LONGEST v = ada_array_bound_from_type (arr_type, n, which, &type);
1867 return value_from_longest (type, v);
1870 return desc_one_bound (desc_bounds (arr), n, which);
1873 /* Given that arr is an array value, returns the length of the
1874 nth index. This routine will also work for arrays with bounds
1875 supplied by run-time quantities other than discriminants. Does not
1876 work for arrays indexed by enumeration types with representation
1877 clauses at the moment. */
1880 ada_array_length (struct value *arr, int n)
1882 struct type *arr_type = check_typedef (VALUE_TYPE (arr));
1883 struct type *index_type_desc;
1885 if (ada_is_packed_array_type (arr_type))
1886 return ada_array_length (decode_packed_array (arr), n);
1888 if (ada_is_simple_array (arr_type))
1892 ada_array_bound_from_type (arr_type, n, 1, &type) -
1893 ada_array_bound_from_type (arr_type, n, 0, NULL) + 1;
1894 return value_from_longest (type, v);
1898 value_from_longest (builtin_type_ada_int,
1899 value_as_long (desc_one_bound (desc_bounds (arr),
1901 - value_as_long (desc_one_bound (desc_bounds (arr),
1906 /* Name resolution */
1908 /* The "demangled" name for the user-definable Ada operator corresponding
1912 ada_op_name (enum exp_opcode op)
1916 for (i = 0; ada_opname_table[i].mangled != NULL; i += 1)
1918 if (ada_opname_table[i].op == op)
1919 return ada_opname_table[i].demangled;
1921 error ("Could not find operator name for opcode");
1925 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
1926 references (OP_UNRESOLVED_VALUES) and converts operators that are
1927 user-defined into appropriate function calls. If CONTEXT_TYPE is
1928 non-null, it provides a preferred result type [at the moment, only
1929 type void has any effect---causing procedures to be preferred over
1930 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
1931 return type is preferred. The variable unresolved_names contains a list
1932 of character strings referenced by expout that should be freed.
1933 May change (expand) *EXP. */
1936 ada_resolve (struct expression **expp, struct type *context_type)
1940 ada_resolve_subexp (expp, &pc, 1, context_type);
1943 /* Resolve the operator of the subexpression beginning at
1944 position *POS of *EXPP. "Resolving" consists of replacing
1945 OP_UNRESOLVED_VALUE with an appropriate OP_VAR_VALUE, replacing
1946 built-in operators with function calls to user-defined operators,
1947 where appropriate, and (when DEPROCEDURE_P is non-zero), converting
1948 function-valued variables into parameterless calls. May expand
1949 EXP. The CONTEXT_TYPE functions as in ada_resolve, above. */
1951 static struct value *
1952 ada_resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
1953 struct type *context_type)
1957 struct expression *exp; /* Convenience: == *expp */
1958 enum exp_opcode op = (*expp)->elts[pc].opcode;
1959 struct value **argvec; /* Vector of operand types (alloca'ed). */
1960 int nargs; /* Number of operands */
1966 /* Pass one: resolve operands, saving their types and updating *pos. */
1970 /* case OP_UNRESOLVED_VALUE: */
1971 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
1976 nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
1977 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
1978 /* if (exp->elts[pc+3].opcode == OP_UNRESOLVED_VALUE)
1982 argvec = (struct value* *) alloca (sizeof (struct value*) * (nargs + 1));
1983 for (i = 0; i < nargs-1; i += 1)
1984 argvec[i] = ada_resolve_subexp (expp, pos, 1, NULL);
1990 ada_resolve_subexp (expp, pos, 0, NULL);
1991 for (i = 1; i < nargs; i += 1)
1992 ada_resolve_subexp (expp, pos, 1, NULL);
1998 /* FIXME: UNOP_QUAL should be defined in expression.h */
2002 ada_resolve_subexp (expp, pos, 1, exp->elts[pc + 1].type);
2006 /* FIXME: OP_ATTRIBUTE should be defined in expression.h */
2007 /* case OP_ATTRIBUTE:
2008 nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
2010 for (i = 0; i < nargs; i += 1)
2011 ada_resolve_subexp (expp, pos, 1, NULL);
2018 ada_resolve_subexp (expp, pos, 0, NULL);
2027 arg1 = ada_resolve_subexp (expp, pos, 0, NULL);
2029 ada_resolve_subexp (expp, pos, 1, NULL);
2031 ada_resolve_subexp (expp, pos, 1, VALUE_TYPE (arg1));
2039 error ("Unexpected operator during name resolution");
2054 case BINOP_LOGICAL_AND:
2055 case BINOP_LOGICAL_OR:
2056 case BINOP_BITWISE_AND:
2057 case BINOP_BITWISE_IOR:
2058 case BINOP_BITWISE_XOR:
2061 case BINOP_NOTEQUAL:
2068 case BINOP_SUBSCRIPT:
2076 case UNOP_LOGICAL_NOT:
2093 case OP_INTERNALVAR:
2102 case STRUCTOP_STRUCT:
2105 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2110 nargs = longest_to_int (exp->elts[pc + 2].longconst) + 1;
2111 nargs -= longest_to_int (exp->elts[pc + 1].longconst);
2112 /* A null array contains one dummy element to give the type. */
2118 /* FIXME: TERNOP_MBR should be defined in expression.h */
2124 /* FIXME: BINOP_MBR should be defined in expression.h */
2132 (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2133 for (i = 0; i < nargs; i += 1)
2134 argvec[i] = ada_resolve_subexp (expp, pos, 1, NULL);
2140 /* Pass two: perform any resolution on principal operator. */
2146 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
2147 /* case OP_UNRESOLVED_VALUE:
2149 struct symbol** candidate_syms;
2150 struct block** candidate_blocks;
2153 n_candidates = ada_lookup_symbol_list (exp->elts[pc + 2].name,
2154 exp->elts[pc + 1].block,
2159 if (n_candidates > 1)
2161 /* Types tend to get re-introduced locally, so if there
2162 are any local symbols that are not types, first filter
2165 for (j = 0; j < n_candidates; j += 1)
2166 switch (SYMBOL_CLASS (candidate_syms[j]))
2172 case LOC_REGPARM_ADDR:
2176 case LOC_BASEREG_ARG:
2178 case LOC_COMPUTED_ARG:
2184 if (j < n_candidates)
2187 while (j < n_candidates)
2189 if (SYMBOL_CLASS (candidate_syms[j]) == LOC_TYPEDEF)
2191 candidate_syms[j] = candidate_syms[n_candidates-1];
2192 candidate_blocks[j] = candidate_blocks[n_candidates-1];
2201 if (n_candidates == 0)
2202 error ("No definition found for %s",
2203 ada_demangle (exp->elts[pc + 2].name));
2204 else if (n_candidates == 1)
2206 else if (deprocedure_p
2207 && ! is_nonfunction (candidate_syms, n_candidates))
2209 i = ada_resolve_function (candidate_syms, candidate_blocks,
2210 n_candidates, NULL, 0,
2211 exp->elts[pc + 2].name, context_type);
2213 error ("Could not find a match for %s",
2214 ada_demangle (exp->elts[pc + 2].name));
2218 printf_filtered ("Multiple matches for %s\n",
2219 ada_demangle (exp->elts[pc+2].name));
2220 user_select_syms (candidate_syms, candidate_blocks,
2225 exp->elts[pc].opcode = exp->elts[pc + 3].opcode = OP_VAR_VALUE;
2226 exp->elts[pc + 1].block = candidate_blocks[i];
2227 exp->elts[pc + 2].symbol = candidate_syms[i];
2228 if (innermost_block == NULL ||
2229 contained_in (candidate_blocks[i], innermost_block))
2230 innermost_block = candidate_blocks[i];
2235 if (deprocedure_p &&
2236 TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol)) ==
2239 replace_operator_with_call (expp, pc, 0, 0,
2240 exp->elts[pc + 2].symbol,
2241 exp->elts[pc + 1].block);
2248 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
2249 /* if (exp->elts[pc+3].opcode == OP_UNRESOLVED_VALUE)
2251 struct symbol** candidate_syms;
2252 struct block** candidate_blocks;
2255 n_candidates = ada_lookup_symbol_list (exp->elts[pc + 5].name,
2256 exp->elts[pc + 4].block,
2260 if (n_candidates == 1)
2264 i = ada_resolve_function (candidate_syms, candidate_blocks,
2265 n_candidates, argvec, nargs-1,
2266 exp->elts[pc + 5].name, context_type);
2268 error ("Could not find a match for %s",
2269 ada_demangle (exp->elts[pc + 5].name));
2272 exp->elts[pc + 3].opcode = exp->elts[pc + 6].opcode = OP_VAR_VALUE;
2273 exp->elts[pc + 4].block = candidate_blocks[i];
2274 exp->elts[pc + 5].symbol = candidate_syms[i];
2275 if (innermost_block == NULL ||
2276 contained_in (candidate_blocks[i], innermost_block))
2277 innermost_block = candidate_blocks[i];
2289 case BINOP_BITWISE_AND:
2290 case BINOP_BITWISE_IOR:
2291 case BINOP_BITWISE_XOR:
2293 case BINOP_NOTEQUAL:
2301 case UNOP_LOGICAL_NOT:
2303 if (possible_user_operator_p (op, argvec))
2305 struct symbol **candidate_syms;
2306 struct block **candidate_blocks;
2310 ada_lookup_symbol_list (ada_mangle (ada_op_name (op)),
2311 (struct block *) NULL, VAR_DOMAIN,
2312 &candidate_syms, &candidate_blocks);
2314 ada_resolve_function (candidate_syms, candidate_blocks,
2315 n_candidates, argvec, nargs,
2316 ada_op_name (op), NULL);
2320 replace_operator_with_call (expp, pc, nargs, 1,
2321 candidate_syms[i], candidate_blocks[i]);
2328 return evaluate_subexp_type (exp, pos);
2331 /* Return non-zero if formal type FTYPE matches actual type ATYPE. If
2332 MAY_DEREF is non-zero, the formal may be a pointer and the actual
2334 /* The term "match" here is rather loose. The match is heuristic and
2335 liberal. FIXME: TOO liberal, in fact. */
2338 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
2340 CHECK_TYPEDEF (ftype);
2341 CHECK_TYPEDEF (atype);
2343 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
2344 ftype = TYPE_TARGET_TYPE (ftype);
2345 if (TYPE_CODE (atype) == TYPE_CODE_REF)
2346 atype = TYPE_TARGET_TYPE (atype);
2348 if (TYPE_CODE (ftype) == TYPE_CODE_VOID
2349 || TYPE_CODE (atype) == TYPE_CODE_VOID)
2352 switch (TYPE_CODE (ftype))
2357 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
2358 return ada_type_match (TYPE_TARGET_TYPE (ftype),
2359 TYPE_TARGET_TYPE (atype), 0);
2361 return (may_deref &&
2362 ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
2364 case TYPE_CODE_ENUM:
2365 case TYPE_CODE_RANGE:
2366 switch (TYPE_CODE (atype))
2369 case TYPE_CODE_ENUM:
2370 case TYPE_CODE_RANGE:
2376 case TYPE_CODE_ARRAY:
2377 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2378 || ada_is_array_descriptor (atype));
2380 case TYPE_CODE_STRUCT:
2381 if (ada_is_array_descriptor (ftype))
2382 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2383 || ada_is_array_descriptor (atype));
2385 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
2386 && !ada_is_array_descriptor (atype));
2388 case TYPE_CODE_UNION:
2390 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
2394 /* Return non-zero if the formals of FUNC "sufficiently match" the
2395 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
2396 may also be an enumeral, in which case it is treated as a 0-
2397 argument function. */
2400 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
2403 struct type *func_type = SYMBOL_TYPE (func);
2405 if (SYMBOL_CLASS (func) == LOC_CONST &&
2406 TYPE_CODE (func_type) == TYPE_CODE_ENUM)
2407 return (n_actuals == 0);
2408 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
2411 if (TYPE_NFIELDS (func_type) != n_actuals)
2414 for (i = 0; i < n_actuals; i += 1)
2416 struct type *ftype = check_typedef (TYPE_FIELD_TYPE (func_type, i));
2417 struct type *atype = check_typedef (VALUE_TYPE (actuals[i]));
2419 if (!ada_type_match (TYPE_FIELD_TYPE (func_type, i),
2420 VALUE_TYPE (actuals[i]), 1))
2426 /* False iff function type FUNC_TYPE definitely does not produce a value
2427 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
2428 FUNC_TYPE is not a valid function type with a non-null return type
2429 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
2432 return_match (struct type *func_type, struct type *context_type)
2434 struct type *return_type;
2436 if (func_type == NULL)
2439 /* FIXME: base_type should be declared in gdbtypes.h, implemented in valarith.c */
2440 /* if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
2441 return_type = base_type (TYPE_TARGET_TYPE (func_type));
2443 return_type = base_type (func_type); */
2444 if (return_type == NULL)
2447 /* FIXME: base_type should be declared in gdbtypes.h, implemented in valarith.c */
2448 /* context_type = base_type (context_type); */
2450 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
2451 return context_type == NULL || return_type == context_type;
2452 else if (context_type == NULL)
2453 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
2455 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
2459 /* Return the index in SYMS[0..NSYMS-1] of symbol for the
2460 function (if any) that matches the types of the NARGS arguments in
2461 ARGS. If CONTEXT_TYPE is non-null, and there is at least one match
2462 that returns type CONTEXT_TYPE, then eliminate other matches. If
2463 CONTEXT_TYPE is null, prefer a non-void-returning function.
2464 Asks the user if there is more than one match remaining. Returns -1
2465 if there is no such symbol or none is selected. NAME is used
2466 solely for messages. May re-arrange and modify SYMS in
2467 the process; the index returned is for the modified vector. BLOCKS
2468 is modified in parallel to SYMS. */
2471 ada_resolve_function (struct symbol *syms[], struct block *blocks[],
2472 int nsyms, struct value **args, int nargs,
2473 const char *name, struct type *context_type)
2476 int m; /* Number of hits */
2477 struct type *fallback;
2478 struct type *return_type;
2480 return_type = context_type;
2481 if (context_type == NULL)
2482 fallback = builtin_type_void;
2489 for (k = 0; k < nsyms; k += 1)
2491 struct type *type = check_typedef (SYMBOL_TYPE (syms[k]));
2493 if (ada_args_match (syms[k], args, nargs)
2494 && return_match (SYMBOL_TYPE (syms[k]), return_type))
2498 blocks[m] = blocks[k];
2502 if (m > 0 || return_type == fallback)
2505 return_type = fallback;
2512 printf_filtered ("Multiple matches for %s\n", name);
2513 user_select_syms (syms, blocks, m, 1);
2519 /* Returns true (non-zero) iff demangled name N0 should appear before N1 */
2520 /* in a listing of choices during disambiguation (see sort_choices, below). */
2521 /* The idea is that overloadings of a subprogram name from the */
2522 /* same package should sort in their source order. We settle for ordering */
2523 /* such symbols by their trailing number (__N or $N). */
2525 mangled_ordered_before (char *N0, char *N1)
2529 else if (N0 == NULL)
2534 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
2536 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
2538 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
2539 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
2543 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
2546 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
2548 if (n0 == n1 && DEPRECATED_STREQN (N0, N1, n0))
2549 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
2551 return (strcmp (N0, N1) < 0);
2555 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by their */
2556 /* mangled names, rearranging BLOCKS[0..NSYMS-1] according to the same */
2559 sort_choices (struct symbol *syms[], struct block *blocks[], int nsyms)
2562 for (i = 1; i < nsyms; i += 1)
2564 struct symbol *sym = syms[i];
2565 struct block *block = blocks[i];
2568 for (j = i - 1; j >= 0; j -= 1)
2570 if (mangled_ordered_before (DEPRECATED_SYMBOL_NAME (syms[j]),
2571 DEPRECATED_SYMBOL_NAME (sym)))
2573 syms[j + 1] = syms[j];
2574 blocks[j + 1] = blocks[j];
2577 blocks[j + 1] = block;
2581 /* Given a list of NSYMS symbols in SYMS and corresponding blocks in */
2582 /* BLOCKS, select up to MAX_RESULTS>0 by asking the user (if */
2583 /* necessary), returning the number selected, and setting the first */
2584 /* elements of SYMS and BLOCKS to the selected symbols and */
2585 /* corresponding blocks. Error if no symbols selected. BLOCKS may */
2586 /* be NULL, in which case it is ignored. */
2588 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
2589 to be re-integrated one of these days. */
2592 user_select_syms (struct symbol *syms[], struct block *blocks[], int nsyms,
2596 int *chosen = (int *) alloca (sizeof (int) * nsyms);
2598 int first_choice = (max_results == 1) ? 1 : 2;
2600 if (max_results < 1)
2601 error ("Request to select 0 symbols!");
2605 printf_unfiltered ("[0] cancel\n");
2606 if (max_results > 1)
2607 printf_unfiltered ("[1] all\n");
2609 sort_choices (syms, blocks, nsyms);
2611 for (i = 0; i < nsyms; i += 1)
2613 if (syms[i] == NULL)
2616 if (SYMBOL_CLASS (syms[i]) == LOC_BLOCK)
2618 struct symtab_and_line sal = find_function_start_sal (syms[i], 1);
2619 printf_unfiltered ("[%d] %s at %s:%d\n",
2621 SYMBOL_PRINT_NAME (syms[i]),
2623 ? "<no source file available>"
2624 : sal.symtab->filename, sal.line);
2630 (SYMBOL_CLASS (syms[i]) == LOC_CONST
2631 && SYMBOL_TYPE (syms[i]) != NULL
2632 && TYPE_CODE (SYMBOL_TYPE (syms[i])) == TYPE_CODE_ENUM);
2633 struct symtab *symtab = symtab_for_sym (syms[i]);
2635 if (SYMBOL_LINE (syms[i]) != 0 && symtab != NULL)
2636 printf_unfiltered ("[%d] %s at %s:%d\n",
2638 SYMBOL_PRINT_NAME (syms[i]),
2639 symtab->filename, SYMBOL_LINE (syms[i]));
2640 else if (is_enumeral && TYPE_NAME (SYMBOL_TYPE (syms[i])) != NULL)
2642 printf_unfiltered ("[%d] ", i + first_choice);
2643 ada_print_type (SYMBOL_TYPE (syms[i]), NULL, gdb_stdout, -1, 0);
2644 printf_unfiltered ("'(%s) (enumeral)\n",
2645 SYMBOL_PRINT_NAME (syms[i]));
2647 else if (symtab != NULL)
2648 printf_unfiltered (is_enumeral
2649 ? "[%d] %s in %s (enumeral)\n"
2650 : "[%d] %s at %s:?\n",
2652 SYMBOL_PRINT_NAME (syms[i]),
2655 printf_unfiltered (is_enumeral
2656 ? "[%d] %s (enumeral)\n"
2659 SYMBOL_PRINT_NAME (syms[i]));
2663 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
2666 for (i = 0; i < n_chosen; i += 1)
2668 syms[i] = syms[chosen[i]];
2670 blocks[i] = blocks[chosen[i]];
2676 /* Read and validate a set of numeric choices from the user in the
2677 range 0 .. N_CHOICES-1. Place the results in increasing
2678 order in CHOICES[0 .. N-1], and return N.
2680 The user types choices as a sequence of numbers on one line
2681 separated by blanks, encoding them as follows:
2683 + A choice of 0 means to cancel the selection, throwing an error.
2684 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
2685 + The user chooses k by typing k+IS_ALL_CHOICE+1.
2687 The user is not allowed to choose more than MAX_RESULTS values.
2689 ANNOTATION_SUFFIX, if present, is used to annotate the input
2690 prompts (for use with the -f switch). */
2693 get_selections (int *choices, int n_choices, int max_results,
2694 int is_all_choice, char *annotation_suffix)
2700 int first_choice = is_all_choice ? 2 : 1;
2702 prompt = getenv ("PS2");
2706 printf_unfiltered ("%s ", prompt);
2707 gdb_flush (gdb_stdout);
2709 args = command_line_input ((char *) NULL, 0, annotation_suffix);
2712 error_no_arg ("one or more choice numbers");
2716 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
2717 order, as given in args. Choices are validated. */
2723 while (isspace (*args))
2725 if (*args == '\0' && n_chosen == 0)
2726 error_no_arg ("one or more choice numbers");
2727 else if (*args == '\0')
2730 choice = strtol (args, &args2, 10);
2731 if (args == args2 || choice < 0
2732 || choice > n_choices + first_choice - 1)
2733 error ("Argument must be choice number");
2737 error ("cancelled");
2739 if (choice < first_choice)
2741 n_chosen = n_choices;
2742 for (j = 0; j < n_choices; j += 1)
2746 choice -= first_choice;
2748 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
2752 if (j < 0 || choice != choices[j])
2755 for (k = n_chosen - 1; k > j; k -= 1)
2756 choices[k + 1] = choices[k];
2757 choices[j + 1] = choice;
2762 if (n_chosen > max_results)
2763 error ("Select no more than %d of the above", max_results);
2768 /* Replace the operator of length OPLEN at position PC in *EXPP with a call */
2769 /* on the function identified by SYM and BLOCK, and taking NARGS */
2770 /* arguments. Update *EXPP as needed to hold more space. */
2773 replace_operator_with_call (struct expression **expp, int pc, int nargs,
2774 int oplen, struct symbol *sym,
2775 struct block *block)
2777 /* A new expression, with 6 more elements (3 for funcall, 4 for function
2778 symbol, -oplen for operator being replaced). */
2779 struct expression *newexp = (struct expression *)
2780 xmalloc (sizeof (struct expression)
2781 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
2782 struct expression *exp = *expp;
2784 newexp->nelts = exp->nelts + 7 - oplen;
2785 newexp->language_defn = exp->language_defn;
2786 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
2787 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
2788 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
2790 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
2791 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
2793 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
2794 newexp->elts[pc + 4].block = block;
2795 newexp->elts[pc + 5].symbol = sym;
2801 /* Type-class predicates */
2803 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type), or */
2807 numeric_type_p (struct type *type)
2813 switch (TYPE_CODE (type))
2818 case TYPE_CODE_RANGE:
2819 return (type == TYPE_TARGET_TYPE (type)
2820 || numeric_type_p (TYPE_TARGET_TYPE (type)));
2827 /* True iff TYPE is integral (an INT or RANGE of INTs). */
2830 integer_type_p (struct type *type)
2836 switch (TYPE_CODE (type))
2840 case TYPE_CODE_RANGE:
2841 return (type == TYPE_TARGET_TYPE (type)
2842 || integer_type_p (TYPE_TARGET_TYPE (type)));
2849 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
2852 scalar_type_p (struct type *type)
2858 switch (TYPE_CODE (type))
2861 case TYPE_CODE_RANGE:
2862 case TYPE_CODE_ENUM:
2871 /* True iff TYPE is discrete (INT, RANGE, ENUM). */
2874 discrete_type_p (struct type *type)
2880 switch (TYPE_CODE (type))
2883 case TYPE_CODE_RANGE:
2884 case TYPE_CODE_ENUM:
2892 /* Returns non-zero if OP with operatands in the vector ARGS could be
2893 a user-defined function. Errs on the side of pre-defined operators
2894 (i.e., result 0). */
2897 possible_user_operator_p (enum exp_opcode op, struct value *args[])
2899 struct type *type0 = check_typedef (VALUE_TYPE (args[0]));
2900 struct type *type1 =
2901 (args[1] == NULL) ? NULL : check_typedef (VALUE_TYPE (args[1]));
2912 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
2916 case BINOP_BITWISE_AND:
2917 case BINOP_BITWISE_IOR:
2918 case BINOP_BITWISE_XOR:
2919 return (!(integer_type_p (type0) && integer_type_p (type1)));
2922 case BINOP_NOTEQUAL:
2927 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
2930 return ((TYPE_CODE (type0) != TYPE_CODE_ARRAY &&
2931 (TYPE_CODE (type0) != TYPE_CODE_PTR ||
2932 TYPE_CODE (TYPE_TARGET_TYPE (type0))
2933 != TYPE_CODE_ARRAY))
2934 || (TYPE_CODE (type1) != TYPE_CODE_ARRAY &&
2935 (TYPE_CODE (type1) != TYPE_CODE_PTR ||
2936 TYPE_CODE (TYPE_TARGET_TYPE (type1)) != TYPE_CODE_ARRAY)));
2939 return (!(numeric_type_p (type0) && integer_type_p (type1)));
2943 case UNOP_LOGICAL_NOT:
2945 return (!numeric_type_p (type0));
2952 /** NOTE: In the following, we assume that a renaming type's name may
2953 * have an ___XD suffix. It would be nice if this went away at some
2956 /* If TYPE encodes a renaming, returns the renaming suffix, which
2957 * is XR for an object renaming, XRP for a procedure renaming, XRE for
2958 * an exception renaming, and XRS for a subprogram renaming. Returns
2959 * NULL if NAME encodes none of these. */
2961 ada_renaming_type (struct type *type)
2963 if (type != NULL && TYPE_CODE (type) == TYPE_CODE_ENUM)
2965 const char *name = type_name_no_tag (type);
2966 const char *suffix = (name == NULL) ? NULL : strstr (name, "___XR");
2968 || (suffix[5] != '\000' && strchr ("PES_", suffix[5]) == NULL))
2977 /* Return non-zero iff SYM encodes an object renaming. */
2979 ada_is_object_renaming (struct symbol *sym)
2981 const char *renaming_type = ada_renaming_type (SYMBOL_TYPE (sym));
2982 return renaming_type != NULL
2983 && (renaming_type[2] == '\0' || renaming_type[2] == '_');
2986 /* Assuming that SYM encodes a non-object renaming, returns the original
2987 * name of the renamed entity. The name is good until the end of
2990 ada_simple_renamed_entity (struct symbol *sym)
2993 const char *raw_name;
2997 type = SYMBOL_TYPE (sym);
2998 if (type == NULL || TYPE_NFIELDS (type) < 1)
2999 error ("Improperly encoded renaming.");
3001 raw_name = TYPE_FIELD_NAME (type, 0);
3002 len = (raw_name == NULL ? 0 : strlen (raw_name)) - 5;
3004 error ("Improperly encoded renaming.");
3006 result = xmalloc (len + 1);
3007 /* FIXME: add_name_string_cleanup should be defined in parse.c */
3008 /* add_name_string_cleanup (result); */
3009 strncpy (result, raw_name, len);
3010 result[len] = '\000';
3015 /* Evaluation: Function Calls */
3017 /* Copy VAL onto the stack, using and updating *SP as the stack
3018 pointer. Return VAL as an lvalue. */
3020 static struct value *
3021 place_on_stack (struct value *val, CORE_ADDR *sp)
3023 CORE_ADDR old_sp = *sp;
3025 #ifdef DEPRECATED_STACK_ALIGN
3026 *sp = push_bytes (*sp, VALUE_CONTENTS_RAW (val),
3027 DEPRECATED_STACK_ALIGN (TYPE_LENGTH
3028 (check_typedef (VALUE_TYPE (val)))));
3030 *sp = push_bytes (*sp, VALUE_CONTENTS_RAW (val),
3031 TYPE_LENGTH (check_typedef (VALUE_TYPE (val))));
3034 VALUE_LVAL (val) = lval_memory;
3035 if (INNER_THAN (1, 2))
3036 VALUE_ADDRESS (val) = *sp;
3038 VALUE_ADDRESS (val) = old_sp;
3043 /* Return the value ACTUAL, converted to be an appropriate value for a
3044 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
3045 allocating any necessary descriptors (fat pointers), or copies of
3046 values not residing in memory, updating it as needed. */
3048 static struct value *
3049 convert_actual (struct value *actual, struct type *formal_type0,
3052 struct type *actual_type = check_typedef (VALUE_TYPE (actual));
3053 struct type *formal_type = check_typedef (formal_type0);
3054 struct type *formal_target =
3055 TYPE_CODE (formal_type) == TYPE_CODE_PTR
3056 ? check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3057 struct type *actual_target =
3058 TYPE_CODE (actual_type) == TYPE_CODE_PTR
3059 ? check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3061 if (ada_is_array_descriptor (formal_target)
3062 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3063 return make_array_descriptor (formal_type, actual, sp);
3064 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR)
3066 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3067 && ada_is_array_descriptor (actual_target))
3068 return desc_data (actual);
3069 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3071 if (VALUE_LVAL (actual) != lval_memory)
3074 actual_type = check_typedef (VALUE_TYPE (actual));
3075 val = allocate_value (actual_type);
3076 memcpy ((char *) VALUE_CONTENTS_RAW (val),
3077 (char *) VALUE_CONTENTS (actual),
3078 TYPE_LENGTH (actual_type));
3079 actual = place_on_stack (val, sp);
3081 return value_addr (actual);
3084 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3085 return ada_value_ind (actual);
3091 /* Push a descriptor of type TYPE for array value ARR on the stack at
3092 *SP, updating *SP to reflect the new descriptor. Return either
3093 an lvalue representing the new descriptor, or (if TYPE is a pointer-
3094 to-descriptor type rather than a descriptor type), a struct value*
3095 representing a pointer to this descriptor. */
3097 static struct value *
3098 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3100 struct type *bounds_type = desc_bounds_type (type);
3101 struct type *desc_type = desc_base_type (type);
3102 struct value *descriptor = allocate_value (desc_type);
3103 struct value *bounds = allocate_value (bounds_type);
3104 CORE_ADDR bounds_addr;
3107 for (i = ada_array_arity (check_typedef (VALUE_TYPE (arr))); i > 0; i -= 1)
3109 modify_general_field (VALUE_CONTENTS (bounds),
3110 value_as_long (ada_array_bound (arr, i, 0)),
3111 desc_bound_bitpos (bounds_type, i, 0),
3112 desc_bound_bitsize (bounds_type, i, 0));
3113 modify_general_field (VALUE_CONTENTS (bounds),
3114 value_as_long (ada_array_bound (arr, i, 1)),
3115 desc_bound_bitpos (bounds_type, i, 1),
3116 desc_bound_bitsize (bounds_type, i, 1));
3119 bounds = place_on_stack (bounds, sp);
3121 modify_general_field (VALUE_CONTENTS (descriptor),
3123 fat_pntr_data_bitpos (desc_type),
3124 fat_pntr_data_bitsize (desc_type));
3125 modify_general_field (VALUE_CONTENTS (descriptor),
3126 VALUE_ADDRESS (bounds),
3127 fat_pntr_bounds_bitpos (desc_type),
3128 fat_pntr_bounds_bitsize (desc_type));
3130 descriptor = place_on_stack (descriptor, sp);
3132 if (TYPE_CODE (type) == TYPE_CODE_PTR)
3133 return value_addr (descriptor);
3139 /* Assuming a dummy frame has been established on the target, perform any
3140 conversions needed for calling function FUNC on the NARGS actual
3141 parameters in ARGS, other than standard C conversions. Does
3142 nothing if FUNC does not have Ada-style prototype data, or if NARGS
3143 does not match the number of arguments expected. Use *SP as a
3144 stack pointer for additional data that must be pushed, updating its
3148 ada_convert_actuals (struct value *func, int nargs, struct value *args[],
3153 if (TYPE_NFIELDS (VALUE_TYPE (func)) == 0
3154 || nargs != TYPE_NFIELDS (VALUE_TYPE (func)))
3157 for (i = 0; i < nargs; i += 1)
3159 convert_actual (args[i], TYPE_FIELD_TYPE (VALUE_TYPE (func), i), sp);
3166 /* The vectors of symbols and blocks ultimately returned from */
3167 /* ada_lookup_symbol_list. */
3169 /* Current size of defn_symbols and defn_blocks */
3170 static size_t defn_vector_size = 0;
3172 /* Current number of symbols found. */
3173 static int ndefns = 0;
3175 static struct symbol **defn_symbols = NULL;
3176 static struct block **defn_blocks = NULL;
3178 /* Return the result of a standard (literal, C-like) lookup of NAME in
3181 static struct symbol *
3182 standard_lookup (const char *name, domain_enum domain)
3185 sym = lookup_symbol (name, (struct block *) NULL, domain, 0, NULL);
3190 /* Non-zero iff there is at least one non-function/non-enumeral symbol */
3191 /* in SYMS[0..N-1]. We treat enumerals as functions, since they */
3192 /* contend in overloading in the same way. */
3194 is_nonfunction (struct symbol *syms[], int n)
3198 for (i = 0; i < n; i += 1)
3199 if (TYPE_CODE (SYMBOL_TYPE (syms[i])) != TYPE_CODE_FUNC
3200 && TYPE_CODE (SYMBOL_TYPE (syms[i])) != TYPE_CODE_ENUM)
3206 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
3207 struct types. Otherwise, they may not. */
3210 equiv_types (struct type *type0, struct type *type1)
3214 if (type0 == NULL || type1 == NULL
3215 || TYPE_CODE (type0) != TYPE_CODE (type1))
3217 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
3218 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
3219 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
3220 && DEPRECATED_STREQ (ada_type_name (type0), ada_type_name (type1)))
3226 /* True iff SYM0 represents the same entity as SYM1, or one that is
3227 no more defined than that of SYM1. */
3230 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
3234 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
3235 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
3238 switch (SYMBOL_CLASS (sym0))
3244 struct type *type0 = SYMBOL_TYPE (sym0);
3245 struct type *type1 = SYMBOL_TYPE (sym1);
3246 char *name0 = DEPRECATED_SYMBOL_NAME (sym0);
3247 char *name1 = DEPRECATED_SYMBOL_NAME (sym1);
3248 int len0 = strlen (name0);
3250 TYPE_CODE (type0) == TYPE_CODE (type1)
3251 && (equiv_types (type0, type1)
3252 || (len0 < strlen (name1) && DEPRECATED_STREQN (name0, name1, len0)
3253 && DEPRECATED_STREQN (name1 + len0, "___XV", 5)));
3256 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
3257 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
3263 /* Append SYM to the end of defn_symbols, and BLOCK to the end of
3264 defn_blocks, updating ndefns, and expanding defn_symbols and
3265 defn_blocks as needed. Do not include SYM if it is a duplicate. */
3268 add_defn_to_vec (struct symbol *sym, struct block *block)
3273 if (SYMBOL_TYPE (sym) != NULL)
3274 CHECK_TYPEDEF (SYMBOL_TYPE (sym));
3275 for (i = 0; i < ndefns; i += 1)
3277 if (lesseq_defined_than (sym, defn_symbols[i]))
3279 else if (lesseq_defined_than (defn_symbols[i], sym))
3281 defn_symbols[i] = sym;
3282 defn_blocks[i] = block;
3287 tmp = defn_vector_size;
3288 GROW_VECT (defn_symbols, tmp, ndefns + 2);
3289 GROW_VECT (defn_blocks, defn_vector_size, ndefns + 2);
3291 defn_symbols[ndefns] = sym;
3292 defn_blocks[ndefns] = block;
3296 /* Look, in partial_symtab PST, for symbol NAME in given domain.
3297 Check the global symbols if GLOBAL, the static symbols if not. Do
3298 wild-card match if WILD. */
3300 static struct partial_symbol *
3301 ada_lookup_partial_symbol (struct partial_symtab *pst, const char *name,
3302 int global, domain_enum domain, int wild)
3304 struct partial_symbol **start;
3305 int name_len = strlen (name);
3306 int length = (global ? pst->n_global_syms : pst->n_static_syms);
3315 pst->objfile->global_psymbols.list + pst->globals_offset :
3316 pst->objfile->static_psymbols.list + pst->statics_offset);
3320 for (i = 0; i < length; i += 1)
3322 struct partial_symbol *psym = start[i];
3324 if (SYMBOL_DOMAIN (psym) == domain &&
3325 wild_match (name, name_len, DEPRECATED_SYMBOL_NAME (psym)))
3339 int M = (U + i) >> 1;
3340 struct partial_symbol *psym = start[M];
3341 if (DEPRECATED_SYMBOL_NAME (psym)[0] < name[0])
3343 else if (DEPRECATED_SYMBOL_NAME (psym)[0] > name[0])
3345 else if (strcmp (DEPRECATED_SYMBOL_NAME (psym), name) < 0)
3356 struct partial_symbol *psym = start[i];
3358 if (SYMBOL_DOMAIN (psym) == domain)
3360 int cmp = strncmp (name, DEPRECATED_SYMBOL_NAME (psym), name_len);
3368 && is_name_suffix (DEPRECATED_SYMBOL_NAME (psym) + name_len))
3381 int M = (U + i) >> 1;
3382 struct partial_symbol *psym = start[M];
3383 if (DEPRECATED_SYMBOL_NAME (psym)[0] < '_')
3385 else if (DEPRECATED_SYMBOL_NAME (psym)[0] > '_')
3387 else if (strcmp (DEPRECATED_SYMBOL_NAME (psym), "_ada_") < 0)
3398 struct partial_symbol *psym = start[i];
3400 if (SYMBOL_DOMAIN (psym) == domain)
3404 cmp = (int) '_' - (int) DEPRECATED_SYMBOL_NAME (psym)[0];
3407 cmp = strncmp ("_ada_", DEPRECATED_SYMBOL_NAME (psym), 5);
3409 cmp = strncmp (name, DEPRECATED_SYMBOL_NAME (psym) + 5, name_len);
3418 && is_name_suffix (DEPRECATED_SYMBOL_NAME (psym) + name_len + 5))
3429 /* Find a symbol table containing symbol SYM or NULL if none. */
3430 static struct symtab *
3431 symtab_for_sym (struct symbol *sym)
3434 struct objfile *objfile;
3436 struct symbol *tmp_sym;
3437 struct dict_iterator iter;
3440 ALL_SYMTABS (objfile, s)
3442 switch (SYMBOL_CLASS (sym))
3450 case LOC_CONST_BYTES:
3451 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3452 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
3454 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3455 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
3461 switch (SYMBOL_CLASS (sym))
3467 case LOC_REGPARM_ADDR:
3472 case LOC_BASEREG_ARG:
3474 case LOC_COMPUTED_ARG:
3475 for (j = FIRST_LOCAL_BLOCK;
3476 j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
3478 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
3479 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
3490 /* Return a minimal symbol matching NAME according to Ada demangling
3491 rules. Returns NULL if there is no such minimal symbol. */
3493 struct minimal_symbol *
3494 ada_lookup_minimal_symbol (const char *name)
3496 struct objfile *objfile;
3497 struct minimal_symbol *msymbol;
3498 int wild_match = (strstr (name, "__") == NULL);
3500 ALL_MSYMBOLS (objfile, msymbol)
3502 if (ada_match_name (DEPRECATED_SYMBOL_NAME (msymbol), name, wild_match)
3503 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
3510 /* For all subprograms that statically enclose the subprogram of the
3511 * selected frame, add symbols matching identifier NAME in DOMAIN
3512 * and their blocks to vectors *defn_symbols and *defn_blocks, as for
3513 * ada_add_block_symbols (q.v.). If WILD, treat as NAME with a
3514 * wildcard prefix. At the moment, this function uses a heuristic to
3515 * find the frames of enclosing subprograms: it treats the
3516 * pointer-sized value at location 0 from the local-variable base of a
3517 * frame as a static link, and then searches up the call stack for a
3518 * frame with that same local-variable base. */
3520 add_symbols_from_enclosing_procs (const char *name, domain_enum domain,
3524 static struct symbol static_link_sym;
3525 static struct symbol *static_link;
3527 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
3528 struct frame_info *frame;
3529 struct frame_info *target_frame;
3531 if (static_link == NULL)
3533 /* Initialize the local variable symbol that stands for the
3534 * static link (when it exists). */
3535 static_link = &static_link_sym;
3536 DEPRECATED_SYMBOL_NAME (static_link) = "";
3537 SYMBOL_LANGUAGE (static_link) = language_unknown;
3538 SYMBOL_CLASS (static_link) = LOC_LOCAL;
3539 SYMBOL_DOMAIN (static_link) = VAR_DOMAIN;
3540 SYMBOL_TYPE (static_link) = lookup_pointer_type (builtin_type_void);
3541 SYMBOL_VALUE (static_link) =
3542 -(long) TYPE_LENGTH (SYMBOL_TYPE (static_link));
3545 frame = deprecated_selected_frame;
3546 while (frame != NULL && ndefns == 0)
3548 struct block *block;
3549 struct value *target_link_val = read_var_value (static_link, frame);
3550 CORE_ADDR target_link;
3552 if (target_link_val == NULL)
3556 target_link = target_link_val;
3560 frame = get_prev_frame (frame);
3562 while (frame != NULL && DEPRECATED_FRAME_LOCALS_ADDRESS (frame) != target_link);
3567 block = get_frame_block (frame, 0);
3568 while (block != NULL && block_function (block) != NULL && ndefns == 0)
3570 ada_add_block_symbols (block, name, domain, NULL, wild_match);
3572 block = BLOCK_SUPERBLOCK (block);
3576 do_cleanups (old_chain);
3580 /* True if TYPE is definitely an artificial type supplied to a symbol
3581 * for which no debugging information was given in the symbol file. */
3583 is_nondebugging_type (struct type *type)
3585 char *name = ada_type_name (type);
3586 return (name != NULL && DEPRECATED_STREQ (name, "<variable, no debug info>"));
3589 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
3590 * duplicate other symbols in the list. (The only case I know of where
3591 * this happens is when object files containing stabs-in-ecoff are
3592 * linked with files containing ordinary ecoff debugging symbols (or no
3593 * debugging symbols)). Modifies SYMS to squeeze out deleted symbols,
3594 * and applies the same modification to BLOCKS to maintain the
3595 * correspondence between SYMS[i] and BLOCKS[i]. Returns the number
3596 * of symbols in the modified list. */
3598 remove_extra_symbols (struct symbol **syms, struct block **blocks, int nsyms)
3605 if (DEPRECATED_SYMBOL_NAME (syms[i]) != NULL
3606 && SYMBOL_CLASS (syms[i]) == LOC_STATIC
3607 && is_nondebugging_type (SYMBOL_TYPE (syms[i])))
3609 for (j = 0; j < nsyms; j += 1)
3612 && DEPRECATED_SYMBOL_NAME (syms[j]) != NULL
3613 && DEPRECATED_STREQ (DEPRECATED_SYMBOL_NAME (syms[i]), DEPRECATED_SYMBOL_NAME (syms[j]))
3614 && SYMBOL_CLASS (syms[i]) == SYMBOL_CLASS (syms[j])
3615 && SYMBOL_VALUE_ADDRESS (syms[i])
3616 == SYMBOL_VALUE_ADDRESS (syms[j]))
3619 for (k = i + 1; k < nsyms; k += 1)
3621 syms[k - 1] = syms[k];
3622 blocks[k - 1] = blocks[k];
3636 /* Find symbols in DOMAIN matching NAME, in BLOCK0 and enclosing
3637 scope and in global scopes, returning the number of matches. Sets
3638 *SYMS to point to a vector of matching symbols, with *BLOCKS
3639 pointing to the vector of corresponding blocks in which those
3640 symbols reside. These two vectors are transient---good only to the
3641 next call of ada_lookup_symbol_list. Any non-function/non-enumeral symbol
3642 match within the nest of blocks whose innermost member is BLOCK0,
3643 is the outermost match returned (no other matches in that or
3644 enclosing blocks is returned). If there are any matches in or
3645 surrounding BLOCK0, then these alone are returned. */
3648 ada_lookup_symbol_list (const char *name, struct block *block0,
3649 domain_enum domain, struct symbol ***syms,
3650 struct block ***blocks)
3654 struct partial_symtab *ps;
3655 struct blockvector *bv;
3656 struct objfile *objfile;
3658 struct block *block;
3659 struct minimal_symbol *msymbol;
3660 int wild_match = (strstr (name, "__") == NULL);
3670 /* Search specified block and its superiors. */
3673 while (block != NULL)
3675 ada_add_block_symbols (block, name, domain, NULL, wild_match);
3677 /* If we found a non-function match, assume that's the one. */
3678 if (is_nonfunction (defn_symbols, ndefns))
3681 block = BLOCK_SUPERBLOCK (block);
3684 /* If we found ANY matches in the specified BLOCK, we're done. */
3691 /* Now add symbols from all global blocks: symbol tables, minimal symbol
3692 tables, and psymtab's */
3694 ALL_SYMTABS (objfile, s)
3699 bv = BLOCKVECTOR (s);
3700 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3701 ada_add_block_symbols (block, name, domain, objfile, wild_match);
3704 if (domain == VAR_DOMAIN)
3706 ALL_MSYMBOLS (objfile, msymbol)
3708 if (ada_match_name (DEPRECATED_SYMBOL_NAME (msymbol), name, wild_match))
3710 switch (MSYMBOL_TYPE (msymbol))
3712 case mst_solib_trampoline:
3715 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
3718 int old_ndefns = ndefns;
3720 bv = BLOCKVECTOR (s);
3721 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3722 ada_add_block_symbols (block,
3723 DEPRECATED_SYMBOL_NAME (msymbol),
3724 domain, objfile, wild_match);
3725 if (ndefns == old_ndefns)
3727 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3728 ada_add_block_symbols (block,
3729 DEPRECATED_SYMBOL_NAME (msymbol),
3739 ALL_PSYMTABS (objfile, ps)
3743 && ada_lookup_partial_symbol (ps, name, 1, domain, wild_match))
3745 s = PSYMTAB_TO_SYMTAB (ps);
3748 bv = BLOCKVECTOR (s);
3749 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3750 ada_add_block_symbols (block, name, domain, objfile, wild_match);
3754 /* Now add symbols from all per-file blocks if we've gotten no hits.
3755 (Not strictly correct, but perhaps better than an error).
3756 Do the symtabs first, then check the psymtabs */
3761 ALL_SYMTABS (objfile, s)
3766 bv = BLOCKVECTOR (s);
3767 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3768 ada_add_block_symbols (block, name, domain, objfile, wild_match);
3771 ALL_PSYMTABS (objfile, ps)
3775 && ada_lookup_partial_symbol (ps, name, 0, domain, wild_match))
3777 s = PSYMTAB_TO_SYMTAB (ps);
3778 bv = BLOCKVECTOR (s);
3781 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3782 ada_add_block_symbols (block, name, domain,
3783 objfile, wild_match);
3788 /* Finally, we try to find NAME as a local symbol in some lexically
3789 enclosing block. We do this last, expecting this case to be
3793 add_symbols_from_enclosing_procs (name, domain, wild_match);
3799 ndefns = remove_extra_symbols (defn_symbols, defn_blocks, ndefns);
3802 *syms = defn_symbols;
3803 *blocks = defn_blocks;
3810 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
3811 * scope and in global scopes, or NULL if none. NAME is folded to
3812 * lower case first, unless it is surrounded in single quotes.
3813 * Otherwise, the result is as for ada_lookup_symbol_list, but is
3814 * disambiguated by user query if needed. */
3817 ada_lookup_symbol (const char *name, struct block *block0,
3820 struct symbol **candidate_syms;
3821 struct block **candidate_blocks;
3824 n_candidates = ada_lookup_symbol_list (name,
3826 &candidate_syms, &candidate_blocks);
3828 if (n_candidates == 0)
3830 else if (n_candidates != 1)
3831 user_select_syms (candidate_syms, candidate_blocks, n_candidates, 1);
3833 return candidate_syms[0];
3837 /* True iff STR is a possible encoded suffix of a normal Ada name
3838 * that is to be ignored for matching purposes. Suffixes of parallel
3839 * names (e.g., XVE) are not included here. Currently, the possible suffixes
3840 * are given by the regular expression:
3841 * (X[nb]*)?(__[0-9]+|\$[0-9]+|___(LJM|X([FDBUP].*|R[^T]?)))?$
3845 is_name_suffix (const char *str)
3851 while (str[0] != '_' && str[0] != '\0')
3853 if (str[0] != 'n' && str[0] != 'b')
3858 if (str[0] == '\000')
3862 if (str[1] != '_' || str[2] == '\000')
3866 if (DEPRECATED_STREQ (str + 3, "LJM"))
3870 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B' ||
3871 str[4] == 'U' || str[4] == 'P')
3873 if (str[4] == 'R' && str[5] != 'T')
3877 for (k = 2; str[k] != '\0'; k += 1)
3878 if (!isdigit (str[k]))
3882 if (str[0] == '$' && str[1] != '\000')
3884 for (k = 1; str[k] != '\0'; k += 1)
3885 if (!isdigit (str[k]))
3892 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
3893 * PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1. Ignores
3894 * informational suffixes of NAME (i.e., for which is_name_suffix is
3897 wild_match (const char *patn, int patn_len, const char *name)
3902 name_len = strlen (name);
3903 if (name_len >= patn_len + 5 && DEPRECATED_STREQN (name, "_ada_", 5)
3904 && DEPRECATED_STREQN (patn, name + 5, patn_len)
3905 && is_name_suffix (name + patn_len + 5))
3908 while (name_len >= patn_len)
3910 if (DEPRECATED_STREQN (patn, name, patn_len) && is_name_suffix (name + patn_len))
3918 && name[0] != '.' && (name[0] != '_' || name[1] != '_'));
3923 if (!islower (name[2]))
3930 if (!islower (name[1]))
3941 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
3942 vector *defn_symbols, updating *defn_symbols (if necessary), *SZ (the size of
3943 the vector *defn_symbols), and *ndefns (the number of symbols
3944 currently stored in *defn_symbols). If WILD, treat as NAME with a
3945 wildcard prefix. OBJFILE is the section containing BLOCK. */
3948 ada_add_block_symbols (struct block *block, const char *name,
3949 domain_enum domain, struct objfile *objfile,
3952 struct dict_iterator iter;
3953 int name_len = strlen (name);
3954 /* A matching argument symbol, if any. */
3955 struct symbol *arg_sym;
3956 /* Set true when we find a matching non-argument symbol */
3965 ALL_BLOCK_SYMBOLS (block, iter, sym)
3967 if (SYMBOL_DOMAIN (sym) == domain &&
3968 wild_match (name, name_len, DEPRECATED_SYMBOL_NAME (sym)))
3970 switch (SYMBOL_CLASS (sym))
3976 case LOC_REGPARM_ADDR:
3977 case LOC_BASEREG_ARG:
3978 case LOC_COMPUTED_ARG:
3981 case LOC_UNRESOLVED:
3985 fill_in_ada_prototype (sym);
3986 add_defn_to_vec (fixup_symbol_section (sym, objfile), block);
3994 ALL_BLOCK_SYMBOLS (block, iter, sym)
3996 if (SYMBOL_DOMAIN (sym) == domain)
3998 int cmp = strncmp (name, DEPRECATED_SYMBOL_NAME (sym), name_len);
4001 && is_name_suffix (DEPRECATED_SYMBOL_NAME (sym) + name_len))
4003 switch (SYMBOL_CLASS (sym))
4009 case LOC_REGPARM_ADDR:
4010 case LOC_BASEREG_ARG:
4011 case LOC_COMPUTED_ARG:
4014 case LOC_UNRESOLVED:
4018 fill_in_ada_prototype (sym);
4019 add_defn_to_vec (fixup_symbol_section (sym, objfile),
4028 if (!found_sym && arg_sym != NULL)
4030 fill_in_ada_prototype (arg_sym);
4031 add_defn_to_vec (fixup_symbol_section (arg_sym, objfile), block);
4039 ALL_BLOCK_SYMBOLS (block, iter, sym)
4041 if (SYMBOL_DOMAIN (sym) == domain)
4045 cmp = (int) '_' - (int) DEPRECATED_SYMBOL_NAME (sym)[0];
4048 cmp = strncmp ("_ada_", DEPRECATED_SYMBOL_NAME (sym), 5);
4050 cmp = strncmp (name, DEPRECATED_SYMBOL_NAME (sym) + 5, name_len);
4054 && is_name_suffix (DEPRECATED_SYMBOL_NAME (sym) + name_len + 5))
4056 switch (SYMBOL_CLASS (sym))
4062 case LOC_REGPARM_ADDR:
4063 case LOC_BASEREG_ARG:
4064 case LOC_COMPUTED_ARG:
4067 case LOC_UNRESOLVED:
4071 fill_in_ada_prototype (sym);
4072 add_defn_to_vec (fixup_symbol_section (sym, objfile),
4080 /* NOTE: This really shouldn't be needed for _ada_ symbols.
4081 They aren't parameters, right? */
4082 if (!found_sym && arg_sym != NULL)
4084 fill_in_ada_prototype (arg_sym);
4085 add_defn_to_vec (fixup_symbol_section (arg_sym, objfile), block);
4091 /* Function Types */
4093 /* Assuming that SYM is the symbol for a function, fill in its type
4094 with prototype information, if it is not already there. */
4097 fill_in_ada_prototype (struct symbol *func)
4101 struct dict_iterator iter;
4108 || TYPE_CODE (SYMBOL_TYPE (func)) != TYPE_CODE_FUNC
4109 || TYPE_FIELDS (SYMBOL_TYPE (func)) != NULL)
4112 /* We make each function type unique, so that each may have its own */
4113 /* parameter types. This particular way of doing so wastes space: */
4114 /* it would be nicer to build the argument types while the original */
4115 /* function type is being built (FIXME). */
4116 rtype = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (func)));
4117 ftype = alloc_type (TYPE_OBJFILE (SYMBOL_TYPE (func)));
4118 make_function_type (rtype, &ftype);
4119 SYMBOL_TYPE (func) = ftype;
4121 b = SYMBOL_BLOCK_VALUE (func);
4125 TYPE_FIELDS (ftype) =
4126 (struct field *) xmalloc (sizeof (struct field) * max_fields);
4127 ALL_BLOCK_SYMBOLS (b, iter, sym)
4129 GROW_VECT (TYPE_FIELDS (ftype), max_fields, nargs + 1);
4131 switch (SYMBOL_CLASS (sym))
4134 case LOC_REGPARM_ADDR:
4135 TYPE_FIELD_BITPOS (ftype, nargs) = nargs;
4136 TYPE_FIELD_BITSIZE (ftype, nargs) = 0;
4137 TYPE_FIELD_STATIC_KIND (ftype, nargs) = 0;
4138 TYPE_FIELD_TYPE (ftype, nargs) =
4139 lookup_pointer_type (check_typedef (SYMBOL_TYPE (sym)));
4140 TYPE_FIELD_NAME (ftype, nargs) = DEPRECATED_SYMBOL_NAME (sym);
4148 case LOC_BASEREG_ARG:
4149 case LOC_COMPUTED_ARG:
4150 TYPE_FIELD_BITPOS (ftype, nargs) = nargs;
4151 TYPE_FIELD_BITSIZE (ftype, nargs) = 0;
4152 TYPE_FIELD_STATIC_KIND (ftype, nargs) = 0;
4153 TYPE_FIELD_TYPE (ftype, nargs) = check_typedef (SYMBOL_TYPE (sym));
4154 TYPE_FIELD_NAME (ftype, nargs) = DEPRECATED_SYMBOL_NAME (sym);
4164 /* Re-allocate fields vector; if there are no fields, make the */
4165 /* fields pointer non-null anyway, to mark that this function type */
4166 /* has been filled in. */
4168 TYPE_NFIELDS (ftype) = nargs;
4171 static struct field dummy_field = { 0, 0, 0, 0 };
4172 xfree (TYPE_FIELDS (ftype));
4173 TYPE_FIELDS (ftype) = &dummy_field;
4177 struct field *fields =
4178 (struct field *) TYPE_ALLOC (ftype, nargs * sizeof (struct field));
4179 memcpy ((char *) fields,
4180 (char *) TYPE_FIELDS (ftype), nargs * sizeof (struct field));
4181 xfree (TYPE_FIELDS (ftype));
4182 TYPE_FIELDS (ftype) = fields;
4187 /* Breakpoint-related */
4189 char no_symtab_msg[] =
4190 "No symbol table is loaded. Use the \"file\" command.";
4192 /* Assuming that LINE is pointing at the beginning of an argument to
4193 'break', return a pointer to the delimiter for the initial segment
4194 of that name. This is the first ':', ' ', or end of LINE.
4197 ada_start_decode_line_1 (char *line)
4199 /* [NOTE: strpbrk would be more elegant, but I am reluctant to be
4200 the first to use such a library function in GDB code.] */
4202 for (p = line; *p != '\000' && *p != ' ' && *p != ':'; p += 1)
4207 /* *SPEC points to a function and line number spec (as in a break
4208 command), following any initial file name specification.
4210 Return all symbol table/line specfications (sals) consistent with the
4211 information in *SPEC and FILE_TABLE in the
4213 + FILE_TABLE is null, or the sal refers to a line in the file
4214 named by FILE_TABLE.
4215 + If *SPEC points to an argument with a trailing ':LINENUM',
4216 then the sal refers to that line (or one following it as closely as
4218 + If *SPEC does not start with '*', the sal is in a function with
4221 Returns with 0 elements if no matching non-minimal symbols found.
4223 If *SPEC begins with a function name of the form <NAME>, then NAME
4224 is taken as a literal name; otherwise the function name is subject
4225 to the usual mangling.
4227 *SPEC is updated to point after the function/line number specification.
4229 FUNFIRSTLINE is non-zero if we desire the first line of real code
4230 in each function (this is ignored in the presence of a LINENUM spec.).
4232 If CANONICAL is non-NULL, and if any of the sals require a
4233 'canonical line spec', then *CANONICAL is set to point to an array
4234 of strings, corresponding to and equal in length to the returned
4235 list of sals, such that (*CANONICAL)[i] is non-null and contains a
4236 canonical line spec for the ith returned sal, if needed. If no
4237 canonical line specs are required and CANONICAL is non-null,
4238 *CANONICAL is set to NULL.
4240 A 'canonical line spec' is simply a name (in the format of the
4241 breakpoint command) that uniquely identifies a breakpoint position,
4242 with no further contextual information or user selection. It is
4243 needed whenever the file name, function name, and line number
4244 information supplied is insufficient for this unique
4245 identification. Currently overloaded functions, the name '*',
4246 or static functions without a filename yield a canonical line spec.
4247 The array and the line spec strings are allocated on the heap; it
4248 is the caller's responsibility to free them. */
4250 struct symtabs_and_lines
4251 ada_finish_decode_line_1 (char **spec, struct symtab *file_table,
4252 int funfirstline, char ***canonical)
4254 struct symbol **symbols;
4255 struct block **blocks;
4256 struct block *block;
4257 int n_matches, i, line_num;
4258 struct symtabs_and_lines selected;
4259 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
4264 char *unquoted_name;
4266 if (file_table == NULL)
4267 block = get_selected_block (NULL);
4269 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_table), STATIC_BLOCK);
4271 if (canonical != NULL)
4272 *canonical = (char **) NULL;
4279 while (**spec != '\000' &&
4280 !strchr (ada_completer_word_break_characters, **spec))
4286 if (file_table != NULL && (*spec)[0] == ':' && isdigit ((*spec)[1]))
4288 line_num = strtol (*spec + 1, spec, 10);
4289 while (**spec == ' ' || **spec == '\t')
4296 error ("Wild-card function with no line number or file name.");
4298 return all_sals_for_line (file_table->filename, line_num, canonical);
4301 if (name[0] == '\'')
4309 unquoted_name = (char *) alloca (len - 1);
4310 memcpy (unquoted_name, name + 1, len - 2);
4311 unquoted_name[len - 2] = '\000';
4316 unquoted_name = (char *) alloca (len + 1);
4317 memcpy (unquoted_name, name, len);
4318 unquoted_name[len] = '\000';
4319 lower_name = (char *) alloca (len + 1);
4320 for (i = 0; i < len; i += 1)
4321 lower_name[i] = tolower (name[i]);
4322 lower_name[len] = '\000';
4326 if (lower_name != NULL)
4327 n_matches = ada_lookup_symbol_list (ada_mangle (lower_name), block,
4328 VAR_DOMAIN, &symbols, &blocks);
4330 n_matches = ada_lookup_symbol_list (unquoted_name, block,
4331 VAR_DOMAIN, &symbols, &blocks);
4332 if (n_matches == 0 && line_num >= 0)
4333 error ("No line number information found for %s.", unquoted_name);
4334 else if (n_matches == 0)
4336 #ifdef HPPA_COMPILER_BUG
4337 /* FIXME: See comment in symtab.c::decode_line_1 */
4339 volatile struct symtab_and_line val;
4340 #define volatile /*nothing */
4342 struct symtab_and_line val;
4344 struct minimal_symbol *msymbol;
4349 if (lower_name != NULL)
4350 msymbol = ada_lookup_minimal_symbol (ada_mangle (lower_name));
4351 if (msymbol == NULL)
4352 msymbol = ada_lookup_minimal_symbol (unquoted_name);
4353 if (msymbol != NULL)
4355 val.pc = SYMBOL_VALUE_ADDRESS (msymbol);
4356 val.section = SYMBOL_BFD_SECTION (msymbol);
4359 val.pc += FUNCTION_START_OFFSET;
4360 SKIP_PROLOGUE (val.pc);
4362 selected.sals = (struct symtab_and_line *)
4363 xmalloc (sizeof (struct symtab_and_line));
4364 selected.sals[0] = val;
4369 if (!have_full_symbols () &&
4370 !have_partial_symbols () && !have_minimal_symbols ())
4371 error (no_symtab_msg);
4373 error ("Function \"%s\" not defined.", unquoted_name);
4374 return selected; /* for lint */
4380 find_sal_from_funcs_and_line (file_table->filename, line_num,
4381 symbols, n_matches);
4386 user_select_syms (symbols, blocks, n_matches, n_matches);
4389 selected.sals = (struct symtab_and_line *)
4390 xmalloc (sizeof (struct symtab_and_line) * selected.nelts);
4391 memset (selected.sals, 0, selected.nelts * sizeof (selected.sals[i]));
4392 make_cleanup (xfree, selected.sals);
4395 while (i < selected.nelts)
4397 if (SYMBOL_CLASS (symbols[i]) == LOC_BLOCK)
4398 selected.sals[i] = find_function_start_sal (symbols[i], funfirstline);
4399 else if (SYMBOL_LINE (symbols[i]) != 0)
4401 selected.sals[i].symtab = symtab_for_sym (symbols[i]);
4402 selected.sals[i].line = SYMBOL_LINE (symbols[i]);
4404 else if (line_num >= 0)
4406 /* Ignore this choice */
4407 symbols[i] = symbols[selected.nelts - 1];
4408 blocks[i] = blocks[selected.nelts - 1];
4409 selected.nelts -= 1;
4413 error ("Line number not known for symbol \"%s\"", unquoted_name);
4417 if (canonical != NULL && (line_num >= 0 || n_matches > 1))
4419 *canonical = (char **) xmalloc (sizeof (char *) * selected.nelts);
4420 for (i = 0; i < selected.nelts; i += 1)
4422 extended_canonical_line_spec (selected.sals[i],
4423 SYMBOL_PRINT_NAME (symbols[i]));
4426 discard_cleanups (old_chain);
4430 /* The (single) sal corresponding to line LINE_NUM in a symbol table
4431 with file name FILENAME that occurs in one of the functions listed
4432 in SYMBOLS[0 .. NSYMS-1]. */
4433 static struct symtabs_and_lines
4434 find_sal_from_funcs_and_line (const char *filename, int line_num,
4435 struct symbol **symbols, int nsyms)
4437 struct symtabs_and_lines sals;
4438 int best_index, best;
4439 struct linetable *best_linetable;
4440 struct objfile *objfile;
4442 struct symtab *best_symtab;
4444 read_all_symtabs (filename);
4447 best_linetable = NULL;
4450 ALL_SYMTABS (objfile, s)
4452 struct linetable *l;
4457 if (!DEPRECATED_STREQ (filename, s->filename))
4460 ind = find_line_in_linetable (l, line_num, symbols, nsyms, &exact);
4470 if (best == 0 || l->item[ind].line < best)
4472 best = l->item[ind].line;
4481 error ("Line number not found in designated function.");
4486 sals.sals = (struct symtab_and_line *) xmalloc (sizeof (sals.sals[0]));
4488 init_sal (&sals.sals[0]);
4490 sals.sals[0].line = best_linetable->item[best_index].line;
4491 sals.sals[0].pc = best_linetable->item[best_index].pc;
4492 sals.sals[0].symtab = best_symtab;
4497 /* Return the index in LINETABLE of the best match for LINE_NUM whose
4498 pc falls within one of the functions denoted by SYMBOLS[0..NSYMS-1].
4499 Set *EXACTP to the 1 if the match is exact, and 0 otherwise. */
4501 find_line_in_linetable (struct linetable *linetable, int line_num,
4502 struct symbol **symbols, int nsyms, int *exactp)
4504 int i, len, best_index, best;
4506 if (line_num <= 0 || linetable == NULL)
4509 len = linetable->nitems;
4510 for (i = 0, best_index = -1, best = 0; i < len; i += 1)
4513 struct linetable_entry *item = &(linetable->item[i]);
4515 for (k = 0; k < nsyms; k += 1)
4517 if (symbols[k] != NULL && SYMBOL_CLASS (symbols[k]) == LOC_BLOCK
4518 && item->pc >= BLOCK_START (SYMBOL_BLOCK_VALUE (symbols[k]))
4519 && item->pc < BLOCK_END (SYMBOL_BLOCK_VALUE (symbols[k])))
4526 if (item->line == line_num)
4532 if (item->line > line_num && (best == 0 || item->line < best))
4543 /* Find the smallest k >= LINE_NUM such that k is a line number in
4544 LINETABLE, and k falls strictly within a named function that begins at
4545 or before LINE_NUM. Return -1 if there is no such k. */
4547 nearest_line_number_in_linetable (struct linetable *linetable, int line_num)
4551 if (line_num <= 0 || linetable == NULL || linetable->nitems == 0)
4553 len = linetable->nitems;
4560 struct linetable_entry *item = &(linetable->item[i]);
4562 if (item->line >= line_num && item->line < best)
4565 CORE_ADDR start, end;
4568 find_pc_partial_function (item->pc, &func_name, &start, &end);
4570 if (func_name != NULL && item->pc < end)
4572 if (item->line == line_num)
4576 struct symbol *sym =
4577 standard_lookup (func_name, VAR_DOMAIN);
4578 if (is_plausible_func_for_line (sym, line_num))
4584 while (i < len && linetable->item[i].pc < end);
4594 return (best == INT_MAX) ? -1 : best;
4598 /* Return the next higher index, k, into LINETABLE such that k > IND,
4599 entry k in LINETABLE has a line number equal to LINE_NUM, k
4600 corresponds to a PC that is in a function different from that
4601 corresponding to IND, and falls strictly within a named function
4602 that begins at a line at or preceding STARTING_LINE.
4603 Return -1 if there is no such k.
4604 IND == -1 corresponds to no function. */
4607 find_next_line_in_linetable (struct linetable *linetable, int line_num,
4608 int starting_line, int ind)
4612 if (line_num <= 0 || linetable == NULL || ind >= linetable->nitems)
4614 len = linetable->nitems;
4618 CORE_ADDR start, end;
4620 if (find_pc_partial_function (linetable->item[ind].pc,
4621 (char **) NULL, &start, &end))
4623 while (ind < len && linetable->item[ind].pc < end)
4636 struct linetable_entry *item = &(linetable->item[i]);
4638 if (item->line >= line_num)
4641 CORE_ADDR start, end;
4644 find_pc_partial_function (item->pc, &func_name, &start, &end);
4646 if (func_name != NULL && item->pc < end)
4648 if (item->line == line_num)
4650 struct symbol *sym =
4651 standard_lookup (func_name, VAR_DOMAIN);
4652 if (is_plausible_func_for_line (sym, starting_line))
4656 while ((i + 1) < len && linetable->item[i + 1].pc < end)
4668 /* True iff function symbol SYM starts somewhere at or before line #
4671 is_plausible_func_for_line (struct symbol *sym, int line_num)
4673 struct symtab_and_line start_sal;
4678 start_sal = find_function_start_sal (sym, 0);
4680 return (start_sal.line != 0 && line_num >= start_sal.line);
4684 debug_print_lines (struct linetable *lt)
4691 fprintf (stderr, "\t");
4692 for (i = 0; i < lt->nitems; i += 1)
4693 fprintf (stderr, "(%d->%p) ", lt->item[i].line, (void *) lt->item[i].pc);
4694 fprintf (stderr, "\n");
4698 debug_print_block (struct block *b)
4700 struct dict_iterator iter;
4703 fprintf (stderr, "Block: %p; [0x%lx, 0x%lx]",
4704 b, BLOCK_START (b), BLOCK_END (b));
4705 if (BLOCK_FUNCTION (b) != NULL)
4706 fprintf (stderr, " Function: %s", DEPRECATED_SYMBOL_NAME (BLOCK_FUNCTION (b)));
4707 fprintf (stderr, "\n");
4708 fprintf (stderr, "\t Superblock: %p\n", BLOCK_SUPERBLOCK (b));
4709 fprintf (stderr, "\t Symbols:");
4710 ALL_BLOCK_SYMBOLS (b, iter, sym)
4712 fprintf (stderr, " %s", DEPRECATED_SYMBOL_NAME (sym));
4714 fprintf (stderr, "\n");
4718 debug_print_blocks (struct blockvector *bv)
4724 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i += 1)
4726 fprintf (stderr, "%6d. ", i);
4727 debug_print_block (BLOCKVECTOR_BLOCK (bv, i));
4732 debug_print_symtab (struct symtab *s)
4734 fprintf (stderr, "Symtab %p\n File: %s; Dir: %s\n", s,
4735 s->filename, s->dirname);
4736 fprintf (stderr, " Blockvector: %p, Primary: %d\n",
4737 BLOCKVECTOR (s), s->primary);
4738 debug_print_blocks (BLOCKVECTOR (s));
4739 fprintf (stderr, " Line table: %p\n", LINETABLE (s));
4740 debug_print_lines (LINETABLE (s));
4743 /* Read in all symbol tables corresponding to partial symbol tables
4744 with file name FILENAME. */
4746 read_all_symtabs (const char *filename)
4748 struct partial_symtab *ps;
4749 struct objfile *objfile;
4751 ALL_PSYMTABS (objfile, ps)
4755 if (DEPRECATED_STREQ (filename, ps->filename))
4756 PSYMTAB_TO_SYMTAB (ps);
4760 /* All sals corresponding to line LINE_NUM in a symbol table from file
4761 FILENAME, as filtered by the user. If CANONICAL is not null, set
4762 it to a corresponding array of canonical line specs. */
4763 static struct symtabs_and_lines
4764 all_sals_for_line (const char *filename, int line_num, char ***canonical)
4766 struct symtabs_and_lines result;
4767 struct objfile *objfile;
4769 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
4772 read_all_symtabs (filename);
4775 (struct symtab_and_line *) xmalloc (4 * sizeof (result.sals[0]));
4778 make_cleanup (free_current_contents, &result.sals);
4780 ALL_SYMTABS (objfile, s)
4782 int ind, target_line_num;
4786 if (!DEPRECATED_STREQ (s->filename, filename))
4790 nearest_line_number_in_linetable (LINETABLE (s), line_num);
4791 if (target_line_num == -1)
4798 find_next_line_in_linetable (LINETABLE (s),
4799 target_line_num, line_num, ind);
4804 GROW_VECT (result.sals, len, result.nelts + 1);
4805 init_sal (&result.sals[result.nelts]);
4806 result.sals[result.nelts].line = LINETABLE (s)->item[ind].line;
4807 result.sals[result.nelts].pc = LINETABLE (s)->item[ind].pc;
4808 result.sals[result.nelts].symtab = s;
4813 if (canonical != NULL || result.nelts > 1)
4816 char **func_names = (char **) alloca (result.nelts * sizeof (char *));
4817 int first_choice = (result.nelts > 1) ? 2 : 1;
4819 int *choices = (int *) alloca (result.nelts * sizeof (int));
4821 for (k = 0; k < result.nelts; k += 1)
4823 find_pc_partial_function (result.sals[k].pc, &func_names[k],
4824 (CORE_ADDR *) NULL, (CORE_ADDR *) NULL);
4825 if (func_names[k] == NULL)
4826 error ("Could not find function for one or more breakpoints.");
4829 if (result.nelts > 1)
4831 printf_unfiltered ("[0] cancel\n");
4832 if (result.nelts > 1)
4833 printf_unfiltered ("[1] all\n");
4834 for (k = 0; k < result.nelts; k += 1)
4835 printf_unfiltered ("[%d] %s\n", k + first_choice,
4836 ada_demangle (func_names[k]));
4838 n = get_selections (choices, result.nelts, result.nelts,
4839 result.nelts > 1, "instance-choice");
4841 for (k = 0; k < n; k += 1)
4843 result.sals[k] = result.sals[choices[k]];
4844 func_names[k] = func_names[choices[k]];
4849 if (canonical != NULL)
4851 *canonical = (char **) xmalloc (result.nelts * sizeof (char **));
4852 make_cleanup (xfree, *canonical);
4853 for (k = 0; k < result.nelts; k += 1)
4856 extended_canonical_line_spec (result.sals[k], func_names[k]);
4857 if ((*canonical)[k] == NULL)
4858 error ("Could not locate one or more breakpoints.");
4859 make_cleanup (xfree, (*canonical)[k]);
4864 discard_cleanups (old_chain);
4869 /* A canonical line specification of the form FILE:NAME:LINENUM for
4870 symbol table and line data SAL. NULL if insufficient
4871 information. The caller is responsible for releasing any space
4875 extended_canonical_line_spec (struct symtab_and_line sal, const char *name)
4879 if (sal.symtab == NULL || sal.symtab->filename == NULL || sal.line <= 0)
4882 r = (char *) xmalloc (strlen (name) + strlen (sal.symtab->filename)
4883 + sizeof (sal.line) * 3 + 3);
4884 sprintf (r, "%s:'%s':%d", sal.symtab->filename, name, sal.line);
4889 int begin_bnum = -1;
4891 int begin_annotate_level = 0;
4894 begin_cleanup (void *dummy)
4896 begin_annotate_level = 0;
4900 begin_command (char *args, int from_tty)
4902 struct minimal_symbol *msym;
4903 CORE_ADDR main_program_name_addr;
4904 char main_program_name[1024];
4905 struct cleanup *old_chain = make_cleanup (begin_cleanup, NULL);
4906 begin_annotate_level = 2;
4908 /* Check that there is a program to debug */
4909 if (!have_full_symbols () && !have_partial_symbols ())
4910 error ("No symbol table is loaded. Use the \"file\" command.");
4912 /* Check that we are debugging an Ada program */
4913 /* if (ada_update_initial_language (language_unknown, NULL) != language_ada)
4914 error ("Cannot find the Ada initialization procedure. Is this an Ada main program?");
4916 /* FIXME: language_ada should be defined in defs.h */
4918 /* Get the address of the name of the main procedure */
4919 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
4923 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
4924 if (main_program_name_addr == 0)
4925 error ("Invalid address for Ada main program name.");
4927 /* Read the name of the main procedure */
4928 extract_string (main_program_name_addr, main_program_name);
4930 /* Put a temporary breakpoint in the Ada main program and run */
4931 do_command ("tbreak ", main_program_name, 0);
4932 do_command ("run ", args, 0);
4936 /* If we could not find the symbol containing the name of the
4937 main program, that means that the compiler that was used to build
4938 was not recent enough. In that case, we fallback to the previous
4939 mechanism, which is a little bit less reliable, but has proved to work
4940 in most cases. The only cases where it will fail is when the user
4941 has set some breakpoints which will be hit before the end of the
4942 begin command processing (eg in the initialization code).
4944 The begining of the main Ada subprogram is located by breaking
4945 on the adainit procedure. Since we know that the binder generates
4946 the call to this procedure exactly 2 calls before the call to the
4947 Ada main subprogram, it is then easy to put a breakpoint on this
4948 Ada main subprogram once we hit adainit.
4950 do_command ("tbreak adainit", 0);
4951 do_command ("run ", args, 0);
4952 do_command ("up", 0);
4953 do_command ("tbreak +2", 0);
4954 do_command ("continue", 0);
4955 do_command ("step", 0);
4958 do_cleanups (old_chain);
4962 is_ada_runtime_file (char *filename)
4964 return (DEPRECATED_STREQN (filename, "s-", 2) ||
4965 DEPRECATED_STREQN (filename, "a-", 2) ||
4966 DEPRECATED_STREQN (filename, "g-", 2) || DEPRECATED_STREQN (filename, "i-", 2));
4969 /* find the first frame that contains debugging information and that is not
4970 part of the Ada run-time, starting from fi and moving upward. */
4973 find_printable_frame (struct frame_info *fi, int level)
4975 struct symtab_and_line sal;
4977 for (; fi != NULL; level += 1, fi = get_prev_frame (fi))
4979 find_frame_sal (fi, &sal);
4980 if (sal.symtab && !is_ada_runtime_file (sal.symtab->filename))
4982 #if defined(__alpha__) && defined(__osf__) && !defined(VXWORKS_TARGET)
4983 /* libpthread.so contains some debugging information that prevents us
4984 from finding the right frame */
4986 if (sal.symtab->objfile &&
4987 DEPRECATED_STREQ (sal.symtab->objfile->name, "/usr/shlib/libpthread.so"))
4990 deprecated_selected_frame = fi;
4999 ada_report_exception_break (struct breakpoint *b)
5001 /* FIXME: break_on_exception should be defined in breakpoint.h */
5002 /* if (b->break_on_exception == 1)
5004 /* Assume that cond has 16 elements, the 15th
5005 being the exception *//*
5006 if (b->cond && b->cond->nelts == 16)
5008 ui_out_text (uiout, "on ");
5009 ui_out_field_string (uiout, "exception",
5010 SYMBOL_NAME (b->cond->elts[14].symbol));
5013 ui_out_text (uiout, "on all exceptions");
5015 else if (b->break_on_exception == 2)
5016 ui_out_text (uiout, "on unhandled exception");
5017 else if (b->break_on_exception == 3)
5018 ui_out_text (uiout, "on assert failure");
5020 if (b->break_on_exception == 1)
5022 /* Assume that cond has 16 elements, the 15th
5023 being the exception *//*
5024 if (b->cond && b->cond->nelts == 16)
5026 fputs_filtered ("on ", gdb_stdout);
5027 fputs_filtered (SYMBOL_NAME
5028 (b->cond->elts[14].symbol), gdb_stdout);
5031 fputs_filtered ("on all exceptions", gdb_stdout);
5033 else if (b->break_on_exception == 2)
5034 fputs_filtered ("on unhandled exception", gdb_stdout);
5035 else if (b->break_on_exception == 3)
5036 fputs_filtered ("on assert failure", gdb_stdout);
5041 ada_is_exception_sym (struct symbol *sym)
5043 char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
5045 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
5046 && SYMBOL_CLASS (sym) != LOC_BLOCK
5047 && SYMBOL_CLASS (sym) != LOC_CONST
5048 && type_name != NULL && DEPRECATED_STREQ (type_name, "exception"));
5052 ada_maybe_exception_partial_symbol (struct partial_symbol *sym)
5054 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
5055 && SYMBOL_CLASS (sym) != LOC_BLOCK
5056 && SYMBOL_CLASS (sym) != LOC_CONST);
5059 /* If ARG points to an Ada exception or assert breakpoint, rewrite
5060 into equivalent form. Return resulting argument string. Set
5061 *BREAK_ON_EXCEPTIONP to 1 for ordinary break on exception, 2 for
5062 break on unhandled, 3 for assert, 0 otherwise. */
5064 ada_breakpoint_rewrite (char *arg, int *break_on_exceptionp)
5068 *break_on_exceptionp = 0;
5069 /* FIXME: language_ada should be defined in defs.h */
5070 /* if (current_language->la_language == language_ada
5071 && DEPRECATED_STREQN (arg, "exception", 9) &&
5072 (arg[9] == ' ' || arg[9] == '\t' || arg[9] == '\0'))
5074 char *tok, *end_tok;
5077 *break_on_exceptionp = 1;
5080 while (*tok == ' ' || *tok == '\t')
5085 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
5088 toklen = end_tok - tok;
5090 arg = (char*) xmalloc (sizeof ("__gnat_raise_nodefer_with_msg if "
5091 "long_integer(e) = long_integer(&)")
5093 make_cleanup (xfree, arg);
5095 strcpy (arg, "__gnat_raise_nodefer_with_msg");
5096 else if (DEPRECATED_STREQN (tok, "unhandled", toklen))
5098 *break_on_exceptionp = 2;
5099 strcpy (arg, "__gnat_unhandled_exception");
5103 sprintf (arg, "__gnat_raise_nodefer_with_msg if "
5104 "long_integer(e) = long_integer(&%.*s)",
5108 else if (current_language->la_language == language_ada
5109 && DEPRECATED_STREQN (arg, "assert", 6) &&
5110 (arg[6] == ' ' || arg[6] == '\t' || arg[6] == '\0'))
5112 char *tok = arg + 6;
5114 *break_on_exceptionp = 3;
5117 xmalloc (sizeof ("system__assertions__raise_assert_failure")
5118 + strlen (tok) + 1);
5119 make_cleanup (xfree, arg);
5120 sprintf (arg, "system__assertions__raise_assert_failure%s", tok);
5129 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
5130 to be invisible to users. */
5133 ada_is_ignored_field (struct type *type, int field_num)
5135 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5139 const char *name = TYPE_FIELD_NAME (type, field_num);
5140 return (name == NULL
5141 || (name[0] == '_' && !DEPRECATED_STREQN (name, "_parent", 7)));
5145 /* True iff structure type TYPE has a tag field. */
5148 ada_is_tagged_type (struct type *type)
5150 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5153 return (ada_lookup_struct_elt_type (type, "_tag", 1, NULL) != NULL);
5156 /* The type of the tag on VAL. */
5159 ada_tag_type (struct value *val)
5161 return ada_lookup_struct_elt_type (VALUE_TYPE (val), "_tag", 0, NULL);
5164 /* The value of the tag on VAL. */
5167 ada_value_tag (struct value *val)
5169 return ada_value_struct_elt (val, "_tag", "record");
5172 /* The parent type of TYPE, or NULL if none. */
5175 ada_parent_type (struct type *type)
5179 CHECK_TYPEDEF (type);
5181 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5184 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5185 if (ada_is_parent_field (type, i))
5186 return check_typedef (TYPE_FIELD_TYPE (type, i));
5191 /* True iff field number FIELD_NUM of structure type TYPE contains the
5192 parent-type (inherited) fields of a derived type. Assumes TYPE is
5193 a structure type with at least FIELD_NUM+1 fields. */
5196 ada_is_parent_field (struct type *type, int field_num)
5198 const char *name = TYPE_FIELD_NAME (check_typedef (type), field_num);
5199 return (name != NULL &&
5200 (DEPRECATED_STREQN (name, "PARENT", 6) || DEPRECATED_STREQN (name, "_parent", 7)));
5203 /* True iff field number FIELD_NUM of structure type TYPE is a
5204 transparent wrapper field (which should be silently traversed when doing
5205 field selection and flattened when printing). Assumes TYPE is a
5206 structure type with at least FIELD_NUM+1 fields. Such fields are always
5210 ada_is_wrapper_field (struct type *type, int field_num)
5212 const char *name = TYPE_FIELD_NAME (type, field_num);
5213 return (name != NULL
5214 && (DEPRECATED_STREQN (name, "PARENT", 6) || DEPRECATED_STREQ (name, "REP")
5215 || DEPRECATED_STREQN (name, "_parent", 7)
5216 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5219 /* True iff field number FIELD_NUM of structure or union type TYPE
5220 is a variant wrapper. Assumes TYPE is a structure type with at least
5221 FIELD_NUM+1 fields. */
5224 ada_is_variant_part (struct type *type, int field_num)
5226 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5227 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5228 || (is_dynamic_field (type, field_num)
5229 && TYPE_CODE (TYPE_TARGET_TYPE (field_type)) ==
5233 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5234 whose discriminants are contained in the record type OUTER_TYPE,
5235 returns the type of the controlling discriminant for the variant. */
5238 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5240 char *name = ada_variant_discrim_name (var_type);
5241 struct type *type = ada_lookup_struct_elt_type (outer_type, name, 1, NULL);
5243 return builtin_type_int;
5248 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5249 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5250 represents a 'when others' clause; otherwise 0. */
5253 ada_is_others_clause (struct type *type, int field_num)
5255 const char *name = TYPE_FIELD_NAME (type, field_num);
5256 return (name != NULL && name[0] == 'O');
5259 /* Assuming that TYPE0 is the type of the variant part of a record,
5260 returns the name of the discriminant controlling the variant. The
5261 value is valid until the next call to ada_variant_discrim_name. */
5264 ada_variant_discrim_name (struct type *type0)
5266 static char *result = NULL;
5267 static size_t result_len = 0;
5270 const char *discrim_end;
5271 const char *discrim_start;
5273 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5274 type = TYPE_TARGET_TYPE (type0);
5278 name = ada_type_name (type);
5280 if (name == NULL || name[0] == '\000')
5283 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5286 if (DEPRECATED_STREQN (discrim_end, "___XVN", 6))
5289 if (discrim_end == name)
5292 for (discrim_start = discrim_end; discrim_start != name + 3;
5295 if (discrim_start == name + 1)
5297 if ((discrim_start > name + 3 && DEPRECATED_STREQN (discrim_start - 3, "___", 3))
5298 || discrim_start[-1] == '.')
5302 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5303 strncpy (result, discrim_start, discrim_end - discrim_start);
5304 result[discrim_end - discrim_start] = '\0';
5308 /* Scan STR for a subtype-encoded number, beginning at position K. Put the
5309 position of the character just past the number scanned in *NEW_K,
5310 if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL. Return 1
5311 if there was a valid number at the given position, and 0 otherwise. A
5312 "subtype-encoded" number consists of the absolute value in decimal,
5313 followed by the letter 'm' to indicate a negative number. Assumes 0m
5317 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
5321 if (!isdigit (str[k]))
5324 /* Do it the hard way so as not to make any assumption about
5325 the relationship of unsigned long (%lu scan format code) and
5328 while (isdigit (str[k]))
5330 RU = RU * 10 + (str[k] - '0');
5337 *R = (-(LONGEST) (RU - 1)) - 1;
5343 /* NOTE on the above: Technically, C does not say what the results of
5344 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5345 number representable as a LONGEST (although either would probably work
5346 in most implementations). When RU>0, the locution in the then branch
5347 above is always equivalent to the negative of RU. */
5354 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5355 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5356 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
5359 ada_in_variant (LONGEST val, struct type *type, int field_num)
5361 const char *name = TYPE_FIELD_NAME (type, field_num);
5374 if (!ada_scan_number (name, p + 1, &W, &p))
5383 if (!ada_scan_number (name, p + 1, &L, &p)
5384 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
5386 if (val >= L && val <= U)
5398 /* Given a value ARG1 (offset by OFFSET bytes)
5399 of a struct or union type ARG_TYPE,
5400 extract and return the value of one of its (non-static) fields.
5401 FIELDNO says which field. Differs from value_primitive_field only
5402 in that it can handle packed values of arbitrary type. */
5405 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
5406 struct type *arg_type)
5411 CHECK_TYPEDEF (arg_type);
5412 type = TYPE_FIELD_TYPE (arg_type, fieldno);
5414 /* Handle packed fields */
5416 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5418 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5419 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
5421 return ada_value_primitive_packed_val (arg1, VALUE_CONTENTS (arg1),
5422 offset + bit_pos / 8,
5423 bit_pos % 8, bit_size, type);
5426 return value_primitive_field (arg1, offset, fieldno, arg_type);
5430 /* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
5431 and search in it assuming it has (class) type TYPE.
5432 If found, return value, else return NULL.
5434 Searches recursively through wrapper fields (e.g., '_parent'). */
5437 ada_search_struct_field (char *name, struct value *arg, int offset,
5441 CHECK_TYPEDEF (type);
5443 for (i = TYPE_NFIELDS (type) - 1; i >= 0; i -= 1)
5445 char *t_field_name = TYPE_FIELD_NAME (type, i);
5447 if (t_field_name == NULL)
5450 else if (field_name_match (t_field_name, name))
5451 return ada_value_primitive_field (arg, offset, i, type);
5453 else if (ada_is_wrapper_field (type, i))
5455 struct value *v = ada_search_struct_field (name, arg,
5457 TYPE_FIELD_BITPOS (type,
5460 TYPE_FIELD_TYPE (type,
5466 else if (ada_is_variant_part (type, i))
5469 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
5470 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
5472 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5474 struct value *v = ada_search_struct_field (name, arg,
5478 (field_type, j) / 8,
5489 /* Given ARG, a value of type (pointer to a)* structure/union,
5490 extract the component named NAME from the ultimate target structure/union
5491 and return it as a value with its appropriate type.
5493 The routine searches for NAME among all members of the structure itself
5494 and (recursively) among all members of any wrapper members
5497 ERR is a name (for use in error messages) that identifies the class
5498 of entity that ARG is supposed to be. */
5501 ada_value_struct_elt (struct value *arg, char *name, char *err)
5506 arg = ada_coerce_ref (arg);
5507 t = check_typedef (VALUE_TYPE (arg));
5509 /* Follow pointers until we get to a non-pointer. */
5511 while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_CODE (t) == TYPE_CODE_REF)
5513 arg = ada_value_ind (arg);
5514 t = check_typedef (VALUE_TYPE (arg));
5517 if (TYPE_CODE (t) != TYPE_CODE_STRUCT && TYPE_CODE (t) != TYPE_CODE_UNION)
5518 error ("Attempt to extract a component of a value that is not a %s.",
5521 v = ada_search_struct_field (name, arg, 0, t);
5523 error ("There is no member named %s.", name);
5528 /* Given a type TYPE, look up the type of the component of type named NAME.
5529 If DISPP is non-null, add its byte displacement from the beginning of a
5530 structure (pointed to by a value) of type TYPE to *DISPP (does not
5531 work for packed fields).
5533 Matches any field whose name has NAME as a prefix, possibly
5536 TYPE can be either a struct or union, or a pointer or reference to
5537 a struct or union. If it is a pointer or reference, its target
5538 type is automatically used.
5540 Looks recursively into variant clauses and parent types.
5542 If NOERR is nonzero, return NULL if NAME is not suitably defined. */
5545 ada_lookup_struct_elt_type (struct type *type, char *name, int noerr,
5555 CHECK_TYPEDEF (type);
5556 if (TYPE_CODE (type) != TYPE_CODE_PTR
5557 && TYPE_CODE (type) != TYPE_CODE_REF)
5559 type = TYPE_TARGET_TYPE (type);
5562 if (TYPE_CODE (type) != TYPE_CODE_STRUCT &&
5563 TYPE_CODE (type) != TYPE_CODE_UNION)
5565 target_terminal_ours ();
5566 gdb_flush (gdb_stdout);
5567 fprintf_unfiltered (gdb_stderr, "Type ");
5568 type_print (type, "", gdb_stderr, -1);
5569 error (" is not a structure or union type");
5572 type = to_static_fixed_type (type);
5574 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5576 char *t_field_name = TYPE_FIELD_NAME (type, i);
5580 if (t_field_name == NULL)
5583 else if (field_name_match (t_field_name, name))
5586 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
5587 return check_typedef (TYPE_FIELD_TYPE (type, i));
5590 else if (ada_is_wrapper_field (type, i))
5593 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
5598 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5603 else if (ada_is_variant_part (type, i))
5606 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
5608 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5611 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
5616 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5627 target_terminal_ours ();
5628 gdb_flush (gdb_stdout);
5629 fprintf_unfiltered (gdb_stderr, "Type ");
5630 type_print (type, "", gdb_stderr, -1);
5631 fprintf_unfiltered (gdb_stderr, " has no component named ");
5632 error ("%s", name == NULL ? "<null>" : name);
5638 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
5639 within a value of type OUTER_TYPE that is stored in GDB at
5640 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
5641 numbering from 0) is applicable. Returns -1 if none are. */
5644 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
5645 char *outer_valaddr)
5650 struct type *discrim_type;
5651 char *discrim_name = ada_variant_discrim_name (var_type);
5652 LONGEST discrim_val;
5656 ada_lookup_struct_elt_type (outer_type, discrim_name, 1, &disp);
5657 if (discrim_type == NULL)
5659 discrim_val = unpack_long (discrim_type, outer_valaddr + disp);
5662 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
5664 if (ada_is_others_clause (var_type, i))
5666 else if (ada_in_variant (discrim_val, var_type, i))
5670 return others_clause;
5675 /* Dynamic-Sized Records */
5677 /* Strategy: The type ostensibly attached to a value with dynamic size
5678 (i.e., a size that is not statically recorded in the debugging
5679 data) does not accurately reflect the size or layout of the value.
5680 Our strategy is to convert these values to values with accurate,
5681 conventional types that are constructed on the fly. */
5683 /* There is a subtle and tricky problem here. In general, we cannot
5684 determine the size of dynamic records without its data. However,
5685 the 'struct value' data structure, which GDB uses to represent
5686 quantities in the inferior process (the target), requires the size
5687 of the type at the time of its allocation in order to reserve space
5688 for GDB's internal copy of the data. That's why the
5689 'to_fixed_xxx_type' routines take (target) addresses as parameters,
5690 rather than struct value*s.
5692 However, GDB's internal history variables ($1, $2, etc.) are
5693 struct value*s containing internal copies of the data that are not, in
5694 general, the same as the data at their corresponding addresses in
5695 the target. Fortunately, the types we give to these values are all
5696 conventional, fixed-size types (as per the strategy described
5697 above), so that we don't usually have to perform the
5698 'to_fixed_xxx_type' conversions to look at their values.
5699 Unfortunately, there is one exception: if one of the internal
5700 history variables is an array whose elements are unconstrained
5701 records, then we will need to create distinct fixed types for each
5702 element selected. */
5704 /* The upshot of all of this is that many routines take a (type, host
5705 address, target address) triple as arguments to represent a value.
5706 The host address, if non-null, is supposed to contain an internal
5707 copy of the relevant data; otherwise, the program is to consult the
5708 target at the target address. */
5710 /* Assuming that VAL0 represents a pointer value, the result of
5711 dereferencing it. Differs from value_ind in its treatment of
5712 dynamic-sized types. */
5715 ada_value_ind (struct value *val0)
5717 struct value *val = unwrap_value (value_ind (val0));
5718 return ada_to_fixed_value (VALUE_TYPE (val), 0,
5719 VALUE_ADDRESS (val) + VALUE_OFFSET (val), val);
5722 /* The value resulting from dereferencing any "reference to"
5723 * qualifiers on VAL0. */
5724 static struct value *
5725 ada_coerce_ref (struct value *val0)
5727 if (TYPE_CODE (VALUE_TYPE (val0)) == TYPE_CODE_REF)
5729 struct value *val = val0;
5731 val = unwrap_value (val);
5732 return ada_to_fixed_value (VALUE_TYPE (val), 0,
5733 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
5740 /* Return OFF rounded upward if necessary to a multiple of
5741 ALIGNMENT (a power of 2). */
5744 align_value (unsigned int off, unsigned int alignment)
5746 return (off + alignment - 1) & ~(alignment - 1);
5749 /* Return the additional bit offset required by field F of template
5753 field_offset (struct type *type, int f)
5755 int n = TYPE_FIELD_BITPOS (type, f);
5756 /* Kludge (temporary?) to fix problem with dwarf output. */
5758 return (unsigned int) n & 0xffff;
5764 /* Return the bit alignment required for field #F of template type TYPE. */
5767 field_alignment (struct type *type, int f)
5769 const char *name = TYPE_FIELD_NAME (type, f);
5770 int len = (name == NULL) ? 0 : strlen (name);
5773 if (len < 8 || !isdigit (name[len - 1]))
5774 return TARGET_CHAR_BIT;
5776 if (isdigit (name[len - 2]))
5777 align_offset = len - 2;
5779 align_offset = len - 1;
5781 if (align_offset < 7 || !DEPRECATED_STREQN ("___XV", name + align_offset - 6, 5))
5782 return TARGET_CHAR_BIT;
5784 return atoi (name + align_offset) * TARGET_CHAR_BIT;
5787 /* Find a type named NAME. Ignores ambiguity. */
5789 ada_find_any_type (const char *name)
5793 sym = standard_lookup (name, VAR_DOMAIN);
5794 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5795 return SYMBOL_TYPE (sym);
5797 sym = standard_lookup (name, STRUCT_DOMAIN);
5799 return SYMBOL_TYPE (sym);
5804 /* Because of GNAT encoding conventions, several GDB symbols may match a
5805 given type name. If the type denoted by TYPE0 is to be preferred to
5806 that of TYPE1 for purposes of type printing, return non-zero;
5807 otherwise return 0. */
5809 ada_prefer_type (struct type *type0, struct type *type1)
5813 else if (type0 == NULL)
5815 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
5817 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
5819 else if (ada_is_packed_array_type (type0))
5821 else if (ada_is_array_descriptor (type0)
5822 && !ada_is_array_descriptor (type1))
5824 else if (ada_renaming_type (type0) != NULL
5825 && ada_renaming_type (type1) == NULL)
5830 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
5831 null, its TYPE_TAG_NAME. Null if TYPE is null. */
5833 ada_type_name (struct type *type)
5837 else if (TYPE_NAME (type) != NULL)
5838 return TYPE_NAME (type);
5840 return TYPE_TAG_NAME (type);
5843 /* Find a parallel type to TYPE whose name is formed by appending
5844 SUFFIX to the name of TYPE. */
5847 ada_find_parallel_type (struct type *type, const char *suffix)
5850 static size_t name_len = 0;
5851 struct symbol **syms;
5852 struct block **blocks;
5855 char *typename = ada_type_name (type);
5857 if (typename == NULL)
5860 len = strlen (typename);
5862 GROW_VECT (name, name_len, len + strlen (suffix) + 1);
5864 strcpy (name, typename);
5865 strcpy (name + len, suffix);
5867 return ada_find_any_type (name);
5871 /* If TYPE is a variable-size record type, return the corresponding template
5872 type describing its fields. Otherwise, return NULL. */
5874 static struct type *
5875 dynamic_template_type (struct type *type)
5877 CHECK_TYPEDEF (type);
5879 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
5880 || ada_type_name (type) == NULL)
5884 int len = strlen (ada_type_name (type));
5885 if (len > 6 && DEPRECATED_STREQ (ada_type_name (type) + len - 6, "___XVE"))
5888 return ada_find_parallel_type (type, "___XVE");
5892 /* Assuming that TEMPL_TYPE is a union or struct type, returns
5893 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
5896 is_dynamic_field (struct type *templ_type, int field_num)
5898 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5900 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
5901 && strstr (name, "___XVL") != NULL;
5904 /* Assuming that TYPE is a struct type, returns non-zero iff TYPE
5905 contains a variant part. */
5908 contains_variant_part (struct type *type)
5912 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
5913 || TYPE_NFIELDS (type) <= 0)
5915 return ada_is_variant_part (type, TYPE_NFIELDS (type) - 1);
5918 /* A record type with no fields, . */
5919 static struct type *
5920 empty_record (struct objfile *objfile)
5922 struct type *type = alloc_type (objfile);
5923 TYPE_CODE (type) = TYPE_CODE_STRUCT;
5924 TYPE_NFIELDS (type) = 0;
5925 TYPE_FIELDS (type) = NULL;
5926 TYPE_NAME (type) = "<empty>";
5927 TYPE_TAG_NAME (type) = NULL;
5928 TYPE_FLAGS (type) = 0;
5929 TYPE_LENGTH (type) = 0;
5933 /* An ordinary record type (with fixed-length fields) that describes
5934 the value of type TYPE at VALADDR or ADDRESS (see comments at
5935 the beginning of this section) VAL according to GNAT conventions.
5936 DVAL0 should describe the (portion of a) record that contains any
5937 necessary discriminants. It should be NULL if VALUE_TYPE (VAL) is
5938 an outer-level type (i.e., as opposed to a branch of a variant.) A
5939 variant field (unless unchecked) is replaced by a particular branch
5941 /* NOTE: Limitations: For now, we assume that dynamic fields and
5942 * variants occupy whole numbers of bytes. However, they need not be
5945 static struct type *
5946 template_to_fixed_record_type (struct type *type, char *valaddr,
5947 CORE_ADDR address, struct value *dval0)
5949 struct value *mark = value_mark ();
5952 int nfields, bit_len;
5956 nfields = TYPE_NFIELDS (type);
5957 rtype = alloc_type (TYPE_OBJFILE (type));
5958 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
5959 INIT_CPLUS_SPECIFIC (rtype);
5960 TYPE_NFIELDS (rtype) = nfields;
5961 TYPE_FIELDS (rtype) = (struct field *)
5962 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
5963 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
5964 TYPE_NAME (rtype) = ada_type_name (type);
5965 TYPE_TAG_NAME (rtype) = NULL;
5966 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in
5968 /* TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE; */
5972 for (f = 0; f < nfields; f += 1)
5974 int fld_bit_len, bit_incr;
5977 field_alignment (type, f)) + TYPE_FIELD_BITPOS (type, f);
5978 /* NOTE: used to use field_offset above, but that causes
5979 * problems with really negative bit positions. So, let's
5980 * rediscover why we needed field_offset and fix it properly. */
5981 TYPE_FIELD_BITPOS (rtype, f) = off;
5982 TYPE_FIELD_BITSIZE (rtype, f) = 0;
5983 TYPE_FIELD_STATIC_KIND (rtype, f) = 0;
5985 if (ada_is_variant_part (type, f))
5987 struct type *branch_type;
5990 dval = value_from_contents_and_address (rtype, valaddr, address);
5995 to_fixed_variant_branch_type
5996 (TYPE_FIELD_TYPE (type, f),
5997 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
5998 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
5999 if (branch_type == NULL)
6000 TYPE_NFIELDS (rtype) -= 1;
6003 TYPE_FIELD_TYPE (rtype, f) = branch_type;
6004 TYPE_FIELD_NAME (rtype, f) = "S";
6008 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6010 else if (is_dynamic_field (type, f))
6013 dval = value_from_contents_and_address (rtype, valaddr, address);
6017 TYPE_FIELD_TYPE (rtype, f) =
6020 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
6021 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6022 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6023 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6024 bit_incr = fld_bit_len =
6025 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6029 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
6030 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6031 if (TYPE_FIELD_BITSIZE (type, f) > 0)
6032 bit_incr = fld_bit_len =
6033 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6035 bit_incr = fld_bit_len =
6036 TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
6038 if (off + fld_bit_len > bit_len)
6039 bit_len = off + fld_bit_len;
6041 TYPE_LENGTH (rtype) = bit_len / TARGET_CHAR_BIT;
6043 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype), TYPE_LENGTH (type));
6045 value_free_to_mark (mark);
6046 if (TYPE_LENGTH (rtype) > varsize_limit)
6047 error ("record type with dynamic size is larger than varsize-limit");
6051 /* As for template_to_fixed_record_type, but uses no run-time values.
6052 As a result, this type can only be approximate, but that's OK,
6053 since it is used only for type determinations. Works on both
6055 Representation note: to save space, we memoize the result of this
6056 function in the TYPE_TARGET_TYPE of the template type. */
6058 static struct type *
6059 template_to_static_fixed_type (struct type *templ_type)
6065 if (TYPE_TARGET_TYPE (templ_type) != NULL)
6066 return TYPE_TARGET_TYPE (templ_type);
6068 nfields = TYPE_NFIELDS (templ_type);
6069 TYPE_TARGET_TYPE (templ_type) = type =
6070 alloc_type (TYPE_OBJFILE (templ_type));
6071 TYPE_CODE (type) = TYPE_CODE (templ_type);
6072 INIT_CPLUS_SPECIFIC (type);
6073 TYPE_NFIELDS (type) = nfields;
6074 TYPE_FIELDS (type) = (struct field *)
6075 TYPE_ALLOC (type, nfields * sizeof (struct field));
6076 memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
6077 TYPE_NAME (type) = ada_type_name (templ_type);
6078 TYPE_TAG_NAME (type) = NULL;
6079 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6080 /* TYPE_FLAGS (type) |= TYPE_FLAG_FIXED_INSTANCE; */
6081 TYPE_LENGTH (type) = 0;
6083 for (f = 0; f < nfields; f += 1)
6085 TYPE_FIELD_BITPOS (type, f) = 0;
6086 TYPE_FIELD_BITSIZE (type, f) = 0;
6087 TYPE_FIELD_STATIC_KIND (type, f) = 0;
6089 if (is_dynamic_field (templ_type, f))
6091 TYPE_FIELD_TYPE (type, f) =
6092 to_static_fixed_type (TYPE_TARGET_TYPE
6093 (TYPE_FIELD_TYPE (templ_type, f)));
6094 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (templ_type, f);
6098 TYPE_FIELD_TYPE (type, f) =
6099 check_typedef (TYPE_FIELD_TYPE (templ_type, f));
6100 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (templ_type, f);
6107 /* A revision of TYPE0 -- a non-dynamic-sized record with a variant
6108 part -- in which the variant part is replaced with the appropriate
6110 static struct type *
6111 to_record_with_fixed_variant_part (struct type *type, char *valaddr,
6112 CORE_ADDR address, struct value *dval)
6114 struct value *mark = value_mark ();
6116 struct type *branch_type;
6117 int nfields = TYPE_NFIELDS (type);
6122 rtype = alloc_type (TYPE_OBJFILE (type));
6123 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6124 INIT_CPLUS_SPECIFIC (type);
6125 TYPE_NFIELDS (rtype) = TYPE_NFIELDS (type);
6126 TYPE_FIELDS (rtype) =
6127 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6128 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
6129 sizeof (struct field) * nfields);
6130 TYPE_NAME (rtype) = ada_type_name (type);
6131 TYPE_TAG_NAME (rtype) = NULL;
6132 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6133 /* TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE; */
6134 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
6137 to_fixed_variant_branch_type
6138 (TYPE_FIELD_TYPE (type, nfields - 1),
6139 cond_offset_host (valaddr,
6140 TYPE_FIELD_BITPOS (type,
6141 nfields - 1) / TARGET_CHAR_BIT),
6142 cond_offset_target (address,
6143 TYPE_FIELD_BITPOS (type,
6144 nfields - 1) / TARGET_CHAR_BIT),
6146 if (branch_type == NULL)
6148 TYPE_NFIELDS (rtype) -= 1;
6149 TYPE_LENGTH (rtype) -=
6150 TYPE_LENGTH (TYPE_FIELD_TYPE (type, nfields - 1));
6154 TYPE_FIELD_TYPE (rtype, nfields - 1) = branch_type;
6155 TYPE_FIELD_NAME (rtype, nfields - 1) = "S";
6156 TYPE_FIELD_BITSIZE (rtype, nfields - 1) = 0;
6157 TYPE_FIELD_STATIC_KIND (rtype, nfields - 1) = 0;
6158 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
6159 -TYPE_LENGTH (TYPE_FIELD_TYPE (type, nfields - 1));
6165 /* An ordinary record type (with fixed-length fields) that describes
6166 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
6167 beginning of this section]. Any necessary discriminants' values
6168 should be in DVAL, a record value; it should be NULL if the object
6169 at ADDR itself contains any necessary discriminant values. A
6170 variant field (unless unchecked) is replaced by a particular branch
6173 static struct type *
6174 to_fixed_record_type (struct type *type0, char *valaddr, CORE_ADDR address,
6177 struct type *templ_type;
6179 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6180 /* if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6183 templ_type = dynamic_template_type (type0);
6185 if (templ_type != NULL)
6186 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
6187 else if (contains_variant_part (type0))
6188 return to_record_with_fixed_variant_part (type0, valaddr, address, dval);
6191 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6192 /* TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE; */
6198 /* An ordinary record type (with fixed-length fields) that describes
6199 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
6200 union type. Any necessary discriminants' values should be in DVAL,
6201 a record value. That is, this routine selects the appropriate
6202 branch of the union at ADDR according to the discriminant value
6203 indicated in the union's type name. */
6205 static struct type *
6206 to_fixed_variant_branch_type (struct type *var_type0, char *valaddr,
6207 CORE_ADDR address, struct value *dval)
6210 struct type *templ_type;
6211 struct type *var_type;
6213 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
6214 var_type = TYPE_TARGET_TYPE (var_type0);
6216 var_type = var_type0;
6218 templ_type = ada_find_parallel_type (var_type, "___XVU");
6220 if (templ_type != NULL)
6221 var_type = templ_type;
6224 ada_which_variant_applies (var_type,
6225 VALUE_TYPE (dval), VALUE_CONTENTS (dval));
6228 return empty_record (TYPE_OBJFILE (var_type));
6229 else if (is_dynamic_field (var_type, which))
6231 to_fixed_record_type
6232 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
6233 valaddr, address, dval);
6234 else if (contains_variant_part (TYPE_FIELD_TYPE (var_type, which)))
6236 to_fixed_record_type
6237 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
6239 return TYPE_FIELD_TYPE (var_type, which);
6242 /* Assuming that TYPE0 is an array type describing the type of a value
6243 at ADDR, and that DVAL describes a record containing any
6244 discriminants used in TYPE0, returns a type for the value that
6245 contains no dynamic components (that is, no components whose sizes
6246 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
6247 true, gives an error message if the resulting type's size is over
6251 static struct type *
6252 to_fixed_array_type (struct type *type0, struct value *dval,
6255 struct type *index_type_desc;
6256 struct type *result;
6258 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6259 /* if (ada_is_packed_array_type (type0) /* revisit? *//*
6260 || (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
6263 index_type_desc = ada_find_parallel_type (type0, "___XA");
6264 if (index_type_desc == NULL)
6266 struct type *elt_type0 = check_typedef (TYPE_TARGET_TYPE (type0));
6267 /* NOTE: elt_type---the fixed version of elt_type0---should never
6268 * depend on the contents of the array in properly constructed
6269 * debugging data. */
6270 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval);
6272 if (elt_type0 == elt_type)
6275 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6276 elt_type, TYPE_INDEX_TYPE (type0));
6281 struct type *elt_type0;
6284 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
6285 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
6287 /* NOTE: result---the fixed version of elt_type0---should never
6288 * depend on the contents of the array in properly constructed
6289 * debugging data. */
6290 result = ada_to_fixed_type (check_typedef (elt_type0), 0, 0, dval);
6291 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
6293 struct type *range_type =
6294 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
6295 dval, TYPE_OBJFILE (type0));
6296 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6297 result, range_type);
6299 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
6300 error ("array type with dynamic size is larger than varsize-limit");
6303 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6304 /* TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE; */
6309 /* A standard type (containing no dynamically sized components)
6310 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
6311 DVAL describes a record containing any discriminants used in TYPE0,
6312 and may be NULL if there are none. */
6315 ada_to_fixed_type (struct type *type, char *valaddr, CORE_ADDR address,
6318 CHECK_TYPEDEF (type);
6319 switch (TYPE_CODE (type))
6323 case TYPE_CODE_STRUCT:
6324 return to_fixed_record_type (type, valaddr, address, NULL);
6325 case TYPE_CODE_ARRAY:
6326 return to_fixed_array_type (type, dval, 0);
6327 case TYPE_CODE_UNION:
6331 return to_fixed_variant_branch_type (type, valaddr, address, dval);
6335 /* A standard (static-sized) type corresponding as well as possible to
6336 TYPE0, but based on no runtime data. */
6338 static struct type *
6339 to_static_fixed_type (struct type *type0)
6346 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6347 /* if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6350 CHECK_TYPEDEF (type0);
6352 switch (TYPE_CODE (type0))
6356 case TYPE_CODE_STRUCT:
6357 type = dynamic_template_type (type0);
6359 return template_to_static_fixed_type (type);
6361 case TYPE_CODE_UNION:
6362 type = ada_find_parallel_type (type0, "___XVU");
6364 return template_to_static_fixed_type (type);
6369 /* A static approximation of TYPE with all type wrappers removed. */
6370 static struct type *
6371 static_unwrap_type (struct type *type)
6373 if (ada_is_aligner_type (type))
6375 struct type *type1 = TYPE_FIELD_TYPE (check_typedef (type), 0);
6376 if (ada_type_name (type1) == NULL)
6377 TYPE_NAME (type1) = ada_type_name (type);
6379 return static_unwrap_type (type1);
6383 struct type *raw_real_type = ada_get_base_type (type);
6384 if (raw_real_type == type)
6387 return to_static_fixed_type (raw_real_type);
6391 /* In some cases, incomplete and private types require
6392 cross-references that are not resolved as records (for example,
6394 type FooP is access Foo;
6396 type Foo is array ...;
6397 ). In these cases, since there is no mechanism for producing
6398 cross-references to such types, we instead substitute for FooP a
6399 stub enumeration type that is nowhere resolved, and whose tag is
6400 the name of the actual type. Call these types "non-record stubs". */
6402 /* A type equivalent to TYPE that is not a non-record stub, if one
6403 exists, otherwise TYPE. */
6405 ada_completed_type (struct type *type)
6407 CHECK_TYPEDEF (type);
6408 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
6409 || (TYPE_FLAGS (type) & TYPE_FLAG_STUB) == 0
6410 || TYPE_TAG_NAME (type) == NULL)
6414 char *name = TYPE_TAG_NAME (type);
6415 struct type *type1 = ada_find_any_type (name);
6416 return (type1 == NULL) ? type : type1;
6420 /* A value representing the data at VALADDR/ADDRESS as described by
6421 type TYPE0, but with a standard (static-sized) type that correctly
6422 describes it. If VAL0 is not NULL and TYPE0 already is a standard
6423 type, then return VAL0 [this feature is simply to avoid redundant
6424 creation of struct values]. */
6427 ada_to_fixed_value (struct type *type0, char *valaddr, CORE_ADDR address,
6430 struct type *type = ada_to_fixed_type (type0, valaddr, address, NULL);
6431 if (type == type0 && val0 != NULL)
6434 return value_from_contents_and_address (type, valaddr, address);
6437 /* A value representing VAL, but with a standard (static-sized) type
6438 chosen to approximate the real type of VAL as well as possible, but
6439 without consulting any runtime values. For Ada dynamic-sized
6440 types, therefore, the type of the result is likely to be inaccurate. */
6443 ada_to_static_fixed_value (struct value *val)
6446 to_static_fixed_type (static_unwrap_type (VALUE_TYPE (val)));
6447 if (type == VALUE_TYPE (val))
6450 return coerce_unspec_val_to_type (val, 0, type);
6459 /* Table mapping attribute numbers to names */
6460 /* NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h */
6462 static const char *attribute_names[] = {
6479 ada_attribute_name (int n)
6481 if (n > 0 && n < (int) ATR_END)
6482 return attribute_names[n];
6484 return attribute_names[0];
6487 /* Evaluate the 'POS attribute applied to ARG. */
6489 static struct value *
6490 value_pos_atr (struct value *arg)
6492 struct type *type = VALUE_TYPE (arg);
6494 if (!discrete_type_p (type))
6495 error ("'POS only defined on discrete types");
6497 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
6500 LONGEST v = value_as_long (arg);
6502 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6504 if (v == TYPE_FIELD_BITPOS (type, i))
6505 return value_from_longest (builtin_type_ada_int, i);
6507 error ("enumeration value is invalid: can't find 'POS");
6510 return value_from_longest (builtin_type_ada_int, value_as_long (arg));
6513 /* Evaluate the TYPE'VAL attribute applied to ARG. */
6515 static struct value *
6516 value_val_atr (struct type *type, struct value *arg)
6518 if (!discrete_type_p (type))
6519 error ("'VAL only defined on discrete types");
6520 if (!integer_type_p (VALUE_TYPE (arg)))
6521 error ("'VAL requires integral argument");
6523 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
6525 long pos = value_as_long (arg);
6526 if (pos < 0 || pos >= TYPE_NFIELDS (type))
6527 error ("argument to 'VAL out of range");
6528 return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
6531 return value_from_longest (type, value_as_long (arg));
6537 /* True if TYPE appears to be an Ada character type.
6538 * [At the moment, this is true only for Character and Wide_Character;
6539 * It is a heuristic test that could stand improvement]. */
6542 ada_is_character_type (struct type *type)
6544 const char *name = ada_type_name (type);
6547 && (TYPE_CODE (type) == TYPE_CODE_CHAR
6548 || TYPE_CODE (type) == TYPE_CODE_INT
6549 || TYPE_CODE (type) == TYPE_CODE_RANGE)
6550 && (DEPRECATED_STREQ (name, "character") || DEPRECATED_STREQ (name, "wide_character")
6551 || DEPRECATED_STREQ (name, "unsigned char"));
6554 /* True if TYPE appears to be an Ada string type. */
6557 ada_is_string_type (struct type *type)
6559 CHECK_TYPEDEF (type);
6561 && TYPE_CODE (type) != TYPE_CODE_PTR
6562 && (ada_is_simple_array (type) || ada_is_array_descriptor (type))
6563 && ada_array_arity (type) == 1)
6565 struct type *elttype = ada_array_element_type (type, 1);
6567 return ada_is_character_type (elttype);
6574 /* True if TYPE is a struct type introduced by the compiler to force the
6575 alignment of a value. Such types have a single field with a
6576 distinctive name. */
6579 ada_is_aligner_type (struct type *type)
6581 CHECK_TYPEDEF (type);
6582 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
6583 && TYPE_NFIELDS (type) == 1
6584 && DEPRECATED_STREQ (TYPE_FIELD_NAME (type, 0), "F"));
6587 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
6588 the parallel type. */
6591 ada_get_base_type (struct type *raw_type)
6593 struct type *real_type_namer;
6594 struct type *raw_real_type;
6595 struct type *real_type;
6597 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
6600 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
6601 if (real_type_namer == NULL
6602 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
6603 || TYPE_NFIELDS (real_type_namer) != 1)
6606 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
6607 if (raw_real_type == NULL)
6610 return raw_real_type;
6613 /* The type of value designated by TYPE, with all aligners removed. */
6616 ada_aligned_type (struct type *type)
6618 if (ada_is_aligner_type (type))
6619 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
6621 return ada_get_base_type (type);
6625 /* The address of the aligned value in an object at address VALADDR
6626 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
6629 ada_aligned_value_addr (struct type *type, char *valaddr)
6631 if (ada_is_aligner_type (type))
6632 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
6634 TYPE_FIELD_BITPOS (type,
6635 0) / TARGET_CHAR_BIT);
6640 /* The printed representation of an enumeration literal with encoded
6641 name NAME. The value is good to the next call of ada_enum_name. */
6643 ada_enum_name (const char *name)
6649 if ((tmp = strstr (name, "__")) != NULL)
6651 else if ((tmp = strchr (name, '.')) != NULL)
6659 static char result[16];
6661 if (name[1] == 'U' || name[1] == 'W')
6663 if (sscanf (name + 2, "%x", &v) != 1)
6669 if (isascii (v) && isprint (v))
6670 sprintf (result, "'%c'", v);
6671 else if (name[1] == 'U')
6672 sprintf (result, "[\"%02x\"]", v);
6674 sprintf (result, "[\"%04x\"]", v);
6682 static struct value *
6683 evaluate_subexp (struct type *expect_type, struct expression *exp, int *pos,
6686 return (*exp->language_defn->evaluate_exp) (expect_type, exp, pos, noside);
6689 /* Evaluate the subexpression of EXP starting at *POS as for
6690 evaluate_type, updating *POS to point just past the evaluated
6693 static struct value *
6694 evaluate_subexp_type (struct expression *exp, int *pos)
6696 return (*exp->language_defn->evaluate_exp)
6697 (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
6700 /* If VAL is wrapped in an aligner or subtype wrapper, return the
6703 static struct value *
6704 unwrap_value (struct value *val)
6706 struct type *type = check_typedef (VALUE_TYPE (val));
6707 if (ada_is_aligner_type (type))
6709 struct value *v = value_struct_elt (&val, NULL, "F",
6710 NULL, "internal structure");
6711 struct type *val_type = check_typedef (VALUE_TYPE (v));
6712 if (ada_type_name (val_type) == NULL)
6713 TYPE_NAME (val_type) = ada_type_name (type);
6715 return unwrap_value (v);
6719 struct type *raw_real_type =
6720 ada_completed_type (ada_get_base_type (type));
6722 if (type == raw_real_type)
6726 coerce_unspec_val_to_type
6727 (val, 0, ada_to_fixed_type (raw_real_type, 0,
6728 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
6733 static struct value *
6734 cast_to_fixed (struct type *type, struct value *arg)
6738 if (type == VALUE_TYPE (arg))
6740 else if (ada_is_fixed_point_type (VALUE_TYPE (arg)))
6741 val = ada_float_to_fixed (type,
6742 ada_fixed_to_float (VALUE_TYPE (arg),
6743 value_as_long (arg)));
6747 value_as_double (value_cast (builtin_type_double, value_copy (arg)));
6748 val = ada_float_to_fixed (type, argd);
6751 return value_from_longest (type, val);
6754 static struct value *
6755 cast_from_fixed_to_double (struct value *arg)
6757 DOUBLEST val = ada_fixed_to_float (VALUE_TYPE (arg),
6758 value_as_long (arg));
6759 return value_from_double (builtin_type_double, val);
6762 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
6763 * return the converted value. */
6764 static struct value *
6765 coerce_for_assign (struct type *type, struct value *val)
6767 struct type *type2 = VALUE_TYPE (val);
6771 CHECK_TYPEDEF (type2);
6772 CHECK_TYPEDEF (type);
6774 if (TYPE_CODE (type2) == TYPE_CODE_PTR
6775 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
6777 val = ada_value_ind (val);
6778 type2 = VALUE_TYPE (val);
6781 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
6782 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
6784 if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
6785 || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
6786 != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
6787 error ("Incompatible types in assignment");
6788 VALUE_TYPE (val) = type;
6794 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
6795 int *pos, enum noside noside)
6798 enum ada_attribute atr;
6799 int tem, tem2, tem3;
6801 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
6804 struct value **argvec;
6808 op = exp->elts[pc].opcode;
6815 unwrap_value (evaluate_subexp_standard
6816 (expect_type, exp, pos, noside));
6820 type = exp->elts[pc + 1].type;
6821 arg1 = evaluate_subexp (type, exp, pos, noside);
6822 if (noside == EVAL_SKIP)
6824 if (type != check_typedef (VALUE_TYPE (arg1)))
6826 if (ada_is_fixed_point_type (type))
6827 arg1 = cast_to_fixed (type, arg1);
6828 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
6829 arg1 = value_cast (type, cast_from_fixed_to_double (arg1));
6830 else if (VALUE_LVAL (arg1) == lval_memory)
6832 /* This is in case of the really obscure (and undocumented,
6833 but apparently expected) case of (Foo) Bar.all, where Bar
6834 is an integer constant and Foo is a dynamic-sized type.
6835 If we don't do this, ARG1 will simply be relabeled with
6837 if (noside == EVAL_AVOID_SIDE_EFFECTS)
6838 return value_zero (to_static_fixed_type (type), not_lval);
6841 (type, 0, VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1), 0);
6844 arg1 = value_cast (type, arg1);
6848 /* FIXME: UNOP_QUAL should be defined in expression.h */
6851 type = exp->elts[pc + 1].type;
6852 return ada_evaluate_subexp (type, exp, pos, noside);
6855 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
6856 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
6857 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
6859 if (binop_user_defined_p (op, arg1, arg2))
6860 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
6863 if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
6864 arg2 = cast_to_fixed (VALUE_TYPE (arg1), arg2);
6865 else if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
6867 ("Fixed-point values must be assigned to fixed-point variables");
6869 arg2 = coerce_for_assign (VALUE_TYPE (arg1), arg2);
6870 return ada_value_assign (arg1, arg2);
6874 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
6875 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
6876 if (noside == EVAL_SKIP)
6878 if (binop_user_defined_p (op, arg1, arg2))
6879 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
6882 if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
6883 || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
6884 && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
6886 ("Operands of fixed-point addition must have the same type");
6887 return value_cast (VALUE_TYPE (arg1), value_add (arg1, arg2));
6891 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
6892 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
6893 if (noside == EVAL_SKIP)
6895 if (binop_user_defined_p (op, arg1, arg2))
6896 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
6899 if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
6900 || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
6901 && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
6903 ("Operands of fixed-point subtraction must have the same type");
6904 return value_cast (VALUE_TYPE (arg1), value_sub (arg1, arg2));
6909 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
6910 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
6911 if (noside == EVAL_SKIP)
6913 if (binop_user_defined_p (op, arg1, arg2))
6914 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
6916 if (noside == EVAL_AVOID_SIDE_EFFECTS
6917 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
6918 return value_zero (VALUE_TYPE (arg1), not_lval);
6921 if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
6922 arg1 = cast_from_fixed_to_double (arg1);
6923 if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
6924 arg2 = cast_from_fixed_to_double (arg2);
6925 return value_binop (arg1, arg2, op);
6929 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
6930 if (noside == EVAL_SKIP)
6932 if (unop_user_defined_p (op, arg1))
6933 return value_x_unop (arg1, op, EVAL_NORMAL);
6934 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
6935 return value_cast (VALUE_TYPE (arg1), value_neg (arg1));
6937 return value_neg (arg1);
6939 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
6940 /* case OP_UNRESOLVED_VALUE:
6941 /* Only encountered when an unresolved symbol occurs in a
6942 context other than a function call, in which case, it is
6945 if (noside == EVAL_SKIP)
6948 error ("Unexpected unresolved symbol, %s, during evaluation",
6949 ada_demangle (exp->elts[pc + 2].name));
6953 if (noside == EVAL_SKIP)
6958 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
6962 (to_static_fixed_type
6963 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
6969 unwrap_value (evaluate_subexp_standard
6970 (expect_type, exp, pos, noside));
6971 return ada_to_fixed_value (VALUE_TYPE (arg1), 0,
6972 VALUE_ADDRESS (arg1) +
6973 VALUE_OFFSET (arg1), arg1);
6978 tem2 = longest_to_int (exp->elts[pc + 1].longconst);
6979 tem3 = longest_to_int (exp->elts[pc + 2].longconst);
6980 nargs = tem3 - tem2 + 1;
6981 type = expect_type ? check_typedef (expect_type) : NULL_TYPE;
6984 (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
6985 for (tem = 0; tem == 0 || tem < nargs; tem += 1)
6986 /* At least one element gets inserted for the type */
6988 /* Ensure that array expressions are coerced into pointer objects. */
6989 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
6991 if (noside == EVAL_SKIP)
6993 return value_array (tem2, tem3, argvec);
6998 /* Allocate arg vector, including space for the function to be
6999 called in argvec[0] and a terminating NULL */
7000 nargs = longest_to_int (exp->elts[pc + 1].longconst);
7002 (struct value * *) alloca (sizeof (struct value *) * (nargs + 2));
7004 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
7005 /* FIXME: name should be defined in expresion.h */
7006 /* if (exp->elts[*pos].opcode == OP_UNRESOLVED_VALUE)
7007 error ("Unexpected unresolved symbol, %s, during evaluation",
7008 ada_demangle (exp->elts[pc + 5].name));
7012 error ("unexpected code path, FIXME");
7016 for (tem = 0; tem <= nargs; tem += 1)
7017 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7020 if (noside == EVAL_SKIP)
7024 if (TYPE_CODE (VALUE_TYPE (argvec[0])) == TYPE_CODE_REF)
7025 argvec[0] = value_addr (argvec[0]);
7027 if (ada_is_packed_array_type (VALUE_TYPE (argvec[0])))
7028 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
7030 type = check_typedef (VALUE_TYPE (argvec[0]));
7031 if (TYPE_CODE (type) == TYPE_CODE_PTR)
7033 switch (TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (type))))
7035 case TYPE_CODE_FUNC:
7036 type = check_typedef (TYPE_TARGET_TYPE (type));
7038 case TYPE_CODE_ARRAY:
7040 case TYPE_CODE_STRUCT:
7041 if (noside != EVAL_AVOID_SIDE_EFFECTS)
7042 argvec[0] = ada_value_ind (argvec[0]);
7043 type = check_typedef (TYPE_TARGET_TYPE (type));
7046 error ("cannot subscript or call something of type `%s'",
7047 ada_type_name (VALUE_TYPE (argvec[0])));
7052 switch (TYPE_CODE (type))
7054 case TYPE_CODE_FUNC:
7055 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7056 return allocate_value (TYPE_TARGET_TYPE (type));
7057 return call_function_by_hand (argvec[0], nargs, argvec + 1);
7058 case TYPE_CODE_STRUCT:
7060 int arity = ada_array_arity (type);
7061 type = ada_array_element_type (type, nargs);
7063 error ("cannot subscript or call a record");
7065 error ("wrong number of subscripts; expecting %d", arity);
7066 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7067 return allocate_value (ada_aligned_type (type));
7069 unwrap_value (ada_value_subscript
7070 (argvec[0], nargs, argvec + 1));
7072 case TYPE_CODE_ARRAY:
7073 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7075 type = ada_array_element_type (type, nargs);
7077 error ("element type of array unknown");
7079 return allocate_value (ada_aligned_type (type));
7082 unwrap_value (ada_value_subscript
7083 (ada_coerce_to_simple_array (argvec[0]),
7084 nargs, argvec + 1));
7085 case TYPE_CODE_PTR: /* Pointer to array */
7086 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
7087 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7089 type = ada_array_element_type (type, nargs);
7091 error ("element type of array unknown");
7093 return allocate_value (ada_aligned_type (type));
7096 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
7097 nargs, argvec + 1));
7100 error ("Internal error in evaluate_subexp");
7105 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7107 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
7109 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
7110 if (noside == EVAL_SKIP)
7113 /* If this is a reference to an array, then dereference it */
7114 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_REF
7115 && TYPE_TARGET_TYPE (VALUE_TYPE (array)) != NULL
7116 && TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (array))) ==
7118 && !ada_is_array_descriptor (check_typedef (VALUE_TYPE (array))))
7120 array = ada_coerce_ref (array);
7123 if (noside == EVAL_AVOID_SIDE_EFFECTS &&
7124 ada_is_array_descriptor (check_typedef (VALUE_TYPE (array))))
7126 /* Try to dereference the array, in case it is an access to array */
7127 struct type *arrType = ada_type_of_array (array, 0);
7128 if (arrType != NULL)
7129 array = value_at_lazy (arrType, 0, NULL);
7131 if (ada_is_array_descriptor (VALUE_TYPE (array)))
7132 array = ada_coerce_to_simple_array (array);
7134 /* If at this point we have a pointer to an array, it means that
7135 it is a pointer to a simple (non-ada) array. We just then
7137 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_PTR
7138 && TYPE_TARGET_TYPE (VALUE_TYPE (array)) != NULL
7139 && TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (array))) ==
7142 array = ada_value_ind (array);
7145 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7146 /* The following will get the bounds wrong, but only in contexts
7147 where the value is not being requested (FIXME?). */
7150 return value_slice (array, lowbound, upper - lowbound + 1);
7153 /* FIXME: UNOP_MBR should be defined in expression.h */
7156 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7157 type = exp->elts[pc + 1].type;
7159 if (noside == EVAL_SKIP)
7162 switch (TYPE_CODE (type))
7165 warning ("Membership test incompletely implemented; always returns true");
7166 return value_from_longest (builtin_type_int, (LONGEST) 1);
7168 case TYPE_CODE_RANGE:
7169 arg2 = value_from_longest (builtin_type_int,
7170 (LONGEST) TYPE_LOW_BOUND (type));
7171 arg3 = value_from_longest (builtin_type_int,
7172 (LONGEST) TYPE_HIGH_BOUND (type));
7174 value_from_longest (builtin_type_int,
7175 (value_less (arg1,arg3)
7176 || value_equal (arg1,arg3))
7177 && (value_less (arg2,arg1)
7178 || value_equal (arg2,arg1)));
7181 /* FIXME: BINOP_MBR should be defined in expression.h */
7184 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7185 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7187 if (noside == EVAL_SKIP)
7190 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7191 return value_zero (builtin_type_int, not_lval);
7193 tem = longest_to_int (exp->elts[pc + 1].longconst);
7195 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg2)))
7196 error ("invalid dimension number to '%s", "range");
7198 arg3 = ada_array_bound (arg2, tem, 1);
7199 arg2 = ada_array_bound (arg2, tem, 0);
7202 value_from_longest (builtin_type_int,
7203 (value_less (arg1,arg3)
7204 || value_equal (arg1,arg3))
7205 && (value_less (arg2,arg1)
7206 || value_equal (arg2,arg1)));
7208 /* FIXME: TERNOP_MBR should be defined in expression.h */
7210 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7211 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7212 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7214 if (noside == EVAL_SKIP)
7218 value_from_longest (builtin_type_int,
7219 (value_less (arg1,arg3)
7220 || value_equal (arg1,arg3))
7221 && (value_less (arg2,arg1)
7222 || value_equal (arg2,arg1)));
7224 /* FIXME: OP_ATTRIBUTE should be defined in expression.h */
7225 /* case OP_ATTRIBUTE:
7227 atr = (enum ada_attribute) longest_to_int (exp->elts[pc + 2].longconst);
7231 error ("unexpected attribute encountered");
7237 struct type* type_arg;
7238 if (exp->elts[*pos].opcode == OP_TYPE)
7240 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7242 type_arg = exp->elts[pc + 5].type;
7246 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7250 if (exp->elts[*pos].opcode != OP_LONG)
7251 error ("illegal operand to '%s", ada_attribute_name (atr));
7252 tem = longest_to_int (exp->elts[*pos+2].longconst);
7255 if (noside == EVAL_SKIP)
7258 if (type_arg == NULL)
7260 arg1 = ada_coerce_ref (arg1);
7262 if (ada_is_packed_array_type (VALUE_TYPE (arg1)))
7263 arg1 = ada_coerce_to_simple_array (arg1);
7265 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg1)))
7266 error ("invalid dimension number to '%s",
7267 ada_attribute_name (atr));
7269 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7271 type = ada_index_type (VALUE_TYPE (arg1), tem);
7273 error ("attempt to take bound of something that is not an array");
7274 return allocate_value (type);
7280 error ("unexpected attribute encountered");
7282 return ada_array_bound (arg1, tem, 0);
7284 return ada_array_bound (arg1, tem, 1);
7286 return ada_array_length (arg1, tem);
7289 else if (TYPE_CODE (type_arg) == TYPE_CODE_RANGE
7290 || TYPE_CODE (type_arg) == TYPE_CODE_INT)
7292 struct type* range_type;
7293 char* name = ada_type_name (type_arg);
7296 if (TYPE_CODE (type_arg) == TYPE_CODE_RANGE)
7297 range_type = type_arg;
7299 error ("unimplemented type attribute");
7303 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
7307 error ("unexpected attribute encountered");
7309 return value_from_longest (TYPE_TARGET_TYPE (range_type),
7310 TYPE_LOW_BOUND (range_type));
7312 return value_from_longest (TYPE_TARGET_TYPE (range_type),
7313 TYPE_HIGH_BOUND (range_type));
7316 else if (TYPE_CODE (type_arg) == TYPE_CODE_ENUM)
7321 error ("unexpected attribute encountered");
7323 return value_from_longest
7324 (type_arg, TYPE_FIELD_BITPOS (type_arg, 0));
7326 return value_from_longest
7328 TYPE_FIELD_BITPOS (type_arg,
7329 TYPE_NFIELDS (type_arg) - 1));
7332 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
7333 error ("unimplemented type attribute");
7338 if (ada_is_packed_array_type (type_arg))
7339 type_arg = decode_packed_array_type (type_arg);
7341 if (tem < 1 || tem > ada_array_arity (type_arg))
7342 error ("invalid dimension number to '%s",
7343 ada_attribute_name (atr));
7345 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7347 type = ada_index_type (type_arg, tem);
7349 error ("attempt to take bound of something that is not an array");
7350 return allocate_value (type);
7356 error ("unexpected attribute encountered");
7358 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
7359 return value_from_longest (type, low);
7361 high = ada_array_bound_from_type (type_arg, tem, 1, &type);
7362 return value_from_longest (type, high);
7364 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
7365 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
7366 return value_from_longest (type, high-low+1);
7372 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7373 if (noside == EVAL_SKIP)
7376 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7378 value_zero (ada_tag_type (arg1), not_lval);
7380 return ada_value_tag (arg1);
7384 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7385 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7386 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7387 if (noside == EVAL_SKIP)
7389 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7390 return value_zero (VALUE_TYPE (arg1), not_lval);
7392 return value_binop (arg1, arg2,
7393 atr == ATR_MIN ? BINOP_MIN : BINOP_MAX);
7397 struct type* type_arg = exp->elts[pc + 5].type;
7398 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7401 if (noside == EVAL_SKIP)
7404 if (! ada_is_modular_type (type_arg))
7405 error ("'modulus must be applied to modular type");
7407 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
7408 ada_modulus (type_arg));
7413 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7414 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7415 if (noside == EVAL_SKIP)
7417 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7418 return value_zero (builtin_type_ada_int, not_lval);
7420 return value_pos_atr (arg1);
7423 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7424 if (noside == EVAL_SKIP)
7426 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7427 return value_zero (builtin_type_ada_int, not_lval);
7429 return value_from_longest (builtin_type_ada_int,
7431 * TYPE_LENGTH (VALUE_TYPE (arg1)));
7434 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7435 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7436 type = exp->elts[pc + 5].type;
7437 if (noside == EVAL_SKIP)
7439 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7440 return value_zero (type, not_lval);
7442 return value_val_atr (type, arg1);
7445 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7446 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7447 if (noside == EVAL_SKIP)
7449 if (binop_user_defined_p (op, arg1, arg2))
7450 return unwrap_value (value_x_binop (arg1, arg2, op, OP_NULL,
7452 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7453 return value_zero (VALUE_TYPE (arg1), not_lval);
7455 return value_binop (arg1, arg2, op);
7458 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7459 if (noside == EVAL_SKIP)
7461 if (unop_user_defined_p (op, arg1))
7462 return unwrap_value (value_x_unop (arg1, op, EVAL_NORMAL));
7467 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7468 if (noside == EVAL_SKIP)
7470 if (value_less (arg1, value_zero (VALUE_TYPE (arg1), not_lval)))
7471 return value_neg (arg1);
7476 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
7477 expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type));
7478 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
7479 if (noside == EVAL_SKIP)
7481 type = check_typedef (VALUE_TYPE (arg1));
7482 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7484 if (ada_is_array_descriptor (type))
7485 /* GDB allows dereferencing GNAT array descriptors. */
7487 struct type *arrType = ada_type_of_array (arg1, 0);
7488 if (arrType == NULL)
7489 error ("Attempt to dereference null array pointer.");
7490 return value_at_lazy (arrType, 0, NULL);
7492 else if (TYPE_CODE (type) == TYPE_CODE_PTR
7493 || TYPE_CODE (type) == TYPE_CODE_REF
7494 /* In C you can dereference an array to get the 1st elt. */
7495 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
7498 (to_static_fixed_type
7499 (ada_aligned_type (check_typedef (TYPE_TARGET_TYPE (type)))),
7501 else if (TYPE_CODE (type) == TYPE_CODE_INT)
7502 /* GDB allows dereferencing an int. */
7503 return value_zero (builtin_type_int, lval_memory);
7505 error ("Attempt to take contents of a non-pointer value.");
7507 arg1 = ada_coerce_ref (arg1);
7508 type = check_typedef (VALUE_TYPE (arg1));
7510 if (ada_is_array_descriptor (type))
7511 /* GDB allows dereferencing GNAT array descriptors. */
7512 return ada_coerce_to_simple_array (arg1);
7514 return ada_value_ind (arg1);
7516 case STRUCTOP_STRUCT:
7517 tem = longest_to_int (exp->elts[pc + 1].longconst);
7518 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
7519 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7520 if (noside == EVAL_SKIP)
7522 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7523 return value_zero (ada_aligned_type
7524 (ada_lookup_struct_elt_type (VALUE_TYPE (arg1),
7530 return unwrap_value (ada_value_struct_elt (arg1,
7531 &exp->elts[pc + 2].string,
7534 /* The value is not supposed to be used. This is here to make it
7535 easier to accommodate expressions that contain types. */
7537 if (noside == EVAL_SKIP)
7539 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7540 return allocate_value (builtin_type_void);
7542 error ("Attempt to use a type name as an expression");
7545 tem = longest_to_int (exp->elts[pc + 1].longconst);
7546 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
7547 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7548 if (noside == EVAL_SKIP)
7550 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7551 return value_zero (ada_aligned_type
7552 (ada_lookup_struct_elt_type (VALUE_TYPE (arg1),
7558 return unwrap_value (ada_value_struct_elt (arg1,
7559 &exp->elts[pc + 2].string,
7564 return value_from_longest (builtin_type_long, (LONGEST) 1);
7570 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
7571 type name that encodes the 'small and 'delta information.
7572 Otherwise, return NULL. */
7575 fixed_type_info (struct type *type)
7577 const char *name = ada_type_name (type);
7578 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
7580 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
7582 const char *tail = strstr (name, "___XF_");
7588 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
7589 return fixed_type_info (TYPE_TARGET_TYPE (type));
7594 /* Returns non-zero iff TYPE represents an Ada fixed-point type. */
7597 ada_is_fixed_point_type (struct type *type)
7599 return fixed_type_info (type) != NULL;
7602 /* Assuming that TYPE is the representation of an Ada fixed-point
7603 type, return its delta, or -1 if the type is malformed and the
7604 delta cannot be determined. */
7607 ada_delta (struct type *type)
7609 const char *encoding = fixed_type_info (type);
7612 if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
7615 return (DOUBLEST) num / (DOUBLEST) den;
7618 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
7619 factor ('SMALL value) associated with the type. */
7622 scaling_factor (struct type *type)
7624 const char *encoding = fixed_type_info (type);
7625 unsigned long num0, den0, num1, den1;
7628 n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
7633 return (DOUBLEST) num1 / (DOUBLEST) den1;
7635 return (DOUBLEST) num0 / (DOUBLEST) den0;
7639 /* Assuming that X is the representation of a value of fixed-point
7640 type TYPE, return its floating-point equivalent. */
7643 ada_fixed_to_float (struct type *type, LONGEST x)
7645 return (DOUBLEST) x *scaling_factor (type);
7648 /* The representation of a fixed-point value of type TYPE
7649 corresponding to the value X. */
7652 ada_float_to_fixed (struct type *type, DOUBLEST x)
7654 return (LONGEST) (x / scaling_factor (type) + 0.5);
7658 /* VAX floating formats */
7660 /* Non-zero iff TYPE represents one of the special VAX floating-point
7663 ada_is_vax_floating_type (struct type *type)
7666 (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
7669 && (TYPE_CODE (type) == TYPE_CODE_INT
7670 || TYPE_CODE (type) == TYPE_CODE_RANGE)
7671 && DEPRECATED_STREQN (ada_type_name (type) + name_len - 6, "___XF", 5);
7674 /* The type of special VAX floating-point type this is, assuming
7675 ada_is_vax_floating_point */
7677 ada_vax_float_type_suffix (struct type *type)
7679 return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
7682 /* A value representing the special debugging function that outputs
7683 VAX floating-point values of the type represented by TYPE. Assumes
7684 ada_is_vax_floating_type (TYPE). */
7686 ada_vax_float_print_function (struct type *type)
7688 switch (ada_vax_float_type_suffix (type))
7691 return get_var_value ("DEBUG_STRING_F", 0);
7693 return get_var_value ("DEBUG_STRING_D", 0);
7695 return get_var_value ("DEBUG_STRING_G", 0);
7697 error ("invalid VAX floating-point type");
7704 /* Scan STR beginning at position K for a discriminant name, and
7705 return the value of that discriminant field of DVAL in *PX. If
7706 PNEW_K is not null, put the position of the character beyond the
7707 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
7708 not alter *PX and *PNEW_K if unsuccessful. */
7711 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
7714 static char *bound_buffer = NULL;
7715 static size_t bound_buffer_len = 0;
7718 struct value *bound_val;
7720 if (dval == NULL || str == NULL || str[k] == '\0')
7723 pend = strstr (str + k, "__");
7727 k += strlen (bound);
7731 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
7732 bound = bound_buffer;
7733 strncpy (bound_buffer, str + k, pend - (str + k));
7734 bound[pend - (str + k)] = '\0';
7738 bound_val = ada_search_struct_field (bound, dval, 0, VALUE_TYPE (dval));
7739 if (bound_val == NULL)
7742 *px = value_as_long (bound_val);
7748 /* Value of variable named NAME in the current environment. If
7749 no such variable found, then if ERR_MSG is null, returns 0, and
7750 otherwise causes an error with message ERR_MSG. */
7751 static struct value *
7752 get_var_value (char *name, char *err_msg)
7754 struct symbol **syms;
7755 struct block **blocks;
7759 ada_lookup_symbol_list (name, get_selected_block (NULL), VAR_DOMAIN,
7764 if (err_msg == NULL)
7767 error ("%s", err_msg);
7770 return value_of_variable (syms[0], blocks[0]);
7773 /* Value of integer variable named NAME in the current environment. If
7774 no such variable found, then if ERR_MSG is null, returns 0, and sets
7775 *FLAG to 0. If successful, sets *FLAG to 1. */
7777 get_int_var_value (char *name, char *err_msg, int *flag)
7779 struct value *var_val = get_var_value (name, err_msg);
7791 return value_as_long (var_val);
7796 /* Return a range type whose base type is that of the range type named
7797 NAME in the current environment, and whose bounds are calculated
7798 from NAME according to the GNAT range encoding conventions.
7799 Extract discriminant values, if needed, from DVAL. If a new type
7800 must be created, allocate in OBJFILE's space. The bounds
7801 information, in general, is encoded in NAME, the base type given in
7802 the named range type. */
7804 static struct type *
7805 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
7807 struct type *raw_type = ada_find_any_type (name);
7808 struct type *base_type;
7812 if (raw_type == NULL)
7813 base_type = builtin_type_int;
7814 else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
7815 base_type = TYPE_TARGET_TYPE (raw_type);
7817 base_type = raw_type;
7819 subtype_info = strstr (name, "___XD");
7820 if (subtype_info == NULL)
7824 static char *name_buf = NULL;
7825 static size_t name_len = 0;
7826 int prefix_len = subtype_info - name;
7832 GROW_VECT (name_buf, name_len, prefix_len + 5);
7833 strncpy (name_buf, name, prefix_len);
7834 name_buf[prefix_len] = '\0';
7837 bounds_str = strchr (subtype_info, '_');
7840 if (*subtype_info == 'L')
7842 if (!ada_scan_number (bounds_str, n, &L, &n)
7843 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
7845 if (bounds_str[n] == '_')
7847 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
7853 strcpy (name_buf + prefix_len, "___L");
7854 L = get_int_var_value (name_buf, "Index bound unknown.", NULL);
7857 if (*subtype_info == 'U')
7859 if (!ada_scan_number (bounds_str, n, &U, &n)
7860 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
7865 strcpy (name_buf + prefix_len, "___U");
7866 U = get_int_var_value (name_buf, "Index bound unknown.", NULL);
7869 if (objfile == NULL)
7870 objfile = TYPE_OBJFILE (base_type);
7871 type = create_range_type (alloc_type (objfile), base_type, L, U);
7872 TYPE_NAME (type) = name;
7877 /* True iff NAME is the name of a range type. */
7879 ada_is_range_type_name (const char *name)
7881 return (name != NULL && strstr (name, "___XD"));
7887 /* True iff TYPE is an Ada modular type. */
7889 ada_is_modular_type (struct type *type)
7891 /* FIXME: base_type should be declared in gdbtypes.h, implemented in
7893 struct type *subranged_type; /* = base_type (type); */
7895 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
7896 && TYPE_CODE (subranged_type) != TYPE_CODE_ENUM
7897 && TYPE_UNSIGNED (subranged_type));
7900 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
7902 ada_modulus (struct type * type)
7904 return TYPE_HIGH_BOUND (type) + 1;
7911 /* Table mapping opcodes into strings for printing operators
7912 and precedences of the operators. */
7914 static const struct op_print ada_op_print_tab[] = {
7915 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
7916 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
7917 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
7918 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
7919 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
7920 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
7921 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
7922 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
7923 {"<=", BINOP_LEQ, PREC_ORDER, 0},
7924 {">=", BINOP_GEQ, PREC_ORDER, 0},
7925 {">", BINOP_GTR, PREC_ORDER, 0},
7926 {"<", BINOP_LESS, PREC_ORDER, 0},
7927 {">>", BINOP_RSH, PREC_SHIFT, 0},
7928 {"<<", BINOP_LSH, PREC_SHIFT, 0},
7929 {"+", BINOP_ADD, PREC_ADD, 0},
7930 {"-", BINOP_SUB, PREC_ADD, 0},
7931 {"&", BINOP_CONCAT, PREC_ADD, 0},
7932 {"*", BINOP_MUL, PREC_MUL, 0},
7933 {"/", BINOP_DIV, PREC_MUL, 0},
7934 {"rem", BINOP_REM, PREC_MUL, 0},
7935 {"mod", BINOP_MOD, PREC_MUL, 0},
7936 {"**", BINOP_EXP, PREC_REPEAT, 0},
7937 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
7938 {"-", UNOP_NEG, PREC_PREFIX, 0},
7939 {"+", UNOP_PLUS, PREC_PREFIX, 0},
7940 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
7941 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
7942 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
7943 {".all", UNOP_IND, PREC_SUFFIX, 1}, /* FIXME: postfix .ALL */
7944 {"'access", UNOP_ADDR, PREC_SUFFIX, 1}, /* FIXME: postfix 'ACCESS */
7948 /* Assorted Types and Interfaces */
7950 struct type *builtin_type_ada_int;
7951 struct type *builtin_type_ada_short;
7952 struct type *builtin_type_ada_long;
7953 struct type *builtin_type_ada_long_long;
7954 struct type *builtin_type_ada_char;
7955 struct type *builtin_type_ada_float;
7956 struct type *builtin_type_ada_double;
7957 struct type *builtin_type_ada_long_double;
7958 struct type *builtin_type_ada_natural;
7959 struct type *builtin_type_ada_positive;
7960 struct type *builtin_type_ada_system_address;
7962 struct type **const (ada_builtin_types[]) =
7965 &builtin_type_ada_int,
7966 &builtin_type_ada_long,
7967 &builtin_type_ada_short,
7968 &builtin_type_ada_char,
7969 &builtin_type_ada_float,
7970 &builtin_type_ada_double,
7971 &builtin_type_ada_long_long,
7972 &builtin_type_ada_long_double,
7973 &builtin_type_ada_natural, &builtin_type_ada_positive,
7974 /* The following types are carried over from C for convenience. */
7977 &builtin_type_short,
7979 &builtin_type_float,
7980 &builtin_type_double,
7981 &builtin_type_long_long,
7983 &builtin_type_signed_char,
7984 &builtin_type_unsigned_char,
7985 &builtin_type_unsigned_short,
7986 &builtin_type_unsigned_int,
7987 &builtin_type_unsigned_long,
7988 &builtin_type_unsigned_long_long,
7989 &builtin_type_long_double,
7990 &builtin_type_complex, &builtin_type_double_complex, 0};
7992 /* Not really used, but needed in the ada_language_defn. */
7994 emit_char (int c, struct ui_file *stream, int quoter)
7996 ada_emit_char (c, stream, quoter, 1);
7999 const struct language_defn ada_language_defn = {
8000 "ada", /* Language name */
8003 /* FIXME: language_ada should be defined in defs.h */
8007 case_sensitive_on, /* Yes, Ada is case-insensitive, but
8008 * that's not quite what this means. */
8011 ada_evaluate_subexp,
8012 ada_printchar, /* Print a character constant */
8013 ada_printstr, /* Function to print string constant */
8014 emit_char, /* Function to print single char (not used) */
8015 ada_create_fundamental_type, /* Create fundamental type in this language */
8016 ada_print_type, /* Print a type using appropriate syntax */
8017 ada_val_print, /* Print a value using appropriate syntax */
8018 ada_value_print, /* Print a top-level value */
8019 NULL, /* Language specific skip_trampoline */
8020 value_of_this, /* value_of_this */
8021 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
8022 basic_lookup_transparent_type,/* lookup_transparent_type */
8023 NULL, /* Language specific symbol demangler */
8024 {"", "", "", ""}, /* Binary format info */
8026 {"8#%lo#", "8#", "o", "#"}, /* Octal format info */
8027 {"%ld", "", "d", ""}, /* Decimal format info */
8028 {"16#%lx#", "16#", "x", "#"}, /* Hex format info */
8030 /* Copied from c-lang.c. */
8031 {"0%lo", "0", "o", ""}, /* Octal format info */
8032 {"%ld", "", "d", ""}, /* Decimal format info */
8033 {"0x%lx", "0x", "x", ""}, /* Hex format info */
8035 ada_op_print_tab, /* expression operators for printing */
8036 1, /* c-style arrays (FIXME?) */
8037 0, /* String lower bound (FIXME?) */
8038 &builtin_type_ada_char,
8039 default_word_break_characters,
8044 _initialize_ada_language (void)
8046 builtin_type_ada_int =
8047 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8048 0, "integer", (struct objfile *) NULL);
8049 builtin_type_ada_long =
8050 init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
8051 0, "long_integer", (struct objfile *) NULL);
8052 builtin_type_ada_short =
8053 init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8054 0, "short_integer", (struct objfile *) NULL);
8055 builtin_type_ada_char =
8056 init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8057 0, "character", (struct objfile *) NULL);
8058 builtin_type_ada_float =
8059 init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
8060 0, "float", (struct objfile *) NULL);
8061 builtin_type_ada_double =
8062 init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
8063 0, "long_float", (struct objfile *) NULL);
8064 builtin_type_ada_long_long =
8065 init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8066 0, "long_long_integer", (struct objfile *) NULL);
8067 builtin_type_ada_long_double =
8068 init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
8069 0, "long_long_float", (struct objfile *) NULL);
8070 builtin_type_ada_natural =
8071 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8072 0, "natural", (struct objfile *) NULL);
8073 builtin_type_ada_positive =
8074 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8075 0, "positive", (struct objfile *) NULL);
8078 builtin_type_ada_system_address =
8079 lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
8080 (struct objfile *) NULL));
8081 TYPE_NAME (builtin_type_ada_system_address) = "system__address";
8083 add_language (&ada_language_defn);
8086 (add_set_cmd ("varsize-limit", class_support, var_uinteger,
8087 (char *) &varsize_limit,
8088 "Set maximum bytes in dynamic-sized object.",
8089 &setlist), &showlist);
8090 varsize_limit = 65536;
8092 add_com ("begin", class_breakpoint, begin_command,
8093 "Start the debugged program, stopping at the beginning of the\n\
8094 main program. You may specify command-line arguments to give it, as for\n\
8095 the \"run\" command (q.v.).");
8099 /* Create a fundamental Ada type using default reasonable for the current
8102 Some object/debugging file formats (DWARF version 1, COFF, etc) do not
8103 define fundamental types such as "int" or "double". Others (stabs or
8104 DWARF version 2, etc) do define fundamental types. For the formats which
8105 don't provide fundamental types, gdb can create such types using this
8108 FIXME: Some compilers distinguish explicitly signed integral types
8109 (signed short, signed int, signed long) from "regular" integral types
8110 (short, int, long) in the debugging information. There is some dis-
8111 agreement as to how useful this feature is. In particular, gcc does
8112 not support this. Also, only some debugging formats allow the
8113 distinction to be passed on to a debugger. For now, we always just
8114 use "short", "int", or "long" as the type name, for both the implicit
8115 and explicitly signed types. This also makes life easier for the
8116 gdb test suite since we don't have to account for the differences
8117 in output depending upon what the compiler and debugging format
8118 support. We will probably have to re-examine the issue when gdb
8119 starts taking it's fundamental type information directly from the
8120 debugging information supplied by the compiler. fnf@cygnus.com */
8122 static struct type *
8123 ada_create_fundamental_type (struct objfile *objfile, int typeid)
8125 struct type *type = NULL;
8130 /* FIXME: For now, if we are asked to produce a type not in this
8131 language, create the equivalent of a C integer type with the
8132 name "<?type?>". When all the dust settles from the type
8133 reconstruction work, this should probably become an error. */
8134 type = init_type (TYPE_CODE_INT,
8135 TARGET_INT_BIT / TARGET_CHAR_BIT,
8136 0, "<?type?>", objfile);
8137 warning ("internal error: no Ada fundamental type %d", typeid);
8140 type = init_type (TYPE_CODE_VOID,
8141 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8142 0, "void", objfile);
8145 type = init_type (TYPE_CODE_INT,
8146 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8147 0, "character", objfile);
8149 case FT_SIGNED_CHAR:
8150 type = init_type (TYPE_CODE_INT,
8151 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8152 0, "signed char", objfile);
8154 case FT_UNSIGNED_CHAR:
8155 type = init_type (TYPE_CODE_INT,
8156 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8157 TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
8160 type = init_type (TYPE_CODE_INT,
8161 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8162 0, "short_integer", objfile);
8164 case FT_SIGNED_SHORT:
8165 type = init_type (TYPE_CODE_INT,
8166 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8167 0, "short_integer", objfile);
8169 case FT_UNSIGNED_SHORT:
8170 type = init_type (TYPE_CODE_INT,
8171 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8172 TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
8175 type = init_type (TYPE_CODE_INT,
8176 TARGET_INT_BIT / TARGET_CHAR_BIT,
8177 0, "integer", objfile);
8179 case FT_SIGNED_INTEGER:
8180 type = init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT, 0, "integer", objfile); /* FIXME -fnf */
8182 case FT_UNSIGNED_INTEGER:
8183 type = init_type (TYPE_CODE_INT,
8184 TARGET_INT_BIT / TARGET_CHAR_BIT,
8185 TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
8188 type = init_type (TYPE_CODE_INT,
8189 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8190 0, "long_integer", objfile);
8192 case FT_SIGNED_LONG:
8193 type = init_type (TYPE_CODE_INT,
8194 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8195 0, "long_integer", objfile);
8197 case FT_UNSIGNED_LONG:
8198 type = init_type (TYPE_CODE_INT,
8199 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8200 TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
8203 type = init_type (TYPE_CODE_INT,
8204 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8205 0, "long_long_integer", objfile);
8207 case FT_SIGNED_LONG_LONG:
8208 type = init_type (TYPE_CODE_INT,
8209 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8210 0, "long_long_integer", objfile);
8212 case FT_UNSIGNED_LONG_LONG:
8213 type = init_type (TYPE_CODE_INT,
8214 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8215 TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
8218 type = init_type (TYPE_CODE_FLT,
8219 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
8220 0, "float", objfile);
8222 case FT_DBL_PREC_FLOAT:
8223 type = init_type (TYPE_CODE_FLT,
8224 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
8225 0, "long_float", objfile);
8227 case FT_EXT_PREC_FLOAT:
8228 type = init_type (TYPE_CODE_FLT,
8229 TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
8230 0, "long_long_float", objfile);
8237 ada_dump_symtab (struct symtab *s)
8240 fprintf (stderr, "New symtab: [\n");
8241 fprintf (stderr, " Name: %s/%s;\n",
8242 s->dirname ? s->dirname : "?", s->filename ? s->filename : "?");
8243 fprintf (stderr, " Format: %s;\n", s->debugformat);
8244 if (s->linetable != NULL)
8246 fprintf (stderr, " Line table (section %d):\n", s->block_line_section);
8247 for (i = 0; i < s->linetable->nitems; i += 1)
8249 struct linetable_entry *e = s->linetable->item + i;
8250 fprintf (stderr, " %4ld: %8lx\n", (long) e->line, (long) e->pc);
8253 fprintf (stderr, "]\n");