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