* ada-lang.c (ada_lookup_struct_elt_type): Handle case of a "naked"
[binutils-gdb.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger. Copyright (C)
2
3 1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2007
4 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21
22 #include "defs.h"
23 #include <stdio.h>
24 #include "gdb_string.h"
25 #include <ctype.h>
26 #include <stdarg.h>
27 #include "demangle.h"
28 #include "gdb_regex.h"
29 #include "frame.h"
30 #include "symtab.h"
31 #include "gdbtypes.h"
32 #include "gdbcmd.h"
33 #include "expression.h"
34 #include "parser-defs.h"
35 #include "language.h"
36 #include "c-lang.h"
37 #include "inferior.h"
38 #include "symfile.h"
39 #include "objfiles.h"
40 #include "breakpoint.h"
41 #include "gdbcore.h"
42 #include "hashtab.h"
43 #include "gdb_obstack.h"
44 #include "ada-lang.h"
45 #include "completer.h"
46 #include "gdb_stat.h"
47 #ifdef UI_OUT
48 #include "ui-out.h"
49 #endif
50 #include "block.h"
51 #include "infcall.h"
52 #include "dictionary.h"
53 #include "exceptions.h"
54 #include "annotate.h"
55 #include "valprint.h"
56 #include "source.h"
57 #include "observer.h"
58 #include "vec.h"
59
60 /* Define whether or not the C operator '/' truncates towards zero for
61 differently signed operands (truncation direction is undefined in C).
62 Copied from valarith.c. */
63
64 #ifndef TRUNCATION_TOWARDS_ZERO
65 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
66 #endif
67
68 static void extract_string (CORE_ADDR addr, char *buf);
69
70 static void modify_general_field (char *, LONGEST, int, int);
71
72 static struct type *desc_base_type (struct type *);
73
74 static struct type *desc_bounds_type (struct type *);
75
76 static struct value *desc_bounds (struct value *);
77
78 static int fat_pntr_bounds_bitpos (struct type *);
79
80 static int fat_pntr_bounds_bitsize (struct type *);
81
82 static struct type *desc_data_type (struct type *);
83
84 static struct value *desc_data (struct value *);
85
86 static int fat_pntr_data_bitpos (struct type *);
87
88 static int fat_pntr_data_bitsize (struct type *);
89
90 static struct value *desc_one_bound (struct value *, int, int);
91
92 static int desc_bound_bitpos (struct type *, int, int);
93
94 static int desc_bound_bitsize (struct type *, int, int);
95
96 static struct type *desc_index_type (struct type *, int);
97
98 static int desc_arity (struct type *);
99
100 static int ada_type_match (struct type *, struct type *, int);
101
102 static int ada_args_match (struct symbol *, struct value **, int);
103
104 static struct value *ensure_lval (struct value *, CORE_ADDR *);
105
106 static struct value *convert_actual (struct value *, struct type *,
107 CORE_ADDR *);
108
109 static struct value *make_array_descriptor (struct type *, struct value *,
110 CORE_ADDR *);
111
112 static void ada_add_block_symbols (struct obstack *,
113 struct block *, const char *,
114 domain_enum, struct objfile *, int);
115
116 static int is_nonfunction (struct ada_symbol_info *, int);
117
118 static void add_defn_to_vec (struct obstack *, struct symbol *,
119 struct block *);
120
121 static int num_defns_collected (struct obstack *);
122
123 static struct ada_symbol_info *defns_collected (struct obstack *, int);
124
125 static struct partial_symbol *ada_lookup_partial_symbol (struct partial_symtab
126 *, const char *, int,
127 domain_enum, int);
128
129 static struct symtab *symtab_for_sym (struct symbol *);
130
131 static struct value *resolve_subexp (struct expression **, int *, int,
132 struct type *);
133
134 static void replace_operator_with_call (struct expression **, int, int, int,
135 struct symbol *, struct block *);
136
137 static int possible_user_operator_p (enum exp_opcode, struct value **);
138
139 static char *ada_op_name (enum exp_opcode);
140
141 static const char *ada_decoded_op_name (enum exp_opcode);
142
143 static int numeric_type_p (struct type *);
144
145 static int integer_type_p (struct type *);
146
147 static int scalar_type_p (struct type *);
148
149 static int discrete_type_p (struct type *);
150
151 static enum ada_renaming_category parse_old_style_renaming (struct type *,
152 const char **,
153 int *,
154 const char **);
155
156 static struct symbol *find_old_style_renaming_symbol (const char *,
157 struct block *);
158
159 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
160 int, int, int *);
161
162 static struct value *evaluate_subexp (struct type *, struct expression *,
163 int *, enum noside);
164
165 static struct value *evaluate_subexp_type (struct expression *, int *);
166
167 static int is_dynamic_field (struct type *, int);
168
169 static struct type *to_fixed_variant_branch_type (struct type *,
170 const gdb_byte *,
171 CORE_ADDR, struct value *);
172
173 static struct type *to_fixed_array_type (struct type *, struct value *, int);
174
175 static struct type *to_fixed_range_type (char *, struct value *,
176 struct objfile *);
177
178 static struct type *to_static_fixed_type (struct type *);
179 static struct type *static_unwrap_type (struct type *type);
180
181 static struct value *unwrap_value (struct value *);
182
183 static struct type *packed_array_type (struct type *, long *);
184
185 static struct type *decode_packed_array_type (struct type *);
186
187 static struct value *decode_packed_array (struct value *);
188
189 static struct value *value_subscript_packed (struct value *, int,
190 struct value **);
191
192 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int);
193
194 static struct value *coerce_unspec_val_to_type (struct value *,
195 struct type *);
196
197 static struct value *get_var_value (char *, char *);
198
199 static int lesseq_defined_than (struct symbol *, struct symbol *);
200
201 static int equiv_types (struct type *, struct type *);
202
203 static int is_name_suffix (const char *);
204
205 static int is_digits_suffix (const char *str);
206
207 static int wild_match (const char *, int, const char *);
208
209 static struct value *ada_coerce_ref (struct value *);
210
211 static LONGEST pos_atr (struct value *);
212
213 static struct value *value_pos_atr (struct type *, struct value *);
214
215 static struct value *value_val_atr (struct type *, struct value *);
216
217 static struct symbol *standard_lookup (const char *, const struct block *,
218 domain_enum);
219
220 static struct value *ada_search_struct_field (char *, struct value *, int,
221 struct type *);
222
223 static struct value *ada_value_primitive_field (struct value *, int, int,
224 struct type *);
225
226 static int find_struct_field (char *, struct type *, int,
227 struct type **, int *, int *, int *, int *);
228
229 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
230 struct value *);
231
232 static struct value *ada_to_fixed_value (struct value *);
233
234 static int ada_resolve_function (struct ada_symbol_info *, int,
235 struct value **, int, const char *,
236 struct type *);
237
238 static struct value *ada_coerce_to_simple_array (struct value *);
239
240 static int ada_is_direct_array_type (struct type *);
241
242 static void ada_language_arch_info (struct gdbarch *,
243 struct language_arch_info *);
244
245 static void check_size (const struct type *);
246
247 static struct value *ada_index_struct_field (int, struct value *, int,
248 struct type *);
249
250 static struct value *assign_aggregate (struct value *, struct value *,
251 struct expression *, int *, enum noside);
252
253 static void aggregate_assign_from_choices (struct value *, struct value *,
254 struct expression *,
255 int *, LONGEST *, int *,
256 int, LONGEST, LONGEST);
257
258 static void aggregate_assign_positional (struct value *, struct value *,
259 struct expression *,
260 int *, LONGEST *, int *, int,
261 LONGEST, LONGEST);
262
263
264 static void aggregate_assign_others (struct value *, struct value *,
265 struct expression *,
266 int *, LONGEST *, int, LONGEST, LONGEST);
267
268
269 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
270
271
272 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
273 int *, enum noside);
274
275 static void ada_forward_operator_length (struct expression *, int, int *,
276 int *);
277 \f
278
279
280 /* Maximum-sized dynamic type. */
281 static unsigned int varsize_limit;
282
283 /* FIXME: brobecker/2003-09-17: No longer a const because it is
284 returned by a function that does not return a const char *. */
285 static char *ada_completer_word_break_characters =
286 #ifdef VMS
287 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
288 #else
289 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
290 #endif
291
292 /* The name of the symbol to use to get the name of the main subprogram. */
293 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
294 = "__gnat_ada_main_program_name";
295
296 /* Limit on the number of warnings to raise per expression evaluation. */
297 static int warning_limit = 2;
298
299 /* Number of warning messages issued; reset to 0 by cleanups after
300 expression evaluation. */
301 static int warnings_issued = 0;
302
303 static const char *known_runtime_file_name_patterns[] = {
304 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
305 };
306
307 static const char *known_auxiliary_function_name_patterns[] = {
308 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
309 };
310
311 /* Space for allocating results of ada_lookup_symbol_list. */
312 static struct obstack symbol_list_obstack;
313
314 /* Utilities */
315
316 /* Given DECODED_NAME a string holding a symbol name in its
317 decoded form (ie using the Ada dotted notation), returns
318 its unqualified name. */
319
320 static const char *
321 ada_unqualified_name (const char *decoded_name)
322 {
323 const char *result = strrchr (decoded_name, '.');
324
325 if (result != NULL)
326 result++; /* Skip the dot... */
327 else
328 result = decoded_name;
329
330 return result;
331 }
332
333 /* Return a string starting with '<', followed by STR, and '>'.
334 The result is good until the next call. */
335
336 static char *
337 add_angle_brackets (const char *str)
338 {
339 static char *result = NULL;
340
341 xfree (result);
342 result = (char *) xmalloc ((strlen (str) + 3) * sizeof (char));
343
344 sprintf (result, "<%s>", str);
345 return result;
346 }
347
348 static char *
349 ada_get_gdb_completer_word_break_characters (void)
350 {
351 return ada_completer_word_break_characters;
352 }
353
354 /* Print an array element index using the Ada syntax. */
355
356 static void
357 ada_print_array_index (struct value *index_value, struct ui_file *stream,
358 int format, enum val_prettyprint pretty)
359 {
360 LA_VALUE_PRINT (index_value, stream, format, pretty);
361 fprintf_filtered (stream, " => ");
362 }
363
364 /* Read the string located at ADDR from the inferior and store the
365 result into BUF. */
366
367 static void
368 extract_string (CORE_ADDR addr, char *buf)
369 {
370 int char_index = 0;
371
372 /* Loop, reading one byte at a time, until we reach the '\000'
373 end-of-string marker. */
374 do
375 {
376 target_read_memory (addr + char_index * sizeof (char),
377 buf + char_index * sizeof (char), sizeof (char));
378 char_index++;
379 }
380 while (buf[char_index - 1] != '\000');
381 }
382
383 /* Assuming VECT points to an array of *SIZE objects of size
384 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
385 updating *SIZE as necessary and returning the (new) array. */
386
387 void *
388 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
389 {
390 if (*size < min_size)
391 {
392 *size *= 2;
393 if (*size < min_size)
394 *size = min_size;
395 vect = xrealloc (vect, *size * element_size);
396 }
397 return vect;
398 }
399
400 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
401 suffix of FIELD_NAME beginning "___". */
402
403 static int
404 field_name_match (const char *field_name, const char *target)
405 {
406 int len = strlen (target);
407 return
408 (strncmp (field_name, target, len) == 0
409 && (field_name[len] == '\0'
410 || (strncmp (field_name + len, "___", 3) == 0
411 && strcmp (field_name + strlen (field_name) - 6,
412 "___XVN") != 0)));
413 }
414
415
416 /* Assuming TYPE is a TYPE_CODE_STRUCT, find the field whose name matches
417 FIELD_NAME, and return its index. This function also handles fields
418 whose name have ___ suffixes because the compiler sometimes alters
419 their name by adding such a suffix to represent fields with certain
420 constraints. If the field could not be found, return a negative
421 number if MAYBE_MISSING is set. Otherwise raise an error. */
422
423 int
424 ada_get_field_index (const struct type *type, const char *field_name,
425 int maybe_missing)
426 {
427 int fieldno;
428 for (fieldno = 0; fieldno < TYPE_NFIELDS (type); fieldno++)
429 if (field_name_match (TYPE_FIELD_NAME (type, fieldno), field_name))
430 return fieldno;
431
432 if (!maybe_missing)
433 error (_("Unable to find field %s in struct %s. Aborting"),
434 field_name, TYPE_NAME (type));
435
436 return -1;
437 }
438
439 /* The length of the prefix of NAME prior to any "___" suffix. */
440
441 int
442 ada_name_prefix_len (const char *name)
443 {
444 if (name == NULL)
445 return 0;
446 else
447 {
448 const char *p = strstr (name, "___");
449 if (p == NULL)
450 return strlen (name);
451 else
452 return p - name;
453 }
454 }
455
456 /* Return non-zero if SUFFIX is a suffix of STR.
457 Return zero if STR is null. */
458
459 static int
460 is_suffix (const char *str, const char *suffix)
461 {
462 int len1, len2;
463 if (str == NULL)
464 return 0;
465 len1 = strlen (str);
466 len2 = strlen (suffix);
467 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
468 }
469
470 /* Create a value of type TYPE whose contents come from VALADDR, if it
471 is non-null, and whose memory address (in the inferior) is
472 ADDRESS. */
473
474 struct value *
475 value_from_contents_and_address (struct type *type,
476 const gdb_byte *valaddr,
477 CORE_ADDR address)
478 {
479 struct value *v = allocate_value (type);
480 if (valaddr == NULL)
481 set_value_lazy (v, 1);
482 else
483 memcpy (value_contents_raw (v), valaddr, TYPE_LENGTH (type));
484 VALUE_ADDRESS (v) = address;
485 if (address != 0)
486 VALUE_LVAL (v) = lval_memory;
487 return v;
488 }
489
490 /* The contents of value VAL, treated as a value of type TYPE. The
491 result is an lval in memory if VAL is. */
492
493 static struct value *
494 coerce_unspec_val_to_type (struct value *val, struct type *type)
495 {
496 type = ada_check_typedef (type);
497 if (value_type (val) == type)
498 return val;
499 else
500 {
501 struct value *result;
502
503 /* Make sure that the object size is not unreasonable before
504 trying to allocate some memory for it. */
505 check_size (type);
506
507 result = allocate_value (type);
508 VALUE_LVAL (result) = VALUE_LVAL (val);
509 set_value_bitsize (result, value_bitsize (val));
510 set_value_bitpos (result, value_bitpos (val));
511 VALUE_ADDRESS (result) = VALUE_ADDRESS (val) + value_offset (val);
512 if (value_lazy (val)
513 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
514 set_value_lazy (result, 1);
515 else
516 memcpy (value_contents_raw (result), value_contents (val),
517 TYPE_LENGTH (type));
518 return result;
519 }
520 }
521
522 static const gdb_byte *
523 cond_offset_host (const gdb_byte *valaddr, long offset)
524 {
525 if (valaddr == NULL)
526 return NULL;
527 else
528 return valaddr + offset;
529 }
530
531 static CORE_ADDR
532 cond_offset_target (CORE_ADDR address, long offset)
533 {
534 if (address == 0)
535 return 0;
536 else
537 return address + offset;
538 }
539
540 /* Issue a warning (as for the definition of warning in utils.c, but
541 with exactly one argument rather than ...), unless the limit on the
542 number of warnings has passed during the evaluation of the current
543 expression. */
544
545 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
546 provided by "complaint". */
547 static void lim_warning (const char *format, ...) ATTR_FORMAT (printf, 1, 2);
548
549 static void
550 lim_warning (const char *format, ...)
551 {
552 va_list args;
553 va_start (args, format);
554
555 warnings_issued += 1;
556 if (warnings_issued <= warning_limit)
557 vwarning (format, args);
558
559 va_end (args);
560 }
561
562 /* Issue an error if the size of an object of type T is unreasonable,
563 i.e. if it would be a bad idea to allocate a value of this type in
564 GDB. */
565
566 static void
567 check_size (const struct type *type)
568 {
569 if (TYPE_LENGTH (type) > varsize_limit)
570 error (_("object size is larger than varsize-limit"));
571 }
572
573
574 /* Note: would have used MAX_OF_TYPE and MIN_OF_TYPE macros from
575 gdbtypes.h, but some of the necessary definitions in that file
576 seem to have gone missing. */
577
578 /* Maximum value of a SIZE-byte signed integer type. */
579 static LONGEST
580 max_of_size (int size)
581 {
582 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
583 return top_bit | (top_bit - 1);
584 }
585
586 /* Minimum value of a SIZE-byte signed integer type. */
587 static LONGEST
588 min_of_size (int size)
589 {
590 return -max_of_size (size) - 1;
591 }
592
593 /* Maximum value of a SIZE-byte unsigned integer type. */
594 static ULONGEST
595 umax_of_size (int size)
596 {
597 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
598 return top_bit | (top_bit - 1);
599 }
600
601 /* Maximum value of integral type T, as a signed quantity. */
602 static LONGEST
603 max_of_type (struct type *t)
604 {
605 if (TYPE_UNSIGNED (t))
606 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
607 else
608 return max_of_size (TYPE_LENGTH (t));
609 }
610
611 /* Minimum value of integral type T, as a signed quantity. */
612 static LONGEST
613 min_of_type (struct type *t)
614 {
615 if (TYPE_UNSIGNED (t))
616 return 0;
617 else
618 return min_of_size (TYPE_LENGTH (t));
619 }
620
621 /* The largest value in the domain of TYPE, a discrete type, as an integer. */
622 static LONGEST
623 discrete_type_high_bound (struct type *type)
624 {
625 switch (TYPE_CODE (type))
626 {
627 case TYPE_CODE_RANGE:
628 return TYPE_HIGH_BOUND (type);
629 case TYPE_CODE_ENUM:
630 return TYPE_FIELD_BITPOS (type, TYPE_NFIELDS (type) - 1);
631 case TYPE_CODE_BOOL:
632 return 1;
633 case TYPE_CODE_CHAR:
634 case TYPE_CODE_INT:
635 return max_of_type (type);
636 default:
637 error (_("Unexpected type in discrete_type_high_bound."));
638 }
639 }
640
641 /* The largest value in the domain of TYPE, a discrete type, as an integer. */
642 static LONGEST
643 discrete_type_low_bound (struct type *type)
644 {
645 switch (TYPE_CODE (type))
646 {
647 case TYPE_CODE_RANGE:
648 return TYPE_LOW_BOUND (type);
649 case TYPE_CODE_ENUM:
650 return TYPE_FIELD_BITPOS (type, 0);
651 case TYPE_CODE_BOOL:
652 return 0;
653 case TYPE_CODE_CHAR:
654 case TYPE_CODE_INT:
655 return min_of_type (type);
656 default:
657 error (_("Unexpected type in discrete_type_low_bound."));
658 }
659 }
660
661 /* The identity on non-range types. For range types, the underlying
662 non-range scalar type. */
663
664 static struct type *
665 base_type (struct type *type)
666 {
667 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
668 {
669 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
670 return type;
671 type = TYPE_TARGET_TYPE (type);
672 }
673 return type;
674 }
675 \f
676
677 /* Language Selection */
678
679 /* If the main program is in Ada, return language_ada, otherwise return LANG
680 (the main program is in Ada iif the adainit symbol is found).
681
682 MAIN_PST is not used. */
683
684 enum language
685 ada_update_initial_language (enum language lang,
686 struct partial_symtab *main_pst)
687 {
688 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
689 (struct objfile *) NULL) != NULL)
690 return language_ada;
691
692 return lang;
693 }
694
695 /* If the main procedure is written in Ada, then return its name.
696 The result is good until the next call. Return NULL if the main
697 procedure doesn't appear to be in Ada. */
698
699 char *
700 ada_main_name (void)
701 {
702 struct minimal_symbol *msym;
703 CORE_ADDR main_program_name_addr;
704 static char main_program_name[1024];
705
706 /* For Ada, the name of the main procedure is stored in a specific
707 string constant, generated by the binder. Look for that symbol,
708 extract its address, and then read that string. If we didn't find
709 that string, then most probably the main procedure is not written
710 in Ada. */
711 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
712
713 if (msym != NULL)
714 {
715 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
716 if (main_program_name_addr == 0)
717 error (_("Invalid address for Ada main program name."));
718
719 extract_string (main_program_name_addr, main_program_name);
720 return main_program_name;
721 }
722
723 /* The main procedure doesn't seem to be in Ada. */
724 return NULL;
725 }
726 \f
727 /* Symbols */
728
729 /* Table of Ada operators and their GNAT-encoded names. Last entry is pair
730 of NULLs. */
731
732 const struct ada_opname_map ada_opname_table[] = {
733 {"Oadd", "\"+\"", BINOP_ADD},
734 {"Osubtract", "\"-\"", BINOP_SUB},
735 {"Omultiply", "\"*\"", BINOP_MUL},
736 {"Odivide", "\"/\"", BINOP_DIV},
737 {"Omod", "\"mod\"", BINOP_MOD},
738 {"Orem", "\"rem\"", BINOP_REM},
739 {"Oexpon", "\"**\"", BINOP_EXP},
740 {"Olt", "\"<\"", BINOP_LESS},
741 {"Ole", "\"<=\"", BINOP_LEQ},
742 {"Ogt", "\">\"", BINOP_GTR},
743 {"Oge", "\">=\"", BINOP_GEQ},
744 {"Oeq", "\"=\"", BINOP_EQUAL},
745 {"One", "\"/=\"", BINOP_NOTEQUAL},
746 {"Oand", "\"and\"", BINOP_BITWISE_AND},
747 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
748 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
749 {"Oconcat", "\"&\"", BINOP_CONCAT},
750 {"Oabs", "\"abs\"", UNOP_ABS},
751 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
752 {"Oadd", "\"+\"", UNOP_PLUS},
753 {"Osubtract", "\"-\"", UNOP_NEG},
754 {NULL, NULL}
755 };
756
757 /* Return non-zero if STR should be suppressed in info listings. */
758
759 static int
760 is_suppressed_name (const char *str)
761 {
762 if (strncmp (str, "_ada_", 5) == 0)
763 str += 5;
764 if (str[0] == '_' || str[0] == '\000')
765 return 1;
766 else
767 {
768 const char *p;
769 const char *suffix = strstr (str, "___");
770 if (suffix != NULL && suffix[3] != 'X')
771 return 1;
772 if (suffix == NULL)
773 suffix = str + strlen (str);
774 for (p = suffix - 1; p != str; p -= 1)
775 if (isupper (*p))
776 {
777 int i;
778 if (p[0] == 'X' && p[-1] != '_')
779 goto OK;
780 if (*p != 'O')
781 return 1;
782 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
783 if (strncmp (ada_opname_table[i].encoded, p,
784 strlen (ada_opname_table[i].encoded)) == 0)
785 goto OK;
786 return 1;
787 OK:;
788 }
789 return 0;
790 }
791 }
792
793 /* The "encoded" form of DECODED, according to GNAT conventions.
794 The result is valid until the next call to ada_encode. */
795
796 char *
797 ada_encode (const char *decoded)
798 {
799 static char *encoding_buffer = NULL;
800 static size_t encoding_buffer_size = 0;
801 const char *p;
802 int k;
803
804 if (decoded == NULL)
805 return NULL;
806
807 GROW_VECT (encoding_buffer, encoding_buffer_size,
808 2 * strlen (decoded) + 10);
809
810 k = 0;
811 for (p = decoded; *p != '\0'; p += 1)
812 {
813 if (*p == '.')
814 {
815 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
816 k += 2;
817 }
818 else if (*p == '"')
819 {
820 const struct ada_opname_map *mapping;
821
822 for (mapping = ada_opname_table;
823 mapping->encoded != NULL
824 && strncmp (mapping->decoded, p,
825 strlen (mapping->decoded)) != 0; mapping += 1)
826 ;
827 if (mapping->encoded == NULL)
828 error (_("invalid Ada operator name: %s"), p);
829 strcpy (encoding_buffer + k, mapping->encoded);
830 k += strlen (mapping->encoded);
831 break;
832 }
833 else
834 {
835 encoding_buffer[k] = *p;
836 k += 1;
837 }
838 }
839
840 encoding_buffer[k] = '\0';
841 return encoding_buffer;
842 }
843
844 /* Return NAME folded to lower case, or, if surrounded by single
845 quotes, unfolded, but with the quotes stripped away. Result good
846 to next call. */
847
848 char *
849 ada_fold_name (const char *name)
850 {
851 static char *fold_buffer = NULL;
852 static size_t fold_buffer_size = 0;
853
854 int len = strlen (name);
855 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
856
857 if (name[0] == '\'')
858 {
859 strncpy (fold_buffer, name + 1, len - 2);
860 fold_buffer[len - 2] = '\000';
861 }
862 else
863 {
864 int i;
865 for (i = 0; i <= len; i += 1)
866 fold_buffer[i] = tolower (name[i]);
867 }
868
869 return fold_buffer;
870 }
871
872 /* Return nonzero if C is either a digit or a lowercase alphabet character. */
873
874 static int
875 is_lower_alphanum (const char c)
876 {
877 return (isdigit (c) || (isalpha (c) && islower (c)));
878 }
879
880 /* Remove either of these suffixes:
881 . .{DIGIT}+
882 . ${DIGIT}+
883 . ___{DIGIT}+
884 . __{DIGIT}+.
885 These are suffixes introduced by the compiler for entities such as
886 nested subprogram for instance, in order to avoid name clashes.
887 They do not serve any purpose for the debugger. */
888
889 static void
890 ada_remove_trailing_digits (const char *encoded, int *len)
891 {
892 if (*len > 1 && isdigit (encoded[*len - 1]))
893 {
894 int i = *len - 2;
895 while (i > 0 && isdigit (encoded[i]))
896 i--;
897 if (i >= 0 && encoded[i] == '.')
898 *len = i;
899 else if (i >= 0 && encoded[i] == '$')
900 *len = i;
901 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
902 *len = i - 2;
903 else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
904 *len = i - 1;
905 }
906 }
907
908 /* Remove the suffix introduced by the compiler for protected object
909 subprograms. */
910
911 static void
912 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
913 {
914 /* Remove trailing N. */
915
916 /* Protected entry subprograms are broken into two
917 separate subprograms: The first one is unprotected, and has
918 a 'N' suffix; the second is the protected version, and has
919 the 'P' suffix. The second calls the first one after handling
920 the protection. Since the P subprograms are internally generated,
921 we leave these names undecoded, giving the user a clue that this
922 entity is internal. */
923
924 if (*len > 1
925 && encoded[*len - 1] == 'N'
926 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
927 *len = *len - 1;
928 }
929
930 /* If ENCODED follows the GNAT entity encoding conventions, then return
931 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
932 replaced by ENCODED.
933
934 The resulting string is valid until the next call of ada_decode.
935 If the string is unchanged by decoding, the original string pointer
936 is returned. */
937
938 const char *
939 ada_decode (const char *encoded)
940 {
941 int i, j;
942 int len0;
943 const char *p;
944 char *decoded;
945 int at_start_name;
946 static char *decoding_buffer = NULL;
947 static size_t decoding_buffer_size = 0;
948
949 /* The name of the Ada main procedure starts with "_ada_".
950 This prefix is not part of the decoded name, so skip this part
951 if we see this prefix. */
952 if (strncmp (encoded, "_ada_", 5) == 0)
953 encoded += 5;
954
955 /* If the name starts with '_', then it is not a properly encoded
956 name, so do not attempt to decode it. Similarly, if the name
957 starts with '<', the name should not be decoded. */
958 if (encoded[0] == '_' || encoded[0] == '<')
959 goto Suppress;
960
961 len0 = strlen (encoded);
962
963 ada_remove_trailing_digits (encoded, &len0);
964 ada_remove_po_subprogram_suffix (encoded, &len0);
965
966 /* Remove the ___X.* suffix if present. Do not forget to verify that
967 the suffix is located before the current "end" of ENCODED. We want
968 to avoid re-matching parts of ENCODED that have previously been
969 marked as discarded (by decrementing LEN0). */
970 p = strstr (encoded, "___");
971 if (p != NULL && p - encoded < len0 - 3)
972 {
973 if (p[3] == 'X')
974 len0 = p - encoded;
975 else
976 goto Suppress;
977 }
978
979 /* Remove any trailing TKB suffix. It tells us that this symbol
980 is for the body of a task, but that information does not actually
981 appear in the decoded name. */
982
983 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
984 len0 -= 3;
985
986 /* Remove trailing "B" suffixes. */
987 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
988
989 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
990 len0 -= 1;
991
992 /* Make decoded big enough for possible expansion by operator name. */
993
994 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
995 decoded = decoding_buffer;
996
997 /* Remove trailing __{digit}+ or trailing ${digit}+. */
998
999 if (len0 > 1 && isdigit (encoded[len0 - 1]))
1000 {
1001 i = len0 - 2;
1002 while ((i >= 0 && isdigit (encoded[i]))
1003 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1004 i -= 1;
1005 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1006 len0 = i - 1;
1007 else if (encoded[i] == '$')
1008 len0 = i;
1009 }
1010
1011 /* The first few characters that are not alphabetic are not part
1012 of any encoding we use, so we can copy them over verbatim. */
1013
1014 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1015 decoded[j] = encoded[i];
1016
1017 at_start_name = 1;
1018 while (i < len0)
1019 {
1020 /* Is this a symbol function? */
1021 if (at_start_name && encoded[i] == 'O')
1022 {
1023 int k;
1024 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1025 {
1026 int op_len = strlen (ada_opname_table[k].encoded);
1027 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1028 op_len - 1) == 0)
1029 && !isalnum (encoded[i + op_len]))
1030 {
1031 strcpy (decoded + j, ada_opname_table[k].decoded);
1032 at_start_name = 0;
1033 i += op_len;
1034 j += strlen (ada_opname_table[k].decoded);
1035 break;
1036 }
1037 }
1038 if (ada_opname_table[k].encoded != NULL)
1039 continue;
1040 }
1041 at_start_name = 0;
1042
1043 /* Replace "TK__" with "__", which will eventually be translated
1044 into "." (just below). */
1045
1046 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1047 i += 2;
1048
1049 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1050 be translated into "." (just below). These are internal names
1051 generated for anonymous blocks inside which our symbol is nested. */
1052
1053 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1054 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1055 && isdigit (encoded [i+4]))
1056 {
1057 int k = i + 5;
1058
1059 while (k < len0 && isdigit (encoded[k]))
1060 k++; /* Skip any extra digit. */
1061
1062 /* Double-check that the "__B_{DIGITS}+" sequence we found
1063 is indeed followed by "__". */
1064 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1065 i = k;
1066 }
1067
1068 /* Remove _E{DIGITS}+[sb] */
1069
1070 /* Just as for protected object subprograms, there are 2 categories
1071 of subprograms created by the compiler for each entry. The first
1072 one implements the actual entry code, and has a suffix following
1073 the convention above; the second one implements the barrier and
1074 uses the same convention as above, except that the 'E' is replaced
1075 by a 'B'.
1076
1077 Just as above, we do not decode the name of barrier functions
1078 to give the user a clue that the code he is debugging has been
1079 internally generated. */
1080
1081 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1082 && isdigit (encoded[i+2]))
1083 {
1084 int k = i + 3;
1085
1086 while (k < len0 && isdigit (encoded[k]))
1087 k++;
1088
1089 if (k < len0
1090 && (encoded[k] == 'b' || encoded[k] == 's'))
1091 {
1092 k++;
1093 /* Just as an extra precaution, make sure that if this
1094 suffix is followed by anything else, it is a '_'.
1095 Otherwise, we matched this sequence by accident. */
1096 if (k == len0
1097 || (k < len0 && encoded[k] == '_'))
1098 i = k;
1099 }
1100 }
1101
1102 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1103 the GNAT front-end in protected object subprograms. */
1104
1105 if (i < len0 + 3
1106 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1107 {
1108 /* Backtrack a bit up until we reach either the begining of
1109 the encoded name, or "__". Make sure that we only find
1110 digits or lowercase characters. */
1111 const char *ptr = encoded + i - 1;
1112
1113 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1114 ptr--;
1115 if (ptr < encoded
1116 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1117 i++;
1118 }
1119
1120 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1121 {
1122 /* This is a X[bn]* sequence not separated from the previous
1123 part of the name with a non-alpha-numeric character (in other
1124 words, immediately following an alpha-numeric character), then
1125 verify that it is placed at the end of the encoded name. If
1126 not, then the encoding is not valid and we should abort the
1127 decoding. Otherwise, just skip it, it is used in body-nested
1128 package names. */
1129 do
1130 i += 1;
1131 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1132 if (i < len0)
1133 goto Suppress;
1134 }
1135 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1136 {
1137 /* Replace '__' by '.'. */
1138 decoded[j] = '.';
1139 at_start_name = 1;
1140 i += 2;
1141 j += 1;
1142 }
1143 else
1144 {
1145 /* It's a character part of the decoded name, so just copy it
1146 over. */
1147 decoded[j] = encoded[i];
1148 i += 1;
1149 j += 1;
1150 }
1151 }
1152 decoded[j] = '\000';
1153
1154 /* Decoded names should never contain any uppercase character.
1155 Double-check this, and abort the decoding if we find one. */
1156
1157 for (i = 0; decoded[i] != '\0'; i += 1)
1158 if (isupper (decoded[i]) || decoded[i] == ' ')
1159 goto Suppress;
1160
1161 if (strcmp (decoded, encoded) == 0)
1162 return encoded;
1163 else
1164 return decoded;
1165
1166 Suppress:
1167 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1168 decoded = decoding_buffer;
1169 if (encoded[0] == '<')
1170 strcpy (decoded, encoded);
1171 else
1172 sprintf (decoded, "<%s>", encoded);
1173 return decoded;
1174
1175 }
1176
1177 /* Table for keeping permanent unique copies of decoded names. Once
1178 allocated, names in this table are never released. While this is a
1179 storage leak, it should not be significant unless there are massive
1180 changes in the set of decoded names in successive versions of a
1181 symbol table loaded during a single session. */
1182 static struct htab *decoded_names_store;
1183
1184 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1185 in the language-specific part of GSYMBOL, if it has not been
1186 previously computed. Tries to save the decoded name in the same
1187 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1188 in any case, the decoded symbol has a lifetime at least that of
1189 GSYMBOL).
1190 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1191 const, but nevertheless modified to a semantically equivalent form
1192 when a decoded name is cached in it.
1193 */
1194
1195 char *
1196 ada_decode_symbol (const struct general_symbol_info *gsymbol)
1197 {
1198 char **resultp =
1199 (char **) &gsymbol->language_specific.cplus_specific.demangled_name;
1200 if (*resultp == NULL)
1201 {
1202 const char *decoded = ada_decode (gsymbol->name);
1203 if (gsymbol->obj_section != NULL)
1204 {
1205 struct objfile *objf = gsymbol->obj_section->objfile;
1206 *resultp = obsavestring (decoded, strlen (decoded),
1207 &objf->objfile_obstack);
1208 }
1209 /* Sometimes, we can't find a corresponding objfile, in which
1210 case, we put the result on the heap. Since we only decode
1211 when needed, we hope this usually does not cause a
1212 significant memory leak (FIXME). */
1213 if (*resultp == NULL)
1214 {
1215 char **slot = (char **) htab_find_slot (decoded_names_store,
1216 decoded, INSERT);
1217 if (*slot == NULL)
1218 *slot = xstrdup (decoded);
1219 *resultp = *slot;
1220 }
1221 }
1222
1223 return *resultp;
1224 }
1225
1226 char *
1227 ada_la_decode (const char *encoded, int options)
1228 {
1229 return xstrdup (ada_decode (encoded));
1230 }
1231
1232 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1233 suffixes that encode debugging information or leading _ada_ on
1234 SYM_NAME (see is_name_suffix commentary for the debugging
1235 information that is ignored). If WILD, then NAME need only match a
1236 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1237 either argument is NULL. */
1238
1239 int
1240 ada_match_name (const char *sym_name, const char *name, int wild)
1241 {
1242 if (sym_name == NULL || name == NULL)
1243 return 0;
1244 else if (wild)
1245 return wild_match (name, strlen (name), sym_name);
1246 else
1247 {
1248 int len_name = strlen (name);
1249 return (strncmp (sym_name, name, len_name) == 0
1250 && is_name_suffix (sym_name + len_name))
1251 || (strncmp (sym_name, "_ada_", 5) == 0
1252 && strncmp (sym_name + 5, name, len_name) == 0
1253 && is_name_suffix (sym_name + len_name + 5));
1254 }
1255 }
1256
1257 /* True (non-zero) iff, in Ada mode, the symbol SYM should be
1258 suppressed in info listings. */
1259
1260 int
1261 ada_suppress_symbol_printing (struct symbol *sym)
1262 {
1263 if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN)
1264 return 1;
1265 else
1266 return is_suppressed_name (SYMBOL_LINKAGE_NAME (sym));
1267 }
1268 \f
1269
1270 /* Arrays */
1271
1272 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
1273
1274 static char *bound_name[] = {
1275 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1276 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1277 };
1278
1279 /* Maximum number of array dimensions we are prepared to handle. */
1280
1281 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1282
1283 /* Like modify_field, but allows bitpos > wordlength. */
1284
1285 static void
1286 modify_general_field (char *addr, LONGEST fieldval, int bitpos, int bitsize)
1287 {
1288 modify_field (addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
1289 }
1290
1291
1292 /* The desc_* routines return primitive portions of array descriptors
1293 (fat pointers). */
1294
1295 /* The descriptor or array type, if any, indicated by TYPE; removes
1296 level of indirection, if needed. */
1297
1298 static struct type *
1299 desc_base_type (struct type *type)
1300 {
1301 if (type == NULL)
1302 return NULL;
1303 type = ada_check_typedef (type);
1304 if (type != NULL
1305 && (TYPE_CODE (type) == TYPE_CODE_PTR
1306 || TYPE_CODE (type) == TYPE_CODE_REF))
1307 return ada_check_typedef (TYPE_TARGET_TYPE (type));
1308 else
1309 return type;
1310 }
1311
1312 /* True iff TYPE indicates a "thin" array pointer type. */
1313
1314 static int
1315 is_thin_pntr (struct type *type)
1316 {
1317 return
1318 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1319 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1320 }
1321
1322 /* The descriptor type for thin pointer type TYPE. */
1323
1324 static struct type *
1325 thin_descriptor_type (struct type *type)
1326 {
1327 struct type *base_type = desc_base_type (type);
1328 if (base_type == NULL)
1329 return NULL;
1330 if (is_suffix (ada_type_name (base_type), "___XVE"))
1331 return base_type;
1332 else
1333 {
1334 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1335 if (alt_type == NULL)
1336 return base_type;
1337 else
1338 return alt_type;
1339 }
1340 }
1341
1342 /* A pointer to the array data for thin-pointer value VAL. */
1343
1344 static struct value *
1345 thin_data_pntr (struct value *val)
1346 {
1347 struct type *type = value_type (val);
1348 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1349 return value_cast (desc_data_type (thin_descriptor_type (type)),
1350 value_copy (val));
1351 else
1352 return value_from_longest (desc_data_type (thin_descriptor_type (type)),
1353 VALUE_ADDRESS (val) + value_offset (val));
1354 }
1355
1356 /* True iff TYPE indicates a "thick" array pointer type. */
1357
1358 static int
1359 is_thick_pntr (struct type *type)
1360 {
1361 type = desc_base_type (type);
1362 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1363 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1364 }
1365
1366 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1367 pointer to one, the type of its bounds data; otherwise, NULL. */
1368
1369 static struct type *
1370 desc_bounds_type (struct type *type)
1371 {
1372 struct type *r;
1373
1374 type = desc_base_type (type);
1375
1376 if (type == NULL)
1377 return NULL;
1378 else if (is_thin_pntr (type))
1379 {
1380 type = thin_descriptor_type (type);
1381 if (type == NULL)
1382 return NULL;
1383 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1384 if (r != NULL)
1385 return ada_check_typedef (r);
1386 }
1387 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1388 {
1389 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1390 if (r != NULL)
1391 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1392 }
1393 return NULL;
1394 }
1395
1396 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1397 one, a pointer to its bounds data. Otherwise NULL. */
1398
1399 static struct value *
1400 desc_bounds (struct value *arr)
1401 {
1402 struct type *type = ada_check_typedef (value_type (arr));
1403 if (is_thin_pntr (type))
1404 {
1405 struct type *bounds_type =
1406 desc_bounds_type (thin_descriptor_type (type));
1407 LONGEST addr;
1408
1409 if (bounds_type == NULL)
1410 error (_("Bad GNAT array descriptor"));
1411
1412 /* NOTE: The following calculation is not really kosher, but
1413 since desc_type is an XVE-encoded type (and shouldn't be),
1414 the correct calculation is a real pain. FIXME (and fix GCC). */
1415 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1416 addr = value_as_long (arr);
1417 else
1418 addr = VALUE_ADDRESS (arr) + value_offset (arr);
1419
1420 return
1421 value_from_longest (lookup_pointer_type (bounds_type),
1422 addr - TYPE_LENGTH (bounds_type));
1423 }
1424
1425 else if (is_thick_pntr (type))
1426 return value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1427 _("Bad GNAT array descriptor"));
1428 else
1429 return NULL;
1430 }
1431
1432 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1433 position of the field containing the address of the bounds data. */
1434
1435 static int
1436 fat_pntr_bounds_bitpos (struct type *type)
1437 {
1438 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1439 }
1440
1441 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1442 size of the field containing the address of the bounds data. */
1443
1444 static int
1445 fat_pntr_bounds_bitsize (struct type *type)
1446 {
1447 type = desc_base_type (type);
1448
1449 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1450 return TYPE_FIELD_BITSIZE (type, 1);
1451 else
1452 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1453 }
1454
1455 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1456 pointer to one, the type of its array data (a
1457 pointer-to-array-with-no-bounds type); otherwise, NULL. Use
1458 ada_type_of_array to get an array type with bounds data. */
1459
1460 static struct type *
1461 desc_data_type (struct type *type)
1462 {
1463 type = desc_base_type (type);
1464
1465 /* NOTE: The following is bogus; see comment in desc_bounds. */
1466 if (is_thin_pntr (type))
1467 return lookup_pointer_type
1468 (desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1)));
1469 else if (is_thick_pntr (type))
1470 return lookup_struct_elt_type (type, "P_ARRAY", 1);
1471 else
1472 return NULL;
1473 }
1474
1475 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1476 its array data. */
1477
1478 static struct value *
1479 desc_data (struct value *arr)
1480 {
1481 struct type *type = value_type (arr);
1482 if (is_thin_pntr (type))
1483 return thin_data_pntr (arr);
1484 else if (is_thick_pntr (type))
1485 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1486 _("Bad GNAT array descriptor"));
1487 else
1488 return NULL;
1489 }
1490
1491
1492 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1493 position of the field containing the address of the data. */
1494
1495 static int
1496 fat_pntr_data_bitpos (struct type *type)
1497 {
1498 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1499 }
1500
1501 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1502 size of the field containing the address of the data. */
1503
1504 static int
1505 fat_pntr_data_bitsize (struct type *type)
1506 {
1507 type = desc_base_type (type);
1508
1509 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1510 return TYPE_FIELD_BITSIZE (type, 0);
1511 else
1512 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1513 }
1514
1515 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1516 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1517 bound, if WHICH is 1. The first bound is I=1. */
1518
1519 static struct value *
1520 desc_one_bound (struct value *bounds, int i, int which)
1521 {
1522 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1523 _("Bad GNAT array descriptor bounds"));
1524 }
1525
1526 /* If BOUNDS is an array-bounds structure type, return the bit position
1527 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1528 bound, if WHICH is 1. The first bound is I=1. */
1529
1530 static int
1531 desc_bound_bitpos (struct type *type, int i, int which)
1532 {
1533 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1534 }
1535
1536 /* If BOUNDS is an array-bounds structure type, return the bit field size
1537 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1538 bound, if WHICH is 1. The first bound is I=1. */
1539
1540 static int
1541 desc_bound_bitsize (struct type *type, int i, int which)
1542 {
1543 type = desc_base_type (type);
1544
1545 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1546 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1547 else
1548 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1549 }
1550
1551 /* If TYPE is the type of an array-bounds structure, the type of its
1552 Ith bound (numbering from 1). Otherwise, NULL. */
1553
1554 static struct type *
1555 desc_index_type (struct type *type, int i)
1556 {
1557 type = desc_base_type (type);
1558
1559 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1560 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1561 else
1562 return NULL;
1563 }
1564
1565 /* The number of index positions in the array-bounds type TYPE.
1566 Return 0 if TYPE is NULL. */
1567
1568 static int
1569 desc_arity (struct type *type)
1570 {
1571 type = desc_base_type (type);
1572
1573 if (type != NULL)
1574 return TYPE_NFIELDS (type) / 2;
1575 return 0;
1576 }
1577
1578 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1579 an array descriptor type (representing an unconstrained array
1580 type). */
1581
1582 static int
1583 ada_is_direct_array_type (struct type *type)
1584 {
1585 if (type == NULL)
1586 return 0;
1587 type = ada_check_typedef (type);
1588 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1589 || ada_is_array_descriptor_type (type));
1590 }
1591
1592 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1593 * to one. */
1594
1595 int
1596 ada_is_array_type (struct type *type)
1597 {
1598 while (type != NULL
1599 && (TYPE_CODE (type) == TYPE_CODE_PTR
1600 || TYPE_CODE (type) == TYPE_CODE_REF))
1601 type = TYPE_TARGET_TYPE (type);
1602 return ada_is_direct_array_type (type);
1603 }
1604
1605 /* Non-zero iff TYPE is a simple array type or pointer to one. */
1606
1607 int
1608 ada_is_simple_array_type (struct type *type)
1609 {
1610 if (type == NULL)
1611 return 0;
1612 type = ada_check_typedef (type);
1613 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1614 || (TYPE_CODE (type) == TYPE_CODE_PTR
1615 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
1616 }
1617
1618 /* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1619
1620 int
1621 ada_is_array_descriptor_type (struct type *type)
1622 {
1623 struct type *data_type = desc_data_type (type);
1624
1625 if (type == NULL)
1626 return 0;
1627 type = ada_check_typedef (type);
1628 return
1629 data_type != NULL
1630 && ((TYPE_CODE (data_type) == TYPE_CODE_PTR
1631 && TYPE_TARGET_TYPE (data_type) != NULL
1632 && TYPE_CODE (TYPE_TARGET_TYPE (data_type)) == TYPE_CODE_ARRAY)
1633 || TYPE_CODE (data_type) == TYPE_CODE_ARRAY)
1634 && desc_arity (desc_bounds_type (type)) > 0;
1635 }
1636
1637 /* Non-zero iff type is a partially mal-formed GNAT array
1638 descriptor. FIXME: This is to compensate for some problems with
1639 debugging output from GNAT. Re-examine periodically to see if it
1640 is still needed. */
1641
1642 int
1643 ada_is_bogus_array_descriptor (struct type *type)
1644 {
1645 return
1646 type != NULL
1647 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1648 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1649 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1650 && !ada_is_array_descriptor_type (type);
1651 }
1652
1653
1654 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1655 (fat pointer) returns the type of the array data described---specifically,
1656 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
1657 in from the descriptor; otherwise, they are left unspecified. If
1658 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1659 returns NULL. The result is simply the type of ARR if ARR is not
1660 a descriptor. */
1661 struct type *
1662 ada_type_of_array (struct value *arr, int bounds)
1663 {
1664 if (ada_is_packed_array_type (value_type (arr)))
1665 return decode_packed_array_type (value_type (arr));
1666
1667 if (!ada_is_array_descriptor_type (value_type (arr)))
1668 return value_type (arr);
1669
1670 if (!bounds)
1671 return
1672 ada_check_typedef (TYPE_TARGET_TYPE (desc_data_type (value_type (arr))));
1673 else
1674 {
1675 struct type *elt_type;
1676 int arity;
1677 struct value *descriptor;
1678 struct objfile *objf = TYPE_OBJFILE (value_type (arr));
1679
1680 elt_type = ada_array_element_type (value_type (arr), -1);
1681 arity = ada_array_arity (value_type (arr));
1682
1683 if (elt_type == NULL || arity == 0)
1684 return ada_check_typedef (value_type (arr));
1685
1686 descriptor = desc_bounds (arr);
1687 if (value_as_long (descriptor) == 0)
1688 return NULL;
1689 while (arity > 0)
1690 {
1691 struct type *range_type = alloc_type (objf);
1692 struct type *array_type = alloc_type (objf);
1693 struct value *low = desc_one_bound (descriptor, arity, 0);
1694 struct value *high = desc_one_bound (descriptor, arity, 1);
1695 arity -= 1;
1696
1697 create_range_type (range_type, value_type (low),
1698 longest_to_int (value_as_long (low)),
1699 longest_to_int (value_as_long (high)));
1700 elt_type = create_array_type (array_type, elt_type, range_type);
1701 }
1702
1703 return lookup_pointer_type (elt_type);
1704 }
1705 }
1706
1707 /* If ARR does not represent an array, returns ARR unchanged.
1708 Otherwise, returns either a standard GDB array with bounds set
1709 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1710 GDB array. Returns NULL if ARR is a null fat pointer. */
1711
1712 struct value *
1713 ada_coerce_to_simple_array_ptr (struct value *arr)
1714 {
1715 if (ada_is_array_descriptor_type (value_type (arr)))
1716 {
1717 struct type *arrType = ada_type_of_array (arr, 1);
1718 if (arrType == NULL)
1719 return NULL;
1720 return value_cast (arrType, value_copy (desc_data (arr)));
1721 }
1722 else if (ada_is_packed_array_type (value_type (arr)))
1723 return decode_packed_array (arr);
1724 else
1725 return arr;
1726 }
1727
1728 /* If ARR does not represent an array, returns ARR unchanged.
1729 Otherwise, returns a standard GDB array describing ARR (which may
1730 be ARR itself if it already is in the proper form). */
1731
1732 static struct value *
1733 ada_coerce_to_simple_array (struct value *arr)
1734 {
1735 if (ada_is_array_descriptor_type (value_type (arr)))
1736 {
1737 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1738 if (arrVal == NULL)
1739 error (_("Bounds unavailable for null array pointer."));
1740 check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
1741 return value_ind (arrVal);
1742 }
1743 else if (ada_is_packed_array_type (value_type (arr)))
1744 return decode_packed_array (arr);
1745 else
1746 return arr;
1747 }
1748
1749 /* If TYPE represents a GNAT array type, return it translated to an
1750 ordinary GDB array type (possibly with BITSIZE fields indicating
1751 packing). For other types, is the identity. */
1752
1753 struct type *
1754 ada_coerce_to_simple_array_type (struct type *type)
1755 {
1756 struct value *mark = value_mark ();
1757 struct value *dummy = value_from_longest (builtin_type_int32, 0);
1758 struct type *result;
1759 deprecated_set_value_type (dummy, type);
1760 result = ada_type_of_array (dummy, 0);
1761 value_free_to_mark (mark);
1762 return result;
1763 }
1764
1765 /* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1766
1767 int
1768 ada_is_packed_array_type (struct type *type)
1769 {
1770 if (type == NULL)
1771 return 0;
1772 type = desc_base_type (type);
1773 type = ada_check_typedef (type);
1774 return
1775 ada_type_name (type) != NULL
1776 && strstr (ada_type_name (type), "___XP") != NULL;
1777 }
1778
1779 /* Given that TYPE is a standard GDB array type with all bounds filled
1780 in, and that the element size of its ultimate scalar constituents
1781 (that is, either its elements, or, if it is an array of arrays, its
1782 elements' elements, etc.) is *ELT_BITS, return an identical type,
1783 but with the bit sizes of its elements (and those of any
1784 constituent arrays) recorded in the BITSIZE components of its
1785 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1786 in bits. */
1787
1788 static struct type *
1789 packed_array_type (struct type *type, long *elt_bits)
1790 {
1791 struct type *new_elt_type;
1792 struct type *new_type;
1793 LONGEST low_bound, high_bound;
1794
1795 type = ada_check_typedef (type);
1796 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1797 return type;
1798
1799 new_type = alloc_type (TYPE_OBJFILE (type));
1800 new_elt_type = packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
1801 elt_bits);
1802 create_array_type (new_type, new_elt_type, TYPE_FIELD_TYPE (type, 0));
1803 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
1804 TYPE_NAME (new_type) = ada_type_name (type);
1805
1806 if (get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
1807 &low_bound, &high_bound) < 0)
1808 low_bound = high_bound = 0;
1809 if (high_bound < low_bound)
1810 *elt_bits = TYPE_LENGTH (new_type) = 0;
1811 else
1812 {
1813 *elt_bits *= (high_bound - low_bound + 1);
1814 TYPE_LENGTH (new_type) =
1815 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1816 }
1817
1818 TYPE_FIXED_INSTANCE (new_type) = 1;
1819 return new_type;
1820 }
1821
1822 /* The array type encoded by TYPE, where ada_is_packed_array_type (TYPE). */
1823
1824 static struct type *
1825 decode_packed_array_type (struct type *type)
1826 {
1827 struct symbol *sym;
1828 struct block **blocks;
1829 char *raw_name = ada_type_name (ada_check_typedef (type));
1830 char *name;
1831 char *tail;
1832 struct type *shadow_type;
1833 long bits;
1834 int i, n;
1835
1836 if (!raw_name)
1837 raw_name = ada_type_name (desc_base_type (type));
1838
1839 if (!raw_name)
1840 return NULL;
1841
1842 name = (char *) alloca (strlen (raw_name) + 1);
1843 tail = strstr (raw_name, "___XP");
1844 type = desc_base_type (type);
1845
1846 memcpy (name, raw_name, tail - raw_name);
1847 name[tail - raw_name] = '\000';
1848
1849 sym = standard_lookup (name, get_selected_block (0), VAR_DOMAIN);
1850 if (sym == NULL || SYMBOL_TYPE (sym) == NULL)
1851 {
1852 lim_warning (_("could not find bounds information on packed array"));
1853 return NULL;
1854 }
1855 shadow_type = SYMBOL_TYPE (sym);
1856
1857 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
1858 {
1859 lim_warning (_("could not understand bounds information on packed array"));
1860 return NULL;
1861 }
1862
1863 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1864 {
1865 lim_warning
1866 (_("could not understand bit size information on packed array"));
1867 return NULL;
1868 }
1869
1870 return packed_array_type (shadow_type, &bits);
1871 }
1872
1873 /* Given that ARR is a struct value *indicating a GNAT packed array,
1874 returns a simple array that denotes that array. Its type is a
1875 standard GDB array type except that the BITSIZEs of the array
1876 target types are set to the number of bits in each element, and the
1877 type length is set appropriately. */
1878
1879 static struct value *
1880 decode_packed_array (struct value *arr)
1881 {
1882 struct type *type;
1883
1884 arr = ada_coerce_ref (arr);
1885 if (TYPE_CODE (value_type (arr)) == TYPE_CODE_PTR)
1886 arr = ada_value_ind (arr);
1887
1888 type = decode_packed_array_type (value_type (arr));
1889 if (type == NULL)
1890 {
1891 error (_("can't unpack array"));
1892 return NULL;
1893 }
1894
1895 if (gdbarch_bits_big_endian (current_gdbarch)
1896 && ada_is_modular_type (value_type (arr)))
1897 {
1898 /* This is a (right-justified) modular type representing a packed
1899 array with no wrapper. In order to interpret the value through
1900 the (left-justified) packed array type we just built, we must
1901 first left-justify it. */
1902 int bit_size, bit_pos;
1903 ULONGEST mod;
1904
1905 mod = ada_modulus (value_type (arr)) - 1;
1906 bit_size = 0;
1907 while (mod > 0)
1908 {
1909 bit_size += 1;
1910 mod >>= 1;
1911 }
1912 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
1913 arr = ada_value_primitive_packed_val (arr, NULL,
1914 bit_pos / HOST_CHAR_BIT,
1915 bit_pos % HOST_CHAR_BIT,
1916 bit_size,
1917 type);
1918 }
1919
1920 return coerce_unspec_val_to_type (arr, type);
1921 }
1922
1923
1924 /* The value of the element of packed array ARR at the ARITY indices
1925 given in IND. ARR must be a simple array. */
1926
1927 static struct value *
1928 value_subscript_packed (struct value *arr, int arity, struct value **ind)
1929 {
1930 int i;
1931 int bits, elt_off, bit_off;
1932 long elt_total_bit_offset;
1933 struct type *elt_type;
1934 struct value *v;
1935
1936 bits = 0;
1937 elt_total_bit_offset = 0;
1938 elt_type = ada_check_typedef (value_type (arr));
1939 for (i = 0; i < arity; i += 1)
1940 {
1941 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
1942 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
1943 error
1944 (_("attempt to do packed indexing of something other than a packed array"));
1945 else
1946 {
1947 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
1948 LONGEST lowerbound, upperbound;
1949 LONGEST idx;
1950
1951 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
1952 {
1953 lim_warning (_("don't know bounds of array"));
1954 lowerbound = upperbound = 0;
1955 }
1956
1957 idx = pos_atr (ind[i]);
1958 if (idx < lowerbound || idx > upperbound)
1959 lim_warning (_("packed array index %ld out of bounds"), (long) idx);
1960 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
1961 elt_total_bit_offset += (idx - lowerbound) * bits;
1962 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
1963 }
1964 }
1965 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
1966 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
1967
1968 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
1969 bits, elt_type);
1970 return v;
1971 }
1972
1973 /* Non-zero iff TYPE includes negative integer values. */
1974
1975 static int
1976 has_negatives (struct type *type)
1977 {
1978 switch (TYPE_CODE (type))
1979 {
1980 default:
1981 return 0;
1982 case TYPE_CODE_INT:
1983 return !TYPE_UNSIGNED (type);
1984 case TYPE_CODE_RANGE:
1985 return TYPE_LOW_BOUND (type) < 0;
1986 }
1987 }
1988
1989
1990 /* Create a new value of type TYPE from the contents of OBJ starting
1991 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
1992 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
1993 assigning through the result will set the field fetched from.
1994 VALADDR is ignored unless OBJ is NULL, in which case,
1995 VALADDR+OFFSET must address the start of storage containing the
1996 packed value. The value returned in this case is never an lval.
1997 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
1998
1999 struct value *
2000 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2001 long offset, int bit_offset, int bit_size,
2002 struct type *type)
2003 {
2004 struct value *v;
2005 int src, /* Index into the source area */
2006 targ, /* Index into the target area */
2007 srcBitsLeft, /* Number of source bits left to move */
2008 nsrc, ntarg, /* Number of source and target bytes */
2009 unusedLS, /* Number of bits in next significant
2010 byte of source that are unused */
2011 accumSize; /* Number of meaningful bits in accum */
2012 unsigned char *bytes; /* First byte containing data to unpack */
2013 unsigned char *unpacked;
2014 unsigned long accum; /* Staging area for bits being transferred */
2015 unsigned char sign;
2016 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2017 /* Transmit bytes from least to most significant; delta is the direction
2018 the indices move. */
2019 int delta = gdbarch_bits_big_endian (current_gdbarch) ? -1 : 1;
2020
2021 type = ada_check_typedef (type);
2022
2023 if (obj == NULL)
2024 {
2025 v = allocate_value (type);
2026 bytes = (unsigned char *) (valaddr + offset);
2027 }
2028 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2029 {
2030 v = value_at (type,
2031 VALUE_ADDRESS (obj) + value_offset (obj) + offset);
2032 bytes = (unsigned char *) alloca (len);
2033 read_memory (VALUE_ADDRESS (v), bytes, len);
2034 }
2035 else
2036 {
2037 v = allocate_value (type);
2038 bytes = (unsigned char *) value_contents (obj) + offset;
2039 }
2040
2041 if (obj != NULL)
2042 {
2043 VALUE_LVAL (v) = VALUE_LVAL (obj);
2044 if (VALUE_LVAL (obj) == lval_internalvar)
2045 VALUE_LVAL (v) = lval_internalvar_component;
2046 VALUE_ADDRESS (v) = VALUE_ADDRESS (obj) + value_offset (obj) + offset;
2047 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2048 set_value_bitsize (v, bit_size);
2049 if (value_bitpos (v) >= HOST_CHAR_BIT)
2050 {
2051 VALUE_ADDRESS (v) += 1;
2052 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2053 }
2054 }
2055 else
2056 set_value_bitsize (v, bit_size);
2057 unpacked = (unsigned char *) value_contents (v);
2058
2059 srcBitsLeft = bit_size;
2060 nsrc = len;
2061 ntarg = TYPE_LENGTH (type);
2062 sign = 0;
2063 if (bit_size == 0)
2064 {
2065 memset (unpacked, 0, TYPE_LENGTH (type));
2066 return v;
2067 }
2068 else if (gdbarch_bits_big_endian (current_gdbarch))
2069 {
2070 src = len - 1;
2071 if (has_negatives (type)
2072 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2073 sign = ~0;
2074
2075 unusedLS =
2076 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2077 % HOST_CHAR_BIT;
2078
2079 switch (TYPE_CODE (type))
2080 {
2081 case TYPE_CODE_ARRAY:
2082 case TYPE_CODE_UNION:
2083 case TYPE_CODE_STRUCT:
2084 /* Non-scalar values must be aligned at a byte boundary... */
2085 accumSize =
2086 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2087 /* ... And are placed at the beginning (most-significant) bytes
2088 of the target. */
2089 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2090 break;
2091 default:
2092 accumSize = 0;
2093 targ = TYPE_LENGTH (type) - 1;
2094 break;
2095 }
2096 }
2097 else
2098 {
2099 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2100
2101 src = targ = 0;
2102 unusedLS = bit_offset;
2103 accumSize = 0;
2104
2105 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2106 sign = ~0;
2107 }
2108
2109 accum = 0;
2110 while (nsrc > 0)
2111 {
2112 /* Mask for removing bits of the next source byte that are not
2113 part of the value. */
2114 unsigned int unusedMSMask =
2115 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2116 1;
2117 /* Sign-extend bits for this byte. */
2118 unsigned int signMask = sign & ~unusedMSMask;
2119 accum |=
2120 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2121 accumSize += HOST_CHAR_BIT - unusedLS;
2122 if (accumSize >= HOST_CHAR_BIT)
2123 {
2124 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2125 accumSize -= HOST_CHAR_BIT;
2126 accum >>= HOST_CHAR_BIT;
2127 ntarg -= 1;
2128 targ += delta;
2129 }
2130 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2131 unusedLS = 0;
2132 nsrc -= 1;
2133 src += delta;
2134 }
2135 while (ntarg > 0)
2136 {
2137 accum |= sign << accumSize;
2138 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2139 accumSize -= HOST_CHAR_BIT;
2140 accum >>= HOST_CHAR_BIT;
2141 ntarg -= 1;
2142 targ += delta;
2143 }
2144
2145 return v;
2146 }
2147
2148 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2149 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
2150 not overlap. */
2151 static void
2152 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2153 int src_offset, int n)
2154 {
2155 unsigned int accum, mask;
2156 int accum_bits, chunk_size;
2157
2158 target += targ_offset / HOST_CHAR_BIT;
2159 targ_offset %= HOST_CHAR_BIT;
2160 source += src_offset / HOST_CHAR_BIT;
2161 src_offset %= HOST_CHAR_BIT;
2162 if (gdbarch_bits_big_endian (current_gdbarch))
2163 {
2164 accum = (unsigned char) *source;
2165 source += 1;
2166 accum_bits = HOST_CHAR_BIT - src_offset;
2167
2168 while (n > 0)
2169 {
2170 int unused_right;
2171 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2172 accum_bits += HOST_CHAR_BIT;
2173 source += 1;
2174 chunk_size = HOST_CHAR_BIT - targ_offset;
2175 if (chunk_size > n)
2176 chunk_size = n;
2177 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2178 mask = ((1 << chunk_size) - 1) << unused_right;
2179 *target =
2180 (*target & ~mask)
2181 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2182 n -= chunk_size;
2183 accum_bits -= chunk_size;
2184 target += 1;
2185 targ_offset = 0;
2186 }
2187 }
2188 else
2189 {
2190 accum = (unsigned char) *source >> src_offset;
2191 source += 1;
2192 accum_bits = HOST_CHAR_BIT - src_offset;
2193
2194 while (n > 0)
2195 {
2196 accum = accum + ((unsigned char) *source << accum_bits);
2197 accum_bits += HOST_CHAR_BIT;
2198 source += 1;
2199 chunk_size = HOST_CHAR_BIT - targ_offset;
2200 if (chunk_size > n)
2201 chunk_size = n;
2202 mask = ((1 << chunk_size) - 1) << targ_offset;
2203 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2204 n -= chunk_size;
2205 accum_bits -= chunk_size;
2206 accum >>= chunk_size;
2207 target += 1;
2208 targ_offset = 0;
2209 }
2210 }
2211 }
2212
2213 /* Store the contents of FROMVAL into the location of TOVAL.
2214 Return a new value with the location of TOVAL and contents of
2215 FROMVAL. Handles assignment into packed fields that have
2216 floating-point or non-scalar types. */
2217
2218 static struct value *
2219 ada_value_assign (struct value *toval, struct value *fromval)
2220 {
2221 struct type *type = value_type (toval);
2222 int bits = value_bitsize (toval);
2223
2224 toval = ada_coerce_ref (toval);
2225 fromval = ada_coerce_ref (fromval);
2226
2227 if (ada_is_direct_array_type (value_type (toval)))
2228 toval = ada_coerce_to_simple_array (toval);
2229 if (ada_is_direct_array_type (value_type (fromval)))
2230 fromval = ada_coerce_to_simple_array (fromval);
2231
2232 if (!deprecated_value_modifiable (toval))
2233 error (_("Left operand of assignment is not a modifiable lvalue."));
2234
2235 if (VALUE_LVAL (toval) == lval_memory
2236 && bits > 0
2237 && (TYPE_CODE (type) == TYPE_CODE_FLT
2238 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2239 {
2240 int len = (value_bitpos (toval)
2241 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2242 int from_size;
2243 char *buffer = (char *) alloca (len);
2244 struct value *val;
2245 CORE_ADDR to_addr = VALUE_ADDRESS (toval) + value_offset (toval);
2246
2247 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2248 fromval = value_cast (type, fromval);
2249
2250 read_memory (to_addr, buffer, len);
2251 from_size = value_bitsize (fromval);
2252 if (from_size == 0)
2253 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2254 if (gdbarch_bits_big_endian (current_gdbarch))
2255 move_bits (buffer, value_bitpos (toval),
2256 value_contents (fromval), from_size - bits, bits);
2257 else
2258 move_bits (buffer, value_bitpos (toval), value_contents (fromval),
2259 0, bits);
2260 write_memory (to_addr, buffer, len);
2261 if (deprecated_memory_changed_hook)
2262 deprecated_memory_changed_hook (to_addr, len);
2263
2264 val = value_copy (toval);
2265 memcpy (value_contents_raw (val), value_contents (fromval),
2266 TYPE_LENGTH (type));
2267 deprecated_set_value_type (val, type);
2268
2269 return val;
2270 }
2271
2272 return value_assign (toval, fromval);
2273 }
2274
2275
2276 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2277 * CONTAINER, assign the contents of VAL to COMPONENTS's place in
2278 * CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2279 * COMPONENT, and not the inferior's memory. The current contents
2280 * of COMPONENT are ignored. */
2281 static void
2282 value_assign_to_component (struct value *container, struct value *component,
2283 struct value *val)
2284 {
2285 LONGEST offset_in_container =
2286 (LONGEST) (VALUE_ADDRESS (component) + value_offset (component)
2287 - VALUE_ADDRESS (container) - value_offset (container));
2288 int bit_offset_in_container =
2289 value_bitpos (component) - value_bitpos (container);
2290 int bits;
2291
2292 val = value_cast (value_type (component), val);
2293
2294 if (value_bitsize (component) == 0)
2295 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2296 else
2297 bits = value_bitsize (component);
2298
2299 if (gdbarch_bits_big_endian (current_gdbarch))
2300 move_bits (value_contents_writeable (container) + offset_in_container,
2301 value_bitpos (container) + bit_offset_in_container,
2302 value_contents (val),
2303 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2304 bits);
2305 else
2306 move_bits (value_contents_writeable (container) + offset_in_container,
2307 value_bitpos (container) + bit_offset_in_container,
2308 value_contents (val), 0, bits);
2309 }
2310
2311 /* The value of the element of array ARR at the ARITY indices given in IND.
2312 ARR may be either a simple array, GNAT array descriptor, or pointer
2313 thereto. */
2314
2315 struct value *
2316 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2317 {
2318 int k;
2319 struct value *elt;
2320 struct type *elt_type;
2321
2322 elt = ada_coerce_to_simple_array (arr);
2323
2324 elt_type = ada_check_typedef (value_type (elt));
2325 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2326 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2327 return value_subscript_packed (elt, arity, ind);
2328
2329 for (k = 0; k < arity; k += 1)
2330 {
2331 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2332 error (_("too many subscripts (%d expected)"), k);
2333 elt = value_subscript (elt, value_pos_atr (builtin_type_int32, ind[k]));
2334 }
2335 return elt;
2336 }
2337
2338 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2339 value of the element of *ARR at the ARITY indices given in
2340 IND. Does not read the entire array into memory. */
2341
2342 struct value *
2343 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2344 struct value **ind)
2345 {
2346 int k;
2347
2348 for (k = 0; k < arity; k += 1)
2349 {
2350 LONGEST lwb, upb;
2351 struct value *idx;
2352
2353 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2354 error (_("too many subscripts (%d expected)"), k);
2355 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2356 value_copy (arr));
2357 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2358 idx = value_pos_atr (builtin_type_int32, ind[k]);
2359 if (lwb != 0)
2360 idx = value_binop (idx, value_from_longest (value_type (idx), lwb),
2361 BINOP_SUB);
2362
2363 arr = value_ptradd (arr, idx);
2364 type = TYPE_TARGET_TYPE (type);
2365 }
2366
2367 return value_ind (arr);
2368 }
2369
2370 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2371 actual type of ARRAY_PTR is ignored), returns a reference to
2372 the Ada slice of HIGH-LOW+1 elements starting at index LOW. The lower
2373 bound of this array is LOW, as per Ada rules. */
2374 static struct value *
2375 ada_value_slice_ptr (struct value *array_ptr, struct type *type,
2376 int low, int high)
2377 {
2378 CORE_ADDR base = value_as_address (array_ptr)
2379 + ((low - TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)))
2380 * TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
2381 struct type *index_type =
2382 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
2383 low, high);
2384 struct type *slice_type =
2385 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2386 return value_from_pointer (lookup_reference_type (slice_type), base);
2387 }
2388
2389
2390 static struct value *
2391 ada_value_slice (struct value *array, int low, int high)
2392 {
2393 struct type *type = value_type (array);
2394 struct type *index_type =
2395 create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2396 struct type *slice_type =
2397 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2398 return value_cast (slice_type, value_slice (array, low, high - low + 1));
2399 }
2400
2401 /* If type is a record type in the form of a standard GNAT array
2402 descriptor, returns the number of dimensions for type. If arr is a
2403 simple array, returns the number of "array of"s that prefix its
2404 type designation. Otherwise, returns 0. */
2405
2406 int
2407 ada_array_arity (struct type *type)
2408 {
2409 int arity;
2410
2411 if (type == NULL)
2412 return 0;
2413
2414 type = desc_base_type (type);
2415
2416 arity = 0;
2417 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2418 return desc_arity (desc_bounds_type (type));
2419 else
2420 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2421 {
2422 arity += 1;
2423 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2424 }
2425
2426 return arity;
2427 }
2428
2429 /* If TYPE is a record type in the form of a standard GNAT array
2430 descriptor or a simple array type, returns the element type for
2431 TYPE after indexing by NINDICES indices, or by all indices if
2432 NINDICES is -1. Otherwise, returns NULL. */
2433
2434 struct type *
2435 ada_array_element_type (struct type *type, int nindices)
2436 {
2437 type = desc_base_type (type);
2438
2439 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2440 {
2441 int k;
2442 struct type *p_array_type;
2443
2444 p_array_type = desc_data_type (type);
2445
2446 k = ada_array_arity (type);
2447 if (k == 0)
2448 return NULL;
2449
2450 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
2451 if (nindices >= 0 && k > nindices)
2452 k = nindices;
2453 p_array_type = TYPE_TARGET_TYPE (p_array_type);
2454 while (k > 0 && p_array_type != NULL)
2455 {
2456 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2457 k -= 1;
2458 }
2459 return p_array_type;
2460 }
2461 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2462 {
2463 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2464 {
2465 type = TYPE_TARGET_TYPE (type);
2466 nindices -= 1;
2467 }
2468 return type;
2469 }
2470
2471 return NULL;
2472 }
2473
2474 /* The type of nth index in arrays of given type (n numbering from 1).
2475 Does not examine memory. */
2476
2477 struct type *
2478 ada_index_type (struct type *type, int n)
2479 {
2480 struct type *result_type;
2481
2482 type = desc_base_type (type);
2483
2484 if (n > ada_array_arity (type))
2485 return NULL;
2486
2487 if (ada_is_simple_array_type (type))
2488 {
2489 int i;
2490
2491 for (i = 1; i < n; i += 1)
2492 type = TYPE_TARGET_TYPE (type);
2493 result_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0));
2494 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2495 has a target type of TYPE_CODE_UNDEF. We compensate here, but
2496 perhaps stabsread.c would make more sense. */
2497 if (result_type == NULL || TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2498 result_type = builtin_type_int32;
2499
2500 return result_type;
2501 }
2502 else
2503 return desc_index_type (desc_bounds_type (type), n);
2504 }
2505
2506 /* Given that arr is an array type, returns the lower bound of the
2507 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2508 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
2509 array-descriptor type. If TYPEP is non-null, *TYPEP is set to the
2510 bounds type. It works for other arrays with bounds supplied by
2511 run-time quantities other than discriminants. */
2512
2513 static LONGEST
2514 ada_array_bound_from_type (struct type * arr_type, int n, int which,
2515 struct type ** typep)
2516 {
2517 struct type *type;
2518 struct type *index_type_desc;
2519
2520 if (ada_is_packed_array_type (arr_type))
2521 arr_type = decode_packed_array_type (arr_type);
2522
2523 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2524 {
2525 if (typep != NULL)
2526 *typep = builtin_type_int32;
2527 return (LONGEST) - which;
2528 }
2529
2530 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2531 type = TYPE_TARGET_TYPE (arr_type);
2532 else
2533 type = arr_type;
2534
2535 index_type_desc = ada_find_parallel_type (type, "___XA");
2536 if (index_type_desc == NULL)
2537 {
2538 struct type *index_type;
2539
2540 while (n > 1)
2541 {
2542 type = TYPE_TARGET_TYPE (type);
2543 n -= 1;
2544 }
2545
2546 index_type = TYPE_INDEX_TYPE (type);
2547 if (typep != NULL)
2548 *typep = index_type;
2549
2550 /* The index type is either a range type or an enumerated type.
2551 For the range type, we have some macros that allow us to
2552 extract the value of the low and high bounds. But they
2553 do now work for enumerated types. The expressions used
2554 below work for both range and enum types. */
2555 return
2556 (LONGEST) (which == 0
2557 ? TYPE_FIELD_BITPOS (index_type, 0)
2558 : TYPE_FIELD_BITPOS (index_type,
2559 TYPE_NFIELDS (index_type) - 1));
2560 }
2561 else
2562 {
2563 struct type *index_type =
2564 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2565 NULL, TYPE_OBJFILE (arr_type));
2566
2567 if (typep != NULL)
2568 *typep = index_type;
2569
2570 return
2571 (LONGEST) (which == 0
2572 ? TYPE_LOW_BOUND (index_type)
2573 : TYPE_HIGH_BOUND (index_type));
2574 }
2575 }
2576
2577 /* Given that arr is an array value, returns the lower bound of the
2578 nth index (numbering from 1) if WHICH is 0, and the upper bound if
2579 WHICH is 1. This routine will also work for arrays with bounds
2580 supplied by run-time quantities other than discriminants. */
2581
2582 struct value *
2583 ada_array_bound (struct value *arr, int n, int which)
2584 {
2585 struct type *arr_type = value_type (arr);
2586
2587 if (ada_is_packed_array_type (arr_type))
2588 return ada_array_bound (decode_packed_array (arr), n, which);
2589 else if (ada_is_simple_array_type (arr_type))
2590 {
2591 struct type *type;
2592 LONGEST v = ada_array_bound_from_type (arr_type, n, which, &type);
2593 return value_from_longest (type, v);
2594 }
2595 else
2596 return desc_one_bound (desc_bounds (arr), n, which);
2597 }
2598
2599 /* Given that arr is an array value, returns the length of the
2600 nth index. This routine will also work for arrays with bounds
2601 supplied by run-time quantities other than discriminants.
2602 Does not work for arrays indexed by enumeration types with representation
2603 clauses at the moment. */
2604
2605 struct value *
2606 ada_array_length (struct value *arr, int n)
2607 {
2608 struct type *arr_type = ada_check_typedef (value_type (arr));
2609
2610 if (ada_is_packed_array_type (arr_type))
2611 return ada_array_length (decode_packed_array (arr), n);
2612
2613 if (ada_is_simple_array_type (arr_type))
2614 {
2615 struct type *type;
2616 LONGEST v =
2617 ada_array_bound_from_type (arr_type, n, 1, &type) -
2618 ada_array_bound_from_type (arr_type, n, 0, NULL) + 1;
2619 return value_from_longest (type, v);
2620 }
2621 else
2622 return
2623 value_from_longest (builtin_type_int32,
2624 value_as_long (desc_one_bound (desc_bounds (arr),
2625 n, 1))
2626 - value_as_long (desc_one_bound (desc_bounds (arr),
2627 n, 0)) + 1);
2628 }
2629
2630 /* An empty array whose type is that of ARR_TYPE (an array type),
2631 with bounds LOW to LOW-1. */
2632
2633 static struct value *
2634 empty_array (struct type *arr_type, int low)
2635 {
2636 struct type *index_type =
2637 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2638 low, low - 1);
2639 struct type *elt_type = ada_array_element_type (arr_type, 1);
2640 return allocate_value (create_array_type (NULL, elt_type, index_type));
2641 }
2642 \f
2643
2644 /* Name resolution */
2645
2646 /* The "decoded" name for the user-definable Ada operator corresponding
2647 to OP. */
2648
2649 static const char *
2650 ada_decoded_op_name (enum exp_opcode op)
2651 {
2652 int i;
2653
2654 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2655 {
2656 if (ada_opname_table[i].op == op)
2657 return ada_opname_table[i].decoded;
2658 }
2659 error (_("Could not find operator name for opcode"));
2660 }
2661
2662
2663 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2664 references (marked by OP_VAR_VALUE nodes in which the symbol has an
2665 undefined namespace) and converts operators that are
2666 user-defined into appropriate function calls. If CONTEXT_TYPE is
2667 non-null, it provides a preferred result type [at the moment, only
2668 type void has any effect---causing procedures to be preferred over
2669 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
2670 return type is preferred. May change (expand) *EXP. */
2671
2672 static void
2673 resolve (struct expression **expp, int void_context_p)
2674 {
2675 int pc;
2676 pc = 0;
2677 resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
2678 }
2679
2680 /* Resolve the operator of the subexpression beginning at
2681 position *POS of *EXPP. "Resolving" consists of replacing
2682 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2683 with their resolutions, replacing built-in operators with
2684 function calls to user-defined operators, where appropriate, and,
2685 when DEPROCEDURE_P is non-zero, converting function-valued variables
2686 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
2687 are as in ada_resolve, above. */
2688
2689 static struct value *
2690 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2691 struct type *context_type)
2692 {
2693 int pc = *pos;
2694 int i;
2695 struct expression *exp; /* Convenience: == *expp. */
2696 enum exp_opcode op = (*expp)->elts[pc].opcode;
2697 struct value **argvec; /* Vector of operand types (alloca'ed). */
2698 int nargs; /* Number of operands. */
2699 int oplen;
2700
2701 argvec = NULL;
2702 nargs = 0;
2703 exp = *expp;
2704
2705 /* Pass one: resolve operands, saving their types and updating *pos,
2706 if needed. */
2707 switch (op)
2708 {
2709 case OP_FUNCALL:
2710 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2711 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2712 *pos += 7;
2713 else
2714 {
2715 *pos += 3;
2716 resolve_subexp (expp, pos, 0, NULL);
2717 }
2718 nargs = longest_to_int (exp->elts[pc + 1].longconst);
2719 break;
2720
2721 case UNOP_ADDR:
2722 *pos += 1;
2723 resolve_subexp (expp, pos, 0, NULL);
2724 break;
2725
2726 case UNOP_QUAL:
2727 *pos += 3;
2728 resolve_subexp (expp, pos, 1, exp->elts[pc + 1].type);
2729 break;
2730
2731 case OP_ATR_MODULUS:
2732 case OP_ATR_SIZE:
2733 case OP_ATR_TAG:
2734 case OP_ATR_FIRST:
2735 case OP_ATR_LAST:
2736 case OP_ATR_LENGTH:
2737 case OP_ATR_POS:
2738 case OP_ATR_VAL:
2739 case OP_ATR_MIN:
2740 case OP_ATR_MAX:
2741 case TERNOP_IN_RANGE:
2742 case BINOP_IN_BOUNDS:
2743 case UNOP_IN_RANGE:
2744 case OP_AGGREGATE:
2745 case OP_OTHERS:
2746 case OP_CHOICES:
2747 case OP_POSITIONAL:
2748 case OP_DISCRETE_RANGE:
2749 case OP_NAME:
2750 ada_forward_operator_length (exp, pc, &oplen, &nargs);
2751 *pos += oplen;
2752 break;
2753
2754 case BINOP_ASSIGN:
2755 {
2756 struct value *arg1;
2757
2758 *pos += 1;
2759 arg1 = resolve_subexp (expp, pos, 0, NULL);
2760 if (arg1 == NULL)
2761 resolve_subexp (expp, pos, 1, NULL);
2762 else
2763 resolve_subexp (expp, pos, 1, value_type (arg1));
2764 break;
2765 }
2766
2767 case UNOP_CAST:
2768 *pos += 3;
2769 nargs = 1;
2770 break;
2771
2772 case BINOP_ADD:
2773 case BINOP_SUB:
2774 case BINOP_MUL:
2775 case BINOP_DIV:
2776 case BINOP_REM:
2777 case BINOP_MOD:
2778 case BINOP_EXP:
2779 case BINOP_CONCAT:
2780 case BINOP_LOGICAL_AND:
2781 case BINOP_LOGICAL_OR:
2782 case BINOP_BITWISE_AND:
2783 case BINOP_BITWISE_IOR:
2784 case BINOP_BITWISE_XOR:
2785
2786 case BINOP_EQUAL:
2787 case BINOP_NOTEQUAL:
2788 case BINOP_LESS:
2789 case BINOP_GTR:
2790 case BINOP_LEQ:
2791 case BINOP_GEQ:
2792
2793 case BINOP_REPEAT:
2794 case BINOP_SUBSCRIPT:
2795 case BINOP_COMMA:
2796 *pos += 1;
2797 nargs = 2;
2798 break;
2799
2800 case UNOP_NEG:
2801 case UNOP_PLUS:
2802 case UNOP_LOGICAL_NOT:
2803 case UNOP_ABS:
2804 case UNOP_IND:
2805 *pos += 1;
2806 nargs = 1;
2807 break;
2808
2809 case OP_LONG:
2810 case OP_DOUBLE:
2811 case OP_VAR_VALUE:
2812 *pos += 4;
2813 break;
2814
2815 case OP_TYPE:
2816 case OP_BOOL:
2817 case OP_LAST:
2818 case OP_INTERNALVAR:
2819 *pos += 3;
2820 break;
2821
2822 case UNOP_MEMVAL:
2823 *pos += 3;
2824 nargs = 1;
2825 break;
2826
2827 case OP_REGISTER:
2828 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2829 break;
2830
2831 case STRUCTOP_STRUCT:
2832 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2833 nargs = 1;
2834 break;
2835
2836 case TERNOP_SLICE:
2837 *pos += 1;
2838 nargs = 3;
2839 break;
2840
2841 case OP_STRING:
2842 break;
2843
2844 default:
2845 error (_("Unexpected operator during name resolution"));
2846 }
2847
2848 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2849 for (i = 0; i < nargs; i += 1)
2850 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2851 argvec[i] = NULL;
2852 exp = *expp;
2853
2854 /* Pass two: perform any resolution on principal operator. */
2855 switch (op)
2856 {
2857 default:
2858 break;
2859
2860 case OP_VAR_VALUE:
2861 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2862 {
2863 struct ada_symbol_info *candidates;
2864 int n_candidates;
2865
2866 n_candidates =
2867 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2868 (exp->elts[pc + 2].symbol),
2869 exp->elts[pc + 1].block, VAR_DOMAIN,
2870 &candidates);
2871
2872 if (n_candidates > 1)
2873 {
2874 /* Types tend to get re-introduced locally, so if there
2875 are any local symbols that are not types, first filter
2876 out all types. */
2877 int j;
2878 for (j = 0; j < n_candidates; j += 1)
2879 switch (SYMBOL_CLASS (candidates[j].sym))
2880 {
2881 case LOC_REGISTER:
2882 case LOC_ARG:
2883 case LOC_REF_ARG:
2884 case LOC_REGPARM_ADDR:
2885 case LOC_LOCAL:
2886 case LOC_COMPUTED:
2887 goto FoundNonType;
2888 default:
2889 break;
2890 }
2891 FoundNonType:
2892 if (j < n_candidates)
2893 {
2894 j = 0;
2895 while (j < n_candidates)
2896 {
2897 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2898 {
2899 candidates[j] = candidates[n_candidates - 1];
2900 n_candidates -= 1;
2901 }
2902 else
2903 j += 1;
2904 }
2905 }
2906 }
2907
2908 if (n_candidates == 0)
2909 error (_("No definition found for %s"),
2910 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2911 else if (n_candidates == 1)
2912 i = 0;
2913 else if (deprocedure_p
2914 && !is_nonfunction (candidates, n_candidates))
2915 {
2916 i = ada_resolve_function
2917 (candidates, n_candidates, NULL, 0,
2918 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
2919 context_type);
2920 if (i < 0)
2921 error (_("Could not find a match for %s"),
2922 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2923 }
2924 else
2925 {
2926 printf_filtered (_("Multiple matches for %s\n"),
2927 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2928 user_select_syms (candidates, n_candidates, 1);
2929 i = 0;
2930 }
2931
2932 exp->elts[pc + 1].block = candidates[i].block;
2933 exp->elts[pc + 2].symbol = candidates[i].sym;
2934 if (innermost_block == NULL
2935 || contained_in (candidates[i].block, innermost_block))
2936 innermost_block = candidates[i].block;
2937 }
2938
2939 if (deprocedure_p
2940 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2941 == TYPE_CODE_FUNC))
2942 {
2943 replace_operator_with_call (expp, pc, 0, 0,
2944 exp->elts[pc + 2].symbol,
2945 exp->elts[pc + 1].block);
2946 exp = *expp;
2947 }
2948 break;
2949
2950 case OP_FUNCALL:
2951 {
2952 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2953 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2954 {
2955 struct ada_symbol_info *candidates;
2956 int n_candidates;
2957
2958 n_candidates =
2959 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2960 (exp->elts[pc + 5].symbol),
2961 exp->elts[pc + 4].block, VAR_DOMAIN,
2962 &candidates);
2963 if (n_candidates == 1)
2964 i = 0;
2965 else
2966 {
2967 i = ada_resolve_function
2968 (candidates, n_candidates,
2969 argvec, nargs,
2970 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
2971 context_type);
2972 if (i < 0)
2973 error (_("Could not find a match for %s"),
2974 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2975 }
2976
2977 exp->elts[pc + 4].block = candidates[i].block;
2978 exp->elts[pc + 5].symbol = candidates[i].sym;
2979 if (innermost_block == NULL
2980 || contained_in (candidates[i].block, innermost_block))
2981 innermost_block = candidates[i].block;
2982 }
2983 }
2984 break;
2985 case BINOP_ADD:
2986 case BINOP_SUB:
2987 case BINOP_MUL:
2988 case BINOP_DIV:
2989 case BINOP_REM:
2990 case BINOP_MOD:
2991 case BINOP_CONCAT:
2992 case BINOP_BITWISE_AND:
2993 case BINOP_BITWISE_IOR:
2994 case BINOP_BITWISE_XOR:
2995 case BINOP_EQUAL:
2996 case BINOP_NOTEQUAL:
2997 case BINOP_LESS:
2998 case BINOP_GTR:
2999 case BINOP_LEQ:
3000 case BINOP_GEQ:
3001 case BINOP_EXP:
3002 case UNOP_NEG:
3003 case UNOP_PLUS:
3004 case UNOP_LOGICAL_NOT:
3005 case UNOP_ABS:
3006 if (possible_user_operator_p (op, argvec))
3007 {
3008 struct ada_symbol_info *candidates;
3009 int n_candidates;
3010
3011 n_candidates =
3012 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3013 (struct block *) NULL, VAR_DOMAIN,
3014 &candidates);
3015 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3016 ada_decoded_op_name (op), NULL);
3017 if (i < 0)
3018 break;
3019
3020 replace_operator_with_call (expp, pc, nargs, 1,
3021 candidates[i].sym, candidates[i].block);
3022 exp = *expp;
3023 }
3024 break;
3025
3026 case OP_TYPE:
3027 case OP_REGISTER:
3028 return NULL;
3029 }
3030
3031 *pos = pc;
3032 return evaluate_subexp_type (exp, pos);
3033 }
3034
3035 /* Return non-zero if formal type FTYPE matches actual type ATYPE. If
3036 MAY_DEREF is non-zero, the formal may be a pointer and the actual
3037 a non-pointer. A type of 'void' (which is never a valid expression type)
3038 by convention matches anything. */
3039 /* The term "match" here is rather loose. The match is heuristic and
3040 liberal. FIXME: TOO liberal, in fact. */
3041
3042 static int
3043 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3044 {
3045 ftype = ada_check_typedef (ftype);
3046 atype = ada_check_typedef (atype);
3047
3048 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3049 ftype = TYPE_TARGET_TYPE (ftype);
3050 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3051 atype = TYPE_TARGET_TYPE (atype);
3052
3053 if (TYPE_CODE (ftype) == TYPE_CODE_VOID
3054 || TYPE_CODE (atype) == TYPE_CODE_VOID)
3055 return 1;
3056
3057 switch (TYPE_CODE (ftype))
3058 {
3059 default:
3060 return 1;
3061 case TYPE_CODE_PTR:
3062 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3063 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3064 TYPE_TARGET_TYPE (atype), 0);
3065 else
3066 return (may_deref
3067 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3068 case TYPE_CODE_INT:
3069 case TYPE_CODE_ENUM:
3070 case TYPE_CODE_RANGE:
3071 switch (TYPE_CODE (atype))
3072 {
3073 case TYPE_CODE_INT:
3074 case TYPE_CODE_ENUM:
3075 case TYPE_CODE_RANGE:
3076 return 1;
3077 default:
3078 return 0;
3079 }
3080
3081 case TYPE_CODE_ARRAY:
3082 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3083 || ada_is_array_descriptor_type (atype));
3084
3085 case TYPE_CODE_STRUCT:
3086 if (ada_is_array_descriptor_type (ftype))
3087 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3088 || ada_is_array_descriptor_type (atype));
3089 else
3090 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3091 && !ada_is_array_descriptor_type (atype));
3092
3093 case TYPE_CODE_UNION:
3094 case TYPE_CODE_FLT:
3095 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3096 }
3097 }
3098
3099 /* Return non-zero if the formals of FUNC "sufficiently match" the
3100 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3101 may also be an enumeral, in which case it is treated as a 0-
3102 argument function. */
3103
3104 static int
3105 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3106 {
3107 int i;
3108 struct type *func_type = SYMBOL_TYPE (func);
3109
3110 if (SYMBOL_CLASS (func) == LOC_CONST
3111 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3112 return (n_actuals == 0);
3113 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3114 return 0;
3115
3116 if (TYPE_NFIELDS (func_type) != n_actuals)
3117 return 0;
3118
3119 for (i = 0; i < n_actuals; i += 1)
3120 {
3121 if (actuals[i] == NULL)
3122 return 0;
3123 else
3124 {
3125 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type, i));
3126 struct type *atype = ada_check_typedef (value_type (actuals[i]));
3127
3128 if (!ada_type_match (ftype, atype, 1))
3129 return 0;
3130 }
3131 }
3132 return 1;
3133 }
3134
3135 /* False iff function type FUNC_TYPE definitely does not produce a value
3136 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3137 FUNC_TYPE is not a valid function type with a non-null return type
3138 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3139
3140 static int
3141 return_match (struct type *func_type, struct type *context_type)
3142 {
3143 struct type *return_type;
3144
3145 if (func_type == NULL)
3146 return 1;
3147
3148 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3149 return_type = base_type (TYPE_TARGET_TYPE (func_type));
3150 else
3151 return_type = base_type (func_type);
3152 if (return_type == NULL)
3153 return 1;
3154
3155 context_type = base_type (context_type);
3156
3157 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3158 return context_type == NULL || return_type == context_type;
3159 else if (context_type == NULL)
3160 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3161 else
3162 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3163 }
3164
3165
3166 /* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
3167 function (if any) that matches the types of the NARGS arguments in
3168 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3169 that returns that type, then eliminate matches that don't. If
3170 CONTEXT_TYPE is void and there is at least one match that does not
3171 return void, eliminate all matches that do.
3172
3173 Asks the user if there is more than one match remaining. Returns -1
3174 if there is no such symbol or none is selected. NAME is used
3175 solely for messages. May re-arrange and modify SYMS in
3176 the process; the index returned is for the modified vector. */
3177
3178 static int
3179 ada_resolve_function (struct ada_symbol_info syms[],
3180 int nsyms, struct value **args, int nargs,
3181 const char *name, struct type *context_type)
3182 {
3183 int k;
3184 int m; /* Number of hits */
3185 struct type *fallback;
3186 struct type *return_type;
3187
3188 return_type = context_type;
3189 if (context_type == NULL)
3190 fallback = builtin_type_void;
3191 else
3192 fallback = NULL;
3193
3194 m = 0;
3195 while (1)
3196 {
3197 for (k = 0; k < nsyms; k += 1)
3198 {
3199 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3200
3201 if (ada_args_match (syms[k].sym, args, nargs)
3202 && return_match (type, return_type))
3203 {
3204 syms[m] = syms[k];
3205 m += 1;
3206 }
3207 }
3208 if (m > 0 || return_type == fallback)
3209 break;
3210 else
3211 return_type = fallback;
3212 }
3213
3214 if (m == 0)
3215 return -1;
3216 else if (m > 1)
3217 {
3218 printf_filtered (_("Multiple matches for %s\n"), name);
3219 user_select_syms (syms, m, 1);
3220 return 0;
3221 }
3222 return 0;
3223 }
3224
3225 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3226 in a listing of choices during disambiguation (see sort_choices, below).
3227 The idea is that overloadings of a subprogram name from the
3228 same package should sort in their source order. We settle for ordering
3229 such symbols by their trailing number (__N or $N). */
3230
3231 static int
3232 encoded_ordered_before (char *N0, char *N1)
3233 {
3234 if (N1 == NULL)
3235 return 0;
3236 else if (N0 == NULL)
3237 return 1;
3238 else
3239 {
3240 int k0, k1;
3241 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3242 ;
3243 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3244 ;
3245 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3246 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3247 {
3248 int n0, n1;
3249 n0 = k0;
3250 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3251 n0 -= 1;
3252 n1 = k1;
3253 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3254 n1 -= 1;
3255 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3256 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3257 }
3258 return (strcmp (N0, N1) < 0);
3259 }
3260 }
3261
3262 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3263 encoded names. */
3264
3265 static void
3266 sort_choices (struct ada_symbol_info syms[], int nsyms)
3267 {
3268 int i;
3269 for (i = 1; i < nsyms; i += 1)
3270 {
3271 struct ada_symbol_info sym = syms[i];
3272 int j;
3273
3274 for (j = i - 1; j >= 0; j -= 1)
3275 {
3276 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3277 SYMBOL_LINKAGE_NAME (sym.sym)))
3278 break;
3279 syms[j + 1] = syms[j];
3280 }
3281 syms[j + 1] = sym;
3282 }
3283 }
3284
3285 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3286 by asking the user (if necessary), returning the number selected,
3287 and setting the first elements of SYMS items. Error if no symbols
3288 selected. */
3289
3290 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3291 to be re-integrated one of these days. */
3292
3293 int
3294 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3295 {
3296 int i;
3297 int *chosen = (int *) alloca (sizeof (int) * nsyms);
3298 int n_chosen;
3299 int first_choice = (max_results == 1) ? 1 : 2;
3300 const char *select_mode = multiple_symbols_select_mode ();
3301
3302 if (max_results < 1)
3303 error (_("Request to select 0 symbols!"));
3304 if (nsyms <= 1)
3305 return nsyms;
3306
3307 if (select_mode == multiple_symbols_cancel)
3308 error (_("\
3309 canceled because the command is ambiguous\n\
3310 See set/show multiple-symbol."));
3311
3312 /* If select_mode is "all", then return all possible symbols.
3313 Only do that if more than one symbol can be selected, of course.
3314 Otherwise, display the menu as usual. */
3315 if (select_mode == multiple_symbols_all && max_results > 1)
3316 return nsyms;
3317
3318 printf_unfiltered (_("[0] cancel\n"));
3319 if (max_results > 1)
3320 printf_unfiltered (_("[1] all\n"));
3321
3322 sort_choices (syms, nsyms);
3323
3324 for (i = 0; i < nsyms; i += 1)
3325 {
3326 if (syms[i].sym == NULL)
3327 continue;
3328
3329 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3330 {
3331 struct symtab_and_line sal =
3332 find_function_start_sal (syms[i].sym, 1);
3333 if (sal.symtab == NULL)
3334 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3335 i + first_choice,
3336 SYMBOL_PRINT_NAME (syms[i].sym),
3337 sal.line);
3338 else
3339 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3340 SYMBOL_PRINT_NAME (syms[i].sym),
3341 sal.symtab->filename, sal.line);
3342 continue;
3343 }
3344 else
3345 {
3346 int is_enumeral =
3347 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3348 && SYMBOL_TYPE (syms[i].sym) != NULL
3349 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3350 struct symtab *symtab = symtab_for_sym (syms[i].sym);
3351
3352 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3353 printf_unfiltered (_("[%d] %s at %s:%d\n"),
3354 i + first_choice,
3355 SYMBOL_PRINT_NAME (syms[i].sym),
3356 symtab->filename, SYMBOL_LINE (syms[i].sym));
3357 else if (is_enumeral
3358 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3359 {
3360 printf_unfiltered (("[%d] "), i + first_choice);
3361 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3362 gdb_stdout, -1, 0);
3363 printf_unfiltered (_("'(%s) (enumeral)\n"),
3364 SYMBOL_PRINT_NAME (syms[i].sym));
3365 }
3366 else if (symtab != NULL)
3367 printf_unfiltered (is_enumeral
3368 ? _("[%d] %s in %s (enumeral)\n")
3369 : _("[%d] %s at %s:?\n"),
3370 i + first_choice,
3371 SYMBOL_PRINT_NAME (syms[i].sym),
3372 symtab->filename);
3373 else
3374 printf_unfiltered (is_enumeral
3375 ? _("[%d] %s (enumeral)\n")
3376 : _("[%d] %s at ?\n"),
3377 i + first_choice,
3378 SYMBOL_PRINT_NAME (syms[i].sym));
3379 }
3380 }
3381
3382 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3383 "overload-choice");
3384
3385 for (i = 0; i < n_chosen; i += 1)
3386 syms[i] = syms[chosen[i]];
3387
3388 return n_chosen;
3389 }
3390
3391 /* Read and validate a set of numeric choices from the user in the
3392 range 0 .. N_CHOICES-1. Place the results in increasing
3393 order in CHOICES[0 .. N-1], and return N.
3394
3395 The user types choices as a sequence of numbers on one line
3396 separated by blanks, encoding them as follows:
3397
3398 + A choice of 0 means to cancel the selection, throwing an error.
3399 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3400 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3401
3402 The user is not allowed to choose more than MAX_RESULTS values.
3403
3404 ANNOTATION_SUFFIX, if present, is used to annotate the input
3405 prompts (for use with the -f switch). */
3406
3407 int
3408 get_selections (int *choices, int n_choices, int max_results,
3409 int is_all_choice, char *annotation_suffix)
3410 {
3411 char *args;
3412 char *prompt;
3413 int n_chosen;
3414 int first_choice = is_all_choice ? 2 : 1;
3415
3416 prompt = getenv ("PS2");
3417 if (prompt == NULL)
3418 prompt = "> ";
3419
3420 args = command_line_input (prompt, 0, annotation_suffix);
3421
3422 if (args == NULL)
3423 error_no_arg (_("one or more choice numbers"));
3424
3425 n_chosen = 0;
3426
3427 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3428 order, as given in args. Choices are validated. */
3429 while (1)
3430 {
3431 char *args2;
3432 int choice, j;
3433
3434 while (isspace (*args))
3435 args += 1;
3436 if (*args == '\0' && n_chosen == 0)
3437 error_no_arg (_("one or more choice numbers"));
3438 else if (*args == '\0')
3439 break;
3440
3441 choice = strtol (args, &args2, 10);
3442 if (args == args2 || choice < 0
3443 || choice > n_choices + first_choice - 1)
3444 error (_("Argument must be choice number"));
3445 args = args2;
3446
3447 if (choice == 0)
3448 error (_("cancelled"));
3449
3450 if (choice < first_choice)
3451 {
3452 n_chosen = n_choices;
3453 for (j = 0; j < n_choices; j += 1)
3454 choices[j] = j;
3455 break;
3456 }
3457 choice -= first_choice;
3458
3459 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3460 {
3461 }
3462
3463 if (j < 0 || choice != choices[j])
3464 {
3465 int k;
3466 for (k = n_chosen - 1; k > j; k -= 1)
3467 choices[k + 1] = choices[k];
3468 choices[j + 1] = choice;
3469 n_chosen += 1;
3470 }
3471 }
3472
3473 if (n_chosen > max_results)
3474 error (_("Select no more than %d of the above"), max_results);
3475
3476 return n_chosen;
3477 }
3478
3479 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3480 on the function identified by SYM and BLOCK, and taking NARGS
3481 arguments. Update *EXPP as needed to hold more space. */
3482
3483 static void
3484 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3485 int oplen, struct symbol *sym,
3486 struct block *block)
3487 {
3488 /* A new expression, with 6 more elements (3 for funcall, 4 for function
3489 symbol, -oplen for operator being replaced). */
3490 struct expression *newexp = (struct expression *)
3491 xmalloc (sizeof (struct expression)
3492 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3493 struct expression *exp = *expp;
3494
3495 newexp->nelts = exp->nelts + 7 - oplen;
3496 newexp->language_defn = exp->language_defn;
3497 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3498 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3499 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3500
3501 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3502 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3503
3504 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3505 newexp->elts[pc + 4].block = block;
3506 newexp->elts[pc + 5].symbol = sym;
3507
3508 *expp = newexp;
3509 xfree (exp);
3510 }
3511
3512 /* Type-class predicates */
3513
3514 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3515 or FLOAT). */
3516
3517 static int
3518 numeric_type_p (struct type *type)
3519 {
3520 if (type == NULL)
3521 return 0;
3522 else
3523 {
3524 switch (TYPE_CODE (type))
3525 {
3526 case TYPE_CODE_INT:
3527 case TYPE_CODE_FLT:
3528 return 1;
3529 case TYPE_CODE_RANGE:
3530 return (type == TYPE_TARGET_TYPE (type)
3531 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3532 default:
3533 return 0;
3534 }
3535 }
3536 }
3537
3538 /* True iff TYPE is integral (an INT or RANGE of INTs). */
3539
3540 static int
3541 integer_type_p (struct type *type)
3542 {
3543 if (type == NULL)
3544 return 0;
3545 else
3546 {
3547 switch (TYPE_CODE (type))
3548 {
3549 case TYPE_CODE_INT:
3550 return 1;
3551 case TYPE_CODE_RANGE:
3552 return (type == TYPE_TARGET_TYPE (type)
3553 || integer_type_p (TYPE_TARGET_TYPE (type)));
3554 default:
3555 return 0;
3556 }
3557 }
3558 }
3559
3560 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
3561
3562 static int
3563 scalar_type_p (struct type *type)
3564 {
3565 if (type == NULL)
3566 return 0;
3567 else
3568 {
3569 switch (TYPE_CODE (type))
3570 {
3571 case TYPE_CODE_INT:
3572 case TYPE_CODE_RANGE:
3573 case TYPE_CODE_ENUM:
3574 case TYPE_CODE_FLT:
3575 return 1;
3576 default:
3577 return 0;
3578 }
3579 }
3580 }
3581
3582 /* True iff TYPE is discrete (INT, RANGE, ENUM). */
3583
3584 static int
3585 discrete_type_p (struct type *type)
3586 {
3587 if (type == NULL)
3588 return 0;
3589 else
3590 {
3591 switch (TYPE_CODE (type))
3592 {
3593 case TYPE_CODE_INT:
3594 case TYPE_CODE_RANGE:
3595 case TYPE_CODE_ENUM:
3596 return 1;
3597 default:
3598 return 0;
3599 }
3600 }
3601 }
3602
3603 /* Returns non-zero if OP with operands in the vector ARGS could be
3604 a user-defined function. Errs on the side of pre-defined operators
3605 (i.e., result 0). */
3606
3607 static int
3608 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3609 {
3610 struct type *type0 =
3611 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3612 struct type *type1 =
3613 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3614
3615 if (type0 == NULL)
3616 return 0;
3617
3618 switch (op)
3619 {
3620 default:
3621 return 0;
3622
3623 case BINOP_ADD:
3624 case BINOP_SUB:
3625 case BINOP_MUL:
3626 case BINOP_DIV:
3627 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3628
3629 case BINOP_REM:
3630 case BINOP_MOD:
3631 case BINOP_BITWISE_AND:
3632 case BINOP_BITWISE_IOR:
3633 case BINOP_BITWISE_XOR:
3634 return (!(integer_type_p (type0) && integer_type_p (type1)));
3635
3636 case BINOP_EQUAL:
3637 case BINOP_NOTEQUAL:
3638 case BINOP_LESS:
3639 case BINOP_GTR:
3640 case BINOP_LEQ:
3641 case BINOP_GEQ:
3642 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3643
3644 case BINOP_CONCAT:
3645 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3646
3647 case BINOP_EXP:
3648 return (!(numeric_type_p (type0) && integer_type_p (type1)));
3649
3650 case UNOP_NEG:
3651 case UNOP_PLUS:
3652 case UNOP_LOGICAL_NOT:
3653 case UNOP_ABS:
3654 return (!numeric_type_p (type0));
3655
3656 }
3657 }
3658 \f
3659 /* Renaming */
3660
3661 /* NOTES:
3662
3663 1. In the following, we assume that a renaming type's name may
3664 have an ___XD suffix. It would be nice if this went away at some
3665 point.
3666 2. We handle both the (old) purely type-based representation of
3667 renamings and the (new) variable-based encoding. At some point,
3668 it is devoutly to be hoped that the former goes away
3669 (FIXME: hilfinger-2007-07-09).
3670 3. Subprogram renamings are not implemented, although the XRS
3671 suffix is recognized (FIXME: hilfinger-2007-07-09). */
3672
3673 /* If SYM encodes a renaming,
3674
3675 <renaming> renames <renamed entity>,
3676
3677 sets *LEN to the length of the renamed entity's name,
3678 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3679 the string describing the subcomponent selected from the renamed
3680 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
3681 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3682 are undefined). Otherwise, returns a value indicating the category
3683 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3684 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3685 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
3686 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3687 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3688 may be NULL, in which case they are not assigned.
3689
3690 [Currently, however, GCC does not generate subprogram renamings.] */
3691
3692 enum ada_renaming_category
3693 ada_parse_renaming (struct symbol *sym,
3694 const char **renamed_entity, int *len,
3695 const char **renaming_expr)
3696 {
3697 enum ada_renaming_category kind;
3698 const char *info;
3699 const char *suffix;
3700
3701 if (sym == NULL)
3702 return ADA_NOT_RENAMING;
3703 switch (SYMBOL_CLASS (sym))
3704 {
3705 default:
3706 return ADA_NOT_RENAMING;
3707 case LOC_TYPEDEF:
3708 return parse_old_style_renaming (SYMBOL_TYPE (sym),
3709 renamed_entity, len, renaming_expr);
3710 case LOC_LOCAL:
3711 case LOC_STATIC:
3712 case LOC_COMPUTED:
3713 case LOC_OPTIMIZED_OUT:
3714 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3715 if (info == NULL)
3716 return ADA_NOT_RENAMING;
3717 switch (info[5])
3718 {
3719 case '_':
3720 kind = ADA_OBJECT_RENAMING;
3721 info += 6;
3722 break;
3723 case 'E':
3724 kind = ADA_EXCEPTION_RENAMING;
3725 info += 7;
3726 break;
3727 case 'P':
3728 kind = ADA_PACKAGE_RENAMING;
3729 info += 7;
3730 break;
3731 case 'S':
3732 kind = ADA_SUBPROGRAM_RENAMING;
3733 info += 7;
3734 break;
3735 default:
3736 return ADA_NOT_RENAMING;
3737 }
3738 }
3739
3740 if (renamed_entity != NULL)
3741 *renamed_entity = info;
3742 suffix = strstr (info, "___XE");
3743 if (suffix == NULL || suffix == info)
3744 return ADA_NOT_RENAMING;
3745 if (len != NULL)
3746 *len = strlen (info) - strlen (suffix);
3747 suffix += 5;
3748 if (renaming_expr != NULL)
3749 *renaming_expr = suffix;
3750 return kind;
3751 }
3752
3753 /* Assuming TYPE encodes a renaming according to the old encoding in
3754 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3755 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
3756 ADA_NOT_RENAMING otherwise. */
3757 static enum ada_renaming_category
3758 parse_old_style_renaming (struct type *type,
3759 const char **renamed_entity, int *len,
3760 const char **renaming_expr)
3761 {
3762 enum ada_renaming_category kind;
3763 const char *name;
3764 const char *info;
3765 const char *suffix;
3766
3767 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
3768 || TYPE_NFIELDS (type) != 1)
3769 return ADA_NOT_RENAMING;
3770
3771 name = type_name_no_tag (type);
3772 if (name == NULL)
3773 return ADA_NOT_RENAMING;
3774
3775 name = strstr (name, "___XR");
3776 if (name == NULL)
3777 return ADA_NOT_RENAMING;
3778 switch (name[5])
3779 {
3780 case '\0':
3781 case '_':
3782 kind = ADA_OBJECT_RENAMING;
3783 break;
3784 case 'E':
3785 kind = ADA_EXCEPTION_RENAMING;
3786 break;
3787 case 'P':
3788 kind = ADA_PACKAGE_RENAMING;
3789 break;
3790 case 'S':
3791 kind = ADA_SUBPROGRAM_RENAMING;
3792 break;
3793 default:
3794 return ADA_NOT_RENAMING;
3795 }
3796
3797 info = TYPE_FIELD_NAME (type, 0);
3798 if (info == NULL)
3799 return ADA_NOT_RENAMING;
3800 if (renamed_entity != NULL)
3801 *renamed_entity = info;
3802 suffix = strstr (info, "___XE");
3803 if (renaming_expr != NULL)
3804 *renaming_expr = suffix + 5;
3805 if (suffix == NULL || suffix == info)
3806 return ADA_NOT_RENAMING;
3807 if (len != NULL)
3808 *len = suffix - info;
3809 return kind;
3810 }
3811
3812 \f
3813
3814 /* Evaluation: Function Calls */
3815
3816 /* Return an lvalue containing the value VAL. This is the identity on
3817 lvalues, and otherwise has the side-effect of pushing a copy of VAL
3818 on the stack, using and updating *SP as the stack pointer, and
3819 returning an lvalue whose VALUE_ADDRESS points to the copy. */
3820
3821 static struct value *
3822 ensure_lval (struct value *val, CORE_ADDR *sp)
3823 {
3824 if (! VALUE_LVAL (val))
3825 {
3826 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
3827
3828 /* The following is taken from the structure-return code in
3829 call_function_by_hand. FIXME: Therefore, some refactoring seems
3830 indicated. */
3831 if (gdbarch_inner_than (current_gdbarch, 1, 2))
3832 {
3833 /* Stack grows downward. Align SP and VALUE_ADDRESS (val) after
3834 reserving sufficient space. */
3835 *sp -= len;
3836 if (gdbarch_frame_align_p (current_gdbarch))
3837 *sp = gdbarch_frame_align (current_gdbarch, *sp);
3838 VALUE_ADDRESS (val) = *sp;
3839 }
3840 else
3841 {
3842 /* Stack grows upward. Align the frame, allocate space, and
3843 then again, re-align the frame. */
3844 if (gdbarch_frame_align_p (current_gdbarch))
3845 *sp = gdbarch_frame_align (current_gdbarch, *sp);
3846 VALUE_ADDRESS (val) = *sp;
3847 *sp += len;
3848 if (gdbarch_frame_align_p (current_gdbarch))
3849 *sp = gdbarch_frame_align (current_gdbarch, *sp);
3850 }
3851 VALUE_LVAL (val) = lval_memory;
3852
3853 write_memory (VALUE_ADDRESS (val), value_contents_raw (val), len);
3854 }
3855
3856 return val;
3857 }
3858
3859 /* Return the value ACTUAL, converted to be an appropriate value for a
3860 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
3861 allocating any necessary descriptors (fat pointers), or copies of
3862 values not residing in memory, updating it as needed. */
3863
3864 struct value *
3865 ada_convert_actual (struct value *actual, struct type *formal_type0,
3866 CORE_ADDR *sp)
3867 {
3868 struct type *actual_type = ada_check_typedef (value_type (actual));
3869 struct type *formal_type = ada_check_typedef (formal_type0);
3870 struct type *formal_target =
3871 TYPE_CODE (formal_type) == TYPE_CODE_PTR
3872 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3873 struct type *actual_target =
3874 TYPE_CODE (actual_type) == TYPE_CODE_PTR
3875 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3876
3877 if (ada_is_array_descriptor_type (formal_target)
3878 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3879 return make_array_descriptor (formal_type, actual, sp);
3880 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
3881 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
3882 {
3883 struct value *result;
3884 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3885 && ada_is_array_descriptor_type (actual_target))
3886 result = desc_data (actual);
3887 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3888 {
3889 if (VALUE_LVAL (actual) != lval_memory)
3890 {
3891 struct value *val;
3892 actual_type = ada_check_typedef (value_type (actual));
3893 val = allocate_value (actual_type);
3894 memcpy ((char *) value_contents_raw (val),
3895 (char *) value_contents (actual),
3896 TYPE_LENGTH (actual_type));
3897 actual = ensure_lval (val, sp);
3898 }
3899 result = value_addr (actual);
3900 }
3901 else
3902 return actual;
3903 return value_cast_pointers (formal_type, result);
3904 }
3905 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3906 return ada_value_ind (actual);
3907
3908 return actual;
3909 }
3910
3911
3912 /* Push a descriptor of type TYPE for array value ARR on the stack at
3913 *SP, updating *SP to reflect the new descriptor. Return either
3914 an lvalue representing the new descriptor, or (if TYPE is a pointer-
3915 to-descriptor type rather than a descriptor type), a struct value *
3916 representing a pointer to this descriptor. */
3917
3918 static struct value *
3919 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3920 {
3921 struct type *bounds_type = desc_bounds_type (type);
3922 struct type *desc_type = desc_base_type (type);
3923 struct value *descriptor = allocate_value (desc_type);
3924 struct value *bounds = allocate_value (bounds_type);
3925 int i;
3926
3927 for (i = ada_array_arity (ada_check_typedef (value_type (arr))); i > 0; i -= 1)
3928 {
3929 modify_general_field (value_contents_writeable (bounds),
3930 value_as_long (ada_array_bound (arr, i, 0)),
3931 desc_bound_bitpos (bounds_type, i, 0),
3932 desc_bound_bitsize (bounds_type, i, 0));
3933 modify_general_field (value_contents_writeable (bounds),
3934 value_as_long (ada_array_bound (arr, i, 1)),
3935 desc_bound_bitpos (bounds_type, i, 1),
3936 desc_bound_bitsize (bounds_type, i, 1));
3937 }
3938
3939 bounds = ensure_lval (bounds, sp);
3940
3941 modify_general_field (value_contents_writeable (descriptor),
3942 VALUE_ADDRESS (ensure_lval (arr, sp)),
3943 fat_pntr_data_bitpos (desc_type),
3944 fat_pntr_data_bitsize (desc_type));
3945
3946 modify_general_field (value_contents_writeable (descriptor),
3947 VALUE_ADDRESS (bounds),
3948 fat_pntr_bounds_bitpos (desc_type),
3949 fat_pntr_bounds_bitsize (desc_type));
3950
3951 descriptor = ensure_lval (descriptor, sp);
3952
3953 if (TYPE_CODE (type) == TYPE_CODE_PTR)
3954 return value_addr (descriptor);
3955 else
3956 return descriptor;
3957 }
3958 \f
3959 /* Dummy definitions for an experimental caching module that is not
3960 * used in the public sources. */
3961
3962 static int
3963 lookup_cached_symbol (const char *name, domain_enum namespace,
3964 struct symbol **sym, struct block **block)
3965 {
3966 return 0;
3967 }
3968
3969 static void
3970 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3971 struct block *block)
3972 {
3973 }
3974 \f
3975 /* Symbol Lookup */
3976
3977 /* Return the result of a standard (literal, C-like) lookup of NAME in
3978 given DOMAIN, visible from lexical block BLOCK. */
3979
3980 static struct symbol *
3981 standard_lookup (const char *name, const struct block *block,
3982 domain_enum domain)
3983 {
3984 struct symbol *sym;
3985
3986 if (lookup_cached_symbol (name, domain, &sym, NULL))
3987 return sym;
3988 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
3989 cache_symbol (name, domain, sym, block_found);
3990 return sym;
3991 }
3992
3993
3994 /* Non-zero iff there is at least one non-function/non-enumeral symbol
3995 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
3996 since they contend in overloading in the same way. */
3997 static int
3998 is_nonfunction (struct ada_symbol_info syms[], int n)
3999 {
4000 int i;
4001
4002 for (i = 0; i < n; i += 1)
4003 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4004 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4005 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4006 return 1;
4007
4008 return 0;
4009 }
4010
4011 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4012 struct types. Otherwise, they may not. */
4013
4014 static int
4015 equiv_types (struct type *type0, struct type *type1)
4016 {
4017 if (type0 == type1)
4018 return 1;
4019 if (type0 == NULL || type1 == NULL
4020 || TYPE_CODE (type0) != TYPE_CODE (type1))
4021 return 0;
4022 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4023 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4024 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4025 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4026 return 1;
4027
4028 return 0;
4029 }
4030
4031 /* True iff SYM0 represents the same entity as SYM1, or one that is
4032 no more defined than that of SYM1. */
4033
4034 static int
4035 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4036 {
4037 if (sym0 == sym1)
4038 return 1;
4039 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4040 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4041 return 0;
4042
4043 switch (SYMBOL_CLASS (sym0))
4044 {
4045 case LOC_UNDEF:
4046 return 1;
4047 case LOC_TYPEDEF:
4048 {
4049 struct type *type0 = SYMBOL_TYPE (sym0);
4050 struct type *type1 = SYMBOL_TYPE (sym1);
4051 char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4052 char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4053 int len0 = strlen (name0);
4054 return
4055 TYPE_CODE (type0) == TYPE_CODE (type1)
4056 && (equiv_types (type0, type1)
4057 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4058 && strncmp (name1 + len0, "___XV", 5) == 0));
4059 }
4060 case LOC_CONST:
4061 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4062 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4063 default:
4064 return 0;
4065 }
4066 }
4067
4068 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4069 records in OBSTACKP. Do nothing if SYM is a duplicate. */
4070
4071 static void
4072 add_defn_to_vec (struct obstack *obstackp,
4073 struct symbol *sym,
4074 struct block *block)
4075 {
4076 int i;
4077 size_t tmp;
4078 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4079
4080 /* Do not try to complete stub types, as the debugger is probably
4081 already scanning all symbols matching a certain name at the
4082 time when this function is called. Trying to replace the stub
4083 type by its associated full type will cause us to restart a scan
4084 which may lead to an infinite recursion. Instead, the client
4085 collecting the matching symbols will end up collecting several
4086 matches, with at least one of them complete. It can then filter
4087 out the stub ones if needed. */
4088
4089 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4090 {
4091 if (lesseq_defined_than (sym, prevDefns[i].sym))
4092 return;
4093 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4094 {
4095 prevDefns[i].sym = sym;
4096 prevDefns[i].block = block;
4097 return;
4098 }
4099 }
4100
4101 {
4102 struct ada_symbol_info info;
4103
4104 info.sym = sym;
4105 info.block = block;
4106 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4107 }
4108 }
4109
4110 /* Number of ada_symbol_info structures currently collected in
4111 current vector in *OBSTACKP. */
4112
4113 static int
4114 num_defns_collected (struct obstack *obstackp)
4115 {
4116 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4117 }
4118
4119 /* Vector of ada_symbol_info structures currently collected in current
4120 vector in *OBSTACKP. If FINISH, close off the vector and return
4121 its final address. */
4122
4123 static struct ada_symbol_info *
4124 defns_collected (struct obstack *obstackp, int finish)
4125 {
4126 if (finish)
4127 return obstack_finish (obstackp);
4128 else
4129 return (struct ada_symbol_info *) obstack_base (obstackp);
4130 }
4131
4132 /* Look, in partial_symtab PST, for symbol NAME in given namespace.
4133 Check the global symbols if GLOBAL, the static symbols if not.
4134 Do wild-card match if WILD. */
4135
4136 static struct partial_symbol *
4137 ada_lookup_partial_symbol (struct partial_symtab *pst, const char *name,
4138 int global, domain_enum namespace, int wild)
4139 {
4140 struct partial_symbol **start;
4141 int name_len = strlen (name);
4142 int length = (global ? pst->n_global_syms : pst->n_static_syms);
4143 int i;
4144
4145 if (length == 0)
4146 {
4147 return (NULL);
4148 }
4149
4150 start = (global ?
4151 pst->objfile->global_psymbols.list + pst->globals_offset :
4152 pst->objfile->static_psymbols.list + pst->statics_offset);
4153
4154 if (wild)
4155 {
4156 for (i = 0; i < length; i += 1)
4157 {
4158 struct partial_symbol *psym = start[i];
4159
4160 if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4161 SYMBOL_DOMAIN (psym), namespace)
4162 && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (psym)))
4163 return psym;
4164 }
4165 return NULL;
4166 }
4167 else
4168 {
4169 if (global)
4170 {
4171 int U;
4172 i = 0;
4173 U = length - 1;
4174 while (U - i > 4)
4175 {
4176 int M = (U + i) >> 1;
4177 struct partial_symbol *psym = start[M];
4178 if (SYMBOL_LINKAGE_NAME (psym)[0] < name[0])
4179 i = M + 1;
4180 else if (SYMBOL_LINKAGE_NAME (psym)[0] > name[0])
4181 U = M - 1;
4182 else if (strcmp (SYMBOL_LINKAGE_NAME (psym), name) < 0)
4183 i = M + 1;
4184 else
4185 U = M;
4186 }
4187 }
4188 else
4189 i = 0;
4190
4191 while (i < length)
4192 {
4193 struct partial_symbol *psym = start[i];
4194
4195 if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4196 SYMBOL_DOMAIN (psym), namespace))
4197 {
4198 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym), name_len);
4199
4200 if (cmp < 0)
4201 {
4202 if (global)
4203 break;
4204 }
4205 else if (cmp == 0
4206 && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4207 + name_len))
4208 return psym;
4209 }
4210 i += 1;
4211 }
4212
4213 if (global)
4214 {
4215 int U;
4216 i = 0;
4217 U = length - 1;
4218 while (U - i > 4)
4219 {
4220 int M = (U + i) >> 1;
4221 struct partial_symbol *psym = start[M];
4222 if (SYMBOL_LINKAGE_NAME (psym)[0] < '_')
4223 i = M + 1;
4224 else if (SYMBOL_LINKAGE_NAME (psym)[0] > '_')
4225 U = M - 1;
4226 else if (strcmp (SYMBOL_LINKAGE_NAME (psym), "_ada_") < 0)
4227 i = M + 1;
4228 else
4229 U = M;
4230 }
4231 }
4232 else
4233 i = 0;
4234
4235 while (i < length)
4236 {
4237 struct partial_symbol *psym = start[i];
4238
4239 if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4240 SYMBOL_DOMAIN (psym), namespace))
4241 {
4242 int cmp;
4243
4244 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (psym)[0];
4245 if (cmp == 0)
4246 {
4247 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (psym), 5);
4248 if (cmp == 0)
4249 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym) + 5,
4250 name_len);
4251 }
4252
4253 if (cmp < 0)
4254 {
4255 if (global)
4256 break;
4257 }
4258 else if (cmp == 0
4259 && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4260 + name_len + 5))
4261 return psym;
4262 }
4263 i += 1;
4264 }
4265 }
4266 return NULL;
4267 }
4268
4269 /* Find a symbol table containing symbol SYM or NULL if none. */
4270
4271 static struct symtab *
4272 symtab_for_sym (struct symbol *sym)
4273 {
4274 struct symtab *s;
4275 struct objfile *objfile;
4276 struct block *b;
4277 struct symbol *tmp_sym;
4278 struct dict_iterator iter;
4279 int j;
4280
4281 ALL_PRIMARY_SYMTABS (objfile, s)
4282 {
4283 switch (SYMBOL_CLASS (sym))
4284 {
4285 case LOC_CONST:
4286 case LOC_STATIC:
4287 case LOC_TYPEDEF:
4288 case LOC_REGISTER:
4289 case LOC_LABEL:
4290 case LOC_BLOCK:
4291 case LOC_CONST_BYTES:
4292 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4293 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4294 return s;
4295 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4296 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4297 return s;
4298 break;
4299 default:
4300 break;
4301 }
4302 switch (SYMBOL_CLASS (sym))
4303 {
4304 case LOC_REGISTER:
4305 case LOC_ARG:
4306 case LOC_REF_ARG:
4307 case LOC_REGPARM_ADDR:
4308 case LOC_LOCAL:
4309 case LOC_TYPEDEF:
4310 case LOC_COMPUTED:
4311 for (j = FIRST_LOCAL_BLOCK;
4312 j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
4313 {
4314 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
4315 ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4316 return s;
4317 }
4318 break;
4319 default:
4320 break;
4321 }
4322 }
4323 return NULL;
4324 }
4325
4326 /* Return a minimal symbol matching NAME according to Ada decoding
4327 rules. Returns NULL if there is no such minimal symbol. Names
4328 prefixed with "standard__" are handled specially: "standard__" is
4329 first stripped off, and only static and global symbols are searched. */
4330
4331 struct minimal_symbol *
4332 ada_lookup_simple_minsym (const char *name)
4333 {
4334 struct objfile *objfile;
4335 struct minimal_symbol *msymbol;
4336 int wild_match;
4337
4338 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4339 {
4340 name += sizeof ("standard__") - 1;
4341 wild_match = 0;
4342 }
4343 else
4344 wild_match = (strstr (name, "__") == NULL);
4345
4346 ALL_MSYMBOLS (objfile, msymbol)
4347 {
4348 if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4349 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4350 return msymbol;
4351 }
4352
4353 return NULL;
4354 }
4355
4356 /* For all subprograms that statically enclose the subprogram of the
4357 selected frame, add symbols matching identifier NAME in DOMAIN
4358 and their blocks to the list of data in OBSTACKP, as for
4359 ada_add_block_symbols (q.v.). If WILD, treat as NAME with a
4360 wildcard prefix. */
4361
4362 static void
4363 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4364 const char *name, domain_enum namespace,
4365 int wild_match)
4366 {
4367 }
4368
4369 /* True if TYPE is definitely an artificial type supplied to a symbol
4370 for which no debugging information was given in the symbol file. */
4371
4372 static int
4373 is_nondebugging_type (struct type *type)
4374 {
4375 char *name = ada_type_name (type);
4376 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4377 }
4378
4379 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4380 duplicate other symbols in the list (The only case I know of where
4381 this happens is when object files containing stabs-in-ecoff are
4382 linked with files containing ordinary ecoff debugging symbols (or no
4383 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4384 Returns the number of items in the modified list. */
4385
4386 static int
4387 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4388 {
4389 int i, j;
4390
4391 i = 0;
4392 while (i < nsyms)
4393 {
4394 int remove = 0;
4395
4396 /* If two symbols have the same name and one of them is a stub type,
4397 the get rid of the stub. */
4398
4399 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4400 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4401 {
4402 for (j = 0; j < nsyms; j++)
4403 {
4404 if (j != i
4405 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4406 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4407 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4408 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4409 remove = 1;
4410 }
4411 }
4412
4413 /* Two symbols with the same name, same class and same address
4414 should be identical. */
4415
4416 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4417 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4418 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4419 {
4420 for (j = 0; j < nsyms; j += 1)
4421 {
4422 if (i != j
4423 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4424 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4425 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4426 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4427 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4428 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4429 remove = 1;
4430 }
4431 }
4432
4433 if (remove)
4434 {
4435 for (j = i + 1; j < nsyms; j += 1)
4436 syms[j - 1] = syms[j];
4437 nsyms -= 1;
4438 }
4439
4440 i += 1;
4441 }
4442 return nsyms;
4443 }
4444
4445 /* Given a type that corresponds to a renaming entity, use the type name
4446 to extract the scope (package name or function name, fully qualified,
4447 and following the GNAT encoding convention) where this renaming has been
4448 defined. The string returned needs to be deallocated after use. */
4449
4450 static char *
4451 xget_renaming_scope (struct type *renaming_type)
4452 {
4453 /* The renaming types adhere to the following convention:
4454 <scope>__<rename>___<XR extension>.
4455 So, to extract the scope, we search for the "___XR" extension,
4456 and then backtrack until we find the first "__". */
4457
4458 const char *name = type_name_no_tag (renaming_type);
4459 char *suffix = strstr (name, "___XR");
4460 char *last;
4461 int scope_len;
4462 char *scope;
4463
4464 /* Now, backtrack a bit until we find the first "__". Start looking
4465 at suffix - 3, as the <rename> part is at least one character long. */
4466
4467 for (last = suffix - 3; last > name; last--)
4468 if (last[0] == '_' && last[1] == '_')
4469 break;
4470
4471 /* Make a copy of scope and return it. */
4472
4473 scope_len = last - name;
4474 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4475
4476 strncpy (scope, name, scope_len);
4477 scope[scope_len] = '\0';
4478
4479 return scope;
4480 }
4481
4482 /* Return nonzero if NAME corresponds to a package name. */
4483
4484 static int
4485 is_package_name (const char *name)
4486 {
4487 /* Here, We take advantage of the fact that no symbols are generated
4488 for packages, while symbols are generated for each function.
4489 So the condition for NAME represent a package becomes equivalent
4490 to NAME not existing in our list of symbols. There is only one
4491 small complication with library-level functions (see below). */
4492
4493 char *fun_name;
4494
4495 /* If it is a function that has not been defined at library level,
4496 then we should be able to look it up in the symbols. */
4497 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4498 return 0;
4499
4500 /* Library-level function names start with "_ada_". See if function
4501 "_ada_" followed by NAME can be found. */
4502
4503 /* Do a quick check that NAME does not contain "__", since library-level
4504 functions names cannot contain "__" in them. */
4505 if (strstr (name, "__") != NULL)
4506 return 0;
4507
4508 fun_name = xstrprintf ("_ada_%s", name);
4509
4510 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4511 }
4512
4513 /* Return nonzero if SYM corresponds to a renaming entity that is
4514 not visible from FUNCTION_NAME. */
4515
4516 static int
4517 old_renaming_is_invisible (const struct symbol *sym, char *function_name)
4518 {
4519 char *scope;
4520
4521 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4522 return 0;
4523
4524 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4525
4526 make_cleanup (xfree, scope);
4527
4528 /* If the rename has been defined in a package, then it is visible. */
4529 if (is_package_name (scope))
4530 return 0;
4531
4532 /* Check that the rename is in the current function scope by checking
4533 that its name starts with SCOPE. */
4534
4535 /* If the function name starts with "_ada_", it means that it is
4536 a library-level function. Strip this prefix before doing the
4537 comparison, as the encoding for the renaming does not contain
4538 this prefix. */
4539 if (strncmp (function_name, "_ada_", 5) == 0)
4540 function_name += 5;
4541
4542 return (strncmp (function_name, scope, strlen (scope)) != 0);
4543 }
4544
4545 /* Remove entries from SYMS that corresponds to a renaming entity that
4546 is not visible from the function associated with CURRENT_BLOCK or
4547 that is superfluous due to the presence of more specific renaming
4548 information. Places surviving symbols in the initial entries of
4549 SYMS and returns the number of surviving symbols.
4550
4551 Rationale:
4552 First, in cases where an object renaming is implemented as a
4553 reference variable, GNAT may produce both the actual reference
4554 variable and the renaming encoding. In this case, we discard the
4555 latter.
4556
4557 Second, GNAT emits a type following a specified encoding for each renaming
4558 entity. Unfortunately, STABS currently does not support the definition
4559 of types that are local to a given lexical block, so all renamings types
4560 are emitted at library level. As a consequence, if an application
4561 contains two renaming entities using the same name, and a user tries to
4562 print the value of one of these entities, the result of the ada symbol
4563 lookup will also contain the wrong renaming type.
4564
4565 This function partially covers for this limitation by attempting to
4566 remove from the SYMS list renaming symbols that should be visible
4567 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
4568 method with the current information available. The implementation
4569 below has a couple of limitations (FIXME: brobecker-2003-05-12):
4570
4571 - When the user tries to print a rename in a function while there
4572 is another rename entity defined in a package: Normally, the
4573 rename in the function has precedence over the rename in the
4574 package, so the latter should be removed from the list. This is
4575 currently not the case.
4576
4577 - This function will incorrectly remove valid renames if
4578 the CURRENT_BLOCK corresponds to a function which symbol name
4579 has been changed by an "Export" pragma. As a consequence,
4580 the user will be unable to print such rename entities. */
4581
4582 static int
4583 remove_irrelevant_renamings (struct ada_symbol_info *syms,
4584 int nsyms, const struct block *current_block)
4585 {
4586 struct symbol *current_function;
4587 char *current_function_name;
4588 int i;
4589 int is_new_style_renaming;
4590
4591 /* If there is both a renaming foo___XR... encoded as a variable and
4592 a simple variable foo in the same block, discard the latter.
4593 First, zero out such symbols, then compress. */
4594 is_new_style_renaming = 0;
4595 for (i = 0; i < nsyms; i += 1)
4596 {
4597 struct symbol *sym = syms[i].sym;
4598 struct block *block = syms[i].block;
4599 const char *name;
4600 const char *suffix;
4601
4602 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4603 continue;
4604 name = SYMBOL_LINKAGE_NAME (sym);
4605 suffix = strstr (name, "___XR");
4606
4607 if (suffix != NULL)
4608 {
4609 int name_len = suffix - name;
4610 int j;
4611 is_new_style_renaming = 1;
4612 for (j = 0; j < nsyms; j += 1)
4613 if (i != j && syms[j].sym != NULL
4614 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4615 name_len) == 0
4616 && block == syms[j].block)
4617 syms[j].sym = NULL;
4618 }
4619 }
4620 if (is_new_style_renaming)
4621 {
4622 int j, k;
4623
4624 for (j = k = 0; j < nsyms; j += 1)
4625 if (syms[j].sym != NULL)
4626 {
4627 syms[k] = syms[j];
4628 k += 1;
4629 }
4630 return k;
4631 }
4632
4633 /* Extract the function name associated to CURRENT_BLOCK.
4634 Abort if unable to do so. */
4635
4636 if (current_block == NULL)
4637 return nsyms;
4638
4639 current_function = block_linkage_function (current_block);
4640 if (current_function == NULL)
4641 return nsyms;
4642
4643 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4644 if (current_function_name == NULL)
4645 return nsyms;
4646
4647 /* Check each of the symbols, and remove it from the list if it is
4648 a type corresponding to a renaming that is out of the scope of
4649 the current block. */
4650
4651 i = 0;
4652 while (i < nsyms)
4653 {
4654 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4655 == ADA_OBJECT_RENAMING
4656 && old_renaming_is_invisible (syms[i].sym, current_function_name))
4657 {
4658 int j;
4659 for (j = i + 1; j < nsyms; j += 1)
4660 syms[j - 1] = syms[j];
4661 nsyms -= 1;
4662 }
4663 else
4664 i += 1;
4665 }
4666
4667 return nsyms;
4668 }
4669
4670 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
4671 whose name and domain match NAME and DOMAIN respectively.
4672 If no match was found, then extend the search to "enclosing"
4673 routines (in other words, if we're inside a nested function,
4674 search the symbols defined inside the enclosing functions).
4675
4676 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
4677
4678 static void
4679 ada_add_local_symbols (struct obstack *obstackp, const char *name,
4680 struct block *block, domain_enum domain,
4681 int wild_match)
4682 {
4683 int block_depth = 0;
4684
4685 while (block != NULL)
4686 {
4687 block_depth += 1;
4688 ada_add_block_symbols (obstackp, block, name, domain, NULL, wild_match);
4689
4690 /* If we found a non-function match, assume that's the one. */
4691 if (is_nonfunction (defns_collected (obstackp, 0),
4692 num_defns_collected (obstackp)))
4693 return;
4694
4695 block = BLOCK_SUPERBLOCK (block);
4696 }
4697
4698 /* If no luck so far, try to find NAME as a local symbol in some lexically
4699 enclosing subprogram. */
4700 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
4701 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match);
4702 }
4703
4704 /* Add to OBSTACKP all non-local symbols whose name and domain match
4705 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
4706 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
4707
4708 static void
4709 ada_add_non_local_symbols (struct obstack *obstackp, const char *name,
4710 domain_enum domain, int global,
4711 int wild_match)
4712 {
4713 struct objfile *objfile;
4714 struct partial_symtab *ps;
4715
4716 ALL_PSYMTABS (objfile, ps)
4717 {
4718 QUIT;
4719 if (ps->readin
4720 || ada_lookup_partial_symbol (ps, name, global, domain, wild_match))
4721 {
4722 struct symtab *s = PSYMTAB_TO_SYMTAB (ps);
4723 const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
4724
4725 if (s == NULL || !s->primary)
4726 continue;
4727 ada_add_block_symbols (obstackp,
4728 BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), block_kind),
4729 name, domain, objfile, wild_match);
4730 }
4731 }
4732 }
4733
4734 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4735 scope and in global scopes, returning the number of matches. Sets
4736 *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4737 indicating the symbols found and the blocks and symbol tables (if
4738 any) in which they were found. This vector are transient---good only to
4739 the next call of ada_lookup_symbol_list. Any non-function/non-enumeral
4740 symbol match within the nest of blocks whose innermost member is BLOCK0,
4741 is the one match returned (no other matches in that or
4742 enclosing blocks is returned). If there are any matches in or
4743 surrounding BLOCK0, then these alone are returned. Otherwise, the
4744 search extends to global and file-scope (static) symbol tables.
4745 Names prefixed with "standard__" are handled specially: "standard__"
4746 is first stripped off, and only static and global symbols are searched. */
4747
4748 int
4749 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4750 domain_enum namespace,
4751 struct ada_symbol_info **results)
4752 {
4753 struct symbol *sym;
4754 struct block *block;
4755 const char *name;
4756 int wild_match;
4757 int cacheIfUnique;
4758 int ndefns;
4759
4760 obstack_free (&symbol_list_obstack, NULL);
4761 obstack_init (&symbol_list_obstack);
4762
4763 cacheIfUnique = 0;
4764
4765 /* Search specified block and its superiors. */
4766
4767 wild_match = (strstr (name0, "__") == NULL);
4768 name = name0;
4769 block = (struct block *) block0; /* FIXME: No cast ought to be
4770 needed, but adding const will
4771 have a cascade effect. */
4772
4773 /* Special case: If the user specifies a symbol name inside package
4774 Standard, do a non-wild matching of the symbol name without
4775 the "standard__" prefix. This was primarily introduced in order
4776 to allow the user to specifically access the standard exceptions
4777 using, for instance, Standard.Constraint_Error when Constraint_Error
4778 is ambiguous (due to the user defining its own Constraint_Error
4779 entity inside its program). */
4780 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4781 {
4782 wild_match = 0;
4783 block = NULL;
4784 name = name0 + sizeof ("standard__") - 1;
4785 }
4786
4787 /* Check the non-global symbols. If we have ANY match, then we're done. */
4788
4789 ada_add_local_symbols (&symbol_list_obstack, name, block, namespace,
4790 wild_match);
4791 if (num_defns_collected (&symbol_list_obstack) > 0)
4792 goto done;
4793
4794 /* No non-global symbols found. Check our cache to see if we have
4795 already performed this search before. If we have, then return
4796 the same result. */
4797
4798 cacheIfUnique = 1;
4799 if (lookup_cached_symbol (name0, namespace, &sym, &block))
4800 {
4801 if (sym != NULL)
4802 add_defn_to_vec (&symbol_list_obstack, sym, block);
4803 goto done;
4804 }
4805
4806 /* Search symbols from all global blocks. */
4807
4808 ada_add_non_local_symbols (&symbol_list_obstack, name, namespace, 1,
4809 wild_match);
4810
4811 /* Now add symbols from all per-file blocks if we've gotten no hits
4812 (not strictly correct, but perhaps better than an error). */
4813
4814 if (num_defns_collected (&symbol_list_obstack) == 0)
4815 ada_add_non_local_symbols (&symbol_list_obstack, name, namespace, 0,
4816 wild_match);
4817
4818 done:
4819 ndefns = num_defns_collected (&symbol_list_obstack);
4820 *results = defns_collected (&symbol_list_obstack, 1);
4821
4822 ndefns = remove_extra_symbols (*results, ndefns);
4823
4824 if (ndefns == 0)
4825 cache_symbol (name0, namespace, NULL, NULL);
4826
4827 if (ndefns == 1 && cacheIfUnique)
4828 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
4829
4830 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
4831
4832 return ndefns;
4833 }
4834
4835 struct symbol *
4836 ada_lookup_encoded_symbol (const char *name, const struct block *block0,
4837 domain_enum namespace, struct block **block_found)
4838 {
4839 struct ada_symbol_info *candidates;
4840 int n_candidates;
4841
4842 n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
4843
4844 if (n_candidates == 0)
4845 return NULL;
4846
4847 if (block_found != NULL)
4848 *block_found = candidates[0].block;
4849
4850 return fixup_symbol_section (candidates[0].sym, NULL);
4851 }
4852
4853 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4854 scope and in global scopes, or NULL if none. NAME is folded and
4855 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
4856 choosing the first symbol if there are multiple choices.
4857 *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4858 table in which the symbol was found (in both cases, these
4859 assignments occur only if the pointers are non-null). */
4860 struct symbol *
4861 ada_lookup_symbol (const char *name, const struct block *block0,
4862 domain_enum namespace, int *is_a_field_of_this)
4863 {
4864 if (is_a_field_of_this != NULL)
4865 *is_a_field_of_this = 0;
4866
4867 return
4868 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
4869 block0, namespace, NULL);
4870 }
4871
4872 static struct symbol *
4873 ada_lookup_symbol_nonlocal (const char *name,
4874 const char *linkage_name,
4875 const struct block *block,
4876 const domain_enum domain)
4877 {
4878 if (linkage_name == NULL)
4879 linkage_name = name;
4880 return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
4881 NULL);
4882 }
4883
4884
4885 /* True iff STR is a possible encoded suffix of a normal Ada name
4886 that is to be ignored for matching purposes. Suffixes of parallel
4887 names (e.g., XVE) are not included here. Currently, the possible suffixes
4888 are given by any of the regular expressions:
4889
4890 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
4891 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
4892 _E[0-9]+[bs]$ [protected object entry suffixes]
4893 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
4894
4895 Also, any leading "__[0-9]+" sequence is skipped before the suffix
4896 match is performed. This sequence is used to differentiate homonyms,
4897 is an optional part of a valid name suffix. */
4898
4899 static int
4900 is_name_suffix (const char *str)
4901 {
4902 int k;
4903 const char *matching;
4904 const int len = strlen (str);
4905
4906 /* Skip optional leading __[0-9]+. */
4907
4908 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4909 {
4910 str += 3;
4911 while (isdigit (str[0]))
4912 str += 1;
4913 }
4914
4915 /* [.$][0-9]+ */
4916
4917 if (str[0] == '.' || str[0] == '$')
4918 {
4919 matching = str + 1;
4920 while (isdigit (matching[0]))
4921 matching += 1;
4922 if (matching[0] == '\0')
4923 return 1;
4924 }
4925
4926 /* ___[0-9]+ */
4927
4928 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4929 {
4930 matching = str + 3;
4931 while (isdigit (matching[0]))
4932 matching += 1;
4933 if (matching[0] == '\0')
4934 return 1;
4935 }
4936
4937 #if 0
4938 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
4939 with a N at the end. Unfortunately, the compiler uses the same
4940 convention for other internal types it creates. So treating
4941 all entity names that end with an "N" as a name suffix causes
4942 some regressions. For instance, consider the case of an enumerated
4943 type. To support the 'Image attribute, it creates an array whose
4944 name ends with N.
4945 Having a single character like this as a suffix carrying some
4946 information is a bit risky. Perhaps we should change the encoding
4947 to be something like "_N" instead. In the meantime, do not do
4948 the following check. */
4949 /* Protected Object Subprograms */
4950 if (len == 1 && str [0] == 'N')
4951 return 1;
4952 #endif
4953
4954 /* _E[0-9]+[bs]$ */
4955 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
4956 {
4957 matching = str + 3;
4958 while (isdigit (matching[0]))
4959 matching += 1;
4960 if ((matching[0] == 'b' || matching[0] == 's')
4961 && matching [1] == '\0')
4962 return 1;
4963 }
4964
4965 /* ??? We should not modify STR directly, as we are doing below. This
4966 is fine in this case, but may become problematic later if we find
4967 that this alternative did not work, and want to try matching
4968 another one from the begining of STR. Since we modified it, we
4969 won't be able to find the begining of the string anymore! */
4970 if (str[0] == 'X')
4971 {
4972 str += 1;
4973 while (str[0] != '_' && str[0] != '\0')
4974 {
4975 if (str[0] != 'n' && str[0] != 'b')
4976 return 0;
4977 str += 1;
4978 }
4979 }
4980
4981 if (str[0] == '\000')
4982 return 1;
4983
4984 if (str[0] == '_')
4985 {
4986 if (str[1] != '_' || str[2] == '\000')
4987 return 0;
4988 if (str[2] == '_')
4989 {
4990 if (strcmp (str + 3, "JM") == 0)
4991 return 1;
4992 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
4993 the LJM suffix in favor of the JM one. But we will
4994 still accept LJM as a valid suffix for a reasonable
4995 amount of time, just to allow ourselves to debug programs
4996 compiled using an older version of GNAT. */
4997 if (strcmp (str + 3, "LJM") == 0)
4998 return 1;
4999 if (str[3] != 'X')
5000 return 0;
5001 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5002 || str[4] == 'U' || str[4] == 'P')
5003 return 1;
5004 if (str[4] == 'R' && str[5] != 'T')
5005 return 1;
5006 return 0;
5007 }
5008 if (!isdigit (str[2]))
5009 return 0;
5010 for (k = 3; str[k] != '\0'; k += 1)
5011 if (!isdigit (str[k]) && str[k] != '_')
5012 return 0;
5013 return 1;
5014 }
5015 if (str[0] == '$' && isdigit (str[1]))
5016 {
5017 for (k = 2; str[k] != '\0'; k += 1)
5018 if (!isdigit (str[k]) && str[k] != '_')
5019 return 0;
5020 return 1;
5021 }
5022 return 0;
5023 }
5024
5025 /* Return nonzero if the given string contains only digits.
5026 The empty string also matches. */
5027
5028 static int
5029 is_digits_suffix (const char *str)
5030 {
5031 while (isdigit (str[0]))
5032 str++;
5033 return (str[0] == '\0');
5034 }
5035
5036 /* Return non-zero if the string starting at NAME and ending before
5037 NAME_END contains no capital letters. */
5038
5039 static int
5040 is_valid_name_for_wild_match (const char *name0)
5041 {
5042 const char *decoded_name = ada_decode (name0);
5043 int i;
5044
5045 /* If the decoded name starts with an angle bracket, it means that
5046 NAME0 does not follow the GNAT encoding format. It should then
5047 not be allowed as a possible wild match. */
5048 if (decoded_name[0] == '<')
5049 return 0;
5050
5051 for (i=0; decoded_name[i] != '\0'; i++)
5052 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5053 return 0;
5054
5055 return 1;
5056 }
5057
5058 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
5059 PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1. Ignores
5060 informational suffixes of NAME (i.e., for which is_name_suffix is
5061 true). */
5062
5063 static int
5064 wild_match (const char *patn0, int patn_len, const char *name0)
5065 {
5066 char* match;
5067 const char* start;
5068 start = name0;
5069 while (1)
5070 {
5071 match = strstr (start, patn0);
5072 if (match == NULL)
5073 return 0;
5074 if ((match == name0
5075 || match[-1] == '.'
5076 || (match > name0 + 1 && match[-1] == '_' && match[-2] == '_')
5077 || (match == name0 + 5 && strncmp ("_ada_", name0, 5) == 0))
5078 && is_name_suffix (match + patn_len))
5079 return (match == name0 || is_valid_name_for_wild_match (name0));
5080 start = match + 1;
5081 }
5082 }
5083
5084
5085 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5086 vector *defn_symbols, updating the list of symbols in OBSTACKP
5087 (if necessary). If WILD, treat as NAME with a wildcard prefix.
5088 OBJFILE is the section containing BLOCK.
5089 SYMTAB is recorded with each symbol added. */
5090
5091 static void
5092 ada_add_block_symbols (struct obstack *obstackp,
5093 struct block *block, const char *name,
5094 domain_enum domain, struct objfile *objfile,
5095 int wild)
5096 {
5097 struct dict_iterator iter;
5098 int name_len = strlen (name);
5099 /* A matching argument symbol, if any. */
5100 struct symbol *arg_sym;
5101 /* Set true when we find a matching non-argument symbol. */
5102 int found_sym;
5103 struct symbol *sym;
5104
5105 arg_sym = NULL;
5106 found_sym = 0;
5107 if (wild)
5108 {
5109 struct symbol *sym;
5110 ALL_BLOCK_SYMBOLS (block, iter, sym)
5111 {
5112 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5113 SYMBOL_DOMAIN (sym), domain)
5114 && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
5115 {
5116 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5117 continue;
5118 else if (SYMBOL_IS_ARGUMENT (sym))
5119 arg_sym = sym;
5120 else
5121 {
5122 found_sym = 1;
5123 add_defn_to_vec (obstackp,
5124 fixup_symbol_section (sym, objfile),
5125 block);
5126 }
5127 }
5128 }
5129 }
5130 else
5131 {
5132 ALL_BLOCK_SYMBOLS (block, iter, sym)
5133 {
5134 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5135 SYMBOL_DOMAIN (sym), domain))
5136 {
5137 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
5138 if (cmp == 0
5139 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
5140 {
5141 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5142 {
5143 if (SYMBOL_IS_ARGUMENT (sym))
5144 arg_sym = sym;
5145 else
5146 {
5147 found_sym = 1;
5148 add_defn_to_vec (obstackp,
5149 fixup_symbol_section (sym, objfile),
5150 block);
5151 }
5152 }
5153 }
5154 }
5155 }
5156 }
5157
5158 if (!found_sym && arg_sym != NULL)
5159 {
5160 add_defn_to_vec (obstackp,
5161 fixup_symbol_section (arg_sym, objfile),
5162 block);
5163 }
5164
5165 if (!wild)
5166 {
5167 arg_sym = NULL;
5168 found_sym = 0;
5169
5170 ALL_BLOCK_SYMBOLS (block, iter, sym)
5171 {
5172 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5173 SYMBOL_DOMAIN (sym), domain))
5174 {
5175 int cmp;
5176
5177 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5178 if (cmp == 0)
5179 {
5180 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5181 if (cmp == 0)
5182 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5183 name_len);
5184 }
5185
5186 if (cmp == 0
5187 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5188 {
5189 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5190 {
5191 if (SYMBOL_IS_ARGUMENT (sym))
5192 arg_sym = sym;
5193 else
5194 {
5195 found_sym = 1;
5196 add_defn_to_vec (obstackp,
5197 fixup_symbol_section (sym, objfile),
5198 block);
5199 }
5200 }
5201 }
5202 }
5203 }
5204
5205 /* NOTE: This really shouldn't be needed for _ada_ symbols.
5206 They aren't parameters, right? */
5207 if (!found_sym && arg_sym != NULL)
5208 {
5209 add_defn_to_vec (obstackp,
5210 fixup_symbol_section (arg_sym, objfile),
5211 block);
5212 }
5213 }
5214 }
5215 \f
5216
5217 /* Symbol Completion */
5218
5219 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5220 name in a form that's appropriate for the completion. The result
5221 does not need to be deallocated, but is only good until the next call.
5222
5223 TEXT_LEN is equal to the length of TEXT.
5224 Perform a wild match if WILD_MATCH is set.
5225 ENCODED should be set if TEXT represents the start of a symbol name
5226 in its encoded form. */
5227
5228 static const char *
5229 symbol_completion_match (const char *sym_name,
5230 const char *text, int text_len,
5231 int wild_match, int encoded)
5232 {
5233 char *result;
5234 const int verbatim_match = (text[0] == '<');
5235 int match = 0;
5236
5237 if (verbatim_match)
5238 {
5239 /* Strip the leading angle bracket. */
5240 text = text + 1;
5241 text_len--;
5242 }
5243
5244 /* First, test against the fully qualified name of the symbol. */
5245
5246 if (strncmp (sym_name, text, text_len) == 0)
5247 match = 1;
5248
5249 if (match && !encoded)
5250 {
5251 /* One needed check before declaring a positive match is to verify
5252 that iff we are doing a verbatim match, the decoded version
5253 of the symbol name starts with '<'. Otherwise, this symbol name
5254 is not a suitable completion. */
5255 const char *sym_name_copy = sym_name;
5256 int has_angle_bracket;
5257
5258 sym_name = ada_decode (sym_name);
5259 has_angle_bracket = (sym_name[0] == '<');
5260 match = (has_angle_bracket == verbatim_match);
5261 sym_name = sym_name_copy;
5262 }
5263
5264 if (match && !verbatim_match)
5265 {
5266 /* When doing non-verbatim match, another check that needs to
5267 be done is to verify that the potentially matching symbol name
5268 does not include capital letters, because the ada-mode would
5269 not be able to understand these symbol names without the
5270 angle bracket notation. */
5271 const char *tmp;
5272
5273 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5274 if (*tmp != '\0')
5275 match = 0;
5276 }
5277
5278 /* Second: Try wild matching... */
5279
5280 if (!match && wild_match)
5281 {
5282 /* Since we are doing wild matching, this means that TEXT
5283 may represent an unqualified symbol name. We therefore must
5284 also compare TEXT against the unqualified name of the symbol. */
5285 sym_name = ada_unqualified_name (ada_decode (sym_name));
5286
5287 if (strncmp (sym_name, text, text_len) == 0)
5288 match = 1;
5289 }
5290
5291 /* Finally: If we found a mach, prepare the result to return. */
5292
5293 if (!match)
5294 return NULL;
5295
5296 if (verbatim_match)
5297 sym_name = add_angle_brackets (sym_name);
5298
5299 if (!encoded)
5300 sym_name = ada_decode (sym_name);
5301
5302 return sym_name;
5303 }
5304
5305 typedef char *char_ptr;
5306 DEF_VEC_P (char_ptr);
5307
5308 /* A companion function to ada_make_symbol_completion_list().
5309 Check if SYM_NAME represents a symbol which name would be suitable
5310 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5311 it is appended at the end of the given string vector SV.
5312
5313 ORIG_TEXT is the string original string from the user command
5314 that needs to be completed. WORD is the entire command on which
5315 completion should be performed. These two parameters are used to
5316 determine which part of the symbol name should be added to the
5317 completion vector.
5318 if WILD_MATCH is set, then wild matching is performed.
5319 ENCODED should be set if TEXT represents a symbol name in its
5320 encoded formed (in which case the completion should also be
5321 encoded). */
5322
5323 static void
5324 symbol_completion_add (VEC(char_ptr) **sv,
5325 const char *sym_name,
5326 const char *text, int text_len,
5327 const char *orig_text, const char *word,
5328 int wild_match, int encoded)
5329 {
5330 const char *match = symbol_completion_match (sym_name, text, text_len,
5331 wild_match, encoded);
5332 char *completion;
5333
5334 if (match == NULL)
5335 return;
5336
5337 /* We found a match, so add the appropriate completion to the given
5338 string vector. */
5339
5340 if (word == orig_text)
5341 {
5342 completion = xmalloc (strlen (match) + 5);
5343 strcpy (completion, match);
5344 }
5345 else if (word > orig_text)
5346 {
5347 /* Return some portion of sym_name. */
5348 completion = xmalloc (strlen (match) + 5);
5349 strcpy (completion, match + (word - orig_text));
5350 }
5351 else
5352 {
5353 /* Return some of ORIG_TEXT plus sym_name. */
5354 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5355 strncpy (completion, word, orig_text - word);
5356 completion[orig_text - word] = '\0';
5357 strcat (completion, match);
5358 }
5359
5360 VEC_safe_push (char_ptr, *sv, completion);
5361 }
5362
5363 /* Return a list of possible symbol names completing TEXT0. The list
5364 is NULL terminated. WORD is the entire command on which completion
5365 is made. */
5366
5367 static char **
5368 ada_make_symbol_completion_list (char *text0, char *word)
5369 {
5370 char *text;
5371 int text_len;
5372 int wild_match;
5373 int encoded;
5374 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
5375 struct symbol *sym;
5376 struct symtab *s;
5377 struct partial_symtab *ps;
5378 struct minimal_symbol *msymbol;
5379 struct objfile *objfile;
5380 struct block *b, *surrounding_static_block = 0;
5381 int i;
5382 struct dict_iterator iter;
5383
5384 if (text0[0] == '<')
5385 {
5386 text = xstrdup (text0);
5387 make_cleanup (xfree, text);
5388 text_len = strlen (text);
5389 wild_match = 0;
5390 encoded = 1;
5391 }
5392 else
5393 {
5394 text = xstrdup (ada_encode (text0));
5395 make_cleanup (xfree, text);
5396 text_len = strlen (text);
5397 for (i = 0; i < text_len; i++)
5398 text[i] = tolower (text[i]);
5399
5400 encoded = (strstr (text0, "__") != NULL);
5401 /* If the name contains a ".", then the user is entering a fully
5402 qualified entity name, and the match must not be done in wild
5403 mode. Similarly, if the user wants to complete what looks like
5404 an encoded name, the match must not be done in wild mode. */
5405 wild_match = (strchr (text0, '.') == NULL && !encoded);
5406 }
5407
5408 /* First, look at the partial symtab symbols. */
5409 ALL_PSYMTABS (objfile, ps)
5410 {
5411 struct partial_symbol **psym;
5412
5413 /* If the psymtab's been read in we'll get it when we search
5414 through the blockvector. */
5415 if (ps->readin)
5416 continue;
5417
5418 for (psym = objfile->global_psymbols.list + ps->globals_offset;
5419 psym < (objfile->global_psymbols.list + ps->globals_offset
5420 + ps->n_global_syms); psym++)
5421 {
5422 QUIT;
5423 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (*psym),
5424 text, text_len, text0, word,
5425 wild_match, encoded);
5426 }
5427
5428 for (psym = objfile->static_psymbols.list + ps->statics_offset;
5429 psym < (objfile->static_psymbols.list + ps->statics_offset
5430 + ps->n_static_syms); psym++)
5431 {
5432 QUIT;
5433 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (*psym),
5434 text, text_len, text0, word,
5435 wild_match, encoded);
5436 }
5437 }
5438
5439 /* At this point scan through the misc symbol vectors and add each
5440 symbol you find to the list. Eventually we want to ignore
5441 anything that isn't a text symbol (everything else will be
5442 handled by the psymtab code above). */
5443
5444 ALL_MSYMBOLS (objfile, msymbol)
5445 {
5446 QUIT;
5447 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
5448 text, text_len, text0, word, wild_match, encoded);
5449 }
5450
5451 /* Search upwards from currently selected frame (so that we can
5452 complete on local vars. */
5453
5454 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5455 {
5456 if (!BLOCK_SUPERBLOCK (b))
5457 surrounding_static_block = b; /* For elmin of dups */
5458
5459 ALL_BLOCK_SYMBOLS (b, iter, sym)
5460 {
5461 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5462 text, text_len, text0, word,
5463 wild_match, encoded);
5464 }
5465 }
5466
5467 /* Go through the symtabs and check the externs and statics for
5468 symbols which match. */
5469
5470 ALL_SYMTABS (objfile, s)
5471 {
5472 QUIT;
5473 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5474 ALL_BLOCK_SYMBOLS (b, iter, sym)
5475 {
5476 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5477 text, text_len, text0, word,
5478 wild_match, encoded);
5479 }
5480 }
5481
5482 ALL_SYMTABS (objfile, s)
5483 {
5484 QUIT;
5485 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5486 /* Don't do this block twice. */
5487 if (b == surrounding_static_block)
5488 continue;
5489 ALL_BLOCK_SYMBOLS (b, iter, sym)
5490 {
5491 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5492 text, text_len, text0, word,
5493 wild_match, encoded);
5494 }
5495 }
5496
5497 /* Append the closing NULL entry. */
5498 VEC_safe_push (char_ptr, completions, NULL);
5499
5500 /* Make a copy of the COMPLETIONS VEC before we free it, and then
5501 return the copy. It's unfortunate that we have to make a copy
5502 of an array that we're about to destroy, but there is nothing much
5503 we can do about it. Fortunately, it's typically not a very large
5504 array. */
5505 {
5506 const size_t completions_size =
5507 VEC_length (char_ptr, completions) * sizeof (char *);
5508 char **result = malloc (completions_size);
5509
5510 memcpy (result, VEC_address (char_ptr, completions), completions_size);
5511
5512 VEC_free (char_ptr, completions);
5513 return result;
5514 }
5515 }
5516
5517 /* Field Access */
5518
5519 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
5520 for tagged types. */
5521
5522 static int
5523 ada_is_dispatch_table_ptr_type (struct type *type)
5524 {
5525 char *name;
5526
5527 if (TYPE_CODE (type) != TYPE_CODE_PTR)
5528 return 0;
5529
5530 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
5531 if (name == NULL)
5532 return 0;
5533
5534 return (strcmp (name, "ada__tags__dispatch_table") == 0);
5535 }
5536
5537 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
5538 to be invisible to users. */
5539
5540 int
5541 ada_is_ignored_field (struct type *type, int field_num)
5542 {
5543 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5544 return 1;
5545
5546 /* Check the name of that field. */
5547 {
5548 const char *name = TYPE_FIELD_NAME (type, field_num);
5549
5550 /* Anonymous field names should not be printed.
5551 brobecker/2007-02-20: I don't think this can actually happen
5552 but we don't want to print the value of annonymous fields anyway. */
5553 if (name == NULL)
5554 return 1;
5555
5556 /* A field named "_parent" is internally generated by GNAT for
5557 tagged types, and should not be printed either. */
5558 if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
5559 return 1;
5560 }
5561
5562 /* If this is the dispatch table of a tagged type, then ignore. */
5563 if (ada_is_tagged_type (type, 1)
5564 && ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)))
5565 return 1;
5566
5567 /* Not a special field, so it should not be ignored. */
5568 return 0;
5569 }
5570
5571 /* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
5572 pointer or reference type whose ultimate target has a tag field. */
5573
5574 int
5575 ada_is_tagged_type (struct type *type, int refok)
5576 {
5577 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5578 }
5579
5580 /* True iff TYPE represents the type of X'Tag */
5581
5582 int
5583 ada_is_tag_type (struct type *type)
5584 {
5585 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5586 return 0;
5587 else
5588 {
5589 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5590 return (name != NULL
5591 && strcmp (name, "ada__tags__dispatch_table") == 0);
5592 }
5593 }
5594
5595 /* The type of the tag on VAL. */
5596
5597 struct type *
5598 ada_tag_type (struct value *val)
5599 {
5600 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
5601 }
5602
5603 /* The value of the tag on VAL. */
5604
5605 struct value *
5606 ada_value_tag (struct value *val)
5607 {
5608 return ada_value_struct_elt (val, "_tag", 0);
5609 }
5610
5611 /* The value of the tag on the object of type TYPE whose contents are
5612 saved at VALADDR, if it is non-null, or is at memory address
5613 ADDRESS. */
5614
5615 static struct value *
5616 value_tag_from_contents_and_address (struct type *type,
5617 const gdb_byte *valaddr,
5618 CORE_ADDR address)
5619 {
5620 int tag_byte_offset, dummy1, dummy2;
5621 struct type *tag_type;
5622 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
5623 NULL, NULL, NULL))
5624 {
5625 const gdb_byte *valaddr1 = ((valaddr == NULL)
5626 ? NULL
5627 : valaddr + tag_byte_offset);
5628 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
5629
5630 return value_from_contents_and_address (tag_type, valaddr1, address1);
5631 }
5632 return NULL;
5633 }
5634
5635 static struct type *
5636 type_from_tag (struct value *tag)
5637 {
5638 const char *type_name = ada_tag_name (tag);
5639 if (type_name != NULL)
5640 return ada_find_any_type (ada_encode (type_name));
5641 return NULL;
5642 }
5643
5644 struct tag_args
5645 {
5646 struct value *tag;
5647 char *name;
5648 };
5649
5650
5651 static int ada_tag_name_1 (void *);
5652 static int ada_tag_name_2 (struct tag_args *);
5653
5654 /* Wrapper function used by ada_tag_name. Given a struct tag_args*
5655 value ARGS, sets ARGS->name to the tag name of ARGS->tag.
5656 The value stored in ARGS->name is valid until the next call to
5657 ada_tag_name_1. */
5658
5659 static int
5660 ada_tag_name_1 (void *args0)
5661 {
5662 struct tag_args *args = (struct tag_args *) args0;
5663 static char name[1024];
5664 char *p;
5665 struct value *val;
5666 args->name = NULL;
5667 val = ada_value_struct_elt (args->tag, "tsd", 1);
5668 if (val == NULL)
5669 return ada_tag_name_2 (args);
5670 val = ada_value_struct_elt (val, "expanded_name", 1);
5671 if (val == NULL)
5672 return 0;
5673 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5674 for (p = name; *p != '\0'; p += 1)
5675 if (isalpha (*p))
5676 *p = tolower (*p);
5677 args->name = name;
5678 return 0;
5679 }
5680
5681 /* Utility function for ada_tag_name_1 that tries the second
5682 representation for the dispatch table (in which there is no
5683 explicit 'tsd' field in the referent of the tag pointer, and instead
5684 the tsd pointer is stored just before the dispatch table. */
5685
5686 static int
5687 ada_tag_name_2 (struct tag_args *args)
5688 {
5689 struct type *info_type;
5690 static char name[1024];
5691 char *p;
5692 struct value *val, *valp;
5693
5694 args->name = NULL;
5695 info_type = ada_find_any_type ("ada__tags__type_specific_data");
5696 if (info_type == NULL)
5697 return 0;
5698 info_type = lookup_pointer_type (lookup_pointer_type (info_type));
5699 valp = value_cast (info_type, args->tag);
5700 if (valp == NULL)
5701 return 0;
5702 val = value_ind (value_ptradd (valp,
5703 value_from_longest (builtin_type_int8, -1)));
5704 if (val == NULL)
5705 return 0;
5706 val = ada_value_struct_elt (val, "expanded_name", 1);
5707 if (val == NULL)
5708 return 0;
5709 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5710 for (p = name; *p != '\0'; p += 1)
5711 if (isalpha (*p))
5712 *p = tolower (*p);
5713 args->name = name;
5714 return 0;
5715 }
5716
5717 /* The type name of the dynamic type denoted by the 'tag value TAG, as
5718 * a C string. */
5719
5720 const char *
5721 ada_tag_name (struct value *tag)
5722 {
5723 struct tag_args args;
5724 if (!ada_is_tag_type (value_type (tag)))
5725 return NULL;
5726 args.tag = tag;
5727 args.name = NULL;
5728 catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5729 return args.name;
5730 }
5731
5732 /* The parent type of TYPE, or NULL if none. */
5733
5734 struct type *
5735 ada_parent_type (struct type *type)
5736 {
5737 int i;
5738
5739 type = ada_check_typedef (type);
5740
5741 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5742 return NULL;
5743
5744 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5745 if (ada_is_parent_field (type, i))
5746 {
5747 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
5748
5749 /* If the _parent field is a pointer, then dereference it. */
5750 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
5751 parent_type = TYPE_TARGET_TYPE (parent_type);
5752 /* If there is a parallel XVS type, get the actual base type. */
5753 parent_type = ada_get_base_type (parent_type);
5754
5755 return ada_check_typedef (parent_type);
5756 }
5757
5758 return NULL;
5759 }
5760
5761 /* True iff field number FIELD_NUM of structure type TYPE contains the
5762 parent-type (inherited) fields of a derived type. Assumes TYPE is
5763 a structure type with at least FIELD_NUM+1 fields. */
5764
5765 int
5766 ada_is_parent_field (struct type *type, int field_num)
5767 {
5768 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5769 return (name != NULL
5770 && (strncmp (name, "PARENT", 6) == 0
5771 || strncmp (name, "_parent", 7) == 0));
5772 }
5773
5774 /* True iff field number FIELD_NUM of structure type TYPE is a
5775 transparent wrapper field (which should be silently traversed when doing
5776 field selection and flattened when printing). Assumes TYPE is a
5777 structure type with at least FIELD_NUM+1 fields. Such fields are always
5778 structures. */
5779
5780 int
5781 ada_is_wrapper_field (struct type *type, int field_num)
5782 {
5783 const char *name = TYPE_FIELD_NAME (type, field_num);
5784 return (name != NULL
5785 && (strncmp (name, "PARENT", 6) == 0
5786 || strcmp (name, "REP") == 0
5787 || strncmp (name, "_parent", 7) == 0
5788 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5789 }
5790
5791 /* True iff field number FIELD_NUM of structure or union type TYPE
5792 is a variant wrapper. Assumes TYPE is a structure type with at least
5793 FIELD_NUM+1 fields. */
5794
5795 int
5796 ada_is_variant_part (struct type *type, int field_num)
5797 {
5798 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5799 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5800 || (is_dynamic_field (type, field_num)
5801 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
5802 == TYPE_CODE_UNION)));
5803 }
5804
5805 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5806 whose discriminants are contained in the record type OUTER_TYPE,
5807 returns the type of the controlling discriminant for the variant. */
5808
5809 struct type *
5810 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5811 {
5812 char *name = ada_variant_discrim_name (var_type);
5813 struct type *type =
5814 ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
5815 if (type == NULL)
5816 return builtin_type_int32;
5817 else
5818 return type;
5819 }
5820
5821 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5822 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5823 represents a 'when others' clause; otherwise 0. */
5824
5825 int
5826 ada_is_others_clause (struct type *type, int field_num)
5827 {
5828 const char *name = TYPE_FIELD_NAME (type, field_num);
5829 return (name != NULL && name[0] == 'O');
5830 }
5831
5832 /* Assuming that TYPE0 is the type of the variant part of a record,
5833 returns the name of the discriminant controlling the variant.
5834 The value is valid until the next call to ada_variant_discrim_name. */
5835
5836 char *
5837 ada_variant_discrim_name (struct type *type0)
5838 {
5839 static char *result = NULL;
5840 static size_t result_len = 0;
5841 struct type *type;
5842 const char *name;
5843 const char *discrim_end;
5844 const char *discrim_start;
5845
5846 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5847 type = TYPE_TARGET_TYPE (type0);
5848 else
5849 type = type0;
5850
5851 name = ada_type_name (type);
5852
5853 if (name == NULL || name[0] == '\000')
5854 return "";
5855
5856 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5857 discrim_end -= 1)
5858 {
5859 if (strncmp (discrim_end, "___XVN", 6) == 0)
5860 break;
5861 }
5862 if (discrim_end == name)
5863 return "";
5864
5865 for (discrim_start = discrim_end; discrim_start != name + 3;
5866 discrim_start -= 1)
5867 {
5868 if (discrim_start == name + 1)
5869 return "";
5870 if ((discrim_start > name + 3
5871 && strncmp (discrim_start - 3, "___", 3) == 0)
5872 || discrim_start[-1] == '.')
5873 break;
5874 }
5875
5876 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5877 strncpy (result, discrim_start, discrim_end - discrim_start);
5878 result[discrim_end - discrim_start] = '\0';
5879 return result;
5880 }
5881
5882 /* Scan STR for a subtype-encoded number, beginning at position K.
5883 Put the position of the character just past the number scanned in
5884 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
5885 Return 1 if there was a valid number at the given position, and 0
5886 otherwise. A "subtype-encoded" number consists of the absolute value
5887 in decimal, followed by the letter 'm' to indicate a negative number.
5888 Assumes 0m does not occur. */
5889
5890 int
5891 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
5892 {
5893 ULONGEST RU;
5894
5895 if (!isdigit (str[k]))
5896 return 0;
5897
5898 /* Do it the hard way so as not to make any assumption about
5899 the relationship of unsigned long (%lu scan format code) and
5900 LONGEST. */
5901 RU = 0;
5902 while (isdigit (str[k]))
5903 {
5904 RU = RU * 10 + (str[k] - '0');
5905 k += 1;
5906 }
5907
5908 if (str[k] == 'm')
5909 {
5910 if (R != NULL)
5911 *R = (-(LONGEST) (RU - 1)) - 1;
5912 k += 1;
5913 }
5914 else if (R != NULL)
5915 *R = (LONGEST) RU;
5916
5917 /* NOTE on the above: Technically, C does not say what the results of
5918 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5919 number representable as a LONGEST (although either would probably work
5920 in most implementations). When RU>0, the locution in the then branch
5921 above is always equivalent to the negative of RU. */
5922
5923 if (new_k != NULL)
5924 *new_k = k;
5925 return 1;
5926 }
5927
5928 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5929 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5930 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
5931
5932 int
5933 ada_in_variant (LONGEST val, struct type *type, int field_num)
5934 {
5935 const char *name = TYPE_FIELD_NAME (type, field_num);
5936 int p;
5937
5938 p = 0;
5939 while (1)
5940 {
5941 switch (name[p])
5942 {
5943 case '\0':
5944 return 0;
5945 case 'S':
5946 {
5947 LONGEST W;
5948 if (!ada_scan_number (name, p + 1, &W, &p))
5949 return 0;
5950 if (val == W)
5951 return 1;
5952 break;
5953 }
5954 case 'R':
5955 {
5956 LONGEST L, U;
5957 if (!ada_scan_number (name, p + 1, &L, &p)
5958 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
5959 return 0;
5960 if (val >= L && val <= U)
5961 return 1;
5962 break;
5963 }
5964 case 'O':
5965 return 1;
5966 default:
5967 return 0;
5968 }
5969 }
5970 }
5971
5972 /* FIXME: Lots of redundancy below. Try to consolidate. */
5973
5974 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
5975 ARG_TYPE, extract and return the value of one of its (non-static)
5976 fields. FIELDNO says which field. Differs from value_primitive_field
5977 only in that it can handle packed values of arbitrary type. */
5978
5979 static struct value *
5980 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
5981 struct type *arg_type)
5982 {
5983 struct type *type;
5984
5985 arg_type = ada_check_typedef (arg_type);
5986 type = TYPE_FIELD_TYPE (arg_type, fieldno);
5987
5988 /* Handle packed fields. */
5989
5990 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5991 {
5992 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5993 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
5994
5995 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
5996 offset + bit_pos / 8,
5997 bit_pos % 8, bit_size, type);
5998 }
5999 else
6000 return value_primitive_field (arg1, offset, fieldno, arg_type);
6001 }
6002
6003 /* Find field with name NAME in object of type TYPE. If found,
6004 set the following for each argument that is non-null:
6005 - *FIELD_TYPE_P to the field's type;
6006 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6007 an object of that type;
6008 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6009 - *BIT_SIZE_P to its size in bits if the field is packed, and
6010 0 otherwise;
6011 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6012 fields up to but not including the desired field, or by the total
6013 number of fields if not found. A NULL value of NAME never
6014 matches; the function just counts visible fields in this case.
6015
6016 Returns 1 if found, 0 otherwise. */
6017
6018 static int
6019 find_struct_field (char *name, struct type *type, int offset,
6020 struct type **field_type_p,
6021 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6022 int *index_p)
6023 {
6024 int i;
6025
6026 type = ada_check_typedef (type);
6027
6028 if (field_type_p != NULL)
6029 *field_type_p = NULL;
6030 if (byte_offset_p != NULL)
6031 *byte_offset_p = 0;
6032 if (bit_offset_p != NULL)
6033 *bit_offset_p = 0;
6034 if (bit_size_p != NULL)
6035 *bit_size_p = 0;
6036
6037 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6038 {
6039 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6040 int fld_offset = offset + bit_pos / 8;
6041 char *t_field_name = TYPE_FIELD_NAME (type, i);
6042
6043 if (t_field_name == NULL)
6044 continue;
6045
6046 else if (name != NULL && field_name_match (t_field_name, name))
6047 {
6048 int bit_size = TYPE_FIELD_BITSIZE (type, i);
6049 if (field_type_p != NULL)
6050 *field_type_p = TYPE_FIELD_TYPE (type, i);
6051 if (byte_offset_p != NULL)
6052 *byte_offset_p = fld_offset;
6053 if (bit_offset_p != NULL)
6054 *bit_offset_p = bit_pos % 8;
6055 if (bit_size_p != NULL)
6056 *bit_size_p = bit_size;
6057 return 1;
6058 }
6059 else if (ada_is_wrapper_field (type, i))
6060 {
6061 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6062 field_type_p, byte_offset_p, bit_offset_p,
6063 bit_size_p, index_p))
6064 return 1;
6065 }
6066 else if (ada_is_variant_part (type, i))
6067 {
6068 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6069 fixed type?? */
6070 int j;
6071 struct type *field_type
6072 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6073
6074 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6075 {
6076 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6077 fld_offset
6078 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6079 field_type_p, byte_offset_p,
6080 bit_offset_p, bit_size_p, index_p))
6081 return 1;
6082 }
6083 }
6084 else if (index_p != NULL)
6085 *index_p += 1;
6086 }
6087 return 0;
6088 }
6089
6090 /* Number of user-visible fields in record type TYPE. */
6091
6092 static int
6093 num_visible_fields (struct type *type)
6094 {
6095 int n;
6096 n = 0;
6097 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6098 return n;
6099 }
6100
6101 /* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
6102 and search in it assuming it has (class) type TYPE.
6103 If found, return value, else return NULL.
6104
6105 Searches recursively through wrapper fields (e.g., '_parent'). */
6106
6107 static struct value *
6108 ada_search_struct_field (char *name, struct value *arg, int offset,
6109 struct type *type)
6110 {
6111 int i;
6112 type = ada_check_typedef (type);
6113
6114 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6115 {
6116 char *t_field_name = TYPE_FIELD_NAME (type, i);
6117
6118 if (t_field_name == NULL)
6119 continue;
6120
6121 else if (field_name_match (t_field_name, name))
6122 return ada_value_primitive_field (arg, offset, i, type);
6123
6124 else if (ada_is_wrapper_field (type, i))
6125 {
6126 struct value *v = /* Do not let indent join lines here. */
6127 ada_search_struct_field (name, arg,
6128 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6129 TYPE_FIELD_TYPE (type, i));
6130 if (v != NULL)
6131 return v;
6132 }
6133
6134 else if (ada_is_variant_part (type, i))
6135 {
6136 /* PNH: Do we ever get here? See find_struct_field. */
6137 int j;
6138 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6139 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
6140
6141 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6142 {
6143 struct value *v = ada_search_struct_field /* Force line break. */
6144 (name, arg,
6145 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
6146 TYPE_FIELD_TYPE (field_type, j));
6147 if (v != NULL)
6148 return v;
6149 }
6150 }
6151 }
6152 return NULL;
6153 }
6154
6155 static struct value *ada_index_struct_field_1 (int *, struct value *,
6156 int, struct type *);
6157
6158
6159 /* Return field #INDEX in ARG, where the index is that returned by
6160 * find_struct_field through its INDEX_P argument. Adjust the address
6161 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
6162 * If found, return value, else return NULL. */
6163
6164 static struct value *
6165 ada_index_struct_field (int index, struct value *arg, int offset,
6166 struct type *type)
6167 {
6168 return ada_index_struct_field_1 (&index, arg, offset, type);
6169 }
6170
6171
6172 /* Auxiliary function for ada_index_struct_field. Like
6173 * ada_index_struct_field, but takes index from *INDEX_P and modifies
6174 * *INDEX_P. */
6175
6176 static struct value *
6177 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6178 struct type *type)
6179 {
6180 int i;
6181 type = ada_check_typedef (type);
6182
6183 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6184 {
6185 if (TYPE_FIELD_NAME (type, i) == NULL)
6186 continue;
6187 else if (ada_is_wrapper_field (type, i))
6188 {
6189 struct value *v = /* Do not let indent join lines here. */
6190 ada_index_struct_field_1 (index_p, arg,
6191 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6192 TYPE_FIELD_TYPE (type, i));
6193 if (v != NULL)
6194 return v;
6195 }
6196
6197 else if (ada_is_variant_part (type, i))
6198 {
6199 /* PNH: Do we ever get here? See ada_search_struct_field,
6200 find_struct_field. */
6201 error (_("Cannot assign this kind of variant record"));
6202 }
6203 else if (*index_p == 0)
6204 return ada_value_primitive_field (arg, offset, i, type);
6205 else
6206 *index_p -= 1;
6207 }
6208 return NULL;
6209 }
6210
6211 /* Given ARG, a value of type (pointer or reference to a)*
6212 structure/union, extract the component named NAME from the ultimate
6213 target structure/union and return it as a value with its
6214 appropriate type. If ARG is a pointer or reference and the field
6215 is not packed, returns a reference to the field, otherwise the
6216 value of the field (an lvalue if ARG is an lvalue).
6217
6218 The routine searches for NAME among all members of the structure itself
6219 and (recursively) among all members of any wrapper members
6220 (e.g., '_parent').
6221
6222 If NO_ERR, then simply return NULL in case of error, rather than
6223 calling error. */
6224
6225 struct value *
6226 ada_value_struct_elt (struct value *arg, char *name, int no_err)
6227 {
6228 struct type *t, *t1;
6229 struct value *v;
6230
6231 v = NULL;
6232 t1 = t = ada_check_typedef (value_type (arg));
6233 if (TYPE_CODE (t) == TYPE_CODE_REF)
6234 {
6235 t1 = TYPE_TARGET_TYPE (t);
6236 if (t1 == NULL)
6237 goto BadValue;
6238 t1 = ada_check_typedef (t1);
6239 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6240 {
6241 arg = coerce_ref (arg);
6242 t = t1;
6243 }
6244 }
6245
6246 while (TYPE_CODE (t) == TYPE_CODE_PTR)
6247 {
6248 t1 = TYPE_TARGET_TYPE (t);
6249 if (t1 == NULL)
6250 goto BadValue;
6251 t1 = ada_check_typedef (t1);
6252 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6253 {
6254 arg = value_ind (arg);
6255 t = t1;
6256 }
6257 else
6258 break;
6259 }
6260
6261 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
6262 goto BadValue;
6263
6264 if (t1 == t)
6265 v = ada_search_struct_field (name, arg, 0, t);
6266 else
6267 {
6268 int bit_offset, bit_size, byte_offset;
6269 struct type *field_type;
6270 CORE_ADDR address;
6271
6272 if (TYPE_CODE (t) == TYPE_CODE_PTR)
6273 address = value_as_address (arg);
6274 else
6275 address = unpack_pointer (t, value_contents (arg));
6276
6277 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
6278 if (find_struct_field (name, t1, 0,
6279 &field_type, &byte_offset, &bit_offset,
6280 &bit_size, NULL))
6281 {
6282 if (bit_size != 0)
6283 {
6284 if (TYPE_CODE (t) == TYPE_CODE_REF)
6285 arg = ada_coerce_ref (arg);
6286 else
6287 arg = ada_value_ind (arg);
6288 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6289 bit_offset, bit_size,
6290 field_type);
6291 }
6292 else
6293 v = value_from_pointer (lookup_reference_type (field_type),
6294 address + byte_offset);
6295 }
6296 }
6297
6298 if (v != NULL || no_err)
6299 return v;
6300 else
6301 error (_("There is no member named %s."), name);
6302
6303 BadValue:
6304 if (no_err)
6305 return NULL;
6306 else
6307 error (_("Attempt to extract a component of a value that is not a record."));
6308 }
6309
6310 /* Given a type TYPE, look up the type of the component of type named NAME.
6311 If DISPP is non-null, add its byte displacement from the beginning of a
6312 structure (pointed to by a value) of type TYPE to *DISPP (does not
6313 work for packed fields).
6314
6315 Matches any field whose name has NAME as a prefix, possibly
6316 followed by "___".
6317
6318 TYPE can be either a struct or union. If REFOK, TYPE may also
6319 be a (pointer or reference)+ to a struct or union, and the
6320 ultimate target type will be searched.
6321
6322 Looks recursively into variant clauses and parent types.
6323
6324 If NOERR is nonzero, return NULL if NAME is not suitably defined or
6325 TYPE is not a type of the right kind. */
6326
6327 static struct type *
6328 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6329 int noerr, int *dispp)
6330 {
6331 int i;
6332
6333 if (name == NULL)
6334 goto BadName;
6335
6336 if (refok && type != NULL)
6337 while (1)
6338 {
6339 type = ada_check_typedef (type);
6340 if (TYPE_CODE (type) != TYPE_CODE_PTR
6341 && TYPE_CODE (type) != TYPE_CODE_REF)
6342 break;
6343 type = TYPE_TARGET_TYPE (type);
6344 }
6345
6346 if (type == NULL
6347 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6348 && TYPE_CODE (type) != TYPE_CODE_UNION))
6349 {
6350 if (noerr)
6351 return NULL;
6352 else
6353 {
6354 target_terminal_ours ();
6355 gdb_flush (gdb_stdout);
6356 if (type == NULL)
6357 error (_("Type (null) is not a structure or union type"));
6358 else
6359 {
6360 /* XXX: type_sprint */
6361 fprintf_unfiltered (gdb_stderr, _("Type "));
6362 type_print (type, "", gdb_stderr, -1);
6363 error (_(" is not a structure or union type"));
6364 }
6365 }
6366 }
6367
6368 type = to_static_fixed_type (type);
6369
6370 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6371 {
6372 char *t_field_name = TYPE_FIELD_NAME (type, i);
6373 struct type *t;
6374 int disp;
6375
6376 if (t_field_name == NULL)
6377 continue;
6378
6379 else if (field_name_match (t_field_name, name))
6380 {
6381 if (dispp != NULL)
6382 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
6383 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6384 }
6385
6386 else if (ada_is_wrapper_field (type, i))
6387 {
6388 disp = 0;
6389 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
6390 0, 1, &disp);
6391 if (t != NULL)
6392 {
6393 if (dispp != NULL)
6394 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6395 return t;
6396 }
6397 }
6398
6399 else if (ada_is_variant_part (type, i))
6400 {
6401 int j;
6402 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6403
6404 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6405 {
6406 /* FIXME pnh 2008/01/26: We check for a field that is
6407 NOT wrapped in a struct, since the compiler sometimes
6408 generates these for unchecked variant types. Revisit
6409 if the compiler changes this practice. */
6410 char *v_field_name = TYPE_FIELD_NAME (field_type, j);
6411 disp = 0;
6412 if (v_field_name != NULL
6413 && field_name_match (v_field_name, name))
6414 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
6415 else
6416 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
6417 name, 0, 1, &disp);
6418
6419 if (t != NULL)
6420 {
6421 if (dispp != NULL)
6422 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6423 return t;
6424 }
6425 }
6426 }
6427
6428 }
6429
6430 BadName:
6431 if (!noerr)
6432 {
6433 target_terminal_ours ();
6434 gdb_flush (gdb_stdout);
6435 if (name == NULL)
6436 {
6437 /* XXX: type_sprint */
6438 fprintf_unfiltered (gdb_stderr, _("Type "));
6439 type_print (type, "", gdb_stderr, -1);
6440 error (_(" has no component named <null>"));
6441 }
6442 else
6443 {
6444 /* XXX: type_sprint */
6445 fprintf_unfiltered (gdb_stderr, _("Type "));
6446 type_print (type, "", gdb_stderr, -1);
6447 error (_(" has no component named %s"), name);
6448 }
6449 }
6450
6451 return NULL;
6452 }
6453
6454 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6455 within a value of type OUTER_TYPE, return true iff VAR_TYPE
6456 represents an unchecked union (that is, the variant part of a
6457 record that is named in an Unchecked_Union pragma). */
6458
6459 static int
6460 is_unchecked_variant (struct type *var_type, struct type *outer_type)
6461 {
6462 char *discrim_name = ada_variant_discrim_name (var_type);
6463 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
6464 == NULL);
6465 }
6466
6467
6468 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6469 within a value of type OUTER_TYPE that is stored in GDB at
6470 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6471 numbering from 0) is applicable. Returns -1 if none are. */
6472
6473 int
6474 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
6475 const gdb_byte *outer_valaddr)
6476 {
6477 int others_clause;
6478 int i;
6479 char *discrim_name = ada_variant_discrim_name (var_type);
6480 struct value *outer;
6481 struct value *discrim;
6482 LONGEST discrim_val;
6483
6484 outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
6485 discrim = ada_value_struct_elt (outer, discrim_name, 1);
6486 if (discrim == NULL)
6487 return -1;
6488 discrim_val = value_as_long (discrim);
6489
6490 others_clause = -1;
6491 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6492 {
6493 if (ada_is_others_clause (var_type, i))
6494 others_clause = i;
6495 else if (ada_in_variant (discrim_val, var_type, i))
6496 return i;
6497 }
6498
6499 return others_clause;
6500 }
6501 \f
6502
6503
6504 /* Dynamic-Sized Records */
6505
6506 /* Strategy: The type ostensibly attached to a value with dynamic size
6507 (i.e., a size that is not statically recorded in the debugging
6508 data) does not accurately reflect the size or layout of the value.
6509 Our strategy is to convert these values to values with accurate,
6510 conventional types that are constructed on the fly. */
6511
6512 /* There is a subtle and tricky problem here. In general, we cannot
6513 determine the size of dynamic records without its data. However,
6514 the 'struct value' data structure, which GDB uses to represent
6515 quantities in the inferior process (the target), requires the size
6516 of the type at the time of its allocation in order to reserve space
6517 for GDB's internal copy of the data. That's why the
6518 'to_fixed_xxx_type' routines take (target) addresses as parameters,
6519 rather than struct value*s.
6520
6521 However, GDB's internal history variables ($1, $2, etc.) are
6522 struct value*s containing internal copies of the data that are not, in
6523 general, the same as the data at their corresponding addresses in
6524 the target. Fortunately, the types we give to these values are all
6525 conventional, fixed-size types (as per the strategy described
6526 above), so that we don't usually have to perform the
6527 'to_fixed_xxx_type' conversions to look at their values.
6528 Unfortunately, there is one exception: if one of the internal
6529 history variables is an array whose elements are unconstrained
6530 records, then we will need to create distinct fixed types for each
6531 element selected. */
6532
6533 /* The upshot of all of this is that many routines take a (type, host
6534 address, target address) triple as arguments to represent a value.
6535 The host address, if non-null, is supposed to contain an internal
6536 copy of the relevant data; otherwise, the program is to consult the
6537 target at the target address. */
6538
6539 /* Assuming that VAL0 represents a pointer value, the result of
6540 dereferencing it. Differs from value_ind in its treatment of
6541 dynamic-sized types. */
6542
6543 struct value *
6544 ada_value_ind (struct value *val0)
6545 {
6546 struct value *val = unwrap_value (value_ind (val0));
6547 return ada_to_fixed_value (val);
6548 }
6549
6550 /* The value resulting from dereferencing any "reference to"
6551 qualifiers on VAL0. */
6552
6553 static struct value *
6554 ada_coerce_ref (struct value *val0)
6555 {
6556 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
6557 {
6558 struct value *val = val0;
6559 val = coerce_ref (val);
6560 val = unwrap_value (val);
6561 return ada_to_fixed_value (val);
6562 }
6563 else
6564 return val0;
6565 }
6566
6567 /* Return OFF rounded upward if necessary to a multiple of
6568 ALIGNMENT (a power of 2). */
6569
6570 static unsigned int
6571 align_value (unsigned int off, unsigned int alignment)
6572 {
6573 return (off + alignment - 1) & ~(alignment - 1);
6574 }
6575
6576 /* Return the bit alignment required for field #F of template type TYPE. */
6577
6578 static unsigned int
6579 field_alignment (struct type *type, int f)
6580 {
6581 const char *name = TYPE_FIELD_NAME (type, f);
6582 int len;
6583 int align_offset;
6584
6585 /* The field name should never be null, unless the debugging information
6586 is somehow malformed. In this case, we assume the field does not
6587 require any alignment. */
6588 if (name == NULL)
6589 return 1;
6590
6591 len = strlen (name);
6592
6593 if (!isdigit (name[len - 1]))
6594 return 1;
6595
6596 if (isdigit (name[len - 2]))
6597 align_offset = len - 2;
6598 else
6599 align_offset = len - 1;
6600
6601 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
6602 return TARGET_CHAR_BIT;
6603
6604 return atoi (name + align_offset) * TARGET_CHAR_BIT;
6605 }
6606
6607 /* Find a symbol named NAME. Ignores ambiguity. */
6608
6609 struct symbol *
6610 ada_find_any_symbol (const char *name)
6611 {
6612 struct symbol *sym;
6613
6614 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6615 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6616 return sym;
6617
6618 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6619 return sym;
6620 }
6621
6622 /* Find a type named NAME. Ignores ambiguity. */
6623
6624 struct type *
6625 ada_find_any_type (const char *name)
6626 {
6627 struct symbol *sym = ada_find_any_symbol (name);
6628
6629 if (sym != NULL)
6630 return SYMBOL_TYPE (sym);
6631
6632 return NULL;
6633 }
6634
6635 /* Given NAME and an associated BLOCK, search all symbols for
6636 NAME suffixed with "___XR", which is the ``renaming'' symbol
6637 associated to NAME. Return this symbol if found, return
6638 NULL otherwise. */
6639
6640 struct symbol *
6641 ada_find_renaming_symbol (const char *name, struct block *block)
6642 {
6643 struct symbol *sym;
6644
6645 sym = find_old_style_renaming_symbol (name, block);
6646
6647 if (sym != NULL)
6648 return sym;
6649
6650 /* Not right yet. FIXME pnh 7/20/2007. */
6651 sym = ada_find_any_symbol (name);
6652 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
6653 return sym;
6654 else
6655 return NULL;
6656 }
6657
6658 static struct symbol *
6659 find_old_style_renaming_symbol (const char *name, struct block *block)
6660 {
6661 const struct symbol *function_sym = block_linkage_function (block);
6662 char *rename;
6663
6664 if (function_sym != NULL)
6665 {
6666 /* If the symbol is defined inside a function, NAME is not fully
6667 qualified. This means we need to prepend the function name
6668 as well as adding the ``___XR'' suffix to build the name of
6669 the associated renaming symbol. */
6670 char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
6671 /* Function names sometimes contain suffixes used
6672 for instance to qualify nested subprograms. When building
6673 the XR type name, we need to make sure that this suffix is
6674 not included. So do not include any suffix in the function
6675 name length below. */
6676 const int function_name_len = ada_name_prefix_len (function_name);
6677 const int rename_len = function_name_len + 2 /* "__" */
6678 + strlen (name) + 6 /* "___XR\0" */ ;
6679
6680 /* Strip the suffix if necessary. */
6681 function_name[function_name_len] = '\0';
6682
6683 /* Library-level functions are a special case, as GNAT adds
6684 a ``_ada_'' prefix to the function name to avoid namespace
6685 pollution. However, the renaming symbols themselves do not
6686 have this prefix, so we need to skip this prefix if present. */
6687 if (function_name_len > 5 /* "_ada_" */
6688 && strstr (function_name, "_ada_") == function_name)
6689 function_name = function_name + 5;
6690
6691 rename = (char *) alloca (rename_len * sizeof (char));
6692 sprintf (rename, "%s__%s___XR", function_name, name);
6693 }
6694 else
6695 {
6696 const int rename_len = strlen (name) + 6;
6697 rename = (char *) alloca (rename_len * sizeof (char));
6698 sprintf (rename, "%s___XR", name);
6699 }
6700
6701 return ada_find_any_symbol (rename);
6702 }
6703
6704 /* Because of GNAT encoding conventions, several GDB symbols may match a
6705 given type name. If the type denoted by TYPE0 is to be preferred to
6706 that of TYPE1 for purposes of type printing, return non-zero;
6707 otherwise return 0. */
6708
6709 int
6710 ada_prefer_type (struct type *type0, struct type *type1)
6711 {
6712 if (type1 == NULL)
6713 return 1;
6714 else if (type0 == NULL)
6715 return 0;
6716 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6717 return 1;
6718 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6719 return 0;
6720 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
6721 return 1;
6722 else if (ada_is_packed_array_type (type0))
6723 return 1;
6724 else if (ada_is_array_descriptor_type (type0)
6725 && !ada_is_array_descriptor_type (type1))
6726 return 1;
6727 else
6728 {
6729 const char *type0_name = type_name_no_tag (type0);
6730 const char *type1_name = type_name_no_tag (type1);
6731
6732 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
6733 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
6734 return 1;
6735 }
6736 return 0;
6737 }
6738
6739 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
6740 null, its TYPE_TAG_NAME. Null if TYPE is null. */
6741
6742 char *
6743 ada_type_name (struct type *type)
6744 {
6745 if (type == NULL)
6746 return NULL;
6747 else if (TYPE_NAME (type) != NULL)
6748 return TYPE_NAME (type);
6749 else
6750 return TYPE_TAG_NAME (type);
6751 }
6752
6753 /* Find a parallel type to TYPE whose name is formed by appending
6754 SUFFIX to the name of TYPE. */
6755
6756 struct type *
6757 ada_find_parallel_type (struct type *type, const char *suffix)
6758 {
6759 static char *name;
6760 static size_t name_len = 0;
6761 int len;
6762 char *typename = ada_type_name (type);
6763
6764 if (typename == NULL)
6765 return NULL;
6766
6767 len = strlen (typename);
6768
6769 GROW_VECT (name, name_len, len + strlen (suffix) + 1);
6770
6771 strcpy (name, typename);
6772 strcpy (name + len, suffix);
6773
6774 return ada_find_any_type (name);
6775 }
6776
6777
6778 /* If TYPE is a variable-size record type, return the corresponding template
6779 type describing its fields. Otherwise, return NULL. */
6780
6781 static struct type *
6782 dynamic_template_type (struct type *type)
6783 {
6784 type = ada_check_typedef (type);
6785
6786 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6787 || ada_type_name (type) == NULL)
6788 return NULL;
6789 else
6790 {
6791 int len = strlen (ada_type_name (type));
6792 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
6793 return type;
6794 else
6795 return ada_find_parallel_type (type, "___XVE");
6796 }
6797 }
6798
6799 /* Assuming that TEMPL_TYPE is a union or struct type, returns
6800 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
6801
6802 static int
6803 is_dynamic_field (struct type *templ_type, int field_num)
6804 {
6805 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
6806 return name != NULL
6807 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6808 && strstr (name, "___XVL") != NULL;
6809 }
6810
6811 /* The index of the variant field of TYPE, or -1 if TYPE does not
6812 represent a variant record type. */
6813
6814 static int
6815 variant_field_index (struct type *type)
6816 {
6817 int f;
6818
6819 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6820 return -1;
6821
6822 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
6823 {
6824 if (ada_is_variant_part (type, f))
6825 return f;
6826 }
6827 return -1;
6828 }
6829
6830 /* A record type with no fields. */
6831
6832 static struct type *
6833 empty_record (struct objfile *objfile)
6834 {
6835 struct type *type = alloc_type (objfile);
6836 TYPE_CODE (type) = TYPE_CODE_STRUCT;
6837 TYPE_NFIELDS (type) = 0;
6838 TYPE_FIELDS (type) = NULL;
6839 INIT_CPLUS_SPECIFIC (type);
6840 TYPE_NAME (type) = "<empty>";
6841 TYPE_TAG_NAME (type) = NULL;
6842 TYPE_LENGTH (type) = 0;
6843 return type;
6844 }
6845
6846 /* An ordinary record type (with fixed-length fields) that describes
6847 the value of type TYPE at VALADDR or ADDRESS (see comments at
6848 the beginning of this section) VAL according to GNAT conventions.
6849 DVAL0 should describe the (portion of a) record that contains any
6850 necessary discriminants. It should be NULL if value_type (VAL) is
6851 an outer-level type (i.e., as opposed to a branch of a variant.) A
6852 variant field (unless unchecked) is replaced by a particular branch
6853 of the variant.
6854
6855 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
6856 length are not statically known are discarded. As a consequence,
6857 VALADDR, ADDRESS and DVAL0 are ignored.
6858
6859 NOTE: Limitations: For now, we assume that dynamic fields and
6860 variants occupy whole numbers of bytes. However, they need not be
6861 byte-aligned. */
6862
6863 struct type *
6864 ada_template_to_fixed_record_type_1 (struct type *type,
6865 const gdb_byte *valaddr,
6866 CORE_ADDR address, struct value *dval0,
6867 int keep_dynamic_fields)
6868 {
6869 struct value *mark = value_mark ();
6870 struct value *dval;
6871 struct type *rtype;
6872 int nfields, bit_len;
6873 int variant_field;
6874 long off;
6875 int fld_bit_len, bit_incr;
6876 int f;
6877
6878 /* Compute the number of fields in this record type that are going
6879 to be processed: unless keep_dynamic_fields, this includes only
6880 fields whose position and length are static will be processed. */
6881 if (keep_dynamic_fields)
6882 nfields = TYPE_NFIELDS (type);
6883 else
6884 {
6885 nfields = 0;
6886 while (nfields < TYPE_NFIELDS (type)
6887 && !ada_is_variant_part (type, nfields)
6888 && !is_dynamic_field (type, nfields))
6889 nfields++;
6890 }
6891
6892 rtype = alloc_type (TYPE_OBJFILE (type));
6893 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6894 INIT_CPLUS_SPECIFIC (rtype);
6895 TYPE_NFIELDS (rtype) = nfields;
6896 TYPE_FIELDS (rtype) = (struct field *)
6897 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6898 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6899 TYPE_NAME (rtype) = ada_type_name (type);
6900 TYPE_TAG_NAME (rtype) = NULL;
6901 TYPE_FIXED_INSTANCE (rtype) = 1;
6902
6903 off = 0;
6904 bit_len = 0;
6905 variant_field = -1;
6906
6907 for (f = 0; f < nfields; f += 1)
6908 {
6909 off = align_value (off, field_alignment (type, f))
6910 + TYPE_FIELD_BITPOS (type, f);
6911 TYPE_FIELD_BITPOS (rtype, f) = off;
6912 TYPE_FIELD_BITSIZE (rtype, f) = 0;
6913
6914 if (ada_is_variant_part (type, f))
6915 {
6916 variant_field = f;
6917 fld_bit_len = bit_incr = 0;
6918 }
6919 else if (is_dynamic_field (type, f))
6920 {
6921 if (dval0 == NULL)
6922 dval = value_from_contents_and_address (rtype, valaddr, address);
6923 else
6924 dval = dval0;
6925
6926 /* Get the fixed type of the field. Note that, in this case, we
6927 do not want to get the real type out of the tag: if the current
6928 field is the parent part of a tagged record, we will get the
6929 tag of the object. Clearly wrong: the real type of the parent
6930 is not the real type of the child. We would end up in an infinite
6931 loop. */
6932 TYPE_FIELD_TYPE (rtype, f) =
6933 ada_to_fixed_type
6934 (ada_get_base_type
6935 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
6936 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6937 cond_offset_target (address, off / TARGET_CHAR_BIT), dval, 0);
6938 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6939 bit_incr = fld_bit_len =
6940 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6941 }
6942 else
6943 {
6944 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
6945 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6946 if (TYPE_FIELD_BITSIZE (type, f) > 0)
6947 bit_incr = fld_bit_len =
6948 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6949 else
6950 bit_incr = fld_bit_len =
6951 TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
6952 }
6953 if (off + fld_bit_len > bit_len)
6954 bit_len = off + fld_bit_len;
6955 off += bit_incr;
6956 TYPE_LENGTH (rtype) =
6957 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6958 }
6959
6960 /* We handle the variant part, if any, at the end because of certain
6961 odd cases in which it is re-ordered so as NOT to be the last field of
6962 the record. This can happen in the presence of representation
6963 clauses. */
6964 if (variant_field >= 0)
6965 {
6966 struct type *branch_type;
6967
6968 off = TYPE_FIELD_BITPOS (rtype, variant_field);
6969
6970 if (dval0 == NULL)
6971 dval = value_from_contents_and_address (rtype, valaddr, address);
6972 else
6973 dval = dval0;
6974
6975 branch_type =
6976 to_fixed_variant_branch_type
6977 (TYPE_FIELD_TYPE (type, variant_field),
6978 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6979 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6980 if (branch_type == NULL)
6981 {
6982 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
6983 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
6984 TYPE_NFIELDS (rtype) -= 1;
6985 }
6986 else
6987 {
6988 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
6989 TYPE_FIELD_NAME (rtype, variant_field) = "S";
6990 fld_bit_len =
6991 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
6992 TARGET_CHAR_BIT;
6993 if (off + fld_bit_len > bit_len)
6994 bit_len = off + fld_bit_len;
6995 TYPE_LENGTH (rtype) =
6996 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6997 }
6998 }
6999
7000 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7001 should contain the alignment of that record, which should be a strictly
7002 positive value. If null or negative, then something is wrong, most
7003 probably in the debug info. In that case, we don't round up the size
7004 of the resulting type. If this record is not part of another structure,
7005 the current RTYPE length might be good enough for our purposes. */
7006 if (TYPE_LENGTH (type) <= 0)
7007 {
7008 if (TYPE_NAME (rtype))
7009 warning (_("Invalid type size for `%s' detected: %d."),
7010 TYPE_NAME (rtype), TYPE_LENGTH (type));
7011 else
7012 warning (_("Invalid type size for <unnamed> detected: %d."),
7013 TYPE_LENGTH (type));
7014 }
7015 else
7016 {
7017 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
7018 TYPE_LENGTH (type));
7019 }
7020
7021 value_free_to_mark (mark);
7022 if (TYPE_LENGTH (rtype) > varsize_limit)
7023 error (_("record type with dynamic size is larger than varsize-limit"));
7024 return rtype;
7025 }
7026
7027 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7028 of 1. */
7029
7030 static struct type *
7031 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
7032 CORE_ADDR address, struct value *dval0)
7033 {
7034 return ada_template_to_fixed_record_type_1 (type, valaddr,
7035 address, dval0, 1);
7036 }
7037
7038 /* An ordinary record type in which ___XVL-convention fields and
7039 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7040 static approximations, containing all possible fields. Uses
7041 no runtime values. Useless for use in values, but that's OK,
7042 since the results are used only for type determinations. Works on both
7043 structs and unions. Representation note: to save space, we memorize
7044 the result of this function in the TYPE_TARGET_TYPE of the
7045 template type. */
7046
7047 static struct type *
7048 template_to_static_fixed_type (struct type *type0)
7049 {
7050 struct type *type;
7051 int nfields;
7052 int f;
7053
7054 if (TYPE_TARGET_TYPE (type0) != NULL)
7055 return TYPE_TARGET_TYPE (type0);
7056
7057 nfields = TYPE_NFIELDS (type0);
7058 type = type0;
7059
7060 for (f = 0; f < nfields; f += 1)
7061 {
7062 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
7063 struct type *new_type;
7064
7065 if (is_dynamic_field (type0, f))
7066 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
7067 else
7068 new_type = static_unwrap_type (field_type);
7069 if (type == type0 && new_type != field_type)
7070 {
7071 TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
7072 TYPE_CODE (type) = TYPE_CODE (type0);
7073 INIT_CPLUS_SPECIFIC (type);
7074 TYPE_NFIELDS (type) = nfields;
7075 TYPE_FIELDS (type) = (struct field *)
7076 TYPE_ALLOC (type, nfields * sizeof (struct field));
7077 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7078 sizeof (struct field) * nfields);
7079 TYPE_NAME (type) = ada_type_name (type0);
7080 TYPE_TAG_NAME (type) = NULL;
7081 TYPE_FIXED_INSTANCE (type) = 1;
7082 TYPE_LENGTH (type) = 0;
7083 }
7084 TYPE_FIELD_TYPE (type, f) = new_type;
7085 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
7086 }
7087 return type;
7088 }
7089
7090 /* Given an object of type TYPE whose contents are at VALADDR and
7091 whose address in memory is ADDRESS, returns a revision of TYPE,
7092 which should be a non-dynamic-sized record, in which the variant
7093 part, if any, is replaced with the appropriate branch. Looks
7094 for discriminant values in DVAL0, which can be NULL if the record
7095 contains the necessary discriminant values. */
7096
7097 static struct type *
7098 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
7099 CORE_ADDR address, struct value *dval0)
7100 {
7101 struct value *mark = value_mark ();
7102 struct value *dval;
7103 struct type *rtype;
7104 struct type *branch_type;
7105 int nfields = TYPE_NFIELDS (type);
7106 int variant_field = variant_field_index (type);
7107
7108 if (variant_field == -1)
7109 return type;
7110
7111 if (dval0 == NULL)
7112 dval = value_from_contents_and_address (type, valaddr, address);
7113 else
7114 dval = dval0;
7115
7116 rtype = alloc_type (TYPE_OBJFILE (type));
7117 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7118 INIT_CPLUS_SPECIFIC (rtype);
7119 TYPE_NFIELDS (rtype) = nfields;
7120 TYPE_FIELDS (rtype) =
7121 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7122 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
7123 sizeof (struct field) * nfields);
7124 TYPE_NAME (rtype) = ada_type_name (type);
7125 TYPE_TAG_NAME (rtype) = NULL;
7126 TYPE_FIXED_INSTANCE (rtype) = 1;
7127 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7128
7129 branch_type = to_fixed_variant_branch_type
7130 (TYPE_FIELD_TYPE (type, variant_field),
7131 cond_offset_host (valaddr,
7132 TYPE_FIELD_BITPOS (type, variant_field)
7133 / TARGET_CHAR_BIT),
7134 cond_offset_target (address,
7135 TYPE_FIELD_BITPOS (type, variant_field)
7136 / TARGET_CHAR_BIT), dval);
7137 if (branch_type == NULL)
7138 {
7139 int f;
7140 for (f = variant_field + 1; f < nfields; f += 1)
7141 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7142 TYPE_NFIELDS (rtype) -= 1;
7143 }
7144 else
7145 {
7146 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7147 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7148 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
7149 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
7150 }
7151 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7152
7153 value_free_to_mark (mark);
7154 return rtype;
7155 }
7156
7157 /* An ordinary record type (with fixed-length fields) that describes
7158 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7159 beginning of this section]. Any necessary discriminants' values
7160 should be in DVAL, a record value; it may be NULL if the object
7161 at ADDR itself contains any necessary discriminant values.
7162 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7163 values from the record are needed. Except in the case that DVAL,
7164 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7165 unchecked) is replaced by a particular branch of the variant.
7166
7167 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7168 is questionable and may be removed. It can arise during the
7169 processing of an unconstrained-array-of-record type where all the
7170 variant branches have exactly the same size. This is because in
7171 such cases, the compiler does not bother to use the XVS convention
7172 when encoding the record. I am currently dubious of this
7173 shortcut and suspect the compiler should be altered. FIXME. */
7174
7175 static struct type *
7176 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
7177 CORE_ADDR address, struct value *dval)
7178 {
7179 struct type *templ_type;
7180
7181 if (TYPE_FIXED_INSTANCE (type0))
7182 return type0;
7183
7184 templ_type = dynamic_template_type (type0);
7185
7186 if (templ_type != NULL)
7187 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
7188 else if (variant_field_index (type0) >= 0)
7189 {
7190 if (dval == NULL && valaddr == NULL && address == 0)
7191 return type0;
7192 return to_record_with_fixed_variant_part (type0, valaddr, address,
7193 dval);
7194 }
7195 else
7196 {
7197 TYPE_FIXED_INSTANCE (type0) = 1;
7198 return type0;
7199 }
7200
7201 }
7202
7203 /* An ordinary record type (with fixed-length fields) that describes
7204 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7205 union type. Any necessary discriminants' values should be in DVAL,
7206 a record value. That is, this routine selects the appropriate
7207 branch of the union at ADDR according to the discriminant value
7208 indicated in the union's type name. Returns VAR_TYPE0 itself if
7209 it represents a variant subject to a pragma Unchecked_Union. */
7210
7211 static struct type *
7212 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
7213 CORE_ADDR address, struct value *dval)
7214 {
7215 int which;
7216 struct type *templ_type;
7217 struct type *var_type;
7218
7219 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7220 var_type = TYPE_TARGET_TYPE (var_type0);
7221 else
7222 var_type = var_type0;
7223
7224 templ_type = ada_find_parallel_type (var_type, "___XVU");
7225
7226 if (templ_type != NULL)
7227 var_type = templ_type;
7228
7229 if (is_unchecked_variant (var_type, value_type (dval)))
7230 return var_type0;
7231 which =
7232 ada_which_variant_applies (var_type,
7233 value_type (dval), value_contents (dval));
7234
7235 if (which < 0)
7236 return empty_record (TYPE_OBJFILE (var_type));
7237 else if (is_dynamic_field (var_type, which))
7238 return to_fixed_record_type
7239 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7240 valaddr, address, dval);
7241 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
7242 return
7243 to_fixed_record_type
7244 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
7245 else
7246 return TYPE_FIELD_TYPE (var_type, which);
7247 }
7248
7249 /* Assuming that TYPE0 is an array type describing the type of a value
7250 at ADDR, and that DVAL describes a record containing any
7251 discriminants used in TYPE0, returns a type for the value that
7252 contains no dynamic components (that is, no components whose sizes
7253 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
7254 true, gives an error message if the resulting type's size is over
7255 varsize_limit. */
7256
7257 static struct type *
7258 to_fixed_array_type (struct type *type0, struct value *dval,
7259 int ignore_too_big)
7260 {
7261 struct type *index_type_desc;
7262 struct type *result;
7263
7264 if (ada_is_packed_array_type (type0) /* revisit? */
7265 || TYPE_FIXED_INSTANCE (type0))
7266 return type0;
7267
7268 index_type_desc = ada_find_parallel_type (type0, "___XA");
7269 if (index_type_desc == NULL)
7270 {
7271 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
7272 /* NOTE: elt_type---the fixed version of elt_type0---should never
7273 depend on the contents of the array in properly constructed
7274 debugging data. */
7275 /* Create a fixed version of the array element type.
7276 We're not providing the address of an element here,
7277 and thus the actual object value cannot be inspected to do
7278 the conversion. This should not be a problem, since arrays of
7279 unconstrained objects are not allowed. In particular, all
7280 the elements of an array of a tagged type should all be of
7281 the same type specified in the debugging info. No need to
7282 consult the object tag. */
7283 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
7284
7285 if (elt_type0 == elt_type)
7286 result = type0;
7287 else
7288 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
7289 elt_type, TYPE_INDEX_TYPE (type0));
7290 }
7291 else
7292 {
7293 int i;
7294 struct type *elt_type0;
7295
7296 elt_type0 = type0;
7297 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
7298 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
7299
7300 /* NOTE: result---the fixed version of elt_type0---should never
7301 depend on the contents of the array in properly constructed
7302 debugging data. */
7303 /* Create a fixed version of the array element type.
7304 We're not providing the address of an element here,
7305 and thus the actual object value cannot be inspected to do
7306 the conversion. This should not be a problem, since arrays of
7307 unconstrained objects are not allowed. In particular, all
7308 the elements of an array of a tagged type should all be of
7309 the same type specified in the debugging info. No need to
7310 consult the object tag. */
7311 result =
7312 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
7313 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
7314 {
7315 struct type *range_type =
7316 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
7317 dval, TYPE_OBJFILE (type0));
7318 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
7319 result, range_type);
7320 }
7321 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
7322 error (_("array type with dynamic size is larger than varsize-limit"));
7323 }
7324
7325 TYPE_FIXED_INSTANCE (result) = 1;
7326 return result;
7327 }
7328
7329
7330 /* A standard type (containing no dynamically sized components)
7331 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
7332 DVAL describes a record containing any discriminants used in TYPE0,
7333 and may be NULL if there are none, or if the object of type TYPE at
7334 ADDRESS or in VALADDR contains these discriminants.
7335
7336 If CHECK_TAG is not null, in the case of tagged types, this function
7337 attempts to locate the object's tag and use it to compute the actual
7338 type. However, when ADDRESS is null, we cannot use it to determine the
7339 location of the tag, and therefore compute the tagged type's actual type.
7340 So we return the tagged type without consulting the tag. */
7341
7342 static struct type *
7343 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
7344 CORE_ADDR address, struct value *dval, int check_tag)
7345 {
7346 type = ada_check_typedef (type);
7347 switch (TYPE_CODE (type))
7348 {
7349 default:
7350 return type;
7351 case TYPE_CODE_STRUCT:
7352 {
7353 struct type *static_type = to_static_fixed_type (type);
7354 struct type *fixed_record_type =
7355 to_fixed_record_type (type, valaddr, address, NULL);
7356 /* If STATIC_TYPE is a tagged type and we know the object's address,
7357 then we can determine its tag, and compute the object's actual
7358 type from there. Note that we have to use the fixed record
7359 type (the parent part of the record may have dynamic fields
7360 and the way the location of _tag is expressed may depend on
7361 them). */
7362
7363 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
7364 {
7365 struct type *real_type =
7366 type_from_tag (value_tag_from_contents_and_address
7367 (fixed_record_type,
7368 valaddr,
7369 address));
7370 if (real_type != NULL)
7371 return to_fixed_record_type (real_type, valaddr, address, NULL);
7372 }
7373 return fixed_record_type;
7374 }
7375 case TYPE_CODE_ARRAY:
7376 return to_fixed_array_type (type, dval, 1);
7377 case TYPE_CODE_UNION:
7378 if (dval == NULL)
7379 return type;
7380 else
7381 return to_fixed_variant_branch_type (type, valaddr, address, dval);
7382 }
7383 }
7384
7385 /* The same as ada_to_fixed_type_1, except that it preserves the type
7386 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
7387 ada_to_fixed_type_1 would return the type referenced by TYPE. */
7388
7389 struct type *
7390 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
7391 CORE_ADDR address, struct value *dval, int check_tag)
7392
7393 {
7394 struct type *fixed_type =
7395 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
7396
7397 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
7398 && TYPE_TARGET_TYPE (type) == fixed_type)
7399 return type;
7400
7401 return fixed_type;
7402 }
7403
7404 /* A standard (static-sized) type corresponding as well as possible to
7405 TYPE0, but based on no runtime data. */
7406
7407 static struct type *
7408 to_static_fixed_type (struct type *type0)
7409 {
7410 struct type *type;
7411
7412 if (type0 == NULL)
7413 return NULL;
7414
7415 if (TYPE_FIXED_INSTANCE (type0))
7416 return type0;
7417
7418 type0 = ada_check_typedef (type0);
7419
7420 switch (TYPE_CODE (type0))
7421 {
7422 default:
7423 return type0;
7424 case TYPE_CODE_STRUCT:
7425 type = dynamic_template_type (type0);
7426 if (type != NULL)
7427 return template_to_static_fixed_type (type);
7428 else
7429 return template_to_static_fixed_type (type0);
7430 case TYPE_CODE_UNION:
7431 type = ada_find_parallel_type (type0, "___XVU");
7432 if (type != NULL)
7433 return template_to_static_fixed_type (type);
7434 else
7435 return template_to_static_fixed_type (type0);
7436 }
7437 }
7438
7439 /* A static approximation of TYPE with all type wrappers removed. */
7440
7441 static struct type *
7442 static_unwrap_type (struct type *type)
7443 {
7444 if (ada_is_aligner_type (type))
7445 {
7446 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
7447 if (ada_type_name (type1) == NULL)
7448 TYPE_NAME (type1) = ada_type_name (type);
7449
7450 return static_unwrap_type (type1);
7451 }
7452 else
7453 {
7454 struct type *raw_real_type = ada_get_base_type (type);
7455 if (raw_real_type == type)
7456 return type;
7457 else
7458 return to_static_fixed_type (raw_real_type);
7459 }
7460 }
7461
7462 /* In some cases, incomplete and private types require
7463 cross-references that are not resolved as records (for example,
7464 type Foo;
7465 type FooP is access Foo;
7466 V: FooP;
7467 type Foo is array ...;
7468 ). In these cases, since there is no mechanism for producing
7469 cross-references to such types, we instead substitute for FooP a
7470 stub enumeration type that is nowhere resolved, and whose tag is
7471 the name of the actual type. Call these types "non-record stubs". */
7472
7473 /* A type equivalent to TYPE that is not a non-record stub, if one
7474 exists, otherwise TYPE. */
7475
7476 struct type *
7477 ada_check_typedef (struct type *type)
7478 {
7479 if (type == NULL)
7480 return NULL;
7481
7482 CHECK_TYPEDEF (type);
7483 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
7484 || !TYPE_STUB (type)
7485 || TYPE_TAG_NAME (type) == NULL)
7486 return type;
7487 else
7488 {
7489 char *name = TYPE_TAG_NAME (type);
7490 struct type *type1 = ada_find_any_type (name);
7491 return (type1 == NULL) ? type : type1;
7492 }
7493 }
7494
7495 /* A value representing the data at VALADDR/ADDRESS as described by
7496 type TYPE0, but with a standard (static-sized) type that correctly
7497 describes it. If VAL0 is not NULL and TYPE0 already is a standard
7498 type, then return VAL0 [this feature is simply to avoid redundant
7499 creation of struct values]. */
7500
7501 static struct value *
7502 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
7503 struct value *val0)
7504 {
7505 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
7506 if (type == type0 && val0 != NULL)
7507 return val0;
7508 else
7509 return value_from_contents_and_address (type, 0, address);
7510 }
7511
7512 /* A value representing VAL, but with a standard (static-sized) type
7513 that correctly describes it. Does not necessarily create a new
7514 value. */
7515
7516 static struct value *
7517 ada_to_fixed_value (struct value *val)
7518 {
7519 return ada_to_fixed_value_create (value_type (val),
7520 VALUE_ADDRESS (val) + value_offset (val),
7521 val);
7522 }
7523
7524 /* A value representing VAL, but with a standard (static-sized) type
7525 chosen to approximate the real type of VAL as well as possible, but
7526 without consulting any runtime values. For Ada dynamic-sized
7527 types, therefore, the type of the result is likely to be inaccurate. */
7528
7529 struct value *
7530 ada_to_static_fixed_value (struct value *val)
7531 {
7532 struct type *type =
7533 to_static_fixed_type (static_unwrap_type (value_type (val)));
7534 if (type == value_type (val))
7535 return val;
7536 else
7537 return coerce_unspec_val_to_type (val, type);
7538 }
7539 \f
7540
7541 /* Attributes */
7542
7543 /* Table mapping attribute numbers to names.
7544 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
7545
7546 static const char *attribute_names[] = {
7547 "<?>",
7548
7549 "first",
7550 "last",
7551 "length",
7552 "image",
7553 "max",
7554 "min",
7555 "modulus",
7556 "pos",
7557 "size",
7558 "tag",
7559 "val",
7560 0
7561 };
7562
7563 const char *
7564 ada_attribute_name (enum exp_opcode n)
7565 {
7566 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
7567 return attribute_names[n - OP_ATR_FIRST + 1];
7568 else
7569 return attribute_names[0];
7570 }
7571
7572 /* Evaluate the 'POS attribute applied to ARG. */
7573
7574 static LONGEST
7575 pos_atr (struct value *arg)
7576 {
7577 struct value *val = coerce_ref (arg);
7578 struct type *type = value_type (val);
7579
7580 if (!discrete_type_p (type))
7581 error (_("'POS only defined on discrete types"));
7582
7583 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7584 {
7585 int i;
7586 LONGEST v = value_as_long (val);
7587
7588 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7589 {
7590 if (v == TYPE_FIELD_BITPOS (type, i))
7591 return i;
7592 }
7593 error (_("enumeration value is invalid: can't find 'POS"));
7594 }
7595 else
7596 return value_as_long (val);
7597 }
7598
7599 static struct value *
7600 value_pos_atr (struct type *type, struct value *arg)
7601 {
7602 return value_from_longest (type, pos_atr (arg));
7603 }
7604
7605 /* Evaluate the TYPE'VAL attribute applied to ARG. */
7606
7607 static struct value *
7608 value_val_atr (struct type *type, struct value *arg)
7609 {
7610 if (!discrete_type_p (type))
7611 error (_("'VAL only defined on discrete types"));
7612 if (!integer_type_p (value_type (arg)))
7613 error (_("'VAL requires integral argument"));
7614
7615 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7616 {
7617 long pos = value_as_long (arg);
7618 if (pos < 0 || pos >= TYPE_NFIELDS (type))
7619 error (_("argument to 'VAL out of range"));
7620 return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
7621 }
7622 else
7623 return value_from_longest (type, value_as_long (arg));
7624 }
7625 \f
7626
7627 /* Evaluation */
7628
7629 /* True if TYPE appears to be an Ada character type.
7630 [At the moment, this is true only for Character and Wide_Character;
7631 It is a heuristic test that could stand improvement]. */
7632
7633 int
7634 ada_is_character_type (struct type *type)
7635 {
7636 const char *name;
7637
7638 /* If the type code says it's a character, then assume it really is,
7639 and don't check any further. */
7640 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
7641 return 1;
7642
7643 /* Otherwise, assume it's a character type iff it is a discrete type
7644 with a known character type name. */
7645 name = ada_type_name (type);
7646 return (name != NULL
7647 && (TYPE_CODE (type) == TYPE_CODE_INT
7648 || TYPE_CODE (type) == TYPE_CODE_RANGE)
7649 && (strcmp (name, "character") == 0
7650 || strcmp (name, "wide_character") == 0
7651 || strcmp (name, "wide_wide_character") == 0
7652 || strcmp (name, "unsigned char") == 0));
7653 }
7654
7655 /* True if TYPE appears to be an Ada string type. */
7656
7657 int
7658 ada_is_string_type (struct type *type)
7659 {
7660 type = ada_check_typedef (type);
7661 if (type != NULL
7662 && TYPE_CODE (type) != TYPE_CODE_PTR
7663 && (ada_is_simple_array_type (type)
7664 || ada_is_array_descriptor_type (type))
7665 && ada_array_arity (type) == 1)
7666 {
7667 struct type *elttype = ada_array_element_type (type, 1);
7668
7669 return ada_is_character_type (elttype);
7670 }
7671 else
7672 return 0;
7673 }
7674
7675
7676 /* True if TYPE is a struct type introduced by the compiler to force the
7677 alignment of a value. Such types have a single field with a
7678 distinctive name. */
7679
7680 int
7681 ada_is_aligner_type (struct type *type)
7682 {
7683 type = ada_check_typedef (type);
7684
7685 /* If we can find a parallel XVS type, then the XVS type should
7686 be used instead of this type. And hence, this is not an aligner
7687 type. */
7688 if (ada_find_parallel_type (type, "___XVS") != NULL)
7689 return 0;
7690
7691 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
7692 && TYPE_NFIELDS (type) == 1
7693 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
7694 }
7695
7696 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
7697 the parallel type. */
7698
7699 struct type *
7700 ada_get_base_type (struct type *raw_type)
7701 {
7702 struct type *real_type_namer;
7703 struct type *raw_real_type;
7704
7705 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
7706 return raw_type;
7707
7708 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
7709 if (real_type_namer == NULL
7710 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
7711 || TYPE_NFIELDS (real_type_namer) != 1)
7712 return raw_type;
7713
7714 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
7715 if (raw_real_type == NULL)
7716 return raw_type;
7717 else
7718 return raw_real_type;
7719 }
7720
7721 /* The type of value designated by TYPE, with all aligners removed. */
7722
7723 struct type *
7724 ada_aligned_type (struct type *type)
7725 {
7726 if (ada_is_aligner_type (type))
7727 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
7728 else
7729 return ada_get_base_type (type);
7730 }
7731
7732
7733 /* The address of the aligned value in an object at address VALADDR
7734 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
7735
7736 const gdb_byte *
7737 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
7738 {
7739 if (ada_is_aligner_type (type))
7740 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
7741 valaddr +
7742 TYPE_FIELD_BITPOS (type,
7743 0) / TARGET_CHAR_BIT);
7744 else
7745 return valaddr;
7746 }
7747
7748
7749
7750 /* The printed representation of an enumeration literal with encoded
7751 name NAME. The value is good to the next call of ada_enum_name. */
7752 const char *
7753 ada_enum_name (const char *name)
7754 {
7755 static char *result;
7756 static size_t result_len = 0;
7757 char *tmp;
7758
7759 /* First, unqualify the enumeration name:
7760 1. Search for the last '.' character. If we find one, then skip
7761 all the preceeding characters, the unqualified name starts
7762 right after that dot.
7763 2. Otherwise, we may be debugging on a target where the compiler
7764 translates dots into "__". Search forward for double underscores,
7765 but stop searching when we hit an overloading suffix, which is
7766 of the form "__" followed by digits. */
7767
7768 tmp = strrchr (name, '.');
7769 if (tmp != NULL)
7770 name = tmp + 1;
7771 else
7772 {
7773 while ((tmp = strstr (name, "__")) != NULL)
7774 {
7775 if (isdigit (tmp[2]))
7776 break;
7777 else
7778 name = tmp + 2;
7779 }
7780 }
7781
7782 if (name[0] == 'Q')
7783 {
7784 int v;
7785 if (name[1] == 'U' || name[1] == 'W')
7786 {
7787 if (sscanf (name + 2, "%x", &v) != 1)
7788 return name;
7789 }
7790 else
7791 return name;
7792
7793 GROW_VECT (result, result_len, 16);
7794 if (isascii (v) && isprint (v))
7795 sprintf (result, "'%c'", v);
7796 else if (name[1] == 'U')
7797 sprintf (result, "[\"%02x\"]", v);
7798 else
7799 sprintf (result, "[\"%04x\"]", v);
7800
7801 return result;
7802 }
7803 else
7804 {
7805 tmp = strstr (name, "__");
7806 if (tmp == NULL)
7807 tmp = strstr (name, "$");
7808 if (tmp != NULL)
7809 {
7810 GROW_VECT (result, result_len, tmp - name + 1);
7811 strncpy (result, name, tmp - name);
7812 result[tmp - name] = '\0';
7813 return result;
7814 }
7815
7816 return name;
7817 }
7818 }
7819
7820 static struct value *
7821 evaluate_subexp (struct type *expect_type, struct expression *exp, int *pos,
7822 enum noside noside)
7823 {
7824 return (*exp->language_defn->la_exp_desc->evaluate_exp)
7825 (expect_type, exp, pos, noside);
7826 }
7827
7828 /* Evaluate the subexpression of EXP starting at *POS as for
7829 evaluate_type, updating *POS to point just past the evaluated
7830 expression. */
7831
7832 static struct value *
7833 evaluate_subexp_type (struct expression *exp, int *pos)
7834 {
7835 return (*exp->language_defn->la_exp_desc->evaluate_exp)
7836 (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
7837 }
7838
7839 /* If VAL is wrapped in an aligner or subtype wrapper, return the
7840 value it wraps. */
7841
7842 static struct value *
7843 unwrap_value (struct value *val)
7844 {
7845 struct type *type = ada_check_typedef (value_type (val));
7846 if (ada_is_aligner_type (type))
7847 {
7848 struct value *v = ada_value_struct_elt (val, "F", 0);
7849 struct type *val_type = ada_check_typedef (value_type (v));
7850 if (ada_type_name (val_type) == NULL)
7851 TYPE_NAME (val_type) = ada_type_name (type);
7852
7853 return unwrap_value (v);
7854 }
7855 else
7856 {
7857 struct type *raw_real_type =
7858 ada_check_typedef (ada_get_base_type (type));
7859
7860 if (type == raw_real_type)
7861 return val;
7862
7863 return
7864 coerce_unspec_val_to_type
7865 (val, ada_to_fixed_type (raw_real_type, 0,
7866 VALUE_ADDRESS (val) + value_offset (val),
7867 NULL, 1));
7868 }
7869 }
7870
7871 static struct value *
7872 cast_to_fixed (struct type *type, struct value *arg)
7873 {
7874 LONGEST val;
7875
7876 if (type == value_type (arg))
7877 return arg;
7878 else if (ada_is_fixed_point_type (value_type (arg)))
7879 val = ada_float_to_fixed (type,
7880 ada_fixed_to_float (value_type (arg),
7881 value_as_long (arg)));
7882 else
7883 {
7884 DOUBLEST argd = value_as_double (arg);
7885 val = ada_float_to_fixed (type, argd);
7886 }
7887
7888 return value_from_longest (type, val);
7889 }
7890
7891 static struct value *
7892 cast_from_fixed (struct type *type, struct value *arg)
7893 {
7894 DOUBLEST val = ada_fixed_to_float (value_type (arg),
7895 value_as_long (arg));
7896 return value_from_double (type, val);
7897 }
7898
7899 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
7900 return the converted value. */
7901
7902 static struct value *
7903 coerce_for_assign (struct type *type, struct value *val)
7904 {
7905 struct type *type2 = value_type (val);
7906 if (type == type2)
7907 return val;
7908
7909 type2 = ada_check_typedef (type2);
7910 type = ada_check_typedef (type);
7911
7912 if (TYPE_CODE (type2) == TYPE_CODE_PTR
7913 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7914 {
7915 val = ada_value_ind (val);
7916 type2 = value_type (val);
7917 }
7918
7919 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
7920 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7921 {
7922 if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
7923 || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
7924 != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
7925 error (_("Incompatible types in assignment"));
7926 deprecated_set_value_type (val, type);
7927 }
7928 return val;
7929 }
7930
7931 static struct value *
7932 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
7933 {
7934 struct value *val;
7935 struct type *type1, *type2;
7936 LONGEST v, v1, v2;
7937
7938 arg1 = coerce_ref (arg1);
7939 arg2 = coerce_ref (arg2);
7940 type1 = base_type (ada_check_typedef (value_type (arg1)));
7941 type2 = base_type (ada_check_typedef (value_type (arg2)));
7942
7943 if (TYPE_CODE (type1) != TYPE_CODE_INT
7944 || TYPE_CODE (type2) != TYPE_CODE_INT)
7945 return value_binop (arg1, arg2, op);
7946
7947 switch (op)
7948 {
7949 case BINOP_MOD:
7950 case BINOP_DIV:
7951 case BINOP_REM:
7952 break;
7953 default:
7954 return value_binop (arg1, arg2, op);
7955 }
7956
7957 v2 = value_as_long (arg2);
7958 if (v2 == 0)
7959 error (_("second operand of %s must not be zero."), op_string (op));
7960
7961 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
7962 return value_binop (arg1, arg2, op);
7963
7964 v1 = value_as_long (arg1);
7965 switch (op)
7966 {
7967 case BINOP_DIV:
7968 v = v1 / v2;
7969 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
7970 v += v > 0 ? -1 : 1;
7971 break;
7972 case BINOP_REM:
7973 v = v1 % v2;
7974 if (v * v1 < 0)
7975 v -= v2;
7976 break;
7977 default:
7978 /* Should not reach this point. */
7979 v = 0;
7980 }
7981
7982 val = allocate_value (type1);
7983 store_unsigned_integer (value_contents_raw (val),
7984 TYPE_LENGTH (value_type (val)), v);
7985 return val;
7986 }
7987
7988 static int
7989 ada_value_equal (struct value *arg1, struct value *arg2)
7990 {
7991 if (ada_is_direct_array_type (value_type (arg1))
7992 || ada_is_direct_array_type (value_type (arg2)))
7993 {
7994 /* Automatically dereference any array reference before
7995 we attempt to perform the comparison. */
7996 arg1 = ada_coerce_ref (arg1);
7997 arg2 = ada_coerce_ref (arg2);
7998
7999 arg1 = ada_coerce_to_simple_array (arg1);
8000 arg2 = ada_coerce_to_simple_array (arg2);
8001 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
8002 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
8003 error (_("Attempt to compare array with non-array"));
8004 /* FIXME: The following works only for types whose
8005 representations use all bits (no padding or undefined bits)
8006 and do not have user-defined equality. */
8007 return
8008 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
8009 && memcmp (value_contents (arg1), value_contents (arg2),
8010 TYPE_LENGTH (value_type (arg1))) == 0;
8011 }
8012 return value_equal (arg1, arg2);
8013 }
8014
8015 /* Total number of component associations in the aggregate starting at
8016 index PC in EXP. Assumes that index PC is the start of an
8017 OP_AGGREGATE. */
8018
8019 static int
8020 num_component_specs (struct expression *exp, int pc)
8021 {
8022 int n, m, i;
8023 m = exp->elts[pc + 1].longconst;
8024 pc += 3;
8025 n = 0;
8026 for (i = 0; i < m; i += 1)
8027 {
8028 switch (exp->elts[pc].opcode)
8029 {
8030 default:
8031 n += 1;
8032 break;
8033 case OP_CHOICES:
8034 n += exp->elts[pc + 1].longconst;
8035 break;
8036 }
8037 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
8038 }
8039 return n;
8040 }
8041
8042 /* Assign the result of evaluating EXP starting at *POS to the INDEXth
8043 component of LHS (a simple array or a record), updating *POS past
8044 the expression, assuming that LHS is contained in CONTAINER. Does
8045 not modify the inferior's memory, nor does it modify LHS (unless
8046 LHS == CONTAINER). */
8047
8048 static void
8049 assign_component (struct value *container, struct value *lhs, LONGEST index,
8050 struct expression *exp, int *pos)
8051 {
8052 struct value *mark = value_mark ();
8053 struct value *elt;
8054 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
8055 {
8056 struct value *index_val = value_from_longest (builtin_type_int32, index);
8057 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
8058 }
8059 else
8060 {
8061 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
8062 elt = ada_to_fixed_value (unwrap_value (elt));
8063 }
8064
8065 if (exp->elts[*pos].opcode == OP_AGGREGATE)
8066 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
8067 else
8068 value_assign_to_component (container, elt,
8069 ada_evaluate_subexp (NULL, exp, pos,
8070 EVAL_NORMAL));
8071
8072 value_free_to_mark (mark);
8073 }
8074
8075 /* Assuming that LHS represents an lvalue having a record or array
8076 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
8077 of that aggregate's value to LHS, advancing *POS past the
8078 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
8079 lvalue containing LHS (possibly LHS itself). Does not modify
8080 the inferior's memory, nor does it modify the contents of
8081 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
8082
8083 static struct value *
8084 assign_aggregate (struct value *container,
8085 struct value *lhs, struct expression *exp,
8086 int *pos, enum noside noside)
8087 {
8088 struct type *lhs_type;
8089 int n = exp->elts[*pos+1].longconst;
8090 LONGEST low_index, high_index;
8091 int num_specs;
8092 LONGEST *indices;
8093 int max_indices, num_indices;
8094 int is_array_aggregate;
8095 int i;
8096 struct value *mark = value_mark ();
8097
8098 *pos += 3;
8099 if (noside != EVAL_NORMAL)
8100 {
8101 int i;
8102 for (i = 0; i < n; i += 1)
8103 ada_evaluate_subexp (NULL, exp, pos, noside);
8104 return container;
8105 }
8106
8107 container = ada_coerce_ref (container);
8108 if (ada_is_direct_array_type (value_type (container)))
8109 container = ada_coerce_to_simple_array (container);
8110 lhs = ada_coerce_ref (lhs);
8111 if (!deprecated_value_modifiable (lhs))
8112 error (_("Left operand of assignment is not a modifiable lvalue."));
8113
8114 lhs_type = value_type (lhs);
8115 if (ada_is_direct_array_type (lhs_type))
8116 {
8117 lhs = ada_coerce_to_simple_array (lhs);
8118 lhs_type = value_type (lhs);
8119 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
8120 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
8121 is_array_aggregate = 1;
8122 }
8123 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
8124 {
8125 low_index = 0;
8126 high_index = num_visible_fields (lhs_type) - 1;
8127 is_array_aggregate = 0;
8128 }
8129 else
8130 error (_("Left-hand side must be array or record."));
8131
8132 num_specs = num_component_specs (exp, *pos - 3);
8133 max_indices = 4 * num_specs + 4;
8134 indices = alloca (max_indices * sizeof (indices[0]));
8135 indices[0] = indices[1] = low_index - 1;
8136 indices[2] = indices[3] = high_index + 1;
8137 num_indices = 4;
8138
8139 for (i = 0; i < n; i += 1)
8140 {
8141 switch (exp->elts[*pos].opcode)
8142 {
8143 case OP_CHOICES:
8144 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
8145 &num_indices, max_indices,
8146 low_index, high_index);
8147 break;
8148 case OP_POSITIONAL:
8149 aggregate_assign_positional (container, lhs, exp, pos, indices,
8150 &num_indices, max_indices,
8151 low_index, high_index);
8152 break;
8153 case OP_OTHERS:
8154 if (i != n-1)
8155 error (_("Misplaced 'others' clause"));
8156 aggregate_assign_others (container, lhs, exp, pos, indices,
8157 num_indices, low_index, high_index);
8158 break;
8159 default:
8160 error (_("Internal error: bad aggregate clause"));
8161 }
8162 }
8163
8164 return container;
8165 }
8166
8167 /* Assign into the component of LHS indexed by the OP_POSITIONAL
8168 construct at *POS, updating *POS past the construct, given that
8169 the positions are relative to lower bound LOW, where HIGH is the
8170 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
8171 updating *NUM_INDICES as needed. CONTAINER is as for
8172 assign_aggregate. */
8173 static void
8174 aggregate_assign_positional (struct value *container,
8175 struct value *lhs, struct expression *exp,
8176 int *pos, LONGEST *indices, int *num_indices,
8177 int max_indices, LONGEST low, LONGEST high)
8178 {
8179 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
8180
8181 if (ind - 1 == high)
8182 warning (_("Extra components in aggregate ignored."));
8183 if (ind <= high)
8184 {
8185 add_component_interval (ind, ind, indices, num_indices, max_indices);
8186 *pos += 3;
8187 assign_component (container, lhs, ind, exp, pos);
8188 }
8189 else
8190 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8191 }
8192
8193 /* Assign into the components of LHS indexed by the OP_CHOICES
8194 construct at *POS, updating *POS past the construct, given that
8195 the allowable indices are LOW..HIGH. Record the indices assigned
8196 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
8197 needed. CONTAINER is as for assign_aggregate. */
8198 static void
8199 aggregate_assign_from_choices (struct value *container,
8200 struct value *lhs, struct expression *exp,
8201 int *pos, LONGEST *indices, int *num_indices,
8202 int max_indices, LONGEST low, LONGEST high)
8203 {
8204 int j;
8205 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
8206 int choice_pos, expr_pc;
8207 int is_array = ada_is_direct_array_type (value_type (lhs));
8208
8209 choice_pos = *pos += 3;
8210
8211 for (j = 0; j < n_choices; j += 1)
8212 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8213 expr_pc = *pos;
8214 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8215
8216 for (j = 0; j < n_choices; j += 1)
8217 {
8218 LONGEST lower, upper;
8219 enum exp_opcode op = exp->elts[choice_pos].opcode;
8220 if (op == OP_DISCRETE_RANGE)
8221 {
8222 choice_pos += 1;
8223 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8224 EVAL_NORMAL));
8225 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8226 EVAL_NORMAL));
8227 }
8228 else if (is_array)
8229 {
8230 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
8231 EVAL_NORMAL));
8232 upper = lower;
8233 }
8234 else
8235 {
8236 int ind;
8237 char *name;
8238 switch (op)
8239 {
8240 case OP_NAME:
8241 name = &exp->elts[choice_pos + 2].string;
8242 break;
8243 case OP_VAR_VALUE:
8244 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
8245 break;
8246 default:
8247 error (_("Invalid record component association."));
8248 }
8249 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
8250 ind = 0;
8251 if (! find_struct_field (name, value_type (lhs), 0,
8252 NULL, NULL, NULL, NULL, &ind))
8253 error (_("Unknown component name: %s."), name);
8254 lower = upper = ind;
8255 }
8256
8257 if (lower <= upper && (lower < low || upper > high))
8258 error (_("Index in component association out of bounds."));
8259
8260 add_component_interval (lower, upper, indices, num_indices,
8261 max_indices);
8262 while (lower <= upper)
8263 {
8264 int pos1;
8265 pos1 = expr_pc;
8266 assign_component (container, lhs, lower, exp, &pos1);
8267 lower += 1;
8268 }
8269 }
8270 }
8271
8272 /* Assign the value of the expression in the OP_OTHERS construct in
8273 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
8274 have not been previously assigned. The index intervals already assigned
8275 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
8276 OP_OTHERS clause. CONTAINER is as for assign_aggregate*/
8277 static void
8278 aggregate_assign_others (struct value *container,
8279 struct value *lhs, struct expression *exp,
8280 int *pos, LONGEST *indices, int num_indices,
8281 LONGEST low, LONGEST high)
8282 {
8283 int i;
8284 int expr_pc = *pos+1;
8285
8286 for (i = 0; i < num_indices - 2; i += 2)
8287 {
8288 LONGEST ind;
8289 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
8290 {
8291 int pos;
8292 pos = expr_pc;
8293 assign_component (container, lhs, ind, exp, &pos);
8294 }
8295 }
8296 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8297 }
8298
8299 /* Add the interval [LOW .. HIGH] to the sorted set of intervals
8300 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
8301 modifying *SIZE as needed. It is an error if *SIZE exceeds
8302 MAX_SIZE. The resulting intervals do not overlap. */
8303 static void
8304 add_component_interval (LONGEST low, LONGEST high,
8305 LONGEST* indices, int *size, int max_size)
8306 {
8307 int i, j;
8308 for (i = 0; i < *size; i += 2) {
8309 if (high >= indices[i] && low <= indices[i + 1])
8310 {
8311 int kh;
8312 for (kh = i + 2; kh < *size; kh += 2)
8313 if (high < indices[kh])
8314 break;
8315 if (low < indices[i])
8316 indices[i] = low;
8317 indices[i + 1] = indices[kh - 1];
8318 if (high > indices[i + 1])
8319 indices[i + 1] = high;
8320 memcpy (indices + i + 2, indices + kh, *size - kh);
8321 *size -= kh - i - 2;
8322 return;
8323 }
8324 else if (high < indices[i])
8325 break;
8326 }
8327
8328 if (*size == max_size)
8329 error (_("Internal error: miscounted aggregate components."));
8330 *size += 2;
8331 for (j = *size-1; j >= i+2; j -= 1)
8332 indices[j] = indices[j - 2];
8333 indices[i] = low;
8334 indices[i + 1] = high;
8335 }
8336
8337 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
8338 is different. */
8339
8340 static struct value *
8341 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
8342 {
8343 if (type == ada_check_typedef (value_type (arg2)))
8344 return arg2;
8345
8346 if (ada_is_fixed_point_type (type))
8347 return (cast_to_fixed (type, arg2));
8348
8349 if (ada_is_fixed_point_type (value_type (arg2)))
8350 return cast_from_fixed (type, arg2);
8351
8352 return value_cast (type, arg2);
8353 }
8354
8355 static struct value *
8356 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
8357 int *pos, enum noside noside)
8358 {
8359 enum exp_opcode op;
8360 int tem, tem2, tem3;
8361 int pc;
8362 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8363 struct type *type;
8364 int nargs, oplen;
8365 struct value **argvec;
8366
8367 pc = *pos;
8368 *pos += 1;
8369 op = exp->elts[pc].opcode;
8370
8371 switch (op)
8372 {
8373 default:
8374 *pos -= 1;
8375 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8376 arg1 = unwrap_value (arg1);
8377
8378 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
8379 then we need to perform the conversion manually, because
8380 evaluate_subexp_standard doesn't do it. This conversion is
8381 necessary in Ada because the different kinds of float/fixed
8382 types in Ada have different representations.
8383
8384 Similarly, we need to perform the conversion from OP_LONG
8385 ourselves. */
8386 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
8387 arg1 = ada_value_cast (expect_type, arg1, noside);
8388
8389 return arg1;
8390
8391 case OP_STRING:
8392 {
8393 struct value *result;
8394 *pos -= 1;
8395 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
8396 /* The result type will have code OP_STRING, bashed there from
8397 OP_ARRAY. Bash it back. */
8398 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
8399 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
8400 return result;
8401 }
8402
8403 case UNOP_CAST:
8404 (*pos) += 2;
8405 type = exp->elts[pc + 1].type;
8406 arg1 = evaluate_subexp (type, exp, pos, noside);
8407 if (noside == EVAL_SKIP)
8408 goto nosideret;
8409 arg1 = ada_value_cast (type, arg1, noside);
8410 return arg1;
8411
8412 case UNOP_QUAL:
8413 (*pos) += 2;
8414 type = exp->elts[pc + 1].type;
8415 return ada_evaluate_subexp (type, exp, pos, noside);
8416
8417 case BINOP_ASSIGN:
8418 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8419 if (exp->elts[*pos].opcode == OP_AGGREGATE)
8420 {
8421 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
8422 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8423 return arg1;
8424 return ada_value_assign (arg1, arg1);
8425 }
8426 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
8427 except if the lhs of our assignment is a convenience variable.
8428 In the case of assigning to a convenience variable, the lhs
8429 should be exactly the result of the evaluation of the rhs. */
8430 type = value_type (arg1);
8431 if (VALUE_LVAL (arg1) == lval_internalvar)
8432 type = NULL;
8433 arg2 = evaluate_subexp (type, exp, pos, noside);
8434 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8435 return arg1;
8436 if (ada_is_fixed_point_type (value_type (arg1)))
8437 arg2 = cast_to_fixed (value_type (arg1), arg2);
8438 else if (ada_is_fixed_point_type (value_type (arg2)))
8439 error
8440 (_("Fixed-point values must be assigned to fixed-point variables"));
8441 else
8442 arg2 = coerce_for_assign (value_type (arg1), arg2);
8443 return ada_value_assign (arg1, arg2);
8444
8445 case BINOP_ADD:
8446 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8447 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8448 if (noside == EVAL_SKIP)
8449 goto nosideret;
8450 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8451 return (value_from_longest
8452 (value_type (arg1),
8453 value_as_long (arg1) + value_as_long (arg2)));
8454 if ((ada_is_fixed_point_type (value_type (arg1))
8455 || ada_is_fixed_point_type (value_type (arg2)))
8456 && value_type (arg1) != value_type (arg2))
8457 error (_("Operands of fixed-point addition must have the same type"));
8458 /* Do the addition, and cast the result to the type of the first
8459 argument. We cannot cast the result to a reference type, so if
8460 ARG1 is a reference type, find its underlying type. */
8461 type = value_type (arg1);
8462 while (TYPE_CODE (type) == TYPE_CODE_REF)
8463 type = TYPE_TARGET_TYPE (type);
8464 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8465 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
8466
8467 case BINOP_SUB:
8468 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8469 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8470 if (noside == EVAL_SKIP)
8471 goto nosideret;
8472 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8473 return (value_from_longest
8474 (value_type (arg1),
8475 value_as_long (arg1) - value_as_long (arg2)));
8476 if ((ada_is_fixed_point_type (value_type (arg1))
8477 || ada_is_fixed_point_type (value_type (arg2)))
8478 && value_type (arg1) != value_type (arg2))
8479 error (_("Operands of fixed-point subtraction must have the same type"));
8480 /* Do the substraction, and cast the result to the type of the first
8481 argument. We cannot cast the result to a reference type, so if
8482 ARG1 is a reference type, find its underlying type. */
8483 type = value_type (arg1);
8484 while (TYPE_CODE (type) == TYPE_CODE_REF)
8485 type = TYPE_TARGET_TYPE (type);
8486 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8487 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
8488
8489 case BINOP_MUL:
8490 case BINOP_DIV:
8491 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8492 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8493 if (noside == EVAL_SKIP)
8494 goto nosideret;
8495 else if (noside == EVAL_AVOID_SIDE_EFFECTS
8496 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
8497 return value_zero (value_type (arg1), not_lval);
8498 else
8499 {
8500 type = builtin_type (exp->gdbarch)->builtin_double;
8501 if (ada_is_fixed_point_type (value_type (arg1)))
8502 arg1 = cast_from_fixed (type, arg1);
8503 if (ada_is_fixed_point_type (value_type (arg2)))
8504 arg2 = cast_from_fixed (type, arg2);
8505 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8506 return ada_value_binop (arg1, arg2, op);
8507 }
8508
8509 case BINOP_REM:
8510 case BINOP_MOD:
8511 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8512 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8513 if (noside == EVAL_SKIP)
8514 goto nosideret;
8515 else if (noside == EVAL_AVOID_SIDE_EFFECTS
8516 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
8517 return value_zero (value_type (arg1), not_lval);
8518 else
8519 {
8520 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8521 return ada_value_binop (arg1, arg2, op);
8522 }
8523
8524 case BINOP_EQUAL:
8525 case BINOP_NOTEQUAL:
8526 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8527 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
8528 if (noside == EVAL_SKIP)
8529 goto nosideret;
8530 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8531 tem = 0;
8532 else
8533 {
8534 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8535 tem = ada_value_equal (arg1, arg2);
8536 }
8537 if (op == BINOP_NOTEQUAL)
8538 tem = !tem;
8539 type = language_bool_type (exp->language_defn, exp->gdbarch);
8540 return value_from_longest (type, (LONGEST) tem);
8541
8542 case UNOP_NEG:
8543 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8544 if (noside == EVAL_SKIP)
8545 goto nosideret;
8546 else if (ada_is_fixed_point_type (value_type (arg1)))
8547 return value_cast (value_type (arg1), value_neg (arg1));
8548 else
8549 {
8550 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
8551 return value_neg (arg1);
8552 }
8553
8554 case BINOP_LOGICAL_AND:
8555 case BINOP_LOGICAL_OR:
8556 case UNOP_LOGICAL_NOT:
8557 {
8558 struct value *val;
8559
8560 *pos -= 1;
8561 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8562 type = language_bool_type (exp->language_defn, exp->gdbarch);
8563 return value_cast (type, val);
8564 }
8565
8566 case BINOP_BITWISE_AND:
8567 case BINOP_BITWISE_IOR:
8568 case BINOP_BITWISE_XOR:
8569 {
8570 struct value *val;
8571
8572 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8573 *pos = pc;
8574 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8575
8576 return value_cast (value_type (arg1), val);
8577 }
8578
8579 case OP_VAR_VALUE:
8580 *pos -= 1;
8581
8582 if (noside == EVAL_SKIP)
8583 {
8584 *pos += 4;
8585 goto nosideret;
8586 }
8587 else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
8588 /* Only encountered when an unresolved symbol occurs in a
8589 context other than a function call, in which case, it is
8590 invalid. */
8591 error (_("Unexpected unresolved symbol, %s, during evaluation"),
8592 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
8593 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8594 {
8595 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
8596 if (ada_is_tagged_type (type, 0))
8597 {
8598 /* Tagged types are a little special in the fact that the real
8599 type is dynamic and can only be determined by inspecting the
8600 object's tag. This means that we need to get the object's
8601 value first (EVAL_NORMAL) and then extract the actual object
8602 type from its tag.
8603
8604 Note that we cannot skip the final step where we extract
8605 the object type from its tag, because the EVAL_NORMAL phase
8606 results in dynamic components being resolved into fixed ones.
8607 This can cause problems when trying to print the type
8608 description of tagged types whose parent has a dynamic size:
8609 We use the type name of the "_parent" component in order
8610 to print the name of the ancestor type in the type description.
8611 If that component had a dynamic size, the resolution into
8612 a fixed type would result in the loss of that type name,
8613 thus preventing us from printing the name of the ancestor
8614 type in the type description. */
8615 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
8616 return value_zero (type_from_tag (ada_value_tag (arg1)), not_lval);
8617 }
8618
8619 *pos += 4;
8620 return value_zero
8621 (to_static_fixed_type
8622 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8623 not_lval);
8624 }
8625 else
8626 {
8627 arg1 =
8628 unwrap_value (evaluate_subexp_standard
8629 (expect_type, exp, pos, noside));
8630 return ada_to_fixed_value (arg1);
8631 }
8632
8633 case OP_FUNCALL:
8634 (*pos) += 2;
8635
8636 /* Allocate arg vector, including space for the function to be
8637 called in argvec[0] and a terminating NULL. */
8638 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8639 argvec =
8640 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8641
8642 if (exp->elts[*pos].opcode == OP_VAR_VALUE
8643 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
8644 error (_("Unexpected unresolved symbol, %s, during evaluation"),
8645 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
8646 else
8647 {
8648 for (tem = 0; tem <= nargs; tem += 1)
8649 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8650 argvec[tem] = 0;
8651
8652 if (noside == EVAL_SKIP)
8653 goto nosideret;
8654 }
8655
8656 if (ada_is_packed_array_type (desc_base_type (value_type (argvec[0]))))
8657 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
8658 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
8659 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8660 && VALUE_LVAL (argvec[0]) == lval_memory))
8661 argvec[0] = value_addr (argvec[0]);
8662
8663 type = ada_check_typedef (value_type (argvec[0]));
8664 if (TYPE_CODE (type) == TYPE_CODE_PTR)
8665 {
8666 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
8667 {
8668 case TYPE_CODE_FUNC:
8669 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8670 break;
8671 case TYPE_CODE_ARRAY:
8672 break;
8673 case TYPE_CODE_STRUCT:
8674 if (noside != EVAL_AVOID_SIDE_EFFECTS)
8675 argvec[0] = ada_value_ind (argvec[0]);
8676 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8677 break;
8678 default:
8679 error (_("cannot subscript or call something of type `%s'"),
8680 ada_type_name (value_type (argvec[0])));
8681 break;
8682 }
8683 }
8684
8685 switch (TYPE_CODE (type))
8686 {
8687 case TYPE_CODE_FUNC:
8688 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8689 return allocate_value (TYPE_TARGET_TYPE (type));
8690 return call_function_by_hand (argvec[0], nargs, argvec + 1);
8691 case TYPE_CODE_STRUCT:
8692 {
8693 int arity;
8694
8695 arity = ada_array_arity (type);
8696 type = ada_array_element_type (type, nargs);
8697 if (type == NULL)
8698 error (_("cannot subscript or call a record"));
8699 if (arity != nargs)
8700 error (_("wrong number of subscripts; expecting %d"), arity);
8701 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8702 return value_zero (ada_aligned_type (type), lval_memory);
8703 return
8704 unwrap_value (ada_value_subscript
8705 (argvec[0], nargs, argvec + 1));
8706 }
8707 case TYPE_CODE_ARRAY:
8708 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8709 {
8710 type = ada_array_element_type (type, nargs);
8711 if (type == NULL)
8712 error (_("element type of array unknown"));
8713 else
8714 return value_zero (ada_aligned_type (type), lval_memory);
8715 }
8716 return
8717 unwrap_value (ada_value_subscript
8718 (ada_coerce_to_simple_array (argvec[0]),
8719 nargs, argvec + 1));
8720 case TYPE_CODE_PTR: /* Pointer to array */
8721 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
8722 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8723 {
8724 type = ada_array_element_type (type, nargs);
8725 if (type == NULL)
8726 error (_("element type of array unknown"));
8727 else
8728 return value_zero (ada_aligned_type (type), lval_memory);
8729 }
8730 return
8731 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
8732 nargs, argvec + 1));
8733
8734 default:
8735 error (_("Attempt to index or call something other than an "
8736 "array or function"));
8737 }
8738
8739 case TERNOP_SLICE:
8740 {
8741 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8742 struct value *low_bound_val =
8743 evaluate_subexp (NULL_TYPE, exp, pos, noside);
8744 struct value *high_bound_val =
8745 evaluate_subexp (NULL_TYPE, exp, pos, noside);
8746 LONGEST low_bound;
8747 LONGEST high_bound;
8748 low_bound_val = coerce_ref (low_bound_val);
8749 high_bound_val = coerce_ref (high_bound_val);
8750 low_bound = pos_atr (low_bound_val);
8751 high_bound = pos_atr (high_bound_val);
8752
8753 if (noside == EVAL_SKIP)
8754 goto nosideret;
8755
8756 /* If this is a reference to an aligner type, then remove all
8757 the aligners. */
8758 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8759 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
8760 TYPE_TARGET_TYPE (value_type (array)) =
8761 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
8762
8763 if (ada_is_packed_array_type (value_type (array)))
8764 error (_("cannot slice a packed array"));
8765
8766 /* If this is a reference to an array or an array lvalue,
8767 convert to a pointer. */
8768 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8769 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
8770 && VALUE_LVAL (array) == lval_memory))
8771 array = value_addr (array);
8772
8773 if (noside == EVAL_AVOID_SIDE_EFFECTS
8774 && ada_is_array_descriptor_type (ada_check_typedef
8775 (value_type (array))))
8776 return empty_array (ada_type_of_array (array, 0), low_bound);
8777
8778 array = ada_coerce_to_simple_array_ptr (array);
8779
8780 /* If we have more than one level of pointer indirection,
8781 dereference the value until we get only one level. */
8782 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
8783 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
8784 == TYPE_CODE_PTR))
8785 array = value_ind (array);
8786
8787 /* Make sure we really do have an array type before going further,
8788 to avoid a SEGV when trying to get the index type or the target
8789 type later down the road if the debug info generated by
8790 the compiler is incorrect or incomplete. */
8791 if (!ada_is_simple_array_type (value_type (array)))
8792 error (_("cannot take slice of non-array"));
8793
8794 if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
8795 {
8796 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
8797 return empty_array (TYPE_TARGET_TYPE (value_type (array)),
8798 low_bound);
8799 else
8800 {
8801 struct type *arr_type0 =
8802 to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
8803 NULL, 1);
8804 return ada_value_slice_ptr (array, arr_type0,
8805 longest_to_int (low_bound),
8806 longest_to_int (high_bound));
8807 }
8808 }
8809 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8810 return array;
8811 else if (high_bound < low_bound)
8812 return empty_array (value_type (array), low_bound);
8813 else
8814 return ada_value_slice (array, longest_to_int (low_bound),
8815 longest_to_int (high_bound));
8816 }
8817
8818 case UNOP_IN_RANGE:
8819 (*pos) += 2;
8820 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8821 type = exp->elts[pc + 1].type;
8822
8823 if (noside == EVAL_SKIP)
8824 goto nosideret;
8825
8826 switch (TYPE_CODE (type))
8827 {
8828 default:
8829 lim_warning (_("Membership test incompletely implemented; "
8830 "always returns true"));
8831 type = language_bool_type (exp->language_defn, exp->gdbarch);
8832 return value_from_longest (type, (LONGEST) 1);
8833
8834 case TYPE_CODE_RANGE:
8835 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
8836 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
8837 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8838 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
8839 type = language_bool_type (exp->language_defn, exp->gdbarch);
8840 return
8841 value_from_longest (type,
8842 (value_less (arg1, arg3)
8843 || value_equal (arg1, arg3))
8844 && (value_less (arg2, arg1)
8845 || value_equal (arg2, arg1)));
8846 }
8847
8848 case BINOP_IN_BOUNDS:
8849 (*pos) += 2;
8850 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8851 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8852
8853 if (noside == EVAL_SKIP)
8854 goto nosideret;
8855
8856 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8857 {
8858 type = language_bool_type (exp->language_defn, exp->gdbarch);
8859 return value_zero (type, not_lval);
8860 }
8861
8862 tem = longest_to_int (exp->elts[pc + 1].longconst);
8863
8864 if (tem < 1 || tem > ada_array_arity (value_type (arg2)))
8865 error (_("invalid dimension number to 'range"));
8866
8867 arg3 = ada_array_bound (arg2, tem, 1);
8868 arg2 = ada_array_bound (arg2, tem, 0);
8869
8870 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8871 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
8872 type = language_bool_type (exp->language_defn, exp->gdbarch);
8873 return
8874 value_from_longest (type,
8875 (value_less (arg1, arg3)
8876 || value_equal (arg1, arg3))
8877 && (value_less (arg2, arg1)
8878 || value_equal (arg2, arg1)));
8879
8880 case TERNOP_IN_RANGE:
8881 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8882 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8883 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8884
8885 if (noside == EVAL_SKIP)
8886 goto nosideret;
8887
8888 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8889 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
8890 type = language_bool_type (exp->language_defn, exp->gdbarch);
8891 return
8892 value_from_longest (type,
8893 (value_less (arg1, arg3)
8894 || value_equal (arg1, arg3))
8895 && (value_less (arg2, arg1)
8896 || value_equal (arg2, arg1)));
8897
8898 case OP_ATR_FIRST:
8899 case OP_ATR_LAST:
8900 case OP_ATR_LENGTH:
8901 {
8902 struct type *type_arg;
8903 if (exp->elts[*pos].opcode == OP_TYPE)
8904 {
8905 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8906 arg1 = NULL;
8907 type_arg = exp->elts[pc + 2].type;
8908 }
8909 else
8910 {
8911 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8912 type_arg = NULL;
8913 }
8914
8915 if (exp->elts[*pos].opcode != OP_LONG)
8916 error (_("Invalid operand to '%s"), ada_attribute_name (op));
8917 tem = longest_to_int (exp->elts[*pos + 2].longconst);
8918 *pos += 4;
8919
8920 if (noside == EVAL_SKIP)
8921 goto nosideret;
8922
8923 if (type_arg == NULL)
8924 {
8925 arg1 = ada_coerce_ref (arg1);
8926
8927 if (ada_is_packed_array_type (value_type (arg1)))
8928 arg1 = ada_coerce_to_simple_array (arg1);
8929
8930 if (tem < 1 || tem > ada_array_arity (value_type (arg1)))
8931 error (_("invalid dimension number to '%s"),
8932 ada_attribute_name (op));
8933
8934 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8935 {
8936 type = ada_index_type (value_type (arg1), tem);
8937 if (type == NULL)
8938 error
8939 (_("attempt to take bound of something that is not an array"));
8940 return allocate_value (type);
8941 }
8942
8943 switch (op)
8944 {
8945 default: /* Should never happen. */
8946 error (_("unexpected attribute encountered"));
8947 case OP_ATR_FIRST:
8948 return ada_array_bound (arg1, tem, 0);
8949 case OP_ATR_LAST:
8950 return ada_array_bound (arg1, tem, 1);
8951 case OP_ATR_LENGTH:
8952 return ada_array_length (arg1, tem);
8953 }
8954 }
8955 else if (discrete_type_p (type_arg))
8956 {
8957 struct type *range_type;
8958 char *name = ada_type_name (type_arg);
8959 range_type = NULL;
8960 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
8961 range_type =
8962 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
8963 if (range_type == NULL)
8964 range_type = type_arg;
8965 switch (op)
8966 {
8967 default:
8968 error (_("unexpected attribute encountered"));
8969 case OP_ATR_FIRST:
8970 return value_from_longest
8971 (range_type, discrete_type_low_bound (range_type));
8972 case OP_ATR_LAST:
8973 return value_from_longest
8974 (range_type, discrete_type_high_bound (range_type));
8975 case OP_ATR_LENGTH:
8976 error (_("the 'length attribute applies only to array types"));
8977 }
8978 }
8979 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
8980 error (_("unimplemented type attribute"));
8981 else
8982 {
8983 LONGEST low, high;
8984
8985 if (ada_is_packed_array_type (type_arg))
8986 type_arg = decode_packed_array_type (type_arg);
8987
8988 if (tem < 1 || tem > ada_array_arity (type_arg))
8989 error (_("invalid dimension number to '%s"),
8990 ada_attribute_name (op));
8991
8992 type = ada_index_type (type_arg, tem);
8993 if (type == NULL)
8994 error
8995 (_("attempt to take bound of something that is not an array"));
8996 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8997 return allocate_value (type);
8998
8999 switch (op)
9000 {
9001 default:
9002 error (_("unexpected attribute encountered"));
9003 case OP_ATR_FIRST:
9004 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
9005 return value_from_longest (type, low);
9006 case OP_ATR_LAST:
9007 high = ada_array_bound_from_type (type_arg, tem, 1, &type);
9008 return value_from_longest (type, high);
9009 case OP_ATR_LENGTH:
9010 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
9011 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
9012 return value_from_longest (type, high - low + 1);
9013 }
9014 }
9015 }
9016
9017 case OP_ATR_TAG:
9018 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9019 if (noside == EVAL_SKIP)
9020 goto nosideret;
9021
9022 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9023 return value_zero (ada_tag_type (arg1), not_lval);
9024
9025 return ada_value_tag (arg1);
9026
9027 case OP_ATR_MIN:
9028 case OP_ATR_MAX:
9029 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9030 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9031 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9032 if (noside == EVAL_SKIP)
9033 goto nosideret;
9034 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9035 return value_zero (value_type (arg1), not_lval);
9036 else
9037 {
9038 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9039 return value_binop (arg1, arg2,
9040 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9041 }
9042
9043 case OP_ATR_MODULUS:
9044 {
9045 struct type *type_arg = exp->elts[pc + 2].type;
9046 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9047
9048 if (noside == EVAL_SKIP)
9049 goto nosideret;
9050
9051 if (!ada_is_modular_type (type_arg))
9052 error (_("'modulus must be applied to modular type"));
9053
9054 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9055 ada_modulus (type_arg));
9056 }
9057
9058
9059 case OP_ATR_POS:
9060 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9061 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9062 if (noside == EVAL_SKIP)
9063 goto nosideret;
9064 type = builtin_type (exp->gdbarch)->builtin_int;
9065 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9066 return value_zero (type, not_lval);
9067 else
9068 return value_pos_atr (type, arg1);
9069
9070 case OP_ATR_SIZE:
9071 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9072 if (noside == EVAL_SKIP)
9073 goto nosideret;
9074 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9075 return value_zero (builtin_type_int32, not_lval);
9076 else
9077 return value_from_longest (builtin_type_int32,
9078 TARGET_CHAR_BIT
9079 * TYPE_LENGTH (value_type (arg1)));
9080
9081 case OP_ATR_VAL:
9082 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9083 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9084 type = exp->elts[pc + 2].type;
9085 if (noside == EVAL_SKIP)
9086 goto nosideret;
9087 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9088 return value_zero (type, not_lval);
9089 else
9090 return value_val_atr (type, arg1);
9091
9092 case BINOP_EXP:
9093 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9094 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9095 if (noside == EVAL_SKIP)
9096 goto nosideret;
9097 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9098 return value_zero (value_type (arg1), not_lval);
9099 else
9100 {
9101 /* For integer exponentiation operations,
9102 only promote the first argument. */
9103 if (is_integral_type (value_type (arg2)))
9104 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9105 else
9106 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9107
9108 return value_binop (arg1, arg2, op);
9109 }
9110
9111 case UNOP_PLUS:
9112 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9113 if (noside == EVAL_SKIP)
9114 goto nosideret;
9115 else
9116 return arg1;
9117
9118 case UNOP_ABS:
9119 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9120 if (noside == EVAL_SKIP)
9121 goto nosideret;
9122 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9123 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
9124 return value_neg (arg1);
9125 else
9126 return arg1;
9127
9128 case UNOP_IND:
9129 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9130 if (noside == EVAL_SKIP)
9131 goto nosideret;
9132 type = ada_check_typedef (value_type (arg1));
9133 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9134 {
9135 if (ada_is_array_descriptor_type (type))
9136 /* GDB allows dereferencing GNAT array descriptors. */
9137 {
9138 struct type *arrType = ada_type_of_array (arg1, 0);
9139 if (arrType == NULL)
9140 error (_("Attempt to dereference null array pointer."));
9141 return value_at_lazy (arrType, 0);
9142 }
9143 else if (TYPE_CODE (type) == TYPE_CODE_PTR
9144 || TYPE_CODE (type) == TYPE_CODE_REF
9145 /* In C you can dereference an array to get the 1st elt. */
9146 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9147 {
9148 type = to_static_fixed_type
9149 (ada_aligned_type
9150 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9151 check_size (type);
9152 return value_zero (type, lval_memory);
9153 }
9154 else if (TYPE_CODE (type) == TYPE_CODE_INT)
9155 {
9156 /* GDB allows dereferencing an int. */
9157 if (expect_type == NULL)
9158 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
9159 lval_memory);
9160 else
9161 {
9162 expect_type =
9163 to_static_fixed_type (ada_aligned_type (expect_type));
9164 return value_zero (expect_type, lval_memory);
9165 }
9166 }
9167 else
9168 error (_("Attempt to take contents of a non-pointer value."));
9169 }
9170 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
9171 type = ada_check_typedef (value_type (arg1));
9172
9173 if (TYPE_CODE (type) == TYPE_CODE_INT && expect_type != NULL)
9174 /* GDB allows dereferencing an int. We give it the expected
9175 type (which will be set in the case of a coercion or
9176 qualification). */
9177 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
9178 arg1));
9179
9180 if (ada_is_array_descriptor_type (type))
9181 /* GDB allows dereferencing GNAT array descriptors. */
9182 return ada_coerce_to_simple_array (arg1);
9183 else
9184 return ada_value_ind (arg1);
9185
9186 case STRUCTOP_STRUCT:
9187 tem = longest_to_int (exp->elts[pc + 1].longconst);
9188 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9189 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9190 if (noside == EVAL_SKIP)
9191 goto nosideret;
9192 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9193 {
9194 struct type *type1 = value_type (arg1);
9195 if (ada_is_tagged_type (type1, 1))
9196 {
9197 type = ada_lookup_struct_elt_type (type1,
9198 &exp->elts[pc + 2].string,
9199 1, 1, NULL);
9200 if (type == NULL)
9201 /* In this case, we assume that the field COULD exist
9202 in some extension of the type. Return an object of
9203 "type" void, which will match any formal
9204 (see ada_type_match). */
9205 return value_zero (builtin_type_void, lval_memory);
9206 }
9207 else
9208 type =
9209 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9210 0, NULL);
9211
9212 return value_zero (ada_aligned_type (type), lval_memory);
9213 }
9214 else
9215 return
9216 ada_to_fixed_value (unwrap_value
9217 (ada_value_struct_elt
9218 (arg1, &exp->elts[pc + 2].string, 0)));
9219 case OP_TYPE:
9220 /* The value is not supposed to be used. This is here to make it
9221 easier to accommodate expressions that contain types. */
9222 (*pos) += 2;
9223 if (noside == EVAL_SKIP)
9224 goto nosideret;
9225 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9226 return allocate_value (exp->elts[pc + 1].type);
9227 else
9228 error (_("Attempt to use a type name as an expression"));
9229
9230 case OP_AGGREGATE:
9231 case OP_CHOICES:
9232 case OP_OTHERS:
9233 case OP_DISCRETE_RANGE:
9234 case OP_POSITIONAL:
9235 case OP_NAME:
9236 if (noside == EVAL_NORMAL)
9237 switch (op)
9238 {
9239 case OP_NAME:
9240 error (_("Undefined name, ambiguous name, or renaming used in "
9241 "component association: %s."), &exp->elts[pc+2].string);
9242 case OP_AGGREGATE:
9243 error (_("Aggregates only allowed on the right of an assignment"));
9244 default:
9245 internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
9246 }
9247
9248 ada_forward_operator_length (exp, pc, &oplen, &nargs);
9249 *pos += oplen - 1;
9250 for (tem = 0; tem < nargs; tem += 1)
9251 ada_evaluate_subexp (NULL, exp, pos, noside);
9252 goto nosideret;
9253 }
9254
9255 nosideret:
9256 return value_from_longest (builtin_type_int8, (LONGEST) 1);
9257 }
9258 \f
9259
9260 /* Fixed point */
9261
9262 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9263 type name that encodes the 'small and 'delta information.
9264 Otherwise, return NULL. */
9265
9266 static const char *
9267 fixed_type_info (struct type *type)
9268 {
9269 const char *name = ada_type_name (type);
9270 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9271
9272 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9273 {
9274 const char *tail = strstr (name, "___XF_");
9275 if (tail == NULL)
9276 return NULL;
9277 else
9278 return tail + 5;
9279 }
9280 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9281 return fixed_type_info (TYPE_TARGET_TYPE (type));
9282 else
9283 return NULL;
9284 }
9285
9286 /* Returns non-zero iff TYPE represents an Ada fixed-point type. */
9287
9288 int
9289 ada_is_fixed_point_type (struct type *type)
9290 {
9291 return fixed_type_info (type) != NULL;
9292 }
9293
9294 /* Return non-zero iff TYPE represents a System.Address type. */
9295
9296 int
9297 ada_is_system_address_type (struct type *type)
9298 {
9299 return (TYPE_NAME (type)
9300 && strcmp (TYPE_NAME (type), "system__address") == 0);
9301 }
9302
9303 /* Assuming that TYPE is the representation of an Ada fixed-point
9304 type, return its delta, or -1 if the type is malformed and the
9305 delta cannot be determined. */
9306
9307 DOUBLEST
9308 ada_delta (struct type *type)
9309 {
9310 const char *encoding = fixed_type_info (type);
9311 long num, den;
9312
9313 if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
9314 return -1.0;
9315 else
9316 return (DOUBLEST) num / (DOUBLEST) den;
9317 }
9318
9319 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9320 factor ('SMALL value) associated with the type. */
9321
9322 static DOUBLEST
9323 scaling_factor (struct type *type)
9324 {
9325 const char *encoding = fixed_type_info (type);
9326 unsigned long num0, den0, num1, den1;
9327 int n;
9328
9329 n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
9330
9331 if (n < 2)
9332 return 1.0;
9333 else if (n == 4)
9334 return (DOUBLEST) num1 / (DOUBLEST) den1;
9335 else
9336 return (DOUBLEST) num0 / (DOUBLEST) den0;
9337 }
9338
9339
9340 /* Assuming that X is the representation of a value of fixed-point
9341 type TYPE, return its floating-point equivalent. */
9342
9343 DOUBLEST
9344 ada_fixed_to_float (struct type *type, LONGEST x)
9345 {
9346 return (DOUBLEST) x *scaling_factor (type);
9347 }
9348
9349 /* The representation of a fixed-point value of type TYPE
9350 corresponding to the value X. */
9351
9352 LONGEST
9353 ada_float_to_fixed (struct type *type, DOUBLEST x)
9354 {
9355 return (LONGEST) (x / scaling_factor (type) + 0.5);
9356 }
9357
9358
9359 /* VAX floating formats */
9360
9361 /* Non-zero iff TYPE represents one of the special VAX floating-point
9362 types. */
9363
9364 int
9365 ada_is_vax_floating_type (struct type *type)
9366 {
9367 int name_len =
9368 (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
9369 return
9370 name_len > 6
9371 && (TYPE_CODE (type) == TYPE_CODE_INT
9372 || TYPE_CODE (type) == TYPE_CODE_RANGE)
9373 && strncmp (ada_type_name (type) + name_len - 6, "___XF", 5) == 0;
9374 }
9375
9376 /* The type of special VAX floating-point type this is, assuming
9377 ada_is_vax_floating_point. */
9378
9379 int
9380 ada_vax_float_type_suffix (struct type *type)
9381 {
9382 return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
9383 }
9384
9385 /* A value representing the special debugging function that outputs
9386 VAX floating-point values of the type represented by TYPE. Assumes
9387 ada_is_vax_floating_type (TYPE). */
9388
9389 struct value *
9390 ada_vax_float_print_function (struct type *type)
9391 {
9392 switch (ada_vax_float_type_suffix (type))
9393 {
9394 case 'F':
9395 return get_var_value ("DEBUG_STRING_F", 0);
9396 case 'D':
9397 return get_var_value ("DEBUG_STRING_D", 0);
9398 case 'G':
9399 return get_var_value ("DEBUG_STRING_G", 0);
9400 default:
9401 error (_("invalid VAX floating-point type"));
9402 }
9403 }
9404 \f
9405
9406 /* Range types */
9407
9408 /* Scan STR beginning at position K for a discriminant name, and
9409 return the value of that discriminant field of DVAL in *PX. If
9410 PNEW_K is not null, put the position of the character beyond the
9411 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
9412 not alter *PX and *PNEW_K if unsuccessful. */
9413
9414 static int
9415 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9416 int *pnew_k)
9417 {
9418 static char *bound_buffer = NULL;
9419 static size_t bound_buffer_len = 0;
9420 char *bound;
9421 char *pend;
9422 struct value *bound_val;
9423
9424 if (dval == NULL || str == NULL || str[k] == '\0')
9425 return 0;
9426
9427 pend = strstr (str + k, "__");
9428 if (pend == NULL)
9429 {
9430 bound = str + k;
9431 k += strlen (bound);
9432 }
9433 else
9434 {
9435 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
9436 bound = bound_buffer;
9437 strncpy (bound_buffer, str + k, pend - (str + k));
9438 bound[pend - (str + k)] = '\0';
9439 k = pend - str;
9440 }
9441
9442 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
9443 if (bound_val == NULL)
9444 return 0;
9445
9446 *px = value_as_long (bound_val);
9447 if (pnew_k != NULL)
9448 *pnew_k = k;
9449 return 1;
9450 }
9451
9452 /* Value of variable named NAME in the current environment. If
9453 no such variable found, then if ERR_MSG is null, returns 0, and
9454 otherwise causes an error with message ERR_MSG. */
9455
9456 static struct value *
9457 get_var_value (char *name, char *err_msg)
9458 {
9459 struct ada_symbol_info *syms;
9460 int nsyms;
9461
9462 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9463 &syms);
9464
9465 if (nsyms != 1)
9466 {
9467 if (err_msg == NULL)
9468 return 0;
9469 else
9470 error (("%s"), err_msg);
9471 }
9472
9473 return value_of_variable (syms[0].sym, syms[0].block);
9474 }
9475
9476 /* Value of integer variable named NAME in the current environment. If
9477 no such variable found, returns 0, and sets *FLAG to 0. If
9478 successful, sets *FLAG to 1. */
9479
9480 LONGEST
9481 get_int_var_value (char *name, int *flag)
9482 {
9483 struct value *var_val = get_var_value (name, 0);
9484
9485 if (var_val == 0)
9486 {
9487 if (flag != NULL)
9488 *flag = 0;
9489 return 0;
9490 }
9491 else
9492 {
9493 if (flag != NULL)
9494 *flag = 1;
9495 return value_as_long (var_val);
9496 }
9497 }
9498
9499
9500 /* Return a range type whose base type is that of the range type named
9501 NAME in the current environment, and whose bounds are calculated
9502 from NAME according to the GNAT range encoding conventions.
9503 Extract discriminant values, if needed, from DVAL. If a new type
9504 must be created, allocate in OBJFILE's space. The bounds
9505 information, in general, is encoded in NAME, the base type given in
9506 the named range type. */
9507
9508 static struct type *
9509 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
9510 {
9511 struct type *raw_type = ada_find_any_type (name);
9512 struct type *base_type;
9513 char *subtype_info;
9514
9515 if (raw_type == NULL)
9516 base_type = builtin_type_int32;
9517 else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
9518 base_type = TYPE_TARGET_TYPE (raw_type);
9519 else
9520 base_type = raw_type;
9521
9522 subtype_info = strstr (name, "___XD");
9523 if (subtype_info == NULL)
9524 {
9525 LONGEST L = discrete_type_low_bound (raw_type);
9526 LONGEST U = discrete_type_high_bound (raw_type);
9527 if (L < INT_MIN || U > INT_MAX)
9528 return raw_type;
9529 else
9530 return create_range_type (alloc_type (objfile), raw_type,
9531 discrete_type_low_bound (raw_type),
9532 discrete_type_high_bound (raw_type));
9533 }
9534 else
9535 {
9536 static char *name_buf = NULL;
9537 static size_t name_len = 0;
9538 int prefix_len = subtype_info - name;
9539 LONGEST L, U;
9540 struct type *type;
9541 char *bounds_str;
9542 int n;
9543
9544 GROW_VECT (name_buf, name_len, prefix_len + 5);
9545 strncpy (name_buf, name, prefix_len);
9546 name_buf[prefix_len] = '\0';
9547
9548 subtype_info += 5;
9549 bounds_str = strchr (subtype_info, '_');
9550 n = 1;
9551
9552 if (*subtype_info == 'L')
9553 {
9554 if (!ada_scan_number (bounds_str, n, &L, &n)
9555 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9556 return raw_type;
9557 if (bounds_str[n] == '_')
9558 n += 2;
9559 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
9560 n += 1;
9561 subtype_info += 1;
9562 }
9563 else
9564 {
9565 int ok;
9566 strcpy (name_buf + prefix_len, "___L");
9567 L = get_int_var_value (name_buf, &ok);
9568 if (!ok)
9569 {
9570 lim_warning (_("Unknown lower bound, using 1."));
9571 L = 1;
9572 }
9573 }
9574
9575 if (*subtype_info == 'U')
9576 {
9577 if (!ada_scan_number (bounds_str, n, &U, &n)
9578 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9579 return raw_type;
9580 }
9581 else
9582 {
9583 int ok;
9584 strcpy (name_buf + prefix_len, "___U");
9585 U = get_int_var_value (name_buf, &ok);
9586 if (!ok)
9587 {
9588 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
9589 U = L;
9590 }
9591 }
9592
9593 if (objfile == NULL)
9594 objfile = TYPE_OBJFILE (base_type);
9595 type = create_range_type (alloc_type (objfile), base_type, L, U);
9596 TYPE_NAME (type) = name;
9597 return type;
9598 }
9599 }
9600
9601 /* True iff NAME is the name of a range type. */
9602
9603 int
9604 ada_is_range_type_name (const char *name)
9605 {
9606 return (name != NULL && strstr (name, "___XD"));
9607 }
9608 \f
9609
9610 /* Modular types */
9611
9612 /* True iff TYPE is an Ada modular type. */
9613
9614 int
9615 ada_is_modular_type (struct type *type)
9616 {
9617 struct type *subranged_type = base_type (type);
9618
9619 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9620 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
9621 && TYPE_UNSIGNED (subranged_type));
9622 }
9623
9624 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
9625
9626 ULONGEST
9627 ada_modulus (struct type * type)
9628 {
9629 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
9630 }
9631 \f
9632
9633 /* Ada exception catchpoint support:
9634 ---------------------------------
9635
9636 We support 3 kinds of exception catchpoints:
9637 . catchpoints on Ada exceptions
9638 . catchpoints on unhandled Ada exceptions
9639 . catchpoints on failed assertions
9640
9641 Exceptions raised during failed assertions, or unhandled exceptions
9642 could perfectly be caught with the general catchpoint on Ada exceptions.
9643 However, we can easily differentiate these two special cases, and having
9644 the option to distinguish these two cases from the rest can be useful
9645 to zero-in on certain situations.
9646
9647 Exception catchpoints are a specialized form of breakpoint,
9648 since they rely on inserting breakpoints inside known routines
9649 of the GNAT runtime. The implementation therefore uses a standard
9650 breakpoint structure of the BP_BREAKPOINT type, but with its own set
9651 of breakpoint_ops.
9652
9653 Support in the runtime for exception catchpoints have been changed
9654 a few times already, and these changes affect the implementation
9655 of these catchpoints. In order to be able to support several
9656 variants of the runtime, we use a sniffer that will determine
9657 the runtime variant used by the program being debugged.
9658
9659 At this time, we do not support the use of conditions on Ada exception
9660 catchpoints. The COND and COND_STRING fields are therefore set
9661 to NULL (most of the time, see below).
9662
9663 Conditions where EXP_STRING, COND, and COND_STRING are used:
9664
9665 When a user specifies the name of a specific exception in the case
9666 of catchpoints on Ada exceptions, we store the name of that exception
9667 in the EXP_STRING. We then translate this request into an actual
9668 condition stored in COND_STRING, and then parse it into an expression
9669 stored in COND. */
9670
9671 /* The different types of catchpoints that we introduced for catching
9672 Ada exceptions. */
9673
9674 enum exception_catchpoint_kind
9675 {
9676 ex_catch_exception,
9677 ex_catch_exception_unhandled,
9678 ex_catch_assert
9679 };
9680
9681 /* Ada's standard exceptions. */
9682
9683 static char *standard_exc[] = {
9684 "constraint_error",
9685 "program_error",
9686 "storage_error",
9687 "tasking_error"
9688 };
9689
9690 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
9691
9692 /* A structure that describes how to support exception catchpoints
9693 for a given executable. */
9694
9695 struct exception_support_info
9696 {
9697 /* The name of the symbol to break on in order to insert
9698 a catchpoint on exceptions. */
9699 const char *catch_exception_sym;
9700
9701 /* The name of the symbol to break on in order to insert
9702 a catchpoint on unhandled exceptions. */
9703 const char *catch_exception_unhandled_sym;
9704
9705 /* The name of the symbol to break on in order to insert
9706 a catchpoint on failed assertions. */
9707 const char *catch_assert_sym;
9708
9709 /* Assuming that the inferior just triggered an unhandled exception
9710 catchpoint, this function is responsible for returning the address
9711 in inferior memory where the name of that exception is stored.
9712 Return zero if the address could not be computed. */
9713 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
9714 };
9715
9716 static CORE_ADDR ada_unhandled_exception_name_addr (void);
9717 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
9718
9719 /* The following exception support info structure describes how to
9720 implement exception catchpoints with the latest version of the
9721 Ada runtime (as of 2007-03-06). */
9722
9723 static const struct exception_support_info default_exception_support_info =
9724 {
9725 "__gnat_debug_raise_exception", /* catch_exception_sym */
9726 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9727 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9728 ada_unhandled_exception_name_addr
9729 };
9730
9731 /* The following exception support info structure describes how to
9732 implement exception catchpoints with a slightly older version
9733 of the Ada runtime. */
9734
9735 static const struct exception_support_info exception_support_info_fallback =
9736 {
9737 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
9738 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9739 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9740 ada_unhandled_exception_name_addr_from_raise
9741 };
9742
9743 /* For each executable, we sniff which exception info structure to use
9744 and cache it in the following global variable. */
9745
9746 static const struct exception_support_info *exception_info = NULL;
9747
9748 /* Inspect the Ada runtime and determine which exception info structure
9749 should be used to provide support for exception catchpoints.
9750
9751 This function will always set exception_info, or raise an error. */
9752
9753 static void
9754 ada_exception_support_info_sniffer (void)
9755 {
9756 struct symbol *sym;
9757
9758 /* If the exception info is already known, then no need to recompute it. */
9759 if (exception_info != NULL)
9760 return;
9761
9762 /* Check the latest (default) exception support info. */
9763 sym = standard_lookup (default_exception_support_info.catch_exception_sym,
9764 NULL, VAR_DOMAIN);
9765 if (sym != NULL)
9766 {
9767 exception_info = &default_exception_support_info;
9768 return;
9769 }
9770
9771 /* Try our fallback exception suport info. */
9772 sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
9773 NULL, VAR_DOMAIN);
9774 if (sym != NULL)
9775 {
9776 exception_info = &exception_support_info_fallback;
9777 return;
9778 }
9779
9780 /* Sometimes, it is normal for us to not be able to find the routine
9781 we are looking for. This happens when the program is linked with
9782 the shared version of the GNAT runtime, and the program has not been
9783 started yet. Inform the user of these two possible causes if
9784 applicable. */
9785
9786 if (ada_update_initial_language (language_unknown, NULL) != language_ada)
9787 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
9788
9789 /* If the symbol does not exist, then check that the program is
9790 already started, to make sure that shared libraries have been
9791 loaded. If it is not started, this may mean that the symbol is
9792 in a shared library. */
9793
9794 if (ptid_get_pid (inferior_ptid) == 0)
9795 error (_("Unable to insert catchpoint. Try to start the program first."));
9796
9797 /* At this point, we know that we are debugging an Ada program and
9798 that the inferior has been started, but we still are not able to
9799 find the run-time symbols. That can mean that we are in
9800 configurable run time mode, or that a-except as been optimized
9801 out by the linker... In any case, at this point it is not worth
9802 supporting this feature. */
9803
9804 error (_("Cannot insert catchpoints in this configuration."));
9805 }
9806
9807 /* An observer of "executable_changed" events.
9808 Its role is to clear certain cached values that need to be recomputed
9809 each time a new executable is loaded by GDB. */
9810
9811 static void
9812 ada_executable_changed_observer (void)
9813 {
9814 /* If the executable changed, then it is possible that the Ada runtime
9815 is different. So we need to invalidate the exception support info
9816 cache. */
9817 exception_info = NULL;
9818 }
9819
9820 /* Return the name of the function at PC, NULL if could not find it.
9821 This function only checks the debugging information, not the symbol
9822 table. */
9823
9824 static char *
9825 function_name_from_pc (CORE_ADDR pc)
9826 {
9827 char *func_name;
9828
9829 if (!find_pc_partial_function (pc, &func_name, NULL, NULL))
9830 return NULL;
9831
9832 return func_name;
9833 }
9834
9835 /* True iff FRAME is very likely to be that of a function that is
9836 part of the runtime system. This is all very heuristic, but is
9837 intended to be used as advice as to what frames are uninteresting
9838 to most users. */
9839
9840 static int
9841 is_known_support_routine (struct frame_info *frame)
9842 {
9843 struct symtab_and_line sal;
9844 char *func_name;
9845 int i;
9846
9847 /* If this code does not have any debugging information (no symtab),
9848 This cannot be any user code. */
9849
9850 find_frame_sal (frame, &sal);
9851 if (sal.symtab == NULL)
9852 return 1;
9853
9854 /* If there is a symtab, but the associated source file cannot be
9855 located, then assume this is not user code: Selecting a frame
9856 for which we cannot display the code would not be very helpful
9857 for the user. This should also take care of case such as VxWorks
9858 where the kernel has some debugging info provided for a few units. */
9859
9860 if (symtab_to_fullname (sal.symtab) == NULL)
9861 return 1;
9862
9863 /* Check the unit filename againt the Ada runtime file naming.
9864 We also check the name of the objfile against the name of some
9865 known system libraries that sometimes come with debugging info
9866 too. */
9867
9868 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
9869 {
9870 re_comp (known_runtime_file_name_patterns[i]);
9871 if (re_exec (sal.symtab->filename))
9872 return 1;
9873 if (sal.symtab->objfile != NULL
9874 && re_exec (sal.symtab->objfile->name))
9875 return 1;
9876 }
9877
9878 /* Check whether the function is a GNAT-generated entity. */
9879
9880 func_name = function_name_from_pc (get_frame_address_in_block (frame));
9881 if (func_name == NULL)
9882 return 1;
9883
9884 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
9885 {
9886 re_comp (known_auxiliary_function_name_patterns[i]);
9887 if (re_exec (func_name))
9888 return 1;
9889 }
9890
9891 return 0;
9892 }
9893
9894 /* Find the first frame that contains debugging information and that is not
9895 part of the Ada run-time, starting from FI and moving upward. */
9896
9897 static void
9898 ada_find_printable_frame (struct frame_info *fi)
9899 {
9900 for (; fi != NULL; fi = get_prev_frame (fi))
9901 {
9902 if (!is_known_support_routine (fi))
9903 {
9904 select_frame (fi);
9905 break;
9906 }
9907 }
9908
9909 }
9910
9911 /* Assuming that the inferior just triggered an unhandled exception
9912 catchpoint, return the address in inferior memory where the name
9913 of the exception is stored.
9914
9915 Return zero if the address could not be computed. */
9916
9917 static CORE_ADDR
9918 ada_unhandled_exception_name_addr (void)
9919 {
9920 return parse_and_eval_address ("e.full_name");
9921 }
9922
9923 /* Same as ada_unhandled_exception_name_addr, except that this function
9924 should be used when the inferior uses an older version of the runtime,
9925 where the exception name needs to be extracted from a specific frame
9926 several frames up in the callstack. */
9927
9928 static CORE_ADDR
9929 ada_unhandled_exception_name_addr_from_raise (void)
9930 {
9931 int frame_level;
9932 struct frame_info *fi;
9933
9934 /* To determine the name of this exception, we need to select
9935 the frame corresponding to RAISE_SYM_NAME. This frame is
9936 at least 3 levels up, so we simply skip the first 3 frames
9937 without checking the name of their associated function. */
9938 fi = get_current_frame ();
9939 for (frame_level = 0; frame_level < 3; frame_level += 1)
9940 if (fi != NULL)
9941 fi = get_prev_frame (fi);
9942
9943 while (fi != NULL)
9944 {
9945 const char *func_name =
9946 function_name_from_pc (get_frame_address_in_block (fi));
9947 if (func_name != NULL
9948 && strcmp (func_name, exception_info->catch_exception_sym) == 0)
9949 break; /* We found the frame we were looking for... */
9950 fi = get_prev_frame (fi);
9951 }
9952
9953 if (fi == NULL)
9954 return 0;
9955
9956 select_frame (fi);
9957 return parse_and_eval_address ("id.full_name");
9958 }
9959
9960 /* Assuming the inferior just triggered an Ada exception catchpoint
9961 (of any type), return the address in inferior memory where the name
9962 of the exception is stored, if applicable.
9963
9964 Return zero if the address could not be computed, or if not relevant. */
9965
9966 static CORE_ADDR
9967 ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
9968 struct breakpoint *b)
9969 {
9970 switch (ex)
9971 {
9972 case ex_catch_exception:
9973 return (parse_and_eval_address ("e.full_name"));
9974 break;
9975
9976 case ex_catch_exception_unhandled:
9977 return exception_info->unhandled_exception_name_addr ();
9978 break;
9979
9980 case ex_catch_assert:
9981 return 0; /* Exception name is not relevant in this case. */
9982 break;
9983
9984 default:
9985 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
9986 break;
9987 }
9988
9989 return 0; /* Should never be reached. */
9990 }
9991
9992 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
9993 any error that ada_exception_name_addr_1 might cause to be thrown.
9994 When an error is intercepted, a warning with the error message is printed,
9995 and zero is returned. */
9996
9997 static CORE_ADDR
9998 ada_exception_name_addr (enum exception_catchpoint_kind ex,
9999 struct breakpoint *b)
10000 {
10001 struct gdb_exception e;
10002 CORE_ADDR result = 0;
10003
10004 TRY_CATCH (e, RETURN_MASK_ERROR)
10005 {
10006 result = ada_exception_name_addr_1 (ex, b);
10007 }
10008
10009 if (e.reason < 0)
10010 {
10011 warning (_("failed to get exception name: %s"), e.message);
10012 return 0;
10013 }
10014
10015 return result;
10016 }
10017
10018 /* Implement the PRINT_IT method in the breakpoint_ops structure
10019 for all exception catchpoint kinds. */
10020
10021 static enum print_stop_action
10022 print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
10023 {
10024 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
10025 char exception_name[256];
10026
10027 if (addr != 0)
10028 {
10029 read_memory (addr, exception_name, sizeof (exception_name) - 1);
10030 exception_name [sizeof (exception_name) - 1] = '\0';
10031 }
10032
10033 ada_find_printable_frame (get_current_frame ());
10034
10035 annotate_catchpoint (b->number);
10036 switch (ex)
10037 {
10038 case ex_catch_exception:
10039 if (addr != 0)
10040 printf_filtered (_("\nCatchpoint %d, %s at "),
10041 b->number, exception_name);
10042 else
10043 printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
10044 break;
10045 case ex_catch_exception_unhandled:
10046 if (addr != 0)
10047 printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
10048 b->number, exception_name);
10049 else
10050 printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
10051 b->number);
10052 break;
10053 case ex_catch_assert:
10054 printf_filtered (_("\nCatchpoint %d, failed assertion at "),
10055 b->number);
10056 break;
10057 }
10058
10059 return PRINT_SRC_AND_LOC;
10060 }
10061
10062 /* Implement the PRINT_ONE method in the breakpoint_ops structure
10063 for all exception catchpoint kinds. */
10064
10065 static void
10066 print_one_exception (enum exception_catchpoint_kind ex,
10067 struct breakpoint *b, CORE_ADDR *last_addr)
10068 {
10069 if (addressprint)
10070 {
10071 annotate_field (4);
10072 ui_out_field_core_addr (uiout, "addr", b->loc->address);
10073 }
10074
10075 annotate_field (5);
10076 *last_addr = b->loc->address;
10077 switch (ex)
10078 {
10079 case ex_catch_exception:
10080 if (b->exp_string != NULL)
10081 {
10082 char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
10083
10084 ui_out_field_string (uiout, "what", msg);
10085 xfree (msg);
10086 }
10087 else
10088 ui_out_field_string (uiout, "what", "all Ada exceptions");
10089
10090 break;
10091
10092 case ex_catch_exception_unhandled:
10093 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10094 break;
10095
10096 case ex_catch_assert:
10097 ui_out_field_string (uiout, "what", "failed Ada assertions");
10098 break;
10099
10100 default:
10101 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10102 break;
10103 }
10104 }
10105
10106 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
10107 for all exception catchpoint kinds. */
10108
10109 static void
10110 print_mention_exception (enum exception_catchpoint_kind ex,
10111 struct breakpoint *b)
10112 {
10113 switch (ex)
10114 {
10115 case ex_catch_exception:
10116 if (b->exp_string != NULL)
10117 printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10118 b->number, b->exp_string);
10119 else
10120 printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10121
10122 break;
10123
10124 case ex_catch_exception_unhandled:
10125 printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10126 b->number);
10127 break;
10128
10129 case ex_catch_assert:
10130 printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10131 break;
10132
10133 default:
10134 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10135 break;
10136 }
10137 }
10138
10139 /* Virtual table for "catch exception" breakpoints. */
10140
10141 static enum print_stop_action
10142 print_it_catch_exception (struct breakpoint *b)
10143 {
10144 return print_it_exception (ex_catch_exception, b);
10145 }
10146
10147 static void
10148 print_one_catch_exception (struct breakpoint *b, CORE_ADDR *last_addr)
10149 {
10150 print_one_exception (ex_catch_exception, b, last_addr);
10151 }
10152
10153 static void
10154 print_mention_catch_exception (struct breakpoint *b)
10155 {
10156 print_mention_exception (ex_catch_exception, b);
10157 }
10158
10159 static struct breakpoint_ops catch_exception_breakpoint_ops =
10160 {
10161 print_it_catch_exception,
10162 print_one_catch_exception,
10163 print_mention_catch_exception
10164 };
10165
10166 /* Virtual table for "catch exception unhandled" breakpoints. */
10167
10168 static enum print_stop_action
10169 print_it_catch_exception_unhandled (struct breakpoint *b)
10170 {
10171 return print_it_exception (ex_catch_exception_unhandled, b);
10172 }
10173
10174 static void
10175 print_one_catch_exception_unhandled (struct breakpoint *b, CORE_ADDR *last_addr)
10176 {
10177 print_one_exception (ex_catch_exception_unhandled, b, last_addr);
10178 }
10179
10180 static void
10181 print_mention_catch_exception_unhandled (struct breakpoint *b)
10182 {
10183 print_mention_exception (ex_catch_exception_unhandled, b);
10184 }
10185
10186 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
10187 print_it_catch_exception_unhandled,
10188 print_one_catch_exception_unhandled,
10189 print_mention_catch_exception_unhandled
10190 };
10191
10192 /* Virtual table for "catch assert" breakpoints. */
10193
10194 static enum print_stop_action
10195 print_it_catch_assert (struct breakpoint *b)
10196 {
10197 return print_it_exception (ex_catch_assert, b);
10198 }
10199
10200 static void
10201 print_one_catch_assert (struct breakpoint *b, CORE_ADDR *last_addr)
10202 {
10203 print_one_exception (ex_catch_assert, b, last_addr);
10204 }
10205
10206 static void
10207 print_mention_catch_assert (struct breakpoint *b)
10208 {
10209 print_mention_exception (ex_catch_assert, b);
10210 }
10211
10212 static struct breakpoint_ops catch_assert_breakpoint_ops = {
10213 print_it_catch_assert,
10214 print_one_catch_assert,
10215 print_mention_catch_assert
10216 };
10217
10218 /* Return non-zero if B is an Ada exception catchpoint. */
10219
10220 int
10221 ada_exception_catchpoint_p (struct breakpoint *b)
10222 {
10223 return (b->ops == &catch_exception_breakpoint_ops
10224 || b->ops == &catch_exception_unhandled_breakpoint_ops
10225 || b->ops == &catch_assert_breakpoint_ops);
10226 }
10227
10228 /* Return a newly allocated copy of the first space-separated token
10229 in ARGSP, and then adjust ARGSP to point immediately after that
10230 token.
10231
10232 Return NULL if ARGPS does not contain any more tokens. */
10233
10234 static char *
10235 ada_get_next_arg (char **argsp)
10236 {
10237 char *args = *argsp;
10238 char *end;
10239 char *result;
10240
10241 /* Skip any leading white space. */
10242
10243 while (isspace (*args))
10244 args++;
10245
10246 if (args[0] == '\0')
10247 return NULL; /* No more arguments. */
10248
10249 /* Find the end of the current argument. */
10250
10251 end = args;
10252 while (*end != '\0' && !isspace (*end))
10253 end++;
10254
10255 /* Adjust ARGSP to point to the start of the next argument. */
10256
10257 *argsp = end;
10258
10259 /* Make a copy of the current argument and return it. */
10260
10261 result = xmalloc (end - args + 1);
10262 strncpy (result, args, end - args);
10263 result[end - args] = '\0';
10264
10265 return result;
10266 }
10267
10268 /* Split the arguments specified in a "catch exception" command.
10269 Set EX to the appropriate catchpoint type.
10270 Set EXP_STRING to the name of the specific exception if
10271 specified by the user. */
10272
10273 static void
10274 catch_ada_exception_command_split (char *args,
10275 enum exception_catchpoint_kind *ex,
10276 char **exp_string)
10277 {
10278 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
10279 char *exception_name;
10280
10281 exception_name = ada_get_next_arg (&args);
10282 make_cleanup (xfree, exception_name);
10283
10284 /* Check that we do not have any more arguments. Anything else
10285 is unexpected. */
10286
10287 while (isspace (*args))
10288 args++;
10289
10290 if (args[0] != '\0')
10291 error (_("Junk at end of expression"));
10292
10293 discard_cleanups (old_chain);
10294
10295 if (exception_name == NULL)
10296 {
10297 /* Catch all exceptions. */
10298 *ex = ex_catch_exception;
10299 *exp_string = NULL;
10300 }
10301 else if (strcmp (exception_name, "unhandled") == 0)
10302 {
10303 /* Catch unhandled exceptions. */
10304 *ex = ex_catch_exception_unhandled;
10305 *exp_string = NULL;
10306 }
10307 else
10308 {
10309 /* Catch a specific exception. */
10310 *ex = ex_catch_exception;
10311 *exp_string = exception_name;
10312 }
10313 }
10314
10315 /* Return the name of the symbol on which we should break in order to
10316 implement a catchpoint of the EX kind. */
10317
10318 static const char *
10319 ada_exception_sym_name (enum exception_catchpoint_kind ex)
10320 {
10321 gdb_assert (exception_info != NULL);
10322
10323 switch (ex)
10324 {
10325 case ex_catch_exception:
10326 return (exception_info->catch_exception_sym);
10327 break;
10328 case ex_catch_exception_unhandled:
10329 return (exception_info->catch_exception_unhandled_sym);
10330 break;
10331 case ex_catch_assert:
10332 return (exception_info->catch_assert_sym);
10333 break;
10334 default:
10335 internal_error (__FILE__, __LINE__,
10336 _("unexpected catchpoint kind (%d)"), ex);
10337 }
10338 }
10339
10340 /* Return the breakpoint ops "virtual table" used for catchpoints
10341 of the EX kind. */
10342
10343 static struct breakpoint_ops *
10344 ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
10345 {
10346 switch (ex)
10347 {
10348 case ex_catch_exception:
10349 return (&catch_exception_breakpoint_ops);
10350 break;
10351 case ex_catch_exception_unhandled:
10352 return (&catch_exception_unhandled_breakpoint_ops);
10353 break;
10354 case ex_catch_assert:
10355 return (&catch_assert_breakpoint_ops);
10356 break;
10357 default:
10358 internal_error (__FILE__, __LINE__,
10359 _("unexpected catchpoint kind (%d)"), ex);
10360 }
10361 }
10362
10363 /* Return the condition that will be used to match the current exception
10364 being raised with the exception that the user wants to catch. This
10365 assumes that this condition is used when the inferior just triggered
10366 an exception catchpoint.
10367
10368 The string returned is a newly allocated string that needs to be
10369 deallocated later. */
10370
10371 static char *
10372 ada_exception_catchpoint_cond_string (const char *exp_string)
10373 {
10374 int i;
10375
10376 /* The standard exceptions are a special case. They are defined in
10377 runtime units that have been compiled without debugging info; if
10378 EXP_STRING is the not-fully-qualified name of a standard
10379 exception (e.g. "constraint_error") then, during the evaluation
10380 of the condition expression, the symbol lookup on this name would
10381 *not* return this standard exception. The catchpoint condition
10382 may then be set only on user-defined exceptions which have the
10383 same not-fully-qualified name (e.g. my_package.constraint_error).
10384
10385 To avoid this unexcepted behavior, these standard exceptions are
10386 systematically prefixed by "standard". This means that "catch
10387 exception constraint_error" is rewritten into "catch exception
10388 standard.constraint_error".
10389
10390 If an exception named contraint_error is defined in another package of
10391 the inferior program, then the only way to specify this exception as a
10392 breakpoint condition is to use its fully-qualified named:
10393 e.g. my_package.constraint_error. */
10394
10395 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
10396 {
10397 if (strcmp (standard_exc [i], exp_string) == 0)
10398 {
10399 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
10400 exp_string);
10401 }
10402 }
10403 return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
10404 }
10405
10406 /* Return the expression corresponding to COND_STRING evaluated at SAL. */
10407
10408 static struct expression *
10409 ada_parse_catchpoint_condition (char *cond_string,
10410 struct symtab_and_line sal)
10411 {
10412 return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
10413 }
10414
10415 /* Return the symtab_and_line that should be used to insert an exception
10416 catchpoint of the TYPE kind.
10417
10418 EX_STRING should contain the name of a specific exception
10419 that the catchpoint should catch, or NULL otherwise.
10420
10421 The idea behind all the remaining parameters is that their names match
10422 the name of certain fields in the breakpoint structure that are used to
10423 handle exception catchpoints. This function returns the value to which
10424 these fields should be set, depending on the type of catchpoint we need
10425 to create.
10426
10427 If COND and COND_STRING are both non-NULL, any value they might
10428 hold will be free'ed, and then replaced by newly allocated ones.
10429 These parameters are left untouched otherwise. */
10430
10431 static struct symtab_and_line
10432 ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
10433 char **addr_string, char **cond_string,
10434 struct expression **cond, struct breakpoint_ops **ops)
10435 {
10436 const char *sym_name;
10437 struct symbol *sym;
10438 struct symtab_and_line sal;
10439
10440 /* First, find out which exception support info to use. */
10441 ada_exception_support_info_sniffer ();
10442
10443 /* Then lookup the function on which we will break in order to catch
10444 the Ada exceptions requested by the user. */
10445
10446 sym_name = ada_exception_sym_name (ex);
10447 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
10448
10449 /* The symbol we're looking up is provided by a unit in the GNAT runtime
10450 that should be compiled with debugging information. As a result, we
10451 expect to find that symbol in the symtabs. If we don't find it, then
10452 the target most likely does not support Ada exceptions, or we cannot
10453 insert exception breakpoints yet, because the GNAT runtime hasn't been
10454 loaded yet. */
10455
10456 /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
10457 in such a way that no debugging information is produced for the symbol
10458 we are looking for. In this case, we could search the minimal symbols
10459 as a fall-back mechanism. This would still be operating in degraded
10460 mode, however, as we would still be missing the debugging information
10461 that is needed in order to extract the name of the exception being
10462 raised (this name is printed in the catchpoint message, and is also
10463 used when trying to catch a specific exception). We do not handle
10464 this case for now. */
10465
10466 if (sym == NULL)
10467 error (_("Unable to break on '%s' in this configuration."), sym_name);
10468
10469 /* Make sure that the symbol we found corresponds to a function. */
10470 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
10471 error (_("Symbol \"%s\" is not a function (class = %d)"),
10472 sym_name, SYMBOL_CLASS (sym));
10473
10474 sal = find_function_start_sal (sym, 1);
10475
10476 /* Set ADDR_STRING. */
10477
10478 *addr_string = xstrdup (sym_name);
10479
10480 /* Set the COND and COND_STRING (if not NULL). */
10481
10482 if (cond_string != NULL && cond != NULL)
10483 {
10484 if (*cond_string != NULL)
10485 {
10486 xfree (*cond_string);
10487 *cond_string = NULL;
10488 }
10489 if (*cond != NULL)
10490 {
10491 xfree (*cond);
10492 *cond = NULL;
10493 }
10494 if (exp_string != NULL)
10495 {
10496 *cond_string = ada_exception_catchpoint_cond_string (exp_string);
10497 *cond = ada_parse_catchpoint_condition (*cond_string, sal);
10498 }
10499 }
10500
10501 /* Set OPS. */
10502 *ops = ada_exception_breakpoint_ops (ex);
10503
10504 return sal;
10505 }
10506
10507 /* Parse the arguments (ARGS) of the "catch exception" command.
10508
10509 Set TYPE to the appropriate exception catchpoint type.
10510 If the user asked the catchpoint to catch only a specific
10511 exception, then save the exception name in ADDR_STRING.
10512
10513 See ada_exception_sal for a description of all the remaining
10514 function arguments of this function. */
10515
10516 struct symtab_and_line
10517 ada_decode_exception_location (char *args, char **addr_string,
10518 char **exp_string, char **cond_string,
10519 struct expression **cond,
10520 struct breakpoint_ops **ops)
10521 {
10522 enum exception_catchpoint_kind ex;
10523
10524 catch_ada_exception_command_split (args, &ex, exp_string);
10525 return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
10526 cond, ops);
10527 }
10528
10529 struct symtab_and_line
10530 ada_decode_assert_location (char *args, char **addr_string,
10531 struct breakpoint_ops **ops)
10532 {
10533 /* Check that no argument where provided at the end of the command. */
10534
10535 if (args != NULL)
10536 {
10537 while (isspace (*args))
10538 args++;
10539 if (*args != '\0')
10540 error (_("Junk at end of arguments."));
10541 }
10542
10543 return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
10544 ops);
10545 }
10546
10547 /* Operators */
10548 /* Information about operators given special treatment in functions
10549 below. */
10550 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
10551
10552 #define ADA_OPERATORS \
10553 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
10554 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
10555 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
10556 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
10557 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
10558 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
10559 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
10560 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
10561 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
10562 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
10563 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
10564 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
10565 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
10566 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
10567 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
10568 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
10569 OP_DEFN (OP_OTHERS, 1, 1, 0) \
10570 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
10571 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
10572
10573 static void
10574 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
10575 {
10576 switch (exp->elts[pc - 1].opcode)
10577 {
10578 default:
10579 operator_length_standard (exp, pc, oplenp, argsp);
10580 break;
10581
10582 #define OP_DEFN(op, len, args, binop) \
10583 case op: *oplenp = len; *argsp = args; break;
10584 ADA_OPERATORS;
10585 #undef OP_DEFN
10586
10587 case OP_AGGREGATE:
10588 *oplenp = 3;
10589 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
10590 break;
10591
10592 case OP_CHOICES:
10593 *oplenp = 3;
10594 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
10595 break;
10596 }
10597 }
10598
10599 static char *
10600 ada_op_name (enum exp_opcode opcode)
10601 {
10602 switch (opcode)
10603 {
10604 default:
10605 return op_name_standard (opcode);
10606
10607 #define OP_DEFN(op, len, args, binop) case op: return #op;
10608 ADA_OPERATORS;
10609 #undef OP_DEFN
10610
10611 case OP_AGGREGATE:
10612 return "OP_AGGREGATE";
10613 case OP_CHOICES:
10614 return "OP_CHOICES";
10615 case OP_NAME:
10616 return "OP_NAME";
10617 }
10618 }
10619
10620 /* As for operator_length, but assumes PC is pointing at the first
10621 element of the operator, and gives meaningful results only for the
10622 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
10623
10624 static void
10625 ada_forward_operator_length (struct expression *exp, int pc,
10626 int *oplenp, int *argsp)
10627 {
10628 switch (exp->elts[pc].opcode)
10629 {
10630 default:
10631 *oplenp = *argsp = 0;
10632 break;
10633
10634 #define OP_DEFN(op, len, args, binop) \
10635 case op: *oplenp = len; *argsp = args; break;
10636 ADA_OPERATORS;
10637 #undef OP_DEFN
10638
10639 case OP_AGGREGATE:
10640 *oplenp = 3;
10641 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
10642 break;
10643
10644 case OP_CHOICES:
10645 *oplenp = 3;
10646 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
10647 break;
10648
10649 case OP_STRING:
10650 case OP_NAME:
10651 {
10652 int len = longest_to_int (exp->elts[pc + 1].longconst);
10653 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
10654 *argsp = 0;
10655 break;
10656 }
10657 }
10658 }
10659
10660 static int
10661 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
10662 {
10663 enum exp_opcode op = exp->elts[elt].opcode;
10664 int oplen, nargs;
10665 int pc = elt;
10666 int i;
10667
10668 ada_forward_operator_length (exp, elt, &oplen, &nargs);
10669
10670 switch (op)
10671 {
10672 /* Ada attributes ('Foo). */
10673 case OP_ATR_FIRST:
10674 case OP_ATR_LAST:
10675 case OP_ATR_LENGTH:
10676 case OP_ATR_IMAGE:
10677 case OP_ATR_MAX:
10678 case OP_ATR_MIN:
10679 case OP_ATR_MODULUS:
10680 case OP_ATR_POS:
10681 case OP_ATR_SIZE:
10682 case OP_ATR_TAG:
10683 case OP_ATR_VAL:
10684 break;
10685
10686 case UNOP_IN_RANGE:
10687 case UNOP_QUAL:
10688 /* XXX: gdb_sprint_host_address, type_sprint */
10689 fprintf_filtered (stream, _("Type @"));
10690 gdb_print_host_address (exp->elts[pc + 1].type, stream);
10691 fprintf_filtered (stream, " (");
10692 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
10693 fprintf_filtered (stream, ")");
10694 break;
10695 case BINOP_IN_BOUNDS:
10696 fprintf_filtered (stream, " (%d)",
10697 longest_to_int (exp->elts[pc + 2].longconst));
10698 break;
10699 case TERNOP_IN_RANGE:
10700 break;
10701
10702 case OP_AGGREGATE:
10703 case OP_OTHERS:
10704 case OP_DISCRETE_RANGE:
10705 case OP_POSITIONAL:
10706 case OP_CHOICES:
10707 break;
10708
10709 case OP_NAME:
10710 case OP_STRING:
10711 {
10712 char *name = &exp->elts[elt + 2].string;
10713 int len = longest_to_int (exp->elts[elt + 1].longconst);
10714 fprintf_filtered (stream, "Text: `%.*s'", len, name);
10715 break;
10716 }
10717
10718 default:
10719 return dump_subexp_body_standard (exp, stream, elt);
10720 }
10721
10722 elt += oplen;
10723 for (i = 0; i < nargs; i += 1)
10724 elt = dump_subexp (exp, stream, elt);
10725
10726 return elt;
10727 }
10728
10729 /* The Ada extension of print_subexp (q.v.). */
10730
10731 static void
10732 ada_print_subexp (struct expression *exp, int *pos,
10733 struct ui_file *stream, enum precedence prec)
10734 {
10735 int oplen, nargs, i;
10736 int pc = *pos;
10737 enum exp_opcode op = exp->elts[pc].opcode;
10738
10739 ada_forward_operator_length (exp, pc, &oplen, &nargs);
10740
10741 *pos += oplen;
10742 switch (op)
10743 {
10744 default:
10745 *pos -= oplen;
10746 print_subexp_standard (exp, pos, stream, prec);
10747 return;
10748
10749 case OP_VAR_VALUE:
10750 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
10751 return;
10752
10753 case BINOP_IN_BOUNDS:
10754 /* XXX: sprint_subexp */
10755 print_subexp (exp, pos, stream, PREC_SUFFIX);
10756 fputs_filtered (" in ", stream);
10757 print_subexp (exp, pos, stream, PREC_SUFFIX);
10758 fputs_filtered ("'range", stream);
10759 if (exp->elts[pc + 1].longconst > 1)
10760 fprintf_filtered (stream, "(%ld)",
10761 (long) exp->elts[pc + 1].longconst);
10762 return;
10763
10764 case TERNOP_IN_RANGE:
10765 if (prec >= PREC_EQUAL)
10766 fputs_filtered ("(", stream);
10767 /* XXX: sprint_subexp */
10768 print_subexp (exp, pos, stream, PREC_SUFFIX);
10769 fputs_filtered (" in ", stream);
10770 print_subexp (exp, pos, stream, PREC_EQUAL);
10771 fputs_filtered (" .. ", stream);
10772 print_subexp (exp, pos, stream, PREC_EQUAL);
10773 if (prec >= PREC_EQUAL)
10774 fputs_filtered (")", stream);
10775 return;
10776
10777 case OP_ATR_FIRST:
10778 case OP_ATR_LAST:
10779 case OP_ATR_LENGTH:
10780 case OP_ATR_IMAGE:
10781 case OP_ATR_MAX:
10782 case OP_ATR_MIN:
10783 case OP_ATR_MODULUS:
10784 case OP_ATR_POS:
10785 case OP_ATR_SIZE:
10786 case OP_ATR_TAG:
10787 case OP_ATR_VAL:
10788 if (exp->elts[*pos].opcode == OP_TYPE)
10789 {
10790 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
10791 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
10792 *pos += 3;
10793 }
10794 else
10795 print_subexp (exp, pos, stream, PREC_SUFFIX);
10796 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
10797 if (nargs > 1)
10798 {
10799 int tem;
10800 for (tem = 1; tem < nargs; tem += 1)
10801 {
10802 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
10803 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
10804 }
10805 fputs_filtered (")", stream);
10806 }
10807 return;
10808
10809 case UNOP_QUAL:
10810 type_print (exp->elts[pc + 1].type, "", stream, 0);
10811 fputs_filtered ("'(", stream);
10812 print_subexp (exp, pos, stream, PREC_PREFIX);
10813 fputs_filtered (")", stream);
10814 return;
10815
10816 case UNOP_IN_RANGE:
10817 /* XXX: sprint_subexp */
10818 print_subexp (exp, pos, stream, PREC_SUFFIX);
10819 fputs_filtered (" in ", stream);
10820 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
10821 return;
10822
10823 case OP_DISCRETE_RANGE:
10824 print_subexp (exp, pos, stream, PREC_SUFFIX);
10825 fputs_filtered ("..", stream);
10826 print_subexp (exp, pos, stream, PREC_SUFFIX);
10827 return;
10828
10829 case OP_OTHERS:
10830 fputs_filtered ("others => ", stream);
10831 print_subexp (exp, pos, stream, PREC_SUFFIX);
10832 return;
10833
10834 case OP_CHOICES:
10835 for (i = 0; i < nargs-1; i += 1)
10836 {
10837 if (i > 0)
10838 fputs_filtered ("|", stream);
10839 print_subexp (exp, pos, stream, PREC_SUFFIX);
10840 }
10841 fputs_filtered (" => ", stream);
10842 print_subexp (exp, pos, stream, PREC_SUFFIX);
10843 return;
10844
10845 case OP_POSITIONAL:
10846 print_subexp (exp, pos, stream, PREC_SUFFIX);
10847 return;
10848
10849 case OP_AGGREGATE:
10850 fputs_filtered ("(", stream);
10851 for (i = 0; i < nargs; i += 1)
10852 {
10853 if (i > 0)
10854 fputs_filtered (", ", stream);
10855 print_subexp (exp, pos, stream, PREC_SUFFIX);
10856 }
10857 fputs_filtered (")", stream);
10858 return;
10859 }
10860 }
10861
10862 /* Table mapping opcodes into strings for printing operators
10863 and precedences of the operators. */
10864
10865 static const struct op_print ada_op_print_tab[] = {
10866 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
10867 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
10868 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
10869 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
10870 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
10871 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
10872 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
10873 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
10874 {"<=", BINOP_LEQ, PREC_ORDER, 0},
10875 {">=", BINOP_GEQ, PREC_ORDER, 0},
10876 {">", BINOP_GTR, PREC_ORDER, 0},
10877 {"<", BINOP_LESS, PREC_ORDER, 0},
10878 {">>", BINOP_RSH, PREC_SHIFT, 0},
10879 {"<<", BINOP_LSH, PREC_SHIFT, 0},
10880 {"+", BINOP_ADD, PREC_ADD, 0},
10881 {"-", BINOP_SUB, PREC_ADD, 0},
10882 {"&", BINOP_CONCAT, PREC_ADD, 0},
10883 {"*", BINOP_MUL, PREC_MUL, 0},
10884 {"/", BINOP_DIV, PREC_MUL, 0},
10885 {"rem", BINOP_REM, PREC_MUL, 0},
10886 {"mod", BINOP_MOD, PREC_MUL, 0},
10887 {"**", BINOP_EXP, PREC_REPEAT, 0},
10888 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
10889 {"-", UNOP_NEG, PREC_PREFIX, 0},
10890 {"+", UNOP_PLUS, PREC_PREFIX, 0},
10891 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
10892 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
10893 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
10894 {".all", UNOP_IND, PREC_SUFFIX, 1},
10895 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
10896 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
10897 {NULL, 0, 0, 0}
10898 };
10899 \f
10900 enum ada_primitive_types {
10901 ada_primitive_type_int,
10902 ada_primitive_type_long,
10903 ada_primitive_type_short,
10904 ada_primitive_type_char,
10905 ada_primitive_type_float,
10906 ada_primitive_type_double,
10907 ada_primitive_type_void,
10908 ada_primitive_type_long_long,
10909 ada_primitive_type_long_double,
10910 ada_primitive_type_natural,
10911 ada_primitive_type_positive,
10912 ada_primitive_type_system_address,
10913 nr_ada_primitive_types
10914 };
10915
10916 static void
10917 ada_language_arch_info (struct gdbarch *gdbarch,
10918 struct language_arch_info *lai)
10919 {
10920 const struct builtin_type *builtin = builtin_type (gdbarch);
10921 lai->primitive_type_vector
10922 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
10923 struct type *);
10924 lai->primitive_type_vector [ada_primitive_type_int] =
10925 init_type (TYPE_CODE_INT,
10926 gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10927 0, "integer", (struct objfile *) NULL);
10928 lai->primitive_type_vector [ada_primitive_type_long] =
10929 init_type (TYPE_CODE_INT,
10930 gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT,
10931 0, "long_integer", (struct objfile *) NULL);
10932 lai->primitive_type_vector [ada_primitive_type_short] =
10933 init_type (TYPE_CODE_INT,
10934 gdbarch_short_bit (gdbarch) / TARGET_CHAR_BIT,
10935 0, "short_integer", (struct objfile *) NULL);
10936 lai->string_char_type =
10937 lai->primitive_type_vector [ada_primitive_type_char] =
10938 init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10939 0, "character", (struct objfile *) NULL);
10940 lai->primitive_type_vector [ada_primitive_type_float] =
10941 init_type (TYPE_CODE_FLT,
10942 gdbarch_float_bit (gdbarch)/ TARGET_CHAR_BIT,
10943 0, "float", (struct objfile *) NULL);
10944 lai->primitive_type_vector [ada_primitive_type_double] =
10945 init_type (TYPE_CODE_FLT,
10946 gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT,
10947 0, "long_float", (struct objfile *) NULL);
10948 lai->primitive_type_vector [ada_primitive_type_long_long] =
10949 init_type (TYPE_CODE_INT,
10950 gdbarch_long_long_bit (gdbarch) / TARGET_CHAR_BIT,
10951 0, "long_long_integer", (struct objfile *) NULL);
10952 lai->primitive_type_vector [ada_primitive_type_long_double] =
10953 init_type (TYPE_CODE_FLT,
10954 gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT,
10955 0, "long_long_float", (struct objfile *) NULL);
10956 lai->primitive_type_vector [ada_primitive_type_natural] =
10957 init_type (TYPE_CODE_INT,
10958 gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10959 0, "natural", (struct objfile *) NULL);
10960 lai->primitive_type_vector [ada_primitive_type_positive] =
10961 init_type (TYPE_CODE_INT,
10962 gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10963 0, "positive", (struct objfile *) NULL);
10964 lai->primitive_type_vector [ada_primitive_type_void] = builtin->builtin_void;
10965
10966 lai->primitive_type_vector [ada_primitive_type_system_address] =
10967 lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
10968 (struct objfile *) NULL));
10969 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
10970 = "system__address";
10971
10972 lai->bool_type_symbol = "boolean";
10973 lai->bool_type_default = builtin->builtin_bool;
10974 }
10975 \f
10976 /* Language vector */
10977
10978 /* Not really used, but needed in the ada_language_defn. */
10979
10980 static void
10981 emit_char (int c, struct ui_file *stream, int quoter)
10982 {
10983 ada_emit_char (c, stream, quoter, 1);
10984 }
10985
10986 static int
10987 parse (void)
10988 {
10989 warnings_issued = 0;
10990 return ada_parse ();
10991 }
10992
10993 static const struct exp_descriptor ada_exp_descriptor = {
10994 ada_print_subexp,
10995 ada_operator_length,
10996 ada_op_name,
10997 ada_dump_subexp_body,
10998 ada_evaluate_subexp
10999 };
11000
11001 const struct language_defn ada_language_defn = {
11002 "ada", /* Language name */
11003 language_ada,
11004 range_check_off,
11005 type_check_off,
11006 case_sensitive_on, /* Yes, Ada is case-insensitive, but
11007 that's not quite what this means. */
11008 array_row_major,
11009 macro_expansion_no,
11010 &ada_exp_descriptor,
11011 parse,
11012 ada_error,
11013 resolve,
11014 ada_printchar, /* Print a character constant */
11015 ada_printstr, /* Function to print string constant */
11016 emit_char, /* Function to print single char (not used) */
11017 ada_print_type, /* Print a type using appropriate syntax */
11018 default_print_typedef, /* Print a typedef using appropriate syntax */
11019 ada_val_print, /* Print a value using appropriate syntax */
11020 ada_value_print, /* Print a top-level value */
11021 NULL, /* Language specific skip_trampoline */
11022 NULL, /* name_of_this */
11023 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
11024 basic_lookup_transparent_type, /* lookup_transparent_type */
11025 ada_la_decode, /* Language specific symbol demangler */
11026 NULL, /* Language specific class_name_from_physname */
11027 ada_op_print_tab, /* expression operators for printing */
11028 0, /* c-style arrays */
11029 1, /* String lower bound */
11030 ada_get_gdb_completer_word_break_characters,
11031 ada_make_symbol_completion_list,
11032 ada_language_arch_info,
11033 ada_print_array_index,
11034 default_pass_by_reference,
11035 LANG_MAGIC
11036 };
11037
11038 void
11039 _initialize_ada_language (void)
11040 {
11041 add_language (&ada_language_defn);
11042
11043 varsize_limit = 65536;
11044
11045 obstack_init (&symbol_list_obstack);
11046
11047 decoded_names_store = htab_create_alloc
11048 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
11049 NULL, xcalloc, xfree);
11050
11051 observer_attach_executable_changed (ada_executable_changed_observer);
11052 }