2004-06-18 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger. Copyright
2 1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004.
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21
22 /* Sections of code marked
23
24 #ifdef GNAT_GDB
25 ...
26 #endif
27
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. */
33
34 #include "defs.h"
35 #include <stdio.h>
36 #include "gdb_string.h"
37 #include <ctype.h>
38 #include <stdarg.h>
39 #include "demangle.h"
40 #include "gdb_regex.h"
41 #include "frame.h"
42 #include "symtab.h"
43 #include "gdbtypes.h"
44 #include "gdbcmd.h"
45 #include "expression.h"
46 #include "parser-defs.h"
47 #include "language.h"
48 #include "c-lang.h"
49 #include "inferior.h"
50 #include "symfile.h"
51 #include "objfiles.h"
52 #include "breakpoint.h"
53 #include "gdbcore.h"
54 #include "hashtab.h"
55 #include "gdb_obstack.h"
56 #include "ada-lang.h"
57 #include "completer.h"
58 #include "gdb_stat.h"
59 #ifdef UI_OUT
60 #include "ui-out.h"
61 #endif
62 #include "block.h"
63 #include "infcall.h"
64 #include "dictionary.h"
65
66 #ifndef ADA_RETAIN_DOTS
67 #define ADA_RETAIN_DOTS 0
68 #endif
69
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. */
73
74 #ifndef TRUNCATION_TOWARDS_ZERO
75 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
76 #endif
77
78 #ifdef GNAT_GDB
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. */
83
84 struct string_vector
85 {
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. */
89 };
90
91 static struct string_vector xnew_string_vector (int initial_size);
92 static void string_vector_append (struct string_vector *sv, char *str);
93 #endif /* GNAT_GDB */
94
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);
99
100 static struct type *ada_create_fundamental_type (struct objfile *, int);
101
102 static void modify_general_field (char *, LONGEST, int, int);
103
104 static struct type *desc_base_type (struct type *);
105
106 static struct type *desc_bounds_type (struct type *);
107
108 static struct value *desc_bounds (struct value *);
109
110 static int fat_pntr_bounds_bitpos (struct type *);
111
112 static int fat_pntr_bounds_bitsize (struct type *);
113
114 static struct type *desc_data_type (struct type *);
115
116 static struct value *desc_data (struct value *);
117
118 static int fat_pntr_data_bitpos (struct type *);
119
120 static int fat_pntr_data_bitsize (struct type *);
121
122 static struct value *desc_one_bound (struct value *, int, int);
123
124 static int desc_bound_bitpos (struct type *, int, int);
125
126 static int desc_bound_bitsize (struct type *, int, int);
127
128 static struct type *desc_index_type (struct type *, int);
129
130 static int desc_arity (struct type *);
131
132 static int ada_type_match (struct type *, struct type *, int);
133
134 static int ada_args_match (struct symbol *, struct value **, int);
135
136 static struct value *ensure_lval (struct value *, CORE_ADDR *);
137
138 static struct value *convert_actual (struct value *, struct type *,
139 CORE_ADDR *);
140
141 static struct value *make_array_descriptor (struct type *, struct value *,
142 CORE_ADDR *);
143
144 static void ada_add_block_symbols (struct obstack *,
145 struct block *, const char *,
146 domain_enum, struct objfile *,
147 struct symtab *, int);
148
149 static int is_nonfunction (struct ada_symbol_info *, int);
150
151 static void add_defn_to_vec (struct obstack *, struct symbol *, struct block *,
152 struct symtab *);
153
154 static int num_defns_collected (struct obstack *);
155
156 static struct ada_symbol_info *defns_collected (struct obstack *, int);
157
158 static struct partial_symbol *ada_lookup_partial_symbol (struct partial_symtab
159 *, const char *, int,
160 domain_enum, int);
161
162 static struct symtab *symtab_for_sym (struct symbol *);
163
164 static struct value *resolve_subexp (struct expression **, int *, int,
165 struct type *);
166
167 static void replace_operator_with_call (struct expression **, int, int, int,
168 struct symbol *, struct block *);
169
170 static int possible_user_operator_p (enum exp_opcode, struct value **);
171
172 static char *ada_op_name (enum exp_opcode);
173
174 static const char *ada_decoded_op_name (enum exp_opcode);
175
176 static int numeric_type_p (struct type *);
177
178 static int integer_type_p (struct type *);
179
180 static int scalar_type_p (struct type *);
181
182 static int discrete_type_p (struct type *);
183
184 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
185 int, int, int *);
186
187 static char *extended_canonical_line_spec (struct symtab_and_line,
188 const char *);
189
190 static struct value *evaluate_subexp (struct type *, struct expression *,
191 int *, enum noside);
192
193 static struct value *evaluate_subexp_type (struct expression *, int *);
194
195 static struct type *ada_create_fundamental_type (struct objfile *, int);
196
197 static int is_dynamic_field (struct type *, int);
198
199 static struct type *to_fixed_variant_branch_type (struct type *, char *,
200 CORE_ADDR, struct value *);
201
202 static struct type *to_fixed_array_type (struct type *, struct value *, int);
203
204 static struct type *to_fixed_range_type (char *, struct value *,
205 struct objfile *);
206
207 static struct type *to_static_fixed_type (struct type *);
208
209 static struct value *unwrap_value (struct value *);
210
211 static struct type *packed_array_type (struct type *, long *);
212
213 static struct type *decode_packed_array_type (struct type *);
214
215 static struct value *decode_packed_array (struct value *);
216
217 static struct value *value_subscript_packed (struct value *, int,
218 struct value **);
219
220 static struct value *coerce_unspec_val_to_type (struct value *,
221 struct type *);
222
223 static struct value *get_var_value (char *, char *);
224
225 static int lesseq_defined_than (struct symbol *, struct symbol *);
226
227 static int equiv_types (struct type *, struct type *);
228
229 static int is_name_suffix (const char *);
230
231 static int wild_match (const char *, int, const char *);
232
233 static struct symtabs_and_lines
234 find_sal_from_funcs_and_line (const char *, int,
235 struct ada_symbol_info *, int);
236
237 static int find_line_in_linetable (struct linetable *, int,
238 struct ada_symbol_info *,
239 int, int *);
240
241 static int find_next_line_in_linetable (struct linetable *, int, int, int);
242
243 static void read_all_symtabs (const char *);
244
245 static int is_plausible_func_for_line (struct symbol *, int);
246
247 static struct value *ada_coerce_ref (struct value *);
248
249 static LONGEST pos_atr (struct value *);
250
251 static struct value *value_pos_atr (struct value *);
252
253 static struct value *value_val_atr (struct type *, struct value *);
254
255 static struct symbol *standard_lookup (const char *, const struct block *,
256 domain_enum);
257
258 extern void symtab_symbol_info (char *regexp, domain_enum kind,
259 int from_tty);
260
261 static struct value *ada_search_struct_field (char *, struct value *, int,
262 struct type *);
263
264 static struct value *ada_value_primitive_field (struct value *, int, int,
265 struct type *);
266
267 static int find_struct_field (char *, struct type *, int,
268 struct type **, int *, int *, int *);
269
270 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
271 struct value *);
272
273 static struct value *ada_to_fixed_value (struct value *);
274
275 static void adjust_pc_past_prologue (CORE_ADDR *);
276
277 static int ada_resolve_function (struct ada_symbol_info *, int,
278 struct value **, int, const char *,
279 struct type *);
280
281 static struct value *ada_coerce_to_simple_array (struct value *);
282
283 static int ada_is_direct_array_type (struct type *);
284
285 static void error_breakpoint_runtime_sym_not_found (const char *err_desc);
286
287 static int is_runtime_sym_defined (const char *name, int allow_tramp);
288
289 \f
290
291 /* Maximum-sized dynamic type. */
292 static unsigned int varsize_limit;
293
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 =
297 #ifdef VMS
298 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
299 #else
300 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
301 #endif
302
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";
306
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";
309
310 /* The name of the runtime function called when an unhandled exception
311 is raised. */
312 static const char raise_unhandled_sym_name[] = "__gnat_unhandled_exception";
313
314 /* The name of the runtime function called when an assert failure is
315 raised. */
316 static const char raise_assert_sym_name[] =
317 "system__assertions__raise_assert_failure";
318
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";
324
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(&)";
329
330 /* Limit on the number of warnings to raise per expression evaluation. */
331 static int warning_limit = 2;
332
333 /* Number of warning messages issued; reset to 0 by cleanups after
334 expression evaluation. */
335 static int warnings_issued = 0;
336
337 static const char *known_runtime_file_name_patterns[] = {
338 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
339 };
340
341 static const char *known_auxiliary_function_name_patterns[] = {
342 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
343 };
344
345 /* Space for allocating results of ada_lookup_symbol_list. */
346 static struct obstack symbol_list_obstack;
347
348 /* Utilities */
349
350 #ifdef GNAT_GDB
351
352 /* Create a new empty string_vector struct with an initial size of
353 INITIAL_SIZE. */
354
355 static struct string_vector
356 xnew_string_vector (int initial_size)
357 {
358 struct string_vector result;
359
360 result.array = (char **) xmalloc ((initial_size + 1) * sizeof (char *));
361 result.index = 0;
362 result.size = initial_size;
363
364 return result;
365 }
366
367 /* Add STR at the end of the given string vector SV. If SV is already
368 full, its size is automatically increased (doubled). */
369
370 static void
371 string_vector_append (struct string_vector *sv, char *str)
372 {
373 if (sv->index >= sv->size)
374 GROW_VECT (sv->array, sv->size, sv->size * 2);
375
376 sv->array[sv->index] = str;
377 sv->index++;
378 }
379
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. */
383
384 static const char *
385 ada_unqualified_name (const char *decoded_name)
386 {
387 const char *result = strrchr (decoded_name, '.');
388
389 if (result != NULL)
390 result++; /* Skip the dot... */
391 else
392 result = decoded_name;
393
394 return result;
395 }
396
397 /* Return a string starting with '<', followed by STR, and '>'.
398 The result is good until the next call. */
399
400 static char *
401 add_angle_brackets (const char *str)
402 {
403 static char *result = NULL;
404
405 xfree (result);
406 result = (char *) xmalloc ((strlen (str) + 3) * sizeof (char));
407
408 sprintf (result, "<%s>", str);
409 return result;
410 }
411
412 #endif /* GNAT_GDB */
413
414 static char *
415 ada_get_gdb_completer_word_break_characters (void)
416 {
417 return ada_completer_word_break_characters;
418 }
419
420 /* Read the string located at ADDR from the inferior and store the
421 result into BUF. */
422
423 static void
424 extract_string (CORE_ADDR addr, char *buf)
425 {
426 int char_index = 0;
427
428 /* Loop, reading one byte at a time, until we reach the '\000'
429 end-of-string marker. */
430 do
431 {
432 target_read_memory (addr + char_index * sizeof (char),
433 buf + char_index * sizeof (char), sizeof (char));
434 char_index++;
435 }
436 while (buf[char_index - 1] != '\000');
437 }
438
439 /* Return the name of the function owning the instruction located at PC.
440 Return NULL if no such function could be found. */
441
442 static char *
443 function_name_from_pc (CORE_ADDR pc)
444 {
445 char *func_name;
446
447 if (!find_pc_partial_function (pc, &func_name, NULL, NULL))
448 return NULL;
449
450 return func_name;
451 }
452
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. */
456
457 void
458 grow_vect (void **old_vect, size_t * size, size_t min_size, int element_size)
459 {
460 if (*size < min_size)
461 {
462 *size *= 2;
463 if (*size < min_size)
464 *size = min_size;
465 *old_vect = xrealloc (*old_vect, *size * element_size);
466 }
467 }
468
469 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
470 suffix of FIELD_NAME beginning "___". */
471
472 static int
473 field_name_match (const char *field_name, const char *target)
474 {
475 int len = strlen (target);
476 return
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)));
481 }
482
483
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. */
490
491 int
492 ada_get_field_index (const struct type *type, const char *field_name,
493 int maybe_missing)
494 {
495 int fieldno;
496 for (fieldno = 0; fieldno < TYPE_NFIELDS (type); fieldno++)
497 if (field_name_match (TYPE_FIELD_NAME (type, fieldno), field_name))
498 return fieldno;
499
500 if (!maybe_missing)
501 error ("Unable to find field %s in struct %s. Aborting",
502 field_name, TYPE_NAME (type));
503
504 return -1;
505 }
506
507 /* The length of the prefix of NAME prior to any "___" suffix. */
508
509 int
510 ada_name_prefix_len (const char *name)
511 {
512 if (name == NULL)
513 return 0;
514 else
515 {
516 const char *p = strstr (name, "___");
517 if (p == NULL)
518 return strlen (name);
519 else
520 return p - name;
521 }
522 }
523
524 /* Return non-zero if SUFFIX is a suffix of STR.
525 Return zero if STR is null. */
526
527 static int
528 is_suffix (const char *str, const char *suffix)
529 {
530 int len1, len2;
531 if (str == NULL)
532 return 0;
533 len1 = strlen (str);
534 len2 = strlen (suffix);
535 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
536 }
537
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
540 ADDRESS. */
541
542 struct value *
543 value_from_contents_and_address (struct type *type, char *valaddr,
544 CORE_ADDR address)
545 {
546 struct value *v = allocate_value (type);
547 if (valaddr == NULL)
548 VALUE_LAZY (v) = 1;
549 else
550 memcpy (VALUE_CONTENTS_RAW (v), valaddr, TYPE_LENGTH (type));
551 VALUE_ADDRESS (v) = address;
552 if (address != 0)
553 VALUE_LVAL (v) = lval_memory;
554 return v;
555 }
556
557 /* The contents of value VAL, treated as a value of type TYPE. The
558 result is an lval in memory if VAL is. */
559
560 static struct value *
561 coerce_unspec_val_to_type (struct value *val, struct type *type)
562 {
563 CHECK_TYPEDEF (type);
564 if (VALUE_TYPE (val) == type)
565 return val;
566 else
567 {
568 struct value *result;
569
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");
574
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;
583 else
584 memcpy (VALUE_CONTENTS_RAW (result), VALUE_CONTENTS (val),
585 TYPE_LENGTH (type));
586 return result;
587 }
588 }
589
590 static char *
591 cond_offset_host (char *valaddr, long offset)
592 {
593 if (valaddr == NULL)
594 return NULL;
595 else
596 return valaddr + offset;
597 }
598
599 static CORE_ADDR
600 cond_offset_target (CORE_ADDR address, long offset)
601 {
602 if (address == 0)
603 return 0;
604 else
605 return address + offset;
606 }
607
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
611 expression. */
612 static void
613 lim_warning (const char *format, long arg)
614 {
615 warnings_issued += 1;
616 if (warnings_issued <= warning_limit)
617 warning (format, arg);
618 }
619
620 static const char *
621 ada_translate_error_message (const char *string)
622 {
623 if (strcmp (string, "Invalid cast.") == 0)
624 return "Invalid type conversion.";
625 else
626 return string;
627 }
628
629 static LONGEST
630 MAX_OF_SIZE (int size)
631 {
632 LONGEST top_bit = (LONGEST) 1 << (size*8-2);
633 return top_bit | (top_bit-1);
634 }
635
636 static LONGEST
637 MIN_OF_SIZE (int size)
638 {
639 return - MAX_OF_SIZE (size) - 1;
640 }
641
642 static ULONGEST
643 UMAX_OF_SIZE (int size)
644 {
645 ULONGEST top_bit = (ULONGEST) 1 << (size*8-1);
646 return top_bit | (top_bit-1);
647 }
648
649 static ULONGEST
650 UMIN_OF_SIZE (int size)
651 {
652 return 0;
653 }
654
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)
658 {
659 switch (TYPE_CODE (type))
660 {
661 case TYPE_CODE_RANGE:
662 return value_from_longest (TYPE_TARGET_TYPE (type),
663 TYPE_HIGH_BOUND (type));
664 case TYPE_CODE_ENUM:
665 return
666 value_from_longest (type,
667 TYPE_FIELD_BITPOS (type, TYPE_NFIELDS (type)-1));
668 case TYPE_CODE_INT:
669 return value_from_longest (type, MAX_OF_TYPE (type));
670 default:
671 error ("Unexpected type in discrete_type_high_bound.");
672 }
673 }
674
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)
678 {
679 switch (TYPE_CODE (type))
680 {
681 case TYPE_CODE_RANGE:
682 return value_from_longest (TYPE_TARGET_TYPE (type),
683 TYPE_LOW_BOUND (type));
684 case TYPE_CODE_ENUM:
685 return value_from_longest (type, TYPE_FIELD_BITPOS (type, 0));
686 case TYPE_CODE_INT:
687 return value_from_longest (type, MIN_OF_TYPE (type));
688 default:
689 error ("Unexpected type in discrete_type_low_bound.");
690 }
691 }
692
693 /* The identity on non-range types. For range types, the underlying
694 non-range scalar type. */
695
696 static struct type *
697 base_type (struct type *type)
698 {
699 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
700 {
701 if (type == TYPE_TARGET_TYPE (type)
702 || TYPE_TARGET_TYPE (type) == NULL)
703 return type;
704 type = TYPE_TARGET_TYPE (type);
705 }
706 return type;
707 }
708
709 \f
710 /* Language Selection */
711
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).
714
715 MAIN_PST is not used. */
716
717 enum language
718 ada_update_initial_language (enum language lang,
719 struct partial_symtab *main_pst)
720 {
721 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
722 (struct objfile *) NULL) != NULL)
723 return language_ada;
724
725 return lang;
726 }
727
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. */
731
732 char *
733 ada_main_name (void)
734 {
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
742 in Ada. */
743 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
744
745 if (msym != NULL)
746 {
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.");
750
751 extract_string (main_program_name_addr, main_program_name);
752 return main_program_name;
753 }
754
755 /* The main procedure doesn't seem to be in Ada. */
756 return NULL;
757 }
758 \f
759 /* Symbols */
760
761 /* Table of Ada operators and their GNAT-encoded names. Last entry is pair
762 of NULLs. */
763
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},
786 {NULL, NULL}
787 };
788
789 /* Return non-zero if STR should be suppressed in info listings. */
790
791 static int
792 is_suppressed_name (const char *str)
793 {
794 if (strncmp (str, "_ada_", 5) == 0)
795 str += 5;
796 if (str[0] == '_' || str[0] == '\000')
797 return 1;
798 else
799 {
800 const char *p;
801 const char *suffix = strstr (str, "___");
802 if (suffix != NULL && suffix[3] != 'X')
803 return 1;
804 if (suffix == NULL)
805 suffix = str + strlen (str);
806 for (p = suffix - 1; p != str; p -= 1)
807 if (isupper (*p))
808 {
809 int i;
810 if (p[0] == 'X' && p[-1] != '_')
811 goto OK;
812 if (*p != 'O')
813 return 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)
817 goto OK;
818 return 1;
819 OK:;
820 }
821 return 0;
822 }
823 }
824
825 /* The "encoded" form of DECODED, according to GNAT conventions.
826 The result is valid until the next call to ada_encode. */
827
828 char *
829 ada_encode (const char *decoded)
830 {
831 static char *encoding_buffer = NULL;
832 static size_t encoding_buffer_size = 0;
833 const char *p;
834 int k;
835
836 if (decoded == NULL)
837 return NULL;
838
839 GROW_VECT (encoding_buffer, encoding_buffer_size,
840 2 * strlen (decoded) + 10);
841
842 k = 0;
843 for (p = decoded; *p != '\0'; p += 1)
844 {
845 if (!ADA_RETAIN_DOTS && *p == '.')
846 {
847 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
848 k += 2;
849 }
850 else if (*p == '"')
851 {
852 const struct ada_opname_map *mapping;
853
854 for (mapping = ada_opname_table;
855 mapping->encoded != NULL &&
856 strncmp (mapping->decoded, p,
857 strlen (mapping->decoded)) != 0;
858 mapping += 1)
859 ;
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);
864 break;
865 }
866 else
867 {
868 encoding_buffer[k] = *p;
869 k += 1;
870 }
871 }
872
873 encoding_buffer[k] = '\0';
874 return encoding_buffer;
875 }
876
877 /* Return NAME folded to lower case, or, if surrounded by single
878 quotes, unfolded, but with the quotes stripped away. Result good
879 to next call. */
880
881 char *
882 ada_fold_name (const char *name)
883 {
884 static char *fold_buffer = NULL;
885 static size_t fold_buffer_size = 0;
886
887 int len = strlen (name);
888 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
889
890 if (name[0] == '\'')
891 {
892 strncpy (fold_buffer, name + 1, len - 2);
893 fold_buffer[len - 2] = '\000';
894 }
895 else
896 {
897 int i;
898 for (i = 0; i <= len; i += 1)
899 fold_buffer[i] = tolower (name[i]);
900 }
901
902 return fold_buffer;
903 }
904
905 /* decode:
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
914 'X'.
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).
918
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
921 is returned. */
922
923 const char *
924 ada_decode (const char *encoded)
925 {
926 int i, j;
927 int len0;
928 const char *p;
929 char *decoded;
930 int at_start_name;
931 static char *decoding_buffer = NULL;
932 static size_t decoding_buffer_size = 0;
933
934 if (strncmp (encoded, "_ada_", 5) == 0)
935 encoded += 5;
936
937 if (encoded[0] == '_' || encoded[0] == '<')
938 goto Suppress;
939
940 /* Remove trailing .{DIGIT}+ or ___{DIGIT}+. */
941 len0 = strlen (encoded);
942 if (len0 > 1 && isdigit (encoded[len0 - 1]))
943 {
944 i = len0 - 2;
945 while (i > 0 && isdigit (encoded[i]))
946 i--;
947 if (i >= 0 && encoded[i] == '.')
948 len0 = i;
949 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
950 len0 = i - 2;
951 }
952
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)
959 {
960 if (p[3] == 'X')
961 len0 = p - encoded;
962 else
963 goto Suppress;
964 }
965
966 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
967 len0 -= 3;
968
969 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
970 len0 -= 1;
971
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;
975
976 if (len0 > 1 && isdigit (encoded[len0 - 1]))
977 {
978 i = len0 - 2;
979 while ((i >= 0 && isdigit (encoded[i]))
980 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
981 i -= 1;
982 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
983 len0 = i - 1;
984 else if (encoded[i] == '$')
985 len0 = i;
986 }
987
988 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
989 decoded[j] = encoded[i];
990
991 at_start_name = 1;
992 while (i < len0)
993 {
994 if (at_start_name && encoded[i] == 'O')
995 {
996 int k;
997 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
998 {
999 int op_len = strlen (ada_opname_table[k].encoded);
1000 if (strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1001 op_len - 1) == 0
1002 && !isalnum (encoded[i + op_len]))
1003 {
1004 strcpy (decoded + j, ada_opname_table[k].decoded);
1005 at_start_name = 0;
1006 i += op_len;
1007 j += strlen (ada_opname_table[k].decoded);
1008 break;
1009 }
1010 }
1011 if (ada_opname_table[k].encoded != NULL)
1012 continue;
1013 }
1014 at_start_name = 0;
1015
1016 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1017 i += 2;
1018 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1019 {
1020 do
1021 i += 1;
1022 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1023 if (i < len0)
1024 goto Suppress;
1025 }
1026 else if (!ADA_RETAIN_DOTS
1027 && i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1028 {
1029 decoded[j] = '.';
1030 at_start_name = 1;
1031 i += 2;
1032 j += 1;
1033 }
1034 else
1035 {
1036 decoded[j] = encoded[i];
1037 i += 1;
1038 j += 1;
1039 }
1040 }
1041 decoded[j] = '\000';
1042
1043 for (i = 0; decoded[i] != '\0'; i += 1)
1044 if (isupper (decoded[i]) || decoded[i] == ' ')
1045 goto Suppress;
1046
1047 if (strcmp (decoded, encoded) == 0)
1048 return encoded;
1049 else
1050 return decoded;
1051
1052 Suppress:
1053 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1054 decoded = decoding_buffer;
1055 if (encoded[0] == '<')
1056 strcpy (decoded, encoded);
1057 else
1058 sprintf (decoded, "<%s>", encoded);
1059 return decoded;
1060
1061 }
1062
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;
1069
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
1075 GSYMBOL).
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.
1079 */
1080
1081 char *ada_decode_symbol (const struct general_symbol_info *gsymbol)
1082 {
1083 char **resultp =
1084 (char **) &gsymbol->language_specific.cplus_specific.demangled_name;
1085 if (*resultp == NULL)
1086 {
1087 const char *decoded = ada_decode (gsymbol->name);
1088 if (gsymbol->bfd_section != NULL)
1089 {
1090 bfd *obfd = gsymbol->bfd_section->owner;
1091 if (obfd != NULL)
1092 {
1093 struct objfile *objf;
1094 ALL_OBJFILES (objf)
1095 {
1096 if (obfd == objf->obfd)
1097 {
1098 *resultp = obsavestring (decoded, strlen (decoded),
1099 &objf->objfile_obstack);
1100 break;
1101 }
1102 }
1103 }
1104 }
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)
1110 {
1111 char **slot =
1112 (char **) htab_find_slot (decoded_names_store,
1113 decoded, INSERT);
1114 if (*slot == NULL)
1115 *slot = xstrdup (decoded);
1116 *resultp = *slot;
1117 }
1118 }
1119
1120 return *resultp;
1121 }
1122
1123 char *ada_la_decode (const char *encoded, int options)
1124 {
1125 return xstrdup (ada_decode (encoded));
1126 }
1127
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. */
1134
1135 int
1136 ada_match_name (const char *sym_name, const char *name, int wild)
1137 {
1138 if (sym_name == NULL || name == NULL)
1139 return 0;
1140 else if (wild)
1141 return wild_match (name, strlen (name), sym_name);
1142 else
1143 {
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));
1150 }
1151 }
1152
1153 /* True (non-zero) iff, in Ada mode, the symbol SYM should be
1154 suppressed in info listings. */
1155
1156 int
1157 ada_suppress_symbol_printing (struct symbol *sym)
1158 {
1159 if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN)
1160 return 1;
1161 else
1162 return is_suppressed_name (SYMBOL_LINKAGE_NAME (sym));
1163 }
1164 \f
1165
1166 /* Arrays */
1167
1168 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
1169
1170 static char *bound_name[] = {
1171 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1172 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1173 };
1174
1175 /* Maximum number of array dimensions we are prepared to handle. */
1176
1177 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1178
1179 /* Like modify_field, but allows bitpos > wordlength. */
1180
1181 static void
1182 modify_general_field (char *addr, LONGEST fieldval, int bitpos, int bitsize)
1183 {
1184 modify_field (addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
1185 }
1186
1187
1188 /* The desc_* routines return primitive portions of array descriptors
1189 (fat pointers). */
1190
1191 /* The descriptor or array type, if any, indicated by TYPE; removes
1192 level of indirection, if needed. */
1193
1194 static struct type *
1195 desc_base_type (struct type *type)
1196 {
1197 if (type == NULL)
1198 return NULL;
1199 CHECK_TYPEDEF (type);
1200 if (type != NULL &&
1201 (TYPE_CODE (type) == TYPE_CODE_PTR
1202 || TYPE_CODE (type) == TYPE_CODE_REF))
1203 return check_typedef (TYPE_TARGET_TYPE (type));
1204 else
1205 return type;
1206 }
1207
1208 /* True iff TYPE indicates a "thin" array pointer type. */
1209
1210 static int
1211 is_thin_pntr (struct type *type)
1212 {
1213 return
1214 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1215 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1216 }
1217
1218 /* The descriptor type for thin pointer type TYPE. */
1219
1220 static struct type *
1221 thin_descriptor_type (struct type *type)
1222 {
1223 struct type *base_type = desc_base_type (type);
1224 if (base_type == NULL)
1225 return NULL;
1226 if (is_suffix (ada_type_name (base_type), "___XVE"))
1227 return base_type;
1228 else
1229 {
1230 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1231 if (alt_type == NULL)
1232 return base_type;
1233 else
1234 return alt_type;
1235 }
1236 }
1237
1238 /* A pointer to the array data for thin-pointer value VAL. */
1239
1240 static struct value *
1241 thin_data_pntr (struct value *val)
1242 {
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)),
1246 value_copy (val));
1247 else
1248 return value_from_longest (desc_data_type (thin_descriptor_type (type)),
1249 VALUE_ADDRESS (val) + VALUE_OFFSET (val));
1250 }
1251
1252 /* True iff TYPE indicates a "thick" array pointer type. */
1253
1254 static int
1255 is_thick_pntr (struct type *type)
1256 {
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);
1260 }
1261
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. */
1264
1265 static struct type *
1266 desc_bounds_type (struct type *type)
1267 {
1268 struct type *r;
1269
1270 type = desc_base_type (type);
1271
1272 if (type == NULL)
1273 return NULL;
1274 else if (is_thin_pntr (type))
1275 {
1276 type = thin_descriptor_type (type);
1277 if (type == NULL)
1278 return NULL;
1279 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1280 if (r != NULL)
1281 return check_typedef (r);
1282 }
1283 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1284 {
1285 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1286 if (r != NULL)
1287 return check_typedef (TYPE_TARGET_TYPE (check_typedef (r)));
1288 }
1289 return NULL;
1290 }
1291
1292 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1293 one, a pointer to its bounds data. Otherwise NULL. */
1294
1295 static struct value *
1296 desc_bounds (struct value *arr)
1297 {
1298 struct type *type = check_typedef (VALUE_TYPE (arr));
1299 if (is_thin_pntr (type))
1300 {
1301 struct type *bounds_type =
1302 desc_bounds_type (thin_descriptor_type (type));
1303 LONGEST addr;
1304
1305 if (desc_bounds_type == NULL)
1306 error ("Bad GNAT array descriptor");
1307
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);
1313 else
1314 addr = VALUE_ADDRESS (arr) + VALUE_OFFSET (arr);
1315
1316 return
1317 value_from_longest (lookup_pointer_type (bounds_type),
1318 addr - TYPE_LENGTH (bounds_type));
1319 }
1320
1321 else if (is_thick_pntr (type))
1322 return value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1323 "Bad GNAT array descriptor");
1324 else
1325 return NULL;
1326 }
1327
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. */
1330
1331 static int
1332 fat_pntr_bounds_bitpos (struct type *type)
1333 {
1334 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1335 }
1336
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. */
1339
1340 static int
1341 fat_pntr_bounds_bitsize (struct type *type)
1342 {
1343 type = desc_base_type (type);
1344
1345 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1346 return TYPE_FIELD_BITSIZE (type, 1);
1347 else
1348 return 8 * TYPE_LENGTH (check_typedef (TYPE_FIELD_TYPE (type, 1)));
1349 }
1350
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. */
1355
1356 static struct type *
1357 desc_data_type (struct type *type)
1358 {
1359 type = desc_base_type (type);
1360
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);
1367 else
1368 return NULL;
1369 }
1370
1371 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1372 its array data. */
1373
1374 static struct value *
1375 desc_data (struct value *arr)
1376 {
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");
1383 else
1384 return NULL;
1385 }
1386
1387
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. */
1390
1391 static int
1392 fat_pntr_data_bitpos (struct type *type)
1393 {
1394 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1395 }
1396
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. */
1399
1400 static int
1401 fat_pntr_data_bitsize (struct type *type)
1402 {
1403 type = desc_base_type (type);
1404
1405 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1406 return TYPE_FIELD_BITSIZE (type, 0);
1407 else
1408 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1409 }
1410
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. */
1414
1415 static struct value *
1416 desc_one_bound (struct value *bounds, int i, int which)
1417 {
1418 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1419 "Bad GNAT array descriptor bounds");
1420 }
1421
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. */
1425
1426 static int
1427 desc_bound_bitpos (struct type *type, int i, int which)
1428 {
1429 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1430 }
1431
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. */
1435
1436 static int
1437 desc_bound_bitsize (struct type *type, int i, int which)
1438 {
1439 type = desc_base_type (type);
1440
1441 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1442 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1443 else
1444 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1445 }
1446
1447 /* If TYPE is the type of an array-bounds structure, the type of its
1448 Ith bound (numbering from 1). Otherwise, NULL. */
1449
1450 static struct type *
1451 desc_index_type (struct type *type, int i)
1452 {
1453 type = desc_base_type (type);
1454
1455 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1456 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1457 else
1458 return NULL;
1459 }
1460
1461 /* The number of index positions in the array-bounds type TYPE.
1462 Return 0 if TYPE is NULL. */
1463
1464 static int
1465 desc_arity (struct type *type)
1466 {
1467 type = desc_base_type (type);
1468
1469 if (type != NULL)
1470 return TYPE_NFIELDS (type) / 2;
1471 return 0;
1472 }
1473
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
1476 type). */
1477
1478 static int
1479 ada_is_direct_array_type (struct type *type)
1480 {
1481 if (type == NULL)
1482 return 0;
1483 CHECK_TYPEDEF (type);
1484 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1485 || ada_is_array_descriptor_type (type));
1486 }
1487
1488 /* Non-zero iff TYPE is a simple array type or pointer to one. */
1489
1490 int
1491 ada_is_simple_array_type (struct type *type)
1492 {
1493 if (type == NULL)
1494 return 0;
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));
1499 }
1500
1501 /* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1502
1503 int
1504 ada_is_array_descriptor_type (struct type *type)
1505 {
1506 struct type *data_type = desc_data_type (type);
1507
1508 if (type == NULL)
1509 return 0;
1510 CHECK_TYPEDEF (type);
1511 return
1512 data_type != NULL
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)
1516 ||
1517 TYPE_CODE (data_type) == TYPE_CODE_ARRAY)
1518 && desc_arity (desc_bounds_type (type)) > 0;
1519 }
1520
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
1524 is still needed. */
1525
1526 int
1527 ada_is_bogus_array_descriptor (struct type *type)
1528 {
1529 return
1530 type != NULL
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);
1535 }
1536
1537
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
1544 a descriptor. */
1545 struct type *
1546 ada_type_of_array (struct value *arr, int bounds)
1547 {
1548 if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1549 return decode_packed_array_type (VALUE_TYPE (arr));
1550
1551 if (!ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1552 return VALUE_TYPE (arr);
1553
1554 if (!bounds)
1555 return
1556 check_typedef (TYPE_TARGET_TYPE (desc_data_type (VALUE_TYPE (arr))));
1557 else
1558 {
1559 struct type *elt_type;
1560 int arity;
1561 struct value *descriptor;
1562 struct objfile *objf = TYPE_OBJFILE (VALUE_TYPE (arr));
1563
1564 elt_type = ada_array_element_type (VALUE_TYPE (arr), -1);
1565 arity = ada_array_arity (VALUE_TYPE (arr));
1566
1567 if (elt_type == NULL || arity == 0)
1568 return check_typedef (VALUE_TYPE (arr));
1569
1570 descriptor = desc_bounds (arr);
1571 if (value_as_long (descriptor) == 0)
1572 return NULL;
1573 while (arity > 0)
1574 {
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);
1579 arity -= 1;
1580
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);
1585 }
1586
1587 return lookup_pointer_type (elt_type);
1588 }
1589 }
1590
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. */
1595
1596 struct value *
1597 ada_coerce_to_simple_array_ptr (struct value *arr)
1598 {
1599 if (ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1600 {
1601 struct type *arrType = ada_type_of_array (arr, 1);
1602 if (arrType == NULL)
1603 return NULL;
1604 return value_cast (arrType, value_copy (desc_data (arr)));
1605 }
1606 else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1607 return decode_packed_array (arr);
1608 else
1609 return arr;
1610 }
1611
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). */
1615
1616 static struct value *
1617 ada_coerce_to_simple_array (struct value *arr)
1618 {
1619 if (ada_is_array_descriptor_type (VALUE_TYPE (arr)))
1620 {
1621 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1622 if (arrVal == NULL)
1623 error ("Bounds unavailable for null array pointer.");
1624 return value_ind (arrVal);
1625 }
1626 else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1627 return decode_packed_array (arr);
1628 else
1629 return arr;
1630 }
1631
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. */
1635
1636 struct type *
1637 ada_coerce_to_simple_array_type (struct type *type)
1638 {
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);
1645 return result;
1646 }
1647
1648 /* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1649
1650 int
1651 ada_is_packed_array_type (struct type *type)
1652 {
1653 if (type == NULL)
1654 return 0;
1655 type = desc_base_type (type);
1656 CHECK_TYPEDEF (type);
1657 return
1658 ada_type_name (type) != NULL
1659 && strstr (ada_type_name (type), "___XP") != NULL;
1660 }
1661
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
1669 in bits. */
1670
1671 static struct type *
1672 packed_array_type (struct type *type, long *elt_bits)
1673 {
1674 struct type *new_elt_type;
1675 struct type *new_type;
1676 LONGEST low_bound, high_bound;
1677
1678 CHECK_TYPEDEF (type);
1679 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1680 return type;
1681
1682 new_type = alloc_type (TYPE_OBJFILE (type));
1683 new_elt_type = packed_array_type (check_typedef (TYPE_TARGET_TYPE (type)),
1684 elt_bits);
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);
1688
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;
1694 else
1695 {
1696 *elt_bits *= (high_bound - low_bound + 1);
1697 TYPE_LENGTH (new_type) =
1698 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1699 }
1700
1701 TYPE_FLAGS (new_type) |= TYPE_FLAG_FIXED_INSTANCE;
1702 return new_type;
1703 }
1704
1705 /* The array type encoded by TYPE, where ada_is_packed_array_type (TYPE). */
1706
1707 static struct type *
1708 decode_packed_array_type (struct type *type)
1709 {
1710 struct symbol *sym;
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;
1716 long bits;
1717 int i, n;
1718
1719 type = desc_base_type (type);
1720
1721 memcpy (name, raw_name, tail - raw_name);
1722 name[tail - raw_name] = '\000';
1723
1724 sym = standard_lookup (name, get_selected_block (0), VAR_DOMAIN);
1725 if (sym == NULL || SYMBOL_TYPE (sym) == NULL)
1726 {
1727 lim_warning ("could not find bounds information on packed array", 0);
1728 return NULL;
1729 }
1730 shadow_type = SYMBOL_TYPE (sym);
1731
1732 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
1733 {
1734 lim_warning ("could not understand bounds information on packed array",
1735 0);
1736 return NULL;
1737 }
1738
1739 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1740 {
1741 lim_warning
1742 ("could not understand bit size information on packed array", 0);
1743 return NULL;
1744 }
1745
1746 return packed_array_type (shadow_type, &bits);
1747 }
1748
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. */
1754
1755 static struct value *
1756 decode_packed_array (struct value *arr)
1757 {
1758 struct type *type;
1759
1760 arr = ada_coerce_ref (arr);
1761 if (TYPE_CODE (VALUE_TYPE (arr)) == TYPE_CODE_PTR)
1762 arr = ada_value_ind (arr);
1763
1764 type = decode_packed_array_type (VALUE_TYPE (arr));
1765 if (type == NULL)
1766 {
1767 error ("can't unpack array");
1768 return NULL;
1769 }
1770 return coerce_unspec_val_to_type (arr, type);
1771 }
1772
1773
1774 /* The value of the element of packed array ARR at the ARITY indices
1775 given in IND. ARR must be a simple array. */
1776
1777 static struct value *
1778 value_subscript_packed (struct value *arr, int arity, struct value **ind)
1779 {
1780 int i;
1781 int bits, elt_off, bit_off;
1782 long elt_total_bit_offset;
1783 struct type *elt_type;
1784 struct value *v;
1785
1786 bits = 0;
1787 elt_total_bit_offset = 0;
1788 elt_type = check_typedef (VALUE_TYPE (arr));
1789 for (i = 0; i < arity; i += 1)
1790 {
1791 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
1792 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
1793 error
1794 ("attempt to do packed indexing of something other than a packed array");
1795 else
1796 {
1797 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
1798 LONGEST lowerbound, upperbound;
1799 LONGEST idx;
1800
1801 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
1802 {
1803 lim_warning ("don't know bounds of array", 0);
1804 lowerbound = upperbound = 0;
1805 }
1806
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));
1813 }
1814 }
1815 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
1816 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
1817
1818 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
1819 bits, elt_type);
1820 if (VALUE_LVAL (arr) == lval_internalvar)
1821 VALUE_LVAL (v) = lval_internalvar_component;
1822 else
1823 VALUE_LVAL (v) = VALUE_LVAL (arr);
1824 return v;
1825 }
1826
1827 /* Non-zero iff TYPE includes negative integer values. */
1828
1829 static int
1830 has_negatives (struct type *type)
1831 {
1832 switch (TYPE_CODE (type))
1833 {
1834 default:
1835 return 0;
1836 case TYPE_CODE_INT:
1837 return !TYPE_UNSIGNED (type);
1838 case TYPE_CODE_RANGE:
1839 return TYPE_LOW_BOUND (type) < 0;
1840 }
1841 }
1842
1843
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. */
1852
1853 struct value *
1854 ada_value_primitive_packed_val (struct value *obj, char *valaddr, long offset,
1855 int bit_offset, int bit_size,
1856 struct type *type)
1857 {
1858 struct value *v;
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 */
1869 unsigned char sign;
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;
1874
1875 CHECK_TYPEDEF (type);
1876
1877 if (obj == NULL)
1878 {
1879 v = allocate_value (type);
1880 bytes = (unsigned char *) (valaddr + offset);
1881 }
1882 else if (VALUE_LAZY (obj))
1883 {
1884 v = value_at (type,
1885 VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset, NULL);
1886 bytes = (unsigned char *) alloca (len);
1887 read_memory (VALUE_ADDRESS (v), bytes, len);
1888 }
1889 else
1890 {
1891 v = allocate_value (type);
1892 bytes = (unsigned char *) VALUE_CONTENTS (obj) + offset;
1893 }
1894
1895 if (obj != NULL)
1896 {
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)
1904 {
1905 VALUE_ADDRESS (v) += 1;
1906 VALUE_BITPOS (v) -= HOST_CHAR_BIT;
1907 }
1908 }
1909 else
1910 VALUE_BITSIZE (v) = bit_size;
1911 unpacked = (unsigned char *) VALUE_CONTENTS (v);
1912
1913 srcBitsLeft = bit_size;
1914 nsrc = len;
1915 ntarg = TYPE_LENGTH (type);
1916 sign = 0;
1917 if (bit_size == 0)
1918 {
1919 memset (unpacked, 0, TYPE_LENGTH (type));
1920 return v;
1921 }
1922 else if (BITS_BIG_ENDIAN)
1923 {
1924 src = len - 1;
1925 if (has_negatives (type) &&
1926 ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
1927 sign = ~0;
1928
1929 unusedLS =
1930 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
1931 % HOST_CHAR_BIT;
1932
1933 switch (TYPE_CODE (type))
1934 {
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... */
1939 accumSize =
1940 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
1941 /* ... And are placed at the beginning (most-significant) bytes
1942 of the target. */
1943 targ = src;
1944 break;
1945 default:
1946 accumSize = 0;
1947 targ = TYPE_LENGTH (type) - 1;
1948 break;
1949 }
1950 }
1951 else
1952 {
1953 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
1954
1955 src = targ = 0;
1956 unusedLS = bit_offset;
1957 accumSize = 0;
1958
1959 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
1960 sign = ~0;
1961 }
1962
1963 accum = 0;
1964 while (nsrc > 0)
1965 {
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)) -
1970 1;
1971 /* Sign-extend bits for this byte. */
1972 unsigned int signMask = sign & ~unusedMSMask;
1973 accum |=
1974 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
1975 accumSize += HOST_CHAR_BIT - unusedLS;
1976 if (accumSize >= HOST_CHAR_BIT)
1977 {
1978 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1979 accumSize -= HOST_CHAR_BIT;
1980 accum >>= HOST_CHAR_BIT;
1981 ntarg -= 1;
1982 targ += delta;
1983 }
1984 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
1985 unusedLS = 0;
1986 nsrc -= 1;
1987 src += delta;
1988 }
1989 while (ntarg > 0)
1990 {
1991 accum |= sign << accumSize;
1992 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1993 accumSize -= HOST_CHAR_BIT;
1994 accum >>= HOST_CHAR_BIT;
1995 ntarg -= 1;
1996 targ += delta;
1997 }
1998
1999 return v;
2000 }
2001
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
2004 not overlap. */
2005 static void
2006 move_bits (char *target, int targ_offset, char *source, int src_offset, int n)
2007 {
2008 unsigned int accum, mask;
2009 int accum_bits, chunk_size;
2010
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)
2016 {
2017 accum = (unsigned char) *source;
2018 source += 1;
2019 accum_bits = HOST_CHAR_BIT - src_offset;
2020
2021 while (n > 0)
2022 {
2023 int unused_right;
2024 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2025 accum_bits += HOST_CHAR_BIT;
2026 source += 1;
2027 chunk_size = HOST_CHAR_BIT - targ_offset;
2028 if (chunk_size > n)
2029 chunk_size = n;
2030 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2031 mask = ((1 << chunk_size) - 1) << unused_right;
2032 *target =
2033 (*target & ~mask)
2034 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2035 n -= chunk_size;
2036 accum_bits -= chunk_size;
2037 target += 1;
2038 targ_offset = 0;
2039 }
2040 }
2041 else
2042 {
2043 accum = (unsigned char) *source >> src_offset;
2044 source += 1;
2045 accum_bits = HOST_CHAR_BIT - src_offset;
2046
2047 while (n > 0)
2048 {
2049 accum = accum + ((unsigned char) *source << accum_bits);
2050 accum_bits += HOST_CHAR_BIT;
2051 source += 1;
2052 chunk_size = HOST_CHAR_BIT - targ_offset;
2053 if (chunk_size > n)
2054 chunk_size = n;
2055 mask = ((1 << chunk_size) - 1) << targ_offset;
2056 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2057 n -= chunk_size;
2058 accum_bits -= chunk_size;
2059 accum >>= chunk_size;
2060 target += 1;
2061 targ_offset = 0;
2062 }
2063 }
2064 }
2065
2066
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. */
2071
2072 static struct value *
2073 ada_value_assign (struct value *toval, struct value *fromval)
2074 {
2075 struct type *type = VALUE_TYPE (toval);
2076 int bits = VALUE_BITSIZE (toval);
2077
2078 if (!toval->modifiable)
2079 error ("Left operand of assignment is not a modifiable lvalue.");
2080
2081 COERCE_REF (toval);
2082
2083 if (VALUE_LVAL (toval) == lval_memory
2084 && bits > 0
2085 && (TYPE_CODE (type) == TYPE_CODE_FLT
2086 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2087 {
2088 int len =
2089 (VALUE_BITPOS (toval) + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2090 char *buffer = (char *) alloca (len);
2091 struct value *val;
2092
2093 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2094 fromval = value_cast (type, fromval);
2095
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 -
2101 bits, bits);
2102 else
2103 move_bits (buffer, VALUE_BITPOS (toval), VALUE_CONTENTS (fromval),
2104 0, bits);
2105 write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer,
2106 len);
2107
2108 val = value_copy (toval);
2109 memcpy (VALUE_CONTENTS_RAW (val), VALUE_CONTENTS (fromval),
2110 TYPE_LENGTH (type));
2111 VALUE_TYPE (val) = type;
2112
2113 return val;
2114 }
2115
2116 return value_assign (toval, fromval);
2117 }
2118
2119
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
2122 thereto. */
2123
2124 struct value *
2125 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2126 {
2127 int k;
2128 struct value *elt;
2129 struct type *elt_type;
2130
2131 elt = ada_coerce_to_simple_array (arr);
2132
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);
2137
2138 for (k = 0; k < arity; k += 1)
2139 {
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]));
2143 }
2144 return elt;
2145 }
2146
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. */
2150
2151 struct value *
2152 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2153 struct value **ind)
2154 {
2155 int k;
2156
2157 for (k = 0; k < arity; k += 1)
2158 {
2159 LONGEST lwb, upb;
2160 struct value *idx;
2161
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)),
2165 value_copy (arr));
2166 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2167 idx = value_pos_atr (ind[k]);
2168 if (lwb != 0)
2169 idx = value_sub (idx, value_from_longest (builtin_type_int, lwb));
2170 arr = value_add (arr, idx);
2171 type = TYPE_TARGET_TYPE (type);
2172 }
2173
2174 return value_ind (arr);
2175 }
2176
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. */
2181
2182 int
2183 ada_array_arity (struct type *type)
2184 {
2185 int arity;
2186
2187 if (type == NULL)
2188 return 0;
2189
2190 type = desc_base_type (type);
2191
2192 arity = 0;
2193 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2194 return desc_arity (desc_bounds_type (type));
2195 else
2196 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2197 {
2198 arity += 1;
2199 type = check_typedef (TYPE_TARGET_TYPE (type));
2200 }
2201
2202 return arity;
2203 }
2204
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. */
2209
2210 struct type *
2211 ada_array_element_type (struct type *type, int nindices)
2212 {
2213 type = desc_base_type (type);
2214
2215 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2216 {
2217 int k;
2218 struct type *p_array_type;
2219
2220 p_array_type = desc_data_type (type);
2221
2222 k = ada_array_arity (type);
2223 if (k == 0)
2224 return NULL;
2225
2226 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
2227 if (nindices >= 0 && k > nindices)
2228 k = nindices;
2229 p_array_type = TYPE_TARGET_TYPE (p_array_type);
2230 while (k > 0 && p_array_type != NULL)
2231 {
2232 p_array_type = check_typedef (TYPE_TARGET_TYPE (p_array_type));
2233 k -= 1;
2234 }
2235 return p_array_type;
2236 }
2237 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2238 {
2239 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2240 {
2241 type = TYPE_TARGET_TYPE (type);
2242 nindices -= 1;
2243 }
2244 return type;
2245 }
2246
2247 return NULL;
2248 }
2249
2250 /* The type of nth index in arrays of given type (n numbering from 1).
2251 Does not examine memory. */
2252
2253 struct type *
2254 ada_index_type (struct type *type, int n)
2255 {
2256 struct type *result_type;
2257
2258 type = desc_base_type (type);
2259
2260 if (n > ada_array_arity (type))
2261 return NULL;
2262
2263 if (ada_is_simple_array_type (type))
2264 {
2265 int i;
2266
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;
2276
2277 return result_type;
2278 }
2279 else
2280 return desc_index_type (desc_bounds_type (type), n);
2281 }
2282
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. */
2289
2290 LONGEST
2291 ada_array_bound_from_type (struct type * arr_type, int n, int which,
2292 struct type ** typep)
2293 {
2294 struct type *type;
2295 struct type *index_type_desc;
2296
2297 if (ada_is_packed_array_type (arr_type))
2298 arr_type = decode_packed_array_type (arr_type);
2299
2300 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2301 {
2302 if (typep != NULL)
2303 *typep = builtin_type_int;
2304 return (LONGEST) - which;
2305 }
2306
2307 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2308 type = TYPE_TARGET_TYPE (arr_type);
2309 else
2310 type = arr_type;
2311
2312 index_type_desc = ada_find_parallel_type (type, "___XA");
2313 if (index_type_desc == NULL)
2314 {
2315 struct type *range_type;
2316 struct type *index_type;
2317
2318 while (n > 1)
2319 {
2320 type = TYPE_TARGET_TYPE (type);
2321 n -= 1;
2322 }
2323
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;
2328 if (typep != NULL)
2329 *typep = index_type;
2330 return
2331 (LONGEST) (which == 0
2332 ? TYPE_LOW_BOUND (range_type)
2333 : TYPE_HIGH_BOUND (range_type));
2334 }
2335 else
2336 {
2337 struct type *index_type =
2338 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2339 NULL, TYPE_OBJFILE (arr_type));
2340 if (typep != NULL)
2341 *typep = TYPE_TARGET_TYPE (index_type);
2342 return
2343 (LONGEST) (which == 0
2344 ? TYPE_LOW_BOUND (index_type)
2345 : TYPE_HIGH_BOUND (index_type));
2346 }
2347 }
2348
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. */
2353
2354 struct value *
2355 ada_array_bound (struct value *arr, int n, int which)
2356 {
2357 struct type *arr_type = VALUE_TYPE (arr);
2358
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))
2362 {
2363 struct type *type;
2364 LONGEST v = ada_array_bound_from_type (arr_type, n, which, &type);
2365 return value_from_longest (type, v);
2366 }
2367 else
2368 return desc_one_bound (desc_bounds (arr), n, which);
2369 }
2370
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. */
2376
2377 struct value *
2378 ada_array_length (struct value *arr, int n)
2379 {
2380 struct type *arr_type = check_typedef (VALUE_TYPE (arr));
2381
2382 if (ada_is_packed_array_type (arr_type))
2383 return ada_array_length (decode_packed_array (arr), n);
2384
2385 if (ada_is_simple_array_type (arr_type))
2386 {
2387 struct type *type;
2388 LONGEST v =
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);
2392 }
2393 else
2394 return
2395 value_from_longest (builtin_type_ada_int,
2396 value_as_long (desc_one_bound (desc_bounds (arr),
2397 n, 1))
2398 - value_as_long (desc_one_bound (desc_bounds (arr),
2399 n, 0)) + 1);
2400 }
2401
2402 /* An empty array whose type is that of ARR_TYPE (an array type),
2403 with bounds LOW to LOW-1. */
2404
2405 static struct value *
2406 empty_array (struct type *arr_type, int low)
2407 {
2408 return allocate_value (create_range_type (NULL, TYPE_INDEX_TYPE (arr_type),
2409 low, low - 1));
2410 }
2411 \f
2412
2413 /* Name resolution */
2414
2415 /* The "decoded" name for the user-definable Ada operator corresponding
2416 to OP. */
2417
2418 static const char *
2419 ada_decoded_op_name (enum exp_opcode op)
2420 {
2421 int i;
2422
2423 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2424 {
2425 if (ada_opname_table[i].op == op)
2426 return ada_opname_table[i].decoded;
2427 }
2428 error ("Could not find operator name for opcode");
2429 }
2430
2431
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. */
2440
2441 static void
2442 resolve (struct expression **expp, int void_context_p)
2443 {
2444 int pc;
2445 pc = 0;
2446 resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
2447 }
2448
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. */
2457
2458 static struct value *
2459 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2460 struct type *context_type)
2461 {
2462 int pc = *pos;
2463 int i;
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. */
2468
2469 argvec = NULL;
2470 nargs = 0;
2471 exp = *expp;
2472
2473 /* Pass one: resolve operands, saving their types and updating *pos. */
2474 switch (op)
2475 {
2476 case OP_FUNCALL:
2477 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2478 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2479 *pos += 7;
2480 else
2481 {
2482 *pos += 3;
2483 resolve_subexp (expp, pos, 0, NULL);
2484 }
2485 nargs = longest_to_int (exp->elts[pc + 1].longconst);
2486 break;
2487
2488 case UNOP_QUAL:
2489 *pos += 3;
2490 resolve_subexp (expp, pos, 1, exp->elts[pc + 1].type);
2491 break;
2492
2493 case UNOP_ADDR:
2494 *pos += 1;
2495 resolve_subexp (expp, pos, 0, NULL);
2496 break;
2497
2498 case OP_ATR_MODULUS:
2499 *pos += 4;
2500 break;
2501
2502 case OP_ATR_SIZE:
2503 case OP_ATR_TAG:
2504 *pos += 1;
2505 nargs = 1;
2506 break;
2507
2508 case OP_ATR_FIRST:
2509 case OP_ATR_LAST:
2510 case OP_ATR_LENGTH:
2511 case OP_ATR_POS:
2512 case OP_ATR_VAL:
2513 *pos += 1;
2514 nargs = 2;
2515 break;
2516
2517 case OP_ATR_MIN:
2518 case OP_ATR_MAX:
2519 *pos += 1;
2520 nargs = 3;
2521 break;
2522
2523 case BINOP_ASSIGN:
2524 {
2525 struct value *arg1;
2526
2527 *pos += 1;
2528 arg1 = resolve_subexp (expp, pos, 0, NULL);
2529 if (arg1 == NULL)
2530 resolve_subexp (expp, pos, 1, NULL);
2531 else
2532 resolve_subexp (expp, pos, 1, VALUE_TYPE (arg1));
2533 break;
2534 }
2535
2536 case UNOP_CAST:
2537 case UNOP_IN_RANGE:
2538 *pos += 3;
2539 nargs = 1;
2540 break;
2541
2542 case BINOP_ADD:
2543 case BINOP_SUB:
2544 case BINOP_MUL:
2545 case BINOP_DIV:
2546 case BINOP_REM:
2547 case BINOP_MOD:
2548 case BINOP_EXP:
2549 case BINOP_CONCAT:
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:
2555
2556 case BINOP_EQUAL:
2557 case BINOP_NOTEQUAL:
2558 case BINOP_LESS:
2559 case BINOP_GTR:
2560 case BINOP_LEQ:
2561 case BINOP_GEQ:
2562
2563 case BINOP_REPEAT:
2564 case BINOP_SUBSCRIPT:
2565 case BINOP_COMMA:
2566 *pos += 1;
2567 nargs = 2;
2568 break;
2569
2570 case UNOP_NEG:
2571 case UNOP_PLUS:
2572 case UNOP_LOGICAL_NOT:
2573 case UNOP_ABS:
2574 case UNOP_IND:
2575 *pos += 1;
2576 nargs = 1;
2577 break;
2578
2579 case OP_LONG:
2580 case OP_DOUBLE:
2581 case OP_VAR_VALUE:
2582 *pos += 4;
2583 break;
2584
2585 case OP_TYPE:
2586 case OP_BOOL:
2587 case OP_LAST:
2588 case OP_REGISTER:
2589 case OP_INTERNALVAR:
2590 *pos += 3;
2591 break;
2592
2593 case UNOP_MEMVAL:
2594 *pos += 3;
2595 nargs = 1;
2596 break;
2597
2598 case STRUCTOP_STRUCT:
2599 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2600 nargs = 1;
2601 break;
2602
2603 case OP_STRING:
2604 (*pos) += 3
2605 + BYTES_TO_EXP_ELEM (longest_to_int (exp->elts[pc + 1].longconst) + 1);
2606 break;
2607
2608 case TERNOP_SLICE:
2609 case TERNOP_IN_RANGE:
2610 *pos += 1;
2611 nargs = 3;
2612 break;
2613
2614 case BINOP_IN_BOUNDS:
2615 *pos += 3;
2616 nargs = 2;
2617 break;
2618
2619 default:
2620 error ("Unexpected operator during name resolution");
2621 }
2622
2623 argvec =
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);
2627 argvec[i] = NULL;
2628 exp = *expp;
2629
2630 /* Pass two: perform any resolution on principal operator. */
2631 switch (op)
2632 {
2633 default:
2634 break;
2635
2636 case OP_VAR_VALUE:
2637 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2638 {
2639 struct ada_symbol_info *candidates;
2640 int n_candidates;
2641
2642 n_candidates =
2643 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME (exp->elts[pc + 2]
2644 .symbol),
2645 exp->elts[pc + 1].block,
2646 VAR_DOMAIN, &candidates);
2647
2648 if (n_candidates > 1)
2649 {
2650 /* Types tend to get re-introduced locally, so if there
2651 are any local symbols that are not types, first filter
2652 out all types. */
2653 int j;
2654 for (j = 0; j < n_candidates; j += 1)
2655 switch (SYMBOL_CLASS (candidates[j].sym))
2656 {
2657 case LOC_REGISTER:
2658 case LOC_ARG:
2659 case LOC_REF_ARG:
2660 case LOC_REGPARM:
2661 case LOC_REGPARM_ADDR:
2662 case LOC_LOCAL:
2663 case LOC_LOCAL_ARG:
2664 case LOC_BASEREG:
2665 case LOC_BASEREG_ARG:
2666 case LOC_COMPUTED:
2667 case LOC_COMPUTED_ARG:
2668 goto FoundNonType;
2669 default:
2670 break;
2671 }
2672 FoundNonType:
2673 if (j < n_candidates)
2674 {
2675 j = 0;
2676 while (j < n_candidates)
2677 {
2678 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2679 {
2680 candidates[j] = candidates[n_candidates - 1];
2681 n_candidates -= 1;
2682 }
2683 else
2684 j += 1;
2685 }
2686 }
2687 }
2688
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)
2693 i = 0;
2694 else if (deprocedure_p
2695 && !is_nonfunction (candidates, n_candidates))
2696 {
2697 i = ada_resolve_function (candidates, n_candidates, NULL, 0,
2698 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2]
2699 .symbol),
2700 context_type);
2701 if (i < 0)
2702 error ("Could not find a match for %s",
2703 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2704 }
2705 else
2706 {
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);
2710 i = 0;
2711 }
2712
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;
2718 }
2719
2720 if (deprocedure_p
2721 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2722 == TYPE_CODE_FUNC))
2723 {
2724 replace_operator_with_call (expp, pc, 0, 0,
2725 exp->elts[pc + 2].symbol,
2726 exp->elts[pc + 1].block);
2727 exp = *expp;
2728 }
2729 break;
2730
2731 case OP_FUNCALL:
2732 {
2733 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2734 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2735 {
2736 struct ada_symbol_info *candidates;
2737 int n_candidates;
2738
2739 n_candidates =
2740 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME (exp->elts[pc + 5]
2741 .symbol),
2742 exp->elts[pc + 4].block,
2743 VAR_DOMAIN, &candidates);
2744 if (n_candidates == 1)
2745 i = 0;
2746 else
2747 {
2748 i = ada_resolve_function (candidates, n_candidates,
2749 argvec, nargs,
2750 SYMBOL_LINKAGE_NAME (exp->elts[pc+5]
2751 .symbol),
2752 context_type);
2753 if (i < 0)
2754 error ("Could not find a match for %s",
2755 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2756 }
2757
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;
2763 }
2764 }
2765 break;
2766 case BINOP_ADD:
2767 case BINOP_SUB:
2768 case BINOP_MUL:
2769 case BINOP_DIV:
2770 case BINOP_REM:
2771 case BINOP_MOD:
2772 case BINOP_CONCAT:
2773 case BINOP_BITWISE_AND:
2774 case BINOP_BITWISE_IOR:
2775 case BINOP_BITWISE_XOR:
2776 case BINOP_EQUAL:
2777 case BINOP_NOTEQUAL:
2778 case BINOP_LESS:
2779 case BINOP_GTR:
2780 case BINOP_LEQ:
2781 case BINOP_GEQ:
2782 case BINOP_EXP:
2783 case UNOP_NEG:
2784 case UNOP_PLUS:
2785 case UNOP_LOGICAL_NOT:
2786 case UNOP_ABS:
2787 if (possible_user_operator_p (op, argvec))
2788 {
2789 struct ada_symbol_info *candidates;
2790 int n_candidates;
2791
2792 n_candidates =
2793 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
2794 (struct block *) NULL, VAR_DOMAIN,
2795 &candidates);
2796 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
2797 ada_decoded_op_name (op), NULL);
2798 if (i < 0)
2799 break;
2800
2801 replace_operator_with_call (expp, pc, nargs, 1,
2802 candidates[i].sym, candidates[i].block);
2803 exp = *expp;
2804 }
2805 break;
2806
2807 case OP_TYPE:
2808 return NULL;
2809 }
2810
2811 *pos = pc;
2812 return evaluate_subexp_type (exp, pos);
2813 }
2814
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. */
2821
2822 static int
2823 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
2824 {
2825 CHECK_TYPEDEF (ftype);
2826 CHECK_TYPEDEF (atype);
2827
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);
2832
2833 if (TYPE_CODE (ftype) == TYPE_CODE_VOID
2834 || TYPE_CODE (atype) == TYPE_CODE_VOID)
2835 return 1;
2836
2837 switch (TYPE_CODE (ftype))
2838 {
2839 default:
2840 return 1;
2841 case TYPE_CODE_PTR:
2842 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
2843 return ada_type_match (TYPE_TARGET_TYPE (ftype),
2844 TYPE_TARGET_TYPE (atype), 0);
2845 else
2846 return (may_deref &&
2847 ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
2848 case TYPE_CODE_INT:
2849 case TYPE_CODE_ENUM:
2850 case TYPE_CODE_RANGE:
2851 switch (TYPE_CODE (atype))
2852 {
2853 case TYPE_CODE_INT:
2854 case TYPE_CODE_ENUM:
2855 case TYPE_CODE_RANGE:
2856 return 1;
2857 default:
2858 return 0;
2859 }
2860
2861 case TYPE_CODE_ARRAY:
2862 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2863 || ada_is_array_descriptor_type (atype));
2864
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));
2869 else
2870 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
2871 && !ada_is_array_descriptor_type (atype));
2872
2873 case TYPE_CODE_UNION:
2874 case TYPE_CODE_FLT:
2875 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
2876 }
2877 }
2878
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. */
2883
2884 static int
2885 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
2886 {
2887 int i;
2888 struct type *func_type = SYMBOL_TYPE (func);
2889
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)
2894 return 0;
2895
2896 if (TYPE_NFIELDS (func_type) != n_actuals)
2897 return 0;
2898
2899 for (i = 0; i < n_actuals; i += 1)
2900 {
2901 if (actuals[i] == NULL)
2902 return 0;
2903 else
2904 {
2905 struct type *ftype = check_typedef (TYPE_FIELD_TYPE (func_type, i));
2906 struct type *atype = check_typedef (VALUE_TYPE (actuals[i]));
2907
2908 if (!ada_type_match (ftype, atype, 1))
2909 return 0;
2910 }
2911 }
2912 return 1;
2913 }
2914
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. */
2919
2920 static int
2921 return_match (struct type *func_type, struct type *context_type)
2922 {
2923 struct type *return_type;
2924
2925 if (func_type == NULL)
2926 return 1;
2927
2928 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
2929 return_type = base_type (TYPE_TARGET_TYPE (func_type));
2930 else
2931 return_type = base_type (func_type);
2932 if (return_type == NULL)
2933 return 1;
2934
2935 context_type = base_type (context_type);
2936
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;
2941 else
2942 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
2943 }
2944
2945
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.
2952
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. */
2957
2958 static int
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)
2962 {
2963 int k;
2964 int m; /* Number of hits */
2965 struct type *fallback;
2966 struct type *return_type;
2967
2968 return_type = context_type;
2969 if (context_type == NULL)
2970 fallback = builtin_type_void;
2971 else
2972 fallback = NULL;
2973
2974 m = 0;
2975 while (1)
2976 {
2977 for (k = 0; k < nsyms; k += 1)
2978 {
2979 struct type *type = check_typedef (SYMBOL_TYPE (syms[k].sym));
2980
2981 if (ada_args_match (syms[k].sym, args, nargs)
2982 && return_match (type, return_type))
2983 {
2984 syms[m] = syms[k];
2985 m += 1;
2986 }
2987 }
2988 if (m > 0 || return_type == fallback)
2989 break;
2990 else
2991 return_type = fallback;
2992 }
2993
2994 if (m == 0)
2995 return -1;
2996 else if (m > 1)
2997 {
2998 printf_filtered ("Multiple matches for %s\n", name);
2999 user_select_syms (syms, m, 1);
3000 return 0;
3001 }
3002 return 0;
3003 }
3004
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). */
3010
3011 static int
3012 encoded_ordered_before (char *N0, char *N1)
3013 {
3014 if (N1 == NULL)
3015 return 0;
3016 else if (N0 == NULL)
3017 return 1;
3018 else
3019 {
3020 int k0, k1;
3021 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3022 ;
3023 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3024 ;
3025 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3026 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3027 {
3028 int n0, n1;
3029 n0 = k0;
3030 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3031 n0 -= 1;
3032 n1 = k1;
3033 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3034 n1 -= 1;
3035 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3036 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3037 }
3038 return (strcmp (N0, N1) < 0);
3039 }
3040 }
3041
3042 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3043 encoded names. */
3044
3045 static void
3046 sort_choices (struct ada_symbol_info syms[], int nsyms)
3047 {
3048 int i;
3049 for (i = 1; i < nsyms; i += 1)
3050 {
3051 struct ada_symbol_info sym = syms[i];
3052 int j;
3053
3054 for (j = i - 1; j >= 0; j -= 1)
3055 {
3056 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3057 SYMBOL_LINKAGE_NAME (sym.sym)))
3058 break;
3059 syms[j + 1] = syms[j];
3060 }
3061 syms[j + 1] = sym;
3062 }
3063 }
3064
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
3068 selected. */
3069
3070 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3071 to be re-integrated one of these days. */
3072
3073 int
3074 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3075 {
3076 int i;
3077 int *chosen = (int *) alloca (sizeof (int) * nsyms);
3078 int n_chosen;
3079 int first_choice = (max_results == 1) ? 1 : 2;
3080
3081 if (max_results < 1)
3082 error ("Request to select 0 symbols!");
3083 if (nsyms <= 1)
3084 return nsyms;
3085
3086 printf_unfiltered ("[0] cancel\n");
3087 if (max_results > 1)
3088 printf_unfiltered ("[1] all\n");
3089
3090 sort_choices (syms, nsyms);
3091
3092 for (i = 0; i < nsyms; i += 1)
3093 {
3094 if (syms[i].sym == NULL)
3095 continue;
3096
3097 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3098 {
3099 struct symtab_and_line sal = find_function_start_sal (syms[i].sym, 1);
3100 printf_unfiltered ("[%d] %s at %s:%d\n",
3101 i + first_choice,
3102 SYMBOL_PRINT_NAME (syms[i].sym),
3103 sal.symtab == NULL
3104 ? "<no source file available>"
3105 : sal.symtab->filename, sal.line);
3106 continue;
3107 }
3108 else
3109 {
3110 int is_enumeral =
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);
3115
3116 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3117 printf_unfiltered ("[%d] %s at %s:%d\n",
3118 i + first_choice,
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)
3122 {
3123 printf_unfiltered ("[%d] ", i + first_choice);
3124 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3125 gdb_stdout, -1, 0);
3126 printf_unfiltered ("'(%s) (enumeral)\n",
3127 SYMBOL_PRINT_NAME (syms[i].sym));
3128 }
3129 else if (symtab != NULL)
3130 printf_unfiltered (is_enumeral
3131 ? "[%d] %s in %s (enumeral)\n"
3132 : "[%d] %s at %s:?\n",
3133 i + first_choice,
3134 SYMBOL_PRINT_NAME (syms[i].sym),
3135 symtab->filename);
3136 else
3137 printf_unfiltered (is_enumeral
3138 ? "[%d] %s (enumeral)\n"
3139 : "[%d] %s at ?\n",
3140 i + first_choice,
3141 SYMBOL_PRINT_NAME (syms[i].sym));
3142 }
3143 }
3144
3145 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3146 "overload-choice");
3147
3148 for (i = 0; i < n_chosen; i += 1)
3149 syms[i] = syms[chosen[i]];
3150
3151 return n_chosen;
3152 }
3153
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.
3157
3158 The user types choices as a sequence of numbers on one line
3159 separated by blanks, encoding them as follows:
3160
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.
3164
3165 The user is not allowed to choose more than MAX_RESULTS values.
3166
3167 ANNOTATION_SUFFIX, if present, is used to annotate the input
3168 prompts (for use with the -f switch). */
3169
3170 int
3171 get_selections (int *choices, int n_choices, int max_results,
3172 int is_all_choice, char *annotation_suffix)
3173 {
3174 char *args;
3175 const char *prompt;
3176 int n_chosen;
3177 int first_choice = is_all_choice ? 2 : 1;
3178
3179 prompt = getenv ("PS2");
3180 if (prompt == NULL)
3181 prompt = ">";
3182
3183 printf_unfiltered ("%s ", prompt);
3184 gdb_flush (gdb_stdout);
3185
3186 args = command_line_input ((char *) NULL, 0, annotation_suffix);
3187
3188 if (args == NULL)
3189 error_no_arg ("one or more choice numbers");
3190
3191 n_chosen = 0;
3192
3193 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3194 order, as given in args. Choices are validated. */
3195 while (1)
3196 {
3197 char *args2;
3198 int choice, j;
3199
3200 while (isspace (*args))
3201 args += 1;
3202 if (*args == '\0' && n_chosen == 0)
3203 error_no_arg ("one or more choice numbers");
3204 else if (*args == '\0')
3205 break;
3206
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");
3211 args = args2;
3212
3213 if (choice == 0)
3214 error ("cancelled");
3215
3216 if (choice < first_choice)
3217 {
3218 n_chosen = n_choices;
3219 for (j = 0; j < n_choices; j += 1)
3220 choices[j] = j;
3221 break;
3222 }
3223 choice -= first_choice;
3224
3225 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3226 {
3227 }
3228
3229 if (j < 0 || choice != choices[j])
3230 {
3231 int k;
3232 for (k = n_chosen - 1; k > j; k -= 1)
3233 choices[k + 1] = choices[k];
3234 choices[j + 1] = choice;
3235 n_chosen += 1;
3236 }
3237 }
3238
3239 if (n_chosen > max_results)
3240 error ("Select no more than %d of the above", max_results);
3241
3242 return n_chosen;
3243 }
3244
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. */
3248
3249 static void
3250 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3251 int oplen, struct symbol *sym,
3252 struct block *block)
3253 {
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;
3260
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));
3266
3267 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3268 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3269
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;
3273
3274 *expp = newexp;
3275 xfree (exp);
3276 }
3277
3278 /* Type-class predicates */
3279
3280 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3281 or FLOAT). */
3282
3283 static int
3284 numeric_type_p (struct type *type)
3285 {
3286 if (type == NULL)
3287 return 0;
3288 else
3289 {
3290 switch (TYPE_CODE (type))
3291 {
3292 case TYPE_CODE_INT:
3293 case TYPE_CODE_FLT:
3294 return 1;
3295 case TYPE_CODE_RANGE:
3296 return (type == TYPE_TARGET_TYPE (type)
3297 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3298 default:
3299 return 0;
3300 }
3301 }
3302 }
3303
3304 /* True iff TYPE is integral (an INT or RANGE of INTs). */
3305
3306 static int
3307 integer_type_p (struct type *type)
3308 {
3309 if (type == NULL)
3310 return 0;
3311 else
3312 {
3313 switch (TYPE_CODE (type))
3314 {
3315 case TYPE_CODE_INT:
3316 return 1;
3317 case TYPE_CODE_RANGE:
3318 return (type == TYPE_TARGET_TYPE (type)
3319 || integer_type_p (TYPE_TARGET_TYPE (type)));
3320 default:
3321 return 0;
3322 }
3323 }
3324 }
3325
3326 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
3327
3328 static int
3329 scalar_type_p (struct type *type)
3330 {
3331 if (type == NULL)
3332 return 0;
3333 else
3334 {
3335 switch (TYPE_CODE (type))
3336 {
3337 case TYPE_CODE_INT:
3338 case TYPE_CODE_RANGE:
3339 case TYPE_CODE_ENUM:
3340 case TYPE_CODE_FLT:
3341 return 1;
3342 default:
3343 return 0;
3344 }
3345 }
3346 }
3347
3348 /* True iff TYPE is discrete (INT, RANGE, ENUM). */
3349
3350 static int
3351 discrete_type_p (struct type *type)
3352 {
3353 if (type == NULL)
3354 return 0;
3355 else
3356 {
3357 switch (TYPE_CODE (type))
3358 {
3359 case TYPE_CODE_INT:
3360 case TYPE_CODE_RANGE:
3361 case TYPE_CODE_ENUM:
3362 return 1;
3363 default:
3364 return 0;
3365 }
3366 }
3367 }
3368
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). */
3372
3373 static int
3374 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3375 {
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]));
3380
3381 if (type0 == NULL)
3382 return 0;
3383
3384 switch (op)
3385 {
3386 default:
3387 return 0;
3388
3389 case BINOP_ADD:
3390 case BINOP_SUB:
3391 case BINOP_MUL:
3392 case BINOP_DIV:
3393 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3394
3395 case BINOP_REM:
3396 case BINOP_MOD:
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)));
3401
3402 case BINOP_EQUAL:
3403 case BINOP_NOTEQUAL:
3404 case BINOP_LESS:
3405 case BINOP_GTR:
3406 case BINOP_LEQ:
3407 case BINOP_GEQ:
3408 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3409
3410 case BINOP_CONCAT:
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)));
3418
3419 case BINOP_EXP:
3420 return (!(numeric_type_p (type0) && integer_type_p (type1)));
3421
3422 case UNOP_NEG:
3423 case UNOP_PLUS:
3424 case UNOP_LOGICAL_NOT:
3425 case UNOP_ABS:
3426 return (!numeric_type_p (type0));
3427
3428 }
3429 }
3430 \f
3431 /* Renaming */
3432
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
3435 point. */
3436
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. */
3441
3442 const char *
3443 ada_renaming_type (struct type *type)
3444 {
3445 if (type != NULL && TYPE_CODE (type) == TYPE_CODE_ENUM)
3446 {
3447 const char *name = type_name_no_tag (type);
3448 const char *suffix = (name == NULL) ? NULL : strstr (name, "___XR");
3449 if (suffix == NULL
3450 || (suffix[5] != '\000' && strchr ("PES_", suffix[5]) == NULL))
3451 return NULL;
3452 else
3453 return suffix + 3;
3454 }
3455 else
3456 return NULL;
3457 }
3458
3459 /* Return non-zero iff SYM encodes an object renaming. */
3460
3461 int
3462 ada_is_object_renaming (struct symbol *sym)
3463 {
3464 const char *renaming_type = ada_renaming_type (SYMBOL_TYPE (sym));
3465 return renaming_type != NULL
3466 && (renaming_type[2] == '\0' || renaming_type[2] == '_');
3467 }
3468
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
3471 parsing. */
3472
3473 char *
3474 ada_simple_renamed_entity (struct symbol *sym)
3475 {
3476 struct type *type;
3477 const char *raw_name;
3478 int len;
3479 char *result;
3480
3481 type = SYMBOL_TYPE (sym);
3482 if (type == NULL || TYPE_NFIELDS (type) < 1)
3483 error ("Improperly encoded renaming.");
3484
3485 raw_name = TYPE_FIELD_NAME (type, 0);
3486 len = (raw_name == NULL ? 0 : strlen (raw_name)) - 5;
3487 if (len <= 0)
3488 error ("Improperly encoded renaming.");
3489
3490 result = xmalloc (len + 1);
3491 strncpy (result, raw_name, len);
3492 result[len] = '\000';
3493 return result;
3494 }
3495 \f
3496
3497 /* Evaluation: Function Calls */
3498
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. */
3503
3504 static struct value *
3505 ensure_lval (struct value *val, CORE_ADDR *sp)
3506 {
3507 CORE_ADDR old_sp = *sp;
3508
3509 if (VALUE_LVAL (val))
3510 return val;
3511
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)))));
3516 else
3517 *sp = push_bytes (*sp, VALUE_CONTENTS_RAW (val),
3518 TYPE_LENGTH (check_typedef (VALUE_TYPE (val))));
3519
3520 VALUE_LVAL (val) = lval_memory;
3521 if (INNER_THAN (1, 2))
3522 VALUE_ADDRESS (val) = *sp;
3523 else
3524 VALUE_ADDRESS (val) = old_sp;
3525
3526 return val;
3527 }
3528
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. */
3533
3534 static struct value *
3535 convert_actual (struct value *actual, struct type *formal_type0,
3536 CORE_ADDR *sp)
3537 {
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;
3546
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)
3551 {
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)
3556 {
3557 if (VALUE_LVAL (actual) != lval_memory)
3558 {
3559 struct value *val;
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);
3566 }
3567 return value_addr (actual);
3568 }
3569 }
3570 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3571 return ada_value_ind (actual);
3572
3573 return actual;
3574 }
3575
3576
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. */
3582
3583 static struct value *
3584 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3585 {
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);
3590 int i;
3591
3592 for (i = ada_array_arity (check_typedef (VALUE_TYPE (arr))); i > 0; i -= 1)
3593 {
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));
3602 }
3603
3604 bounds = ensure_lval (bounds, sp);
3605
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));
3610
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));
3615
3616 descriptor = ensure_lval (descriptor, sp);
3617
3618 if (TYPE_CODE (type) == TYPE_CODE_PTR)
3619 return value_addr (descriptor);
3620 else
3621 return descriptor;
3622 }
3623
3624
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
3631 value as needed. */
3632
3633 void
3634 ada_convert_actuals (struct value *func, int nargs, struct value *args[],
3635 CORE_ADDR *sp)
3636 {
3637 int i;
3638
3639 if (TYPE_NFIELDS (VALUE_TYPE (func)) == 0
3640 || nargs != TYPE_NFIELDS (VALUE_TYPE (func)))
3641 return;
3642
3643 for (i = 0; i < nargs; i += 1)
3644 args[i] =
3645 convert_actual (args[i], TYPE_FIELD_TYPE (VALUE_TYPE (func), i), sp);
3646 }
3647 \f
3648 /* Experimental Symbol Cache Module */
3649
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
3653 in the future. */
3654
3655 #ifdef GNAT_GDB
3656
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
3663 instead. */
3664
3665 #define HASH_SIZE 1009
3666
3667 struct cache_entry {
3668 const char *name;
3669 domain_enum namespace;
3670 struct symbol *sym;
3671 struct symtab *symtab;
3672 struct block *block;
3673 struct cache_entry *next;
3674 };
3675
3676 static struct obstack cache_space;
3677
3678 static struct cache_entry *cache[HASH_SIZE];
3679
3680 /* Clear all entries from the symbol cache. */
3681
3682 void
3683 clear_ada_sym_cache (void)
3684 {
3685 obstack_free (&cache_space, NULL);
3686 obstack_init (&cache_space);
3687 memset (cache, '\000', sizeof (cache));
3688 }
3689
3690 static struct cache_entry **
3691 find_entry (const char *name, domain_enum namespace)
3692 {
3693 int h = msymbol_hash (name) % HASH_SIZE;
3694 struct cache_entry **e;
3695 for (e = &cache[h]; *e != NULL; e = &(*e)->next)
3696 {
3697 if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
3698 return e;
3699 }
3700 return NULL;
3701 }
3702
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. */
3708
3709 static int
3710 lookup_cached_symbol (const char *name, domain_enum namespace,
3711 struct symbol **sym, struct block **block,
3712 struct symtab **symtab)
3713 {
3714 struct cache_entry **e = find_entry (name, namespace);
3715 if (e == NULL)
3716 return 0;
3717 if (sym != NULL)
3718 *sym = (*e)->sym;
3719 if (block != NULL)
3720 *block = (*e)->block;
3721 if (symtab != NULL)
3722 *symtab = (*e)->symtab;
3723 return 1;
3724 }
3725
3726 /* Set the cached definition of NAME in DOMAIN to SYM in block
3727 BLOCK and symbol table SYMTAB. */
3728
3729 static void
3730 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3731 struct block *block, struct symtab *symtab)
3732 {
3733 int h = msymbol_hash (name) % HASH_SIZE;
3734 char *copy;
3735 struct cache_entry *e =
3736 (struct cache_entry *) obstack_alloc(&cache_space, sizeof (*e));
3737 e->next = cache[h];
3738 cache[h] = e;
3739 e->name = copy = obstack_alloc (&cache_space, strlen (name) + 1);
3740 strcpy (copy, name);
3741 e->sym = sym;
3742 e->namespace = namespace;
3743 e->symtab = symtab;
3744 e->block = block;
3745 }
3746
3747 #else
3748 static int
3749 lookup_cached_symbol (const char *name, domain_enum namespace,
3750 struct symbol **sym, struct block **block,
3751 struct symtab **symtab)
3752 {
3753 return 0;
3754 }
3755
3756 static void
3757 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3758 struct block *block, struct symtab *symtab)
3759 {
3760 }
3761 #endif /* GNAT_GDB */
3762 \f
3763 /* Symbol Lookup */
3764
3765 /* Return the result of a standard (literal, C-like) lookup of NAME in
3766 given DOMAIN, visible from lexical block BLOCK. */
3767
3768 static struct symbol *
3769 standard_lookup (const char *name, const struct block *block,
3770 domain_enum domain)
3771 {
3772 struct symbol *sym;
3773 struct symtab *symtab;
3774
3775 if (lookup_cached_symbol (name, domain, &sym, NULL, NULL))
3776 return sym;
3777 sym = lookup_symbol_in_language (name, block, domain, language_c, 0, &symtab);
3778 cache_symbol (name, domain, sym, block_found, symtab);
3779 return sym;
3780 }
3781
3782
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. */
3786 static int
3787 is_nonfunction (struct ada_symbol_info syms[], int n)
3788 {
3789 int i;
3790
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))
3795 return 1;
3796
3797 return 0;
3798 }
3799
3800 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
3801 struct types. Otherwise, they may not. */
3802
3803 static int
3804 equiv_types (struct type *type0, struct type *type1)
3805 {
3806 if (type0 == type1)
3807 return 1;
3808 if (type0 == NULL || type1 == NULL
3809 || TYPE_CODE (type0) != TYPE_CODE (type1))
3810 return 0;
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)
3815 return 1;
3816
3817 return 0;
3818 }
3819
3820 /* True iff SYM0 represents the same entity as SYM1, or one that is
3821 no more defined than that of SYM1. */
3822
3823 static int
3824 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
3825 {
3826 if (sym0 == sym1)
3827 return 1;
3828 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
3829 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
3830 return 0;
3831
3832 switch (SYMBOL_CLASS (sym0))
3833 {
3834 case LOC_UNDEF:
3835 return 1;
3836 case LOC_TYPEDEF:
3837 {
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);
3843 return
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));
3848 }
3849 case LOC_CONST:
3850 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
3851 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
3852 default:
3853 return 0;
3854 }
3855 }
3856
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. */
3859
3860 static void
3861 add_defn_to_vec (struct obstack *obstackp,
3862 struct symbol *sym,
3863 struct block *block,
3864 struct symtab *symtab)
3865 {
3866 int i;
3867 size_t tmp;
3868 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
3869
3870 if (SYMBOL_TYPE (sym) != NULL)
3871 CHECK_TYPEDEF (SYMBOL_TYPE (sym));
3872 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
3873 {
3874 if (lesseq_defined_than (sym, prevDefns[i].sym))
3875 return;
3876 else if (lesseq_defined_than (prevDefns[i].sym, sym))
3877 {
3878 prevDefns[i].sym = sym;
3879 prevDefns[i].block = block;
3880 prevDefns[i].symtab = symtab;
3881 return;
3882 }
3883 }
3884
3885 {
3886 struct ada_symbol_info info;
3887
3888 info.sym = sym;
3889 info.block = block;
3890 info.symtab = symtab;
3891 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
3892 }
3893 }
3894
3895 /* Number of ada_symbol_info structures currently collected in
3896 current vector in *OBSTACKP. */
3897
3898 static int
3899 num_defns_collected (struct obstack *obstackp)
3900 {
3901 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
3902 }
3903
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. */
3907
3908 static struct ada_symbol_info *
3909 defns_collected (struct obstack *obstackp, int finish)
3910 {
3911 if (finish)
3912 return obstack_finish (obstackp);
3913 else
3914 return (struct ada_symbol_info *) obstack_base (obstackp);
3915 }
3916
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. */
3920
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)
3924 {
3925 struct partial_symbol **start;
3926 int name_len = strlen (name);
3927 int length = (global ? pst->n_global_syms : pst->n_static_syms);
3928 int i;
3929
3930 if (length == 0)
3931 {
3932 return (NULL);
3933 }
3934
3935 start = (global ?
3936 pst->objfile->global_psymbols.list + pst->globals_offset :
3937 pst->objfile->static_psymbols.list + pst->statics_offset);
3938
3939 if (wild)
3940 {
3941 for (i = 0; i < length; i += 1)
3942 {
3943 struct partial_symbol *psym = start[i];
3944
3945 if (SYMBOL_DOMAIN (psym) == namespace &&
3946 wild_match (name, name_len, SYMBOL_LINKAGE_NAME (psym)))
3947 return psym;
3948 }
3949 return NULL;
3950 }
3951 else
3952 {
3953 if (global)
3954 {
3955 int U;
3956 i = 0;
3957 U = length - 1;
3958 while (U - i > 4)
3959 {
3960 int M = (U + i) >> 1;
3961 struct partial_symbol *psym = start[M];
3962 if (SYMBOL_LINKAGE_NAME (psym)[0] < name[0])
3963 i = M + 1;
3964 else if (SYMBOL_LINKAGE_NAME (psym)[0] > name[0])
3965 U = M - 1;
3966 else if (strcmp (SYMBOL_LINKAGE_NAME (psym), name) < 0)
3967 i = M + 1;
3968 else
3969 U = M;
3970 }
3971 }
3972 else
3973 i = 0;
3974
3975 while (i < length)
3976 {
3977 struct partial_symbol *psym = start[i];
3978
3979 if (SYMBOL_DOMAIN (psym) == namespace)
3980 {
3981 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym), name_len);
3982
3983 if (cmp < 0)
3984 {
3985 if (global)
3986 break;
3987 }
3988 else if (cmp == 0
3989 && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
3990 + name_len))
3991 return psym;
3992 }
3993 i += 1;
3994 }
3995
3996 if (global)
3997 {
3998 int U;
3999 i = 0;
4000 U = length - 1;
4001 while (U - i > 4)
4002 {
4003 int M = (U + i) >> 1;
4004 struct partial_symbol *psym = start[M];
4005 if (SYMBOL_LINKAGE_NAME (psym)[0] < '_')
4006 i = M + 1;
4007 else if (SYMBOL_LINKAGE_NAME (psym)[0] > '_')
4008 U = M - 1;
4009 else if (strcmp (SYMBOL_LINKAGE_NAME (psym), "_ada_") < 0)
4010 i = M + 1;
4011 else
4012 U = M;
4013 }
4014 }
4015 else
4016 i = 0;
4017
4018 while (i < length)
4019 {
4020 struct partial_symbol *psym = start[i];
4021
4022 if (SYMBOL_DOMAIN (psym) == namespace)
4023 {
4024 int cmp;
4025
4026 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (psym)[0];
4027 if (cmp == 0)
4028 {
4029 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (psym), 5);
4030 if (cmp == 0)
4031 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym) + 5,
4032 name_len);
4033 }
4034
4035 if (cmp < 0)
4036 {
4037 if (global)
4038 break;
4039 }
4040 else if (cmp == 0
4041 && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4042 + name_len + 5))
4043 return psym;
4044 }
4045 i += 1;
4046 }
4047 }
4048 return NULL;
4049 }
4050
4051 /* Find a symbol table containing symbol SYM or NULL if none. */
4052
4053 static struct symtab *
4054 symtab_for_sym (struct symbol *sym)
4055 {
4056 struct symtab *s;
4057 struct objfile *objfile;
4058 struct block *b;
4059 struct symbol *tmp_sym;
4060 struct dict_iterator iter;
4061 int j;
4062
4063 ALL_SYMTABS (objfile, s)
4064 {
4065 switch (SYMBOL_CLASS (sym))
4066 {
4067 case LOC_CONST:
4068 case LOC_STATIC:
4069 case LOC_TYPEDEF:
4070 case LOC_REGISTER:
4071 case LOC_LABEL:
4072 case LOC_BLOCK:
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)
4076 return s;
4077 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4078 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4079 return s;
4080 break;
4081 default:
4082 break;
4083 }
4084 switch (SYMBOL_CLASS (sym))
4085 {
4086 case LOC_REGISTER:
4087 case LOC_ARG:
4088 case LOC_REF_ARG:
4089 case LOC_REGPARM:
4090 case LOC_REGPARM_ADDR:
4091 case LOC_LOCAL:
4092 case LOC_TYPEDEF:
4093 case LOC_LOCAL_ARG:
4094 case LOC_BASEREG:
4095 case LOC_BASEREG_ARG:
4096 case LOC_COMPUTED:
4097 case LOC_COMPUTED_ARG:
4098 for (j = FIRST_LOCAL_BLOCK;
4099 j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
4100 {
4101 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
4102 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4103 return s;
4104 }
4105 break;
4106 default:
4107 break;
4108 }
4109 }
4110 return NULL;
4111 }
4112
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. */
4117
4118 struct minimal_symbol *
4119 ada_lookup_simple_minsym (const char *name)
4120 {
4121 struct objfile *objfile;
4122 struct minimal_symbol *msymbol;
4123 int wild_match;
4124
4125 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4126 {
4127 name += sizeof ("standard__") - 1;
4128 wild_match = 0;
4129 }
4130 else
4131 wild_match = (strstr (name, "__") == NULL);
4132
4133 ALL_MSYMBOLS (objfile, msymbol)
4134 {
4135 if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4136 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4137 return msymbol;
4138 }
4139
4140 return NULL;
4141 }
4142
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. */
4145
4146 static struct minimal_symbol *
4147 ada_lookup_minimal_symbol (const char *name, const char *sfile,
4148 struct objfile *objf)
4149 {
4150 return ada_lookup_simple_minsym (ada_encode (name));
4151 }
4152
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
4157 wildcard prefix. */
4158
4159 static void
4160 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4161 const char *name, domain_enum namespace,
4162 int wild_match)
4163 {
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;
4172
4173 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
4174 struct frame_info *frame;
4175
4176 if (! target_has_stack)
4177 return;
4178
4179 if (static_link == NULL)
4180 {
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));
4191 }
4192
4193 frame = get_selected_frame ();
4194 if (frame == NULL
4195 || inside_main_func (get_frame_address_in_block (frame)))
4196 return;
4197
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)
4202 {
4203 CORE_ADDR target_link = value_as_address (target_link_val);
4204
4205 frame = get_prev_frame (frame);
4206 if (frame == NULL)
4207 break;
4208
4209 if (get_frame_locals_address (frame) == target_link)
4210 {
4211 struct block *block;
4212
4213 QUIT;
4214
4215 block = get_frame_block (frame, 0);
4216 while (block != NULL && block_function (block) != NULL
4217 && num_defns_collected (obstackp) == 0)
4218 {
4219 QUIT;
4220
4221 ada_add_block_symbols (obstackp, block, name, namespace,
4222 NULL, NULL, wild_match);
4223
4224 block = BLOCK_SUPERBLOCK (block);
4225 }
4226 }
4227 }
4228
4229 do_cleanups (old_chain);
4230 #endif
4231 }
4232
4233 /* FIXME: The next two routines belong in symtab.c */
4234
4235 static void restore_language (void* lang)
4236 {
4237 set_language ((enum language) lang);
4238 }
4239
4240 /* As for lookup_symbol, but performed as if the current language
4241 were LANG. */
4242
4243 struct symbol *
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)
4247 {
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);
4254 return result;
4255 }
4256
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. */
4259
4260 static int
4261 is_nondebugging_type (struct type *type)
4262 {
4263 char *name = ada_type_name (type);
4264 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4265 }
4266
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. */
4273
4274 static int
4275 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4276 {
4277 int i, j;
4278
4279 i = 0;
4280 while (i < nsyms)
4281 {
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)))
4285 {
4286 for (j = 0; j < nsyms; j += 1)
4287 {
4288 if (i != j
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))
4295 {
4296 int k;
4297 for (k = i + 1; k < nsyms; k += 1)
4298 syms[k - 1] = syms[k];
4299 nsyms -= 1;
4300 goto NextSymbol;
4301 }
4302 }
4303 }
4304 i += 1;
4305 NextSymbol:
4306 ;
4307 }
4308 return nsyms;
4309 }
4310
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. */
4315
4316 static char *
4317 xget_renaming_scope (struct type *renaming_type)
4318 {
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 "__". */
4323
4324 const char *name = type_name_no_tag (renaming_type);
4325 char *suffix = strstr (name, "___XR");
4326 char *last;
4327 int scope_len;
4328 char *scope;
4329
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. */
4332
4333 for (last = suffix - 3; last > name; last--)
4334 if (last[0] == '_' && last[1] == '_')
4335 break;
4336
4337 /* Make a copy of scope and return it. */
4338
4339 scope_len = last - name;
4340 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4341
4342 strncpy (scope, name, scope_len);
4343 scope[scope_len] = '\0';
4344
4345 return scope;
4346 }
4347
4348 /* Return nonzero if NAME corresponds to a package name. */
4349
4350 static int
4351 is_package_name (const char *name)
4352 {
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). */
4358
4359 char *fun_name;
4360
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)
4364 return 0;
4365
4366 /* Library-level function names start with "_ada_". See if function
4367 "_ada_" followed by NAME can be found. */
4368
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)
4372 return 0;
4373
4374 fun_name = (char *) alloca (strlen (name) + 5 + 1);
4375 xasprintf (&fun_name, "_ada_%s", name);
4376
4377 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4378 }
4379
4380 /* Return nonzero if SYM corresponds to a renaming entity that is
4381 visible from FUNCTION_NAME. */
4382
4383 static int
4384 renaming_is_visible (const struct symbol *sym, char *function_name)
4385 {
4386 char *scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4387
4388 make_cleanup (xfree, scope);
4389
4390 /* If the rename has been defined in a package, then it is visible. */
4391 if (is_package_name (scope))
4392 return 1;
4393
4394 /* Check that the rename is in the current function scope by checking
4395 that its name starts with SCOPE. */
4396
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
4400 this prefix. */
4401 if (strncmp (function_name, "_ada_", 5) == 0)
4402 function_name += 5;
4403
4404 return (strncmp (function_name, scope, strlen (scope)) == 0);
4405 }
4406
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
4409 with CURRENT_BLOCK.
4410
4411 Rationale:
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.
4419
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):
4425
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.
4431
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. */
4436
4437 static int
4438 remove_out_of_scope_renamings (struct ada_symbol_info *syms,
4439 int nsyms,
4440 struct block *current_block)
4441 {
4442 struct symbol *current_function;
4443 char *current_function_name;
4444 int i;
4445
4446 /* Extract the function name associated to CURRENT_BLOCK.
4447 Abort if unable to do so. */
4448
4449 if (current_block == NULL)
4450 return nsyms;
4451
4452 current_function = block_function (current_block);
4453 if (current_function == NULL)
4454 return nsyms;
4455
4456 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4457 if (current_function_name == NULL)
4458 return nsyms;
4459
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. */
4463
4464 i = 0;
4465 while (i < nsyms)
4466 {
4467 if (ada_is_object_renaming (syms[i].sym)
4468 && !renaming_is_visible (syms[i].sym, current_function_name))
4469 {
4470 int j;
4471 for (j = i + 1; j < nsyms; j++)
4472 syms[j - 1] = syms[j];
4473 nsyms -= 1;
4474 }
4475 else
4476 i += 1;
4477 }
4478
4479 return nsyms;
4480 }
4481
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. */
4495
4496 int
4497 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4498 domain_enum namespace,
4499 struct ada_symbol_info **results)
4500 {
4501 struct symbol *sym;
4502 struct symtab *s;
4503 struct partial_symtab *ps;
4504 struct blockvector *bv;
4505 struct objfile *objfile;
4506 struct block *block;
4507 const char *name;
4508 struct minimal_symbol *msymbol;
4509 int wild_match;
4510 int cacheIfUnique;
4511 int block_depth;
4512 int ndefns;
4513
4514 obstack_free (&symbol_list_obstack, NULL);
4515 obstack_init (&symbol_list_obstack);
4516
4517 cacheIfUnique = 0;
4518
4519 /* Search specified block and its superiors. */
4520
4521 wild_match = (strstr (name0, "__") == NULL);
4522 name = name0;
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)
4527 {
4528 wild_match = 0;
4529 block = NULL;
4530 name = name0 + sizeof ("standard__") - 1;
4531 }
4532
4533 block_depth = 0;
4534 while (block != NULL)
4535 {
4536 block_depth += 1;
4537 ada_add_block_symbols (&symbol_list_obstack, block, name,
4538 namespace, NULL, NULL, wild_match);
4539
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)))
4543 goto done;
4544
4545 block = BLOCK_SUPERBLOCK (block);
4546 }
4547
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);
4553
4554 /* If we found ANY matches among non-global symbols, we're done. */
4555
4556 if (num_defns_collected (&symbol_list_obstack) > 0)
4557 goto done;
4558
4559 cacheIfUnique = 1;
4560 if (lookup_cached_symbol (name0, namespace, &sym, &block, &s))
4561 {
4562 if (sym != NULL)
4563 add_defn_to_vec (&symbol_list_obstack, sym, block, s);
4564 goto done;
4565 }
4566
4567 /* Now add symbols from all global blocks: symbol tables, minimal symbol
4568 tables, and psymtab's. */
4569
4570 ALL_SYMTABS (objfile, s)
4571 {
4572 QUIT;
4573 if (!s->primary)
4574 continue;
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);
4579 }
4580
4581 if (namespace == VAR_DOMAIN)
4582 {
4583 ALL_MSYMBOLS (objfile, msymbol)
4584 {
4585 if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match))
4586 {
4587 switch (MSYMBOL_TYPE (msymbol))
4588 {
4589 case mst_solib_trampoline:
4590 break;
4591 default:
4592 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
4593 if (s != NULL)
4594 {
4595 int ndefns0 = num_defns_collected (&symbol_list_obstack);
4596 QUIT;
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);
4602
4603 if (num_defns_collected (&symbol_list_obstack) == ndefns0)
4604 {
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,
4609 wild_match);
4610 }
4611 }
4612 }
4613 }
4614 }
4615 }
4616
4617 ALL_PSYMTABS (objfile, ps)
4618 {
4619 QUIT;
4620 if (!ps->readin
4621 && ada_lookup_partial_symbol (ps, name, 1, namespace, wild_match))
4622 {
4623 s = PSYMTAB_TO_SYMTAB (ps);
4624 if (!s->primary)
4625 continue;
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);
4630 }
4631 }
4632
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. */
4636
4637 if (num_defns_collected (&symbol_list_obstack) == 0)
4638 {
4639
4640 ALL_SYMTABS (objfile, s)
4641 {
4642 QUIT;
4643 if (!s->primary)
4644 continue;
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);
4649 }
4650
4651 ALL_PSYMTABS (objfile, ps)
4652 {
4653 QUIT;
4654 if (!ps->readin
4655 && ada_lookup_partial_symbol (ps, name, 0, namespace, wild_match))
4656 {
4657 s = PSYMTAB_TO_SYMTAB (ps);
4658 bv = BLOCKVECTOR (s);
4659 if (!s->primary)
4660 continue;
4661 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4662 ada_add_block_symbols (&symbol_list_obstack, block, name,
4663 namespace, objfile, s, wild_match);
4664 }
4665 }
4666 }
4667
4668 done:
4669 ndefns = num_defns_collected (&symbol_list_obstack);
4670 *results = defns_collected (&symbol_list_obstack, 1);
4671
4672 ndefns = remove_extra_symbols (*results, ndefns);
4673
4674 if (ndefns == 0)
4675 cache_symbol (name0, namespace, NULL, NULL, NULL);
4676
4677 if (ndefns == 1 && cacheIfUnique)
4678 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block,
4679 (*results)[0].symtab);
4680
4681 ndefns = remove_out_of_scope_renamings (*results, ndefns,
4682 (struct block *) block0);
4683
4684 return ndefns;
4685 }
4686
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). */
4694
4695
4696 struct symbol *
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)
4700 {
4701 struct ada_symbol_info *candidates;
4702 int n_candidates;
4703
4704 n_candidates = ada_lookup_symbol_list (ada_encode (ada_fold_name (name)),
4705 block0, namespace, &candidates);
4706
4707 if (n_candidates == 0)
4708 return NULL;
4709 else if (n_candidates != 1)
4710 user_select_syms (candidates, n_candidates, 1);
4711
4712 if (is_a_field_of_this != NULL)
4713 *is_a_field_of_this = 0;
4714
4715 if (symtab != NULL)
4716 {
4717 *symtab = candidates[0].symtab;
4718 if (*symtab == NULL && candidates[0].block != NULL)
4719 {
4720 struct objfile *objfile;
4721 struct symtab *s;
4722 struct block *b;
4723 struct blockvector *bv;
4724
4725 /* Search the list of symtabs for one which contains the
4726 address of the start of this block. */
4727 ALL_SYMTABS (objfile, s)
4728 {
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))
4733 {
4734 *symtab = s;
4735 return fixup_symbol_section (candidates[0].sym, objfile);
4736 }
4737 return fixup_symbol_section (candidates[0].sym, NULL);
4738 }
4739 }
4740 }
4741 return candidates[0].sym;
4742 }
4743
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)
4750 {
4751 if (linkage_name == NULL)
4752 linkage_name = name;
4753 return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
4754 NULL, symtab);
4755 }
4756
4757
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:
4762
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]?)))?$
4766 */
4767
4768 static int
4769 is_name_suffix (const char *str)
4770 {
4771 int k;
4772 const char *matching;
4773 const int len = strlen (str);
4774
4775 /* (__[0-9]+)?\.[0-9]+ */
4776 matching = str;
4777 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4778 {
4779 matching += 3;
4780 while (isdigit (matching[0]))
4781 matching += 1;
4782 if (matching[0] == '\0')
4783 return 1;
4784 }
4785
4786 if (matching[0] == '.')
4787 {
4788 matching += 1;
4789 while (isdigit (matching[0]))
4790 matching += 1;
4791 if (matching[0] == '\0')
4792 return 1;
4793 }
4794
4795 /* ___[0-9]+ */
4796 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4797 {
4798 matching = str + 3;
4799 while (isdigit (matching[0]))
4800 matching += 1;
4801 if (matching[0] == '\0')
4802 return 1;
4803 }
4804
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! */
4810 if (str[0] == 'X')
4811 {
4812 str += 1;
4813 while (str[0] != '_' && str[0] != '\0')
4814 {
4815 if (str[0] != 'n' && str[0] != 'b')
4816 return 0;
4817 str += 1;
4818 }
4819 }
4820 if (str[0] == '\000')
4821 return 1;
4822 if (str[0] == '_')
4823 {
4824 if (str[1] != '_' || str[2] == '\000')
4825 return 0;
4826 if (str[2] == '_')
4827 {
4828 if (strcmp (str + 3, "LJM") == 0)
4829 return 1;
4830 if (str[3] != 'X')
4831 return 0;
4832 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B' ||
4833 str[4] == 'U' || str[4] == 'P')
4834 return 1;
4835 if (str[4] == 'R' && str[5] != 'T')
4836 return 1;
4837 return 0;
4838 }
4839 if (!isdigit (str[2]))
4840 return 0;
4841 for (k = 3; str[k] != '\0'; k += 1)
4842 if (!isdigit (str[k]) && str[k] != '_')
4843 return 0;
4844 return 1;
4845 }
4846 if (str[0] == '$' && isdigit (str[1]))
4847 {
4848 for (k = 2; str[k] != '\0'; k += 1)
4849 if (!isdigit (str[k]) && str[k] != '_')
4850 return 0;
4851 return 1;
4852 }
4853 return 0;
4854 }
4855
4856 /* Return nonzero if the given string starts with a dot ('.')
4857 followed by zero or more digits.
4858
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. */
4866
4867 static int
4868 is_dot_digits_suffix (const char *str)
4869 {
4870 if (str[0] != '.')
4871 return 0;
4872
4873 str++;
4874 while (isdigit (str[0]))
4875 str++;
4876 return (str[0] == '\0');
4877 }
4878
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
4882 true). */
4883
4884 static int
4885 wild_match (const char *patn0, int patn_len, const char *name0)
4886 {
4887 int name_len;
4888 char *name;
4889 char *patn;
4890
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.
4897
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.
4906
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. */
4911 {
4912 char *dot;
4913 name_len = strlen (name0);
4914
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))
4919 *dot = '\0';
4920
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))
4926 {
4927 *dot = '\0';
4928 patn_len = dot - patn;
4929 }
4930 }
4931
4932 /* Now perform the wild match. */
4933
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))
4938 return 1;
4939
4940 while (name_len >= patn_len)
4941 {
4942 if (strncmp (patn, name, patn_len) == 0
4943 && is_name_suffix (name + patn_len))
4944 return 1;
4945 do
4946 {
4947 name += 1;
4948 name_len -= 1;
4949 }
4950 while (name_len > 0
4951 && name[0] != '.' && (name[0] != '_' || name[1] != '_'));
4952 if (name_len <= 0)
4953 return 0;
4954 if (name[0] == '_')
4955 {
4956 if (!islower (name[2]))
4957 return 0;
4958 name += 2;
4959 name_len -= 2;
4960 }
4961 else
4962 {
4963 if (!islower (name[1]))
4964 return 0;
4965 name += 1;
4966 name_len -= 1;
4967 }
4968 }
4969
4970 return 0;
4971 }
4972
4973
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. */
4979
4980 static void
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)
4985 {
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. */
4991 int found_sym;
4992 struct symbol *sym;
4993
4994 arg_sym = NULL;
4995 found_sym = 0;
4996 if (wild)
4997 {
4998 struct symbol *sym;
4999 ALL_BLOCK_SYMBOLS (block, iter, sym)
5000 {
5001 if (SYMBOL_DOMAIN (sym) == domain &&
5002 wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
5003 {
5004 switch (SYMBOL_CLASS (sym))
5005 {
5006 case LOC_ARG:
5007 case LOC_LOCAL_ARG:
5008 case LOC_REF_ARG:
5009 case LOC_REGPARM:
5010 case LOC_REGPARM_ADDR:
5011 case LOC_BASEREG_ARG:
5012 case LOC_COMPUTED_ARG:
5013 arg_sym = sym;
5014 break;
5015 case LOC_UNRESOLVED:
5016 continue;
5017 default:
5018 found_sym = 1;
5019 add_defn_to_vec (obstackp,
5020 fixup_symbol_section (sym, objfile),
5021 block, symtab);
5022 break;
5023 }
5024 }
5025 }
5026 }
5027 else
5028 {
5029 ALL_BLOCK_SYMBOLS (block, iter, sym)
5030 {
5031 if (SYMBOL_DOMAIN (sym) == domain)
5032 {
5033 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
5034 if (cmp == 0
5035 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
5036 {
5037 switch (SYMBOL_CLASS (sym))
5038 {
5039 case LOC_ARG:
5040 case LOC_LOCAL_ARG:
5041 case LOC_REF_ARG:
5042 case LOC_REGPARM:
5043 case LOC_REGPARM_ADDR:
5044 case LOC_BASEREG_ARG:
5045 case LOC_COMPUTED_ARG:
5046 arg_sym = sym;
5047 break;
5048 case LOC_UNRESOLVED:
5049 break;
5050 default:
5051 found_sym = 1;
5052 add_defn_to_vec (obstackp,
5053 fixup_symbol_section (sym, objfile),
5054 block, symtab);
5055 break;
5056 }
5057 }
5058 }
5059 }
5060 }
5061
5062 if (!found_sym && arg_sym != NULL)
5063 {
5064 add_defn_to_vec (obstackp,
5065 fixup_symbol_section (arg_sym, objfile),
5066 block, symtab);
5067 }
5068
5069 if (!wild)
5070 {
5071 arg_sym = NULL;
5072 found_sym = 0;
5073
5074 ALL_BLOCK_SYMBOLS (block, iter, sym)
5075 {
5076 if (SYMBOL_DOMAIN (sym) == domain)
5077 {
5078 int cmp;
5079
5080 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5081 if (cmp == 0)
5082 {
5083 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5084 if (cmp == 0)
5085 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5086 name_len);
5087 }
5088
5089 if (cmp == 0
5090 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5091 {
5092 switch (SYMBOL_CLASS (sym))
5093 {
5094 case LOC_ARG:
5095 case LOC_LOCAL_ARG:
5096 case LOC_REF_ARG:
5097 case LOC_REGPARM:
5098 case LOC_REGPARM_ADDR:
5099 case LOC_BASEREG_ARG:
5100 case LOC_COMPUTED_ARG:
5101 arg_sym = sym;
5102 break;
5103 case LOC_UNRESOLVED:
5104 break;
5105 default:
5106 found_sym = 1;
5107 add_defn_to_vec (obstackp,
5108 fixup_symbol_section (sym, objfile),
5109 block, symtab);
5110 break;
5111 }
5112 }
5113 }
5114 end_loop2: ;
5115 }
5116
5117 /* NOTE: This really shouldn't be needed for _ada_ symbols.
5118 They aren't parameters, right? */
5119 if (!found_sym && arg_sym != NULL)
5120 {
5121 add_defn_to_vec (obstackp,
5122 fixup_symbol_section (arg_sym, objfile),
5123 block, symtab);
5124 }
5125 }
5126 }
5127 \f
5128 #ifdef GNAT_GDB
5129
5130 /* Symbol Completion */
5131
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.
5135
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. */
5140
5141 static const char *
5142 symbol_completion_match (const char *sym_name,
5143 const char *text, int text_len,
5144 int wild_match, int encoded)
5145 {
5146 char *result;
5147 const int verbatim_match = (text[0] == '<');
5148 int match = 0;
5149
5150 if (verbatim_match)
5151 {
5152 /* Strip the leading angle bracket. */
5153 text = text + 1;
5154 text_len--;
5155 }
5156
5157 /* First, test against the fully qualified name of the symbol. */
5158
5159 if (strncmp (sym_name, text, text_len) == 0)
5160 match = 1;
5161
5162 if (match && !encoded)
5163 {
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;
5170
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;
5175 }
5176
5177 if (match && !verbatim_match)
5178 {
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. */
5184 const char *tmp;
5185
5186 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5187 if (*tmp != '\0')
5188 match = 0;
5189 }
5190
5191 /* Second: Try wild matching... */
5192
5193 if (!match && wild_match)
5194 {
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));
5199
5200 if (strncmp (sym_name, text, text_len) == 0)
5201 match = 1;
5202 }
5203
5204 /* Finally: If we found a mach, prepare the result to return. */
5205
5206 if (!match)
5207 return NULL;
5208
5209 if (verbatim_match)
5210 sym_name = add_angle_brackets (sym_name);
5211
5212 if (!encoded)
5213 sym_name = ada_decode (sym_name);
5214
5215 return sym_name;
5216 }
5217
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.
5222
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
5227 completion vector.
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
5231 encoded). */
5232
5233 static void
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)
5239 {
5240 const char *match = symbol_completion_match (sym_name, text, text_len,
5241 wild_match, encoded);
5242 char *completion;
5243
5244 if (match == NULL)
5245 return;
5246
5247 /* We found a match, so add the appropriate completion to the given
5248 string vector. */
5249
5250 if (word == orig_text)
5251 {
5252 completion = xmalloc (strlen (match) + 5);
5253 strcpy (completion, match);
5254 }
5255 else if (word > orig_text)
5256 {
5257 /* Return some portion of sym_name. */
5258 completion = xmalloc (strlen (match) + 5);
5259 strcpy (completion, match + (word - orig_text));
5260 }
5261 else
5262 {
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);
5268 }
5269
5270 string_vector_append (sv, completion);
5271 }
5272
5273 /* Return a list of possible symbol names completing TEXT0. The list
5274 is NULL terminated. WORD is the entire command on which completion
5275 is made. */
5276
5277 char **
5278 ada_make_symbol_completion_list (const char *text0, const char *word)
5279 {
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... */
5284 char *text;
5285 int text_len;
5286 int wild_match;
5287 int encoded;
5288 struct string_vector result = xnew_string_vector (128);
5289 struct symbol *sym;
5290 struct symtab *s;
5291 struct partial_symtab *ps;
5292 struct minimal_symbol *msymbol;
5293 struct objfile *objfile;
5294 struct block *b, *surrounding_static_block = 0;
5295 int i;
5296 struct dict_iterator iter;
5297
5298 if (text0[0] == '<')
5299 {
5300 text = xstrdup (text0);
5301 make_cleanup (xfree, text);
5302 text_len = strlen (text);
5303 wild_match = 0;
5304 encoded = 1;
5305 }
5306 else
5307 {
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]);
5313
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);
5319 }
5320
5321 /* First, look at the partial symtab symbols. */
5322 ALL_PSYMTABS (objfile, ps)
5323 {
5324 struct partial_symbol **psym;
5325
5326 /* If the psymtab's been read in we'll get it when we search
5327 through the blockvector. */
5328 if (ps->readin)
5329 continue;
5330
5331 for (psym = objfile->global_psymbols.list + ps->globals_offset;
5332 psym < (objfile->global_psymbols.list + ps->globals_offset
5333 + ps->n_global_syms);
5334 psym++)
5335 {
5336 QUIT;
5337 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (*psym),
5338 text, text_len, text0, word,
5339 wild_match, encoded);
5340 }
5341
5342 for (psym = objfile->static_psymbols.list + ps->statics_offset;
5343 psym < (objfile->static_psymbols.list + ps->statics_offset
5344 + ps->n_static_syms);
5345 psym++)
5346 {
5347 QUIT;
5348 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (*psym),
5349 text, text_len, text0, word,
5350 wild_match, encoded);
5351 }
5352 }
5353
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). */
5358
5359 ALL_MSYMBOLS (objfile, msymbol)
5360 {
5361 QUIT;
5362 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (msymbol),
5363 text, text_len, text0, word,
5364 wild_match, encoded);
5365 }
5366
5367 /* Search upwards from currently selected frame (so that we can
5368 complete on local vars. */
5369
5370 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5371 {
5372 if (!BLOCK_SUPERBLOCK (b))
5373 surrounding_static_block = b; /* For elmin of dups */
5374
5375 ALL_BLOCK_SYMBOLS (b, iter, sym)
5376 {
5377 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
5378 text, text_len, text0, word,
5379 wild_match, encoded);
5380 }
5381 }
5382
5383 /* Go through the symtabs and check the externs and statics for
5384 symbols which match. */
5385
5386 ALL_SYMTABS (objfile, s)
5387 {
5388 QUIT;
5389 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5390 ALL_BLOCK_SYMBOLS (b, iter, sym)
5391 {
5392 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
5393 text, text_len, text0, word,
5394 wild_match, encoded);
5395 }
5396 }
5397
5398 ALL_SYMTABS (objfile, s)
5399 {
5400 QUIT;
5401 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5402 /* Don't do this block twice. */
5403 if (b == surrounding_static_block)
5404 continue;
5405 ALL_BLOCK_SYMBOLS (b, iter, sym)
5406 {
5407 symbol_completion_add (&result, SYMBOL_LINKAGE_NAME (sym),
5408 text, text_len, text0, word,
5409 wild_match, encoded);
5410 }
5411 }
5412
5413 /* Append the closing NULL entry. */
5414 string_vector_append (&result, NULL);
5415
5416 return (result.array);
5417 }
5418
5419 #endif /* GNAT_GDB */
5420 \f
5421 #ifdef GNAT_GDB
5422 /* Breakpoint-related */
5423
5424 /* Import message from symtab.c. */
5425 extern char no_symtab_msg[];
5426
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. */
5430
5431 char *
5432 ada_start_decode_line_1 (char *line)
5433 {
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. */
5436 char *p;
5437 for (p = line; *p != '\000' && *p != ' ' && *p != ':'; p += 1)
5438 ;
5439 return p;
5440 }
5441
5442 /* *SPEC points to a function and line number spec (as in a break
5443 command), following any initial file name specification.
5444
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
5451 possible).
5452 + If *SPEC does not start with '*', the sal is in a function with
5453 that name.
5454
5455 Returns with 0 elements if no matching non-minimal symbols found.
5456
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.
5460
5461 *SPEC is updated to point after the function/line number specification.
5462
5463 FUNFIRSTLINE is non-zero if we desire the first line of real code
5464 in each function.
5465
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.
5473
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. */
5483
5484 struct symtabs_and_lines
5485 ada_finish_decode_line_1 (char **spec, struct symtab *file_table,
5486 int funfirstline, char ***canonical)
5487 {
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);
5493 char *name;
5494 int is_quoted;
5495
5496 int len;
5497 char *lower_name;
5498 char *unquoted_name;
5499
5500 if (file_table == NULL)
5501 block = block_static_block (get_selected_block (0));
5502 else
5503 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_table), STATIC_BLOCK);
5504
5505 if (canonical != NULL)
5506 *canonical = (char **) NULL;
5507
5508 is_quoted = (**spec && strchr (get_gdb_completer_quote_characters (),
5509 **spec) != NULL);
5510
5511 name = *spec;
5512 if (**spec == '*')
5513 *spec += 1;
5514 else
5515 {
5516 if (is_quoted)
5517 *spec = skip_quoted (*spec);
5518 while (**spec != '\000' &&
5519 !strchr (ada_completer_word_break_characters, **spec))
5520 *spec += 1;
5521 }
5522 len = *spec - name;
5523
5524 line_num = -1;
5525 if (file_table != NULL && (*spec)[0] == ':' && isdigit ((*spec)[1]))
5526 {
5527 line_num = strtol (*spec + 1, spec, 10);
5528 while (**spec == ' ' || **spec == '\t')
5529 *spec += 1;
5530 }
5531
5532 if (name[0] == '*')
5533 {
5534 if (line_num == -1)
5535 error ("Wild-card function with no line number or file name.");
5536
5537 return ada_sals_for_line (file_table->filename, line_num,
5538 funfirstline, canonical, 0);
5539 }
5540
5541 if (name[0] == '\'')
5542 {
5543 name += 1;
5544 len -= 2;
5545 }
5546
5547 if (name[0] == '<')
5548 {
5549 unquoted_name = (char *) alloca (len - 1);
5550 memcpy (unquoted_name, name + 1, len - 2);
5551 unquoted_name[len - 2] = '\000';
5552 lower_name = NULL;
5553 }
5554 else
5555 {
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';
5563 }
5564
5565 n_matches = 0;
5566 if (lower_name != NULL)
5567 n_matches = ada_lookup_symbol_list (ada_encode (lower_name), block,
5568 VAR_DOMAIN, &symbols);
5569 if (n_matches == 0)
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)
5575 {
5576 #ifdef HPPA_COMPILER_BUG
5577 /* FIXME: See comment in symtab.c::decode_line_1 */
5578 #undef volatile
5579 volatile struct symtab_and_line val;
5580 #define volatile /*nothing */
5581 #else
5582 struct symtab_and_line val;
5583 #endif
5584 struct minimal_symbol *msymbol;
5585
5586 init_sal (&val);
5587
5588 msymbol = NULL;
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)
5594 {
5595 val.pc = SYMBOL_VALUE_ADDRESS (msymbol);
5596 val.section = SYMBOL_BFD_SECTION (msymbol);
5597 if (funfirstline)
5598 {
5599 val.pc += DEPRECATED_FUNCTION_START_OFFSET;
5600 SKIP_PROLOGUE (val.pc);
5601 }
5602 selected.sals = (struct symtab_and_line *)
5603 xmalloc (sizeof (struct symtab_and_line));
5604 selected.sals[0] = val;
5605 selected.nelts = 1;
5606 return selected;
5607 }
5608
5609 if (!have_full_symbols () &&
5610 !have_partial_symbols () && !have_minimal_symbols ())
5611 error ("No symbol table is loaded. Use the \"file\" command.");
5612
5613 error ("Function \"%s\" not defined.", unquoted_name);
5614 return selected; /* for lint */
5615 }
5616
5617 if (line_num >= 0)
5618 {
5619 struct symtabs_and_lines best_sal =
5620 find_sal_from_funcs_and_line (file_table->filename, line_num,
5621 symbols, n_matches);
5622 if (funfirstline)
5623 adjust_pc_past_prologue (&best_sal.sals[0].pc);
5624 return best_sal;
5625 }
5626 else
5627 {
5628 selected.nelts =
5629 user_select_syms (symbols, n_matches, n_matches);
5630 }
5631
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);
5636
5637 i = 0;
5638 while (i < selected.nelts)
5639 {
5640 if (SYMBOL_CLASS (symbols[i].sym) == LOC_BLOCK)
5641 selected.sals[i]
5642 = find_function_start_sal (symbols[i].sym, funfirstline);
5643 else if (SYMBOL_LINE (symbols[i].sym) != 0)
5644 {
5645 selected.sals[i].symtab =
5646 symbols[i].symtab
5647 ? symbols[i].symtab : symtab_for_sym (symbols[i].sym);
5648 selected.sals[i].line = SYMBOL_LINE (symbols[i].sym);
5649 }
5650 else if (line_num >= 0)
5651 {
5652 /* Ignore this choice */
5653 symbols[i] = symbols[selected.nelts - 1];
5654 selected.nelts -= 1;
5655 continue;
5656 }
5657 else
5658 error ("Line number not known for symbol \"%s\"", unquoted_name);
5659 i += 1;
5660 }
5661
5662 if (canonical != NULL && (line_num >= 0 || n_matches > 1))
5663 {
5664 *canonical = (char **) xmalloc (sizeof (char *) * selected.nelts);
5665 for (i = 0; i < selected.nelts; i += 1)
5666 (*canonical)[i] =
5667 extended_canonical_line_spec (selected.sals[i],
5668 SYMBOL_PRINT_NAME (symbols[i].sym));
5669 }
5670
5671 discard_cleanups (old_chain);
5672 return selected;
5673 }
5674
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]. */
5678
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)
5682 {
5683 struct symtabs_and_lines sals;
5684 int best_index, best;
5685 struct linetable *best_linetable;
5686 struct objfile *objfile;
5687 struct symtab *s;
5688 struct symtab *best_symtab;
5689
5690 read_all_symtabs (filename);
5691
5692 best_index = 0;
5693 best_linetable = NULL;
5694 best_symtab = NULL;
5695 best = 0;
5696 ALL_SYMTABS (objfile, s)
5697 {
5698 struct linetable *l;
5699 int ind, exact;
5700
5701 QUIT;
5702
5703 if (strcmp (filename, s->filename) != 0)
5704 continue;
5705 l = LINETABLE (s);
5706 ind = find_line_in_linetable (l, line_num, symbols, nsyms, &exact);
5707 if (ind >= 0)
5708 {
5709 if (exact)
5710 {
5711 best_index = ind;
5712 best_linetable = l;
5713 best_symtab = s;
5714 goto done;
5715 }
5716 if (best == 0 || l->item[ind].line < best)
5717 {
5718 best = l->item[ind].line;
5719 best_index = ind;
5720 best_linetable = l;
5721 best_symtab = s;
5722 }
5723 }
5724 }
5725
5726 if (best == 0)
5727 error ("Line number not found in designated function.");
5728
5729 done:
5730
5731 sals.nelts = 1;
5732 sals.sals = (struct symtab_and_line *) xmalloc (sizeof (sals.sals[0]));
5733
5734 init_sal (&sals.sals[0]);
5735
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;
5739
5740 return sals;
5741 }
5742
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,
5746 and 0 otherwise. */
5747
5748 static int
5749 find_line_in_linetable (struct linetable *linetable, int line_num,
5750 struct ada_symbol_info *symbols, int nsyms, int *exactp)
5751 {
5752 int i, len, best_index, best;
5753
5754 if (line_num <= 0 || linetable == NULL)
5755 return -1;
5756
5757 len = linetable->nitems;
5758 for (i = 0, best_index = -1, best = 0; i < len; i += 1)
5759 {
5760 int k;
5761 struct linetable_entry *item = &(linetable->item[i]);
5762
5763 for (k = 0; k < nsyms; k += 1)
5764 {
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)))
5769 goto candidate;
5770 }
5771 continue;
5772
5773 candidate:
5774
5775 if (item->line == line_num)
5776 {
5777 *exactp = 1;
5778 return i;
5779 }
5780
5781 if (item->line > line_num && (best == 0 || item->line < best))
5782 {
5783 best = item->line;
5784 best_index = i;
5785 }
5786 }
5787
5788 *exactp = 0;
5789 return best_index;
5790 }
5791
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. */
5795
5796 static int
5797 nearest_line_number_in_linetable (struct linetable *linetable, int line_num)
5798 {
5799 int i, len, best;
5800
5801 if (line_num <= 0 || linetable == NULL || linetable->nitems == 0)
5802 return -1;
5803 len = linetable->nitems;
5804
5805 i = 0;
5806 best = INT_MAX;
5807 while (i < len)
5808 {
5809 struct linetable_entry *item = &(linetable->item[i]);
5810
5811 if (item->line >= line_num && item->line < best)
5812 {
5813 char *func_name;
5814 CORE_ADDR start, end;
5815
5816 func_name = NULL;
5817 find_pc_partial_function (item->pc, &func_name, &start, &end);
5818
5819 if (func_name != NULL && item->pc < end)
5820 {
5821 if (item->line == line_num)
5822 return line_num;
5823 else
5824 {
5825 struct symbol *sym =
5826 standard_lookup (func_name, NULL, VAR_DOMAIN);
5827 if (is_plausible_func_for_line (sym, line_num))
5828 best = item->line;
5829 else
5830 {
5831 do
5832 i += 1;
5833 while (i < len && linetable->item[i].pc < end);
5834 continue;
5835 }
5836 }
5837 }
5838 }
5839
5840 i += 1;
5841 }
5842
5843 return (best == INT_MAX) ? -1 : best;
5844 }
5845
5846
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. */
5854
5855 static int
5856 find_next_line_in_linetable (struct linetable *linetable, int line_num,
5857 int starting_line, int ind)
5858 {
5859 int i, len;
5860
5861 if (line_num <= 0 || linetable == NULL || ind >= linetable->nitems)
5862 return -1;
5863 len = linetable->nitems;
5864
5865 if (ind >= 0)
5866 {
5867 CORE_ADDR start, end;
5868
5869 if (find_pc_partial_function (linetable->item[ind].pc,
5870 (char **) NULL, &start, &end))
5871 {
5872 while (ind < len && linetable->item[ind].pc < end)
5873 ind += 1;
5874 }
5875 else
5876 ind += 1;
5877 }
5878 else
5879 ind = 0;
5880
5881 i = ind;
5882 while (i < len)
5883 {
5884 struct linetable_entry *item = &(linetable->item[i]);
5885
5886 if (item->line >= line_num)
5887 {
5888 char *func_name;
5889 CORE_ADDR start, end;
5890
5891 func_name = NULL;
5892 find_pc_partial_function (item->pc, &func_name, &start, &end);
5893
5894 if (func_name != NULL && item->pc < end)
5895 {
5896 if (item->line == line_num)
5897 {
5898 struct symbol *sym =
5899 standard_lookup (func_name, NULL, VAR_DOMAIN);
5900 if (is_plausible_func_for_line (sym, starting_line))
5901 return i;
5902 else
5903 {
5904 while ((i + 1) < len && linetable->item[i + 1].pc < end)
5905 i += 1;
5906 }
5907 }
5908 }
5909 }
5910 i += 1;
5911 }
5912
5913 return -1;
5914 }
5915
5916 /* True iff function symbol SYM starts somewhere at or before line #
5917 LINE_NUM. */
5918
5919 static int
5920 is_plausible_func_for_line (struct symbol *sym, int line_num)
5921 {
5922 struct symtab_and_line start_sal;
5923
5924 if (sym == NULL)
5925 return 0;
5926
5927 start_sal = find_function_start_sal (sym, 0);
5928
5929 return (start_sal.line != 0 && line_num >= start_sal.line);
5930 }
5931
5932 /* Read in all symbol tables corresponding to partial symbol tables
5933 with file name FILENAME. */
5934
5935 static void
5936 read_all_symtabs (const char *filename)
5937 {
5938 struct partial_symtab *ps;
5939 struct objfile *objfile;
5940
5941 ALL_PSYMTABS (objfile, ps)
5942 {
5943 QUIT;
5944
5945 if (strcmp (filename, ps->filename) == 0)
5946 PSYMTAB_TO_SYMTAB (ps);
5947 }
5948 }
5949
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. */
5959
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)
5964 {
5965 struct symtabs_and_lines result;
5966 struct objfile *objfile;
5967 struct symtab *s;
5968 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
5969 size_t len;
5970
5971 read_all_symtabs (filename);
5972
5973 result.sals =
5974 (struct symtab_and_line *) xmalloc (4 * sizeof (result.sals[0]));
5975 result.nelts = 0;
5976 len = 4;
5977 make_cleanup (free_current_contents, &result.sals);
5978
5979 ALL_SYMTABS (objfile, s)
5980 {
5981 int ind, target_line_num;
5982
5983 QUIT;
5984
5985 if (strcmp (s->filename, filename) != 0)
5986 continue;
5987
5988 target_line_num =
5989 nearest_line_number_in_linetable (LINETABLE (s), line_num);
5990 if (target_line_num == -1)
5991 continue;
5992
5993 ind = -1;
5994 while (1)
5995 {
5996 ind =
5997 find_next_line_in_linetable (LINETABLE (s),
5998 target_line_num, line_num, ind);
5999
6000 if (ind < 0)
6001 break;
6002
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;
6008
6009 if (funfirstline)
6010 adjust_pc_past_prologue (&result.sals[result.nelts].pc);
6011
6012 result.nelts += 1;
6013 }
6014 }
6015
6016 if (canonical != NULL || result.nelts > 1)
6017 {
6018 int k, j, n;
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));
6022
6023 for (k = 0; k < result.nelts; k += 1)
6024 {
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.");
6029 }
6030
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]))
6034 {
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]))
6039 {
6040 func_names[n] = func_names[k];
6041 result.sals[n] = result.sals[k];
6042 n += 1;
6043 }
6044 result.nelts = n;
6045 break;
6046 }
6047
6048 if (result.nelts > 1)
6049 {
6050 if (one_location_only)
6051 {
6052 /* Automatically select the first of all possible choices. */
6053 n = 1;
6054 choices[0] = 0;
6055 }
6056 else
6057 {
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]));
6064
6065 n = get_selections (choices, result.nelts, result.nelts,
6066 result.nelts > 1, "instance-choice");
6067 }
6068
6069 for (k = 0; k < n; k += 1)
6070 {
6071 result.sals[k] = result.sals[choices[k]];
6072 func_names[k] = func_names[choices[k]];
6073 }
6074 result.nelts = n;
6075 }
6076
6077 if (canonical != NULL && result.nelts == 0)
6078 *canonical = NULL;
6079 else if (canonical != NULL)
6080 {
6081 *canonical = (char **) xmalloc (result.nelts * sizeof (char **));
6082 make_cleanup (xfree, *canonical);
6083 for (k = 0; k < result.nelts; k += 1)
6084 {
6085 (*canonical)[k] =
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]);
6090 }
6091 }
6092 }
6093
6094 if (result.nelts == 0)
6095 {
6096 do_cleanups (old_chain);
6097 result.sals = NULL;
6098 }
6099 else
6100 discard_cleanups (old_chain);
6101 return result;
6102 }
6103
6104
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
6108 allocated. */
6109
6110 static char *
6111 extended_canonical_line_spec (struct symtab_and_line sal, const char *name)
6112 {
6113 char *r;
6114
6115 if (sal.symtab == NULL || sal.symtab->filename == NULL || sal.line <= 0)
6116 return NULL;
6117
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);
6121 return r;
6122 }
6123
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. */
6127
6128 static int
6129 ada_exception_breakpoint_type (bpstat bs)
6130 {
6131 return ((! bs || ! bs->breakpoint_at) ? 0
6132 : bs->breakpoint_at->break_on_exception);
6133 }
6134
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
6138 to most users. */
6139
6140 static int
6141 is_known_support_routine (struct frame_info *frame)
6142 {
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 =
6151 next_frame != NULL
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);
6156 char *func_name;
6157 int i;
6158 struct stat st;
6159
6160 /* The heuristic:
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. */
6166
6167 if (sal.symtab == NULL)
6168 return 1;
6169
6170 /* On some systems (e.g. VxWorks), the kernel contains debugging
6171 symbols; in this case, the filename referenced by these symbols
6172 does not exists. */
6173
6174 if (stat (sal.symtab->filename, &st))
6175 return 1;
6176
6177 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
6178 {
6179 re_comp (known_runtime_file_name_patterns[i]);
6180 if (re_exec (sal.symtab->filename))
6181 return 1;
6182 }
6183 if (sal.symtab->objfile != NULL)
6184 {
6185 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
6186 {
6187 re_comp (known_runtime_file_name_patterns[i]);
6188 if (re_exec (sal.symtab->objfile->name))
6189 return 1;
6190 }
6191 }
6192
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);
6200 else
6201 func_name = function_name_from_pc (get_frame_pc (frame));
6202
6203 if (func_name == NULL)
6204 return 1;
6205
6206 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
6207 {
6208 re_comp (known_auxiliary_function_name_patterns[i]);
6209 if (re_exec (func_name))
6210 return 1;
6211 }
6212
6213 return 0;
6214 }
6215
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. */
6218
6219 void
6220 ada_find_printable_frame (struct frame_info *fi)
6221 {
6222 for (; fi != NULL; fi = get_prev_frame (fi))
6223 {
6224 if (!is_known_support_routine (fi))
6225 {
6226 select_frame (fi);
6227 break;
6228 }
6229 }
6230
6231 }
6232
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. */
6236
6237 static char last_exception_name[256];
6238
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. */
6242
6243 void
6244 ada_adjust_exception_stop (bpstat bs)
6245 {
6246 CORE_ADDR addr;
6247 struct frame_info *fi;
6248 int frame_level;
6249 char *selected_frame_func;
6250
6251 addr = 0;
6252 last_exception_name[0] = '\0';
6253 fi = get_selected_frame ();
6254 selected_frame_func = function_name_from_pc (get_frame_pc (fi));
6255
6256 switch (ada_exception_breakpoint_type (bs))
6257 {
6258 default:
6259 return;
6260 case 1:
6261 break;
6262 case 2:
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)
6268 if (fi != NULL)
6269 fi = get_prev_frame (fi);
6270 while (fi != NULL)
6271 {
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);
6277 }
6278 if (fi == NULL)
6279 break;
6280 select_frame (fi);
6281 break;
6282 }
6283
6284 addr = parse_and_eval_address ("e.full_name");
6285
6286 if (addr != 0)
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 ());
6291 }
6292
6293 /* Output Ada exception name (if any) associated with last call to
6294 ada_adjust_exception_stop. */
6295
6296 void
6297 ada_print_exception_stop (bpstat bs)
6298 {
6299 if (last_exception_name[0] != '\000')
6300 {
6301 ui_out_text (uiout, last_exception_name);
6302 ui_out_text (uiout, " at ");
6303 }
6304 }
6305
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. */
6309
6310 static char *
6311 exception_name_from_cond (const char *condition)
6312 {
6313 char *start, *end, *exception_name;
6314 int exception_name_len;
6315
6316 start = strrchr (condition, '&') + 1;
6317 end = strchr (start, ')') - 1;
6318 exception_name_len = end - start + 1;
6319
6320 exception_name =
6321 (char *) xmalloc ((exception_name_len + 1) * sizeof (char));
6322 sprintf (exception_name, "%.*s", exception_name_len, start);
6323
6324 return exception_name;
6325 }
6326
6327 /* Print Ada-specific exception information about B, other than task
6328 clause. Return non-zero iff B was an Ada exception breakpoint. */
6329
6330 int
6331 ada_print_exception_breakpoint_nontask (struct breakpoint *b)
6332 {
6333 if (b->break_on_exception == 1)
6334 {
6335 if (b->cond_string) /* the breakpoint is on a specific exception. */
6336 {
6337 char *exception_name = exception_name_from_cond (b->cond_string);
6338
6339 make_cleanup (xfree, exception_name);
6340
6341 ui_out_text (uiout, "on ");
6342 if (ui_out_is_mi_like_p (uiout))
6343 ui_out_field_string (uiout, "exception", exception_name);
6344 else
6345 {
6346 ui_out_text (uiout, "exception ");
6347 ui_out_text (uiout, exception_name);
6348 ui_out_text (uiout, " ");
6349 }
6350 }
6351 else
6352 ui_out_text (uiout, "on all exceptions");
6353 }
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");
6358 else
6359 return 0;
6360 return 1;
6361 }
6362
6363 /* Print task identifier for breakpoint B, if it is an Ada-specific
6364 breakpoint with non-zero tasking information. */
6365
6366 void
6367 ada_print_exception_breakpoint_task (struct breakpoint *b)
6368 {
6369 if (b->task != 0)
6370 {
6371 ui_out_text (uiout, " task ");
6372 ui_out_field_int (uiout, "task", b->task);
6373 }
6374 }
6375
6376 int
6377 ada_is_exception_sym (struct symbol *sym)
6378 {
6379 char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
6380
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);
6385 }
6386
6387 int
6388 ada_maybe_exception_partial_symbol (struct partial_symbol *sym)
6389 {
6390 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
6391 && SYMBOL_CLASS (sym) != LOC_BLOCK
6392 && SYMBOL_CLASS (sym) != LOC_CONST);
6393 }
6394
6395 /* Cause the appropriate error if no appropriate runtime symbol is
6396 found to set a breakpoint, using ERR_DESC to describe the
6397 breakpoint. */
6398
6399 static void
6400 error_breakpoint_runtime_sym_not_found (const char *err_desc)
6401 {
6402 /* If we are not debugging an Ada program, we can not put exception
6403 breakpoints! */
6404
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);
6407
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. */
6412
6413 if (ptid_get_pid (inferior_ptid) == 0)
6414 error ("Unable to break on %s. Try to start the program first.", err_desc);
6415
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. */
6422
6423 error ("Cannot break on %s in this configuration.", err_desc);
6424 }
6425
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
6428 the test. */
6429
6430 static int
6431 is_runtime_sym_defined (const char *name, int allow_tramp)
6432 {
6433 struct minimal_symbol *msym;
6434
6435 msym = lookup_minimal_symbol (name, NULL, NULL);
6436 return (msym != NULL && msym->type != mst_unknown
6437 && (allow_tramp || msym->type != mst_solib_trampoline));
6438 }
6439
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. */
6444
6445 char *
6446 ada_breakpoint_rewrite (char *arg, int *break_on_exceptionp)
6447 {
6448 if (arg == NULL)
6449 return arg;
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'))
6454 {
6455 char *tok, *end_tok;
6456 int toklen;
6457 int has_exception_propagation =
6458 is_runtime_sym_defined (raise_sym_name, 1);
6459
6460 *break_on_exceptionp = 1;
6461
6462 tok = arg + 9;
6463 while (*tok == ' ' || *tok == '\t')
6464 tok += 1;
6465
6466 end_tok = tok;
6467
6468 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
6469 end_tok += 1;
6470
6471 toklen = end_tok - tok;
6472
6473 arg = (char *) xmalloc (sizeof (longest_exception_template) + toklen);
6474 make_cleanup (xfree, arg);
6475 if (toklen == 0)
6476 {
6477 if (has_exception_propagation)
6478 sprintf (arg, "'%s'", raise_sym_name);
6479 else
6480 error_breakpoint_runtime_sym_not_found ("exception");
6481 }
6482 else if (strncmp (tok, "unhandled", toklen) == 0)
6483 {
6484 if (is_runtime_sym_defined (raise_unhandled_sym_name, 1))
6485 sprintf (arg, "'%s'", raise_unhandled_sym_name);
6486 else
6487 error_breakpoint_runtime_sym_not_found ("exception");
6488
6489 *break_on_exceptionp = 2;
6490 }
6491 else
6492 {
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);
6496 else
6497 error_breakpoint_runtime_sym_not_found ("specific exception");
6498 }
6499 }
6500 else if (current_language->la_language == language_ada
6501 && strncmp (arg, "assert", 6) == 0
6502 && (arg[6] == ' ' || arg[6] == '\t' || arg[6] == '\0'))
6503 {
6504 char *tok = arg + 6;
6505
6506 if (!is_runtime_sym_defined (raise_assert_sym_name, 1))
6507 error_breakpoint_runtime_sym_not_found ("failed assertion");
6508
6509 *break_on_exceptionp = 3;
6510
6511 arg =
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);
6515 }
6516 return arg;
6517 }
6518 #endif
6519 \f
6520 /* Field Access */
6521
6522 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6523 to be invisible to users. */
6524
6525 int
6526 ada_is_ignored_field (struct type *type, int field_num)
6527 {
6528 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6529 return 1;
6530 else
6531 {
6532 const char *name = TYPE_FIELD_NAME (type, field_num);
6533 return (name == NULL
6534 || (name[0] == '_' && strncmp (name, "_parent", 7) != 0));
6535 }
6536 }
6537
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. */
6540
6541 int
6542 ada_is_tagged_type (struct type *type, int refok)
6543 {
6544 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6545 }
6546
6547 /* True iff TYPE represents the type of X'Tag */
6548
6549 int
6550 ada_is_tag_type (struct type *type)
6551 {
6552 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6553 return 0;
6554 else {
6555 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6556 return (name != NULL
6557 && strcmp (name, "ada__tags__dispatch_table") == 0);
6558 }
6559 }
6560
6561 /* The type of the tag on VAL. */
6562
6563 struct type *
6564 ada_tag_type (struct value *val)
6565 {
6566 return ada_lookup_struct_elt_type (VALUE_TYPE (val), "_tag", 1, 0, NULL);
6567 }
6568
6569 /* The value of the tag on VAL. */
6570
6571 struct value *
6572 ada_value_tag (struct value *val)
6573 {
6574 return ada_value_struct_elt (val, "_tag", "record");
6575 }
6576
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
6579 ADDRESS. */
6580
6581 static struct value *
6582 value_tag_from_contents_and_address (struct type *type, char *valaddr,
6583 CORE_ADDR address)
6584 {
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,
6588 &dummy1, &dummy2))
6589 {
6590 char *valaddr1 = (valaddr == NULL) ? NULL : valaddr + tag_byte_offset;
6591 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6592
6593 return value_from_contents_and_address (tag_type, valaddr1, address1);
6594 }
6595 return NULL;
6596 }
6597
6598 static struct type *
6599 type_from_tag (struct value *tag)
6600 {
6601 const char *type_name = ada_tag_name (tag);
6602 if (type_name != NULL)
6603 return ada_find_any_type (ada_encode (type_name));
6604 return NULL;
6605 }
6606
6607 struct tag_args {
6608 struct value *tag;
6609 char *name;
6610 };
6611
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
6615 ada_tag_name_1. */
6616
6617 static int
6618 ada_tag_name_1 (void *args0)
6619 {
6620 struct tag_args *args = (struct tag_args *) args0;
6621 static char name[1024];
6622 char* p;
6623 struct value *val;
6624 args->name = NULL;
6625 val = ada_value_struct_elt (args->tag, "tsd", NULL);
6626 if (val == NULL)
6627 return 0;
6628 val = ada_value_struct_elt (val, "expanded_name", NULL);
6629 if (val == NULL)
6630 return 0;
6631 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6632 for (p = name; *p != '\0'; p += 1)
6633 if (isalpha (*p))
6634 *p = tolower (*p);
6635 args->name = name;
6636 return 0;
6637 }
6638
6639 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6640 * a C string. */
6641
6642 const char *
6643 ada_tag_name (struct value *tag)
6644 {
6645 struct tag_args args;
6646 if (! ada_is_tag_type (VALUE_TYPE (tag)))
6647 return NULL;
6648 args.tag = tag;
6649 args.name = NULL;
6650 catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
6651 return args.name;
6652 }
6653
6654 /* The parent type of TYPE, or NULL if none. */
6655
6656 struct type *
6657 ada_parent_type (struct type *type)
6658 {
6659 int i;
6660
6661 CHECK_TYPEDEF (type);
6662
6663 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6664 return NULL;
6665
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));
6669
6670 return NULL;
6671 }
6672
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. */
6676
6677 int
6678 ada_is_parent_field (struct type *type, int field_num)
6679 {
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));
6684 }
6685
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
6690 structures. */
6691
6692 int
6693 ada_is_wrapper_field (struct type *type, int field_num)
6694 {
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'));
6701 }
6702
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. */
6706
6707 int
6708 ada_is_variant_part (struct type *type, int field_num)
6709 {
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)) ==
6714 TYPE_CODE_UNION));
6715 }
6716
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. */
6720
6721 struct type *
6722 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6723 {
6724 char *name = ada_variant_discrim_name (var_type);
6725 struct type *type =
6726 ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6727 if (type == NULL)
6728 return builtin_type_int;
6729 else
6730 return type;
6731 }
6732
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. */
6736
6737 int
6738 ada_is_others_clause (struct type *type, int field_num)
6739 {
6740 const char *name = TYPE_FIELD_NAME (type, field_num);
6741 return (name != NULL && name[0] == 'O');
6742 }
6743
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. */
6747
6748 char *
6749 ada_variant_discrim_name (struct type *type0)
6750 {
6751 static char *result = NULL;
6752 static size_t result_len = 0;
6753 struct type *type;
6754 const char *name;
6755 const char *discrim_end;
6756 const char *discrim_start;
6757
6758 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6759 type = TYPE_TARGET_TYPE (type0);
6760 else
6761 type = type0;
6762
6763 name = ada_type_name (type);
6764
6765 if (name == NULL || name[0] == '\000')
6766 return "";
6767
6768 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6769 discrim_end -= 1)
6770 {
6771 if (strncmp (discrim_end, "___XVN", 6) == 0)
6772 break;
6773 }
6774 if (discrim_end == name)
6775 return "";
6776
6777 for (discrim_start = discrim_end; discrim_start != name + 3;
6778 discrim_start -= 1)
6779 {
6780 if (discrim_start == name + 1)
6781 return "";
6782 if ((discrim_start > name + 3
6783 && strncmp (discrim_start - 3, "___", 3) == 0)
6784 || discrim_start[-1] == '.')
6785 break;
6786 }
6787
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';
6791 return result;
6792 }
6793
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. */
6801
6802 int
6803 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6804 {
6805 ULONGEST RU;
6806
6807 if (!isdigit (str[k]))
6808 return 0;
6809
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
6812 LONGEST. */
6813 RU = 0;
6814 while (isdigit (str[k]))
6815 {
6816 RU = RU * 10 + (str[k] - '0');
6817 k += 1;
6818 }
6819
6820 if (str[k] == 'm')
6821 {
6822 if (R != NULL)
6823 *R = (-(LONGEST) (RU - 1)) - 1;
6824 k += 1;
6825 }
6826 else if (R != NULL)
6827 *R = (LONGEST) RU;
6828
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. */
6834
6835 if (new_k != NULL)
6836 *new_k = k;
6837 return 1;
6838 }
6839
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. */
6843
6844 int
6845 ada_in_variant (LONGEST val, struct type *type, int field_num)
6846 {
6847 const char *name = TYPE_FIELD_NAME (type, field_num);
6848 int p;
6849
6850 p = 0;
6851 while (1)
6852 {
6853 switch (name[p])
6854 {
6855 case '\0':
6856 return 0;
6857 case 'S':
6858 {
6859 LONGEST W;
6860 if (!ada_scan_number (name, p + 1, &W, &p))
6861 return 0;
6862 if (val == W)
6863 return 1;
6864 break;
6865 }
6866 case 'R':
6867 {
6868 LONGEST L, U;
6869 if (!ada_scan_number (name, p + 1, &L, &p)
6870 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6871 return 0;
6872 if (val >= L && val <= U)
6873 return 1;
6874 break;
6875 }
6876 case 'O':
6877 return 1;
6878 default:
6879 return 0;
6880 }
6881 }
6882 }
6883
6884 /* FIXME: Lots of redundancy below. Try to consolidate. */
6885
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. */
6890
6891 static struct value *
6892 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6893 struct type *arg_type)
6894 {
6895 struct type *type;
6896
6897 CHECK_TYPEDEF (arg_type);
6898 type = TYPE_FIELD_TYPE (arg_type, fieldno);
6899
6900 /* Handle packed fields. */
6901
6902 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6903 {
6904 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6905 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6906
6907 return ada_value_primitive_packed_val (arg1, VALUE_CONTENTS (arg1),
6908 offset + bit_pos / 8,
6909 bit_pos % 8, bit_size, type);
6910 }
6911 else
6912 return value_primitive_field (arg1, offset, fieldno, arg_type);
6913 }
6914
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
6921 found. */
6922 static int
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)
6926 {
6927 int i;
6928
6929 CHECK_TYPEDEF (type);
6930 *field_type_p = NULL;
6931 *byte_offset_p = *bit_offset_p = *bit_size_p = 0;
6932
6933 for (i = TYPE_NFIELDS (type) - 1; i >= 0; i -= 1)
6934 {
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);
6938
6939 if (t_field_name == NULL)
6940 continue;
6941
6942 else if (field_name_match (t_field_name, name))
6943 {
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;
6949 return 1;
6950 }
6951 else if (ada_is_wrapper_field (type, i))
6952 {
6953 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6954 field_type_p, byte_offset_p, bit_offset_p,
6955 bit_size_p))
6956 return 1;
6957 }
6958 else if (ada_is_variant_part (type, i))
6959 {
6960 int j;
6961 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
6962
6963 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6964 {
6965 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6966 fld_offset
6967 + TYPE_FIELD_BITPOS (field_type, j)/8,
6968 field_type_p, byte_offset_p, bit_offset_p,
6969 bit_size_p))
6970 return 1;
6971 }
6972 }
6973 }
6974 return 0;
6975 }
6976
6977
6978
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.
6982
6983 Searches recursively through wrapper fields (e.g., '_parent'). */
6984
6985 static struct value *
6986 ada_search_struct_field (char *name, struct value *arg, int offset,
6987 struct type *type)
6988 {
6989 int i;
6990 CHECK_TYPEDEF (type);
6991
6992 for (i = TYPE_NFIELDS (type) - 1; i >= 0; i -= 1)
6993 {
6994 char *t_field_name = TYPE_FIELD_NAME (type, i);
6995
6996 if (t_field_name == NULL)
6997 continue;
6998
6999 else if (field_name_match (t_field_name, name))
7000 return ada_value_primitive_field (arg, offset, i, type);
7001
7002 else if (ada_is_wrapper_field (type, i))
7003 {
7004 struct value *v =
7005 ada_search_struct_field (name, arg,
7006 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7007 TYPE_FIELD_TYPE (type, i));
7008 if (v != NULL)
7009 return v;
7010 }
7011
7012 else if (ada_is_variant_part (type, i))
7013 {
7014 int j;
7015 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
7016 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7017
7018 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7019 {
7020 struct value *v =
7021 ada_search_struct_field (name, arg,
7022 var_offset
7023 + TYPE_FIELD_BITPOS (field_type, j)/8,
7024 TYPE_FIELD_TYPE (field_type, j));
7025 if (v != NULL)
7026 return v;
7027 }
7028 }
7029 }
7030 return NULL;
7031 }
7032
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).
7039
7040 The routine searches for NAME among all members of the structure itself
7041 and (recursively) among all members of any wrapper members
7042 (e.g., '_parent').
7043
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
7048 at the moment). */
7049
7050 struct value *
7051 ada_value_struct_elt (struct value *arg, char *name, char *err)
7052 {
7053 struct type *t, *t1;
7054 struct value *v;
7055
7056 v = NULL;
7057 t1 = t = check_typedef (VALUE_TYPE (arg));
7058 if (TYPE_CODE (t) == TYPE_CODE_REF)
7059 {
7060 t1 = TYPE_TARGET_TYPE (t);
7061 if (t1 == NULL)
7062 {
7063 if (err == NULL)
7064 return NULL;
7065 else
7066 error ("Bad value type in a %s.", err);
7067 }
7068 CHECK_TYPEDEF (t1);
7069 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7070 {
7071 COERCE_REF (arg);
7072 t = t1;
7073 }
7074 }
7075
7076 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7077 {
7078 t1 = TYPE_TARGET_TYPE (t);
7079 if (t1 == NULL)
7080 {
7081 if (err == NULL)
7082 return NULL;
7083 else
7084 error ("Bad value type in a %s.", err);
7085 }
7086 CHECK_TYPEDEF (t1);
7087 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7088 {
7089 arg = value_ind (arg);
7090 t = t1;
7091 }
7092 else
7093 break;
7094 }
7095
7096 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7097 {
7098 if (err == NULL)
7099 return NULL;
7100 else
7101 error ("Attempt to extract a component of a value that is not a %s.",
7102 err);
7103 }
7104
7105 if (t1 == t)
7106 v = ada_search_struct_field (name, arg, 0, t);
7107 else
7108 {
7109 int bit_offset, bit_size, byte_offset;
7110 struct type *field_type;
7111 CORE_ADDR address;
7112
7113 if (TYPE_CODE (t) == TYPE_CODE_PTR)
7114 address = value_as_address (arg);
7115 else
7116 address = unpack_pointer (t, VALUE_CONTENTS (arg));
7117
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))
7121 {
7122 if (bit_size != 0)
7123 {
7124 arg = ada_value_ind (arg);
7125 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7126 bit_offset, bit_size,
7127 field_type);
7128 }
7129 else
7130 v = value_from_pointer (lookup_reference_type (field_type),
7131 address + byte_offset);
7132 }
7133 }
7134
7135 if (v == NULL && err != NULL)
7136 error ("There is no member named %s.", name);
7137
7138 return v;
7139 }
7140
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).
7145
7146 Matches any field whose name has NAME as a prefix, possibly
7147 followed by "___".
7148
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.
7152
7153 Looks recursively into variant clauses and parent types.
7154
7155 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7156 TYPE is not a type of the right kind. */
7157
7158 static struct type *
7159 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7160 int noerr, int *dispp)
7161 {
7162 int i;
7163
7164 if (name == NULL)
7165 goto BadName;
7166
7167 if (refok && type != NULL)
7168 while (1)
7169 {
7170 CHECK_TYPEDEF (type);
7171 if (TYPE_CODE (type) != TYPE_CODE_PTR
7172 && TYPE_CODE (type) != TYPE_CODE_REF)
7173 break;
7174 type = TYPE_TARGET_TYPE (type);
7175 }
7176
7177 if (type == NULL
7178 || (TYPE_CODE (type) != TYPE_CODE_STRUCT &&
7179 TYPE_CODE (type) != TYPE_CODE_UNION))
7180 {
7181 if (noerr)
7182 return NULL;
7183 else
7184 {
7185 target_terminal_ours ();
7186 gdb_flush (gdb_stdout);
7187 fprintf_unfiltered (gdb_stderr, "Type ");
7188 if (type == NULL)
7189 fprintf_unfiltered (gdb_stderr, "(null)");
7190 else
7191 type_print (type, "", gdb_stderr, -1);
7192 error (" is not a structure or union type");
7193 }
7194 }
7195
7196 type = to_static_fixed_type (type);
7197
7198 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7199 {
7200 char *t_field_name = TYPE_FIELD_NAME (type, i);
7201 struct type *t;
7202 int disp;
7203
7204 if (t_field_name == NULL)
7205 continue;
7206
7207 else if (field_name_match (t_field_name, name))
7208 {
7209 if (dispp != NULL)
7210 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7211 return check_typedef (TYPE_FIELD_TYPE (type, i));
7212 }
7213
7214 else if (ada_is_wrapper_field (type, i))
7215 {
7216 disp = 0;
7217 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7218 0, 1, &disp);
7219 if (t != NULL)
7220 {
7221 if (dispp != NULL)
7222 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7223 return t;
7224 }
7225 }
7226
7227 else if (ada_is_variant_part (type, i))
7228 {
7229 int j;
7230 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
7231
7232 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7233 {
7234 disp = 0;
7235 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
7236 name, 0, 1, &disp);
7237 if (t != NULL)
7238 {
7239 if (dispp != NULL)
7240 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7241 return t;
7242 }
7243 }
7244 }
7245
7246 }
7247
7248 BadName:
7249 if (!noerr)
7250 {
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);
7257 }
7258
7259 return NULL;
7260 }
7261
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. */
7266
7267 int
7268 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7269 char *outer_valaddr)
7270 {
7271 int others_clause;
7272 int i;
7273 int disp;
7274 struct type *discrim_type;
7275 char *discrim_name = ada_variant_discrim_name (var_type);
7276 LONGEST discrim_val;
7277
7278 disp = 0;
7279 discrim_type =
7280 ada_lookup_struct_elt_type (outer_type, discrim_name, 1, 1, &disp);
7281 if (discrim_type == NULL)
7282 return -1;
7283 discrim_val = unpack_long (discrim_type, outer_valaddr + disp);
7284
7285 others_clause = -1;
7286 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7287 {
7288 if (ada_is_others_clause (var_type, i))
7289 others_clause = i;
7290 else if (ada_in_variant (discrim_val, var_type, i))
7291 return i;
7292 }
7293
7294 return others_clause;
7295 }
7296 \f
7297
7298
7299 /* Dynamic-Sized Records */
7300
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. */
7306
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.
7315
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. */
7327
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. */
7333
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. */
7337
7338 struct value *
7339 ada_value_ind (struct value *val0)
7340 {
7341 struct value *val = unwrap_value (value_ind (val0));
7342 return ada_to_fixed_value (val);
7343 }
7344
7345 /* The value resulting from dereferencing any "reference to"
7346 qualifiers on VAL0. */
7347
7348 static struct value *
7349 ada_coerce_ref (struct value *val0)
7350 {
7351 if (TYPE_CODE (VALUE_TYPE (val0)) == TYPE_CODE_REF)
7352 {
7353 struct value *val = val0;
7354 COERCE_REF (val);
7355 val = unwrap_value (val);
7356 return ada_to_fixed_value (val);
7357 }
7358 else
7359 return val0;
7360 }
7361
7362 /* Return OFF rounded upward if necessary to a multiple of
7363 ALIGNMENT (a power of 2). */
7364
7365 static unsigned int
7366 align_value (unsigned int off, unsigned int alignment)
7367 {
7368 return (off + alignment - 1) & ~(alignment - 1);
7369 }
7370
7371 /* Return the bit alignment required for field #F of template type TYPE. */
7372
7373 static unsigned int
7374 field_alignment (struct type *type, int f)
7375 {
7376 const char *name = TYPE_FIELD_NAME (type, f);
7377 int len = (name == NULL) ? 0 : strlen (name);
7378 int align_offset;
7379
7380 if (!isdigit (name[len - 1]))
7381 return 1;
7382
7383 if (isdigit (name[len - 2]))
7384 align_offset = len - 2;
7385 else
7386 align_offset = len - 1;
7387
7388 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
7389 return TARGET_CHAR_BIT;
7390
7391 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7392 }
7393
7394 /* Find a symbol named NAME. Ignores ambiguity. */
7395
7396 struct symbol *
7397 ada_find_any_symbol (const char *name)
7398 {
7399 struct symbol *sym;
7400
7401 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7402 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7403 return sym;
7404
7405 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7406 return sym;
7407 }
7408
7409 /* Find a type named NAME. Ignores ambiguity. */
7410
7411 struct type *
7412 ada_find_any_type (const char *name)
7413 {
7414 struct symbol *sym = ada_find_any_symbol (name);
7415
7416 if (sym != NULL)
7417 return SYMBOL_TYPE (sym);
7418
7419 return NULL;
7420 }
7421
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
7425 NULL otherwise. */
7426
7427 struct symbol *
7428 ada_find_renaming_symbol (const char *name, struct block *block)
7429 {
7430 const struct symbol *function_sym = block_function (block);
7431 char *rename;
7432
7433 if (function_sym != NULL)
7434 {
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
7442 + 2 /* "__" */
7443 + strlen (name)
7444 + 6 /* "___XR\0" */;
7445
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;
7453
7454 rename = (char *) alloca (rename_len * sizeof (char));
7455 sprintf (rename, "%s__%s___XR", function_name, name);
7456 }
7457 else
7458 {
7459 const int rename_len = strlen (name) + 6;
7460 rename = (char *) alloca (rename_len * sizeof (char));
7461 sprintf (rename, "%s___XR", name);
7462 }
7463
7464 return ada_find_any_symbol (rename);
7465 }
7466
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. */
7471
7472 int
7473 ada_prefer_type (struct type *type0, struct type *type1)
7474 {
7475 if (type1 == NULL)
7476 return 1;
7477 else if (type0 == NULL)
7478 return 0;
7479 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7480 return 1;
7481 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7482 return 0;
7483 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7484 return 1;
7485 else if (ada_is_packed_array_type (type0))
7486 return 1;
7487 else if (ada_is_array_descriptor_type (type0)
7488 && !ada_is_array_descriptor_type (type1))
7489 return 1;
7490 else if (ada_renaming_type (type0) != NULL
7491 && ada_renaming_type (type1) == NULL)
7492 return 1;
7493 return 0;
7494 }
7495
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. */
7498
7499 char *
7500 ada_type_name (struct type *type)
7501 {
7502 if (type == NULL)
7503 return NULL;
7504 else if (TYPE_NAME (type) != NULL)
7505 return TYPE_NAME (type);
7506 else
7507 return TYPE_TAG_NAME (type);
7508 }
7509
7510 /* Find a parallel type to TYPE whose name is formed by appending
7511 SUFFIX to the name of TYPE. */
7512
7513 struct type *
7514 ada_find_parallel_type (struct type *type, const char *suffix)
7515 {
7516 static char *name;
7517 static size_t name_len = 0;
7518 int len;
7519 char *typename = ada_type_name (type);
7520
7521 if (typename == NULL)
7522 return NULL;
7523
7524 len = strlen (typename);
7525
7526 GROW_VECT (name, name_len, len + strlen (suffix) + 1);
7527
7528 strcpy (name, typename);
7529 strcpy (name + len, suffix);
7530
7531 return ada_find_any_type (name);
7532 }
7533
7534
7535 /* If TYPE is a variable-size record type, return the corresponding template
7536 type describing its fields. Otherwise, return NULL. */
7537
7538 static struct type *
7539 dynamic_template_type (struct type *type)
7540 {
7541 CHECK_TYPEDEF (type);
7542
7543 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7544 || ada_type_name (type) == NULL)
7545 return NULL;
7546 else
7547 {
7548 int len = strlen (ada_type_name (type));
7549 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7550 return type;
7551 else
7552 return ada_find_parallel_type (type, "___XVE");
7553 }
7554 }
7555
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. */
7558
7559 static int
7560 is_dynamic_field (struct type *templ_type, int field_num)
7561 {
7562 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7563 return name != NULL
7564 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7565 && strstr (name, "___XVL") != NULL;
7566 }
7567
7568 /* The index of the variant field of TYPE, or -1 if TYPE does not
7569 represent a variant record type. */
7570
7571 static int
7572 variant_field_index (struct type *type)
7573 {
7574 int f;
7575
7576 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7577 return -1;
7578
7579 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7580 {
7581 if (ada_is_variant_part (type, f))
7582 return f;
7583 }
7584 return -1;
7585 }
7586
7587 /* A record type with no fields. */
7588
7589 static struct type *
7590 empty_record (struct objfile *objfile)
7591 {
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;
7600 return type;
7601 }
7602
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
7610 of the variant.
7611
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.
7615
7616 NOTE: Limitations: For now, we assume that dynamic fields and
7617 variants occupy whole numbers of bytes. However, they need not be
7618 byte-aligned. */
7619
7620 struct type *
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)
7624 {
7625 struct value *mark = value_mark ();
7626 struct value *dval;
7627 struct type *rtype;
7628 int nfields, bit_len;
7629 int variant_field;
7630 long off;
7631 int fld_bit_len, bit_incr;
7632 int f;
7633
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);
7639 else
7640 {
7641 nfields = 0;
7642 while (nfields < TYPE_NFIELDS (type)
7643 && !ada_is_variant_part (type, nfields)
7644 && !is_dynamic_field (type, nfields))
7645 nfields++;
7646 }
7647
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;
7658
7659 off = 0;
7660 bit_len = 0;
7661 variant_field = -1;
7662
7663 for (f = 0; f < nfields; f += 1)
7664 {
7665 off =
7666 align_value (off,
7667 field_alignment (type, f)) + TYPE_FIELD_BITPOS (type, f);
7668 TYPE_FIELD_BITPOS (rtype, f) = off;
7669 TYPE_FIELD_BITSIZE (rtype, f) = 0;
7670
7671 if (ada_is_variant_part (type, f))
7672 {
7673 variant_field = f;
7674 fld_bit_len = bit_incr = 0;
7675 }
7676 else if (is_dynamic_field (type, f))
7677 {
7678 if (dval0 == NULL)
7679 dval = value_from_contents_and_address (rtype, valaddr, address);
7680 else
7681 dval = dval0;
7682
7683 TYPE_FIELD_TYPE (rtype, f) =
7684 ada_to_fixed_type
7685 (ada_get_base_type
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;
7692 }
7693 else
7694 {
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);
7700 else
7701 bit_incr = fld_bit_len =
7702 TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
7703 }
7704 if (off + fld_bit_len > bit_len)
7705 bit_len = off + fld_bit_len;
7706 off += bit_incr;
7707 TYPE_LENGTH (rtype) =
7708 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7709 }
7710
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
7714 clauses. */
7715 if (variant_field >= 0)
7716 {
7717 struct type *branch_type;
7718
7719 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7720
7721 if (dval0 == NULL)
7722 dval = value_from_contents_and_address (rtype, valaddr, address);
7723 else
7724 dval = dval0;
7725
7726 branch_type =
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)
7732 {
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;
7736 }
7737 else
7738 {
7739 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7740 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7741 fld_bit_len =
7742 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
7743 TARGET_CHAR_BIT;
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;
7748 }
7749 }
7750
7751 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype), TYPE_LENGTH (type));
7752
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");
7756 return rtype;
7757 }
7758
7759 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7760 of 1. */
7761
7762 static struct type *
7763 template_to_fixed_record_type (struct type *type, char *valaddr,
7764 CORE_ADDR address, struct value *dval0)
7765 {
7766 return ada_template_to_fixed_record_type_1 (type, valaddr,
7767 address, dval0, 1);
7768 }
7769
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
7777 template type. */
7778
7779 static struct type *
7780 template_to_static_fixed_type (struct type *type0)
7781 {
7782 struct type *type;
7783 int nfields;
7784 int f;
7785
7786 if (TYPE_TARGET_TYPE (type0) != NULL)
7787 return TYPE_TARGET_TYPE (type0);
7788
7789 nfields = TYPE_NFIELDS (type0);
7790 type = type0;
7791
7792 for (f = 0; f < nfields; f += 1)
7793 {
7794 struct type *field_type = CHECK_TYPEDEF (TYPE_FIELD_TYPE (type0, f));
7795 struct type *new_type;
7796
7797 if (is_dynamic_field (type0, f))
7798 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
7799 else
7800 new_type = to_static_fixed_type (field_type);
7801 if (type == type0 && new_type != field_type)
7802 {
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;
7815 }
7816 TYPE_FIELD_TYPE (type, f) = new_type;
7817 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
7818 }
7819 return type;
7820 }
7821
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. */
7828
7829 static struct type *
7830 to_record_with_fixed_variant_part (struct type *type, char *valaddr,
7831 CORE_ADDR address, struct value *dval0)
7832 {
7833 struct value *mark = value_mark ();
7834 struct value *dval;
7835 struct type *rtype;
7836 struct type *branch_type;
7837 int nfields = TYPE_NFIELDS (type);
7838 int variant_field = variant_field_index (type);
7839
7840 if (variant_field == -1)
7841 return type;
7842
7843 if (dval0 == NULL)
7844 dval = value_from_contents_and_address (type, valaddr, address);
7845 else
7846 dval = dval0;
7847
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);
7860
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)
7865 / TARGET_CHAR_BIT),
7866 cond_offset_target (address,
7867 TYPE_FIELD_BITPOS (type, variant_field)
7868 / TARGET_CHAR_BIT), dval);
7869 if (branch_type == NULL)
7870 {
7871 int f;
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;
7875 }
7876 else
7877 {
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);
7882 }
7883 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7884
7885 value_free_to_mark (mark);
7886 return rtype;
7887 }
7888
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.
7898
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. */
7906
7907 static struct type *
7908 to_fixed_record_type (struct type *type0, char *valaddr,
7909 CORE_ADDR address, struct value *dval)
7910 {
7911 struct type *templ_type;
7912
7913 if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
7914 return type0;
7915
7916 templ_type = dynamic_template_type (type0);
7917
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)
7921 {
7922 if (dval == NULL && valaddr == NULL && address == 0)
7923 return type0;
7924 return to_record_with_fixed_variant_part (type0, valaddr, address,
7925 dval);
7926 }
7927 else
7928 {
7929 TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE;
7930 return type0;
7931 }
7932
7933 }
7934
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. */
7941
7942 static struct type *
7943 to_fixed_variant_branch_type (struct type *var_type0, char *valaddr,
7944 CORE_ADDR address, struct value *dval)
7945 {
7946 int which;
7947 struct type *templ_type;
7948 struct type *var_type;
7949
7950 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7951 var_type = TYPE_TARGET_TYPE (var_type0);
7952 else
7953 var_type = var_type0;
7954
7955 templ_type = ada_find_parallel_type (var_type, "___XVU");
7956
7957 if (templ_type != NULL)
7958 var_type = templ_type;
7959
7960 which =
7961 ada_which_variant_applies (var_type,
7962 VALUE_TYPE (dval), VALUE_CONTENTS (dval));
7963
7964 if (which < 0)
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)
7971 return
7972 to_fixed_record_type
7973 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
7974 else
7975 return TYPE_FIELD_TYPE (var_type, which);
7976 }
7977
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
7984 varsize_limit. */
7985
7986 static struct type *
7987 to_fixed_array_type (struct type *type0, struct value *dval,
7988 int ignore_too_big)
7989 {
7990 struct type *index_type_desc;
7991 struct type *result;
7992
7993 if (ada_is_packed_array_type (type0) /* revisit? */
7994 || (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
7995 return type0;
7996
7997 index_type_desc = ada_find_parallel_type (type0, "___XA");
7998 if (index_type_desc == NULL)
7999 {
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
8003 debugging data. */
8004 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval);
8005
8006 if (elt_type0 == elt_type)
8007 result = type0;
8008 else
8009 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
8010 elt_type, TYPE_INDEX_TYPE (type0));
8011 }
8012 else
8013 {
8014 int i;
8015 struct type *elt_type0;
8016
8017 elt_type0 = type0;
8018 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8019 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8020
8021 /* NOTE: result---the fixed version of elt_type0---should never
8022 depend on the contents of the array in properly constructed
8023 debugging data. */
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)
8026 {
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);
8032 }
8033 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8034 error ("array type with dynamic size is larger than varsize-limit");
8035 }
8036
8037 TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE;
8038 return result;
8039 }
8040
8041
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. */
8047
8048 struct type *
8049 ada_to_fixed_type (struct type *type, char *valaddr,
8050 CORE_ADDR address, struct value *dval)
8051 {
8052 CHECK_TYPEDEF (type);
8053 switch (TYPE_CODE (type))
8054 {
8055 default:
8056 return type;
8057 case TYPE_CODE_STRUCT:
8058 {
8059 struct type *static_type = to_static_fixed_type (type);
8060 if (ada_is_tagged_type (static_type, 0))
8061 {
8062 struct type *real_type =
8063 type_from_tag (value_tag_from_contents_and_address (static_type,
8064 valaddr,
8065 address));
8066 if (real_type != NULL)
8067 type = real_type;
8068 }
8069 return to_fixed_record_type (type, valaddr, address, NULL);
8070 }
8071 case TYPE_CODE_ARRAY:
8072 return to_fixed_array_type (type, dval, 1);
8073 case TYPE_CODE_UNION:
8074 if (dval == NULL)
8075 return type;
8076 else
8077 return to_fixed_variant_branch_type (type, valaddr, address, dval);
8078 }
8079 }
8080
8081 /* A standard (static-sized) type corresponding as well as possible to
8082 TYPE0, but based on no runtime data. */
8083
8084 static struct type *
8085 to_static_fixed_type (struct type *type0)
8086 {
8087 struct type *type;
8088
8089 if (type0 == NULL)
8090 return NULL;
8091
8092 if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
8093 return type0;
8094
8095 CHECK_TYPEDEF (type0);
8096
8097 switch (TYPE_CODE (type0))
8098 {
8099 default:
8100 return type0;
8101 case TYPE_CODE_STRUCT:
8102 type = dynamic_template_type (type0);
8103 if (type != NULL)
8104 return template_to_static_fixed_type (type);
8105 else
8106 return template_to_static_fixed_type (type0);
8107 case TYPE_CODE_UNION:
8108 type = ada_find_parallel_type (type0, "___XVU");
8109 if (type != NULL)
8110 return template_to_static_fixed_type (type);
8111 else
8112 return template_to_static_fixed_type (type0);
8113 }
8114 }
8115
8116 /* A static approximation of TYPE with all type wrappers removed. */
8117
8118 static struct type *
8119 static_unwrap_type (struct type *type)
8120 {
8121 if (ada_is_aligner_type (type))
8122 {
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);
8126
8127 return static_unwrap_type (type1);
8128 }
8129 else
8130 {
8131 struct type *raw_real_type = ada_get_base_type (type);
8132 if (raw_real_type == type)
8133 return type;
8134 else
8135 return to_static_fixed_type (raw_real_type);
8136 }
8137 }
8138
8139 /* In some cases, incomplete and private types require
8140 cross-references that are not resolved as records (for example,
8141 type Foo;
8142 type FooP is access Foo;
8143 V: FooP;
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". */
8149
8150 /* A type equivalent to TYPE that is not a non-record stub, if one
8151 exists, otherwise TYPE. */
8152
8153 struct type *
8154 ada_completed_type (struct type *type)
8155 {
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)
8160 return type;
8161 else
8162 {
8163 char *name = TYPE_TAG_NAME (type);
8164 struct type *type1 = ada_find_any_type (name);
8165 return (type1 == NULL) ? type : type1;
8166 }
8167 }
8168
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]. */
8174
8175 static struct value *
8176 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8177 struct value *val0)
8178 {
8179 struct type *type = ada_to_fixed_type (type0, 0, address, NULL);
8180 if (type == type0 && val0 != NULL)
8181 return val0;
8182 else
8183 return value_from_contents_and_address (type, 0, address);
8184 }
8185
8186 /* A value representing VAL, but with a standard (static-sized) type
8187 that correctly describes it. Does not necessarily create a new
8188 value. */
8189
8190 static struct value *
8191 ada_to_fixed_value (struct value *val)
8192 {
8193 return ada_to_fixed_value_create (VALUE_TYPE (val),
8194 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
8195 val);
8196 }
8197
8198 /* If the PC is pointing inside a function prologue, then re-adjust it
8199 past this prologue. */
8200
8201 static void
8202 adjust_pc_past_prologue (CORE_ADDR *pc)
8203 {
8204 struct symbol *func_sym = find_pc_function (*pc);
8205
8206 if (func_sym)
8207 {
8208 const struct symtab_and_line sal = find_function_start_sal (func_sym, 1);
8209
8210 if (*pc <= sal.pc)
8211 *pc = sal.pc;
8212 }
8213 }
8214
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. */
8219
8220 struct value *
8221 ada_to_static_fixed_value (struct value *val)
8222 {
8223 struct type *type =
8224 to_static_fixed_type (static_unwrap_type (VALUE_TYPE (val)));
8225 if (type == VALUE_TYPE (val))
8226 return val;
8227 else
8228 return coerce_unspec_val_to_type (val, type);
8229 }
8230 \f
8231
8232 /* Attributes */
8233
8234 /* Table mapping attribute numbers to names.
8235 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
8236
8237 static const char *attribute_names[] = {
8238 "<?>",
8239
8240 "first",
8241 "last",
8242 "length",
8243 "image",
8244 "max",
8245 "min",
8246 "modulus",
8247 "pos",
8248 "size",
8249 "tag",
8250 "val",
8251 0
8252 };
8253
8254 const char *
8255 ada_attribute_name (enum exp_opcode n)
8256 {
8257 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8258 return attribute_names[n - OP_ATR_FIRST + 1];
8259 else
8260 return attribute_names[0];
8261 }
8262
8263 /* Evaluate the 'POS attribute applied to ARG. */
8264
8265 static LONGEST
8266 pos_atr (struct value *arg)
8267 {
8268 struct type *type = VALUE_TYPE (arg);
8269
8270 if (!discrete_type_p (type))
8271 error ("'POS only defined on discrete types");
8272
8273 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8274 {
8275 int i;
8276 LONGEST v = value_as_long (arg);
8277
8278 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8279 {
8280 if (v == TYPE_FIELD_BITPOS (type, i))
8281 return i;
8282 }
8283 error ("enumeration value is invalid: can't find 'POS");
8284 }
8285 else
8286 return value_as_long (arg);
8287 }
8288
8289 static struct value *
8290 value_pos_atr (struct value *arg)
8291 {
8292 return value_from_longest (builtin_type_ada_int, pos_atr (arg));
8293 }
8294
8295 /* Evaluate the TYPE'VAL attribute applied to ARG. */
8296
8297 static struct value *
8298 value_val_atr (struct type *type, struct value *arg)
8299 {
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");
8304
8305 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8306 {
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));
8311 }
8312 else
8313 return value_from_longest (type, value_as_long (arg));
8314 }
8315 \f
8316
8317 /* Evaluation */
8318
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]. */
8322
8323 int
8324 ada_is_character_type (struct type *type)
8325 {
8326 const char *name = ada_type_name (type);
8327 return
8328 name != NULL
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);
8335 }
8336
8337 /* True if TYPE appears to be an Ada string type. */
8338
8339 int
8340 ada_is_string_type (struct type *type)
8341 {
8342 CHECK_TYPEDEF (type);
8343 if (type != NULL
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)
8347 {
8348 struct type *elttype = ada_array_element_type (type, 1);
8349
8350 return ada_is_character_type (elttype);
8351 }
8352 else
8353 return 0;
8354 }
8355
8356
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. */
8360
8361 int
8362 ada_is_aligner_type (struct type *type)
8363 {
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);
8368 }
8369
8370 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8371 the parallel type. */
8372
8373 struct type *
8374 ada_get_base_type (struct type *raw_type)
8375 {
8376 struct type *real_type_namer;
8377 struct type *raw_real_type;
8378
8379 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8380 return raw_type;
8381
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)
8386 return raw_type;
8387
8388 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8389 if (raw_real_type == NULL)
8390 return raw_type;
8391 else
8392 return raw_real_type;
8393 }
8394
8395 /* The type of value designated by TYPE, with all aligners removed. */
8396
8397 struct type *
8398 ada_aligned_type (struct type *type)
8399 {
8400 if (ada_is_aligner_type (type))
8401 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8402 else
8403 return ada_get_base_type (type);
8404 }
8405
8406
8407 /* The address of the aligned value in an object at address VALADDR
8408 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
8409
8410 char *
8411 ada_aligned_value_addr (struct type *type, char *valaddr)
8412 {
8413 if (ada_is_aligner_type (type))
8414 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
8415 valaddr +
8416 TYPE_FIELD_BITPOS (type,
8417 0) / TARGET_CHAR_BIT);
8418 else
8419 return valaddr;
8420 }
8421
8422
8423
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. */
8426 const char *
8427 ada_enum_name (const char *name)
8428 {
8429 static char *result;
8430 static size_t result_len = 0;
8431 char *tmp;
8432
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. */
8441
8442 if ((tmp = strrchr (name, '.')) != NULL)
8443 name = tmp + 1;
8444 else
8445 {
8446 while ((tmp = strstr (name, "__")) != NULL)
8447 {
8448 if (isdigit (tmp[2]))
8449 break;
8450 else
8451 name = tmp + 2;
8452 }
8453 }
8454
8455 if (name[0] == 'Q')
8456 {
8457 int v;
8458 if (name[1] == 'U' || name[1] == 'W')
8459 {
8460 if (sscanf (name + 2, "%x", &v) != 1)
8461 return name;
8462 }
8463 else
8464 return name;
8465
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);
8471 else
8472 sprintf (result, "[\"%04x\"]", v);
8473
8474 return result;
8475 }
8476 else
8477 {
8478 if ((tmp = strstr (name, "__")) != NULL
8479 || (tmp = strstr (name, "$")) != NULL)
8480 {
8481 GROW_VECT (result, result_len, tmp - name + 1);
8482 strncpy (result, name, tmp - name);
8483 result[tmp - name] = '\0';
8484 return result;
8485 }
8486
8487 return name;
8488 }
8489 }
8490
8491 static struct value *
8492 evaluate_subexp (struct type *expect_type, struct expression *exp, int *pos,
8493 enum noside noside)
8494 {
8495 return (*exp->language_defn->la_exp_desc->evaluate_exp)
8496 (expect_type, exp, pos, noside);
8497 }
8498
8499 /* Evaluate the subexpression of EXP starting at *POS as for
8500 evaluate_type, updating *POS to point just past the evaluated
8501 expression. */
8502
8503 static struct value *
8504 evaluate_subexp_type (struct expression *exp, int *pos)
8505 {
8506 return (*exp->language_defn->la_exp_desc->evaluate_exp)
8507 (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8508 }
8509
8510 /* If VAL is wrapped in an aligner or subtype wrapper, return the
8511 value it wraps. */
8512
8513 static struct value *
8514 unwrap_value (struct value *val)
8515 {
8516 struct type *type = check_typedef (VALUE_TYPE (val));
8517 if (ada_is_aligner_type (type))
8518 {
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);
8524
8525 return unwrap_value (v);
8526 }
8527 else
8528 {
8529 struct type *raw_real_type =
8530 ada_completed_type (ada_get_base_type (type));
8531
8532 if (type == raw_real_type)
8533 return val;
8534
8535 return
8536 coerce_unspec_val_to_type
8537 (val, ada_to_fixed_type (raw_real_type, 0,
8538 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
8539 NULL));
8540 }
8541 }
8542
8543 static struct value *
8544 cast_to_fixed (struct type *type, struct value *arg)
8545 {
8546 LONGEST val;
8547
8548 if (type == VALUE_TYPE (arg))
8549 return 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)));
8554 else
8555 {
8556 DOUBLEST argd =
8557 value_as_double (value_cast (builtin_type_double, value_copy (arg)));
8558 val = ada_float_to_fixed (type, argd);
8559 }
8560
8561 return value_from_longest (type, val);
8562 }
8563
8564 static struct value *
8565 cast_from_fixed_to_double (struct value *arg)
8566 {
8567 DOUBLEST val = ada_fixed_to_float (VALUE_TYPE (arg),
8568 value_as_long (arg));
8569 return value_from_double (builtin_type_double, val);
8570 }
8571
8572 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
8573 return the converted value. */
8574
8575 static struct value *
8576 coerce_for_assign (struct type *type, struct value *val)
8577 {
8578 struct type *type2 = VALUE_TYPE (val);
8579 if (type == type2)
8580 return val;
8581
8582 CHECK_TYPEDEF (type2);
8583 CHECK_TYPEDEF (type);
8584
8585 if (TYPE_CODE (type2) == TYPE_CODE_PTR
8586 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8587 {
8588 val = ada_value_ind (val);
8589 type2 = VALUE_TYPE (val);
8590 }
8591
8592 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
8593 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8594 {
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;
8600 }
8601 return val;
8602 }
8603
8604 static struct value *
8605 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
8606 {
8607 struct value *val;
8608 struct type *type1, *type2;
8609 LONGEST v, v1, v2;
8610
8611 COERCE_REF (arg1);
8612 COERCE_REF (arg2);
8613 type1 = base_type (check_typedef (VALUE_TYPE (arg1)));
8614 type2 = base_type (check_typedef (VALUE_TYPE (arg2)));
8615
8616 if (TYPE_CODE (type1) != TYPE_CODE_INT || TYPE_CODE (type2) != TYPE_CODE_INT)
8617 return value_binop (arg1, arg2, op);
8618
8619 switch (op)
8620 {
8621 case BINOP_MOD:
8622 case BINOP_DIV:
8623 case BINOP_REM:
8624 break;
8625 default:
8626 return value_binop (arg1, arg2, op);
8627 }
8628
8629 v2 = value_as_long (arg2);
8630 if (v2 == 0)
8631 error ("second operand of %s must not be zero.", op_string (op));
8632
8633 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
8634 return value_binop (arg1, arg2, op);
8635
8636 v1 = value_as_long (arg1);
8637 switch (op)
8638 {
8639 case BINOP_DIV:
8640 v = v1 / v2;
8641 if (! TRUNCATION_TOWARDS_ZERO && v1 * (v1%v2) < 0)
8642 v += v > 0 ? -1 : 1;
8643 break;
8644 case BINOP_REM:
8645 v = v1 % v2;
8646 if (v*v1 < 0)
8647 v -= v2;
8648 break;
8649 default:
8650 /* Should not reach this point. */
8651 v = 0;
8652 }
8653
8654 val = allocate_value (type1);
8655 store_unsigned_integer (VALUE_CONTENTS_RAW (val),
8656 TYPE_LENGTH (VALUE_TYPE (val)),
8657 v);
8658 return val;
8659 }
8660
8661 static int
8662 ada_value_equal (struct value *arg1, struct value *arg2)
8663 {
8664 if (ada_is_direct_array_type (VALUE_TYPE (arg1))
8665 || ada_is_direct_array_type (VALUE_TYPE (arg2)))
8666 {
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. */
8675 return
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;
8679 }
8680 return value_equal (arg1, arg2);
8681 }
8682
8683 struct value *
8684 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
8685 int *pos, enum noside noside)
8686 {
8687 enum exp_opcode op;
8688 int tem, tem2, tem3;
8689 int pc;
8690 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8691 struct type *type;
8692 int nargs;
8693 struct value **argvec;
8694
8695 pc = *pos;
8696 *pos += 1;
8697 op = exp->elts[pc].opcode;
8698
8699 switch (op)
8700 {
8701 default:
8702 *pos -= 1;
8703 return
8704 unwrap_value (evaluate_subexp_standard
8705 (expect_type, exp, pos, noside));
8706
8707 case OP_STRING:
8708 {
8709 struct value *result;
8710 *pos -= 1;
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;
8716 return result;
8717 }
8718
8719 case UNOP_CAST:
8720 (*pos) += 2;
8721 type = exp->elts[pc + 1].type;
8722 arg1 = evaluate_subexp (type, exp, pos, noside);
8723 if (noside == EVAL_SKIP)
8724 goto nosideret;
8725 if (type != check_typedef (VALUE_TYPE (arg1)))
8726 {
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)
8732 {
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
8737 TYPE. */
8738 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8739 return value_zero (to_static_fixed_type (type), not_lval);
8740 arg1 =
8741 ada_to_fixed_value_create
8742 (type, VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1), 0);
8743 }
8744 else
8745 arg1 = value_cast (type, arg1);
8746 }
8747 return arg1;
8748
8749 case UNOP_QUAL:
8750 (*pos) += 2;
8751 type = exp->elts[pc + 1].type;
8752 return ada_evaluate_subexp (type, exp, pos, noside);
8753
8754 case BINOP_ASSIGN:
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)
8758 return arg1;
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)))
8762 error
8763 ("Fixed-point values must be assigned to fixed-point variables");
8764 else
8765 arg2 = coerce_for_assign (VALUE_TYPE (arg1), arg2);
8766 return ada_value_assign (arg1, arg2);
8767
8768 case BINOP_ADD:
8769 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8770 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8771 if (noside == EVAL_SKIP)
8772 goto nosideret;
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))
8776 error
8777 ("Operands of fixed-point addition must have the same type");
8778 return value_cast (VALUE_TYPE (arg1), value_add (arg1, arg2));
8779
8780 case BINOP_SUB:
8781 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8782 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8783 if (noside == EVAL_SKIP)
8784 goto nosideret;
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))
8788 error
8789 ("Operands of fixed-point subtraction must have the same type");
8790 return value_cast (VALUE_TYPE (arg1), value_sub (arg1, arg2));
8791
8792 case BINOP_MUL:
8793 case BINOP_DIV:
8794 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8795 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8796 if (noside == EVAL_SKIP)
8797 goto nosideret;
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);
8801 else
8802 {
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);
8808 }
8809
8810 case BINOP_REM:
8811 case BINOP_MOD:
8812 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8813 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8814 if (noside == EVAL_SKIP)
8815 goto nosideret;
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);
8819 else
8820 return ada_value_binop (arg1, arg2, op);
8821
8822 case BINOP_EQUAL:
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)
8827 goto nosideret;
8828 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8829 tem = 0;
8830 else
8831 tem = ada_value_equal (arg1, arg2);
8832 if (op == BINOP_NOTEQUAL)
8833 tem = ! tem;
8834 return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
8835
8836 case UNOP_NEG:
8837 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8838 if (noside == EVAL_SKIP)
8839 goto nosideret;
8840 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
8841 return value_cast (VALUE_TYPE (arg1), value_neg (arg1));
8842 else
8843 return value_neg (arg1);
8844
8845 case OP_VAR_VALUE:
8846 *pos -= 1;
8847 if (noside == EVAL_SKIP)
8848 {
8849 *pos += 4;
8850 goto nosideret;
8851 }
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
8855 illegal. */
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)
8859 {
8860 *pos += 4;
8861 return value_zero
8862 (to_static_fixed_type
8863 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8864 not_lval);
8865 }
8866 else
8867 {
8868 arg1 =
8869 unwrap_value (evaluate_subexp_standard
8870 (expect_type, exp, pos, noside));
8871 return ada_to_fixed_value (arg1);
8872 }
8873
8874 case OP_FUNCALL:
8875 (*pos) += 2;
8876
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);
8880 argvec =
8881 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8882
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));
8887 else
8888 {
8889 for (tem = 0; tem <= nargs; tem += 1)
8890 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8891 argvec[tem] = 0;
8892
8893 if (noside == EVAL_SKIP)
8894 goto nosideret;
8895 }
8896
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]);
8903
8904 type = check_typedef (VALUE_TYPE (argvec[0]));
8905 if (TYPE_CODE (type) == TYPE_CODE_PTR)
8906 {
8907 switch (TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (type))))
8908 {
8909 case TYPE_CODE_FUNC:
8910 type = check_typedef (TYPE_TARGET_TYPE (type));
8911 break;
8912 case TYPE_CODE_ARRAY:
8913 break;
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));
8918 break;
8919 default:
8920 error ("cannot subscript or call something of type `%s'",
8921 ada_type_name (VALUE_TYPE (argvec[0])));
8922 break;
8923 }
8924 }
8925
8926 switch (TYPE_CODE (type))
8927 {
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:
8933 {
8934 int arity;
8935
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);
8940
8941 arity = ada_array_arity (type);
8942 type = ada_array_element_type (type, nargs);
8943 if (type == NULL)
8944 error ("cannot subscript or call a record");
8945 if (arity != nargs)
8946 error ("wrong number of subscripts; expecting %d", arity);
8947 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8948 return allocate_value (ada_aligned_type (type));
8949 return
8950 unwrap_value (ada_value_subscript
8951 (argvec[0], nargs, argvec + 1));
8952 }
8953 case TYPE_CODE_ARRAY:
8954 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8955 {
8956 type = ada_array_element_type (type, nargs);
8957 if (type == NULL)
8958 error ("element type of array unknown");
8959 else
8960 return allocate_value (ada_aligned_type (type));
8961 }
8962 return
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)
8969 {
8970 type = ada_array_element_type (type, nargs);
8971 if (type == NULL)
8972 error ("element type of array unknown");
8973 else
8974 return allocate_value (ada_aligned_type (type));
8975 }
8976 return
8977 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
8978 nargs, argvec + 1));
8979
8980 default:
8981 error ("Internal error in evaluate_subexp");
8982 }
8983
8984 case TERNOP_SLICE:
8985 {
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);
8990 LONGEST high_bound
8991 = pos_atr (evaluate_subexp (NULL_TYPE, exp, pos, noside));
8992 if (noside == EVAL_SKIP)
8993 goto nosideret;
8994
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)));
9002
9003 /* If this is a reference to an aligner type, then remove all
9004 the aligners. */
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)));
9009
9010 if (ada_is_packed_array_type (VALUE_TYPE (array)))
9011 error ("cannot slice a packed array");
9012
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);
9019
9020 if (noside == EVAL_AVOID_SIDE_EFFECTS &&
9021 ada_is_array_descriptor_type (check_typedef (VALUE_TYPE (array))))
9022 {
9023 /* Try dereferencing the array, in case it is an access
9024 to array. */
9025 struct type *arrType = ada_type_of_array (array, 0);
9026 if (arrType != NULL)
9027 array = value_at_lazy (arrType, 0, NULL);
9028 }
9029
9030 array = ada_coerce_to_simple_array_ptr (array);
9031
9032 /* When EVAL_AVOID_SIDE_EFFECTS, we may get the bounds wrong,
9033 but only in contexts where the value is not being requested
9034 (FIXME?). */
9035 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_PTR)
9036 {
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)),
9041 low_bound);
9042 else
9043 {
9044 struct type *arr_type0 =
9045 to_fixed_array_type (TYPE_TARGET_TYPE (VALUE_TYPE (array)),
9046 NULL, 1);
9047 struct value *item0 =
9048 ada_value_ptr_subscript (array, arr_type0, 1,
9049 &low_bound_val);
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;
9055 return slice;
9056 }
9057 }
9058 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9059 return array;
9060 else if (high_bound < low_bound)
9061 return empty_array (VALUE_TYPE (array), low_bound);
9062 else
9063 return value_slice (array, low_bound, high_bound - low_bound + 1);
9064 }
9065
9066 case UNOP_IN_RANGE:
9067 (*pos) += 2;
9068 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9069 type = exp->elts[pc + 1].type;
9070
9071 if (noside == EVAL_SKIP)
9072 goto nosideret;
9073
9074 switch (TYPE_CODE (type))
9075 {
9076 default:
9077 lim_warning ("Membership test incompletely implemented; "
9078 "always returns true", 0);
9079 return value_from_longest (builtin_type_int, (LONGEST) 1);
9080
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));
9086 return
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)));
9092 }
9093
9094 case BINOP_IN_BOUNDS:
9095 (*pos) += 2;
9096 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9097 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9098
9099 if (noside == EVAL_SKIP)
9100 goto nosideret;
9101
9102 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9103 return value_zero (builtin_type_int, not_lval);
9104
9105 tem = longest_to_int (exp->elts[pc + 1].longconst);
9106
9107 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg2)))
9108 error ("invalid dimension number to '%s", "range");
9109
9110 arg3 = ada_array_bound (arg2, tem, 1);
9111 arg2 = ada_array_bound (arg2, tem, 0);
9112
9113 return
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)));
9119
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);
9124
9125 if (noside == EVAL_SKIP)
9126 goto nosideret;
9127
9128 return
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)));
9134
9135 case OP_ATR_FIRST:
9136 case OP_ATR_LAST:
9137 case OP_ATR_LENGTH:
9138 {
9139 struct type *type_arg;
9140 if (exp->elts[*pos].opcode == OP_TYPE)
9141 {
9142 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9143 arg1 = NULL;
9144 type_arg = exp->elts[pc + 2].type;
9145 }
9146 else
9147 {
9148 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9149 type_arg = NULL;
9150 }
9151
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);
9155 *pos += 4;
9156
9157 if (noside == EVAL_SKIP)
9158 goto nosideret;
9159
9160 if (type_arg == NULL)
9161 {
9162 arg1 = ada_coerce_ref (arg1);
9163
9164 if (ada_is_packed_array_type (VALUE_TYPE (arg1)))
9165 arg1 = ada_coerce_to_simple_array (arg1);
9166
9167 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg1)))
9168 error ("invalid dimension number to '%s",
9169 ada_attribute_name (op));
9170
9171 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9172 {
9173 type = ada_index_type (VALUE_TYPE (arg1), tem);
9174 if (type == NULL)
9175 error
9176 ("attempt to take bound of something that is not an array");
9177 return allocate_value (type);
9178 }
9179
9180 switch (op)
9181 {
9182 default: /* Should never happen. */
9183 error ("unexpected attribute encountered");
9184 case OP_ATR_FIRST:
9185 return ada_array_bound (arg1, tem, 0);
9186 case OP_ATR_LAST:
9187 return ada_array_bound (arg1, tem, 1);
9188 case OP_ATR_LENGTH:
9189 return ada_array_length (arg1, tem);
9190 }
9191 }
9192 else if (discrete_type_p (type_arg))
9193 {
9194 struct type *range_type;
9195 char *name = ada_type_name (type_arg);
9196 range_type = NULL;
9197 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
9198 range_type =
9199 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
9200 if (range_type == NULL)
9201 range_type = type_arg;
9202 switch (op)
9203 {
9204 default:
9205 error ("unexpected attribute encountered");
9206 case OP_ATR_FIRST:
9207 return discrete_type_low_bound (range_type);
9208 case OP_ATR_LAST:
9209 return discrete_type_high_bound (range_type);
9210 case OP_ATR_LENGTH:
9211 error ("the 'length attribute applies only to array types");
9212 }
9213 }
9214 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
9215 error ("unimplemented type attribute");
9216 else
9217 {
9218 LONGEST low, high;
9219
9220 if (ada_is_packed_array_type (type_arg))
9221 type_arg = decode_packed_array_type (type_arg);
9222
9223 if (tem < 1 || tem > ada_array_arity (type_arg))
9224 error ("invalid dimension number to '%s",
9225 ada_attribute_name (op));
9226
9227 type = ada_index_type (type_arg, tem);
9228 if (type == NULL)
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);
9232
9233 switch (op)
9234 {
9235 default:
9236 error ("unexpected attribute encountered");
9237 case OP_ATR_FIRST:
9238 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
9239 return value_from_longest (type, low);
9240 case OP_ATR_LAST:
9241 high =
9242 ada_array_bound_from_type (type_arg, tem, 1, &type);
9243 return value_from_longest (type, high);
9244 case OP_ATR_LENGTH:
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);
9248 }
9249 }
9250 }
9251
9252 case OP_ATR_TAG:
9253 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9254 if (noside == EVAL_SKIP)
9255 goto nosideret;
9256
9257 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9258 return value_zero (ada_tag_type (arg1), not_lval);
9259
9260 return ada_value_tag (arg1);
9261
9262 case OP_ATR_MIN:
9263 case OP_ATR_MAX:
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)
9268 goto nosideret;
9269 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9270 return value_zero (VALUE_TYPE (arg1), not_lval);
9271 else
9272 return value_binop (arg1, arg2,
9273 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9274
9275 case OP_ATR_MODULUS:
9276 {
9277 struct type *type_arg = exp->elts[pc + 2].type;
9278 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9279
9280 if (noside == EVAL_SKIP)
9281 goto nosideret;
9282
9283 if (!ada_is_modular_type (type_arg))
9284 error ("'modulus must be applied to modular type");
9285
9286 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9287 ada_modulus (type_arg));
9288 }
9289
9290
9291 case OP_ATR_POS:
9292 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9293 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9294 if (noside == EVAL_SKIP)
9295 goto nosideret;
9296 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9297 return value_zero (builtin_type_ada_int, not_lval);
9298 else
9299 return value_pos_atr (arg1);
9300
9301 case OP_ATR_SIZE:
9302 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9303 if (noside == EVAL_SKIP)
9304 goto nosideret;
9305 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9306 return value_zero (builtin_type_ada_int, not_lval);
9307 else
9308 return value_from_longest (builtin_type_ada_int,
9309 TARGET_CHAR_BIT
9310 * TYPE_LENGTH (VALUE_TYPE (arg1)));
9311
9312 case OP_ATR_VAL:
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)
9317 goto nosideret;
9318 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9319 return value_zero (type, not_lval);
9320 else
9321 return value_val_atr (type, arg1);
9322
9323 case BINOP_EXP:
9324 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9325 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9326 if (noside == EVAL_SKIP)
9327 goto nosideret;
9328 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9329 return value_zero (VALUE_TYPE (arg1), not_lval);
9330 else
9331 return value_binop (arg1, arg2, op);
9332
9333 case UNOP_PLUS:
9334 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9335 if (noside == EVAL_SKIP)
9336 goto nosideret;
9337 else
9338 return arg1;
9339
9340 case UNOP_ABS:
9341 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9342 if (noside == EVAL_SKIP)
9343 goto nosideret;
9344 if (value_less (arg1, value_zero (VALUE_TYPE (arg1), not_lval)))
9345 return value_neg (arg1);
9346 else
9347 return arg1;
9348
9349 case UNOP_IND:
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)
9354 goto nosideret;
9355 type = check_typedef (VALUE_TYPE (arg1));
9356 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9357 {
9358 if (ada_is_array_descriptor_type (type))
9359 /* GDB allows dereferencing GNAT array descriptors. */
9360 {
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);
9365 }
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)
9370 return
9371 value_zero
9372 (to_static_fixed_type
9373 (ada_aligned_type (check_typedef (TYPE_TARGET_TYPE (type)))),
9374 lval_memory);
9375 else if (TYPE_CODE (type) == TYPE_CODE_INT)
9376 /* GDB allows dereferencing an int. */
9377 return value_zero (builtin_type_int, lval_memory);
9378 else
9379 error ("Attempt to take contents of a non-pointer value.");
9380 }
9381 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
9382 type = check_typedef (VALUE_TYPE (arg1));
9383
9384 if (ada_is_array_descriptor_type (type))
9385 /* GDB allows dereferencing GNAT array descriptors. */
9386 return ada_coerce_to_simple_array (arg1);
9387 else
9388 return ada_value_ind (arg1);
9389
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)
9395 goto nosideret;
9396 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9397 {
9398 struct type *type1 = VALUE_TYPE (arg1);
9399 if (ada_is_tagged_type (type1, 1))
9400 {
9401 type = ada_lookup_struct_elt_type (type1,
9402 &exp->elts[pc + 2].string,
9403 1, 1, NULL);
9404 if (type == NULL)
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);
9410 }
9411 else
9412 type = ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string,
9413 1, 0, NULL);
9414
9415 return value_zero (ada_aligned_type (type), lval_memory);
9416 }
9417 else
9418 return
9419 ada_to_fixed_value (unwrap_value
9420 (ada_value_struct_elt
9421 (arg1, &exp->elts[pc + 2].string, "record")));
9422 case OP_TYPE:
9423 /* The value is not supposed to be used. This is here to make it
9424 easier to accommodate expressions that contain types. */
9425 (*pos) += 2;
9426 if (noside == EVAL_SKIP)
9427 goto nosideret;
9428 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9429 return allocate_value (builtin_type_void);
9430 else
9431 error ("Attempt to use a type name as an expression");
9432 }
9433
9434 nosideret:
9435 return value_from_longest (builtin_type_long, (LONGEST) 1);
9436 }
9437 \f
9438
9439 /* Fixed point */
9440
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. */
9444
9445 static const char *
9446 fixed_type_info (struct type *type)
9447 {
9448 const char *name = ada_type_name (type);
9449 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9450
9451 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9452 {
9453 const char *tail = strstr (name, "___XF_");
9454 if (tail == NULL)
9455 return NULL;
9456 else
9457 return tail + 5;
9458 }
9459 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9460 return fixed_type_info (TYPE_TARGET_TYPE (type));
9461 else
9462 return NULL;
9463 }
9464
9465 /* Returns non-zero iff TYPE represents an Ada fixed-point type. */
9466
9467 int
9468 ada_is_fixed_point_type (struct type *type)
9469 {
9470 return fixed_type_info (type) != NULL;
9471 }
9472
9473 /* Return non-zero iff TYPE represents a System.Address type. */
9474
9475 int
9476 ada_is_system_address_type (struct type *type)
9477 {
9478 return (TYPE_NAME (type)
9479 && strcmp (TYPE_NAME (type), "system__address") == 0);
9480 }
9481
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. */
9485
9486 DOUBLEST
9487 ada_delta (struct type *type)
9488 {
9489 const char *encoding = fixed_type_info (type);
9490 long num, den;
9491
9492 if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
9493 return -1.0;
9494 else
9495 return (DOUBLEST) num / (DOUBLEST) den;
9496 }
9497
9498 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9499 factor ('SMALL value) associated with the type. */
9500
9501 static DOUBLEST
9502 scaling_factor (struct type *type)
9503 {
9504 const char *encoding = fixed_type_info (type);
9505 unsigned long num0, den0, num1, den1;
9506 int n;
9507
9508 n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
9509
9510 if (n < 2)
9511 return 1.0;
9512 else if (n == 4)
9513 return (DOUBLEST) num1 / (DOUBLEST) den1;
9514 else
9515 return (DOUBLEST) num0 / (DOUBLEST) den0;
9516 }
9517
9518
9519 /* Assuming that X is the representation of a value of fixed-point
9520 type TYPE, return its floating-point equivalent. */
9521
9522 DOUBLEST
9523 ada_fixed_to_float (struct type *type, LONGEST x)
9524 {
9525 return (DOUBLEST) x *scaling_factor (type);
9526 }
9527
9528 /* The representation of a fixed-point value of type TYPE
9529 corresponding to the value X. */
9530
9531 LONGEST
9532 ada_float_to_fixed (struct type *type, DOUBLEST x)
9533 {
9534 return (LONGEST) (x / scaling_factor (type) + 0.5);
9535 }
9536
9537
9538 /* VAX floating formats */
9539
9540 /* Non-zero iff TYPE represents one of the special VAX floating-point
9541 types. */
9542
9543 int
9544 ada_is_vax_floating_type (struct type *type)
9545 {
9546 int name_len =
9547 (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
9548 return
9549 name_len > 6
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;
9553 }
9554
9555 /* The type of special VAX floating-point type this is, assuming
9556 ada_is_vax_floating_point. */
9557
9558 int
9559 ada_vax_float_type_suffix (struct type *type)
9560 {
9561 return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
9562 }
9563
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). */
9567
9568 struct value *
9569 ada_vax_float_print_function (struct type *type)
9570 {
9571 switch (ada_vax_float_type_suffix (type))
9572 {
9573 case 'F':
9574 return get_var_value ("DEBUG_STRING_F", 0);
9575 case 'D':
9576 return get_var_value ("DEBUG_STRING_D", 0);
9577 case 'G':
9578 return get_var_value ("DEBUG_STRING_G", 0);
9579 default:
9580 error ("invalid VAX floating-point type");
9581 }
9582 }
9583 \f
9584
9585 /* Range types */
9586
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. */
9592
9593 static int
9594 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9595 int *pnew_k)
9596 {
9597 static char *bound_buffer = NULL;
9598 static size_t bound_buffer_len = 0;
9599 char *bound;
9600 char *pend;
9601 struct value *bound_val;
9602
9603 if (dval == NULL || str == NULL || str[k] == '\0')
9604 return 0;
9605
9606 pend = strstr (str + k, "__");
9607 if (pend == NULL)
9608 {
9609 bound = str + k;
9610 k += strlen (bound);
9611 }
9612 else
9613 {
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';
9618 k = pend - str;
9619 }
9620
9621 bound_val = ada_search_struct_field (bound, dval, 0, VALUE_TYPE (dval));
9622 if (bound_val == NULL)
9623 return 0;
9624
9625 *px = value_as_long (bound_val);
9626 if (pnew_k != NULL)
9627 *pnew_k = k;
9628 return 1;
9629 }
9630
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. */
9634
9635 static struct value *
9636 get_var_value (char *name, char *err_msg)
9637 {
9638 struct ada_symbol_info *syms;
9639 int nsyms;
9640
9641 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9642 &syms);
9643
9644 if (nsyms != 1)
9645 {
9646 if (err_msg == NULL)
9647 return 0;
9648 else
9649 error ("%s", err_msg);
9650 }
9651
9652 return value_of_variable (syms[0].sym, syms[0].block);
9653 }
9654
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. */
9658
9659 LONGEST
9660 get_int_var_value (char *name, int *flag)
9661 {
9662 struct value *var_val = get_var_value (name, 0);
9663
9664 if (var_val == 0)
9665 {
9666 if (flag != NULL)
9667 *flag = 0;
9668 return 0;
9669 }
9670 else
9671 {
9672 if (flag != NULL)
9673 *flag = 1;
9674 return value_as_long (var_val);
9675 }
9676 }
9677
9678
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. */
9686
9687 static struct type *
9688 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
9689 {
9690 struct type *raw_type = ada_find_any_type (name);
9691 struct type *base_type;
9692 char *subtype_info;
9693
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);
9698 else
9699 base_type = raw_type;
9700
9701 subtype_info = strstr (name, "___XD");
9702 if (subtype_info == NULL)
9703 return raw_type;
9704 else
9705 {
9706 static char *name_buf = NULL;
9707 static size_t name_len = 0;
9708 int prefix_len = subtype_info - name;
9709 LONGEST L, U;
9710 struct type *type;
9711 char *bounds_str;
9712 int n;
9713
9714 GROW_VECT (name_buf, name_len, prefix_len + 5);
9715 strncpy (name_buf, name, prefix_len);
9716 name_buf[prefix_len] = '\0';
9717
9718 subtype_info += 5;
9719 bounds_str = strchr (subtype_info, '_');
9720 n = 1;
9721
9722 if (*subtype_info == 'L')
9723 {
9724 if (!ada_scan_number (bounds_str, n, &L, &n)
9725 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9726 return raw_type;
9727 if (bounds_str[n] == '_')
9728 n += 2;
9729 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
9730 n += 1;
9731 subtype_info += 1;
9732 }
9733 else
9734 {
9735 int ok;
9736 strcpy (name_buf + prefix_len, "___L");
9737 L = get_int_var_value (name_buf, &ok);
9738 if (!ok)
9739 {
9740 lim_warning ("Unknown lower bound, using 1.", 1);
9741 L = 1;
9742 }
9743 }
9744
9745 if (*subtype_info == 'U')
9746 {
9747 if (!ada_scan_number (bounds_str, n, &U, &n)
9748 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9749 return raw_type;
9750 }
9751 else
9752 {
9753 int ok;
9754 strcpy (name_buf + prefix_len, "___U");
9755 U = get_int_var_value (name_buf, &ok);
9756 if (!ok)
9757 {
9758 lim_warning ("Unknown upper bound, using %ld.", (long) L);
9759 U = L;
9760 }
9761 }
9762
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;
9767 return type;
9768 }
9769 }
9770
9771 /* True iff NAME is the name of a range type. */
9772
9773 int
9774 ada_is_range_type_name (const char *name)
9775 {
9776 return (name != NULL && strstr (name, "___XD"));
9777 }
9778 \f
9779
9780 /* Modular types */
9781
9782 /* True iff TYPE is an Ada modular type. */
9783
9784 int
9785 ada_is_modular_type (struct type *type)
9786 {
9787 struct type *subranged_type = base_type (type);
9788
9789 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9790 && TYPE_CODE (subranged_type) != TYPE_CODE_ENUM
9791 && TYPE_UNSIGNED (subranged_type));
9792 }
9793
9794 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
9795
9796 LONGEST
9797 ada_modulus (struct type * type)
9798 {
9799 return TYPE_HIGH_BOUND (type) + 1;
9800 }
9801 \f
9802 /* Operators */
9803 /* Information about operators given special treatment in functions
9804 below. */
9805 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
9806
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)
9824
9825 static void
9826 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
9827 {
9828 switch (exp->elts[pc - 1].opcode)
9829 {
9830 default:
9831 operator_length_standard (exp, pc, oplenp, argsp);
9832 break;
9833
9834 #define OP_DEFN(op, len, args, binop) \
9835 case op: *oplenp = len; *argsp = args; break;
9836 ADA_OPERATORS;
9837 #undef OP_DEFN
9838 }
9839 }
9840
9841 static char *
9842 ada_op_name (enum exp_opcode opcode)
9843 {
9844 switch (opcode)
9845 {
9846 default:
9847 return op_name_standard (opcode);
9848 #define OP_DEFN(op, len, args, binop) case op: return #op;
9849 ADA_OPERATORS;
9850 #undef OP_DEFN
9851 }
9852 }
9853
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. */
9857
9858 static void
9859 ada_forward_operator_length (struct expression *exp, int pc,
9860 int *oplenp, int *argsp)
9861 {
9862 switch (exp->elts[pc].opcode)
9863 {
9864 default:
9865 *oplenp = *argsp = 0;
9866 break;
9867 #define OP_DEFN(op, len, args, binop) \
9868 case op: *oplenp = len; *argsp = args; break;
9869 ADA_OPERATORS;
9870 #undef OP_DEFN
9871 }
9872 }
9873
9874 static int
9875 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
9876 {
9877 enum exp_opcode op = exp->elts[elt].opcode;
9878 int oplen, nargs;
9879 int pc = elt;
9880 int i;
9881
9882 ada_forward_operator_length (exp, elt, &oplen, &nargs);
9883
9884 switch (op)
9885 {
9886 /* Ada attributes ('Foo). */
9887 case OP_ATR_FIRST:
9888 case OP_ATR_LAST:
9889 case OP_ATR_LENGTH:
9890 case OP_ATR_IMAGE:
9891 case OP_ATR_MAX:
9892 case OP_ATR_MIN:
9893 case OP_ATR_MODULUS:
9894 case OP_ATR_POS:
9895 case OP_ATR_SIZE:
9896 case OP_ATR_TAG:
9897 case OP_ATR_VAL:
9898 break;
9899
9900 case UNOP_IN_RANGE:
9901 case UNOP_QUAL:
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, ")");
9907 break;
9908 case BINOP_IN_BOUNDS:
9909 fprintf_filtered (stream, " (%d)", (int) exp->elts[pc + 2].longconst);
9910 break;
9911 case TERNOP_IN_RANGE:
9912 break;
9913
9914 default:
9915 return dump_subexp_body_standard (exp, stream, elt);
9916 }
9917
9918 elt += oplen;
9919 for (i = 0; i < nargs; i += 1)
9920 elt = dump_subexp (exp, stream, elt);
9921
9922 return elt;
9923 }
9924
9925 /* The Ada extension of print_subexp (q.v.). */
9926
9927 static void
9928 ada_print_subexp (struct expression *exp, int *pos,
9929 struct ui_file *stream, enum precedence prec)
9930 {
9931 int oplen, nargs;
9932 int pc = *pos;
9933 enum exp_opcode op = exp->elts[pc].opcode;
9934
9935 ada_forward_operator_length (exp, pc, &oplen, &nargs);
9936
9937 switch (op)
9938 {
9939 default:
9940 print_subexp_standard (exp, pos, stream, prec);
9941 return;
9942
9943 case OP_VAR_VALUE:
9944 *pos += oplen;
9945 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
9946 return;
9947
9948 case BINOP_IN_BOUNDS:
9949 *pos += oplen;
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);
9956 return;
9957
9958 case TERNOP_IN_RANGE:
9959 *pos += oplen;
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);
9969 return;
9970
9971 case OP_ATR_FIRST:
9972 case OP_ATR_LAST:
9973 case OP_ATR_LENGTH:
9974 case OP_ATR_IMAGE:
9975 case OP_ATR_MAX:
9976 case OP_ATR_MIN:
9977 case OP_ATR_MODULUS:
9978 case OP_ATR_POS:
9979 case OP_ATR_SIZE:
9980 case OP_ATR_TAG:
9981 case OP_ATR_VAL:
9982 *pos += oplen;
9983 if (exp->elts[*pos].opcode == OP_TYPE)
9984 {
9985 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
9986 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
9987 *pos += 3;
9988 }
9989 else
9990 print_subexp (exp, pos, stream, PREC_SUFFIX);
9991 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
9992 if (nargs > 1)
9993 {
9994 int tem;
9995 for (tem = 1; tem < nargs; tem += 1)
9996 {
9997 fputs_filtered ( (tem == 1) ? " (" : ", ", stream);
9998 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
9999 }
10000 fputs_filtered (")", stream);
10001 }
10002 return;
10003
10004 case UNOP_QUAL:
10005 *pos += oplen;
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);
10010 return;
10011
10012 case UNOP_IN_RANGE:
10013 *pos += oplen;
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);
10017 return;
10018 }
10019 }
10020
10021 /* Table mapping opcodes into strings for printing operators
10022 and precedences of the operators. */
10023
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},
10056 {NULL, 0, 0, 0}
10057 };
10058 \f
10059 /* Assorted Types and Interfaces */
10060
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;
10072
10073 struct type **const (ada_builtin_types[]) =
10074 {
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. */
10085 &builtin_type_int,
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,
10102 0
10103 };
10104
10105 /* Not really used, but needed in the ada_language_defn. */
10106
10107 static void
10108 emit_char (int c, struct ui_file *stream, int quoter)
10109 {
10110 ada_emit_char (c, stream, quoter, 1);
10111 }
10112
10113 static int
10114 parse ()
10115 {
10116 warnings_issued = 0;
10117 return ada_parse ();
10118 }
10119
10120 static const struct exp_descriptor ada_exp_descriptor =
10121 {
10122 ada_print_subexp,
10123 ada_operator_length,
10124 ada_op_name,
10125 ada_dump_subexp_body,
10126 ada_evaluate_subexp
10127 };
10128
10129 const struct language_defn ada_language_defn = {
10130 "ada", /* Language name */
10131 language_ada,
10132 ada_builtin_types,
10133 range_check_off,
10134 type_check_off,
10135 case_sensitive_on, /* Yes, Ada is case-insensitive, but
10136 that's not quite what this means. */
10137 #ifdef GNAT_GDB
10138 ada_lookup_symbol,
10139 ada_lookup_minimal_symbol,
10140 #endif /* GNAT_GDB */
10141 &ada_exp_descriptor,
10142 parse,
10143 ada_error,
10144 resolve,
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 */
10158 #if 0
10159 {"8#%lo#", "8#", "o", "#"}, /* Octal format info */
10160 {"%ld", "", "d", ""}, /* Decimal format info */
10161 {"16#%lx#", "16#", "x", "#"}, /* Hex format info */
10162 #else
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 */
10167 #endif
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,
10173 #ifdef GNAT_GDB
10174 ada_translate_error_message, /* Substitute Ada-specific terminology
10175 in errors and warnings. */
10176 #endif /* GNAT_GDB */
10177 LANG_MAGIC
10178 };
10179
10180 static void
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);
10212
10213
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";
10218 }
10219
10220 void
10221 _initialize_ada_language (void)
10222 {
10223
10224 build_ada_types ();
10225 deprecated_register_gdbarch_swap (NULL, 0, build_ada_types);
10226 add_language (&ada_language_defn);
10227
10228 varsize_limit = 65536;
10229 #ifdef GNAT_GDB
10230 add_show_from_set
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 */
10237
10238 obstack_init (&symbol_list_obstack);
10239
10240 decoded_names_store = htab_create_alloc_ex
10241 (256, htab_hash_string, (int (*) (const void *, const void *)) streq,
10242 NULL, NULL, xmcalloc, xmfree);
10243 }
10244
10245 /* Create a fundamental Ada type using default reasonable for the current
10246 target machine.
10247
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
10252 function.
10253
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
10266 debugging information supplied by the compiler. fnf@cygnus.com */
10267
10268 static struct type *
10269 ada_create_fundamental_type (struct objfile *objfile, int typeid)
10270 {
10271 struct type *type = NULL;
10272
10273 switch (typeid)
10274 {
10275 default:
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);
10284 break;
10285 case FT_VOID:
10286 type = init_type (TYPE_CODE_VOID,
10287 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10288 0, "void", objfile);
10289 break;
10290 case FT_CHAR:
10291 type = init_type (TYPE_CODE_INT,
10292 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10293 0, "character", objfile);
10294 break;
10295 case FT_SIGNED_CHAR:
10296 type = init_type (TYPE_CODE_INT,
10297 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10298 0, "signed char", objfile);
10299 break;
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);
10304 break;
10305 case FT_SHORT:
10306 type = init_type (TYPE_CODE_INT,
10307 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
10308 0, "short_integer", objfile);
10309 break;
10310 case FT_SIGNED_SHORT:
10311 type = init_type (TYPE_CODE_INT,
10312 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
10313 0, "short_integer", objfile);
10314 break;
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);
10319 break;
10320 case FT_INTEGER:
10321 type = init_type (TYPE_CODE_INT,
10322 TARGET_INT_BIT / TARGET_CHAR_BIT,
10323 0, "integer", objfile);
10324 break;
10325 case FT_SIGNED_INTEGER:
10326 type = init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT, 0, "integer", objfile); /* FIXME -fnf */
10327 break;
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);
10332 break;
10333 case FT_LONG:
10334 type = init_type (TYPE_CODE_INT,
10335 TARGET_LONG_BIT / TARGET_CHAR_BIT,
10336 0, "long_integer", objfile);
10337 break;
10338 case FT_SIGNED_LONG:
10339 type = init_type (TYPE_CODE_INT,
10340 TARGET_LONG_BIT / TARGET_CHAR_BIT,
10341 0, "long_integer", objfile);
10342 break;
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);
10347 break;
10348 case FT_LONG_LONG:
10349 type = init_type (TYPE_CODE_INT,
10350 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
10351 0, "long_long_integer", objfile);
10352 break;
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);
10357 break;
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);
10362 break;
10363 case FT_FLOAT:
10364 type = init_type (TYPE_CODE_FLT,
10365 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
10366 0, "float", objfile);
10367 break;
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);
10372 break;
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);
10377 break;
10378 }
10379 return (type);
10380 }
10381
10382 void
10383 ada_dump_symtab (struct symtab *s)
10384 {
10385 int i;
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)
10391 {
10392 fprintf (stderr, " Line table (section %d):\n", s->block_line_section);
10393 for (i = 0; i < s->linetable->nitems; i += 1)
10394 {
10395 struct linetable_entry *e = s->linetable->item + i;
10396 fprintf (stderr, " %4ld: %8lx\n", (long) e->line, (long) e->pc);
10397 }
10398 }
10399 fprintf (stderr, "]\n");
10400 }
This page took 0.395747 seconds and 4 git commands to generate.