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 /* Sections of code marked
28 indicate sections that are used in sources distributed by
29 ACT, Inc., but not yet integrated into the public tree (where
30 GNAT_GDB is not defined). They are retained here nevertheless
31 to minimize the problems of maintaining different versions
32 of the source and to make the full source available. */
36 #include "gdb_string.h"
40 #include "gdb_regex.h"
45 #include "expression.h"
46 #include "parser-defs.h"
52 #include "breakpoint.h"
55 #include "gdb_obstack.h"
57 #include "completer.h"
64 #include "dictionary.h"
66 #ifndef ADA_RETAIN_DOTS
67 #define ADA_RETAIN_DOTS 0
70 /* Define whether or not the C operator '/' truncates towards zero for
71 differently signed operands (truncation direction is undefined in C).
72 Copied from valarith.c. */
74 #ifndef TRUNCATION_TOWARDS_ZERO
75 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
79 /* A structure that contains a vector of strings.
80 The main purpose of this type is to group the vector and its
81 associated parameters in one structure. This makes it easier
82 to handle and pass around. */
86 char **array; /* The vector itself. */
87 int index; /* Index of the next available element in the array. */
88 size_t size; /* The number of entries allocated in the array. */
91 static struct string_vector xnew_string_vector (int initial_size);
92 static void string_vector_append (struct string_vector *sv, char *str);
95 static const char *ada_unqualified_name (const char *decoded_name);
96 static char *add_angle_brackets (const char *str);
97 static void extract_string (CORE_ADDR addr, char *buf);
98 static char *function_name_from_pc (CORE_ADDR pc);
100 static struct type *ada_create_fundamental_type (struct objfile *, int);
102 static void modify_general_field (char *, LONGEST, int, int);
104 static struct type *desc_base_type (struct type *);
106 static struct type *desc_bounds_type (struct type *);
108 static struct value *desc_bounds (struct value *);
110 static int fat_pntr_bounds_bitpos (struct type *);
112 static int fat_pntr_bounds_bitsize (struct type *);
114 static struct type *desc_data_type (struct type *);
116 static struct value *desc_data (struct value *);
118 static int fat_pntr_data_bitpos (struct type *);
120 static int fat_pntr_data_bitsize (struct type *);
122 static struct value *desc_one_bound (struct value *, int, int);
124 static int desc_bound_bitpos (struct type *, int, int);
126 static int desc_bound_bitsize (struct type *, int, int);
128 static struct type *desc_index_type (struct type *, int);
130 static int desc_arity (struct type *);
132 static int ada_type_match (struct type *, struct type *, int);
134 static int ada_args_match (struct symbol *, struct value **, int);
136 static struct value *ensure_lval (struct value *, CORE_ADDR *);
138 static struct value *convert_actual (struct value *, struct type *,
141 static struct value *make_array_descriptor (struct type *, struct value *,
144 static void ada_add_block_symbols (struct obstack *,
145 struct block *, const char *,
146 domain_enum, struct objfile *,
147 struct symtab *, int);
149 static int is_nonfunction (struct ada_symbol_info *, int);
151 static void add_defn_to_vec (struct obstack *, struct symbol *, struct block *,
154 static int num_defns_collected (struct obstack *);
156 static struct ada_symbol_info *defns_collected (struct obstack *, int);
158 static struct partial_symbol *ada_lookup_partial_symbol (struct partial_symtab
159 *, const char *, int,
162 static struct symtab *symtab_for_sym (struct symbol *);
164 static struct value *resolve_subexp (struct expression **, int *, int,
167 static void replace_operator_with_call (struct expression **, int, int, int,
168 struct symbol *, struct block *);
170 static int possible_user_operator_p (enum exp_opcode, struct value **);
172 static char *ada_op_name (enum exp_opcode);
174 static const char *ada_decoded_op_name (enum exp_opcode);
176 static int numeric_type_p (struct type *);
178 static int integer_type_p (struct type *);
180 static int scalar_type_p (struct type *);
182 static int discrete_type_p (struct type *);
184 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
187 static char *extended_canonical_line_spec (struct symtab_and_line,
190 static struct value *evaluate_subexp (struct type *, struct expression *,
193 static struct value *evaluate_subexp_type (struct expression *, int *);
195 static struct type *ada_create_fundamental_type (struct objfile *, int);
197 static int is_dynamic_field (struct type *, int);
199 static struct type *to_fixed_variant_branch_type (struct type *, char *,
200 CORE_ADDR, struct value *);
202 static struct type *to_fixed_array_type (struct type *, struct value *, int);
204 static struct type *to_fixed_range_type (char *, struct value *,
207 static struct type *to_static_fixed_type (struct type *);
209 static struct value *unwrap_value (struct value *);
211 static struct type *packed_array_type (struct type *, long *);
213 static struct type *decode_packed_array_type (struct type *);
215 static struct value *decode_packed_array (struct value *);
217 static struct value *value_subscript_packed (struct value *, int,
220 static struct value *coerce_unspec_val_to_type (struct value *,
223 static struct value *get_var_value (char *, char *);
225 static int lesseq_defined_than (struct symbol *, struct symbol *);
227 static int equiv_types (struct type *, struct type *);
229 static int is_name_suffix (const char *);
231 static int wild_match (const char *, int, const char *);
233 static struct symtabs_and_lines
234 find_sal_from_funcs_and_line (const char *, int,
235 struct ada_symbol_info *, int);
237 static int find_line_in_linetable (struct linetable *, int,
238 struct ada_symbol_info *,
241 static int find_next_line_in_linetable (struct linetable *, int, int, int);
243 static void read_all_symtabs (const char *);
245 static int is_plausible_func_for_line (struct symbol *, int);
247 static struct value *ada_coerce_ref (struct value *);
249 static LONGEST pos_atr (struct value *);
251 static struct value *value_pos_atr (struct value *);
253 static struct value *value_val_atr (struct type *, struct value *);
255 static struct symbol *standard_lookup (const char *, const struct block *,
258 extern void symtab_symbol_info (char *regexp, domain_enum kind,
261 static struct value *ada_search_struct_field (char *, struct value *, int,
264 static struct value *ada_value_primitive_field (struct value *, int, int,
267 static int find_struct_field (char *, struct type *, int,
268 struct type **, int *, int *, int *);
270 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
273 static struct value *ada_to_fixed_value (struct value *);
275 static void adjust_pc_past_prologue (CORE_ADDR *);
277 static int ada_resolve_function (struct ada_symbol_info *, int,
278 struct value **, int, const char *,
281 static struct value *ada_coerce_to_simple_array (struct value *);
283 static int ada_is_direct_array_type (struct type *);
285 static void error_breakpoint_runtime_sym_not_found (const char *err_desc);
287 static int is_runtime_sym_defined (const char *name, int allow_tramp);
291 /* Maximum-sized dynamic type. */
292 static unsigned int varsize_limit;
294 /* FIXME: brobecker/2003-09-17: No longer a const because it is
295 returned by a function that does not return a const char *. */
296 static char *ada_completer_word_break_characters =
298 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
300 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
303 /* The name of the symbol to use to get the name of the main subprogram. */
304 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
305 = "__gnat_ada_main_program_name";
307 /* The name of the runtime function called when an exception is raised. */
308 static const char raise_sym_name[] = "__gnat_raise_nodefer_with_msg";
310 /* The name of the runtime function called when an unhandled exception
312 static const char raise_unhandled_sym_name[] = "__gnat_unhandled_exception";
314 /* The name of the runtime function called when an assert failure is
316 static const char raise_assert_sym_name[] =
317 "system__assertions__raise_assert_failure";
319 /* When GDB stops on an unhandled exception, GDB will go up the stack until
320 if finds a frame corresponding to this function, in order to extract the
321 name of the exception that has been raised from one of the parameters. */
322 static const char process_raise_exception_name[] =
323 "ada__exceptions__process_raise_exception";
325 /* A string that reflects the longest exception expression rewrite,
326 aside from the exception name. */
327 static const char longest_exception_template[] =
328 "'__gnat_raise_nodefer_with_msg' if long_integer(e) = long_integer(&)";
330 /* Limit on the number of warnings to raise per expression evaluation. */
331 static int warning_limit = 2;
333 /* Number of warning messages issued; reset to 0 by cleanups after
334 expression evaluation. */
335 static int warnings_issued = 0;
337 static const char *known_runtime_file_name_patterns[] = {
338 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
341 static const char *known_auxiliary_function_name_patterns[] = {
342 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
345 /* Space for allocating results of ada_lookup_symbol_list. */
346 static struct obstack symbol_list_obstack;
352 /* Create a new empty string_vector struct with an initial size of
355 static struct string_vector
356 xnew_string_vector (int initial_size)
358 struct string_vector result;
360 result.array = (char **) xmalloc ((initial_size + 1) * sizeof (char *));
362 result.size = initial_size;
367 /* Add STR at the end of the given string vector SV. If SV is already
368 full, its size is automatically increased (doubled). */
371 string_vector_append (struct string_vector *sv, char *str)
373 if (sv->index >= sv->size)
374 GROW_VECT (sv->array, sv->size, sv->size * 2);
376 sv->array[sv->index] = str;
380 /* Given DECODED_NAME a string holding a symbol name in its
381 decoded form (ie using the Ada dotted notation), returns
382 its unqualified name. */
385 ada_unqualified_name (const char *decoded_name)
387 const char *result = strrchr (decoded_name, '.');
390 result++; /* Skip the dot... */
392 result = decoded_name;
397 /* Return a string starting with '<', followed by STR, and '>'.
398 The result is good until the next call. */
401 add_angle_brackets (const char *str)
403 static char *result = NULL;
406 result = (char *) xmalloc ((strlen (str) + 3) * sizeof (char));
408 sprintf (result, "<%s>", str);
412 #endif /* GNAT_GDB */
415 ada_get_gdb_completer_word_break_characters (void)
417 return ada_completer_word_break_characters;
420 /* Read the string located at ADDR from the inferior and store the
424 extract_string (CORE_ADDR addr, char *buf)
428 /* Loop, reading one byte at a time, until we reach the '\000'
429 end-of-string marker. */
432 target_read_memory (addr + char_index * sizeof (char),
433 buf + char_index * sizeof (char), sizeof (char));
436 while (buf[char_index - 1] != '\000');
439 /* Return the name of the function owning the instruction located at PC.
440 Return NULL if no such function could be found. */
443 function_name_from_pc (CORE_ADDR pc)
447 if (!find_pc_partial_function (pc, &func_name, NULL, NULL))
453 /* Assuming *OLD_VECT points to an array of *SIZE objects of size
454 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
455 updating *OLD_VECT and *SIZE as necessary. */
458 grow_vect (void **old_vect, size_t * size, size_t min_size, int element_size)
460 if (*size < min_size)
463 if (*size < min_size)
465 *old_vect = xrealloc (*old_vect, *size * element_size);
469 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
470 suffix of FIELD_NAME beginning "___". */
473 field_name_match (const char *field_name, const char *target)
475 int len = strlen (target);
477 (strncmp (field_name, target, len) == 0
478 && (field_name[len] == '\0'
479 || (strncmp (field_name + len, "___", 3) == 0
480 && strcmp (field_name + strlen (field_name) - 6, "___XVN") != 0)));
484 /* Assuming TYPE is a TYPE_CODE_STRUCT, find the field whose name matches
485 FIELD_NAME, and return its index. This function also handles fields
486 whose name have ___ suffixes because the compiler sometimes alters
487 their name by adding such a suffix to represent fields with certain
488 constraints. If the field could not be found, return a negative
489 number if MAYBE_MISSING is set. Otherwise raise an error. */
492 ada_get_field_index (const struct type *type, const char *field_name,
496 for (fieldno = 0; fieldno < TYPE_NFIELDS (type); fieldno++)
497 if (field_name_match (TYPE_FIELD_NAME (type, fieldno), field_name))
501 error ("Unable to find field %s in struct %s. Aborting",
502 field_name, TYPE_NAME (type));
507 /* The length of the prefix of NAME prior to any "___" suffix. */
510 ada_name_prefix_len (const char *name)
516 const char *p = strstr (name, "___");
518 return strlen (name);
524 /* Return non-zero if SUFFIX is a suffix of STR.
525 Return zero if STR is null. */
528 is_suffix (const char *str, const char *suffix)
534 len2 = strlen (suffix);
535 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
538 /* Create a value of type TYPE whose contents come from VALADDR, if it
539 is non-null, and whose memory address (in the inferior) is
543 value_from_contents_and_address (struct type *type, char *valaddr,
546 struct value *v = allocate_value (type);
550 memcpy (VALUE_CONTENTS_RAW (v), valaddr, TYPE_LENGTH (type));
551 VALUE_ADDRESS (v) = address;
553 VALUE_LVAL (v) = lval_memory;
557 /* The contents of value VAL, treated as a value of type TYPE. The
558 result is an lval in memory if VAL is. */
560 static struct value *
561 coerce_unspec_val_to_type (struct value *val, struct type *type)
563 CHECK_TYPEDEF (type);
564 if (VALUE_TYPE (val) == type)
568 struct value *result;
570 /* Make sure that the object size is not unreasonable before
571 trying to allocate some memory for it. */
572 if (TYPE_LENGTH (type) > varsize_limit)
573 error ("object size is larger than varsize-limit");
575 result = allocate_value (type);
576 VALUE_LVAL (result) = VALUE_LVAL (val);
577 VALUE_BITSIZE (result) = VALUE_BITSIZE (val);
578 VALUE_BITPOS (result) = VALUE_BITPOS (val);
579 VALUE_ADDRESS (result) = VALUE_ADDRESS (val) + VALUE_OFFSET (val);
580 if (VALUE_LAZY (val) ||
581 TYPE_LENGTH (type) > TYPE_LENGTH (VALUE_TYPE (val)))
582 VALUE_LAZY (result) = 1;
584 memcpy (VALUE_CONTENTS_RAW (result), VALUE_CONTENTS (val),
591 cond_offset_host (char *valaddr, long offset)
596 return valaddr + offset;
600 cond_offset_target (CORE_ADDR address, long offset)
605 return address + offset;
608 /* Issue a warning (as for the definition of warning in utils.c, but
609 with exactly one argument rather than ...), unless the limit on the
610 number of warnings has passed during the evaluation of the current
613 lim_warning (const char *format, long arg)
615 warnings_issued += 1;
616 if (warnings_issued <= warning_limit)
617 warning (format, arg);
621 ada_translate_error_message (const char *string)
623 if (strcmp (string, "Invalid cast.") == 0)
624 return "Invalid type conversion.";
630 MAX_OF_SIZE (int size)
632 LONGEST top_bit = (LONGEST) 1 << (size*8-2);
633 return top_bit | (top_bit-1);
637 MIN_OF_SIZE (int size)
639 return - MAX_OF_SIZE (size) - 1;
643 UMAX_OF_SIZE (int size)
645 ULONGEST top_bit = (ULONGEST) 1 << (size*8-1);
646 return top_bit | (top_bit-1);
650 UMIN_OF_SIZE (int size)
655 /* The largest value in the domain of TYPE, a discrete type, as an integer. */
656 static struct value *
657 discrete_type_high_bound (struct type *type)
659 switch (TYPE_CODE (type))
661 case TYPE_CODE_RANGE:
662 return value_from_longest (TYPE_TARGET_TYPE (type),
663 TYPE_HIGH_BOUND (type));
666 value_from_longest (type,
667 TYPE_FIELD_BITPOS (type, TYPE_NFIELDS (type)-1));
669 return value_from_longest (type, MAX_OF_TYPE (type));
671 error ("Unexpected type in discrete_type_high_bound.");
675 /* The largest value in the domain of TYPE, a discrete type, as an integer. */
676 static struct value *
677 discrete_type_low_bound (struct type *type)
679 switch (TYPE_CODE (type))
681 case TYPE_CODE_RANGE:
682 return value_from_longest (TYPE_TARGET_TYPE (type),
683 TYPE_LOW_BOUND (type));
685 return value_from_longest (type, TYPE_FIELD_BITPOS (type, 0));
687 return value_from_longest (type, MIN_OF_TYPE (type));
689 error ("Unexpected type in discrete_type_low_bound.");
693 /* The identity on non-range types. For range types, the underlying
694 non-range scalar type. */
697 base_type (struct type *type)
699 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
701 if (type == TYPE_TARGET_TYPE (type)
702 || TYPE_TARGET_TYPE (type) == NULL)
704 type = TYPE_TARGET_TYPE (type);
710 /* Language Selection */
712 /* If the main program is in Ada, return language_ada, otherwise return LANG
713 (the main program is in Ada iif the adainit symbol is found).
715 MAIN_PST is not used. */
718 ada_update_initial_language (enum language lang,
719 struct partial_symtab *main_pst)
721 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
722 (struct objfile *) NULL) != NULL)
728 /* If the main procedure is written in Ada, then return its name.
729 The result is good until the next call. Return NULL if the main
730 procedure doesn't appear to be in Ada. */
735 struct minimal_symbol *msym;
736 CORE_ADDR main_program_name_addr;
737 static char main_program_name[1024];
738 /* For Ada, the name of the main procedure is stored in a specific
739 string constant, generated by the binder. Look for that symbol,
740 extract its address, and then read that string. If we didn't find
741 that string, then most probably the main procedure is not written
743 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
747 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
748 if (main_program_name_addr == 0)
749 error ("Invalid address for Ada main program name.");
751 extract_string (main_program_name_addr, main_program_name);
752 return main_program_name;
755 /* The main procedure doesn't seem to be in Ada. */
761 /* Table of Ada operators and their GNAT-encoded names. Last entry is pair
764 const struct ada_opname_map ada_opname_table[] = {
765 {"Oadd", "\"+\"", BINOP_ADD},
766 {"Osubtract", "\"-\"", BINOP_SUB},
767 {"Omultiply", "\"*\"", BINOP_MUL},
768 {"Odivide", "\"/\"", BINOP_DIV},
769 {"Omod", "\"mod\"", BINOP_MOD},
770 {"Orem", "\"rem\"", BINOP_REM},
771 {"Oexpon", "\"**\"", BINOP_EXP},
772 {"Olt", "\"<\"", BINOP_LESS},
773 {"Ole", "\"<=\"", BINOP_LEQ},
774 {"Ogt", "\">\"", BINOP_GTR},
775 {"Oge", "\">=\"", BINOP_GEQ},
776 {"Oeq", "\"=\"", BINOP_EQUAL},
777 {"One", "\"/=\"", BINOP_NOTEQUAL},
778 {"Oand", "\"and\"", BINOP_BITWISE_AND},
779 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
780 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
781 {"Oconcat", "\"&\"", BINOP_CONCAT},
782 {"Oabs", "\"abs\"", UNOP_ABS},
783 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
784 {"Oadd", "\"+\"", UNOP_PLUS},
785 {"Osubtract", "\"-\"", UNOP_NEG},
789 /* Return non-zero if STR should be suppressed in info listings. */
792 is_suppressed_name (const char *str)
794 if (strncmp (str, "_ada_", 5) == 0)
796 if (str[0] == '_' || str[0] == '\000')
801 const char *suffix = strstr (str, "___");
802 if (suffix != NULL && suffix[3] != 'X')
805 suffix = str + strlen (str);
806 for (p = suffix - 1; p != str; p -= 1)
810 if (p[0] == 'X' && p[-1] != '_')
814 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
815 if (strncmp (ada_opname_table[i].encoded, p,
816 strlen (ada_opname_table[i].encoded)) == 0)
825 /* The "encoded" form of DECODED, according to GNAT conventions.
826 The result is valid until the next call to ada_encode. */
829 ada_encode (const char *decoded)
831 static char *encoding_buffer = NULL;
832 static size_t encoding_buffer_size = 0;
839 GROW_VECT (encoding_buffer, encoding_buffer_size,
840 2 * strlen (decoded) + 10);
843 for (p = decoded; *p != '\0'; p += 1)
845 if (!ADA_RETAIN_DOTS && *p == '.')
847 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
852 const struct ada_opname_map *mapping;
854 for (mapping = ada_opname_table;
855 mapping->encoded != NULL &&
856 strncmp (mapping->decoded, p,
857 strlen (mapping->decoded)) != 0;
860 if (mapping->encoded == NULL)
861 error ("invalid Ada operator name: %s", p);
862 strcpy (encoding_buffer + k, mapping->encoded);
863 k += strlen (mapping->encoded);
868 encoding_buffer[k] = *p;
873 encoding_buffer[k] = '\0';
874 return encoding_buffer;
877 /* Return NAME folded to lower case, or, if surrounded by single
878 quotes, unfolded, but with the quotes stripped away. Result good
882 ada_fold_name (const char *name)
884 static char *fold_buffer = NULL;
885 static size_t fold_buffer_size = 0;
887 int len = strlen (name);
888 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
892 strncpy (fold_buffer, name + 1, len - 2);
893 fold_buffer[len - 2] = '\000';
898 for (i = 0; i <= len; i += 1)
899 fold_buffer[i] = tolower (name[i]);
906 0. Discard trailing .{DIGIT}+ or trailing ___{DIGIT}+
907 These are suffixes introduced by GNAT5 to nested subprogram
908 names, and do not serve any purpose for the debugger.
909 1. Discard final __{DIGIT}+ or $({DIGIT}+(__{DIGIT}+)*)
910 2. Convert other instances of embedded "__" to `.'.
911 3. Discard leading _ada_.
912 4. Convert operator names to the appropriate quoted symbols.
913 5. Remove everything after first ___ if it is followed by
915 6. Replace TK__ with __, and a trailing B or TKB with nothing.
916 7. Put symbols that should be suppressed in <...> brackets.
917 8. Remove trailing X[bn]* suffix (indicating names in package bodies).
919 The resulting string is valid until the next call of ada_decode.
920 If the string is unchanged by demangling, the original string pointer
924 ada_decode (const char *encoded)
931 static char *decoding_buffer = NULL;
932 static size_t decoding_buffer_size = 0;
934 if (strncmp (encoded, "_ada_", 5) == 0)
937 if (encoded[0] == '_' || encoded[0] == '<')
940 /* Remove trailing .{DIGIT}+ or ___{DIGIT}+. */
941 len0 = strlen (encoded);
942 if (len0 > 1 && isdigit (encoded[len0 - 1]))
945 while (i > 0 && isdigit (encoded[i]))
947 if (i >= 0 && encoded[i] == '.')
949 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
953 /* Remove the ___X.* suffix if present. Do not forget to verify that
954 the suffix is located before the current "end" of ENCODED. We want
955 to avoid re-matching parts of ENCODED that have previously been
956 marked as discarded (by decrementing LEN0). */
957 p = strstr (encoded, "___");
958 if (p != NULL && p - encoded < len0 - 3)
966 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
969 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
972 /* Make decoded big enough for possible expansion by operator name. */
973 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
974 decoded = decoding_buffer;
976 if (len0 > 1 && isdigit (encoded[len0 - 1]))
979 while ((i >= 0 && isdigit (encoded[i]))
980 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
982 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
984 else if (encoded[i] == '$')
988 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
989 decoded[j] = encoded[i];
994 if (at_start_name && encoded[i] == 'O')
997 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
999 int op_len = strlen (ada_opname_table[k].encoded);
1000 if (strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1002 && !isalnum (encoded[i + op_len]))
1004 strcpy (decoded + j, ada_opname_table[k].decoded);
1007 j += strlen (ada_opname_table[k].decoded);
1011 if (ada_opname_table[k].encoded != NULL)
1016 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1018 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1022 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1026 else if (!ADA_RETAIN_DOTS
1027 && i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1036 decoded[j] = encoded[i];
1041 decoded[j] = '\000';
1043 for (i = 0; decoded[i] != '\0'; i += 1)
1044 if (isupper (decoded[i]) || decoded[i] == ' ')
1047 if (strcmp (decoded, encoded) == 0)
1053 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1054 decoded = decoding_buffer;
1055 if (encoded[0] == '<')
1056 strcpy (decoded, encoded);
1058 sprintf (decoded, "<%s>", encoded);
1063 /* Table for keeping permanent unique copies of decoded names. Once
1064 allocated, names in this table are never released. While this is a
1065 storage leak, it should not be significant unless there are massive
1066 changes in the set of decoded names in successive versions of a
1067 symbol table loaded during a single session. */
1068 static struct htab *decoded_names_store;
1070 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1071 in the language-specific part of GSYMBOL, if it has not been
1072 previously computed. Tries to save the decoded name in the same
1073 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1074 in any case, the decoded symbol has a lifetime at least that of
1076 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1077 const, but nevertheless modified to a semantically equivalent form
1078 when a decoded name is cached in it.
1081 char *ada_decode_symbol (const struct general_symbol_info *gsymbol)
1084 (char **) &gsymbol->language_specific.cplus_specific.demangled_name;
1085 if (*resultp == NULL)
1087 const char *decoded = ada_decode (gsymbol->name);
1088 if (gsymbol->bfd_section != NULL)
1090 bfd *obfd = gsymbol->bfd_section->owner;
1093 struct objfile *objf;
1096 if (obfd == objf->obfd)
1098 *resultp = obsavestring (decoded, strlen (decoded),
1099 &objf->objfile_obstack);
1105 /* Sometimes, we can't find a corresponding objfile, in which
1106 case, we put the result on the heap. Since we only decode
1107 when needed, we hope this usually does not cause a
1108 significant memory leak (FIXME). */
1109 if (*resultp == NULL)
1112 (char **) htab_find_slot (decoded_names_store,
1115 *slot = xstrdup (decoded);
1123 char *ada_la_decode (const char *encoded, int options)
1125 return xstrdup (ada_decode (encoded));
1128 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1129 suffixes that encode debugging information or leading _ada_ on
1130 SYM_NAME (see is_name_suffix commentary for the debugging
1131 information that is ignored). If WILD, then NAME need only match a
1132 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1133 either argument is NULL. */
1136 ada_match_name (const char *sym_name, const char *name, int wild)
1138 if (sym_name == NULL || name == NULL)
1141 return wild_match (name, strlen (name), sym_name);
1144 int len_name = strlen (name);
1145 return (strncmp (sym_name, name, len_name) == 0
1146 && is_name_suffix (sym_name + len_name))
1147 || (strncmp (sym_name, "_ada_", 5) == 0
1148 && strncmp (sym_name + 5, name, len_name) == 0
1149 && is_name_suffix (sym_name + len_name + 5));
1153 /* True (non-zero) iff, in Ada mode, the symbol SYM should be
1154 suppressed in info listings. */
1157 ada_suppress_symbol_printing (struct symbol *sym)
1159 if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN)
1162 return is_suppressed_name (SYMBOL_LINKAGE_NAME (sym));
1168 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
1170 static char *bound_name[] = {
1171 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1172 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1175 /* Maximum number of array dimensions we are prepared to handle. */
1177 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1179 /* Like modify_field, but allows bitpos > wordlength. */
1182 modify_general_field (char *addr, LONGEST fieldval, int bitpos, int bitsize)
1184 modify_field (addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
1188 /* The desc_* routines return primitive portions of array descriptors
1191 /* The descriptor or array type, if any, indicated by TYPE; removes
1192 level of indirection, if needed. */
1194 static struct type *
1195 desc_base_type (struct type *type)
1199 CHECK_TYPEDEF (type);
1201 (TYPE_CODE (type) == TYPE_CODE_PTR
1202 || TYPE_CODE (type) == TYPE_CODE_REF))
1203 return check_typedef (TYPE_TARGET_TYPE (type));
1208 /* True iff TYPE indicates a "thin" array pointer type. */
1211 is_thin_pntr (struct type *type)
1214 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1215 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1218 /* The descriptor type for thin pointer type TYPE. */
1220 static struct type *
1221 thin_descriptor_type (struct type *type)
1223 struct type *base_type = desc_base_type (type);
1224 if (base_type == NULL)
1226 if (is_suffix (ada_type_name (base_type), "___XVE"))
1230 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1231 if (alt_type == NULL)
1238 /* A pointer to the array data for thin-pointer value VAL. */
1240 static struct value *
1241 thin_data_pntr (struct value *val)
1243 struct type *type = VALUE_TYPE (val);
1244 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1245 return value_cast (desc_data_type (thin_descriptor_type (type)),
1248 return value_from_longest (desc_data_type (thin_descriptor_type (type)),
1249 VALUE_ADDRESS (val) + VALUE_OFFSET (val));
1252 /* True iff TYPE indicates a "thick" array pointer type. */
1255 is_thick_pntr (struct type *type)
1257 type = desc_base_type (type);
1258 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1259 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1262 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1263 pointer to one, the type of its bounds data; otherwise, NULL. */
1265 static struct type *
1266 desc_bounds_type (struct type *type)
1270 type = desc_base_type (type);
1274 else if (is_thin_pntr (type))
1276 type = thin_descriptor_type (type);
1279 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1281 return check_typedef (r);
1283 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1285 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1287 return check_typedef (TYPE_TARGET_TYPE (check_typedef (r)));
1292 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1293 one, a pointer to its bounds data. Otherwise NULL. */
1295 static struct value *
1296 desc_bounds (struct value *arr)
1298 struct type *type = check_typedef (VALUE_TYPE (arr));
1299 if (is_thin_pntr (type))
1301 struct type *bounds_type =
1302 desc_bounds_type (thin_descriptor_type (type));
1305 if (desc_bounds_type == NULL)
1306 error ("Bad GNAT array descriptor");
1308 /* NOTE: The following calculation is not really kosher, but
1309 since desc_type is an XVE-encoded type (and shouldn't be),
1310 the correct calculation is a real pain. FIXME (and fix GCC). */
1311 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1312 addr = value_as_long (arr);
1314 addr = VALUE_ADDRESS (arr) + VALUE_OFFSET (arr);
1317 value_from_longest (lookup_pointer_type (bounds_type),
1318 addr - TYPE_LENGTH (bounds_type));
1321 else if (is_thick_pntr (type))
1322 return value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1323 "Bad GNAT array descriptor");
1328 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1329 position of the field containing the address of the bounds data. */
1332 fat_pntr_bounds_bitpos (struct type *type)
1334 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1337 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1338 size of the field containing the address of the bounds data. */
1341 fat_pntr_bounds_bitsize (struct type *type)
1343 type = desc_base_type (type);
1345 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1346 return TYPE_FIELD_BITSIZE (type, 1);
1348 return 8 * TYPE_LENGTH (check_typedef (TYPE_FIELD_TYPE (type, 1)));
1351 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1352 pointer to one, the type of its array data (a
1353 pointer-to-array-with-no-bounds type); otherwise, NULL. Use
1354 ada_type_of_array to get an array type with bounds data. */
1356 static struct type *
1357 desc_data_type (struct type *type)
1359 type = desc_base_type (type);
1361 /* NOTE: The following is bogus; see comment in desc_bounds. */
1362 if (is_thin_pntr (type))
1363 return lookup_pointer_type
1364 (desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1)));
1365 else if (is_thick_pntr (type))
1366 return lookup_struct_elt_type (type, "P_ARRAY", 1);
1371 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1374 static struct value *
1375 desc_data (struct value *arr)
1377 struct type *type = VALUE_TYPE (arr);
1378 if (is_thin_pntr (type))
1379 return thin_data_pntr (arr);
1380 else if (is_thick_pntr (type))
1381 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1382 "Bad GNAT array descriptor");
1388 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1389 position of the field containing the address of the data. */
1392 fat_pntr_data_bitpos (struct type *type)
1394 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1397 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1398 size of the field containing the address of the data. */
1401 fat_pntr_data_bitsize (struct type *type)
1403 type = desc_base_type (type);
1405 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1406 return TYPE_FIELD_BITSIZE (type, 0);
1408 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1411 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1412 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1413 bound, if WHICH is 1. The first bound is I=1. */
1415 static struct value *
1416 desc_one_bound (struct value *bounds, int i, int which)
1418 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1419 "Bad GNAT array descriptor bounds");
1422 /* If BOUNDS is an array-bounds structure type, return the bit position
1423 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1424 bound, if WHICH is 1. The first bound is I=1. */
1427 desc_bound_bitpos (struct type *type, int i, int which)
1429 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1432 /* If BOUNDS is an array-bounds structure type, return the bit field size
1433 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1434 bound, if WHICH is 1. The first bound is I=1. */
1437 desc_bound_bitsize (struct type *type, int i, int which)
1439 type = desc_base_type (type);
1441 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1442 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1444 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1447 /* If TYPE is the type of an array-bounds structure, the type of its
1448 Ith bound (numbering from 1). Otherwise, NULL. */
1450 static struct type *
1451 desc_index_type (struct type *type, int i)
1453 type = desc_base_type (type);
1455 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1456 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1461 /* The number of index positions in the array-bounds type TYPE.
1462 Return 0 if TYPE is NULL. */
1465 desc_arity (struct type *type)
1467 type = desc_base_type (type);
1470 return TYPE_NFIELDS (type) / 2;
1474 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1475 an array descriptor type (representing an unconstrained array
1479 ada_is_direct_array_type (struct type *type)
1483 CHECK_TYPEDEF (type);
1484 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1485 || ada_is_array_descriptor_type (type));
1488 /* Non-zero iff TYPE is a simple array type or pointer to one. */
1491 ada_is_simple_array_type (struct type *type)
1495 CHECK_TYPEDEF (type);
1496 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1497 || (TYPE_CODE (type) == TYPE_CODE_PTR
1498 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
1501 /* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1504 ada_is_array_descriptor_type (struct type *type)
1506 struct type *data_type = desc_data_type (type);
1510 CHECK_TYPEDEF (type);
1513 && ((TYPE_CODE (data_type) == TYPE_CODE_PTR
1514 && TYPE_TARGET_TYPE (data_type) != NULL
1515 && TYPE_CODE (TYPE_TARGET_TYPE (data_type)) == TYPE_CODE_ARRAY)
1517 TYPE_CODE (data_type) == TYPE_CODE_ARRAY)
1518 && desc_arity (desc_bounds_type (type)) > 0;
1521 /* Non-zero iff type is a partially mal-formed GNAT array
1522 descriptor. FIXME: This is to compensate for some problems with
1523 debugging output from GNAT. Re-examine periodically to see if it
1527 ada_is_bogus_array_descriptor (struct type *type)
1531 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1532 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1533 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1534 && !ada_is_array_descriptor_type (type);
1538 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1539 (fat pointer) returns the type of the array data described---specifically,
1540 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
1541 in from the descriptor; otherwise, they are left unspecified. If
1542 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1543 returns NULL. The result is simply the type of ARR if ARR is not
1546 ada_type_of_array (struct value *arr, int bounds)
1548 if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1549 return decode_packed_array_type (VALUE_TYPE (arr));
1551 if (!ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1552 return VALUE_TYPE (arr);
1556 check_typedef (TYPE_TARGET_TYPE (desc_data_type (VALUE_TYPE (arr))));
1559 struct type *elt_type;
1561 struct value *descriptor;
1562 struct objfile *objf = TYPE_OBJFILE (VALUE_TYPE (arr));
1564 elt_type = ada_array_element_type (VALUE_TYPE (arr), -1);
1565 arity = ada_array_arity (VALUE_TYPE (arr));
1567 if (elt_type == NULL || arity == 0)
1568 return check_typedef (VALUE_TYPE (arr));
1570 descriptor = desc_bounds (arr);
1571 if (value_as_long (descriptor) == 0)
1575 struct type *range_type = alloc_type (objf);
1576 struct type *array_type = alloc_type (objf);
1577 struct value *low = desc_one_bound (descriptor, arity, 0);
1578 struct value *high = desc_one_bound (descriptor, arity, 1);
1581 create_range_type (range_type, VALUE_TYPE (low),
1582 (int) value_as_long (low),
1583 (int) value_as_long (high));
1584 elt_type = create_array_type (array_type, elt_type, range_type);
1587 return lookup_pointer_type (elt_type);
1591 /* If ARR does not represent an array, returns ARR unchanged.
1592 Otherwise, returns either a standard GDB array with bounds set
1593 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1594 GDB array. Returns NULL if ARR is a null fat pointer. */
1597 ada_coerce_to_simple_array_ptr (struct value *arr)
1599 if (ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1601 struct type *arrType = ada_type_of_array (arr, 1);
1602 if (arrType == NULL)
1604 return value_cast (arrType, value_copy (desc_data (arr)));
1606 else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1607 return decode_packed_array (arr);
1612 /* If ARR does not represent an array, returns ARR unchanged.
1613 Otherwise, returns a standard GDB array describing ARR (which may
1614 be ARR itself if it already is in the proper form). */
1616 static struct value *
1617 ada_coerce_to_simple_array (struct value *arr)
1619 if (ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1621 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1623 error ("Bounds unavailable for null array pointer.");
1624 return value_ind (arrVal);
1626 else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1627 return decode_packed_array (arr);
1632 /* If TYPE represents a GNAT array type, return it translated to an
1633 ordinary GDB array type (possibly with BITSIZE fields indicating
1634 packing). For other types, is the identity. */
1637 ada_coerce_to_simple_array_type (struct type *type)
1639 struct value *mark = value_mark ();
1640 struct value *dummy = value_from_longest (builtin_type_long, 0);
1641 struct type *result;
1642 VALUE_TYPE (dummy) = type;
1643 result = ada_type_of_array (dummy, 0);
1644 value_free_to_mark (mark);
1648 /* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1651 ada_is_packed_array_type (struct type *type)
1655 type = desc_base_type (type);
1656 CHECK_TYPEDEF (type);
1658 ada_type_name (type) != NULL
1659 && strstr (ada_type_name (type), "___XP") != NULL;
1662 /* Given that TYPE is a standard GDB array type with all bounds filled
1663 in, and that the element size of its ultimate scalar constituents
1664 (that is, either its elements, or, if it is an array of arrays, its
1665 elements' elements, etc.) is *ELT_BITS, return an identical type,
1666 but with the bit sizes of its elements (and those of any
1667 constituent arrays) recorded in the BITSIZE components of its
1668 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1671 static struct type *
1672 packed_array_type (struct type *type, long *elt_bits)
1674 struct type *new_elt_type;
1675 struct type *new_type;
1676 LONGEST low_bound, high_bound;
1678 CHECK_TYPEDEF (type);
1679 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1682 new_type = alloc_type (TYPE_OBJFILE (type));
1683 new_elt_type = packed_array_type (check_typedef (TYPE_TARGET_TYPE (type)),
1685 create_array_type (new_type, new_elt_type, TYPE_FIELD_TYPE (type, 0));
1686 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
1687 TYPE_NAME (new_type) = ada_type_name (type);
1689 if (get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
1690 &low_bound, &high_bound) < 0)
1691 low_bound = high_bound = 0;
1692 if (high_bound < low_bound)
1693 *elt_bits = TYPE_LENGTH (new_type) = 0;
1696 *elt_bits *= (high_bound - low_bound + 1);
1697 TYPE_LENGTH (new_type) =
1698 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1701 TYPE_FLAGS (new_type) |= TYPE_FLAG_FIXED_INSTANCE;
1705 /* The array type encoded by TYPE, where ada_is_packed_array_type (TYPE). */
1707 static struct type *
1708 decode_packed_array_type (struct type *type)
1711 struct block **blocks;
1712 const char *raw_name = ada_type_name (check_typedef (type));
1713 char *name = (char *) alloca (strlen (raw_name) + 1);
1714 char *tail = strstr (raw_name, "___XP");
1715 struct type *shadow_type;
1719 type = desc_base_type (type);
1721 memcpy (name, raw_name, tail - raw_name);
1722 name[tail - raw_name] = '\000';
1724 sym = standard_lookup (name, get_selected_block (0), VAR_DOMAIN);
1725 if (sym == NULL || SYMBOL_TYPE (sym) == NULL)
1727 lim_warning ("could not find bounds information on packed array", 0);
1730 shadow_type = SYMBOL_TYPE (sym);
1732 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
1734 lim_warning ("could not understand bounds information on packed array",
1739 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1742 ("could not understand bit size information on packed array", 0);
1746 return packed_array_type (shadow_type, &bits);
1749 /* Given that ARR is a struct value *indicating a GNAT packed array,
1750 returns a simple array that denotes that array. Its type is a
1751 standard GDB array type except that the BITSIZEs of the array
1752 target types are set to the number of bits in each element, and the
1753 type length is set appropriately. */
1755 static struct value *
1756 decode_packed_array (struct value *arr)
1760 arr = ada_coerce_ref (arr);
1761 if (TYPE_CODE (VALUE_TYPE (arr)) == TYPE_CODE_PTR)
1762 arr = ada_value_ind (arr);
1764 type = decode_packed_array_type (VALUE_TYPE (arr));
1767 error ("can't unpack array");
1770 return coerce_unspec_val_to_type (arr, type);
1774 /* The value of the element of packed array ARR at the ARITY indices
1775 given in IND. ARR must be a simple array. */
1777 static struct value *
1778 value_subscript_packed (struct value *arr, int arity, struct value **ind)
1781 int bits, elt_off, bit_off;
1782 long elt_total_bit_offset;
1783 struct type *elt_type;
1787 elt_total_bit_offset = 0;
1788 elt_type = check_typedef (VALUE_TYPE (arr));
1789 for (i = 0; i < arity; i += 1)
1791 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
1792 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
1794 ("attempt to do packed indexing of something other than a packed array");
1797 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
1798 LONGEST lowerbound, upperbound;
1801 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
1803 lim_warning ("don't know bounds of array", 0);
1804 lowerbound = upperbound = 0;
1807 idx = value_as_long (value_pos_atr (ind[i]));
1808 if (idx < lowerbound || idx > upperbound)
1809 lim_warning ("packed array index %ld out of bounds", (long) idx);
1810 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
1811 elt_total_bit_offset += (idx - lowerbound) * bits;
1812 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
1815 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
1816 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
1818 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
1820 if (VALUE_LVAL (arr) == lval_internalvar)
1821 VALUE_LVAL (v) = lval_internalvar_component;
1823 VALUE_LVAL (v) = VALUE_LVAL (arr);
1827 /* Non-zero iff TYPE includes negative integer values. */
1830 has_negatives (struct type *type)
1832 switch (TYPE_CODE (type))
1837 return !TYPE_UNSIGNED (type);
1838 case TYPE_CODE_RANGE:
1839 return TYPE_LOW_BOUND (type) < 0;
1844 /* Create a new value of type TYPE from the contents of OBJ starting
1845 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
1846 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
1847 assigning through the result will set the field fetched from.
1848 VALADDR is ignored unless OBJ is NULL, in which case,
1849 VALADDR+OFFSET must address the start of storage containing the
1850 packed value. The value returned in this case is never an lval.
1851 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
1854 ada_value_primitive_packed_val (struct value *obj, char *valaddr, long offset,
1855 int bit_offset, int bit_size,
1859 int src, /* Index into the source area */
1860 targ, /* Index into the target area */
1861 srcBitsLeft, /* Number of source bits left to move */
1862 nsrc, ntarg, /* Number of source and target bytes */
1863 unusedLS, /* Number of bits in next significant
1864 byte of source that are unused */
1865 accumSize; /* Number of meaningful bits in accum */
1866 unsigned char *bytes; /* First byte containing data to unpack */
1867 unsigned char *unpacked;
1868 unsigned long accum; /* Staging area for bits being transferred */
1870 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
1871 /* Transmit bytes from least to most significant; delta is the direction
1872 the indices move. */
1873 int delta = BITS_BIG_ENDIAN ? -1 : 1;
1875 CHECK_TYPEDEF (type);
1879 v = allocate_value (type);
1880 bytes = (unsigned char *) (valaddr + offset);
1882 else if (VALUE_LAZY (obj))
1885 VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset, NULL);
1886 bytes = (unsigned char *) alloca (len);
1887 read_memory (VALUE_ADDRESS (v), bytes, len);
1891 v = allocate_value (type);
1892 bytes = (unsigned char *) VALUE_CONTENTS (obj) + offset;
1897 VALUE_LVAL (v) = VALUE_LVAL (obj);
1898 if (VALUE_LVAL (obj) == lval_internalvar)
1899 VALUE_LVAL (v) = lval_internalvar_component;
1900 VALUE_ADDRESS (v) = VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset;
1901 VALUE_BITPOS (v) = bit_offset + VALUE_BITPOS (obj);
1902 VALUE_BITSIZE (v) = bit_size;
1903 if (VALUE_BITPOS (v) >= HOST_CHAR_BIT)
1905 VALUE_ADDRESS (v) += 1;
1906 VALUE_BITPOS (v) -= HOST_CHAR_BIT;
1910 VALUE_BITSIZE (v) = bit_size;
1911 unpacked = (unsigned char *) VALUE_CONTENTS (v);
1913 srcBitsLeft = bit_size;
1915 ntarg = TYPE_LENGTH (type);
1919 memset (unpacked, 0, TYPE_LENGTH (type));
1922 else if (BITS_BIG_ENDIAN)
1925 if (has_negatives (type) &&
1926 ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
1930 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
1933 switch (TYPE_CODE (type))
1935 case TYPE_CODE_ARRAY:
1936 case TYPE_CODE_UNION:
1937 case TYPE_CODE_STRUCT:
1938 /* Non-scalar values must be aligned at a byte boundary... */
1940 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
1941 /* ... And are placed at the beginning (most-significant) bytes
1947 targ = TYPE_LENGTH (type) - 1;
1953 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
1956 unusedLS = bit_offset;
1959 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
1966 /* Mask for removing bits of the next source byte that are not
1967 part of the value. */
1968 unsigned int unusedMSMask =
1969 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
1971 /* Sign-extend bits for this byte. */
1972 unsigned int signMask = sign & ~unusedMSMask;
1974 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
1975 accumSize += HOST_CHAR_BIT - unusedLS;
1976 if (accumSize >= HOST_CHAR_BIT)
1978 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1979 accumSize -= HOST_CHAR_BIT;
1980 accum >>= HOST_CHAR_BIT;
1984 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
1991 accum |= sign << accumSize;
1992 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1993 accumSize -= HOST_CHAR_BIT;
1994 accum >>= HOST_CHAR_BIT;
2002 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2003 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
2006 move_bits (char *target, int targ_offset, char *source, int src_offset, int n)
2008 unsigned int accum, mask;
2009 int accum_bits, chunk_size;
2011 target += targ_offset / HOST_CHAR_BIT;
2012 targ_offset %= HOST_CHAR_BIT;
2013 source += src_offset / HOST_CHAR_BIT;
2014 src_offset %= HOST_CHAR_BIT;
2015 if (BITS_BIG_ENDIAN)
2017 accum = (unsigned char) *source;
2019 accum_bits = HOST_CHAR_BIT - src_offset;
2024 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2025 accum_bits += HOST_CHAR_BIT;
2027 chunk_size = HOST_CHAR_BIT - targ_offset;
2030 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2031 mask = ((1 << chunk_size) - 1) << unused_right;
2034 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2036 accum_bits -= chunk_size;
2043 accum = (unsigned char) *source >> src_offset;
2045 accum_bits = HOST_CHAR_BIT - src_offset;
2049 accum = accum + ((unsigned char) *source << accum_bits);
2050 accum_bits += HOST_CHAR_BIT;
2052 chunk_size = HOST_CHAR_BIT - targ_offset;
2055 mask = ((1 << chunk_size) - 1) << targ_offset;
2056 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2058 accum_bits -= chunk_size;
2059 accum >>= chunk_size;
2067 /* Store the contents of FROMVAL into the location of TOVAL.
2068 Return a new value with the location of TOVAL and contents of
2069 FROMVAL. Handles assignment into packed fields that have
2070 floating-point or non-scalar types. */
2072 static struct value *
2073 ada_value_assign (struct value *toval, struct value *fromval)
2075 struct type *type = VALUE_TYPE (toval);
2076 int bits = VALUE_BITSIZE (toval);
2078 if (!toval->modifiable)
2079 error ("Left operand of assignment is not a modifiable lvalue.");
2083 if (VALUE_LVAL (toval) == lval_memory
2085 && (TYPE_CODE (type) == TYPE_CODE_FLT
2086 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2089 (VALUE_BITPOS (toval) + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2090 char *buffer = (char *) alloca (len);
2093 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2094 fromval = value_cast (type, fromval);
2096 read_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer, len);
2097 if (BITS_BIG_ENDIAN)
2098 move_bits (buffer, VALUE_BITPOS (toval),
2099 VALUE_CONTENTS (fromval),
2100 TYPE_LENGTH (VALUE_TYPE (fromval)) * TARGET_CHAR_BIT -
2103 move_bits (buffer, VALUE_BITPOS (toval), VALUE_CONTENTS (fromval),
2105 write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer,
2108 val = value_copy (toval);
2109 memcpy (VALUE_CONTENTS_RAW (val), VALUE_CONTENTS (fromval),
2110 TYPE_LENGTH (type));
2111 VALUE_TYPE (val) = type;
2116 return value_assign (toval, fromval);
2120 /* The value of the element of array ARR at the ARITY indices given in IND.
2121 ARR may be either a simple array, GNAT array descriptor, or pointer
2125 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2129 struct type *elt_type;
2131 elt = ada_coerce_to_simple_array (arr);
2133 elt_type = check_typedef (VALUE_TYPE (elt));
2134 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2135 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2136 return value_subscript_packed (elt, arity, ind);
2138 for (k = 0; k < arity; k += 1)
2140 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2141 error ("too many subscripts (%d expected)", k);
2142 elt = value_subscript (elt, value_pos_atr (ind[k]));
2147 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2148 value of the element of *ARR at the ARITY indices given in
2149 IND. Does not read the entire array into memory. */
2152 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2157 for (k = 0; k < arity; k += 1)
2162 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2163 error ("too many subscripts (%d expected)", k);
2164 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2166 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2167 idx = value_pos_atr (ind[k]);
2169 idx = value_sub (idx, value_from_longest (builtin_type_int, lwb));
2170 arr = value_add (arr, idx);
2171 type = TYPE_TARGET_TYPE (type);
2174 return value_ind (arr);
2177 /* If type is a record type in the form of a standard GNAT array
2178 descriptor, returns the number of dimensions for type. If arr is a
2179 simple array, returns the number of "array of"s that prefix its
2180 type designation. Otherwise, returns 0. */
2183 ada_array_arity (struct type *type)
2190 type = desc_base_type (type);
2193 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2194 return desc_arity (desc_bounds_type (type));
2196 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2199 type = check_typedef (TYPE_TARGET_TYPE (type));
2205 /* If TYPE is a record type in the form of a standard GNAT array
2206 descriptor or a simple array type, returns the element type for
2207 TYPE after indexing by NINDICES indices, or by all indices if
2208 NINDICES is -1. Otherwise, returns NULL. */
2211 ada_array_element_type (struct type *type, int nindices)
2213 type = desc_base_type (type);
2215 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2218 struct type *p_array_type;
2220 p_array_type = desc_data_type (type);
2222 k = ada_array_arity (type);
2226 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
2227 if (nindices >= 0 && k > nindices)
2229 p_array_type = TYPE_TARGET_TYPE (p_array_type);
2230 while (k > 0 && p_array_type != NULL)
2232 p_array_type = check_typedef (TYPE_TARGET_TYPE (p_array_type));
2235 return p_array_type;
2237 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2239 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2241 type = TYPE_TARGET_TYPE (type);
2250 /* The type of nth index in arrays of given type (n numbering from 1).
2251 Does not examine memory. */
2254 ada_index_type (struct type *type, int n)
2256 struct type *result_type;
2258 type = desc_base_type (type);
2260 if (n > ada_array_arity (type))
2263 if (ada_is_simple_array_type (type))
2267 for (i = 1; i < n; i += 1)
2268 type = TYPE_TARGET_TYPE (type);
2269 result_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0));
2270 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2271 has a target type of TYPE_CODE_UNDEF. We compensate here, but
2272 perhaps stabsread.c would make more sense. */
2273 if (result_type == NULL
2274 || TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2275 result_type = builtin_type_int;
2280 return desc_index_type (desc_bounds_type (type), n);
2283 /* Given that arr is an array type, returns the lower bound of the
2284 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2285 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
2286 array-descriptor type. If TYPEP is non-null, *TYPEP is set to the
2287 bounds type. It works for other arrays with bounds supplied by
2288 run-time quantities other than discriminants. */
2291 ada_array_bound_from_type (struct type * arr_type, int n, int which,
2292 struct type ** typep)
2295 struct type *index_type_desc;
2297 if (ada_is_packed_array_type (arr_type))
2298 arr_type = decode_packed_array_type (arr_type);
2300 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2303 *typep = builtin_type_int;
2304 return (LONGEST) - which;
2307 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2308 type = TYPE_TARGET_TYPE (arr_type);
2312 index_type_desc = ada_find_parallel_type (type, "___XA");
2313 if (index_type_desc == NULL)
2315 struct type *range_type;
2316 struct type *index_type;
2320 type = TYPE_TARGET_TYPE (type);
2324 range_type = TYPE_INDEX_TYPE (type);
2325 index_type = TYPE_TARGET_TYPE (range_type);
2326 if (TYPE_CODE (index_type) == TYPE_CODE_UNDEF)
2327 index_type = builtin_type_long;
2329 *typep = index_type;
2331 (LONGEST) (which == 0
2332 ? TYPE_LOW_BOUND (range_type)
2333 : TYPE_HIGH_BOUND (range_type));
2337 struct type *index_type =
2338 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2339 NULL, TYPE_OBJFILE (arr_type));
2341 *typep = TYPE_TARGET_TYPE (index_type);
2343 (LONGEST) (which == 0
2344 ? TYPE_LOW_BOUND (index_type)
2345 : TYPE_HIGH_BOUND (index_type));
2349 /* Given that arr is an array value, returns the lower bound of the
2350 nth index (numbering from 1) if which is 0, and the upper bound if
2351 which is 1. This routine will also work for arrays with bounds
2352 supplied by run-time quantities other than discriminants. */
2355 ada_array_bound (struct value *arr, int n, int which)
2357 struct type *arr_type = VALUE_TYPE (arr);
2359 if (ada_is_packed_array_type (arr_type))
2360 return ada_array_bound (decode_packed_array (arr), n, which);
2361 else if (ada_is_simple_array_type (arr_type))
2364 LONGEST v = ada_array_bound_from_type (arr_type, n, which, &type);
2365 return value_from_longest (type, v);
2368 return desc_one_bound (desc_bounds (arr), n, which);
2371 /* Given that arr is an array value, returns the length of the
2372 nth index. This routine will also work for arrays with bounds
2373 supplied by run-time quantities other than discriminants.
2374 Does not work for arrays indexed by enumeration types with representation
2375 clauses at the moment. */
2378 ada_array_length (struct value *arr, int n)
2380 struct type *arr_type = check_typedef (VALUE_TYPE (arr));
2382 if (ada_is_packed_array_type (arr_type))
2383 return ada_array_length (decode_packed_array (arr), n);
2385 if (ada_is_simple_array_type (arr_type))
2389 ada_array_bound_from_type (arr_type, n, 1, &type) -
2390 ada_array_bound_from_type (arr_type, n, 0, NULL) + 1;
2391 return value_from_longest (type, v);
2395 value_from_longest (builtin_type_ada_int,
2396 value_as_long (desc_one_bound (desc_bounds (arr),
2398 - value_as_long (desc_one_bound (desc_bounds (arr),
2402 /* An empty array whose type is that of ARR_TYPE (an array type),
2403 with bounds LOW to LOW-1. */
2405 static struct value *
2406 empty_array (struct type *arr_type, int low)
2408 return allocate_value (create_range_type (NULL, TYPE_INDEX_TYPE (arr_type),
2413 /* Name resolution */
2415 /* The "decoded" name for the user-definable Ada operator corresponding
2419 ada_decoded_op_name (enum exp_opcode op)
2423 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2425 if (ada_opname_table[i].op == op)
2426 return ada_opname_table[i].decoded;
2428 error ("Could not find operator name for opcode");
2432 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2433 references (marked by OP_VAR_VALUE nodes in which the symbol has an
2434 undefined namespace) and converts operators that are
2435 user-defined into appropriate function calls. If CONTEXT_TYPE is
2436 non-null, it provides a preferred result type [at the moment, only
2437 type void has any effect---causing procedures to be preferred over
2438 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
2439 return type is preferred. May change (expand) *EXP. */
2442 resolve (struct expression **expp, int void_context_p)
2446 resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
2449 /* Resolve the operator of the subexpression beginning at
2450 position *POS of *EXPP. "Resolving" consists of replacing
2451 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2452 with their resolutions, replacing built-in operators with
2453 function calls to user-defined operators, where appropriate, and,
2454 when DEPROCEDURE_P is non-zero, converting function-valued variables
2455 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
2456 are as in ada_resolve, above. */
2458 static struct value *
2459 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2460 struct type *context_type)
2464 struct expression *exp; /* Convenience: == *expp. */
2465 enum exp_opcode op = (*expp)->elts[pc].opcode;
2466 struct value **argvec; /* Vector of operand types (alloca'ed). */
2467 int nargs; /* Number of operands. */
2473 /* Pass one: resolve operands, saving their types and updating *pos. */
2477 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2478 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2483 resolve_subexp (expp, pos, 0, NULL);
2485 nargs = longest_to_int (exp->elts[pc + 1].longconst);
2490 resolve_subexp (expp, pos, 1, exp->elts[pc + 1].type);
2495 resolve_subexp (expp, pos, 0, NULL);
2498 case OP_ATR_MODULUS:
2528 arg1 = resolve_subexp (expp, pos, 0, NULL);
2530 resolve_subexp (expp, pos, 1, NULL);
2532 resolve_subexp (expp, pos, 1, VALUE_TYPE (arg1));
2550 case BINOP_LOGICAL_AND:
2551 case BINOP_LOGICAL_OR:
2552 case BINOP_BITWISE_AND:
2553 case BINOP_BITWISE_IOR:
2554 case BINOP_BITWISE_XOR:
2557 case BINOP_NOTEQUAL:
2564 case BINOP_SUBSCRIPT:
2572 case UNOP_LOGICAL_NOT:
2589 case OP_INTERNALVAR:
2598 case STRUCTOP_STRUCT:
2599 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2605 + BYTES_TO_EXP_ELEM (longest_to_int (exp->elts[pc + 1].longconst) + 1);
2609 case TERNOP_IN_RANGE:
2614 case BINOP_IN_BOUNDS:
2620 error ("Unexpected operator during name resolution");
2624 (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2625 for (i = 0; i < nargs; i += 1)
2626 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2630 /* Pass two: perform any resolution on principal operator. */
2637 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2639 struct ada_symbol_info *candidates;
2643 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME (exp->elts[pc + 2]
2645 exp->elts[pc + 1].block,
2646 VAR_DOMAIN, &candidates);
2648 if (n_candidates > 1)
2650 /* Types tend to get re-introduced locally, so if there
2651 are any local symbols that are not types, first filter
2654 for (j = 0; j < n_candidates; j += 1)
2655 switch (SYMBOL_CLASS (candidates[j].sym))
2661 case LOC_REGPARM_ADDR:
2665 case LOC_BASEREG_ARG:
2667 case LOC_COMPUTED_ARG:
2673 if (j < n_candidates)
2676 while (j < n_candidates)
2678 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2680 candidates[j] = candidates[n_candidates - 1];
2689 if (n_candidates == 0)
2690 error ("No definition found for %s",
2691 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2692 else if (n_candidates == 1)
2694 else if (deprocedure_p
2695 && !is_nonfunction (candidates, n_candidates))
2697 i = ada_resolve_function (candidates, n_candidates, NULL, 0,
2698 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2]
2702 error ("Could not find a match for %s",
2703 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2707 printf_filtered ("Multiple matches for %s\n",
2708 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2709 user_select_syms (candidates, n_candidates, 1);
2713 exp->elts[pc + 1].block = candidates[i].block;
2714 exp->elts[pc + 2].symbol = candidates[i].sym;
2715 if (innermost_block == NULL ||
2716 contained_in (candidates[i].block, innermost_block))
2717 innermost_block = candidates[i].block;
2721 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2724 replace_operator_with_call (expp, pc, 0, 0,
2725 exp->elts[pc + 2].symbol,
2726 exp->elts[pc + 1].block);
2733 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2734 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2736 struct ada_symbol_info *candidates;
2740 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME (exp->elts[pc + 5]
2742 exp->elts[pc + 4].block,
2743 VAR_DOMAIN, &candidates);
2744 if (n_candidates == 1)
2748 i = ada_resolve_function (candidates, n_candidates,
2750 SYMBOL_LINKAGE_NAME (exp->elts[pc+5]
2754 error ("Could not find a match for %s",
2755 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2758 exp->elts[pc + 4].block = candidates[i].block;
2759 exp->elts[pc + 5].symbol = candidates[i].sym;
2760 if (innermost_block == NULL ||
2761 contained_in (candidates[i].block, innermost_block))
2762 innermost_block = candidates[i].block;
2773 case BINOP_BITWISE_AND:
2774 case BINOP_BITWISE_IOR:
2775 case BINOP_BITWISE_XOR:
2777 case BINOP_NOTEQUAL:
2785 case UNOP_LOGICAL_NOT:
2787 if (possible_user_operator_p (op, argvec))
2789 struct ada_symbol_info *candidates;
2793 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
2794 (struct block *) NULL, VAR_DOMAIN,
2796 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
2797 ada_decoded_op_name (op), NULL);
2801 replace_operator_with_call (expp, pc, nargs, 1,
2802 candidates[i].sym, candidates[i].block);
2812 return evaluate_subexp_type (exp, pos);
2815 /* Return non-zero if formal type FTYPE matches actual type ATYPE. If
2816 MAY_DEREF is non-zero, the formal may be a pointer and the actual
2817 a non-pointer. A type of 'void' (which is never a valid expression type)
2818 by convention matches anything. */
2819 /* The term "match" here is rather loose. The match is heuristic and
2820 liberal. FIXME: TOO liberal, in fact. */
2823 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
2825 CHECK_TYPEDEF (ftype);
2826 CHECK_TYPEDEF (atype);
2828 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
2829 ftype = TYPE_TARGET_TYPE (ftype);
2830 if (TYPE_CODE (atype) == TYPE_CODE_REF)
2831 atype = TYPE_TARGET_TYPE (atype);
2833 if (TYPE_CODE (ftype) == TYPE_CODE_VOID
2834 || TYPE_CODE (atype) == TYPE_CODE_VOID)
2837 switch (TYPE_CODE (ftype))
2842 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
2843 return ada_type_match (TYPE_TARGET_TYPE (ftype),
2844 TYPE_TARGET_TYPE (atype), 0);
2846 return (may_deref &&
2847 ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
2849 case TYPE_CODE_ENUM:
2850 case TYPE_CODE_RANGE:
2851 switch (TYPE_CODE (atype))
2854 case TYPE_CODE_ENUM:
2855 case TYPE_CODE_RANGE:
2861 case TYPE_CODE_ARRAY:
2862 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2863 || ada_is_array_descriptor_type (atype));
2865 case TYPE_CODE_STRUCT:
2866 if (ada_is_array_descriptor_type (ftype))
2867 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2868 || ada_is_array_descriptor_type (atype));
2870 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
2871 && !ada_is_array_descriptor_type (atype));
2873 case TYPE_CODE_UNION:
2875 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
2879 /* Return non-zero if the formals of FUNC "sufficiently match" the
2880 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
2881 may also be an enumeral, in which case it is treated as a 0-
2882 argument function. */
2885 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
2888 struct type *func_type = SYMBOL_TYPE (func);
2890 if (SYMBOL_CLASS (func) == LOC_CONST &&
2891 TYPE_CODE (func_type) == TYPE_CODE_ENUM)
2892 return (n_actuals == 0);
2893 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
2896 if (TYPE_NFIELDS (func_type) != n_actuals)
2899 for (i = 0; i < n_actuals; i += 1)
2901 if (actuals[i] == NULL)
2905 struct type *ftype = check_typedef (TYPE_FIELD_TYPE (func_type, i));
2906 struct type *atype = check_typedef (VALUE_TYPE (actuals[i]));
2908 if (!ada_type_match (ftype, atype, 1))
2915 /* False iff function type FUNC_TYPE definitely does not produce a value
2916 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
2917 FUNC_TYPE is not a valid function type with a non-null return type
2918 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
2921 return_match (struct type *func_type, struct type *context_type)
2923 struct type *return_type;
2925 if (func_type == NULL)
2928 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
2929 return_type = base_type (TYPE_TARGET_TYPE (func_type));
2931 return_type = base_type (func_type);
2932 if (return_type == NULL)
2935 context_type = base_type (context_type);
2937 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
2938 return context_type == NULL || return_type == context_type;
2939 else if (context_type == NULL)
2940 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
2942 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
2946 /* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
2947 function (if any) that matches the types of the NARGS arguments in
2948 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
2949 that returns that type, then eliminate matches that don't. If
2950 CONTEXT_TYPE is void and there is at least one match that does not
2951 return void, eliminate all matches that do.
2953 Asks the user if there is more than one match remaining. Returns -1
2954 if there is no such symbol or none is selected. NAME is used
2955 solely for messages. May re-arrange and modify SYMS in
2956 the process; the index returned is for the modified vector. */
2959 ada_resolve_function (struct ada_symbol_info syms[],
2960 int nsyms, struct value **args, int nargs,
2961 const char *name, struct type *context_type)
2964 int m; /* Number of hits */
2965 struct type *fallback;
2966 struct type *return_type;
2968 return_type = context_type;
2969 if (context_type == NULL)
2970 fallback = builtin_type_void;
2977 for (k = 0; k < nsyms; k += 1)
2979 struct type *type = check_typedef (SYMBOL_TYPE (syms[k].sym));
2981 if (ada_args_match (syms[k].sym, args, nargs)
2982 && return_match (type, return_type))
2988 if (m > 0 || return_type == fallback)
2991 return_type = fallback;
2998 printf_filtered ("Multiple matches for %s\n", name);
2999 user_select_syms (syms, m, 1);
3005 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3006 in a listing of choices during disambiguation (see sort_choices, below).
3007 The idea is that overloadings of a subprogram name from the
3008 same package should sort in their source order. We settle for ordering
3009 such symbols by their trailing number (__N or $N). */
3012 encoded_ordered_before (char *N0, char *N1)
3016 else if (N0 == NULL)
3021 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3023 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3025 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3026 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3030 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3033 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3035 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3036 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3038 return (strcmp (N0, N1) < 0);
3042 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3046 sort_choices (struct ada_symbol_info syms[], int nsyms)
3049 for (i = 1; i < nsyms; i += 1)
3051 struct ada_symbol_info sym = syms[i];
3054 for (j = i - 1; j >= 0; j -= 1)
3056 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3057 SYMBOL_LINKAGE_NAME (sym.sym)))
3059 syms[j + 1] = syms[j];
3065 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3066 by asking the user (if necessary), returning the number selected,
3067 and setting the first elements of SYMS items. Error if no symbols
3070 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3071 to be re-integrated one of these days. */
3074 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3077 int *chosen = (int *) alloca (sizeof (int) * nsyms);
3079 int first_choice = (max_results == 1) ? 1 : 2;
3081 if (max_results < 1)
3082 error ("Request to select 0 symbols!");
3086 printf_unfiltered ("[0] cancel\n");
3087 if (max_results > 1)
3088 printf_unfiltered ("[1] all\n");
3090 sort_choices (syms, nsyms);
3092 for (i = 0; i < nsyms; i += 1)
3094 if (syms[i].sym == NULL)
3097 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3099 struct symtab_and_line sal = find_function_start_sal (syms[i].sym, 1);
3100 printf_unfiltered ("[%d] %s at %s:%d\n",
3102 SYMBOL_PRINT_NAME (syms[i].sym),
3104 ? "<no source file available>"
3105 : sal.symtab->filename, sal.line);
3111 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3112 && SYMBOL_TYPE (syms[i].sym) != NULL
3113 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3114 struct symtab *symtab = symtab_for_sym (syms[i].sym);
3116 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3117 printf_unfiltered ("[%d] %s at %s:%d\n",
3119 SYMBOL_PRINT_NAME (syms[i].sym),
3120 symtab->filename, SYMBOL_LINE (syms[i].sym));
3121 else if (is_enumeral && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3123 printf_unfiltered ("[%d] ", i + first_choice);
3124 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3126 printf_unfiltered ("'(%s) (enumeral)\n",
3127 SYMBOL_PRINT_NAME (syms[i].sym));
3129 else if (symtab != NULL)
3130 printf_unfiltered (is_enumeral
3131 ? "[%d] %s in %s (enumeral)\n"
3132 : "[%d] %s at %s:?\n",
3134 SYMBOL_PRINT_NAME (syms[i].sym),
3137 printf_unfiltered (is_enumeral
3138 ? "[%d] %s (enumeral)\n"
3141 SYMBOL_PRINT_NAME (syms[i].sym));
3145 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3148 for (i = 0; i < n_chosen; i += 1)
3149 syms[i] = syms[chosen[i]];
3154 /* Read and validate a set of numeric choices from the user in the
3155 range 0 .. N_CHOICES-1. Place the results in increasing
3156 order in CHOICES[0 .. N-1], and return N.
3158 The user types choices as a sequence of numbers on one line
3159 separated by blanks, encoding them as follows:
3161 + A choice of 0 means to cancel the selection, throwing an error.
3162 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3163 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3165 The user is not allowed to choose more than MAX_RESULTS values.
3167 ANNOTATION_SUFFIX, if present, is used to annotate the input
3168 prompts (for use with the -f switch). */
3171 get_selections (int *choices, int n_choices, int max_results,
3172 int is_all_choice, char *annotation_suffix)
3177 int first_choice = is_all_choice ? 2 : 1;
3179 prompt = getenv ("PS2");
3183 printf_unfiltered ("%s ", prompt);
3184 gdb_flush (gdb_stdout);
3186 args = command_line_input ((char *) NULL, 0, annotation_suffix);
3189 error_no_arg ("one or more choice numbers");
3193 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3194 order, as given in args. Choices are validated. */
3200 while (isspace (*args))
3202 if (*args == '\0' && n_chosen == 0)
3203 error_no_arg ("one or more choice numbers");
3204 else if (*args == '\0')
3207 choice = strtol (args, &args2, 10);
3208 if (args == args2 || choice < 0
3209 || choice > n_choices + first_choice - 1)
3210 error ("Argument must be choice number");
3214 error ("cancelled");
3216 if (choice < first_choice)
3218 n_chosen = n_choices;
3219 for (j = 0; j < n_choices; j += 1)
3223 choice -= first_choice;
3225 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3229 if (j < 0 || choice != choices[j])
3232 for (k = n_chosen - 1; k > j; k -= 1)
3233 choices[k + 1] = choices[k];
3234 choices[j + 1] = choice;
3239 if (n_chosen > max_results)
3240 error ("Select no more than %d of the above", max_results);
3245 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3246 on the function identified by SYM and BLOCK, and taking NARGS
3247 arguments. Update *EXPP as needed to hold more space. */
3250 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3251 int oplen, struct symbol *sym,
3252 struct block *block)
3254 /* A new expression, with 6 more elements (3 for funcall, 4 for function
3255 symbol, -oplen for operator being replaced). */
3256 struct expression *newexp = (struct expression *)
3257 xmalloc (sizeof (struct expression)
3258 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3259 struct expression *exp = *expp;
3261 newexp->nelts = exp->nelts + 7 - oplen;
3262 newexp->language_defn = exp->language_defn;
3263 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3264 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3265 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3267 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3268 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3270 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3271 newexp->elts[pc + 4].block = block;
3272 newexp->elts[pc + 5].symbol = sym;
3278 /* Type-class predicates */
3280 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3284 numeric_type_p (struct type *type)
3290 switch (TYPE_CODE (type))
3295 case TYPE_CODE_RANGE:
3296 return (type == TYPE_TARGET_TYPE (type)
3297 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3304 /* True iff TYPE is integral (an INT or RANGE of INTs). */
3307 integer_type_p (struct type *type)
3313 switch (TYPE_CODE (type))
3317 case TYPE_CODE_RANGE:
3318 return (type == TYPE_TARGET_TYPE (type)
3319 || integer_type_p (TYPE_TARGET_TYPE (type)));
3326 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
3329 scalar_type_p (struct type *type)
3335 switch (TYPE_CODE (type))
3338 case TYPE_CODE_RANGE:
3339 case TYPE_CODE_ENUM:
3348 /* True iff TYPE is discrete (INT, RANGE, ENUM). */
3351 discrete_type_p (struct type *type)
3357 switch (TYPE_CODE (type))
3360 case TYPE_CODE_RANGE:
3361 case TYPE_CODE_ENUM:
3369 /* Returns non-zero if OP with operands in the vector ARGS could be
3370 a user-defined function. Errs on the side of pre-defined operators
3371 (i.e., result 0). */
3374 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3376 struct type *type0 =
3377 (args[0] == NULL) ? NULL : check_typedef (VALUE_TYPE (args[0]));
3378 struct type *type1 =
3379 (args[1] == NULL) ? NULL : check_typedef (VALUE_TYPE (args[1]));
3393 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3397 case BINOP_BITWISE_AND:
3398 case BINOP_BITWISE_IOR:
3399 case BINOP_BITWISE_XOR:
3400 return (!(integer_type_p (type0) && integer_type_p (type1)));
3403 case BINOP_NOTEQUAL:
3408 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3411 return ((TYPE_CODE (type0) != TYPE_CODE_ARRAY &&
3412 (TYPE_CODE (type0) != TYPE_CODE_PTR ||
3413 TYPE_CODE (TYPE_TARGET_TYPE (type0))
3414 != TYPE_CODE_ARRAY))
3415 || (TYPE_CODE (type1) != TYPE_CODE_ARRAY &&
3416 (TYPE_CODE (type1) != TYPE_CODE_PTR ||
3417 TYPE_CODE (TYPE_TARGET_TYPE (type1)) != TYPE_CODE_ARRAY)));
3420 return (!(numeric_type_p (type0) && integer_type_p (type1)));
3424 case UNOP_LOGICAL_NOT:
3426 return (!numeric_type_p (type0));
3433 /* NOTE: In the following, we assume that a renaming type's name may
3434 have an ___XD suffix. It would be nice if this went away at some
3437 /* If TYPE encodes a renaming, returns the renaming suffix, which
3438 is XR for an object renaming, XRP for a procedure renaming, XRE for
3439 an exception renaming, and XRS for a subprogram renaming. Returns
3440 NULL if NAME encodes none of these. */
3443 ada_renaming_type (struct type *type)
3445 if (type != NULL && TYPE_CODE (type) == TYPE_CODE_ENUM)
3447 const char *name = type_name_no_tag (type);
3448 const char *suffix = (name == NULL) ? NULL : strstr (name, "___XR");
3450 || (suffix[5] != '\000' && strchr ("PES_", suffix[5]) == NULL))
3459 /* Return non-zero iff SYM encodes an object renaming. */
3462 ada_is_object_renaming (struct symbol *sym)
3464 const char *renaming_type = ada_renaming_type (SYMBOL_TYPE (sym));
3465 return renaming_type != NULL
3466 && (renaming_type[2] == '\0' || renaming_type[2] == '_');
3469 /* Assuming that SYM encodes a non-object renaming, returns the original
3470 name of the renamed entity. The name is good until the end of
3474 ada_simple_renamed_entity (struct symbol *sym)
3477 const char *raw_name;
3481 type = SYMBOL_TYPE (sym);
3482 if (type == NULL || TYPE_NFIELDS (type) < 1)
3483 error ("Improperly encoded renaming.");
3485 raw_name = TYPE_FIELD_NAME (type, 0);
3486 len = (raw_name == NULL ? 0 : strlen (raw_name)) - 5;
3488 error ("Improperly encoded renaming.");
3490 result = xmalloc (len + 1);
3491 strncpy (result, raw_name, len);
3492 result[len] = '\000';
3497 /* Evaluation: Function Calls */
3499 /* Return an lvalue containing the value VAL. This is the identity on
3500 lvalues, and otherwise has the side-effect of pushing a copy of VAL
3501 on the stack, using and updating *SP as the stack pointer, and
3502 returning an lvalue whose VALUE_ADDRESS points to the copy. */
3504 static struct value *
3505 ensure_lval (struct value *val, CORE_ADDR *sp)
3507 CORE_ADDR old_sp = *sp;
3509 if (VALUE_LVAL (val))
3512 if (DEPRECATED_STACK_ALIGN_P ())
3513 *sp = push_bytes (*sp, VALUE_CONTENTS_RAW (val),
3514 DEPRECATED_STACK_ALIGN
3515 (TYPE_LENGTH (check_typedef (VALUE_TYPE (val)))));
3517 *sp = push_bytes (*sp, VALUE_CONTENTS_RAW (val),
3518 TYPE_LENGTH (check_typedef (VALUE_TYPE (val))));
3520 VALUE_LVAL (val) = lval_memory;
3521 if (INNER_THAN (1, 2))
3522 VALUE_ADDRESS (val) = *sp;
3524 VALUE_ADDRESS (val) = old_sp;
3529 /* Return the value ACTUAL, converted to be an appropriate value for a
3530 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
3531 allocating any necessary descriptors (fat pointers), or copies of
3532 values not residing in memory, updating it as needed. */
3534 static struct value *
3535 convert_actual (struct value *actual, struct type *formal_type0,
3538 struct type *actual_type = check_typedef (VALUE_TYPE (actual));
3539 struct type *formal_type = check_typedef (formal_type0);
3540 struct type *formal_target =
3541 TYPE_CODE (formal_type) == TYPE_CODE_PTR
3542 ? check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3543 struct type *actual_target =
3544 TYPE_CODE (actual_type) == TYPE_CODE_PTR
3545 ? check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3547 if (ada_is_array_descriptor_type (formal_target)
3548 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3549 return make_array_descriptor (formal_type, actual, sp);
3550 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR)
3552 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3553 && ada_is_array_descriptor_type (actual_target))
3554 return desc_data (actual);
3555 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3557 if (VALUE_LVAL (actual) != lval_memory)
3560 actual_type = check_typedef (VALUE_TYPE (actual));
3561 val = allocate_value (actual_type);
3562 memcpy ((char *) VALUE_CONTENTS_RAW (val),
3563 (char *) VALUE_CONTENTS (actual),
3564 TYPE_LENGTH (actual_type));
3565 actual = ensure_lval (val, sp);
3567 return value_addr (actual);
3570 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3571 return ada_value_ind (actual);
3577 /* Push a descriptor of type TYPE for array value ARR on the stack at
3578 *SP, updating *SP to reflect the new descriptor. Return either
3579 an lvalue representing the new descriptor, or (if TYPE is a pointer-
3580 to-descriptor type rather than a descriptor type), a struct value *
3581 representing a pointer to this descriptor. */
3583 static struct value *
3584 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3586 struct type *bounds_type = desc_bounds_type (type);
3587 struct type *desc_type = desc_base_type (type);
3588 struct value *descriptor = allocate_value (desc_type);
3589 struct value *bounds = allocate_value (bounds_type);
3592 for (i = ada_array_arity (check_typedef (VALUE_TYPE (arr))); i > 0; i -= 1)
3594 modify_general_field (VALUE_CONTENTS (bounds),
3595 value_as_long (ada_array_bound (arr, i, 0)),
3596 desc_bound_bitpos (bounds_type, i, 0),
3597 desc_bound_bitsize (bounds_type, i, 0));
3598 modify_general_field (VALUE_CONTENTS (bounds),
3599 value_as_long (ada_array_bound (arr, i, 1)),
3600 desc_bound_bitpos (bounds_type, i, 1),
3601 desc_bound_bitsize (bounds_type, i, 1));
3604 bounds = ensure_lval (bounds, sp);
3606 modify_general_field (VALUE_CONTENTS (descriptor),
3607 VALUE_ADDRESS (ensure_lval (arr, sp)),
3608 fat_pntr_data_bitpos (desc_type),
3609 fat_pntr_data_bitsize (desc_type));
3611 modify_general_field (VALUE_CONTENTS (descriptor),
3612 VALUE_ADDRESS (bounds),
3613 fat_pntr_bounds_bitpos (desc_type),
3614 fat_pntr_bounds_bitsize (desc_type));
3616 descriptor = ensure_lval (descriptor, sp);
3618 if (TYPE_CODE (type) == TYPE_CODE_PTR)
3619 return value_addr (descriptor);
3625 /* Assuming a dummy frame has been established on the target, perform any
3626 conversions needed for calling function FUNC on the NARGS actual
3627 parameters in ARGS, other than standard C conversions. Does
3628 nothing if FUNC does not have Ada-style prototype data, or if NARGS
3629 does not match the number of arguments expected. Use *SP as a
3630 stack pointer for additional data that must be pushed, updating its
3634 ada_convert_actuals (struct value *func, int nargs, struct value *args[],
3639 if (TYPE_NFIELDS (VALUE_TYPE (func)) == 0
3640 || nargs != TYPE_NFIELDS (VALUE_TYPE (func)))
3643 for (i = 0; i < nargs; i += 1)
3645 convert_actual (args[i], TYPE_FIELD_TYPE (VALUE_TYPE (func), i), sp);
3648 /* Experimental Symbol Cache Module */
3650 /* This module may well have been OBE, due to improvements in the
3651 symbol-table module. So until proven otherwise, it is disabled in
3652 the submitted public code, and may be removed from all sources
3657 /* This section implements a simple, fixed-sized hash table for those
3658 Ada-mode symbols that get looked up in the course of executing the user's
3659 commands. The size is fixed on the grounds that there are not
3660 likely to be all that many symbols looked up during any given
3661 session, regardless of the size of the symbol table. If we decide
3662 to go to a resizable table, let's just use the stuff from libiberty
3665 #define HASH_SIZE 1009
3667 struct cache_entry {
3669 domain_enum namespace;
3671 struct symtab *symtab;
3672 struct block *block;
3673 struct cache_entry *next;
3676 static struct obstack cache_space;
3678 static struct cache_entry *cache[HASH_SIZE];
3680 /* Clear all entries from the symbol cache. */
3683 clear_ada_sym_cache (void)
3685 obstack_free (&cache_space, NULL);
3686 obstack_init (&cache_space);
3687 memset (cache, '\000', sizeof (cache));
3690 static struct cache_entry **
3691 find_entry (const char *name, domain_enum namespace)
3693 int h = msymbol_hash (name) % HASH_SIZE;
3694 struct cache_entry **e;
3695 for (e = &cache[h]; *e != NULL; e = &(*e)->next)
3697 if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
3703 /* Return (in SYM) the last cached definition for global or static symbol NAME
3704 in namespace DOMAIN. Returns 1 if entry found, 0 otherwise.
3705 If SYMTAB is non-NULL, store the symbol
3706 table in which the symbol was found there, or NULL if not found.
3707 *BLOCK is set to the block in which NAME is found. */
3710 lookup_cached_symbol (const char *name, domain_enum namespace,
3711 struct symbol **sym, struct block **block,
3712 struct symtab **symtab)
3714 struct cache_entry **e = find_entry (name, namespace);
3720 *block = (*e)->block;
3722 *symtab = (*e)->symtab;
3726 /* Set the cached definition of NAME in DOMAIN to SYM in block
3727 BLOCK and symbol table SYMTAB. */
3730 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3731 struct block *block, struct symtab *symtab)
3733 int h = msymbol_hash (name) % HASH_SIZE;
3735 struct cache_entry *e =
3736 (struct cache_entry *) obstack_alloc(&cache_space, sizeof (*e));
3739 e->name = copy = obstack_alloc (&cache_space, strlen (name) + 1);
3740 strcpy (copy, name);
3742 e->namespace = namespace;
3749 lookup_cached_symbol (const char *name, domain_enum namespace,
3750 struct symbol **sym, struct block **block,
3751 struct symtab **symtab)
3757 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3758 struct block *block, struct symtab *symtab)
3761 #endif /* GNAT_GDB */
3765 /* Return the result of a standard (literal, C-like) lookup of NAME in
3766 given DOMAIN, visible from lexical block BLOCK. */
3768 static struct symbol *
3769 standard_lookup (const char *name, const struct block *block,
3773 struct symtab *symtab;
3775 if (lookup_cached_symbol (name, domain, &sym, NULL, NULL))
3777 sym = lookup_symbol_in_language (name, block, domain, language_c, 0, &symtab);
3778 cache_symbol (name, domain, sym, block_found, symtab);
3783 /* Non-zero iff there is at least one non-function/non-enumeral symbol
3784 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
3785 since they contend in overloading in the same way. */
3787 is_nonfunction (struct ada_symbol_info syms[], int n)
3791 for (i = 0; i < n; i += 1)
3792 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
3793 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
3794 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
3800 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
3801 struct types. Otherwise, they may not. */
3804 equiv_types (struct type *type0, struct type *type1)
3808 if (type0 == NULL || type1 == NULL
3809 || TYPE_CODE (type0) != TYPE_CODE (type1))
3811 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
3812 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
3813 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
3814 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
3820 /* True iff SYM0 represents the same entity as SYM1, or one that is
3821 no more defined than that of SYM1. */
3824 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
3828 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
3829 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
3832 switch (SYMBOL_CLASS (sym0))
3838 struct type *type0 = SYMBOL_TYPE (sym0);
3839 struct type *type1 = SYMBOL_TYPE (sym1);
3840 char *name0 = SYMBOL_LINKAGE_NAME (sym0);
3841 char *name1 = SYMBOL_LINKAGE_NAME (sym1);
3842 int len0 = strlen (name0);
3844 TYPE_CODE (type0) == TYPE_CODE (type1)
3845 && (equiv_types (type0, type1)
3846 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
3847 && strncmp (name1 + len0, "___XV", 5) == 0));
3850 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
3851 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
3857 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
3858 records in OBSTACKP. Do nothing if SYM is a duplicate. */
3861 add_defn_to_vec (struct obstack *obstackp,
3863 struct block *block,
3864 struct symtab *symtab)
3868 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
3870 if (SYMBOL_TYPE (sym) != NULL)
3871 CHECK_TYPEDEF (SYMBOL_TYPE (sym));
3872 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
3874 if (lesseq_defined_than (sym, prevDefns[i].sym))
3876 else if (lesseq_defined_than (prevDefns[i].sym, sym))
3878 prevDefns[i].sym = sym;
3879 prevDefns[i].block = block;
3880 prevDefns[i].symtab = symtab;
3886 struct ada_symbol_info info;
3890 info.symtab = symtab;
3891 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
3895 /* Number of ada_symbol_info structures currently collected in
3896 current vector in *OBSTACKP. */
3899 num_defns_collected (struct obstack *obstackp)
3901 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
3904 /* Vector of ada_symbol_info structures currently collected in current
3905 vector in *OBSTACKP. If FINISH, close off the vector and return
3906 its final address. */
3908 static struct ada_symbol_info *
3909 defns_collected (struct obstack *obstackp, int finish)
3912 return obstack_finish (obstackp);
3914 return (struct ada_symbol_info *) obstack_base (obstackp);
3917 /* Look, in partial_symtab PST, for symbol NAME in given namespace.
3918 Check the global symbols if GLOBAL, the static symbols if not.
3919 Do wild-card match if WILD. */
3921 static struct partial_symbol *
3922 ada_lookup_partial_symbol (struct partial_symtab *pst, const char *name,
3923 int global, domain_enum namespace, int wild)
3925 struct partial_symbol **start;
3926 int name_len = strlen (name);
3927 int length = (global ? pst->n_global_syms : pst->n_static_syms);
3936 pst->objfile->global_psymbols.list + pst->globals_offset :
3937 pst->objfile->static_psymbols.list + pst->statics_offset);
3941 for (i = 0; i < length; i += 1)
3943 struct partial_symbol *psym = start[i];
3945 if (SYMBOL_DOMAIN (psym) == namespace &&
3946 wild_match (name, name_len, SYMBOL_LINKAGE_NAME (psym)))
3960 int M = (U + i) >> 1;
3961 struct partial_symbol *psym = start[M];
3962 if (SYMBOL_LINKAGE_NAME (psym)[0] < name[0])
3964 else if (SYMBOL_LINKAGE_NAME (psym)[0] > name[0])
3966 else if (strcmp (SYMBOL_LINKAGE_NAME (psym), name) < 0)
3977 struct partial_symbol *psym = start[i];
3979 if (SYMBOL_DOMAIN (psym) == namespace)
3981 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym), name_len);
3989 && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4003 int M = (U + i) >> 1;
4004 struct partial_symbol *psym = start[M];
4005 if (SYMBOL_LINKAGE_NAME (psym)[0] < '_')
4007 else if (SYMBOL_LINKAGE_NAME (psym)[0] > '_')
4009 else if (strcmp (SYMBOL_LINKAGE_NAME (psym), "_ada_") < 0)
4020 struct partial_symbol *psym = start[i];
4022 if (SYMBOL_DOMAIN (psym) == namespace)
4026 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (psym)[0];
4029 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (psym), 5);
4031 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym) + 5,
4041 && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4051 /* Find a symbol table containing symbol SYM or NULL if none. */
4053 static struct symtab *
4054 symtab_for_sym (struct symbol *sym)
4057 struct objfile *objfile;
4059 struct symbol *tmp_sym;
4060 struct dict_iterator iter;
4063 ALL_SYMTABS (objfile, s)
4065 switch (SYMBOL_CLASS (sym))
4073 case LOC_CONST_BYTES:
4074 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4075 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4077 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4078 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4084 switch (SYMBOL_CLASS (sym))
4090 case LOC_REGPARM_ADDR:
4095 case LOC_BASEREG_ARG:
4097 case LOC_COMPUTED_ARG:
4098 for (j = FIRST_LOCAL_BLOCK;
4099 j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
4101 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
4102 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4113 /* Return a minimal symbol matching NAME according to Ada decoding
4114 rules. Returns NULL if there is no such minimal symbol. Names
4115 prefixed with "standard__" are handled specially: "standard__" is
4116 first stripped off, and only static and global symbols are searched. */
4118 struct minimal_symbol *
4119 ada_lookup_simple_minsym (const char *name)
4121 struct objfile *objfile;
4122 struct minimal_symbol *msymbol;
4125 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4127 name += sizeof ("standard__") - 1;
4131 wild_match = (strstr (name, "__") == NULL);
4133 ALL_MSYMBOLS (objfile, msymbol)
4135 if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4136 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4143 /* Return up minimal symbol for NAME, folded and encoded according to
4144 Ada conventions, or NULL if none. The last two arguments are ignored. */
4146 static struct minimal_symbol *
4147 ada_lookup_minimal_symbol (const char *name, const char *sfile,
4148 struct objfile *objf)
4150 return ada_lookup_simple_minsym (ada_encode (name));
4153 /* For all subprograms that statically enclose the subprogram of the
4154 selected frame, add symbols matching identifier NAME in DOMAIN
4155 and their blocks to the list of data in OBSTACKP, as for
4156 ada_add_block_symbols (q.v.). If WILD, treat as NAME with a
4160 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4161 const char *name, domain_enum namespace,
4164 #ifdef HAVE_ADD_SYMBOLS_FROM_ENCLOSING_PROCS
4165 /* Use a heuristic to find the frames of enclosing subprograms: treat the
4166 pointer-sized value at location 0 from the local-variable base of a
4167 frame as a static link, and then search up the call stack for a
4168 frame with that same local-variable base. */
4169 static struct symbol static_link_sym;
4170 static struct symbol *static_link;
4171 struct value *target_link_val;
4173 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
4174 struct frame_info *frame;
4176 if (! target_has_stack)
4179 if (static_link == NULL)
4181 /* Initialize the local variable symbol that stands for the
4182 static link (when there is one). */
4183 static_link = &static_link_sym;
4184 SYMBOL_LINKAGE_NAME (static_link) = "";
4185 SYMBOL_LANGUAGE (static_link) = language_unknown;
4186 SYMBOL_CLASS (static_link) = LOC_LOCAL;
4187 SYMBOL_DOMAIN (static_link) = VAR_DOMAIN;
4188 SYMBOL_TYPE (static_link) = lookup_pointer_type (builtin_type_void);
4189 SYMBOL_VALUE (static_link) =
4190 -(long) TYPE_LENGTH (SYMBOL_TYPE (static_link));
4193 frame = get_selected_frame ();
4195 || inside_main_func (get_frame_address_in_block (frame)))
4198 target_link_val = read_var_value (static_link, frame);
4199 while (target_link_val != NULL
4200 && num_defns_collected (obstackp) == 0
4201 && frame_relative_level (frame) <= MAX_ENCLOSING_FRAME_LEVELS)
4203 CORE_ADDR target_link = value_as_address (target_link_val);
4205 frame = get_prev_frame (frame);
4209 if (get_frame_locals_address (frame) == target_link)
4211 struct block *block;
4215 block = get_frame_block (frame, 0);
4216 while (block != NULL && block_function (block) != NULL
4217 && num_defns_collected (obstackp) == 0)
4221 ada_add_block_symbols (obstackp, block, name, namespace,
4222 NULL, NULL, wild_match);
4224 block = BLOCK_SUPERBLOCK (block);
4229 do_cleanups (old_chain);
4233 /* FIXME: The next two routines belong in symtab.c */
4235 static void restore_language (void* lang)
4237 set_language ((enum language) lang);
4240 /* As for lookup_symbol, but performed as if the current language
4244 lookup_symbol_in_language (const char *name, const struct block *block,
4245 domain_enum domain, enum language lang,
4246 int *is_a_field_of_this, struct symtab **symtab)
4248 struct cleanup *old_chain
4249 = make_cleanup (restore_language, (void*) current_language->la_language);
4250 struct symbol *result;
4251 set_language (lang);
4252 result = lookup_symbol (name, block, domain, is_a_field_of_this, symtab);
4253 do_cleanups (old_chain);
4257 /* True if TYPE is definitely an artificial type supplied to a symbol
4258 for which no debugging information was given in the symbol file. */
4261 is_nondebugging_type (struct type *type)
4263 char *name = ada_type_name (type);
4264 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4267 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4268 duplicate other symbols in the list (The only case I know of where
4269 this happens is when object files containing stabs-in-ecoff are
4270 linked with files containing ordinary ecoff debugging symbols (or no
4271 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4272 Returns the number of items in the modified list. */
4275 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4282 if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4283 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4284 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4286 for (j = 0; j < nsyms; j += 1)
4289 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4290 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4291 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4292 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4293 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4294 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4297 for (k = i + 1; k < nsyms; k += 1)
4298 syms[k - 1] = syms[k];
4311 /* Given a type that corresponds to a renaming entity, use the type name
4312 to extract the scope (package name or function name, fully qualified,
4313 and following the GNAT encoding convention) where this renaming has been
4314 defined. The string returned needs to be deallocated after use. */
4317 xget_renaming_scope (struct type *renaming_type)
4319 /* The renaming types adhere to the following convention:
4320 <scope>__<rename>___<XR extension>.
4321 So, to extract the scope, we search for the "___XR" extension,
4322 and then backtrack until we find the first "__". */
4324 const char *name = type_name_no_tag (renaming_type);
4325 char *suffix = strstr (name, "___XR");
4330 /* Now, backtrack a bit until we find the first "__". Start looking
4331 at suffix - 3, as the <rename> part is at least one character long. */
4333 for (last = suffix - 3; last > name; last--)
4334 if (last[0] == '_' && last[1] == '_')
4337 /* Make a copy of scope and return it. */
4339 scope_len = last - name;
4340 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4342 strncpy (scope, name, scope_len);
4343 scope[scope_len] = '\0';
4348 /* Return nonzero if NAME corresponds to a package name. */
4351 is_package_name (const char *name)
4353 /* Here, We take advantage of the fact that no symbols are generated
4354 for packages, while symbols are generated for each function.
4355 So the condition for NAME represent a package becomes equivalent
4356 to NAME not existing in our list of symbols. There is only one
4357 small complication with library-level functions (see below). */
4361 /* If it is a function that has not been defined at library level,
4362 then we should be able to look it up in the symbols. */
4363 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4366 /* Library-level function names start with "_ada_". See if function
4367 "_ada_" followed by NAME can be found. */
4369 /* Do a quick check that NAME does not contain "__", since library-level
4370 functions names can not contain "__" in them. */
4371 if (strstr (name, "__") != NULL)
4374 fun_name = (char *) alloca (strlen (name) + 5 + 1);
4375 xasprintf (&fun_name, "_ada_%s", name);
4377 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4380 /* Return nonzero if SYM corresponds to a renaming entity that is
4381 visible from FUNCTION_NAME. */
4384 renaming_is_visible (const struct symbol *sym, char *function_name)
4386 char *scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4388 make_cleanup (xfree, scope);
4390 /* If the rename has been defined in a package, then it is visible. */
4391 if (is_package_name (scope))
4394 /* Check that the rename is in the current function scope by checking
4395 that its name starts with SCOPE. */
4397 /* If the function name starts with "_ada_", it means that it is
4398 a library-level function. Strip this prefix before doing the
4399 comparison, as the encoding for the renaming does not contain
4401 if (strncmp (function_name, "_ada_", 5) == 0)
4404 return (strncmp (function_name, scope, strlen (scope)) == 0);
4407 /* Iterates over the SYMS list and remove any entry that corresponds to
4408 a renaming entity that is not visible from the function associated
4412 GNAT emits a type following a specified encoding for each renaming
4413 entity. Unfortunately, STABS currently does not support the definition
4414 of types that are local to a given lexical block, so all renamings types
4415 are emitted at library level. As a consequence, if an application
4416 contains two renaming entities using the same name, and a user tries to
4417 print the value of one of these entities, the result of the ada symbol
4418 lookup will also contain the wrong renaming type.
4420 This function partially covers for this limitation by attempting to
4421 remove from the SYMS list renaming symbols that should be visible
4422 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
4423 method with the current information available. The implementation
4424 below has a couple of limitations (FIXME: brobecker-2003-05-12):
4426 - When the user tries to print a rename in a function while there
4427 is another rename entity defined in a package: Normally, the
4428 rename in the function has precedence over the rename in the
4429 package, so the latter should be removed from the list. This is
4430 currently not the case.
4432 - This function will incorrectly remove valid renames if
4433 the CURRENT_BLOCK corresponds to a function which symbol name
4434 has been changed by an "Export" pragma. As a consequence,
4435 the user will be unable to print such rename entities. */
4438 remove_out_of_scope_renamings (struct ada_symbol_info *syms,
4440 struct block *current_block)
4442 struct symbol *current_function;
4443 char *current_function_name;
4446 /* Extract the function name associated to CURRENT_BLOCK.
4447 Abort if unable to do so. */
4449 if (current_block == NULL)
4452 current_function = block_function (current_block);
4453 if (current_function == NULL)
4456 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4457 if (current_function_name == NULL)
4460 /* Check each of the symbols, and remove it from the list if it is
4461 a type corresponding to a renaming that is out of the scope of
4462 the current block. */
4467 if (ada_is_object_renaming (syms[i].sym)
4468 && !renaming_is_visible (syms[i].sym, current_function_name))
4471 for (j = i + 1; j < nsyms; j++)
4472 syms[j - 1] = syms[j];
4482 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4483 scope and in global scopes, returning the number of matches. Sets
4484 *RESULTS to point to a vector of (SYM,BLOCK,SYMTAB) triples,
4485 indicating the symbols found and the blocks and symbol tables (if
4486 any) in which they were found. This vector are transient---good only to
4487 the next call of ada_lookup_symbol_list. Any non-function/non-enumeral
4488 symbol match within the nest of blocks whose innermost member is BLOCK0,
4489 is the one match returned (no other matches in that or
4490 enclosing blocks is returned). If there are any matches in or
4491 surrounding BLOCK0, then these alone are returned. Otherwise, the
4492 search extends to global and file-scope (static) symbol tables.
4493 Names prefixed with "standard__" are handled specially: "standard__"
4494 is first stripped off, and only static and global symbols are searched. */
4497 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4498 domain_enum namespace,
4499 struct ada_symbol_info **results)
4503 struct partial_symtab *ps;
4504 struct blockvector *bv;
4505 struct objfile *objfile;
4506 struct block *block;
4508 struct minimal_symbol *msymbol;
4514 obstack_free (&symbol_list_obstack, NULL);
4515 obstack_init (&symbol_list_obstack);
4519 /* Search specified block and its superiors. */
4521 wild_match = (strstr (name0, "__") == NULL);
4523 block = (struct block *) block0; /* FIXME: No cast ought to be
4524 needed, but adding const will
4525 have a cascade effect. */
4526 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4530 name = name0 + sizeof ("standard__") - 1;
4534 while (block != NULL)
4537 ada_add_block_symbols (&symbol_list_obstack, block, name,
4538 namespace, NULL, NULL, wild_match);
4540 /* If we found a non-function match, assume that's the one. */
4541 if (is_nonfunction (defns_collected (&symbol_list_obstack, 0),
4542 num_defns_collected (&symbol_list_obstack)))
4545 block = BLOCK_SUPERBLOCK (block);
4548 /* If no luck so far, try to find NAME as a local symbol in some lexically
4549 enclosing subprogram. */
4550 if (num_defns_collected (&symbol_list_obstack) == 0 && block_depth > 2)
4551 add_symbols_from_enclosing_procs (&symbol_list_obstack,
4552 name, namespace, wild_match);
4554 /* If we found ANY matches among non-global symbols, we're done. */
4556 if (num_defns_collected (&symbol_list_obstack) > 0)
4560 if (lookup_cached_symbol (name0, namespace, &sym, &block, &s))
4563 add_defn_to_vec (&symbol_list_obstack, sym, block, s);
4567 /* Now add symbols from all global blocks: symbol tables, minimal symbol
4568 tables, and psymtab's. */
4570 ALL_SYMTABS (objfile, s)
4575 bv = BLOCKVECTOR (s);
4576 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4577 ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4578 objfile, s, wild_match);
4581 if (namespace == VAR_DOMAIN)
4583 ALL_MSYMBOLS (objfile, msymbol)
4585 if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match))
4587 switch (MSYMBOL_TYPE (msymbol))
4589 case mst_solib_trampoline:
4592 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
4595 int ndefns0 = num_defns_collected (&symbol_list_obstack);
4597 bv = BLOCKVECTOR (s);
4598 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4599 ada_add_block_symbols (&symbol_list_obstack, block,
4600 SYMBOL_LINKAGE_NAME (msymbol),
4601 namespace, objfile, s, wild_match);
4603 if (num_defns_collected (&symbol_list_obstack) == ndefns0)
4605 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4606 ada_add_block_symbols (&symbol_list_obstack, block,
4607 SYMBOL_LINKAGE_NAME (msymbol),
4608 namespace, objfile, s,
4617 ALL_PSYMTABS (objfile, ps)
4621 && ada_lookup_partial_symbol (ps, name, 1, namespace, wild_match))
4623 s = PSYMTAB_TO_SYMTAB (ps);
4626 bv = BLOCKVECTOR (s);
4627 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4628 ada_add_block_symbols (&symbol_list_obstack, block, name,
4629 namespace, objfile, s, wild_match);
4633 /* Now add symbols from all per-file blocks if we've gotten no hits
4634 (Not strictly correct, but perhaps better than an error).
4635 Do the symtabs first, then check the psymtabs. */
4637 if (num_defns_collected (&symbol_list_obstack) == 0)
4640 ALL_SYMTABS (objfile, s)
4645 bv = BLOCKVECTOR (s);
4646 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4647 ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4648 objfile, s, wild_match);
4651 ALL_PSYMTABS (objfile, ps)
4655 && ada_lookup_partial_symbol (ps, name, 0, namespace, wild_match))
4657 s = PSYMTAB_TO_SYMTAB (ps);
4658 bv = BLOCKVECTOR (s);
4661 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4662 ada_add_block_symbols (&symbol_list_obstack, block, name,
4663 namespace, objfile, s, wild_match);
4669 ndefns = num_defns_collected (&symbol_list_obstack);
4670 *results = defns_collected (&symbol_list_obstack, 1);
4672 ndefns = remove_extra_symbols (*results, ndefns);
4675 cache_symbol (name0, namespace, NULL, NULL, NULL);
4677 if (ndefns == 1 && cacheIfUnique)
4678 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block,
4679 (*results)[0].symtab);
4681 ndefns = remove_out_of_scope_renamings (*results, ndefns,
4682 (struct block *) block0);
4687 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4688 scope and in global scopes, or NULL if none. NAME is folded and
4689 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
4690 but is disambiguated by user query if needed. *IS_A_FIELD_OF_THIS is
4691 set to 0 and *SYMTAB is set to the symbol table in which the symbol
4692 was found (in both cases, these assignments occur only if the
4693 pointers are non-null). */
4697 ada_lookup_symbol (const char *name, const struct block *block0,
4698 domain_enum namespace, int *is_a_field_of_this,
4699 struct symtab **symtab)
4701 struct ada_symbol_info *candidates;
4704 n_candidates = ada_lookup_symbol_list (ada_encode (ada_fold_name (name)),
4705 block0, namespace, &candidates);
4707 if (n_candidates == 0)
4709 else if (n_candidates != 1)
4710 user_select_syms (candidates, n_candidates, 1);
4712 if (is_a_field_of_this != NULL)
4713 *is_a_field_of_this = 0;
4717 *symtab = candidates[0].symtab;
4718 if (*symtab == NULL && candidates[0].block != NULL)
4720 struct objfile *objfile;
4723 struct blockvector *bv;
4725 /* Search the list of symtabs for one which contains the
4726 address of the start of this block. */
4727 ALL_SYMTABS (objfile, s)
4729 bv = BLOCKVECTOR (s);
4730 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4731 if (BLOCK_START (b) <= BLOCK_START (candidates[0].block)
4732 && BLOCK_END (b) > BLOCK_START (candidates[0].block))
4735 return fixup_symbol_section (candidates[0].sym, objfile);
4737 return fixup_symbol_section (candidates[0].sym, NULL);
4741 return candidates[0].sym;
4744 static struct symbol *
4745 ada_lookup_symbol_nonlocal (const char *name,
4746 const char *linkage_name,
4747 const struct block *block,
4748 const domain_enum domain,
4749 struct symtab **symtab)
4751 if (linkage_name == NULL)
4752 linkage_name = name;
4753 return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
4758 /* True iff STR is a possible encoded suffix of a normal Ada name
4759 that is to be ignored for matching purposes. Suffixes of parallel
4760 names (e.g., XVE) are not included here. Currently, the possible suffixes
4761 are given by either of the regular expression:
4763 (__[0-9]+)?\.[0-9]+ [nested subprogram suffix, on platforms such as Linux]
4764 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
4765 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(LJM|X([FDBUP].*|R[^T]?)))?$
4769 is_name_suffix (const char *str)
4772 const char *matching;
4773 const int len = strlen (str);
4775 /* (__[0-9]+)?\.[0-9]+ */
4777 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4780 while (isdigit (matching[0]))
4782 if (matching[0] == '\0')
4786 if (matching[0] == '.')
4789 while (isdigit (matching[0]))
4791 if (matching[0] == '\0')
4796 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4799 while (isdigit (matching[0]))
4801 if (matching[0] == '\0')
4805 /* ??? We should not modify STR directly, as we are doing below. This
4806 is fine in this case, but may become problematic later if we find
4807 that this alternative did not work, and want to try matching
4808 another one from the begining of STR. Since we modified it, we
4809 won't be able to find the begining of the string anymore! */
4813 while (str[0] != '_' && str[0] != '\0')
4815 if (str[0] != 'n' && str[0] != 'b')
4820 if (str[0] == '\000')
4824 if (str[1] != '_' || str[2] == '\000')
4828 if (strcmp (str + 3, "LJM") == 0)
4832 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B' ||
4833 str[4] == 'U' || str[4] == 'P')
4835 if (str[4] == 'R' && str[5] != 'T')
4839 if (!isdigit (str[2]))
4841 for (k = 3; str[k] != '\0'; k += 1)
4842 if (!isdigit (str[k]) && str[k] != '_')
4846 if (str[0] == '$' && isdigit (str[1]))
4848 for (k = 2; str[k] != '\0'; k += 1)
4849 if (!isdigit (str[k]) && str[k] != '_')
4856 /* Return nonzero if the given string starts with a dot ('.')
4857 followed by zero or more digits.
4859 Note: brobecker/2003-11-10: A forward declaration has not been
4860 added at the begining of this file yet, because this function
4861 is only used to work around a problem found during wild matching
4862 when trying to match minimal symbol names against symbol names
4863 obtained from dwarf-2 data. This function is therefore currently
4864 only used in wild_match() and is likely to be deleted when the
4865 problem in dwarf-2 is fixed. */
4868 is_dot_digits_suffix (const char *str)
4874 while (isdigit (str[0]))
4876 return (str[0] == '\0');
4879 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
4880 PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1. Ignores
4881 informational suffixes of NAME (i.e., for which is_name_suffix is
4885 wild_match (const char *patn0, int patn_len, const char *name0)
4891 /* FIXME: brobecker/2003-11-10: For some reason, the symbol name
4892 stored in the symbol table for nested function names is sometimes
4893 different from the name of the associated entity stored in
4894 the dwarf-2 data: This is the case for nested subprograms, where
4895 the minimal symbol name contains a trailing ".[:digit:]+" suffix,
4896 while the symbol name from the dwarf-2 data does not.
4898 Although the DWARF-2 standard documents that entity names stored
4899 in the dwarf-2 data should be identical to the name as seen in
4900 the source code, GNAT takes a different approach as we already use
4901 a special encoding mechanism to convey the information so that
4902 a C debugger can still use the information generated to debug
4903 Ada programs. A corollary is that the symbol names in the dwarf-2
4904 data should match the names found in the symbol table. I therefore
4905 consider this issue as a compiler defect.
4907 Until the compiler is properly fixed, we work-around the problem
4908 by ignoring such suffixes during the match. We do so by making
4909 a copy of PATN0 and NAME0, and then by stripping such a suffix
4910 if present. We then perform the match on the resulting strings. */
4913 name_len = strlen (name0);
4915 name = (char *) alloca ((name_len + 1) * sizeof (char));
4916 strcpy (name, name0);
4917 dot = strrchr (name, '.');
4918 if (dot != NULL && is_dot_digits_suffix (dot))
4921 patn = (char *) alloca ((patn_len + 1) * sizeof (char));
4922 strncpy (patn, patn0, patn_len);
4923 patn[patn_len] = '\0';
4924 dot = strrchr (patn, '.');
4925 if (dot != NULL && is_dot_digits_suffix (dot))
4928 patn_len = dot - patn;
4932 /* Now perform the wild match. */
4934 name_len = strlen (name);
4935 if (name_len >= patn_len + 5 && strncmp (name, "_ada_", 5) == 0
4936 && strncmp (patn, name + 5, patn_len) == 0
4937 && is_name_suffix (name + patn_len + 5))
4940 while (name_len >= patn_len)
4942 if (strncmp (patn, name, patn_len) == 0
4943 && is_name_suffix (name + patn_len))
4951 && name[0] != '.' && (name[0] != '_' || name[1] != '_'));
4956 if (!islower (name[2]))
4963 if (!islower (name[1]))
4974 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
4975 vector *defn_symbols, updating the list of symbols in OBSTACKP
4976 (if necessary). If WILD, treat as NAME with a wildcard prefix.
4977 OBJFILE is the section containing BLOCK.
4978 SYMTAB is recorded with each symbol added. */
4981 ada_add_block_symbols (struct obstack *obstackp,
4982 struct block *block, const char *name,
4983 domain_enum domain, struct objfile *objfile,
4984 struct symtab *symtab, int wild)
4986 struct dict_iterator iter;
4987 int name_len = strlen (name);
4988 /* A matching argument symbol, if any. */
4989 struct symbol *arg_sym;
4990 /* Set true when we find a matching non-argument symbol. */
4999 ALL_BLOCK_SYMBOLS (block, iter, sym)
5001 if (SYMBOL_DOMAIN (sym) == domain &&
5002 wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
5004 switch (SYMBOL_CLASS (sym))
5010 case LOC_REGPARM_ADDR:
5011 case LOC_BASEREG_ARG:
5012 case LOC_COMPUTED_ARG:
5015 case LOC_UNRESOLVED:
5019 add_defn_to_vec (obstackp,
5020 fixup_symbol_section (sym, objfile),
5029 ALL_BLOCK_SYMBOLS (block, iter, sym)
5031 if (SYMBOL_DOMAIN (sym) == domain)
5033 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
5035 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
5037 switch (SYMBOL_CLASS (sym))
5043 case LOC_REGPARM_ADDR:
5044 case LOC_BASEREG_ARG:
5045 case LOC_COMPUTED_ARG:
5048 case LOC_UNRESOLVED:
5052 add_defn_to_vec (obstackp,
5053 fixup_symbol_section (sym, objfile),
5062 if (!found_sym && arg_sym != NULL)
5064 add_defn_to_vec (obstackp,
5065 fixup_symbol_section (arg_sym, objfile),
5074 ALL_BLOCK_SYMBOLS (block, iter, sym)
5076 if (SYMBOL_DOMAIN (sym) == domain)
5080 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5083 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5085 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5090 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5092 switch (SYMBOL_CLASS (sym))
5098 case LOC_REGPARM_ADDR:
5099 case LOC_BASEREG_ARG:
5100 case LOC_COMPUTED_ARG:
5103 case LOC_UNRESOLVED:
5107 add_defn_to_vec (obstackp,
5108 fixup_symbol_section (sym, objfile),
5117 /* NOTE: This really shouldn't be needed for _ada_ symbols.
5118 They aren't parameters, right? */
5119 if (!found_sym && arg_sym != NULL)
5121 add_defn_to_vec (obstackp,
5122 fixup_symbol_section (arg_sym, objfile),
5130 /* Symbol Completion */
5132 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5133 name in a form that's appropriate for the completion. The result
5134 does not need to be deallocated, but is only good until the next call.
5136 TEXT_LEN is equal to the length of TEXT.
5137 Perform a wild match if WILD_MATCH is set.
5138 ENCODED should be set if TEXT represents the start of a symbol name
5139 in its encoded form. */
5142 symbol_completion_match (const char *sym_name,
5143 const char *text, int text_len,
5144 int wild_match, int encoded)
5147 const int verbatim_match = (text[0] == '<');
5152 /* Strip the leading angle bracket. */
5157 /* First, test against the fully qualified name of the symbol. */
5159 if (strncmp (sym_name, text, text_len) == 0)
5162 if (match && !encoded)
5164 /* One needed check before declaring a positive match is to verify
5165 that iff we are doing a verbatim match, the decoded version
5166 of the symbol name starts with '<'. Otherwise, this symbol name
5167 is not a suitable completion. */
5168 const char *sym_name_copy = sym_name;
5169 int has_angle_bracket;
5171 sym_name = ada_decode (sym_name);
5172 has_angle_bracket = (sym_name [0] == '<');
5173 match = (has_angle_bracket == verbatim_match);
5174 sym_name = sym_name_copy;
5177 if (match && !verbatim_match)
5179 /* When doing non-verbatim match, another check that needs to
5180 be done is to verify that the potentially matching symbol name
5181 does not include capital letters, because the ada-mode would
5182 not be able to understand these symbol names without the
5183 angle bracket notation. */
5186 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5191 /* Second: Try wild matching... */
5193 if (!match && wild_match)
5195 /* Since we are doing wild matching, this means that TEXT
5196 may represent an unqualified symbol name. We therefore must
5197 also compare TEXT against the unqualified name of the symbol. */
5198 sym_name = ada_unqualified_name (ada_decode (sym_name));
5200 if (strncmp (sym_name, text, text_len) == 0)
5204 /* Finally: If we found a mach, prepare the result to return. */
5210 sym_name = add_angle_brackets (sym_name);
5213 sym_name = ada_decode (sym_name);
5218 /* A companion function to ada_make_symbol_completion_list().
5219 Check if SYM_NAME represents a symbol which name would be suitable
5220 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5221 it is appended at the end of the given string vector SV.
5223 ORIG_TEXT is the string original string from the user command
5224 that needs to be completed. WORD is the entire command on which
5225 completion should be performed. These two parameters are used to
5226 determine which part of the symbol name should be added to the
5228 if WILD_MATCH is set, then wild matching is performed.
5229 ENCODED should be set if TEXT represents a symbol name in its
5230 encoded formed (in which case the completion should also be
5234 symbol_completion_add (struct string_vector *sv,
5235 const char *sym_name,
5236 const char *text, int text_len,
5237 const char *orig_text, const char *word,
5238 int wild_match, int encoded)
5240 const char *match = symbol_completion_match (sym_name, text, text_len,
5241 wild_match, encoded);
5247 /* We found a match, so add the appropriate completion to the given
5250 if (word == orig_text)
5252 completion = xmalloc (strlen (match) + 5);
5253 strcpy (completion, match);
5255 else if (word > orig_text)
5257 /* Return some portion of sym_name. */
5258 completion = xmalloc (strlen (match) + 5);
5259 strcpy (completion, match + (word - orig_text));
5263 /* Return some of ORIG_TEXT plus sym_name. */
5264 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5265 strncpy (completion, word, orig_text - word);
5266 completion[orig_text - word] = '\0';
5267 strcat (completion, match);
5270 string_vector_append (sv, completion);
5273 /* Return a list of possible symbol names completing TEXT0. The list
5274 is NULL terminated. WORD is the entire command on which completion
5278 ada_make_symbol_completion_list (const char *text0, const char *word)
5280 /* Note: This function is almost a copy of make_symbol_completion_list(),
5281 except it has been adapted for Ada. It is somewhat of a shame to
5282 duplicate so much code, but we don't really have the infrastructure
5283 yet to develop a language-aware version of he symbol completer... */
5288 struct string_vector result = xnew_string_vector (128);
5291 struct partial_symtab *ps;
5292 struct minimal_symbol *msymbol;
5293 struct objfile *objfile;
5294 struct block *b, *surrounding_static_block = 0;
5296 struct dict_iterator iter;
5298 if (text0[0] == '<')
5300 text = xstrdup (text0);
5301 make_cleanup (xfree, text);
5302 text_len = strlen (text);
5308 text = xstrdup (ada_encode (text0));
5309 make_cleanup (xfree, text);
5310 text_len = strlen (text);
5311 for (i = 0; i < text_len; i++)
5312 text[i] = tolower (text[i]);
5314 /* FIXME: brobecker/2003-09-17: When we get rid of ADA_RETAIN_DOTS,
5315 we can restrict the wild_match check to searching "__" only. */
5316 wild_match = (strstr (text0, "__") == NULL
5317 && strchr (text0, '.') == NULL);
5318 encoded = (strstr (text0, "__") != NULL);
5321 /* First, look at the partial symtab symbols. */
5322 ALL_PSYMTABS (objfile, ps)
5324 struct partial_symbol **psym;
5326 /* If the psymtab's been read in we'll get it when we search
5327 through the blockvector. */
5331 for (psym = objfile->global_psymbols.list + ps->globals_offset;
5332 psym < (objfile->global_psymbols.list + ps->globals_offset
5333 + ps->n_global_syms);
5337 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (*psym),
5338 text, text_len, text0, word,
5339 wild_match, encoded);
5342 for (psym = objfile->static_psymbols.list + ps->statics_offset;
5343 psym < (objfile->static_psymbols.list + ps->statics_offset
5344 + ps->n_static_syms);
5348 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (*psym),
5349 text, text_len, text0, word,
5350 wild_match, encoded);
5354 /* At this point scan through the misc symbol vectors and add each
5355 symbol you find to the list. Eventually we want to ignore
5356 anything that isn't a text symbol (everything else will be
5357 handled by the psymtab code above). */
5359 ALL_MSYMBOLS (objfile, msymbol)
5362 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (msymbol),
5363 text, text_len, text0, word,
5364 wild_match, encoded);
5367 /* Search upwards from currently selected frame (so that we can
5368 complete on local vars. */
5370 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5372 if (!BLOCK_SUPERBLOCK (b))
5373 surrounding_static_block = b; /* For elmin of dups */
5375 ALL_BLOCK_SYMBOLS (b, iter, sym)
5377 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
5378 text, text_len, text0, word,
5379 wild_match, encoded);
5383 /* Go through the symtabs and check the externs and statics for
5384 symbols which match. */
5386 ALL_SYMTABS (objfile, s)
5389 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5390 ALL_BLOCK_SYMBOLS (b, iter, sym)
5392 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
5393 text, text_len, text0, word,
5394 wild_match, encoded);
5398 ALL_SYMTABS (objfile, s)
5401 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5402 /* Don't do this block twice. */
5403 if (b == surrounding_static_block)
5405 ALL_BLOCK_SYMBOLS (b, iter, sym)
5407 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
5408 text, text_len, text0, word,
5409 wild_match, encoded);
5413 /* Append the closing NULL entry. */
5414 string_vector_append (&result, NULL);
5416 return (result.array);
5419 #endif /* GNAT_GDB */
5422 /* Breakpoint-related */
5424 /* Import message from symtab.c. */
5425 extern char no_symtab_msg[];
5427 /* Assuming that LINE is pointing at the beginning of an argument to
5428 'break', return a pointer to the delimiter for the initial segment
5429 of that name. This is the first ':', ' ', or end of LINE. */
5432 ada_start_decode_line_1 (char *line)
5434 /* NOTE: strpbrk would be more elegant, but I am reluctant to be
5435 the first to use such a library function in GDB code. */
5437 for (p = line; *p != '\000' && *p != ' ' && *p != ':'; p += 1)
5442 /* *SPEC points to a function and line number spec (as in a break
5443 command), following any initial file name specification.
5445 Return all symbol table/line specfications (sals) consistent with the
5446 information in *SPEC and FILE_TABLE in the following sense:
5447 + FILE_TABLE is null, or the sal refers to a line in the file
5448 named by FILE_TABLE.
5449 + If *SPEC points to an argument with a trailing ':LINENUM',
5450 then the sal refers to that line (or one following it as closely as
5452 + If *SPEC does not start with '*', the sal is in a function with
5455 Returns with 0 elements if no matching non-minimal symbols found.
5457 If *SPEC begins with a function name of the form <NAME>, then NAME
5458 is taken as a literal name; otherwise the function name is subject
5459 to the usual encoding.
5461 *SPEC is updated to point after the function/line number specification.
5463 FUNFIRSTLINE is non-zero if we desire the first line of real code
5466 If CANONICAL is non-NULL, and if any of the sals require a
5467 'canonical line spec', then *CANONICAL is set to point to an array
5468 of strings, corresponding to and equal in length to the returned
5469 list of sals, such that (*CANONICAL)[i] is non-null and contains a
5470 canonical line spec for the ith returned sal, if needed. If no
5471 canonical line specs are required and CANONICAL is non-null,
5472 *CANONICAL is set to NULL.
5474 A 'canonical line spec' is simply a name (in the format of the
5475 breakpoint command) that uniquely identifies a breakpoint position,
5476 with no further contextual information or user selection. It is
5477 needed whenever the file name, function name, and line number
5478 information supplied is insufficient for this unique
5479 identification. Currently overloaded functions, the name '*',
5480 or static functions without a filename yield a canonical line spec.
5481 The array and the line spec strings are allocated on the heap; it
5482 is the caller's responsibility to free them. */
5484 struct symtabs_and_lines
5485 ada_finish_decode_line_1 (char **spec, struct symtab *file_table,
5486 int funfirstline, char ***canonical)
5488 struct ada_symbol_info *symbols;
5489 const struct block *block;
5490 int n_matches, i, line_num;
5491 struct symtabs_and_lines selected;
5492 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
5498 char *unquoted_name;
5500 if (file_table == NULL)
5501 block = block_static_block (get_selected_block (0));
5503 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_table), STATIC_BLOCK);
5505 if (canonical != NULL)
5506 *canonical = (char **) NULL;
5508 is_quoted = (**spec && strchr (get_gdb_completer_quote_characters (),
5517 *spec = skip_quoted (*spec);
5518 while (**spec != '\000' &&
5519 !strchr (ada_completer_word_break_characters, **spec))
5525 if (file_table != NULL && (*spec)[0] == ':' && isdigit ((*spec)[1]))
5527 line_num = strtol (*spec + 1, spec, 10);
5528 while (**spec == ' ' || **spec == '\t')
5535 error ("Wild-card function with no line number or file name.");
5537 return ada_sals_for_line (file_table->filename, line_num,
5538 funfirstline, canonical, 0);
5541 if (name[0] == '\'')
5549 unquoted_name = (char *) alloca (len - 1);
5550 memcpy (unquoted_name, name + 1, len - 2);
5551 unquoted_name[len - 2] = '\000';
5556 unquoted_name = (char *) alloca (len + 1);
5557 memcpy (unquoted_name, name, len);
5558 unquoted_name[len] = '\000';
5559 lower_name = (char *) alloca (len + 1);
5560 for (i = 0; i < len; i += 1)
5561 lower_name[i] = tolower (name[i]);
5562 lower_name[len] = '\000';
5566 if (lower_name != NULL)
5567 n_matches = ada_lookup_symbol_list (ada_encode (lower_name), block,
5568 VAR_DOMAIN, &symbols);
5570 n_matches = ada_lookup_symbol_list (unquoted_name, block,
5571 VAR_DOMAIN, &symbols);
5572 if (n_matches == 0 && line_num >= 0)
5573 error ("No line number information found for %s.", unquoted_name);
5574 else if (n_matches == 0)
5576 #ifdef HPPA_COMPILER_BUG
5577 /* FIXME: See comment in symtab.c::decode_line_1 */
5579 volatile struct symtab_and_line val;
5580 #define volatile /*nothing */
5582 struct symtab_and_line val;
5584 struct minimal_symbol *msymbol;
5589 if (lower_name != NULL)
5590 msymbol = ada_lookup_simple_minsym (ada_encode (lower_name));
5591 if (msymbol == NULL)
5592 msymbol = ada_lookup_simple_minsym (unquoted_name);
5593 if (msymbol != NULL)
5595 val.pc = SYMBOL_VALUE_ADDRESS (msymbol);
5596 val.section = SYMBOL_BFD_SECTION (msymbol);
5599 val.pc += DEPRECATED_FUNCTION_START_OFFSET;
5600 SKIP_PROLOGUE (val.pc);
5602 selected.sals = (struct symtab_and_line *)
5603 xmalloc (sizeof (struct symtab_and_line));
5604 selected.sals[0] = val;
5609 if (!have_full_symbols () &&
5610 !have_partial_symbols () && !have_minimal_symbols ())
5611 error ("No symbol table is loaded. Use the \"file\" command.");
5613 error ("Function \"%s\" not defined.", unquoted_name);
5614 return selected; /* for lint */
5619 struct symtabs_and_lines best_sal =
5620 find_sal_from_funcs_and_line (file_table->filename, line_num,
5621 symbols, n_matches);
5623 adjust_pc_past_prologue (&best_sal.sals[0].pc);
5629 user_select_syms (symbols, n_matches, n_matches);
5632 selected.sals = (struct symtab_and_line *)
5633 xmalloc (sizeof (struct symtab_and_line) * selected.nelts);
5634 memset (selected.sals, 0, selected.nelts * sizeof (selected.sals[i]));
5635 make_cleanup (xfree, selected.sals);
5638 while (i < selected.nelts)
5640 if (SYMBOL_CLASS (symbols[i].sym) == LOC_BLOCK)
5642 = find_function_start_sal (symbols[i].sym, funfirstline);
5643 else if (SYMBOL_LINE (symbols[i].sym) != 0)
5645 selected.sals[i].symtab =
5647 ? symbols[i].symtab : symtab_for_sym (symbols[i].sym);
5648 selected.sals[i].line = SYMBOL_LINE (symbols[i].sym);
5650 else if (line_num >= 0)
5652 /* Ignore this choice */
5653 symbols[i] = symbols[selected.nelts - 1];
5654 selected.nelts -= 1;
5658 error ("Line number not known for symbol \"%s\"", unquoted_name);
5662 if (canonical != NULL && (line_num >= 0 || n_matches > 1))
5664 *canonical = (char **) xmalloc (sizeof (char *) * selected.nelts);
5665 for (i = 0; i < selected.nelts; i += 1)
5667 extended_canonical_line_spec (selected.sals[i],
5668 SYMBOL_PRINT_NAME (symbols[i].sym));
5671 discard_cleanups (old_chain);
5675 /* The (single) sal corresponding to line LINE_NUM in a symbol table
5676 with file name FILENAME that occurs in one of the functions listed
5677 in the symbol fields of SYMBOLS[0 .. NSYMS-1]. */
5679 static struct symtabs_and_lines
5680 find_sal_from_funcs_and_line (const char *filename, int line_num,
5681 struct ada_symbol_info *symbols, int nsyms)
5683 struct symtabs_and_lines sals;
5684 int best_index, best;
5685 struct linetable *best_linetable;
5686 struct objfile *objfile;
5688 struct symtab *best_symtab;
5690 read_all_symtabs (filename);
5693 best_linetable = NULL;
5696 ALL_SYMTABS (objfile, s)
5698 struct linetable *l;
5703 if (strcmp (filename, s->filename) != 0)
5706 ind = find_line_in_linetable (l, line_num, symbols, nsyms, &exact);
5716 if (best == 0 || l->item[ind].line < best)
5718 best = l->item[ind].line;
5727 error ("Line number not found in designated function.");
5732 sals.sals = (struct symtab_and_line *) xmalloc (sizeof (sals.sals[0]));
5734 init_sal (&sals.sals[0]);
5736 sals.sals[0].line = best_linetable->item[best_index].line;
5737 sals.sals[0].pc = best_linetable->item[best_index].pc;
5738 sals.sals[0].symtab = best_symtab;
5743 /* Return the index in LINETABLE of the best match for LINE_NUM whose
5744 pc falls within one of the functions denoted by the symbol fields
5745 of SYMBOLS[0..NSYMS-1]. Set *EXACTP to 1 if the match is exact,
5749 find_line_in_linetable (struct linetable *linetable, int line_num,
5750 struct ada_symbol_info *symbols, int nsyms, int *exactp)
5752 int i, len, best_index, best;
5754 if (line_num <= 0 || linetable == NULL)
5757 len = linetable->nitems;
5758 for (i = 0, best_index = -1, best = 0; i < len; i += 1)
5761 struct linetable_entry *item = &(linetable->item[i]);
5763 for (k = 0; k < nsyms; k += 1)
5765 if (symbols[k].sym != NULL
5766 && SYMBOL_CLASS (symbols[k].sym) == LOC_BLOCK
5767 && item->pc >= BLOCK_START (SYMBOL_BLOCK_VALUE (symbols[k].sym))
5768 && item->pc < BLOCK_END (SYMBOL_BLOCK_VALUE (symbols[k].sym)))
5775 if (item->line == line_num)
5781 if (item->line > line_num && (best == 0 || item->line < best))
5792 /* Find the smallest k >= LINE_NUM such that k is a line number in
5793 LINETABLE, and k falls strictly within a named function that begins at
5794 or before LINE_NUM. Return -1 if there is no such k. */
5797 nearest_line_number_in_linetable (struct linetable *linetable, int line_num)
5801 if (line_num <= 0 || linetable == NULL || linetable->nitems == 0)
5803 len = linetable->nitems;
5809 struct linetable_entry *item = &(linetable->item[i]);
5811 if (item->line >= line_num && item->line < best)
5814 CORE_ADDR start, end;
5817 find_pc_partial_function (item->pc, &func_name, &start, &end);
5819 if (func_name != NULL && item->pc < end)
5821 if (item->line == line_num)
5825 struct symbol *sym =
5826 standard_lookup (func_name, NULL, VAR_DOMAIN);
5827 if (is_plausible_func_for_line (sym, line_num))
5833 while (i < len && linetable->item[i].pc < end);
5843 return (best == INT_MAX) ? -1 : best;
5847 /* Return the next higher index, k, into LINETABLE such that k > IND,
5848 entry k in LINETABLE has a line number equal to LINE_NUM, k
5849 corresponds to a PC that is in a function different from that
5850 corresponding to IND, and falls strictly within a named function
5851 that begins at a line at or preceding STARTING_LINE.
5852 Return -1 if there is no such k.
5853 IND == -1 corresponds to no function. */
5856 find_next_line_in_linetable (struct linetable *linetable, int line_num,
5857 int starting_line, int ind)
5861 if (line_num <= 0 || linetable == NULL || ind >= linetable->nitems)
5863 len = linetable->nitems;
5867 CORE_ADDR start, end;
5869 if (find_pc_partial_function (linetable->item[ind].pc,
5870 (char **) NULL, &start, &end))
5872 while (ind < len && linetable->item[ind].pc < end)
5884 struct linetable_entry *item = &(linetable->item[i]);
5886 if (item->line >= line_num)
5889 CORE_ADDR start, end;
5892 find_pc_partial_function (item->pc, &func_name, &start, &end);
5894 if (func_name != NULL && item->pc < end)
5896 if (item->line == line_num)
5898 struct symbol *sym =
5899 standard_lookup (func_name, NULL, VAR_DOMAIN);
5900 if (is_plausible_func_for_line (sym, starting_line))
5904 while ((i + 1) < len && linetable->item[i + 1].pc < end)
5916 /* True iff function symbol SYM starts somewhere at or before line #
5920 is_plausible_func_for_line (struct symbol *sym, int line_num)
5922 struct symtab_and_line start_sal;
5927 start_sal = find_function_start_sal (sym, 0);
5929 return (start_sal.line != 0 && line_num >= start_sal.line);
5932 /* Read in all symbol tables corresponding to partial symbol tables
5933 with file name FILENAME. */
5936 read_all_symtabs (const char *filename)
5938 struct partial_symtab *ps;
5939 struct objfile *objfile;
5941 ALL_PSYMTABS (objfile, ps)
5945 if (strcmp (filename, ps->filename) == 0)
5946 PSYMTAB_TO_SYMTAB (ps);
5950 /* All sals corresponding to line LINE_NUM in a symbol table from file
5951 FILENAME, as filtered by the user. Filter out any lines that
5952 reside in functions with "suppressed" names (not corresponding to
5953 explicit Ada functions), if there is at least one in a function
5954 with a non-suppressed name. If CANONICAL is not null, set
5955 it to a corresponding array of canonical line specs.
5956 If ONE_LOCATION_ONLY is set and several matches are found for
5957 the given location, then automatically select the first match found
5958 instead of asking the user which instance should be returned. */
5960 struct symtabs_and_lines
5961 ada_sals_for_line (const char *filename, int line_num,
5962 int funfirstline, char ***canonical,
5963 int one_location_only)
5965 struct symtabs_and_lines result;
5966 struct objfile *objfile;
5968 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
5971 read_all_symtabs (filename);
5974 (struct symtab_and_line *) xmalloc (4 * sizeof (result.sals[0]));
5977 make_cleanup (free_current_contents, &result.sals);
5979 ALL_SYMTABS (objfile, s)
5981 int ind, target_line_num;
5985 if (strcmp (s->filename, filename) != 0)
5989 nearest_line_number_in_linetable (LINETABLE (s), line_num);
5990 if (target_line_num == -1)
5997 find_next_line_in_linetable (LINETABLE (s),
5998 target_line_num, line_num, ind);
6003 GROW_VECT (result.sals, len, result.nelts + 1);
6004 init_sal (&result.sals[result.nelts]);
6005 result.sals[result.nelts].line = line_num;
6006 result.sals[result.nelts].pc = LINETABLE (s)->item[ind].pc;
6007 result.sals[result.nelts].symtab = s;
6010 adjust_pc_past_prologue (&result.sals[result.nelts].pc);
6016 if (canonical != NULL || result.nelts > 1)
6019 char **func_names = (char **) alloca (result.nelts * sizeof (char *));
6020 int first_choice = (result.nelts > 1) ? 2 : 1;
6021 int *choices = (int *) alloca (result.nelts * sizeof (int));
6023 for (k = 0; k < result.nelts; k += 1)
6025 find_pc_partial_function (result.sals[k].pc, &func_names[k],
6026 (CORE_ADDR *) NULL, (CORE_ADDR *) NULL);
6027 if (func_names[k] == NULL)
6028 error ("Could not find function for one or more breakpoints.");
6031 /* Remove suppressed names, unless all are suppressed. */
6032 for (j = 0; j < result.nelts; j += 1)
6033 if (!is_suppressed_name (func_names[j]))
6035 /* At least one name is unsuppressed, so remove all
6036 suppressed names. */
6037 for (k = n = 0; k < result.nelts; k += 1)
6038 if (!is_suppressed_name (func_names[k]))
6040 func_names[n] = func_names[k];
6041 result.sals[n] = result.sals[k];
6048 if (result.nelts > 1)
6050 if (one_location_only)
6052 /* Automatically select the first of all possible choices. */
6058 printf_unfiltered ("[0] cancel\n");
6059 if (result.nelts > 1)
6060 printf_unfiltered ("[1] all\n");
6061 for (k = 0; k < result.nelts; k += 1)
6062 printf_unfiltered ("[%d] %s\n", k + first_choice,
6063 ada_decode (func_names[k]));
6065 n = get_selections (choices, result.nelts, result.nelts,
6066 result.nelts > 1, "instance-choice");
6069 for (k = 0; k < n; k += 1)
6071 result.sals[k] = result.sals[choices[k]];
6072 func_names[k] = func_names[choices[k]];
6077 if (canonical != NULL && result.nelts == 0)
6079 else if (canonical != NULL)
6081 *canonical = (char **) xmalloc (result.nelts * sizeof (char **));
6082 make_cleanup (xfree, *canonical);
6083 for (k = 0; k < result.nelts; k += 1)
6086 extended_canonical_line_spec (result.sals[k], func_names[k]);
6087 if ((*canonical)[k] == NULL)
6088 error ("Could not locate one or more breakpoints.");
6089 make_cleanup (xfree, (*canonical)[k]);
6094 if (result.nelts == 0)
6096 do_cleanups (old_chain);
6100 discard_cleanups (old_chain);
6105 /* A canonical line specification of the form FILE:NAME:LINENUM for
6106 symbol table and line data SAL. NULL if insufficient
6107 information. The caller is responsible for releasing any space
6111 extended_canonical_line_spec (struct symtab_and_line sal, const char *name)
6115 if (sal.symtab == NULL || sal.symtab->filename == NULL || sal.line <= 0)
6118 r = (char *) xmalloc (strlen (name) + strlen (sal.symtab->filename)
6119 + sizeof (sal.line) * 3 + 3);
6120 sprintf (r, "%s:'%s':%d", sal.symtab->filename, name, sal.line);
6124 /* Return type of Ada breakpoint associated with bp_stat:
6125 0 if not an Ada-specific breakpoint, 1 for break on specific exception,
6126 2 for break on unhandled exception, 3 for assert. */
6129 ada_exception_breakpoint_type (bpstat bs)
6131 return ((! bs || ! bs->breakpoint_at) ? 0
6132 : bs->breakpoint_at->break_on_exception);
6135 /* True iff FRAME is very likely to be that of a function that is
6136 part of the runtime system. This is all very heuristic, but is
6137 intended to be used as advice as to what frames are uninteresting
6141 is_known_support_routine (struct frame_info *frame)
6143 struct frame_info *next_frame = get_next_frame (frame);
6144 /* If frame is not innermost, that normally means that frame->pc
6145 points to *after* the call instruction, and we want to get the line
6146 containing the call, never the next line. But if the next frame is
6147 a signal_handler_caller or a dummy frame, then the next frame was
6148 not entered as the result of a call, and we want to get the line
6149 containing frame->pc. */
6150 const int pc_is_after_call =
6152 && get_frame_type (next_frame) != SIGTRAMP_FRAME
6153 && get_frame_type (next_frame) != DUMMY_FRAME;
6154 struct symtab_and_line sal
6155 = find_pc_line (get_frame_pc (frame), pc_is_after_call);
6161 1. The symtab is null (indicating no debugging symbols)
6162 2. The symtab's filename does not exist.
6163 3. The object file's name is one of the standard libraries.
6164 4. The symtab's file name has the form of an Ada library source file.
6165 5. The function at frame's PC has a GNAT-compiler-generated name. */
6167 if (sal.symtab == NULL)
6170 /* On some systems (e.g. VxWorks), the kernel contains debugging
6171 symbols; in this case, the filename referenced by these symbols
6174 if (stat (sal.symtab->filename, &st))
6177 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
6179 re_comp (known_runtime_file_name_patterns[i]);
6180 if (re_exec (sal.symtab->filename))
6183 if (sal.symtab->objfile != NULL)
6185 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
6187 re_comp (known_runtime_file_name_patterns[i]);
6188 if (re_exec (sal.symtab->objfile->name))
6193 /* If the frame PC points after the call instruction, then we need to
6194 decrement it in order to search for the function associated to this
6195 PC. Otherwise, if the associated call was the last instruction of
6196 the function, we might either find the wrong function or even fail
6197 during the function name lookup. */
6198 if (pc_is_after_call)
6199 func_name = function_name_from_pc (get_frame_pc (frame) - 1);
6201 func_name = function_name_from_pc (get_frame_pc (frame));
6203 if (func_name == NULL)
6206 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
6208 re_comp (known_auxiliary_function_name_patterns[i]);
6209 if (re_exec (func_name))
6216 /* Find the first frame that contains debugging information and that is not
6217 part of the Ada run-time, starting from FI and moving upward. */
6220 ada_find_printable_frame (struct frame_info *fi)
6222 for (; fi != NULL; fi = get_prev_frame (fi))
6224 if (!is_known_support_routine (fi))
6233 /* Name found for exception associated with last bpstat sent to
6234 ada_adjust_exception_stop. Set to the null string if that bpstat
6235 did not correspond to an Ada exception or no name could be found. */
6237 static char last_exception_name[256];
6239 /* If BS indicates a stop in an Ada exception, try to go up to a frame
6240 that will be meaningful to the user, and save the name of the last
6241 exception (truncated, if necessary) in last_exception_name. */
6244 ada_adjust_exception_stop (bpstat bs)
6247 struct frame_info *fi;
6249 char *selected_frame_func;
6252 last_exception_name[0] = '\0';
6253 fi = get_selected_frame ();
6254 selected_frame_func = function_name_from_pc (get_frame_pc (fi));
6256 switch (ada_exception_breakpoint_type (bs))
6263 /* Unhandled exceptions. Select the frame corresponding to
6264 ada.exceptions.process_raise_exception. This frame is at
6265 least 2 levels up, so we simply skip the first 2 frames
6266 without checking the name of their associated function. */
6267 for (frame_level = 0; frame_level < 2; frame_level += 1)
6269 fi = get_prev_frame (fi);
6272 const char *func_name = function_name_from_pc (get_frame_pc (fi));
6273 if (func_name != NULL
6274 && strcmp (func_name, process_raise_exception_name) == 0)
6275 break; /* We found the frame we were looking for... */
6276 fi = get_prev_frame (fi);
6284 addr = parse_and_eval_address ("e.full_name");
6287 read_memory (addr, last_exception_name,
6288 sizeof (last_exception_name) - 1);
6289 last_exception_name[sizeof (last_exception_name) - 1] = '\0';
6290 ada_find_printable_frame (get_selected_frame ());
6293 /* Output Ada exception name (if any) associated with last call to
6294 ada_adjust_exception_stop. */
6297 ada_print_exception_stop (bpstat bs)
6299 if (last_exception_name[0] != '\000')
6301 ui_out_text (uiout, last_exception_name);
6302 ui_out_text (uiout, " at ");
6306 /* Parses the CONDITION string associated with a breakpoint exception
6307 to get the name of the exception on which the breakpoint has been
6308 set. The returned string needs to be deallocated after use. */
6311 exception_name_from_cond (const char *condition)
6313 char *start, *end, *exception_name;
6314 int exception_name_len;
6316 start = strrchr (condition, '&') + 1;
6317 end = strchr (start, ')') - 1;
6318 exception_name_len = end - start + 1;
6321 (char *) xmalloc ((exception_name_len + 1) * sizeof (char));
6322 sprintf (exception_name, "%.*s", exception_name_len, start);
6324 return exception_name;
6327 /* Print Ada-specific exception information about B, other than task
6328 clause. Return non-zero iff B was an Ada exception breakpoint. */
6331 ada_print_exception_breakpoint_nontask (struct breakpoint *b)
6333 if (b->break_on_exception == 1)
6335 if (b->cond_string) /* the breakpoint is on a specific exception. */
6337 char *exception_name = exception_name_from_cond (b->cond_string);
6339 make_cleanup (xfree, exception_name);
6341 ui_out_text (uiout, "on ");
6342 if (ui_out_is_mi_like_p (uiout))
6343 ui_out_field_string (uiout, "exception", exception_name);
6346 ui_out_text (uiout, "exception ");
6347 ui_out_text (uiout, exception_name);
6348 ui_out_text (uiout, " ");
6352 ui_out_text (uiout, "on all exceptions");
6354 else if (b->break_on_exception == 2)
6355 ui_out_text (uiout, "on unhandled exception");
6356 else if (b->break_on_exception == 3)
6357 ui_out_text (uiout, "on assert failure");
6363 /* Print task identifier for breakpoint B, if it is an Ada-specific
6364 breakpoint with non-zero tasking information. */
6367 ada_print_exception_breakpoint_task (struct breakpoint *b)
6371 ui_out_text (uiout, " task ");
6372 ui_out_field_int (uiout, "task", b->task);
6377 ada_is_exception_sym (struct symbol *sym)
6379 char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
6381 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
6382 && SYMBOL_CLASS (sym) != LOC_BLOCK
6383 && SYMBOL_CLASS (sym) != LOC_CONST
6384 && type_name != NULL && strcmp (type_name, "exception") == 0);
6388 ada_maybe_exception_partial_symbol (struct partial_symbol *sym)
6390 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
6391 && SYMBOL_CLASS (sym) != LOC_BLOCK
6392 && SYMBOL_CLASS (sym) != LOC_CONST);
6395 /* Cause the appropriate error if no appropriate runtime symbol is
6396 found to set a breakpoint, using ERR_DESC to describe the
6400 error_breakpoint_runtime_sym_not_found (const char *err_desc)
6402 /* If we are not debugging an Ada program, we can not put exception
6405 if (ada_update_initial_language (language_unknown, NULL) != language_ada)
6406 error ("Unable to break on %s. Is this an Ada main program?", err_desc);
6408 /* If the symbol does not exist, then check that the program is
6409 already started, to make sure that shared libraries have been
6410 loaded. If it is not started, this may mean that the symbol is
6411 in a shared library. */
6413 if (ptid_get_pid (inferior_ptid) == 0)
6414 error ("Unable to break on %s. Try to start the program first.", err_desc);
6416 /* At this point, we know that we are debugging an Ada program and
6417 that the inferior has been started, but we still are not able to
6418 find the run-time symbols. That can mean that we are in
6419 configurable run time mode, or that a-except as been optimized
6420 out by the linker... In any case, at this point it is not worth
6421 supporting this feature. */
6423 error ("Cannot break on %s in this configuration.", err_desc);
6426 /* Test if NAME is currently defined, and that either ALLOW_TRAMP or
6427 the symbol is not a shared-library trampoline. Return the result of
6431 is_runtime_sym_defined (const char *name, int allow_tramp)
6433 struct minimal_symbol *msym;
6435 msym = lookup_minimal_symbol (name, NULL, NULL);
6436 return (msym != NULL && msym->type != mst_unknown
6437 && (allow_tramp || msym->type != mst_solib_trampoline));
6440 /* If ARG points to an Ada exception or assert breakpoint, rewrite
6441 into equivalent form. Return resulting argument string. Set
6442 *BREAK_ON_EXCEPTIONP to 1 for ordinary break on exception, 2 for
6443 break on unhandled, 3 for assert, 0 otherwise. */
6446 ada_breakpoint_rewrite (char *arg, int *break_on_exceptionp)
6450 *break_on_exceptionp = 0;
6451 if (current_language->la_language == language_ada
6452 && strncmp (arg, "exception", 9) == 0
6453 && (arg[9] == ' ' || arg[9] == '\t' || arg[9] == '\0'))
6455 char *tok, *end_tok;
6457 int has_exception_propagation =
6458 is_runtime_sym_defined (raise_sym_name, 1);
6460 *break_on_exceptionp = 1;
6463 while (*tok == ' ' || *tok == '\t')
6468 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
6471 toklen = end_tok - tok;
6473 arg = (char *) xmalloc (sizeof (longest_exception_template) + toklen);
6474 make_cleanup (xfree, arg);
6477 if (has_exception_propagation)
6478 sprintf (arg, "'%s'", raise_sym_name);
6480 error_breakpoint_runtime_sym_not_found ("exception");
6482 else if (strncmp (tok, "unhandled", toklen) == 0)
6484 if (is_runtime_sym_defined (raise_unhandled_sym_name, 1))
6485 sprintf (arg, "'%s'", raise_unhandled_sym_name);
6487 error_breakpoint_runtime_sym_not_found ("exception");
6489 *break_on_exceptionp = 2;
6493 if (is_runtime_sym_defined (raise_sym_name, 0))
6494 sprintf (arg, "'%s' if long_integer(e) = long_integer(&%.*s)",
6495 raise_sym_name, toklen, tok);
6497 error_breakpoint_runtime_sym_not_found ("specific exception");
6500 else if (current_language->la_language == language_ada
6501 && strncmp (arg, "assert", 6) == 0
6502 && (arg[6] == ' ' || arg[6] == '\t' || arg[6] == '\0'))
6504 char *tok = arg + 6;
6506 if (!is_runtime_sym_defined (raise_assert_sym_name, 1))
6507 error_breakpoint_runtime_sym_not_found ("failed assertion");
6509 *break_on_exceptionp = 3;
6512 (char *) xmalloc (sizeof (raise_assert_sym_name) + strlen (tok) + 2);
6513 make_cleanup (xfree, arg);
6514 sprintf (arg, "'%s'%s", raise_assert_sym_name, tok);
6522 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6523 to be invisible to users. */
6526 ada_is_ignored_field (struct type *type, int field_num)
6528 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6532 const char *name = TYPE_FIELD_NAME (type, field_num);
6533 return (name == NULL
6534 || (name[0] == '_' && strncmp (name, "_parent", 7) != 0));
6538 /* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
6539 pointer or reference type whose ultimate target has a tag field. */
6542 ada_is_tagged_type (struct type *type, int refok)
6544 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6547 /* True iff TYPE represents the type of X'Tag */
6550 ada_is_tag_type (struct type *type)
6552 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6555 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6556 return (name != NULL
6557 && strcmp (name, "ada__tags__dispatch_table") == 0);
6561 /* The type of the tag on VAL. */
6564 ada_tag_type (struct value *val)
6566 return ada_lookup_struct_elt_type (VALUE_TYPE (val), "_tag", 1, 0, NULL);
6569 /* The value of the tag on VAL. */
6572 ada_value_tag (struct value *val)
6574 return ada_value_struct_elt (val, "_tag", "record");
6577 /* The value of the tag on the object of type TYPE whose contents are
6578 saved at VALADDR, if it is non-null, or is at memory address
6581 static struct value *
6582 value_tag_from_contents_and_address (struct type *type, char *valaddr,
6585 int tag_byte_offset, dummy1, dummy2;
6586 struct type *tag_type;
6587 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6590 char *valaddr1 = (valaddr == NULL) ? NULL : valaddr + tag_byte_offset;
6591 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6593 return value_from_contents_and_address (tag_type, valaddr1, address1);
6598 static struct type *
6599 type_from_tag (struct value *tag)
6601 const char *type_name = ada_tag_name (tag);
6602 if (type_name != NULL)
6603 return ada_find_any_type (ada_encode (type_name));
6612 /* Wrapper function used by ada_tag_name. Given a struct tag_args*
6613 value ARGS, sets ARGS->name to the tag name of ARGS->tag.
6614 The value stored in ARGS->name is valid until the next call to
6618 ada_tag_name_1 (void *args0)
6620 struct tag_args *args = (struct tag_args *) args0;
6621 static char name[1024];
6625 val = ada_value_struct_elt (args->tag, "tsd", NULL);
6628 val = ada_value_struct_elt (val, "expanded_name", NULL);
6631 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6632 for (p = name; *p != '\0'; p += 1)
6639 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6643 ada_tag_name (struct value *tag)
6645 struct tag_args args;
6646 if (! ada_is_tag_type (VALUE_TYPE (tag)))
6650 catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
6654 /* The parent type of TYPE, or NULL if none. */
6657 ada_parent_type (struct type *type)
6661 CHECK_TYPEDEF (type);
6663 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6666 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6667 if (ada_is_parent_field (type, i))
6668 return check_typedef (TYPE_FIELD_TYPE (type, i));
6673 /* True iff field number FIELD_NUM of structure type TYPE contains the
6674 parent-type (inherited) fields of a derived type. Assumes TYPE is
6675 a structure type with at least FIELD_NUM+1 fields. */
6678 ada_is_parent_field (struct type *type, int field_num)
6680 const char *name = TYPE_FIELD_NAME (check_typedef (type), field_num);
6681 return (name != NULL
6682 && (strncmp (name, "PARENT", 6) == 0
6683 || strncmp (name, "_parent", 7) == 0));
6686 /* True iff field number FIELD_NUM of structure type TYPE is a
6687 transparent wrapper field (which should be silently traversed when doing
6688 field selection and flattened when printing). Assumes TYPE is a
6689 structure type with at least FIELD_NUM+1 fields. Such fields are always
6693 ada_is_wrapper_field (struct type *type, int field_num)
6695 const char *name = TYPE_FIELD_NAME (type, field_num);
6696 return (name != NULL
6697 && (strncmp (name, "PARENT", 6) == 0
6698 || strcmp (name, "REP") == 0
6699 || strncmp (name, "_parent", 7) == 0
6700 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6703 /* True iff field number FIELD_NUM of structure or union type TYPE
6704 is a variant wrapper. Assumes TYPE is a structure type with at least
6705 FIELD_NUM+1 fields. */
6708 ada_is_variant_part (struct type *type, int field_num)
6710 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6711 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6712 || (is_dynamic_field (type, field_num)
6713 && TYPE_CODE (TYPE_TARGET_TYPE (field_type)) ==
6717 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6718 whose discriminants are contained in the record type OUTER_TYPE,
6719 returns the type of the controlling discriminant for the variant. */
6722 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6724 char *name = ada_variant_discrim_name (var_type);
6726 ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6728 return builtin_type_int;
6733 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6734 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6735 represents a 'when others' clause; otherwise 0. */
6738 ada_is_others_clause (struct type *type, int field_num)
6740 const char *name = TYPE_FIELD_NAME (type, field_num);
6741 return (name != NULL && name[0] == 'O');
6744 /* Assuming that TYPE0 is the type of the variant part of a record,
6745 returns the name of the discriminant controlling the variant.
6746 The value is valid until the next call to ada_variant_discrim_name. */
6749 ada_variant_discrim_name (struct type *type0)
6751 static char *result = NULL;
6752 static size_t result_len = 0;
6755 const char *discrim_end;
6756 const char *discrim_start;
6758 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6759 type = TYPE_TARGET_TYPE (type0);
6763 name = ada_type_name (type);
6765 if (name == NULL || name[0] == '\000')
6768 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6771 if (strncmp (discrim_end, "___XVN", 6) == 0)
6774 if (discrim_end == name)
6777 for (discrim_start = discrim_end; discrim_start != name + 3;
6780 if (discrim_start == name + 1)
6782 if ((discrim_start > name + 3
6783 && strncmp (discrim_start - 3, "___", 3) == 0)
6784 || discrim_start[-1] == '.')
6788 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6789 strncpy (result, discrim_start, discrim_end - discrim_start);
6790 result[discrim_end - discrim_start] = '\0';
6794 /* Scan STR for a subtype-encoded number, beginning at position K.
6795 Put the position of the character just past the number scanned in
6796 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6797 Return 1 if there was a valid number at the given position, and 0
6798 otherwise. A "subtype-encoded" number consists of the absolute value
6799 in decimal, followed by the letter 'm' to indicate a negative number.
6800 Assumes 0m does not occur. */
6803 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6807 if (!isdigit (str[k]))
6810 /* Do it the hard way so as not to make any assumption about
6811 the relationship of unsigned long (%lu scan format code) and
6814 while (isdigit (str[k]))
6816 RU = RU * 10 + (str[k] - '0');
6823 *R = (-(LONGEST) (RU - 1)) - 1;
6829 /* NOTE on the above: Technically, C does not say what the results of
6830 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6831 number representable as a LONGEST (although either would probably work
6832 in most implementations). When RU>0, the locution in the then branch
6833 above is always equivalent to the negative of RU. */
6840 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6841 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6842 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
6845 ada_in_variant (LONGEST val, struct type *type, int field_num)
6847 const char *name = TYPE_FIELD_NAME (type, field_num);
6860 if (!ada_scan_number (name, p + 1, &W, &p))
6869 if (!ada_scan_number (name, p + 1, &L, &p)
6870 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6872 if (val >= L && val <= U)
6884 /* FIXME: Lots of redundancy below. Try to consolidate. */
6886 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6887 ARG_TYPE, extract and return the value of one of its (non-static)
6888 fields. FIELDNO says which field. Differs from value_primitive_field
6889 only in that it can handle packed values of arbitrary type. */
6891 static struct value *
6892 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6893 struct type *arg_type)
6897 CHECK_TYPEDEF (arg_type);
6898 type = TYPE_FIELD_TYPE (arg_type, fieldno);
6900 /* Handle packed fields. */
6902 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6904 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6905 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6907 return ada_value_primitive_packed_val (arg1, VALUE_CONTENTS (arg1),
6908 offset + bit_pos / 8,
6909 bit_pos % 8, bit_size, type);
6912 return value_primitive_field (arg1, offset, fieldno, arg_type);
6915 /* Find field with name NAME in object of type TYPE. If found, return 1
6916 after setting *FIELD_TYPE_P to the field's type, *BYTE_OFFSET_P to
6917 OFFSET + the byte offset of the field within an object of that type,
6918 *BIT_OFFSET_P to the bit offset modulo byte size of the field, and
6919 *BIT_SIZE_P to its size in bits if the field is packed, and 0 otherwise.
6920 Looks inside wrappers for the field. Returns 0 if field not
6923 find_struct_field (char *name, struct type *type, int offset,
6924 struct type **field_type_p,
6925 int *byte_offset_p, int *bit_offset_p, int *bit_size_p)
6929 CHECK_TYPEDEF (type);
6930 *field_type_p = NULL;
6931 *byte_offset_p = *bit_offset_p = *bit_size_p = 0;
6933 for (i = TYPE_NFIELDS (type) - 1; i >= 0; i -= 1)
6935 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6936 int fld_offset = offset + bit_pos / 8;
6937 char *t_field_name = TYPE_FIELD_NAME (type, i);
6939 if (t_field_name == NULL)
6942 else if (field_name_match (t_field_name, name))
6944 int bit_size = TYPE_FIELD_BITSIZE (type, i);
6945 *field_type_p = TYPE_FIELD_TYPE (type, i);
6946 *byte_offset_p = fld_offset;
6947 *bit_offset_p = bit_pos % 8;
6948 *bit_size_p = bit_size;
6951 else if (ada_is_wrapper_field (type, i))
6953 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6954 field_type_p, byte_offset_p, bit_offset_p,
6958 else if (ada_is_variant_part (type, i))
6961 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
6963 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6965 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6967 + TYPE_FIELD_BITPOS (field_type, j)/8,
6968 field_type_p, byte_offset_p, bit_offset_p,
6979 /* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
6980 and search in it assuming it has (class) type TYPE.
6981 If found, return value, else return NULL.
6983 Searches recursively through wrapper fields (e.g., '_parent'). */
6985 static struct value *
6986 ada_search_struct_field (char *name, struct value *arg, int offset,
6990 CHECK_TYPEDEF (type);
6992 for (i = TYPE_NFIELDS (type) - 1; i >= 0; i -= 1)
6994 char *t_field_name = TYPE_FIELD_NAME (type, i);
6996 if (t_field_name == NULL)
6999 else if (field_name_match (t_field_name, name))
7000 return ada_value_primitive_field (arg, offset, i, type);
7002 else if (ada_is_wrapper_field (type, i))
7005 ada_search_struct_field (name, arg,
7006 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7007 TYPE_FIELD_TYPE (type, i));
7012 else if (ada_is_variant_part (type, i))
7015 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
7016 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7018 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7021 ada_search_struct_field (name, arg,
7023 + TYPE_FIELD_BITPOS (field_type, j)/8,
7024 TYPE_FIELD_TYPE (field_type, j));
7033 /* Given ARG, a value of type (pointer or reference to a)*
7034 structure/union, extract the component named NAME from the ultimate
7035 target structure/union and return it as a value with its
7036 appropriate type. If ARG is a pointer or reference and the field
7037 is not packed, returns a reference to the field, otherwise the
7038 value of the field (an lvalue if ARG is an lvalue).
7040 The routine searches for NAME among all members of the structure itself
7041 and (recursively) among all members of any wrapper members
7044 ERR is a name (for use in error messages) that identifies the class
7045 of entity that ARG is supposed to be. ERR may be null, indicating
7046 that on error, the function simply returns NULL, and does not
7047 throw an error. (FIXME: True only if ARG is a pointer or reference
7051 ada_value_struct_elt (struct value *arg, char *name, char *err)
7053 struct type *t, *t1;
7057 t1 = t = check_typedef (VALUE_TYPE (arg));
7058 if (TYPE_CODE (t) == TYPE_CODE_REF)
7060 t1 = TYPE_TARGET_TYPE (t);
7066 error ("Bad value type in a %s.", err);
7069 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7076 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7078 t1 = TYPE_TARGET_TYPE (t);
7084 error ("Bad value type in a %s.", err);
7087 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7089 arg = value_ind (arg);
7096 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7101 error ("Attempt to extract a component of a value that is not a %s.",
7106 v = ada_search_struct_field (name, arg, 0, t);
7109 int bit_offset, bit_size, byte_offset;
7110 struct type *field_type;
7113 if (TYPE_CODE (t) == TYPE_CODE_PTR)
7114 address = value_as_address (arg);
7116 address = unpack_pointer (t, VALUE_CONTENTS (arg));
7118 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL);
7119 if (find_struct_field (name, t1, 0,
7120 &field_type, &byte_offset, &bit_offset, &bit_size))
7124 arg = ada_value_ind (arg);
7125 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7126 bit_offset, bit_size,
7130 v = value_from_pointer (lookup_reference_type (field_type),
7131 address + byte_offset);
7135 if (v == NULL && err != NULL)
7136 error ("There is no member named %s.", name);
7141 /* Given a type TYPE, look up the type of the component of type named NAME.
7142 If DISPP is non-null, add its byte displacement from the beginning of a
7143 structure (pointed to by a value) of type TYPE to *DISPP (does not
7144 work for packed fields).
7146 Matches any field whose name has NAME as a prefix, possibly
7149 TYPE can be either a struct or union. If REFOK, TYPE may also
7150 be a (pointer or reference)+ to a struct or union, and the
7151 ultimate target type will be searched.
7153 Looks recursively into variant clauses and parent types.
7155 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7156 TYPE is not a type of the right kind. */
7158 static struct type *
7159 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7160 int noerr, int *dispp)
7167 if (refok && type != NULL)
7170 CHECK_TYPEDEF (type);
7171 if (TYPE_CODE (type) != TYPE_CODE_PTR
7172 && TYPE_CODE (type) != TYPE_CODE_REF)
7174 type = TYPE_TARGET_TYPE (type);
7178 || (TYPE_CODE (type) != TYPE_CODE_STRUCT &&
7179 TYPE_CODE (type) != TYPE_CODE_UNION))
7185 target_terminal_ours ();
7186 gdb_flush (gdb_stdout);
7187 fprintf_unfiltered (gdb_stderr, "Type ");
7189 fprintf_unfiltered (gdb_stderr, "(null)");
7191 type_print (type, "", gdb_stderr, -1);
7192 error (" is not a structure or union type");
7196 type = to_static_fixed_type (type);
7198 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7200 char *t_field_name = TYPE_FIELD_NAME (type, i);
7204 if (t_field_name == NULL)
7207 else if (field_name_match (t_field_name, name))
7210 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7211 return check_typedef (TYPE_FIELD_TYPE (type, i));
7214 else if (ada_is_wrapper_field (type, i))
7217 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7222 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7227 else if (ada_is_variant_part (type, i))
7230 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
7232 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7235 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
7240 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7251 target_terminal_ours ();
7252 gdb_flush (gdb_stdout);
7253 fprintf_unfiltered (gdb_stderr, "Type ");
7254 type_print (type, "", gdb_stderr, -1);
7255 fprintf_unfiltered (gdb_stderr, " has no component named ");
7256 error ("%s", name == NULL ? "<null>" : name);
7262 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7263 within a value of type OUTER_TYPE that is stored in GDB at
7264 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7265 numbering from 0) is applicable. Returns -1 if none are. */
7268 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7269 char *outer_valaddr)
7274 struct type *discrim_type;
7275 char *discrim_name = ada_variant_discrim_name (var_type);
7276 LONGEST discrim_val;
7280 ada_lookup_struct_elt_type (outer_type, discrim_name, 1, 1, &disp);
7281 if (discrim_type == NULL)
7283 discrim_val = unpack_long (discrim_type, outer_valaddr + disp);
7286 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7288 if (ada_is_others_clause (var_type, i))
7290 else if (ada_in_variant (discrim_val, var_type, i))
7294 return others_clause;
7299 /* Dynamic-Sized Records */
7301 /* Strategy: The type ostensibly attached to a value with dynamic size
7302 (i.e., a size that is not statically recorded in the debugging
7303 data) does not accurately reflect the size or layout of the value.
7304 Our strategy is to convert these values to values with accurate,
7305 conventional types that are constructed on the fly. */
7307 /* There is a subtle and tricky problem here. In general, we cannot
7308 determine the size of dynamic records without its data. However,
7309 the 'struct value' data structure, which GDB uses to represent
7310 quantities in the inferior process (the target), requires the size
7311 of the type at the time of its allocation in order to reserve space
7312 for GDB's internal copy of the data. That's why the
7313 'to_fixed_xxx_type' routines take (target) addresses as parameters,
7314 rather than struct value*s.
7316 However, GDB's internal history variables ($1, $2, etc.) are
7317 struct value*s containing internal copies of the data that are not, in
7318 general, the same as the data at their corresponding addresses in
7319 the target. Fortunately, the types we give to these values are all
7320 conventional, fixed-size types (as per the strategy described
7321 above), so that we don't usually have to perform the
7322 'to_fixed_xxx_type' conversions to look at their values.
7323 Unfortunately, there is one exception: if one of the internal
7324 history variables is an array whose elements are unconstrained
7325 records, then we will need to create distinct fixed types for each
7326 element selected. */
7328 /* The upshot of all of this is that many routines take a (type, host
7329 address, target address) triple as arguments to represent a value.
7330 The host address, if non-null, is supposed to contain an internal
7331 copy of the relevant data; otherwise, the program is to consult the
7332 target at the target address. */
7334 /* Assuming that VAL0 represents a pointer value, the result of
7335 dereferencing it. Differs from value_ind in its treatment of
7336 dynamic-sized types. */
7339 ada_value_ind (struct value *val0)
7341 struct value *val = unwrap_value (value_ind (val0));
7342 return ada_to_fixed_value (val);
7345 /* The value resulting from dereferencing any "reference to"
7346 qualifiers on VAL0. */
7348 static struct value *
7349 ada_coerce_ref (struct value *val0)
7351 if (TYPE_CODE (VALUE_TYPE (val0)) == TYPE_CODE_REF)
7353 struct value *val = val0;
7355 val = unwrap_value (val);
7356 return ada_to_fixed_value (val);
7362 /* Return OFF rounded upward if necessary to a multiple of
7363 ALIGNMENT (a power of 2). */
7366 align_value (unsigned int off, unsigned int alignment)
7368 return (off + alignment - 1) & ~(alignment - 1);
7371 /* Return the bit alignment required for field #F of template type TYPE. */
7374 field_alignment (struct type *type, int f)
7376 const char *name = TYPE_FIELD_NAME (type, f);
7377 int len = (name == NULL) ? 0 : strlen (name);
7380 if (!isdigit (name[len - 1]))
7383 if (isdigit (name[len - 2]))
7384 align_offset = len - 2;
7386 align_offset = len - 1;
7388 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7389 return TARGET_CHAR_BIT;
7391 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7394 /* Find a symbol named NAME. Ignores ambiguity. */
7397 ada_find_any_symbol (const char *name)
7401 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7402 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7405 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7409 /* Find a type named NAME. Ignores ambiguity. */
7412 ada_find_any_type (const char *name)
7414 struct symbol *sym = ada_find_any_symbol (name);
7417 return SYMBOL_TYPE (sym);
7422 /* Given a symbol NAME and its associated BLOCK, search all symbols
7423 for its ___XR counterpart, which is the ``renaming'' symbol
7424 associated to NAME. Return this symbol if found, return
7428 ada_find_renaming_symbol (const char *name, struct block *block)
7430 const struct symbol *function_sym = block_function (block);
7433 if (function_sym != NULL)
7435 /* If the symbol is defined inside a function, NAME is not fully
7436 qualified. This means we need to prepend the function name
7437 as well as adding the ``___XR'' suffix to build the name of
7438 the associated renaming symbol. */
7439 char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7440 const int function_name_len = strlen (function_name);
7441 const int rename_len = function_name_len
7444 + 6 /* "___XR\0" */;
7446 /* Library-level functions are a special case, as GNAT adds
7447 a ``_ada_'' prefix to the function name to avoid namespace
7448 pollution. However, the renaming symbol themselves do not
7449 have this prefix, so we need to skip this prefix if present. */
7450 if (function_name_len > 5 /* "_ada_" */
7451 && strstr (function_name, "_ada_") == function_name)
7452 function_name = function_name + 5;
7454 rename = (char *) alloca (rename_len * sizeof (char));
7455 sprintf (rename, "%s__%s___XR", function_name, name);
7459 const int rename_len = strlen (name) + 6;
7460 rename = (char *) alloca (rename_len * sizeof (char));
7461 sprintf (rename, "%s___XR", name);
7464 return ada_find_any_symbol (rename);
7467 /* Because of GNAT encoding conventions, several GDB symbols may match a
7468 given type name. If the type denoted by TYPE0 is to be preferred to
7469 that of TYPE1 for purposes of type printing, return non-zero;
7470 otherwise return 0. */
7473 ada_prefer_type (struct type *type0, struct type *type1)
7477 else if (type0 == NULL)
7479 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7481 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7483 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7485 else if (ada_is_packed_array_type (type0))
7487 else if (ada_is_array_descriptor_type (type0)
7488 && !ada_is_array_descriptor_type (type1))
7490 else if (ada_renaming_type (type0) != NULL
7491 && ada_renaming_type (type1) == NULL)
7496 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7497 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7500 ada_type_name (struct type *type)
7504 else if (TYPE_NAME (type) != NULL)
7505 return TYPE_NAME (type);
7507 return TYPE_TAG_NAME (type);
7510 /* Find a parallel type to TYPE whose name is formed by appending
7511 SUFFIX to the name of TYPE. */
7514 ada_find_parallel_type (struct type *type, const char *suffix)
7517 static size_t name_len = 0;
7519 char *typename = ada_type_name (type);
7521 if (typename == NULL)
7524 len = strlen (typename);
7526 GROW_VECT (name, name_len, len + strlen (suffix) + 1);
7528 strcpy (name, typename);
7529 strcpy (name + len, suffix);
7531 return ada_find_any_type (name);
7535 /* If TYPE is a variable-size record type, return the corresponding template
7536 type describing its fields. Otherwise, return NULL. */
7538 static struct type *
7539 dynamic_template_type (struct type *type)
7541 CHECK_TYPEDEF (type);
7543 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7544 || ada_type_name (type) == NULL)
7548 int len = strlen (ada_type_name (type));
7549 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7552 return ada_find_parallel_type (type, "___XVE");
7556 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7557 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
7560 is_dynamic_field (struct type *templ_type, int field_num)
7562 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7564 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7565 && strstr (name, "___XVL") != NULL;
7568 /* The index of the variant field of TYPE, or -1 if TYPE does not
7569 represent a variant record type. */
7572 variant_field_index (struct type *type)
7576 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7579 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7581 if (ada_is_variant_part (type, f))
7587 /* A record type with no fields. */
7589 static struct type *
7590 empty_record (struct objfile *objfile)
7592 struct type *type = alloc_type (objfile);
7593 TYPE_CODE (type) = TYPE_CODE_STRUCT;
7594 TYPE_NFIELDS (type) = 0;
7595 TYPE_FIELDS (type) = NULL;
7596 TYPE_NAME (type) = "<empty>";
7597 TYPE_TAG_NAME (type) = NULL;
7598 TYPE_FLAGS (type) = 0;
7599 TYPE_LENGTH (type) = 0;
7603 /* An ordinary record type (with fixed-length fields) that describes
7604 the value of type TYPE at VALADDR or ADDRESS (see comments at
7605 the beginning of this section) VAL according to GNAT conventions.
7606 DVAL0 should describe the (portion of a) record that contains any
7607 necessary discriminants. It should be NULL if VALUE_TYPE (VAL) is
7608 an outer-level type (i.e., as opposed to a branch of a variant.) A
7609 variant field (unless unchecked) is replaced by a particular branch
7612 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7613 length are not statically known are discarded. As a consequence,
7614 VALADDR, ADDRESS and DVAL0 are ignored.
7616 NOTE: Limitations: For now, we assume that dynamic fields and
7617 variants occupy whole numbers of bytes. However, they need not be
7621 ada_template_to_fixed_record_type_1 (struct type *type, char *valaddr,
7622 CORE_ADDR address, struct value *dval0,
7623 int keep_dynamic_fields)
7625 struct value *mark = value_mark ();
7628 int nfields, bit_len;
7631 int fld_bit_len, bit_incr;
7634 /* Compute the number of fields in this record type that are going
7635 to be processed: unless keep_dynamic_fields, this includes only
7636 fields whose position and length are static will be processed. */
7637 if (keep_dynamic_fields)
7638 nfields = TYPE_NFIELDS (type);
7642 while (nfields < TYPE_NFIELDS (type)
7643 && !ada_is_variant_part (type, nfields)
7644 && !is_dynamic_field (type, nfields))
7648 rtype = alloc_type (TYPE_OBJFILE (type));
7649 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7650 INIT_CPLUS_SPECIFIC (rtype);
7651 TYPE_NFIELDS (rtype) = nfields;
7652 TYPE_FIELDS (rtype) = (struct field *)
7653 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7654 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7655 TYPE_NAME (rtype) = ada_type_name (type);
7656 TYPE_TAG_NAME (rtype) = NULL;
7657 TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
7663 for (f = 0; f < nfields; f += 1)
7667 field_alignment (type, f)) + TYPE_FIELD_BITPOS (type, f);
7668 TYPE_FIELD_BITPOS (rtype, f) = off;
7669 TYPE_FIELD_BITSIZE (rtype, f) = 0;
7671 if (ada_is_variant_part (type, f))
7674 fld_bit_len = bit_incr = 0;
7676 else if (is_dynamic_field (type, f))
7679 dval = value_from_contents_and_address (rtype, valaddr, address);
7683 TYPE_FIELD_TYPE (rtype, f) =
7686 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
7687 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7688 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7689 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7690 bit_incr = fld_bit_len =
7691 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7695 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
7696 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7697 if (TYPE_FIELD_BITSIZE (type, f) > 0)
7698 bit_incr = fld_bit_len =
7699 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7701 bit_incr = fld_bit_len =
7702 TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
7704 if (off + fld_bit_len > bit_len)
7705 bit_len = off + fld_bit_len;
7707 TYPE_LENGTH (rtype) =
7708 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7711 /* We handle the variant part, if any, at the end because of certain
7712 odd cases in which it is re-ordered so as NOT the last field of
7713 the record. This can happen in the presence of representation
7715 if (variant_field >= 0)
7717 struct type *branch_type;
7719 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7722 dval = value_from_contents_and_address (rtype, valaddr, address);
7727 to_fixed_variant_branch_type
7728 (TYPE_FIELD_TYPE (type, variant_field),
7729 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7730 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7731 if (branch_type == NULL)
7733 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
7734 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7735 TYPE_NFIELDS (rtype) -= 1;
7739 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7740 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7742 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
7744 if (off + fld_bit_len > bit_len)
7745 bit_len = off + fld_bit_len;
7746 TYPE_LENGTH (rtype) =
7747 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7751 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype), TYPE_LENGTH (type));
7753 value_free_to_mark (mark);
7754 if (TYPE_LENGTH (rtype) > varsize_limit)
7755 error ("record type with dynamic size is larger than varsize-limit");
7759 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7762 static struct type *
7763 template_to_fixed_record_type (struct type *type, char *valaddr,
7764 CORE_ADDR address, struct value *dval0)
7766 return ada_template_to_fixed_record_type_1 (type, valaddr,
7770 /* An ordinary record type in which ___XVL-convention fields and
7771 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7772 static approximations, containing all possible fields. Uses
7773 no runtime values. Useless for use in values, but that's OK,
7774 since the results are used only for type determinations. Works on both
7775 structs and unions. Representation note: to save space, we memorize
7776 the result of this function in the TYPE_TARGET_TYPE of the
7779 static struct type *
7780 template_to_static_fixed_type (struct type *type0)
7786 if (TYPE_TARGET_TYPE (type0) != NULL)
7787 return TYPE_TARGET_TYPE (type0);
7789 nfields = TYPE_NFIELDS (type0);
7792 for (f = 0; f < nfields; f += 1)
7794 struct type *field_type = CHECK_TYPEDEF (TYPE_FIELD_TYPE (type0, f));
7795 struct type *new_type;
7797 if (is_dynamic_field (type0, f))
7798 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
7800 new_type = to_static_fixed_type (field_type);
7801 if (type == type0 && new_type != field_type)
7803 TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
7804 TYPE_CODE (type) = TYPE_CODE (type0);
7805 INIT_CPLUS_SPECIFIC (type);
7806 TYPE_NFIELDS (type) = nfields;
7807 TYPE_FIELDS (type) = (struct field *)
7808 TYPE_ALLOC (type, nfields * sizeof (struct field));
7809 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7810 sizeof (struct field) * nfields);
7811 TYPE_NAME (type) = ada_type_name (type0);
7812 TYPE_TAG_NAME (type) = NULL;
7813 TYPE_FLAGS (type) |= TYPE_FLAG_FIXED_INSTANCE;
7814 TYPE_LENGTH (type) = 0;
7816 TYPE_FIELD_TYPE (type, f) = new_type;
7817 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
7822 /* Given an object of type TYPE whose contents are at VALADDR and
7823 whose address in memory is ADDRESS, returns a revision of TYPE --
7824 a non-dynamic-sized record with a variant part -- in which
7825 the variant part is replaced with the appropriate branch. Looks
7826 for discriminant values in DVAL0, which can be NULL if the record
7827 contains the necessary discriminant values. */
7829 static struct type *
7830 to_record_with_fixed_variant_part (struct type *type, char *valaddr,
7831 CORE_ADDR address, struct value *dval0)
7833 struct value *mark = value_mark ();
7836 struct type *branch_type;
7837 int nfields = TYPE_NFIELDS (type);
7838 int variant_field = variant_field_index (type);
7840 if (variant_field == -1)
7844 dval = value_from_contents_and_address (type, valaddr, address);
7848 rtype = alloc_type (TYPE_OBJFILE (type));
7849 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7850 INIT_CPLUS_SPECIFIC (rtype);
7851 TYPE_NFIELDS (rtype) = nfields;
7852 TYPE_FIELDS (rtype) =
7853 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7854 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
7855 sizeof (struct field) * nfields);
7856 TYPE_NAME (rtype) = ada_type_name (type);
7857 TYPE_TAG_NAME (rtype) = NULL;
7858 TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
7859 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7861 branch_type = to_fixed_variant_branch_type
7862 (TYPE_FIELD_TYPE (type, variant_field),
7863 cond_offset_host (valaddr,
7864 TYPE_FIELD_BITPOS (type, variant_field)
7866 cond_offset_target (address,
7867 TYPE_FIELD_BITPOS (type, variant_field)
7868 / TARGET_CHAR_BIT), dval);
7869 if (branch_type == NULL)
7872 for (f = variant_field + 1; f < nfields; f += 1)
7873 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7874 TYPE_NFIELDS (rtype) -= 1;
7878 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7879 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7880 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
7881 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
7883 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7885 value_free_to_mark (mark);
7889 /* An ordinary record type (with fixed-length fields) that describes
7890 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7891 beginning of this section]. Any necessary discriminants' values
7892 should be in DVAL, a record value; it may be NULL if the object
7893 at ADDR itself contains any necessary discriminant values.
7894 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7895 values from the record are needed. Except in the case that DVAL,
7896 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7897 unchecked) is replaced by a particular branch of the variant.
7899 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7900 is questionable and may be removed. It can arise during the
7901 processing of an unconstrained-array-of-record type where all the
7902 variant branches have exactly the same size. This is because in
7903 such cases, the compiler does not bother to use the XVS convention
7904 when encoding the record. I am currently dubious of this
7905 shortcut and suspect the compiler should be altered. FIXME. */
7907 static struct type *
7908 to_fixed_record_type (struct type *type0, char *valaddr,
7909 CORE_ADDR address, struct value *dval)
7911 struct type *templ_type;
7913 if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
7916 templ_type = dynamic_template_type (type0);
7918 if (templ_type != NULL)
7919 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
7920 else if (variant_field_index (type0) >= 0)
7922 if (dval == NULL && valaddr == NULL && address == 0)
7924 return to_record_with_fixed_variant_part (type0, valaddr, address,
7929 TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE;
7935 /* An ordinary record type (with fixed-length fields) that describes
7936 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7937 union type. Any necessary discriminants' values should be in DVAL,
7938 a record value. That is, this routine selects the appropriate
7939 branch of the union at ADDR according to the discriminant value
7940 indicated in the union's type name. */
7942 static struct type *
7943 to_fixed_variant_branch_type (struct type *var_type0, char *valaddr,
7944 CORE_ADDR address, struct value *dval)
7947 struct type *templ_type;
7948 struct type *var_type;
7950 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7951 var_type = TYPE_TARGET_TYPE (var_type0);
7953 var_type = var_type0;
7955 templ_type = ada_find_parallel_type (var_type, "___XVU");
7957 if (templ_type != NULL)
7958 var_type = templ_type;
7961 ada_which_variant_applies (var_type,
7962 VALUE_TYPE (dval), VALUE_CONTENTS (dval));
7965 return empty_record (TYPE_OBJFILE (var_type));
7966 else if (is_dynamic_field (var_type, which))
7967 return to_fixed_record_type
7968 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7969 valaddr, address, dval);
7970 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
7972 to_fixed_record_type
7973 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
7975 return TYPE_FIELD_TYPE (var_type, which);
7978 /* Assuming that TYPE0 is an array type describing the type of a value
7979 at ADDR, and that DVAL describes a record containing any
7980 discriminants used in TYPE0, returns a type for the value that
7981 contains no dynamic components (that is, no components whose sizes
7982 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
7983 true, gives an error message if the resulting type's size is over
7986 static struct type *
7987 to_fixed_array_type (struct type *type0, struct value *dval,
7990 struct type *index_type_desc;
7991 struct type *result;
7993 if (ada_is_packed_array_type (type0) /* revisit? */
7994 || (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
7997 index_type_desc = ada_find_parallel_type (type0, "___XA");
7998 if (index_type_desc == NULL)
8000 struct type *elt_type0 = check_typedef (TYPE_TARGET_TYPE (type0));
8001 /* NOTE: elt_type---the fixed version of elt_type0---should never
8002 depend on the contents of the array in properly constructed
8004 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval);
8006 if (elt_type0 == elt_type)
8009 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
8010 elt_type, TYPE_INDEX_TYPE (type0));
8015 struct type *elt_type0;
8018 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8019 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8021 /* NOTE: result---the fixed version of elt_type0---should never
8022 depend on the contents of the array in properly constructed
8024 result = ada_to_fixed_type (check_typedef (elt_type0), 0, 0, dval);
8025 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8027 struct type *range_type =
8028 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
8029 dval, TYPE_OBJFILE (type0));
8030 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
8031 result, range_type);
8033 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8034 error ("array type with dynamic size is larger than varsize-limit");
8037 TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE;
8042 /* A standard type (containing no dynamically sized components)
8043 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8044 DVAL describes a record containing any discriminants used in TYPE0,
8045 and may be NULL if there are none, or if the object of type TYPE at
8046 ADDRESS or in VALADDR contains these discriminants. */
8049 ada_to_fixed_type (struct type *type, char *valaddr,
8050 CORE_ADDR address, struct value *dval)
8052 CHECK_TYPEDEF (type);
8053 switch (TYPE_CODE (type))
8057 case TYPE_CODE_STRUCT:
8059 struct type *static_type = to_static_fixed_type (type);
8060 if (ada_is_tagged_type (static_type, 0))
8062 struct type *real_type =
8063 type_from_tag (value_tag_from_contents_and_address (static_type,
8066 if (real_type != NULL)
8069 return to_fixed_record_type (type, valaddr, address, NULL);
8071 case TYPE_CODE_ARRAY:
8072 return to_fixed_array_type (type, dval, 1);
8073 case TYPE_CODE_UNION:
8077 return to_fixed_variant_branch_type (type, valaddr, address, dval);
8081 /* A standard (static-sized) type corresponding as well as possible to
8082 TYPE0, but based on no runtime data. */
8084 static struct type *
8085 to_static_fixed_type (struct type *type0)
8092 if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
8095 CHECK_TYPEDEF (type0);
8097 switch (TYPE_CODE (type0))
8101 case TYPE_CODE_STRUCT:
8102 type = dynamic_template_type (type0);
8104 return template_to_static_fixed_type (type);
8106 return template_to_static_fixed_type (type0);
8107 case TYPE_CODE_UNION:
8108 type = ada_find_parallel_type (type0, "___XVU");
8110 return template_to_static_fixed_type (type);
8112 return template_to_static_fixed_type (type0);
8116 /* A static approximation of TYPE with all type wrappers removed. */
8118 static struct type *
8119 static_unwrap_type (struct type *type)
8121 if (ada_is_aligner_type (type))
8123 struct type *type1 = TYPE_FIELD_TYPE (check_typedef (type), 0);
8124 if (ada_type_name (type1) == NULL)
8125 TYPE_NAME (type1) = ada_type_name (type);
8127 return static_unwrap_type (type1);
8131 struct type *raw_real_type = ada_get_base_type (type);
8132 if (raw_real_type == type)
8135 return to_static_fixed_type (raw_real_type);
8139 /* In some cases, incomplete and private types require
8140 cross-references that are not resolved as records (for example,
8142 type FooP is access Foo;
8144 type Foo is array ...;
8145 ). In these cases, since there is no mechanism for producing
8146 cross-references to such types, we instead substitute for FooP a
8147 stub enumeration type that is nowhere resolved, and whose tag is
8148 the name of the actual type. Call these types "non-record stubs". */
8150 /* A type equivalent to TYPE that is not a non-record stub, if one
8151 exists, otherwise TYPE. */
8154 ada_completed_type (struct type *type)
8156 CHECK_TYPEDEF (type);
8157 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8158 || (TYPE_FLAGS (type) & TYPE_FLAG_STUB) == 0
8159 || TYPE_TAG_NAME (type) == NULL)
8163 char *name = TYPE_TAG_NAME (type);
8164 struct type *type1 = ada_find_any_type (name);
8165 return (type1 == NULL) ? type : type1;
8169 /* A value representing the data at VALADDR/ADDRESS as described by
8170 type TYPE0, but with a standard (static-sized) type that correctly
8171 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8172 type, then return VAL0 [this feature is simply to avoid redundant
8173 creation of struct values]. */
8175 static struct value *
8176 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8179 struct type *type = ada_to_fixed_type (type0, 0, address, NULL);
8180 if (type == type0 && val0 != NULL)
8183 return value_from_contents_and_address (type, 0, address);
8186 /* A value representing VAL, but with a standard (static-sized) type
8187 that correctly describes it. Does not necessarily create a new
8190 static struct value *
8191 ada_to_fixed_value (struct value *val)
8193 return ada_to_fixed_value_create (VALUE_TYPE (val),
8194 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
8198 /* If the PC is pointing inside a function prologue, then re-adjust it
8199 past this prologue. */
8202 adjust_pc_past_prologue (CORE_ADDR *pc)
8204 struct symbol *func_sym = find_pc_function (*pc);
8208 const struct symtab_and_line sal = find_function_start_sal (func_sym, 1);
8215 /* A value representing VAL, but with a standard (static-sized) type
8216 chosen to approximate the real type of VAL as well as possible, but
8217 without consulting any runtime values. For Ada dynamic-sized
8218 types, therefore, the type of the result is likely to be inaccurate. */
8221 ada_to_static_fixed_value (struct value *val)
8224 to_static_fixed_type (static_unwrap_type (VALUE_TYPE (val)));
8225 if (type == VALUE_TYPE (val))
8228 return coerce_unspec_val_to_type (val, type);
8234 /* Table mapping attribute numbers to names.
8235 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
8237 static const char *attribute_names[] = {
8255 ada_attribute_name (enum exp_opcode n)
8257 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8258 return attribute_names[n - OP_ATR_FIRST + 1];
8260 return attribute_names[0];
8263 /* Evaluate the 'POS attribute applied to ARG. */
8266 pos_atr (struct value *arg)
8268 struct type *type = VALUE_TYPE (arg);
8270 if (!discrete_type_p (type))
8271 error ("'POS only defined on discrete types");
8273 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8276 LONGEST v = value_as_long (arg);
8278 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8280 if (v == TYPE_FIELD_BITPOS (type, i))
8283 error ("enumeration value is invalid: can't find 'POS");
8286 return value_as_long (arg);
8289 static struct value *
8290 value_pos_atr (struct value *arg)
8292 return value_from_longest (builtin_type_ada_int, pos_atr (arg));
8295 /* Evaluate the TYPE'VAL attribute applied to ARG. */
8297 static struct value *
8298 value_val_atr (struct type *type, struct value *arg)
8300 if (!discrete_type_p (type))
8301 error ("'VAL only defined on discrete types");
8302 if (!integer_type_p (VALUE_TYPE (arg)))
8303 error ("'VAL requires integral argument");
8305 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8307 long pos = value_as_long (arg);
8308 if (pos < 0 || pos >= TYPE_NFIELDS (type))
8309 error ("argument to 'VAL out of range");
8310 return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
8313 return value_from_longest (type, value_as_long (arg));
8319 /* True if TYPE appears to be an Ada character type.
8320 [At the moment, this is true only for Character and Wide_Character;
8321 It is a heuristic test that could stand improvement]. */
8324 ada_is_character_type (struct type *type)
8326 const char *name = ada_type_name (type);
8329 && (TYPE_CODE (type) == TYPE_CODE_CHAR
8330 || TYPE_CODE (type) == TYPE_CODE_INT
8331 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8332 && (strcmp (name, "character") == 0
8333 || strcmp (name, "wide_character") == 0
8334 || strcmp (name, "unsigned char") == 0);
8337 /* True if TYPE appears to be an Ada string type. */
8340 ada_is_string_type (struct type *type)
8342 CHECK_TYPEDEF (type);
8344 && TYPE_CODE (type) != TYPE_CODE_PTR
8345 && (ada_is_simple_array_type (type) || ada_is_array_descriptor_type (type))
8346 && ada_array_arity (type) == 1)
8348 struct type *elttype = ada_array_element_type (type, 1);
8350 return ada_is_character_type (elttype);
8357 /* True if TYPE is a struct type introduced by the compiler to force the
8358 alignment of a value. Such types have a single field with a
8359 distinctive name. */
8362 ada_is_aligner_type (struct type *type)
8364 CHECK_TYPEDEF (type);
8365 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
8366 && TYPE_NFIELDS (type) == 1
8367 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8370 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8371 the parallel type. */
8374 ada_get_base_type (struct type *raw_type)
8376 struct type *real_type_namer;
8377 struct type *raw_real_type;
8379 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8382 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8383 if (real_type_namer == NULL
8384 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8385 || TYPE_NFIELDS (real_type_namer) != 1)
8388 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8389 if (raw_real_type == NULL)
8392 return raw_real_type;
8395 /* The type of value designated by TYPE, with all aligners removed. */
8398 ada_aligned_type (struct type *type)
8400 if (ada_is_aligner_type (type))
8401 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8403 return ada_get_base_type (type);
8407 /* The address of the aligned value in an object at address VALADDR
8408 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
8411 ada_aligned_value_addr (struct type *type, char *valaddr)
8413 if (ada_is_aligner_type (type))
8414 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8416 TYPE_FIELD_BITPOS (type,
8417 0) / TARGET_CHAR_BIT);
8424 /* The printed representation of an enumeration literal with encoded
8425 name NAME. The value is good to the next call of ada_enum_name. */
8427 ada_enum_name (const char *name)
8429 static char *result;
8430 static size_t result_len = 0;
8433 /* First, unqualify the enumeration name:
8434 1. Search for the last '.' character. If we find one, then skip
8435 all the preceeding characters, the unqualified name starts
8436 right after that dot.
8437 2. Otherwise, we may be debugging on a target where the compiler
8438 translates dots into "__". Search forward for double underscores,
8439 but stop searching when we hit an overloading suffix, which is
8440 of the form "__" followed by digits. */
8442 if ((tmp = strrchr (name, '.')) != NULL)
8446 while ((tmp = strstr (name, "__")) != NULL)
8448 if (isdigit (tmp[2]))
8458 if (name[1] == 'U' || name[1] == 'W')
8460 if (sscanf (name + 2, "%x", &v) != 1)
8466 GROW_VECT (result, result_len, 16);
8467 if (isascii (v) && isprint (v))
8468 sprintf (result, "'%c'", v);
8469 else if (name[1] == 'U')
8470 sprintf (result, "[\"%02x\"]", v);
8472 sprintf (result, "[\"%04x\"]", v);
8478 if ((tmp = strstr (name, "__")) != NULL
8479 || (tmp = strstr (name, "$")) != NULL)
8481 GROW_VECT (result, result_len, tmp - name + 1);
8482 strncpy (result, name, tmp - name);
8483 result[tmp - name] = '\0';
8491 static struct value *
8492 evaluate_subexp (struct type *expect_type, struct expression *exp, int *pos,
8495 return (*exp->language_defn->la_exp_desc->evaluate_exp)
8496 (expect_type, exp, pos, noside);
8499 /* Evaluate the subexpression of EXP starting at *POS as for
8500 evaluate_type, updating *POS to point just past the evaluated
8503 static struct value *
8504 evaluate_subexp_type (struct expression *exp, int *pos)
8506 return (*exp->language_defn->la_exp_desc->evaluate_exp)
8507 (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8510 /* If VAL is wrapped in an aligner or subtype wrapper, return the
8513 static struct value *
8514 unwrap_value (struct value *val)
8516 struct type *type = check_typedef (VALUE_TYPE (val));
8517 if (ada_is_aligner_type (type))
8519 struct value *v = value_struct_elt (&val, NULL, "F",
8520 NULL, "internal structure");
8521 struct type *val_type = check_typedef (VALUE_TYPE (v));
8522 if (ada_type_name (val_type) == NULL)
8523 TYPE_NAME (val_type) = ada_type_name (type);
8525 return unwrap_value (v);
8529 struct type *raw_real_type =
8530 ada_completed_type (ada_get_base_type (type));
8532 if (type == raw_real_type)
8536 coerce_unspec_val_to_type
8537 (val, ada_to_fixed_type (raw_real_type, 0,
8538 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
8543 static struct value *
8544 cast_to_fixed (struct type *type, struct value *arg)
8548 if (type == VALUE_TYPE (arg))
8550 else if (ada_is_fixed_point_type (VALUE_TYPE (arg)))
8551 val = ada_float_to_fixed (type,
8552 ada_fixed_to_float (VALUE_TYPE (arg),
8553 value_as_long (arg)));
8557 value_as_double (value_cast (builtin_type_double, value_copy (arg)));
8558 val = ada_float_to_fixed (type, argd);
8561 return value_from_longest (type, val);
8564 static struct value *
8565 cast_from_fixed_to_double (struct value *arg)
8567 DOUBLEST val = ada_fixed_to_float (VALUE_TYPE (arg),
8568 value_as_long (arg));
8569 return value_from_double (builtin_type_double, val);
8572 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
8573 return the converted value. */
8575 static struct value *
8576 coerce_for_assign (struct type *type, struct value *val)
8578 struct type *type2 = VALUE_TYPE (val);
8582 CHECK_TYPEDEF (type2);
8583 CHECK_TYPEDEF (type);
8585 if (TYPE_CODE (type2) == TYPE_CODE_PTR
8586 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8588 val = ada_value_ind (val);
8589 type2 = VALUE_TYPE (val);
8592 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
8593 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8595 if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
8596 || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8597 != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
8598 error ("Incompatible types in assignment");
8599 VALUE_TYPE (val) = type;
8604 static struct value *
8605 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
8608 struct type *type1, *type2;
8613 type1 = base_type (check_typedef (VALUE_TYPE (arg1)));
8614 type2 = base_type (check_typedef (VALUE_TYPE (arg2)));
8616 if (TYPE_CODE (type1) != TYPE_CODE_INT || TYPE_CODE (type2) != TYPE_CODE_INT)
8617 return value_binop (arg1, arg2, op);
8626 return value_binop (arg1, arg2, op);
8629 v2 = value_as_long (arg2);
8631 error ("second operand of %s must not be zero.", op_string (op));
8633 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
8634 return value_binop (arg1, arg2, op);
8636 v1 = value_as_long (arg1);
8641 if (! TRUNCATION_TOWARDS_ZERO && v1 * (v1%v2) < 0)
8642 v += v > 0 ? -1 : 1;
8650 /* Should not reach this point. */
8654 val = allocate_value (type1);
8655 store_unsigned_integer (VALUE_CONTENTS_RAW (val),
8656 TYPE_LENGTH (VALUE_TYPE (val)),
8662 ada_value_equal (struct value *arg1, struct value *arg2)
8664 if (ada_is_direct_array_type (VALUE_TYPE (arg1))
8665 || ada_is_direct_array_type (VALUE_TYPE (arg2)))
8667 arg1 = ada_coerce_to_simple_array (arg1);
8668 arg2 = ada_coerce_to_simple_array (arg2);
8669 if (TYPE_CODE (VALUE_TYPE (arg1)) != TYPE_CODE_ARRAY
8670 || TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_ARRAY)
8671 error ("Attempt to compare array with non-array");
8672 /* FIXME: The following works only for types whose
8673 representations use all bits (no padding or undefined bits)
8674 and do not have user-defined equality. */
8676 TYPE_LENGTH (VALUE_TYPE (arg1)) == TYPE_LENGTH (VALUE_TYPE (arg2))
8677 && memcmp (VALUE_CONTENTS (arg1), VALUE_CONTENTS (arg2),
8678 TYPE_LENGTH (VALUE_TYPE (arg1))) == 0;
8680 return value_equal (arg1, arg2);
8684 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
8685 int *pos, enum noside noside)
8688 int tem, tem2, tem3;
8690 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8693 struct value **argvec;
8697 op = exp->elts[pc].opcode;
8704 unwrap_value (evaluate_subexp_standard
8705 (expect_type, exp, pos, noside));
8709 struct value *result;
8711 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
8712 /* The result type will have code OP_STRING, bashed there from
8713 OP_ARRAY. Bash it back. */
8714 if (TYPE_CODE (VALUE_TYPE (result)) == TYPE_CODE_STRING)
8715 TYPE_CODE (VALUE_TYPE (result)) = TYPE_CODE_ARRAY;
8721 type = exp->elts[pc + 1].type;
8722 arg1 = evaluate_subexp (type, exp, pos, noside);
8723 if (noside == EVAL_SKIP)
8725 if (type != check_typedef (VALUE_TYPE (arg1)))
8727 if (ada_is_fixed_point_type (type))
8728 arg1 = cast_to_fixed (type, arg1);
8729 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
8730 arg1 = value_cast (type, cast_from_fixed_to_double (arg1));
8731 else if (VALUE_LVAL (arg1) == lval_memory)
8733 /* This is in case of the really obscure (and undocumented,
8734 but apparently expected) case of (Foo) Bar.all, where Bar
8735 is an integer constant and Foo is a dynamic-sized type.
8736 If we don't do this, ARG1 will simply be relabeled with
8738 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8739 return value_zero (to_static_fixed_type (type), not_lval);
8741 ada_to_fixed_value_create
8742 (type, VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1), 0);
8745 arg1 = value_cast (type, arg1);
8751 type = exp->elts[pc + 1].type;
8752 return ada_evaluate_subexp (type, exp, pos, noside);
8755 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8756 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
8757 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8759 if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
8760 arg2 = cast_to_fixed (VALUE_TYPE (arg1), arg2);
8761 else if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
8763 ("Fixed-point values must be assigned to fixed-point variables");
8765 arg2 = coerce_for_assign (VALUE_TYPE (arg1), arg2);
8766 return ada_value_assign (arg1, arg2);
8769 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8770 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8771 if (noside == EVAL_SKIP)
8773 if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
8774 || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
8775 && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
8777 ("Operands of fixed-point addition must have the same type");
8778 return value_cast (VALUE_TYPE (arg1), value_add (arg1, arg2));
8781 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8782 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8783 if (noside == EVAL_SKIP)
8785 if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
8786 || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
8787 && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
8789 ("Operands of fixed-point subtraction must have the same type");
8790 return value_cast (VALUE_TYPE (arg1), value_sub (arg1, arg2));
8794 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8795 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8796 if (noside == EVAL_SKIP)
8798 else if (noside == EVAL_AVOID_SIDE_EFFECTS
8799 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
8800 return value_zero (VALUE_TYPE (arg1), not_lval);
8803 if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
8804 arg1 = cast_from_fixed_to_double (arg1);
8805 if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
8806 arg2 = cast_from_fixed_to_double (arg2);
8807 return ada_value_binop (arg1, arg2, op);
8812 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8813 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8814 if (noside == EVAL_SKIP)
8816 else if (noside == EVAL_AVOID_SIDE_EFFECTS
8817 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
8818 return value_zero (VALUE_TYPE (arg1), not_lval);
8820 return ada_value_binop (arg1, arg2, op);
8823 case BINOP_NOTEQUAL:
8824 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8825 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
8826 if (noside == EVAL_SKIP)
8828 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8831 tem = ada_value_equal (arg1, arg2);
8832 if (op == BINOP_NOTEQUAL)
8834 return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
8837 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8838 if (noside == EVAL_SKIP)
8840 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
8841 return value_cast (VALUE_TYPE (arg1), value_neg (arg1));
8843 return value_neg (arg1);
8847 if (noside == EVAL_SKIP)
8852 else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
8853 /* Only encountered when an unresolved symbol occurs in a
8854 context other than a function call, in which case, it is
8856 error ("Unexpected unresolved symbol, %s, during evaluation",
8857 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
8858 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8862 (to_static_fixed_type
8863 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8869 unwrap_value (evaluate_subexp_standard
8870 (expect_type, exp, pos, noside));
8871 return ada_to_fixed_value (arg1);
8877 /* Allocate arg vector, including space for the function to be
8878 called in argvec[0] and a terminating NULL. */
8879 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8881 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8883 if (exp->elts[*pos].opcode == OP_VAR_VALUE
8884 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
8885 error ("Unexpected unresolved symbol, %s, during evaluation",
8886 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
8889 for (tem = 0; tem <= nargs; tem += 1)
8890 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8893 if (noside == EVAL_SKIP)
8897 if (ada_is_packed_array_type (desc_base_type (VALUE_TYPE (argvec[0]))))
8898 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
8899 else if (TYPE_CODE (VALUE_TYPE (argvec[0])) == TYPE_CODE_REF
8900 || (TYPE_CODE (VALUE_TYPE (argvec[0])) == TYPE_CODE_ARRAY
8901 && VALUE_LVAL (argvec[0]) == lval_memory))
8902 argvec[0] = value_addr (argvec[0]);
8904 type = check_typedef (VALUE_TYPE (argvec[0]));
8905 if (TYPE_CODE (type) == TYPE_CODE_PTR)
8907 switch (TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (type))))
8909 case TYPE_CODE_FUNC:
8910 type = check_typedef (TYPE_TARGET_TYPE (type));
8912 case TYPE_CODE_ARRAY:
8914 case TYPE_CODE_STRUCT:
8915 if (noside != EVAL_AVOID_SIDE_EFFECTS)
8916 argvec[0] = ada_value_ind (argvec[0]);
8917 type = check_typedef (TYPE_TARGET_TYPE (type));
8920 error ("cannot subscript or call something of type `%s'",
8921 ada_type_name (VALUE_TYPE (argvec[0])));
8926 switch (TYPE_CODE (type))
8928 case TYPE_CODE_FUNC:
8929 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8930 return allocate_value (TYPE_TARGET_TYPE (type));
8931 return call_function_by_hand (argvec[0], nargs, argvec + 1);
8932 case TYPE_CODE_STRUCT:
8936 /* Make sure to use the parallel ___XVS type if any.
8937 Otherwise, we won't be able to find the array arity
8938 and element type. */
8939 type = ada_get_base_type (type);
8941 arity = ada_array_arity (type);
8942 type = ada_array_element_type (type, nargs);
8944 error ("cannot subscript or call a record");
8946 error ("wrong number of subscripts; expecting %d", arity);
8947 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8948 return allocate_value (ada_aligned_type (type));
8950 unwrap_value (ada_value_subscript
8951 (argvec[0], nargs, argvec + 1));
8953 case TYPE_CODE_ARRAY:
8954 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8956 type = ada_array_element_type (type, nargs);
8958 error ("element type of array unknown");
8960 return allocate_value (ada_aligned_type (type));
8963 unwrap_value (ada_value_subscript
8964 (ada_coerce_to_simple_array (argvec[0]),
8965 nargs, argvec + 1));
8966 case TYPE_CODE_PTR: /* Pointer to array */
8967 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
8968 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8970 type = ada_array_element_type (type, nargs);
8972 error ("element type of array unknown");
8974 return allocate_value (ada_aligned_type (type));
8977 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
8978 nargs, argvec + 1));
8981 error ("Internal error in evaluate_subexp");
8986 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8987 struct value *low_bound_val =
8988 evaluate_subexp (NULL_TYPE, exp, pos, noside);
8989 LONGEST low_bound = pos_atr (low_bound_val);
8991 = pos_atr (evaluate_subexp (NULL_TYPE, exp, pos, noside));
8992 if (noside == EVAL_SKIP)
8995 /* If this is a reference type or a pointer type, and
8996 the target type has an XVS parallel type, then get
8997 the real target type. */
8998 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_REF
8999 || TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_PTR)
9000 TYPE_TARGET_TYPE (VALUE_TYPE (array)) =
9001 ada_get_base_type (TYPE_TARGET_TYPE (VALUE_TYPE (array)));
9003 /* If this is a reference to an aligner type, then remove all
9005 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_REF
9006 && ada_is_aligner_type (TYPE_TARGET_TYPE (VALUE_TYPE (array))))
9007 TYPE_TARGET_TYPE (VALUE_TYPE (array)) =
9008 ada_aligned_type (TYPE_TARGET_TYPE (VALUE_TYPE (array)));
9010 if (ada_is_packed_array_type (VALUE_TYPE (array)))
9011 error ("cannot slice a packed array");
9013 /* If this is a reference to an array or an array lvalue,
9014 convert to a pointer. */
9015 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_REF
9016 || (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_ARRAY
9017 && VALUE_LVAL (array) == lval_memory))
9018 array = value_addr (array);
9020 if (noside == EVAL_AVOID_SIDE_EFFECTS &&
9021 ada_is_array_descriptor_type (check_typedef (VALUE_TYPE (array))))
9023 /* Try dereferencing the array, in case it is an access
9025 struct type *arrType = ada_type_of_array (array, 0);
9026 if (arrType != NULL)
9027 array = value_at_lazy (arrType, 0, NULL);
9030 array = ada_coerce_to_simple_array_ptr (array);
9032 /* When EVAL_AVOID_SIDE_EFFECTS, we may get the bounds wrong,
9033 but only in contexts where the value is not being requested
9035 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_PTR)
9037 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9038 return ada_value_ind (array);
9039 else if (high_bound < low_bound)
9040 return empty_array (TYPE_TARGET_TYPE (VALUE_TYPE (array)),
9044 struct type *arr_type0 =
9045 to_fixed_array_type (TYPE_TARGET_TYPE (VALUE_TYPE (array)),
9047 struct value *item0 =
9048 ada_value_ptr_subscript (array, arr_type0, 1,
9050 struct value *slice =
9051 value_repeat (item0, high_bound - low_bound + 1);
9052 struct type *arr_type1 = VALUE_TYPE (slice);
9053 TYPE_LOW_BOUND (TYPE_INDEX_TYPE (arr_type1)) = low_bound;
9054 TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (arr_type1)) += low_bound;
9058 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9060 else if (high_bound < low_bound)
9061 return empty_array (VALUE_TYPE (array), low_bound);
9063 return value_slice (array, low_bound, high_bound - low_bound + 1);
9068 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9069 type = exp->elts[pc + 1].type;
9071 if (noside == EVAL_SKIP)
9074 switch (TYPE_CODE (type))
9077 lim_warning ("Membership test incompletely implemented; "
9078 "always returns true", 0);
9079 return value_from_longest (builtin_type_int, (LONGEST) 1);
9081 case TYPE_CODE_RANGE:
9082 arg2 = value_from_longest (builtin_type_int,
9083 TYPE_LOW_BOUND (type));
9084 arg3 = value_from_longest (builtin_type_int,
9085 TYPE_HIGH_BOUND (type));
9087 value_from_longest (builtin_type_int,
9088 (value_less (arg1, arg3)
9089 || value_equal (arg1, arg3))
9090 && (value_less (arg2, arg1)
9091 || value_equal (arg2, arg1)));
9094 case BINOP_IN_BOUNDS:
9096 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9097 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9099 if (noside == EVAL_SKIP)
9102 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9103 return value_zero (builtin_type_int, not_lval);
9105 tem = longest_to_int (exp->elts[pc + 1].longconst);
9107 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg2)))
9108 error ("invalid dimension number to '%s", "range");
9110 arg3 = ada_array_bound (arg2, tem, 1);
9111 arg2 = ada_array_bound (arg2, tem, 0);
9114 value_from_longest (builtin_type_int,
9115 (value_less (arg1, arg3)
9116 || value_equal (arg1, arg3))
9117 && (value_less (arg2, arg1)
9118 || value_equal (arg2, arg1)));
9120 case TERNOP_IN_RANGE:
9121 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9122 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9123 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9125 if (noside == EVAL_SKIP)
9129 value_from_longest (builtin_type_int,
9130 (value_less (arg1, arg3)
9131 || value_equal (arg1, arg3))
9132 && (value_less (arg2, arg1)
9133 || value_equal (arg2, arg1)));
9139 struct type *type_arg;
9140 if (exp->elts[*pos].opcode == OP_TYPE)
9142 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9144 type_arg = exp->elts[pc + 2].type;
9148 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9152 if (exp->elts[*pos].opcode != OP_LONG)
9153 error ("illegal operand to '%s", ada_attribute_name (op));
9154 tem = longest_to_int (exp->elts[*pos + 2].longconst);
9157 if (noside == EVAL_SKIP)
9160 if (type_arg == NULL)
9162 arg1 = ada_coerce_ref (arg1);
9164 if (ada_is_packed_array_type (VALUE_TYPE (arg1)))
9165 arg1 = ada_coerce_to_simple_array (arg1);
9167 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg1)))
9168 error ("invalid dimension number to '%s",
9169 ada_attribute_name (op));
9171 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9173 type = ada_index_type (VALUE_TYPE (arg1), tem);
9176 ("attempt to take bound of something that is not an array");
9177 return allocate_value (type);
9182 default: /* Should never happen. */
9183 error ("unexpected attribute encountered");
9185 return ada_array_bound (arg1, tem, 0);
9187 return ada_array_bound (arg1, tem, 1);
9189 return ada_array_length (arg1, tem);
9192 else if (discrete_type_p (type_arg))
9194 struct type *range_type;
9195 char *name = ada_type_name (type_arg);
9197 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
9199 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
9200 if (range_type == NULL)
9201 range_type = type_arg;
9205 error ("unexpected attribute encountered");
9207 return discrete_type_low_bound (range_type);
9209 return discrete_type_high_bound (range_type);
9211 error ("the 'length attribute applies only to array types");
9214 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
9215 error ("unimplemented type attribute");
9220 if (ada_is_packed_array_type (type_arg))
9221 type_arg = decode_packed_array_type (type_arg);
9223 if (tem < 1 || tem > ada_array_arity (type_arg))
9224 error ("invalid dimension number to '%s",
9225 ada_attribute_name (op));
9227 type = ada_index_type (type_arg, tem);
9229 error ("attempt to take bound of something that is not an array");
9230 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9231 return allocate_value (type);
9236 error ("unexpected attribute encountered");
9238 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
9239 return value_from_longest (type, low);
9242 ada_array_bound_from_type (type_arg, tem, 1, &type);
9243 return value_from_longest (type, high);
9245 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
9246 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
9247 return value_from_longest (type, high - low + 1);
9253 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9254 if (noside == EVAL_SKIP)
9257 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9258 return value_zero (ada_tag_type (arg1), not_lval);
9260 return ada_value_tag (arg1);
9264 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9265 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9266 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9267 if (noside == EVAL_SKIP)
9269 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9270 return value_zero (VALUE_TYPE (arg1), not_lval);
9272 return value_binop (arg1, arg2,
9273 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9275 case OP_ATR_MODULUS:
9277 struct type *type_arg = exp->elts[pc + 2].type;
9278 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9280 if (noside == EVAL_SKIP)
9283 if (!ada_is_modular_type (type_arg))
9284 error ("'modulus must be applied to modular type");
9286 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9287 ada_modulus (type_arg));
9292 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9293 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9294 if (noside == EVAL_SKIP)
9296 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9297 return value_zero (builtin_type_ada_int, not_lval);
9299 return value_pos_atr (arg1);
9302 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9303 if (noside == EVAL_SKIP)
9305 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9306 return value_zero (builtin_type_ada_int, not_lval);
9308 return value_from_longest (builtin_type_ada_int,
9310 * TYPE_LENGTH (VALUE_TYPE (arg1)));
9313 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9314 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9315 type = exp->elts[pc + 2].type;
9316 if (noside == EVAL_SKIP)
9318 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9319 return value_zero (type, not_lval);
9321 return value_val_atr (type, arg1);
9324 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9325 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9326 if (noside == EVAL_SKIP)
9328 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9329 return value_zero (VALUE_TYPE (arg1), not_lval);
9331 return value_binop (arg1, arg2, op);
9334 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9335 if (noside == EVAL_SKIP)
9341 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9342 if (noside == EVAL_SKIP)
9344 if (value_less (arg1, value_zero (VALUE_TYPE (arg1), not_lval)))
9345 return value_neg (arg1);
9350 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
9351 expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type));
9352 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
9353 if (noside == EVAL_SKIP)
9355 type = check_typedef (VALUE_TYPE (arg1));
9356 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9358 if (ada_is_array_descriptor_type (type))
9359 /* GDB allows dereferencing GNAT array descriptors. */
9361 struct type *arrType = ada_type_of_array (arg1, 0);
9362 if (arrType == NULL)
9363 error ("Attempt to dereference null array pointer.");
9364 return value_at_lazy (arrType, 0, NULL);
9366 else if (TYPE_CODE (type) == TYPE_CODE_PTR
9367 || TYPE_CODE (type) == TYPE_CODE_REF
9368 /* In C you can dereference an array to get the 1st elt. */
9369 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9372 (to_static_fixed_type
9373 (ada_aligned_type (check_typedef (TYPE_TARGET_TYPE (type)))),
9375 else if (TYPE_CODE (type) == TYPE_CODE_INT)
9376 /* GDB allows dereferencing an int. */
9377 return value_zero (builtin_type_int, lval_memory);
9379 error ("Attempt to take contents of a non-pointer value.");
9381 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
9382 type = check_typedef (VALUE_TYPE (arg1));
9384 if (ada_is_array_descriptor_type (type))
9385 /* GDB allows dereferencing GNAT array descriptors. */
9386 return ada_coerce_to_simple_array (arg1);
9388 return ada_value_ind (arg1);
9390 case STRUCTOP_STRUCT:
9391 tem = longest_to_int (exp->elts[pc + 1].longconst);
9392 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9393 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9394 if (noside == EVAL_SKIP)
9396 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9398 struct type *type1 = VALUE_TYPE (arg1);
9399 if (ada_is_tagged_type (type1, 1))
9401 type = ada_lookup_struct_elt_type (type1,
9402 &exp->elts[pc + 2].string,
9405 /* In this case, we assume that the field COULD exist
9406 in some extension of the type. Return an object of
9407 "type" void, which will match any formal
9408 (see ada_type_match). */
9409 return value_zero (builtin_type_void, lval_memory);
9412 type = ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string,
9415 return value_zero (ada_aligned_type (type), lval_memory);
9419 ada_to_fixed_value (unwrap_value
9420 (ada_value_struct_elt
9421 (arg1, &exp->elts[pc + 2].string, "record")));
9423 /* The value is not supposed to be used. This is here to make it
9424 easier to accommodate expressions that contain types. */
9426 if (noside == EVAL_SKIP)
9428 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9429 return allocate_value (builtin_type_void);
9431 error ("Attempt to use a type name as an expression");
9435 return value_from_longest (builtin_type_long, (LONGEST) 1);
9441 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9442 type name that encodes the 'small and 'delta information.
9443 Otherwise, return NULL. */
9446 fixed_type_info (struct type *type)
9448 const char *name = ada_type_name (type);
9449 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9451 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9453 const char *tail = strstr (name, "___XF_");
9459 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9460 return fixed_type_info (TYPE_TARGET_TYPE (type));
9465 /* Returns non-zero iff TYPE represents an Ada fixed-point type. */
9468 ada_is_fixed_point_type (struct type *type)
9470 return fixed_type_info (type) != NULL;
9473 /* Return non-zero iff TYPE represents a System.Address type. */
9476 ada_is_system_address_type (struct type *type)
9478 return (TYPE_NAME (type)
9479 && strcmp (TYPE_NAME (type), "system__address") == 0);
9482 /* Assuming that TYPE is the representation of an Ada fixed-point
9483 type, return its delta, or -1 if the type is malformed and the
9484 delta cannot be determined. */
9487 ada_delta (struct type *type)
9489 const char *encoding = fixed_type_info (type);
9492 if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
9495 return (DOUBLEST) num / (DOUBLEST) den;
9498 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9499 factor ('SMALL value) associated with the type. */
9502 scaling_factor (struct type *type)
9504 const char *encoding = fixed_type_info (type);
9505 unsigned long num0, den0, num1, den1;
9508 n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
9513 return (DOUBLEST) num1 / (DOUBLEST) den1;
9515 return (DOUBLEST) num0 / (DOUBLEST) den0;
9519 /* Assuming that X is the representation of a value of fixed-point
9520 type TYPE, return its floating-point equivalent. */
9523 ada_fixed_to_float (struct type *type, LONGEST x)
9525 return (DOUBLEST) x *scaling_factor (type);
9528 /* The representation of a fixed-point value of type TYPE
9529 corresponding to the value X. */
9532 ada_float_to_fixed (struct type *type, DOUBLEST x)
9534 return (LONGEST) (x / scaling_factor (type) + 0.5);
9538 /* VAX floating formats */
9540 /* Non-zero iff TYPE represents one of the special VAX floating-point
9544 ada_is_vax_floating_type (struct type *type)
9547 (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
9550 && (TYPE_CODE (type) == TYPE_CODE_INT
9551 || TYPE_CODE (type) == TYPE_CODE_RANGE)
9552 && strncmp (ada_type_name (type) + name_len - 6, "___XF", 5) == 0;
9555 /* The type of special VAX floating-point type this is, assuming
9556 ada_is_vax_floating_point. */
9559 ada_vax_float_type_suffix (struct type *type)
9561 return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
9564 /* A value representing the special debugging function that outputs
9565 VAX floating-point values of the type represented by TYPE. Assumes
9566 ada_is_vax_floating_type (TYPE). */
9569 ada_vax_float_print_function (struct type *type)
9571 switch (ada_vax_float_type_suffix (type))
9574 return get_var_value ("DEBUG_STRING_F", 0);
9576 return get_var_value ("DEBUG_STRING_D", 0);
9578 return get_var_value ("DEBUG_STRING_G", 0);
9580 error ("invalid VAX floating-point type");
9587 /* Scan STR beginning at position K for a discriminant name, and
9588 return the value of that discriminant field of DVAL in *PX. If
9589 PNEW_K is not null, put the position of the character beyond the
9590 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
9591 not alter *PX and *PNEW_K if unsuccessful. */
9594 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9597 static char *bound_buffer = NULL;
9598 static size_t bound_buffer_len = 0;
9601 struct value *bound_val;
9603 if (dval == NULL || str == NULL || str[k] == '\0')
9606 pend = strstr (str + k, "__");
9610 k += strlen (bound);
9614 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
9615 bound = bound_buffer;
9616 strncpy (bound_buffer, str + k, pend - (str + k));
9617 bound[pend - (str + k)] = '\0';
9621 bound_val = ada_search_struct_field (bound, dval, 0, VALUE_TYPE (dval));
9622 if (bound_val == NULL)
9625 *px = value_as_long (bound_val);
9631 /* Value of variable named NAME in the current environment. If
9632 no such variable found, then if ERR_MSG is null, returns 0, and
9633 otherwise causes an error with message ERR_MSG. */
9635 static struct value *
9636 get_var_value (char *name, char *err_msg)
9638 struct ada_symbol_info *syms;
9641 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9646 if (err_msg == NULL)
9649 error ("%s", err_msg);
9652 return value_of_variable (syms[0].sym, syms[0].block);
9655 /* Value of integer variable named NAME in the current environment. If
9656 no such variable found, returns 0, and sets *FLAG to 0. If
9657 successful, sets *FLAG to 1. */
9660 get_int_var_value (char *name, int *flag)
9662 struct value *var_val = get_var_value (name, 0);
9674 return value_as_long (var_val);
9679 /* Return a range type whose base type is that of the range type named
9680 NAME in the current environment, and whose bounds are calculated
9681 from NAME according to the GNAT range encoding conventions.
9682 Extract discriminant values, if needed, from DVAL. If a new type
9683 must be created, allocate in OBJFILE's space. The bounds
9684 information, in general, is encoded in NAME, the base type given in
9685 the named range type. */
9687 static struct type *
9688 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
9690 struct type *raw_type = ada_find_any_type (name);
9691 struct type *base_type;
9694 if (raw_type == NULL)
9695 base_type = builtin_type_int;
9696 else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
9697 base_type = TYPE_TARGET_TYPE (raw_type);
9699 base_type = raw_type;
9701 subtype_info = strstr (name, "___XD");
9702 if (subtype_info == NULL)
9706 static char *name_buf = NULL;
9707 static size_t name_len = 0;
9708 int prefix_len = subtype_info - name;
9714 GROW_VECT (name_buf, name_len, prefix_len + 5);
9715 strncpy (name_buf, name, prefix_len);
9716 name_buf[prefix_len] = '\0';
9719 bounds_str = strchr (subtype_info, '_');
9722 if (*subtype_info == 'L')
9724 if (!ada_scan_number (bounds_str, n, &L, &n)
9725 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9727 if (bounds_str[n] == '_')
9729 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
9736 strcpy (name_buf + prefix_len, "___L");
9737 L = get_int_var_value (name_buf, &ok);
9740 lim_warning ("Unknown lower bound, using 1.", 1);
9745 if (*subtype_info == 'U')
9747 if (!ada_scan_number (bounds_str, n, &U, &n)
9748 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9754 strcpy (name_buf + prefix_len, "___U");
9755 U = get_int_var_value (name_buf, &ok);
9758 lim_warning ("Unknown upper bound, using %ld.", (long) L);
9763 if (objfile == NULL)
9764 objfile = TYPE_OBJFILE (base_type);
9765 type = create_range_type (alloc_type (objfile), base_type, L, U);
9766 TYPE_NAME (type) = name;
9771 /* True iff NAME is the name of a range type. */
9774 ada_is_range_type_name (const char *name)
9776 return (name != NULL && strstr (name, "___XD"));
9782 /* True iff TYPE is an Ada modular type. */
9785 ada_is_modular_type (struct type *type)
9787 struct type *subranged_type = base_type (type);
9789 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9790 && TYPE_CODE (subranged_type) != TYPE_CODE_ENUM
9791 && TYPE_UNSIGNED (subranged_type));
9794 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
9797 ada_modulus (struct type * type)
9799 return TYPE_HIGH_BOUND (type) + 1;
9803 /* Information about operators given special treatment in functions
9805 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
9807 #define ADA_OPERATORS \
9808 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
9809 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
9810 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
9811 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
9812 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
9813 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
9814 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
9815 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
9816 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
9817 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
9818 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
9819 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
9820 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
9821 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
9822 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
9823 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0)
9826 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
9828 switch (exp->elts[pc - 1].opcode)
9831 operator_length_standard (exp, pc, oplenp, argsp);
9834 #define OP_DEFN(op, len, args, binop) \
9835 case op: *oplenp = len; *argsp = args; break;
9842 ada_op_name (enum exp_opcode opcode)
9847 return op_name_standard (opcode);
9848 #define OP_DEFN(op, len, args, binop) case op: return #op;
9854 /* As for operator_length, but assumes PC is pointing at the first
9855 element of the operator, and gives meaningful results only for the
9856 Ada-specific operators. */
9859 ada_forward_operator_length (struct expression *exp, int pc,
9860 int *oplenp, int *argsp)
9862 switch (exp->elts[pc].opcode)
9865 *oplenp = *argsp = 0;
9867 #define OP_DEFN(op, len, args, binop) \
9868 case op: *oplenp = len; *argsp = args; break;
9875 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
9877 enum exp_opcode op = exp->elts[elt].opcode;
9882 ada_forward_operator_length (exp, elt, &oplen, &nargs);
9886 /* Ada attributes ('Foo). */
9893 case OP_ATR_MODULUS:
9902 fprintf_filtered (stream, "Type @");
9903 gdb_print_host_address (exp->elts[pc + 1].type, stream);
9904 fprintf_filtered (stream, " (");
9905 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
9906 fprintf_filtered (stream, ")");
9908 case BINOP_IN_BOUNDS:
9909 fprintf_filtered (stream, " (%d)", (int) exp->elts[pc + 2].longconst);
9911 case TERNOP_IN_RANGE:
9915 return dump_subexp_body_standard (exp, stream, elt);
9919 for (i = 0; i < nargs; i += 1)
9920 elt = dump_subexp (exp, stream, elt);
9925 /* The Ada extension of print_subexp (q.v.). */
9928 ada_print_subexp (struct expression *exp, int *pos,
9929 struct ui_file *stream, enum precedence prec)
9933 enum exp_opcode op = exp->elts[pc].opcode;
9935 ada_forward_operator_length (exp, pc, &oplen, &nargs);
9940 print_subexp_standard (exp, pos, stream, prec);
9945 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
9948 case BINOP_IN_BOUNDS:
9950 print_subexp (exp, pos, stream, PREC_SUFFIX);
9951 fputs_filtered (" in ", stream);
9952 print_subexp (exp, pos, stream, PREC_SUFFIX);
9953 fputs_filtered ("'range", stream);
9954 if (exp->elts[pc + 1].longconst > 1)
9955 fprintf_filtered (stream, "(%ld)", (long) exp->elts[pc + 1].longconst);
9958 case TERNOP_IN_RANGE:
9960 if (prec >= PREC_EQUAL)
9961 fputs_filtered ("(", stream);
9962 print_subexp (exp, pos, stream, PREC_SUFFIX);
9963 fputs_filtered (" in ", stream);
9964 print_subexp (exp, pos, stream, PREC_EQUAL);
9965 fputs_filtered (" .. ", stream);
9966 print_subexp (exp, pos, stream, PREC_EQUAL);
9967 if (prec >= PREC_EQUAL)
9968 fputs_filtered (")", stream);
9977 case OP_ATR_MODULUS:
9983 if (exp->elts[*pos].opcode == OP_TYPE)
9985 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
9986 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
9990 print_subexp (exp, pos, stream, PREC_SUFFIX);
9991 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
9995 for (tem = 1; tem < nargs; tem += 1)
9997 fputs_filtered ( (tem == 1) ? " (" : ", ", stream);
9998 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
10000 fputs_filtered (")", stream);
10006 type_print (exp->elts[pc + 1].type, "", stream, 0);
10007 fputs_filtered ("'(", stream);
10008 print_subexp (exp, pos, stream, PREC_PREFIX);
10009 fputs_filtered (")", stream);
10012 case UNOP_IN_RANGE:
10014 print_subexp (exp, pos, stream, PREC_SUFFIX);
10015 fputs_filtered (" in ", stream);
10016 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
10021 /* Table mapping opcodes into strings for printing operators
10022 and precedences of the operators. */
10024 static const struct op_print ada_op_print_tab[] = {
10025 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
10026 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
10027 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
10028 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
10029 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
10030 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
10031 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
10032 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
10033 {"<=", BINOP_LEQ, PREC_ORDER, 0},
10034 {">=", BINOP_GEQ, PREC_ORDER, 0},
10035 {">", BINOP_GTR, PREC_ORDER, 0},
10036 {"<", BINOP_LESS, PREC_ORDER, 0},
10037 {">>", BINOP_RSH, PREC_SHIFT, 0},
10038 {"<<", BINOP_LSH, PREC_SHIFT, 0},
10039 {"+", BINOP_ADD, PREC_ADD, 0},
10040 {"-", BINOP_SUB, PREC_ADD, 0},
10041 {"&", BINOP_CONCAT, PREC_ADD, 0},
10042 {"*", BINOP_MUL, PREC_MUL, 0},
10043 {"/", BINOP_DIV, PREC_MUL, 0},
10044 {"rem", BINOP_REM, PREC_MUL, 0},
10045 {"mod", BINOP_MOD, PREC_MUL, 0},
10046 {"**", BINOP_EXP, PREC_REPEAT, 0},
10047 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
10048 {"-", UNOP_NEG, PREC_PREFIX, 0},
10049 {"+", UNOP_PLUS, PREC_PREFIX, 0},
10050 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
10051 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
10052 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
10053 {".all", UNOP_IND, PREC_SUFFIX, 1},
10054 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
10055 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
10059 /* Assorted Types and Interfaces */
10061 struct type *builtin_type_ada_int;
10062 struct type *builtin_type_ada_short;
10063 struct type *builtin_type_ada_long;
10064 struct type *builtin_type_ada_long_long;
10065 struct type *builtin_type_ada_char;
10066 struct type *builtin_type_ada_float;
10067 struct type *builtin_type_ada_double;
10068 struct type *builtin_type_ada_long_double;
10069 struct type *builtin_type_ada_natural;
10070 struct type *builtin_type_ada_positive;
10071 struct type *builtin_type_ada_system_address;
10073 struct type **const (ada_builtin_types[]) =
10075 &builtin_type_ada_int,
10076 &builtin_type_ada_long,
10077 &builtin_type_ada_short,
10078 &builtin_type_ada_char,
10079 &builtin_type_ada_float,
10080 &builtin_type_ada_double,
10081 &builtin_type_ada_long_long,
10082 &builtin_type_ada_long_double,
10083 &builtin_type_ada_natural, &builtin_type_ada_positive,
10084 /* The following types are carried over from C for convenience. */
10086 &builtin_type_long,
10087 &builtin_type_short,
10088 &builtin_type_char,
10089 &builtin_type_float,
10090 &builtin_type_double,
10091 &builtin_type_long_long,
10092 &builtin_type_void,
10093 &builtin_type_signed_char,
10094 &builtin_type_unsigned_char,
10095 &builtin_type_unsigned_short,
10096 &builtin_type_unsigned_int,
10097 &builtin_type_unsigned_long,
10098 &builtin_type_unsigned_long_long,
10099 &builtin_type_long_double,
10100 &builtin_type_complex,
10101 &builtin_type_double_complex,
10105 /* Not really used, but needed in the ada_language_defn. */
10108 emit_char (int c, struct ui_file *stream, int quoter)
10110 ada_emit_char (c, stream, quoter, 1);
10116 warnings_issued = 0;
10117 return ada_parse ();
10120 static const struct exp_descriptor ada_exp_descriptor =
10123 ada_operator_length,
10125 ada_dump_subexp_body,
10126 ada_evaluate_subexp
10129 const struct language_defn ada_language_defn = {
10130 "ada", /* Language name */
10135 case_sensitive_on, /* Yes, Ada is case-insensitive, but
10136 that's not quite what this means. */
10139 ada_lookup_minimal_symbol,
10140 #endif /* GNAT_GDB */
10141 &ada_exp_descriptor,
10145 ada_printchar, /* Print a character constant */
10146 ada_printstr, /* Function to print string constant */
10147 emit_char, /* Function to print single char (not used) */
10148 ada_create_fundamental_type, /* Create fundamental type in this language */
10149 ada_print_type, /* Print a type using appropriate syntax */
10150 ada_val_print, /* Print a value using appropriate syntax */
10151 ada_value_print, /* Print a top-level value */
10152 NULL, /* Language specific skip_trampoline */
10153 NULL, /* value_of_this */
10154 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
10155 basic_lookup_transparent_type,/* lookup_transparent_type */
10156 ada_la_decode, /* Language specific symbol demangler */
10157 {"", "", "", ""}, /* Binary format info */
10159 {"8#%lo#", "8#", "o", "#"}, /* Octal format info */
10160 {"%ld", "", "d", ""}, /* Decimal format info */
10161 {"16#%lx#", "16#", "x", "#"}, /* Hex format info */
10163 /* Copied from c-lang.c. */
10164 {"0%lo", "0", "o", ""}, /* Octal format info */
10165 {"%ld", "", "d", ""}, /* Decimal format info */
10166 {"0x%lx", "0x", "x", ""}, /* Hex format info */
10168 ada_op_print_tab, /* expression operators for printing */
10169 0, /* c-style arrays */
10170 1, /* String lower bound */
10171 &builtin_type_ada_char,
10172 ada_get_gdb_completer_word_break_characters,
10174 ada_translate_error_message, /* Substitute Ada-specific terminology
10175 in errors and warnings. */
10176 #endif /* GNAT_GDB */
10181 build_ada_types (void) {
10182 builtin_type_ada_int =
10183 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
10184 0, "integer", (struct objfile *) NULL);
10185 builtin_type_ada_long =
10186 init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
10187 0, "long_integer", (struct objfile *) NULL);
10188 builtin_type_ada_short =
10189 init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
10190 0, "short_integer", (struct objfile *) NULL);
10191 builtin_type_ada_char =
10192 init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10193 0, "character", (struct objfile *) NULL);
10194 builtin_type_ada_float =
10195 init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
10196 0, "float", (struct objfile *) NULL);
10197 builtin_type_ada_double =
10198 init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
10199 0, "long_float", (struct objfile *) NULL);
10200 builtin_type_ada_long_long =
10201 init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
10202 0, "long_long_integer", (struct objfile *) NULL);
10203 builtin_type_ada_long_double =
10204 init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
10205 0, "long_long_float", (struct objfile *) NULL);
10206 builtin_type_ada_natural =
10207 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
10208 0, "natural", (struct objfile *) NULL);
10209 builtin_type_ada_positive =
10210 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
10211 0, "positive", (struct objfile *) NULL);
10214 builtin_type_ada_system_address =
10215 lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
10216 (struct objfile *) NULL));
10217 TYPE_NAME (builtin_type_ada_system_address) = "system__address";
10221 _initialize_ada_language (void)
10224 build_ada_types ();
10225 deprecated_register_gdbarch_swap (NULL, 0, build_ada_types);
10226 add_language (&ada_language_defn);
10228 varsize_limit = 65536;
10231 (add_set_cmd ("varsize-limit", class_support, var_uinteger,
10232 (char *) &varsize_limit,
10233 "Set maximum bytes in dynamic-sized object.",
10234 &setlist), &showlist);
10235 obstack_init (&cache_space);
10236 #endif /* GNAT_GDB */
10238 obstack_init (&symbol_list_obstack);
10240 decoded_names_store = htab_create_alloc_ex
10241 (256, htab_hash_string, (int (*) (const void *, const void *)) streq,
10242 NULL, NULL, xmcalloc, xmfree);
10245 /* Create a fundamental Ada type using default reasonable for the current
10248 Some object/debugging file formats (DWARF version 1, COFF, etc) do not
10249 define fundamental types such as "int" or "double". Others (stabs or
10250 DWARF version 2, etc) do define fundamental types. For the formats which
10251 don't provide fundamental types, gdb can create such types using this
10254 FIXME: Some compilers distinguish explicitly signed integral types
10255 (signed short, signed int, signed long) from "regular" integral types
10256 (short, int, long) in the debugging information. There is some dis-
10257 agreement as to how useful this feature is. In particular, gcc does
10258 not support this. Also, only some debugging formats allow the
10259 distinction to be passed on to a debugger. For now, we always just
10260 use "short", "int", or "long" as the type name, for both the implicit
10261 and explicitly signed types. This also makes life easier for the
10262 gdb test suite since we don't have to account for the differences
10263 in output depending upon what the compiler and debugging format
10264 support. We will probably have to re-examine the issue when gdb
10265 starts taking it's fundamental type information directly from the
10268 static struct type *
10269 ada_create_fundamental_type (struct objfile *objfile, int typeid)
10271 struct type *type = NULL;
10276 /* FIXME: For now, if we are asked to produce a type not in this
10277 language, create the equivalent of a C integer type with the
10278 name "<?type?>". When all the dust settles from the type
10279 reconstruction work, this should probably become an error. */
10280 type = init_type (TYPE_CODE_INT,
10281 TARGET_INT_BIT / TARGET_CHAR_BIT,
10282 0, "<?type?>", objfile);
10283 warning ("internal error: no Ada fundamental type %d", typeid);
10286 type = init_type (TYPE_CODE_VOID,
10287 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10288 0, "void", objfile);
10291 type = init_type (TYPE_CODE_INT,
10292 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10293 0, "character", objfile);
10295 case FT_SIGNED_CHAR:
10296 type = init_type (TYPE_CODE_INT,
10297 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10298 0, "signed char", objfile);
10300 case FT_UNSIGNED_CHAR:
10301 type = init_type (TYPE_CODE_INT,
10302 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10303 TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
10306 type = init_type (TYPE_CODE_INT,
10307 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
10308 0, "short_integer", objfile);
10310 case FT_SIGNED_SHORT:
10311 type = init_type (TYPE_CODE_INT,
10312 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
10313 0, "short_integer", objfile);
10315 case FT_UNSIGNED_SHORT:
10316 type = init_type (TYPE_CODE_INT,
10317 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
10318 TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
10321 type = init_type (TYPE_CODE_INT,
10322 TARGET_INT_BIT / TARGET_CHAR_BIT,
10323 0, "integer", objfile);
10325 case FT_SIGNED_INTEGER:
10326 type = init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT, 0, "integer", objfile); /* FIXME -fnf */
10328 case FT_UNSIGNED_INTEGER:
10329 type = init_type (TYPE_CODE_INT,
10330 TARGET_INT_BIT / TARGET_CHAR_BIT,
10331 TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
10334 type = init_type (TYPE_CODE_INT,
10335 TARGET_LONG_BIT / TARGET_CHAR_BIT,
10336 0, "long_integer", objfile);
10338 case FT_SIGNED_LONG:
10339 type = init_type (TYPE_CODE_INT,
10340 TARGET_LONG_BIT / TARGET_CHAR_BIT,
10341 0, "long_integer", objfile);
10343 case FT_UNSIGNED_LONG:
10344 type = init_type (TYPE_CODE_INT,
10345 TARGET_LONG_BIT / TARGET_CHAR_BIT,
10346 TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
10349 type = init_type (TYPE_CODE_INT,
10350 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
10351 0, "long_long_integer", objfile);
10353 case FT_SIGNED_LONG_LONG:
10354 type = init_type (TYPE_CODE_INT,
10355 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
10356 0, "long_long_integer", objfile);
10358 case FT_UNSIGNED_LONG_LONG:
10359 type = init_type (TYPE_CODE_INT,
10360 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
10361 TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
10364 type = init_type (TYPE_CODE_FLT,
10365 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
10366 0, "float", objfile);
10368 case FT_DBL_PREC_FLOAT:
10369 type = init_type (TYPE_CODE_FLT,
10370 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
10371 0, "long_float", objfile);
10373 case FT_EXT_PREC_FLOAT:
10374 type = init_type (TYPE_CODE_FLT,
10375 TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
10376 0, "long_long_float", objfile);
10383 ada_dump_symtab (struct symtab *s)
10386 fprintf (stderr, "New symtab: [\n");
10387 fprintf (stderr, " Name: %s/%s;\n",
10388 s->dirname ? s->dirname : "?", s->filename ? s->filename : "?");
10389 fprintf (stderr, " Format: %s;\n", s->debugformat);
10390 if (s->linetable != NULL)
10392 fprintf (stderr, " Line table (section %d):\n", s->block_line_section);
10393 for (i = 0; i < s->linetable->nitems; i += 1)
10395 struct linetable_entry *e = s->linetable->item + i;
10396 fprintf (stderr, " %4ld: %8lx\n", (long) e->line, (long) e->pc);
10399 fprintf (stderr, "]\n");