c171e03b339302aac7d012e2f1fde021e8421d18
[deliverable/binutils-gdb.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3 Copyright (C) 1992-2021 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20
21 #include "defs.h"
22 #include <ctype.h>
23 #include "gdb_regex.h"
24 #include "frame.h"
25 #include "symtab.h"
26 #include "gdbtypes.h"
27 #include "gdbcmd.h"
28 #include "expression.h"
29 #include "parser-defs.h"
30 #include "language.h"
31 #include "varobj.h"
32 #include "inferior.h"
33 #include "symfile.h"
34 #include "objfiles.h"
35 #include "breakpoint.h"
36 #include "gdbcore.h"
37 #include "hashtab.h"
38 #include "gdb_obstack.h"
39 #include "ada-lang.h"
40 #include "completer.h"
41 #include "ui-out.h"
42 #include "block.h"
43 #include "infcall.h"
44 #include "annotate.h"
45 #include "valprint.h"
46 #include "source.h"
47 #include "observable.h"
48 #include "stack.h"
49 #include "typeprint.h"
50 #include "namespace.h"
51 #include "cli/cli-style.h"
52
53 #include "value.h"
54 #include "mi/mi-common.h"
55 #include "arch-utils.h"
56 #include "cli/cli-utils.h"
57 #include "gdbsupport/function-view.h"
58 #include "gdbsupport/byte-vector.h"
59 #include <algorithm>
60
61 /* Define whether or not the C operator '/' truncates towards zero for
62 differently signed operands (truncation direction is undefined in C).
63 Copied from valarith.c. */
64
65 #ifndef TRUNCATION_TOWARDS_ZERO
66 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
67 #endif
68
69 static struct type *desc_base_type (struct type *);
70
71 static struct type *desc_bounds_type (struct type *);
72
73 static struct value *desc_bounds (struct value *);
74
75 static int fat_pntr_bounds_bitpos (struct type *);
76
77 static int fat_pntr_bounds_bitsize (struct type *);
78
79 static struct type *desc_data_target_type (struct type *);
80
81 static struct value *desc_data (struct value *);
82
83 static int fat_pntr_data_bitpos (struct type *);
84
85 static int fat_pntr_data_bitsize (struct type *);
86
87 static struct value *desc_one_bound (struct value *, int, int);
88
89 static int desc_bound_bitpos (struct type *, int, int);
90
91 static int desc_bound_bitsize (struct type *, int, int);
92
93 static struct type *desc_index_type (struct type *, int);
94
95 static int desc_arity (struct type *);
96
97 static int ada_type_match (struct type *, struct type *, int);
98
99 static int ada_args_match (struct symbol *, struct value **, int);
100
101 static struct value *make_array_descriptor (struct type *, struct value *);
102
103 static void ada_add_block_symbols (std::vector<struct block_symbol> &,
104 const struct block *,
105 const lookup_name_info &lookup_name,
106 domain_enum, struct objfile *);
107
108 static void ada_add_all_symbols (std::vector<struct block_symbol> &,
109 const struct block *,
110 const lookup_name_info &lookup_name,
111 domain_enum, int, int *);
112
113 static int is_nonfunction (const std::vector<struct block_symbol> &);
114
115 static void add_defn_to_vec (std::vector<struct block_symbol> &,
116 struct symbol *,
117 const struct block *);
118
119 static struct value *resolve_subexp (expression_up *, int *, int,
120 struct type *, int,
121 innermost_block_tracker *);
122
123 static void replace_operator_with_call (expression_up *, int, int, int,
124 struct symbol *, const struct block *);
125
126 static int possible_user_operator_p (enum exp_opcode, struct value **);
127
128 static const char *ada_decoded_op_name (enum exp_opcode);
129
130 static int numeric_type_p (struct type *);
131
132 static int integer_type_p (struct type *);
133
134 static int scalar_type_p (struct type *);
135
136 static int discrete_type_p (struct type *);
137
138 static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
139 int, int);
140
141 static struct value *evaluate_subexp_type (struct expression *, int *);
142
143 static struct type *ada_find_parallel_type_with_name (struct type *,
144 const char *);
145
146 static int is_dynamic_field (struct type *, int);
147
148 static struct type *to_fixed_variant_branch_type (struct type *,
149 const gdb_byte *,
150 CORE_ADDR, struct value *);
151
152 static struct type *to_fixed_array_type (struct type *, struct value *, int);
153
154 static struct type *to_fixed_range_type (struct type *, struct value *);
155
156 static struct type *to_static_fixed_type (struct type *);
157 static struct type *static_unwrap_type (struct type *type);
158
159 static struct value *unwrap_value (struct value *);
160
161 static struct type *constrained_packed_array_type (struct type *, long *);
162
163 static struct type *decode_constrained_packed_array_type (struct type *);
164
165 static long decode_packed_array_bitsize (struct type *);
166
167 static struct value *decode_constrained_packed_array (struct value *);
168
169 static int ada_is_unconstrained_packed_array_type (struct type *);
170
171 static struct value *value_subscript_packed (struct value *, int,
172 struct value **);
173
174 static struct value *coerce_unspec_val_to_type (struct value *,
175 struct type *);
176
177 static int lesseq_defined_than (struct symbol *, struct symbol *);
178
179 static int equiv_types (struct type *, struct type *);
180
181 static int is_name_suffix (const char *);
182
183 static int advance_wild_match (const char **, const char *, char);
184
185 static bool wild_match (const char *name, const char *patn);
186
187 static struct value *ada_coerce_ref (struct value *);
188
189 static LONGEST pos_atr (struct value *);
190
191 static struct value *value_pos_atr (struct type *, struct value *);
192
193 static struct value *val_atr (struct type *, LONGEST);
194
195 static struct value *value_val_atr (struct type *, struct value *);
196
197 static struct symbol *standard_lookup (const char *, const struct block *,
198 domain_enum);
199
200 static struct value *ada_search_struct_field (const char *, struct value *, int,
201 struct type *);
202
203 static int find_struct_field (const char *, struct type *, int,
204 struct type **, int *, int *, int *, int *);
205
206 static int ada_resolve_function (std::vector<struct block_symbol> &,
207 struct value **, int, const char *,
208 struct type *, int);
209
210 static int ada_is_direct_array_type (struct type *);
211
212 static struct value *ada_index_struct_field (int, struct value *, int,
213 struct type *);
214
215 static struct value *assign_aggregate (struct value *, struct value *,
216 struct expression *,
217 int *, enum noside);
218
219 static void aggregate_assign_from_choices (struct value *, struct value *,
220 struct expression *,
221 int *, std::vector<LONGEST> &,
222 LONGEST, LONGEST);
223
224 static void aggregate_assign_positional (struct value *, struct value *,
225 struct expression *,
226 int *, std::vector<LONGEST> &,
227 LONGEST, LONGEST);
228
229
230 static void aggregate_assign_others (struct value *, struct value *,
231 struct expression *,
232 int *, std::vector<LONGEST> &,
233 LONGEST, LONGEST);
234
235
236 static void add_component_interval (LONGEST, LONGEST, std::vector<LONGEST> &);
237
238
239 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
240 int *, enum noside);
241
242 static void ada_forward_operator_length (struct expression *, int, int *,
243 int *);
244
245 static struct type *ada_find_any_type (const char *name);
246
247 static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
248 (const lookup_name_info &lookup_name);
249
250 \f
251
252 /* The result of a symbol lookup to be stored in our symbol cache. */
253
254 struct cache_entry
255 {
256 /* The name used to perform the lookup. */
257 const char *name;
258 /* The namespace used during the lookup. */
259 domain_enum domain;
260 /* The symbol returned by the lookup, or NULL if no matching symbol
261 was found. */
262 struct symbol *sym;
263 /* The block where the symbol was found, or NULL if no matching
264 symbol was found. */
265 const struct block *block;
266 /* A pointer to the next entry with the same hash. */
267 struct cache_entry *next;
268 };
269
270 /* The Ada symbol cache, used to store the result of Ada-mode symbol
271 lookups in the course of executing the user's commands.
272
273 The cache is implemented using a simple, fixed-sized hash.
274 The size is fixed on the grounds that there are not likely to be
275 all that many symbols looked up during any given session, regardless
276 of the size of the symbol table. If we decide to go to a resizable
277 table, let's just use the stuff from libiberty instead. */
278
279 #define HASH_SIZE 1009
280
281 struct ada_symbol_cache
282 {
283 /* An obstack used to store the entries in our cache. */
284 struct auto_obstack cache_space;
285
286 /* The root of the hash table used to implement our symbol cache. */
287 struct cache_entry *root[HASH_SIZE] {};
288 };
289
290 /* Maximum-sized dynamic type. */
291 static unsigned int varsize_limit;
292
293 static const char ada_completer_word_break_characters[] =
294 #ifdef VMS
295 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
296 #else
297 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
298 #endif
299
300 /* The name of the symbol to use to get the name of the main subprogram. */
301 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
302 = "__gnat_ada_main_program_name";
303
304 /* Limit on the number of warnings to raise per expression evaluation. */
305 static int warning_limit = 2;
306
307 /* Number of warning messages issued; reset to 0 by cleanups after
308 expression evaluation. */
309 static int warnings_issued = 0;
310
311 static const char * const known_runtime_file_name_patterns[] = {
312 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
313 };
314
315 static const char * const known_auxiliary_function_name_patterns[] = {
316 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
317 };
318
319 /* Maintenance-related settings for this module. */
320
321 static struct cmd_list_element *maint_set_ada_cmdlist;
322 static struct cmd_list_element *maint_show_ada_cmdlist;
323
324 /* The "maintenance ada set/show ignore-descriptive-type" value. */
325
326 static bool ada_ignore_descriptive_types_p = false;
327
328 /* Inferior-specific data. */
329
330 /* Per-inferior data for this module. */
331
332 struct ada_inferior_data
333 {
334 /* The ada__tags__type_specific_data type, which is used when decoding
335 tagged types. With older versions of GNAT, this type was directly
336 accessible through a component ("tsd") in the object tag. But this
337 is no longer the case, so we cache it for each inferior. */
338 struct type *tsd_type = nullptr;
339
340 /* The exception_support_info data. This data is used to determine
341 how to implement support for Ada exception catchpoints in a given
342 inferior. */
343 const struct exception_support_info *exception_info = nullptr;
344 };
345
346 /* Our key to this module's inferior data. */
347 static const struct inferior_key<ada_inferior_data> ada_inferior_data;
348
349 /* Return our inferior data for the given inferior (INF).
350
351 This function always returns a valid pointer to an allocated
352 ada_inferior_data structure. If INF's inferior data has not
353 been previously set, this functions creates a new one with all
354 fields set to zero, sets INF's inferior to it, and then returns
355 a pointer to that newly allocated ada_inferior_data. */
356
357 static struct ada_inferior_data *
358 get_ada_inferior_data (struct inferior *inf)
359 {
360 struct ada_inferior_data *data;
361
362 data = ada_inferior_data.get (inf);
363 if (data == NULL)
364 data = ada_inferior_data.emplace (inf);
365
366 return data;
367 }
368
369 /* Perform all necessary cleanups regarding our module's inferior data
370 that is required after the inferior INF just exited. */
371
372 static void
373 ada_inferior_exit (struct inferior *inf)
374 {
375 ada_inferior_data.clear (inf);
376 }
377
378
379 /* program-space-specific data. */
380
381 /* This module's per-program-space data. */
382 struct ada_pspace_data
383 {
384 /* The Ada symbol cache. */
385 std::unique_ptr<ada_symbol_cache> sym_cache;
386 };
387
388 /* Key to our per-program-space data. */
389 static const struct program_space_key<ada_pspace_data> ada_pspace_data_handle;
390
391 /* Return this module's data for the given program space (PSPACE).
392 If not is found, add a zero'ed one now.
393
394 This function always returns a valid object. */
395
396 static struct ada_pspace_data *
397 get_ada_pspace_data (struct program_space *pspace)
398 {
399 struct ada_pspace_data *data;
400
401 data = ada_pspace_data_handle.get (pspace);
402 if (data == NULL)
403 data = ada_pspace_data_handle.emplace (pspace);
404
405 return data;
406 }
407
408 /* Utilities */
409
410 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
411 all typedef layers have been peeled. Otherwise, return TYPE.
412
413 Normally, we really expect a typedef type to only have 1 typedef layer.
414 In other words, we really expect the target type of a typedef type to be
415 a non-typedef type. This is particularly true for Ada units, because
416 the language does not have a typedef vs not-typedef distinction.
417 In that respect, the Ada compiler has been trying to eliminate as many
418 typedef definitions in the debugging information, since they generally
419 do not bring any extra information (we still use typedef under certain
420 circumstances related mostly to the GNAT encoding).
421
422 Unfortunately, we have seen situations where the debugging information
423 generated by the compiler leads to such multiple typedef layers. For
424 instance, consider the following example with stabs:
425
426 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
427 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
428
429 This is an error in the debugging information which causes type
430 pck__float_array___XUP to be defined twice, and the second time,
431 it is defined as a typedef of a typedef.
432
433 This is on the fringe of legality as far as debugging information is
434 concerned, and certainly unexpected. But it is easy to handle these
435 situations correctly, so we can afford to be lenient in this case. */
436
437 static struct type *
438 ada_typedef_target_type (struct type *type)
439 {
440 while (type->code () == TYPE_CODE_TYPEDEF)
441 type = TYPE_TARGET_TYPE (type);
442 return type;
443 }
444
445 /* Given DECODED_NAME a string holding a symbol name in its
446 decoded form (ie using the Ada dotted notation), returns
447 its unqualified name. */
448
449 static const char *
450 ada_unqualified_name (const char *decoded_name)
451 {
452 const char *result;
453
454 /* If the decoded name starts with '<', it means that the encoded
455 name does not follow standard naming conventions, and thus that
456 it is not your typical Ada symbol name. Trying to unqualify it
457 is therefore pointless and possibly erroneous. */
458 if (decoded_name[0] == '<')
459 return decoded_name;
460
461 result = strrchr (decoded_name, '.');
462 if (result != NULL)
463 result++; /* Skip the dot... */
464 else
465 result = decoded_name;
466
467 return result;
468 }
469
470 /* Return a string starting with '<', followed by STR, and '>'. */
471
472 static std::string
473 add_angle_brackets (const char *str)
474 {
475 return string_printf ("<%s>", str);
476 }
477
478 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
479 suffix of FIELD_NAME beginning "___". */
480
481 static int
482 field_name_match (const char *field_name, const char *target)
483 {
484 int len = strlen (target);
485
486 return
487 (strncmp (field_name, target, len) == 0
488 && (field_name[len] == '\0'
489 || (startswith (field_name + len, "___")
490 && strcmp (field_name + strlen (field_name) - 6,
491 "___XVN") != 0)));
492 }
493
494
495 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
496 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
497 and return its index. This function also handles fields whose name
498 have ___ suffixes because the compiler sometimes alters their name
499 by adding such a suffix to represent fields with certain constraints.
500 If the field could not be found, return a negative number if
501 MAYBE_MISSING is set. Otherwise raise an error. */
502
503 int
504 ada_get_field_index (const struct type *type, const char *field_name,
505 int maybe_missing)
506 {
507 int fieldno;
508 struct type *struct_type = check_typedef ((struct type *) type);
509
510 for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++)
511 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
512 return fieldno;
513
514 if (!maybe_missing)
515 error (_("Unable to find field %s in struct %s. Aborting"),
516 field_name, struct_type->name ());
517
518 return -1;
519 }
520
521 /* The length of the prefix of NAME prior to any "___" suffix. */
522
523 int
524 ada_name_prefix_len (const char *name)
525 {
526 if (name == NULL)
527 return 0;
528 else
529 {
530 const char *p = strstr (name, "___");
531
532 if (p == NULL)
533 return strlen (name);
534 else
535 return p - name;
536 }
537 }
538
539 /* Return non-zero if SUFFIX is a suffix of STR.
540 Return zero if STR is null. */
541
542 static int
543 is_suffix (const char *str, const char *suffix)
544 {
545 int len1, len2;
546
547 if (str == NULL)
548 return 0;
549 len1 = strlen (str);
550 len2 = strlen (suffix);
551 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
552 }
553
554 /* The contents of value VAL, treated as a value of type TYPE. The
555 result is an lval in memory if VAL is. */
556
557 static struct value *
558 coerce_unspec_val_to_type (struct value *val, struct type *type)
559 {
560 type = ada_check_typedef (type);
561 if (value_type (val) == type)
562 return val;
563 else
564 {
565 struct value *result;
566
567 /* Make sure that the object size is not unreasonable before
568 trying to allocate some memory for it. */
569 ada_ensure_varsize_limit (type);
570
571 if (value_optimized_out (val))
572 result = allocate_optimized_out_value (type);
573 else if (value_lazy (val)
574 /* Be careful not to make a lazy not_lval value. */
575 || (VALUE_LVAL (val) != not_lval
576 && TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))))
577 result = allocate_value_lazy (type);
578 else
579 {
580 result = allocate_value (type);
581 value_contents_copy (result, 0, val, 0, TYPE_LENGTH (type));
582 }
583 set_value_component_location (result, val);
584 set_value_bitsize (result, value_bitsize (val));
585 set_value_bitpos (result, value_bitpos (val));
586 if (VALUE_LVAL (result) == lval_memory)
587 set_value_address (result, value_address (val));
588 return result;
589 }
590 }
591
592 static const gdb_byte *
593 cond_offset_host (const gdb_byte *valaddr, long offset)
594 {
595 if (valaddr == NULL)
596 return NULL;
597 else
598 return valaddr + offset;
599 }
600
601 static CORE_ADDR
602 cond_offset_target (CORE_ADDR address, long offset)
603 {
604 if (address == 0)
605 return 0;
606 else
607 return address + offset;
608 }
609
610 /* Issue a warning (as for the definition of warning in utils.c, but
611 with exactly one argument rather than ...), unless the limit on the
612 number of warnings has passed during the evaluation of the current
613 expression. */
614
615 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
616 provided by "complaint". */
617 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
618
619 static void
620 lim_warning (const char *format, ...)
621 {
622 va_list args;
623
624 va_start (args, format);
625 warnings_issued += 1;
626 if (warnings_issued <= warning_limit)
627 vwarning (format, args);
628
629 va_end (args);
630 }
631
632 /* Issue an error if the size of an object of type T is unreasonable,
633 i.e. if it would be a bad idea to allocate a value of this type in
634 GDB. */
635
636 void
637 ada_ensure_varsize_limit (const struct type *type)
638 {
639 if (TYPE_LENGTH (type) > varsize_limit)
640 error (_("object size is larger than varsize-limit"));
641 }
642
643 /* Maximum value of a SIZE-byte signed integer type. */
644 static LONGEST
645 max_of_size (int size)
646 {
647 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
648
649 return top_bit | (top_bit - 1);
650 }
651
652 /* Minimum value of a SIZE-byte signed integer type. */
653 static LONGEST
654 min_of_size (int size)
655 {
656 return -max_of_size (size) - 1;
657 }
658
659 /* Maximum value of a SIZE-byte unsigned integer type. */
660 static ULONGEST
661 umax_of_size (int size)
662 {
663 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
664
665 return top_bit | (top_bit - 1);
666 }
667
668 /* Maximum value of integral type T, as a signed quantity. */
669 static LONGEST
670 max_of_type (struct type *t)
671 {
672 if (t->is_unsigned ())
673 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
674 else
675 return max_of_size (TYPE_LENGTH (t));
676 }
677
678 /* Minimum value of integral type T, as a signed quantity. */
679 static LONGEST
680 min_of_type (struct type *t)
681 {
682 if (t->is_unsigned ())
683 return 0;
684 else
685 return min_of_size (TYPE_LENGTH (t));
686 }
687
688 /* The largest value in the domain of TYPE, a discrete type, as an integer. */
689 LONGEST
690 ada_discrete_type_high_bound (struct type *type)
691 {
692 type = resolve_dynamic_type (type, {}, 0);
693 switch (type->code ())
694 {
695 case TYPE_CODE_RANGE:
696 {
697 const dynamic_prop &high = type->bounds ()->high;
698
699 if (high.kind () == PROP_CONST)
700 return high.const_val ();
701 else
702 {
703 gdb_assert (high.kind () == PROP_UNDEFINED);
704
705 /* This happens when trying to evaluate a type's dynamic bound
706 without a live target. There is nothing relevant for us to
707 return here, so return 0. */
708 return 0;
709 }
710 }
711 case TYPE_CODE_ENUM:
712 return TYPE_FIELD_ENUMVAL (type, type->num_fields () - 1);
713 case TYPE_CODE_BOOL:
714 return 1;
715 case TYPE_CODE_CHAR:
716 case TYPE_CODE_INT:
717 return max_of_type (type);
718 default:
719 error (_("Unexpected type in ada_discrete_type_high_bound."));
720 }
721 }
722
723 /* The smallest value in the domain of TYPE, a discrete type, as an integer. */
724 LONGEST
725 ada_discrete_type_low_bound (struct type *type)
726 {
727 type = resolve_dynamic_type (type, {}, 0);
728 switch (type->code ())
729 {
730 case TYPE_CODE_RANGE:
731 {
732 const dynamic_prop &low = type->bounds ()->low;
733
734 if (low.kind () == PROP_CONST)
735 return low.const_val ();
736 else
737 {
738 gdb_assert (low.kind () == PROP_UNDEFINED);
739
740 /* This happens when trying to evaluate a type's dynamic bound
741 without a live target. There is nothing relevant for us to
742 return here, so return 0. */
743 return 0;
744 }
745 }
746 case TYPE_CODE_ENUM:
747 return TYPE_FIELD_ENUMVAL (type, 0);
748 case TYPE_CODE_BOOL:
749 return 0;
750 case TYPE_CODE_CHAR:
751 case TYPE_CODE_INT:
752 return min_of_type (type);
753 default:
754 error (_("Unexpected type in ada_discrete_type_low_bound."));
755 }
756 }
757
758 /* The identity on non-range types. For range types, the underlying
759 non-range scalar type. */
760
761 static struct type *
762 get_base_type (struct type *type)
763 {
764 while (type != NULL && type->code () == TYPE_CODE_RANGE)
765 {
766 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
767 return type;
768 type = TYPE_TARGET_TYPE (type);
769 }
770 return type;
771 }
772
773 /* Return a decoded version of the given VALUE. This means returning
774 a value whose type is obtained by applying all the GNAT-specific
775 encodings, making the resulting type a static but standard description
776 of the initial type. */
777
778 struct value *
779 ada_get_decoded_value (struct value *value)
780 {
781 struct type *type = ada_check_typedef (value_type (value));
782
783 if (ada_is_array_descriptor_type (type)
784 || (ada_is_constrained_packed_array_type (type)
785 && type->code () != TYPE_CODE_PTR))
786 {
787 if (type->code () == TYPE_CODE_TYPEDEF) /* array access type. */
788 value = ada_coerce_to_simple_array_ptr (value);
789 else
790 value = ada_coerce_to_simple_array (value);
791 }
792 else
793 value = ada_to_fixed_value (value);
794
795 return value;
796 }
797
798 /* Same as ada_get_decoded_value, but with the given TYPE.
799 Because there is no associated actual value for this type,
800 the resulting type might be a best-effort approximation in
801 the case of dynamic types. */
802
803 struct type *
804 ada_get_decoded_type (struct type *type)
805 {
806 type = to_static_fixed_type (type);
807 if (ada_is_constrained_packed_array_type (type))
808 type = ada_coerce_to_simple_array_type (type);
809 return type;
810 }
811
812 \f
813
814 /* Language Selection */
815
816 /* If the main program is in Ada, return language_ada, otherwise return LANG
817 (the main program is in Ada iif the adainit symbol is found). */
818
819 static enum language
820 ada_update_initial_language (enum language lang)
821 {
822 if (lookup_minimal_symbol ("adainit", NULL, NULL).minsym != NULL)
823 return language_ada;
824
825 return lang;
826 }
827
828 /* If the main procedure is written in Ada, then return its name.
829 The result is good until the next call. Return NULL if the main
830 procedure doesn't appear to be in Ada. */
831
832 char *
833 ada_main_name (void)
834 {
835 struct bound_minimal_symbol msym;
836 static gdb::unique_xmalloc_ptr<char> main_program_name;
837
838 /* For Ada, the name of the main procedure is stored in a specific
839 string constant, generated by the binder. Look for that symbol,
840 extract its address, and then read that string. If we didn't find
841 that string, then most probably the main procedure is not written
842 in Ada. */
843 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
844
845 if (msym.minsym != NULL)
846 {
847 CORE_ADDR main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
848 if (main_program_name_addr == 0)
849 error (_("Invalid address for Ada main program name."));
850
851 main_program_name = target_read_string (main_program_name_addr, 1024);
852 return main_program_name.get ();
853 }
854
855 /* The main procedure doesn't seem to be in Ada. */
856 return NULL;
857 }
858 \f
859 /* Symbols */
860
861 /* Table of Ada operators and their GNAT-encoded names. Last entry is pair
862 of NULLs. */
863
864 const struct ada_opname_map ada_opname_table[] = {
865 {"Oadd", "\"+\"", BINOP_ADD},
866 {"Osubtract", "\"-\"", BINOP_SUB},
867 {"Omultiply", "\"*\"", BINOP_MUL},
868 {"Odivide", "\"/\"", BINOP_DIV},
869 {"Omod", "\"mod\"", BINOP_MOD},
870 {"Orem", "\"rem\"", BINOP_REM},
871 {"Oexpon", "\"**\"", BINOP_EXP},
872 {"Olt", "\"<\"", BINOP_LESS},
873 {"Ole", "\"<=\"", BINOP_LEQ},
874 {"Ogt", "\">\"", BINOP_GTR},
875 {"Oge", "\">=\"", BINOP_GEQ},
876 {"Oeq", "\"=\"", BINOP_EQUAL},
877 {"One", "\"/=\"", BINOP_NOTEQUAL},
878 {"Oand", "\"and\"", BINOP_BITWISE_AND},
879 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
880 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
881 {"Oconcat", "\"&\"", BINOP_CONCAT},
882 {"Oabs", "\"abs\"", UNOP_ABS},
883 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
884 {"Oadd", "\"+\"", UNOP_PLUS},
885 {"Osubtract", "\"-\"", UNOP_NEG},
886 {NULL, NULL}
887 };
888
889 /* The "encoded" form of DECODED, according to GNAT conventions. If
890 THROW_ERRORS, throw an error if invalid operator name is found.
891 Otherwise, return the empty string in that case. */
892
893 static std::string
894 ada_encode_1 (const char *decoded, bool throw_errors)
895 {
896 if (decoded == NULL)
897 return {};
898
899 std::string encoding_buffer;
900 for (const char *p = decoded; *p != '\0'; p += 1)
901 {
902 if (*p == '.')
903 encoding_buffer.append ("__");
904 else if (*p == '"')
905 {
906 const struct ada_opname_map *mapping;
907
908 for (mapping = ada_opname_table;
909 mapping->encoded != NULL
910 && !startswith (p, mapping->decoded); mapping += 1)
911 ;
912 if (mapping->encoded == NULL)
913 {
914 if (throw_errors)
915 error (_("invalid Ada operator name: %s"), p);
916 else
917 return {};
918 }
919 encoding_buffer.append (mapping->encoded);
920 break;
921 }
922 else
923 encoding_buffer.push_back (*p);
924 }
925
926 return encoding_buffer;
927 }
928
929 /* The "encoded" form of DECODED, according to GNAT conventions. */
930
931 std::string
932 ada_encode (const char *decoded)
933 {
934 return ada_encode_1 (decoded, true);
935 }
936
937 /* Return NAME folded to lower case, or, if surrounded by single
938 quotes, unfolded, but with the quotes stripped away. Result good
939 to next call. */
940
941 static const char *
942 ada_fold_name (gdb::string_view name)
943 {
944 static std::string fold_storage;
945
946 if (!name.empty () && name[0] == '\'')
947 fold_storage = gdb::to_string (name.substr (1, name.size () - 2));
948 else
949 {
950 fold_storage = gdb::to_string (name);
951 for (int i = 0; i < name.size (); i += 1)
952 fold_storage[i] = tolower (fold_storage[i]);
953 }
954
955 return fold_storage.c_str ();
956 }
957
958 /* Return nonzero if C is either a digit or a lowercase alphabet character. */
959
960 static int
961 is_lower_alphanum (const char c)
962 {
963 return (isdigit (c) || (isalpha (c) && islower (c)));
964 }
965
966 /* ENCODED is the linkage name of a symbol and LEN contains its length.
967 This function saves in LEN the length of that same symbol name but
968 without either of these suffixes:
969 . .{DIGIT}+
970 . ${DIGIT}+
971 . ___{DIGIT}+
972 . __{DIGIT}+.
973
974 These are suffixes introduced by the compiler for entities such as
975 nested subprogram for instance, in order to avoid name clashes.
976 They do not serve any purpose for the debugger. */
977
978 static void
979 ada_remove_trailing_digits (const char *encoded, int *len)
980 {
981 if (*len > 1 && isdigit (encoded[*len - 1]))
982 {
983 int i = *len - 2;
984
985 while (i > 0 && isdigit (encoded[i]))
986 i--;
987 if (i >= 0 && encoded[i] == '.')
988 *len = i;
989 else if (i >= 0 && encoded[i] == '$')
990 *len = i;
991 else if (i >= 2 && startswith (encoded + i - 2, "___"))
992 *len = i - 2;
993 else if (i >= 1 && startswith (encoded + i - 1, "__"))
994 *len = i - 1;
995 }
996 }
997
998 /* Remove the suffix introduced by the compiler for protected object
999 subprograms. */
1000
1001 static void
1002 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1003 {
1004 /* Remove trailing N. */
1005
1006 /* Protected entry subprograms are broken into two
1007 separate subprograms: The first one is unprotected, and has
1008 a 'N' suffix; the second is the protected version, and has
1009 the 'P' suffix. The second calls the first one after handling
1010 the protection. Since the P subprograms are internally generated,
1011 we leave these names undecoded, giving the user a clue that this
1012 entity is internal. */
1013
1014 if (*len > 1
1015 && encoded[*len - 1] == 'N'
1016 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1017 *len = *len - 1;
1018 }
1019
1020 /* If ENCODED follows the GNAT entity encoding conventions, then return
1021 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
1022 replaced by ENCODED. */
1023
1024 std::string
1025 ada_decode (const char *encoded)
1026 {
1027 int i, j;
1028 int len0;
1029 const char *p;
1030 int at_start_name;
1031 std::string decoded;
1032
1033 /* With function descriptors on PPC64, the value of a symbol named
1034 ".FN", if it exists, is the entry point of the function "FN". */
1035 if (encoded[0] == '.')
1036 encoded += 1;
1037
1038 /* The name of the Ada main procedure starts with "_ada_".
1039 This prefix is not part of the decoded name, so skip this part
1040 if we see this prefix. */
1041 if (startswith (encoded, "_ada_"))
1042 encoded += 5;
1043
1044 /* If the name starts with '_', then it is not a properly encoded
1045 name, so do not attempt to decode it. Similarly, if the name
1046 starts with '<', the name should not be decoded. */
1047 if (encoded[0] == '_' || encoded[0] == '<')
1048 goto Suppress;
1049
1050 len0 = strlen (encoded);
1051
1052 ada_remove_trailing_digits (encoded, &len0);
1053 ada_remove_po_subprogram_suffix (encoded, &len0);
1054
1055 /* Remove the ___X.* suffix if present. Do not forget to verify that
1056 the suffix is located before the current "end" of ENCODED. We want
1057 to avoid re-matching parts of ENCODED that have previously been
1058 marked as discarded (by decrementing LEN0). */
1059 p = strstr (encoded, "___");
1060 if (p != NULL && p - encoded < len0 - 3)
1061 {
1062 if (p[3] == 'X')
1063 len0 = p - encoded;
1064 else
1065 goto Suppress;
1066 }
1067
1068 /* Remove any trailing TKB suffix. It tells us that this symbol
1069 is for the body of a task, but that information does not actually
1070 appear in the decoded name. */
1071
1072 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
1073 len0 -= 3;
1074
1075 /* Remove any trailing TB suffix. The TB suffix is slightly different
1076 from the TKB suffix because it is used for non-anonymous task
1077 bodies. */
1078
1079 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
1080 len0 -= 2;
1081
1082 /* Remove trailing "B" suffixes. */
1083 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1084
1085 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
1086 len0 -= 1;
1087
1088 /* Make decoded big enough for possible expansion by operator name. */
1089
1090 decoded.resize (2 * len0 + 1, 'X');
1091
1092 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1093
1094 if (len0 > 1 && isdigit (encoded[len0 - 1]))
1095 {
1096 i = len0 - 2;
1097 while ((i >= 0 && isdigit (encoded[i]))
1098 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1099 i -= 1;
1100 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1101 len0 = i - 1;
1102 else if (encoded[i] == '$')
1103 len0 = i;
1104 }
1105
1106 /* The first few characters that are not alphabetic are not part
1107 of any encoding we use, so we can copy them over verbatim. */
1108
1109 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1110 decoded[j] = encoded[i];
1111
1112 at_start_name = 1;
1113 while (i < len0)
1114 {
1115 /* Is this a symbol function? */
1116 if (at_start_name && encoded[i] == 'O')
1117 {
1118 int k;
1119
1120 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1121 {
1122 int op_len = strlen (ada_opname_table[k].encoded);
1123 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1124 op_len - 1) == 0)
1125 && !isalnum (encoded[i + op_len]))
1126 {
1127 strcpy (&decoded.front() + j, ada_opname_table[k].decoded);
1128 at_start_name = 0;
1129 i += op_len;
1130 j += strlen (ada_opname_table[k].decoded);
1131 break;
1132 }
1133 }
1134 if (ada_opname_table[k].encoded != NULL)
1135 continue;
1136 }
1137 at_start_name = 0;
1138
1139 /* Replace "TK__" with "__", which will eventually be translated
1140 into "." (just below). */
1141
1142 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
1143 i += 2;
1144
1145 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1146 be translated into "." (just below). These are internal names
1147 generated for anonymous blocks inside which our symbol is nested. */
1148
1149 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1150 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1151 && isdigit (encoded [i+4]))
1152 {
1153 int k = i + 5;
1154
1155 while (k < len0 && isdigit (encoded[k]))
1156 k++; /* Skip any extra digit. */
1157
1158 /* Double-check that the "__B_{DIGITS}+" sequence we found
1159 is indeed followed by "__". */
1160 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1161 i = k;
1162 }
1163
1164 /* Remove _E{DIGITS}+[sb] */
1165
1166 /* Just as for protected object subprograms, there are 2 categories
1167 of subprograms created by the compiler for each entry. The first
1168 one implements the actual entry code, and has a suffix following
1169 the convention above; the second one implements the barrier and
1170 uses the same convention as above, except that the 'E' is replaced
1171 by a 'B'.
1172
1173 Just as above, we do not decode the name of barrier functions
1174 to give the user a clue that the code he is debugging has been
1175 internally generated. */
1176
1177 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1178 && isdigit (encoded[i+2]))
1179 {
1180 int k = i + 3;
1181
1182 while (k < len0 && isdigit (encoded[k]))
1183 k++;
1184
1185 if (k < len0
1186 && (encoded[k] == 'b' || encoded[k] == 's'))
1187 {
1188 k++;
1189 /* Just as an extra precaution, make sure that if this
1190 suffix is followed by anything else, it is a '_'.
1191 Otherwise, we matched this sequence by accident. */
1192 if (k == len0
1193 || (k < len0 && encoded[k] == '_'))
1194 i = k;
1195 }
1196 }
1197
1198 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1199 the GNAT front-end in protected object subprograms. */
1200
1201 if (i < len0 + 3
1202 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1203 {
1204 /* Backtrack a bit up until we reach either the begining of
1205 the encoded name, or "__". Make sure that we only find
1206 digits or lowercase characters. */
1207 const char *ptr = encoded + i - 1;
1208
1209 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1210 ptr--;
1211 if (ptr < encoded
1212 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1213 i++;
1214 }
1215
1216 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1217 {
1218 /* This is a X[bn]* sequence not separated from the previous
1219 part of the name with a non-alpha-numeric character (in other
1220 words, immediately following an alpha-numeric character), then
1221 verify that it is placed at the end of the encoded name. If
1222 not, then the encoding is not valid and we should abort the
1223 decoding. Otherwise, just skip it, it is used in body-nested
1224 package names. */
1225 do
1226 i += 1;
1227 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1228 if (i < len0)
1229 goto Suppress;
1230 }
1231 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1232 {
1233 /* Replace '__' by '.'. */
1234 decoded[j] = '.';
1235 at_start_name = 1;
1236 i += 2;
1237 j += 1;
1238 }
1239 else
1240 {
1241 /* It's a character part of the decoded name, so just copy it
1242 over. */
1243 decoded[j] = encoded[i];
1244 i += 1;
1245 j += 1;
1246 }
1247 }
1248 decoded.resize (j);
1249
1250 /* Decoded names should never contain any uppercase character.
1251 Double-check this, and abort the decoding if we find one. */
1252
1253 for (i = 0; i < decoded.length(); ++i)
1254 if (isupper (decoded[i]) || decoded[i] == ' ')
1255 goto Suppress;
1256
1257 return decoded;
1258
1259 Suppress:
1260 if (encoded[0] == '<')
1261 decoded = encoded;
1262 else
1263 decoded = '<' + std::string(encoded) + '>';
1264 return decoded;
1265
1266 }
1267
1268 /* Table for keeping permanent unique copies of decoded names. Once
1269 allocated, names in this table are never released. While this is a
1270 storage leak, it should not be significant unless there are massive
1271 changes in the set of decoded names in successive versions of a
1272 symbol table loaded during a single session. */
1273 static struct htab *decoded_names_store;
1274
1275 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1276 in the language-specific part of GSYMBOL, if it has not been
1277 previously computed. Tries to save the decoded name in the same
1278 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1279 in any case, the decoded symbol has a lifetime at least that of
1280 GSYMBOL).
1281 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1282 const, but nevertheless modified to a semantically equivalent form
1283 when a decoded name is cached in it. */
1284
1285 const char *
1286 ada_decode_symbol (const struct general_symbol_info *arg)
1287 {
1288 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1289 const char **resultp =
1290 &gsymbol->language_specific.demangled_name;
1291
1292 if (!gsymbol->ada_mangled)
1293 {
1294 std::string decoded = ada_decode (gsymbol->linkage_name ());
1295 struct obstack *obstack = gsymbol->language_specific.obstack;
1296
1297 gsymbol->ada_mangled = 1;
1298
1299 if (obstack != NULL)
1300 *resultp = obstack_strdup (obstack, decoded.c_str ());
1301 else
1302 {
1303 /* Sometimes, we can't find a corresponding objfile, in
1304 which case, we put the result on the heap. Since we only
1305 decode when needed, we hope this usually does not cause a
1306 significant memory leak (FIXME). */
1307
1308 char **slot = (char **) htab_find_slot (decoded_names_store,
1309 decoded.c_str (), INSERT);
1310
1311 if (*slot == NULL)
1312 *slot = xstrdup (decoded.c_str ());
1313 *resultp = *slot;
1314 }
1315 }
1316
1317 return *resultp;
1318 }
1319
1320 static char *
1321 ada_la_decode (const char *encoded, int options)
1322 {
1323 return xstrdup (ada_decode (encoded).c_str ());
1324 }
1325
1326 \f
1327
1328 /* Arrays */
1329
1330 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1331 generated by the GNAT compiler to describe the index type used
1332 for each dimension of an array, check whether it follows the latest
1333 known encoding. If not, fix it up to conform to the latest encoding.
1334 Otherwise, do nothing. This function also does nothing if
1335 INDEX_DESC_TYPE is NULL.
1336
1337 The GNAT encoding used to describe the array index type evolved a bit.
1338 Initially, the information would be provided through the name of each
1339 field of the structure type only, while the type of these fields was
1340 described as unspecified and irrelevant. The debugger was then expected
1341 to perform a global type lookup using the name of that field in order
1342 to get access to the full index type description. Because these global
1343 lookups can be very expensive, the encoding was later enhanced to make
1344 the global lookup unnecessary by defining the field type as being
1345 the full index type description.
1346
1347 The purpose of this routine is to allow us to support older versions
1348 of the compiler by detecting the use of the older encoding, and by
1349 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1350 we essentially replace each field's meaningless type by the associated
1351 index subtype). */
1352
1353 void
1354 ada_fixup_array_indexes_type (struct type *index_desc_type)
1355 {
1356 int i;
1357
1358 if (index_desc_type == NULL)
1359 return;
1360 gdb_assert (index_desc_type->num_fields () > 0);
1361
1362 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1363 to check one field only, no need to check them all). If not, return
1364 now.
1365
1366 If our INDEX_DESC_TYPE was generated using the older encoding,
1367 the field type should be a meaningless integer type whose name
1368 is not equal to the field name. */
1369 if (index_desc_type->field (0).type ()->name () != NULL
1370 && strcmp (index_desc_type->field (0).type ()->name (),
1371 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1372 return;
1373
1374 /* Fixup each field of INDEX_DESC_TYPE. */
1375 for (i = 0; i < index_desc_type->num_fields (); i++)
1376 {
1377 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1378 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1379
1380 if (raw_type)
1381 index_desc_type->field (i).set_type (raw_type);
1382 }
1383 }
1384
1385 /* The desc_* routines return primitive portions of array descriptors
1386 (fat pointers). */
1387
1388 /* The descriptor or array type, if any, indicated by TYPE; removes
1389 level of indirection, if needed. */
1390
1391 static struct type *
1392 desc_base_type (struct type *type)
1393 {
1394 if (type == NULL)
1395 return NULL;
1396 type = ada_check_typedef (type);
1397 if (type->code () == TYPE_CODE_TYPEDEF)
1398 type = ada_typedef_target_type (type);
1399
1400 if (type != NULL
1401 && (type->code () == TYPE_CODE_PTR
1402 || type->code () == TYPE_CODE_REF))
1403 return ada_check_typedef (TYPE_TARGET_TYPE (type));
1404 else
1405 return type;
1406 }
1407
1408 /* True iff TYPE indicates a "thin" array pointer type. */
1409
1410 static int
1411 is_thin_pntr (struct type *type)
1412 {
1413 return
1414 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1415 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1416 }
1417
1418 /* The descriptor type for thin pointer type TYPE. */
1419
1420 static struct type *
1421 thin_descriptor_type (struct type *type)
1422 {
1423 struct type *base_type = desc_base_type (type);
1424
1425 if (base_type == NULL)
1426 return NULL;
1427 if (is_suffix (ada_type_name (base_type), "___XVE"))
1428 return base_type;
1429 else
1430 {
1431 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1432
1433 if (alt_type == NULL)
1434 return base_type;
1435 else
1436 return alt_type;
1437 }
1438 }
1439
1440 /* A pointer to the array data for thin-pointer value VAL. */
1441
1442 static struct value *
1443 thin_data_pntr (struct value *val)
1444 {
1445 struct type *type = ada_check_typedef (value_type (val));
1446 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1447
1448 data_type = lookup_pointer_type (data_type);
1449
1450 if (type->code () == TYPE_CODE_PTR)
1451 return value_cast (data_type, value_copy (val));
1452 else
1453 return value_from_longest (data_type, value_address (val));
1454 }
1455
1456 /* True iff TYPE indicates a "thick" array pointer type. */
1457
1458 static int
1459 is_thick_pntr (struct type *type)
1460 {
1461 type = desc_base_type (type);
1462 return (type != NULL && type->code () == TYPE_CODE_STRUCT
1463 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1464 }
1465
1466 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1467 pointer to one, the type of its bounds data; otherwise, NULL. */
1468
1469 static struct type *
1470 desc_bounds_type (struct type *type)
1471 {
1472 struct type *r;
1473
1474 type = desc_base_type (type);
1475
1476 if (type == NULL)
1477 return NULL;
1478 else if (is_thin_pntr (type))
1479 {
1480 type = thin_descriptor_type (type);
1481 if (type == NULL)
1482 return NULL;
1483 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1484 if (r != NULL)
1485 return ada_check_typedef (r);
1486 }
1487 else if (type->code () == TYPE_CODE_STRUCT)
1488 {
1489 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1490 if (r != NULL)
1491 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1492 }
1493 return NULL;
1494 }
1495
1496 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1497 one, a pointer to its bounds data. Otherwise NULL. */
1498
1499 static struct value *
1500 desc_bounds (struct value *arr)
1501 {
1502 struct type *type = ada_check_typedef (value_type (arr));
1503
1504 if (is_thin_pntr (type))
1505 {
1506 struct type *bounds_type =
1507 desc_bounds_type (thin_descriptor_type (type));
1508 LONGEST addr;
1509
1510 if (bounds_type == NULL)
1511 error (_("Bad GNAT array descriptor"));
1512
1513 /* NOTE: The following calculation is not really kosher, but
1514 since desc_type is an XVE-encoded type (and shouldn't be),
1515 the correct calculation is a real pain. FIXME (and fix GCC). */
1516 if (type->code () == TYPE_CODE_PTR)
1517 addr = value_as_long (arr);
1518 else
1519 addr = value_address (arr);
1520
1521 return
1522 value_from_longest (lookup_pointer_type (bounds_type),
1523 addr - TYPE_LENGTH (bounds_type));
1524 }
1525
1526 else if (is_thick_pntr (type))
1527 {
1528 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1529 _("Bad GNAT array descriptor"));
1530 struct type *p_bounds_type = value_type (p_bounds);
1531
1532 if (p_bounds_type
1533 && p_bounds_type->code () == TYPE_CODE_PTR)
1534 {
1535 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1536
1537 if (target_type->is_stub ())
1538 p_bounds = value_cast (lookup_pointer_type
1539 (ada_check_typedef (target_type)),
1540 p_bounds);
1541 }
1542 else
1543 error (_("Bad GNAT array descriptor"));
1544
1545 return p_bounds;
1546 }
1547 else
1548 return NULL;
1549 }
1550
1551 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1552 position of the field containing the address of the bounds data. */
1553
1554 static int
1555 fat_pntr_bounds_bitpos (struct type *type)
1556 {
1557 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1558 }
1559
1560 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1561 size of the field containing the address of the bounds data. */
1562
1563 static int
1564 fat_pntr_bounds_bitsize (struct type *type)
1565 {
1566 type = desc_base_type (type);
1567
1568 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1569 return TYPE_FIELD_BITSIZE (type, 1);
1570 else
1571 return 8 * TYPE_LENGTH (ada_check_typedef (type->field (1).type ()));
1572 }
1573
1574 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1575 pointer to one, the type of its array data (a array-with-no-bounds type);
1576 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1577 data. */
1578
1579 static struct type *
1580 desc_data_target_type (struct type *type)
1581 {
1582 type = desc_base_type (type);
1583
1584 /* NOTE: The following is bogus; see comment in desc_bounds. */
1585 if (is_thin_pntr (type))
1586 return desc_base_type (thin_descriptor_type (type)->field (1).type ());
1587 else if (is_thick_pntr (type))
1588 {
1589 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1590
1591 if (data_type
1592 && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR)
1593 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1594 }
1595
1596 return NULL;
1597 }
1598
1599 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1600 its array data. */
1601
1602 static struct value *
1603 desc_data (struct value *arr)
1604 {
1605 struct type *type = value_type (arr);
1606
1607 if (is_thin_pntr (type))
1608 return thin_data_pntr (arr);
1609 else if (is_thick_pntr (type))
1610 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1611 _("Bad GNAT array descriptor"));
1612 else
1613 return NULL;
1614 }
1615
1616
1617 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1618 position of the field containing the address of the data. */
1619
1620 static int
1621 fat_pntr_data_bitpos (struct type *type)
1622 {
1623 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1624 }
1625
1626 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1627 size of the field containing the address of the data. */
1628
1629 static int
1630 fat_pntr_data_bitsize (struct type *type)
1631 {
1632 type = desc_base_type (type);
1633
1634 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1635 return TYPE_FIELD_BITSIZE (type, 0);
1636 else
1637 return TARGET_CHAR_BIT * TYPE_LENGTH (type->field (0).type ());
1638 }
1639
1640 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1641 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1642 bound, if WHICH is 1. The first bound is I=1. */
1643
1644 static struct value *
1645 desc_one_bound (struct value *bounds, int i, int which)
1646 {
1647 char bound_name[20];
1648 xsnprintf (bound_name, sizeof (bound_name), "%cB%d",
1649 which ? 'U' : 'L', i - 1);
1650 return value_struct_elt (&bounds, NULL, bound_name, NULL,
1651 _("Bad GNAT array descriptor bounds"));
1652 }
1653
1654 /* If BOUNDS is an array-bounds structure type, return the bit position
1655 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1656 bound, if WHICH is 1. The first bound is I=1. */
1657
1658 static int
1659 desc_bound_bitpos (struct type *type, int i, int which)
1660 {
1661 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1662 }
1663
1664 /* If BOUNDS is an array-bounds structure type, return the bit field size
1665 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1666 bound, if WHICH is 1. The first bound is I=1. */
1667
1668 static int
1669 desc_bound_bitsize (struct type *type, int i, int which)
1670 {
1671 type = desc_base_type (type);
1672
1673 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1674 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1675 else
1676 return 8 * TYPE_LENGTH (type->field (2 * i + which - 2).type ());
1677 }
1678
1679 /* If TYPE is the type of an array-bounds structure, the type of its
1680 Ith bound (numbering from 1). Otherwise, NULL. */
1681
1682 static struct type *
1683 desc_index_type (struct type *type, int i)
1684 {
1685 type = desc_base_type (type);
1686
1687 if (type->code () == TYPE_CODE_STRUCT)
1688 {
1689 char bound_name[20];
1690 xsnprintf (bound_name, sizeof (bound_name), "LB%d", i - 1);
1691 return lookup_struct_elt_type (type, bound_name, 1);
1692 }
1693 else
1694 return NULL;
1695 }
1696
1697 /* The number of index positions in the array-bounds type TYPE.
1698 Return 0 if TYPE is NULL. */
1699
1700 static int
1701 desc_arity (struct type *type)
1702 {
1703 type = desc_base_type (type);
1704
1705 if (type != NULL)
1706 return type->num_fields () / 2;
1707 return 0;
1708 }
1709
1710 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1711 an array descriptor type (representing an unconstrained array
1712 type). */
1713
1714 static int
1715 ada_is_direct_array_type (struct type *type)
1716 {
1717 if (type == NULL)
1718 return 0;
1719 type = ada_check_typedef (type);
1720 return (type->code () == TYPE_CODE_ARRAY
1721 || ada_is_array_descriptor_type (type));
1722 }
1723
1724 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1725 * to one. */
1726
1727 static int
1728 ada_is_array_type (struct type *type)
1729 {
1730 while (type != NULL
1731 && (type->code () == TYPE_CODE_PTR
1732 || type->code () == TYPE_CODE_REF))
1733 type = TYPE_TARGET_TYPE (type);
1734 return ada_is_direct_array_type (type);
1735 }
1736
1737 /* Non-zero iff TYPE is a simple array type or pointer to one. */
1738
1739 int
1740 ada_is_simple_array_type (struct type *type)
1741 {
1742 if (type == NULL)
1743 return 0;
1744 type = ada_check_typedef (type);
1745 return (type->code () == TYPE_CODE_ARRAY
1746 || (type->code () == TYPE_CODE_PTR
1747 && (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ()
1748 == TYPE_CODE_ARRAY)));
1749 }
1750
1751 /* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1752
1753 int
1754 ada_is_array_descriptor_type (struct type *type)
1755 {
1756 struct type *data_type = desc_data_target_type (type);
1757
1758 if (type == NULL)
1759 return 0;
1760 type = ada_check_typedef (type);
1761 return (data_type != NULL
1762 && data_type->code () == TYPE_CODE_ARRAY
1763 && desc_arity (desc_bounds_type (type)) > 0);
1764 }
1765
1766 /* Non-zero iff type is a partially mal-formed GNAT array
1767 descriptor. FIXME: This is to compensate for some problems with
1768 debugging output from GNAT. Re-examine periodically to see if it
1769 is still needed. */
1770
1771 int
1772 ada_is_bogus_array_descriptor (struct type *type)
1773 {
1774 return
1775 type != NULL
1776 && type->code () == TYPE_CODE_STRUCT
1777 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1778 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1779 && !ada_is_array_descriptor_type (type);
1780 }
1781
1782
1783 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1784 (fat pointer) returns the type of the array data described---specifically,
1785 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
1786 in from the descriptor; otherwise, they are left unspecified. If
1787 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1788 returns NULL. The result is simply the type of ARR if ARR is not
1789 a descriptor. */
1790
1791 static struct type *
1792 ada_type_of_array (struct value *arr, int bounds)
1793 {
1794 if (ada_is_constrained_packed_array_type (value_type (arr)))
1795 return decode_constrained_packed_array_type (value_type (arr));
1796
1797 if (!ada_is_array_descriptor_type (value_type (arr)))
1798 return value_type (arr);
1799
1800 if (!bounds)
1801 {
1802 struct type *array_type =
1803 ada_check_typedef (desc_data_target_type (value_type (arr)));
1804
1805 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1806 TYPE_FIELD_BITSIZE (array_type, 0) =
1807 decode_packed_array_bitsize (value_type (arr));
1808
1809 return array_type;
1810 }
1811 else
1812 {
1813 struct type *elt_type;
1814 int arity;
1815 struct value *descriptor;
1816
1817 elt_type = ada_array_element_type (value_type (arr), -1);
1818 arity = ada_array_arity (value_type (arr));
1819
1820 if (elt_type == NULL || arity == 0)
1821 return ada_check_typedef (value_type (arr));
1822
1823 descriptor = desc_bounds (arr);
1824 if (value_as_long (descriptor) == 0)
1825 return NULL;
1826 while (arity > 0)
1827 {
1828 struct type *range_type = alloc_type_copy (value_type (arr));
1829 struct type *array_type = alloc_type_copy (value_type (arr));
1830 struct value *low = desc_one_bound (descriptor, arity, 0);
1831 struct value *high = desc_one_bound (descriptor, arity, 1);
1832
1833 arity -= 1;
1834 create_static_range_type (range_type, value_type (low),
1835 longest_to_int (value_as_long (low)),
1836 longest_to_int (value_as_long (high)));
1837 elt_type = create_array_type (array_type, elt_type, range_type);
1838
1839 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1840 {
1841 /* We need to store the element packed bitsize, as well as
1842 recompute the array size, because it was previously
1843 computed based on the unpacked element size. */
1844 LONGEST lo = value_as_long (low);
1845 LONGEST hi = value_as_long (high);
1846
1847 TYPE_FIELD_BITSIZE (elt_type, 0) =
1848 decode_packed_array_bitsize (value_type (arr));
1849 /* If the array has no element, then the size is already
1850 zero, and does not need to be recomputed. */
1851 if (lo < hi)
1852 {
1853 int array_bitsize =
1854 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
1855
1856 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1857 }
1858 }
1859 }
1860
1861 return lookup_pointer_type (elt_type);
1862 }
1863 }
1864
1865 /* If ARR does not represent an array, returns ARR unchanged.
1866 Otherwise, returns either a standard GDB array with bounds set
1867 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1868 GDB array. Returns NULL if ARR is a null fat pointer. */
1869
1870 struct value *
1871 ada_coerce_to_simple_array_ptr (struct value *arr)
1872 {
1873 if (ada_is_array_descriptor_type (value_type (arr)))
1874 {
1875 struct type *arrType = ada_type_of_array (arr, 1);
1876
1877 if (arrType == NULL)
1878 return NULL;
1879 return value_cast (arrType, value_copy (desc_data (arr)));
1880 }
1881 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1882 return decode_constrained_packed_array (arr);
1883 else
1884 return arr;
1885 }
1886
1887 /* If ARR does not represent an array, returns ARR unchanged.
1888 Otherwise, returns a standard GDB array describing ARR (which may
1889 be ARR itself if it already is in the proper form). */
1890
1891 struct value *
1892 ada_coerce_to_simple_array (struct value *arr)
1893 {
1894 if (ada_is_array_descriptor_type (value_type (arr)))
1895 {
1896 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1897
1898 if (arrVal == NULL)
1899 error (_("Bounds unavailable for null array pointer."));
1900 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
1901 return value_ind (arrVal);
1902 }
1903 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1904 return decode_constrained_packed_array (arr);
1905 else
1906 return arr;
1907 }
1908
1909 /* If TYPE represents a GNAT array type, return it translated to an
1910 ordinary GDB array type (possibly with BITSIZE fields indicating
1911 packing). For other types, is the identity. */
1912
1913 struct type *
1914 ada_coerce_to_simple_array_type (struct type *type)
1915 {
1916 if (ada_is_constrained_packed_array_type (type))
1917 return decode_constrained_packed_array_type (type);
1918
1919 if (ada_is_array_descriptor_type (type))
1920 return ada_check_typedef (desc_data_target_type (type));
1921
1922 return type;
1923 }
1924
1925 /* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1926
1927 static int
1928 ada_is_gnat_encoded_packed_array_type (struct type *type)
1929 {
1930 if (type == NULL)
1931 return 0;
1932 type = desc_base_type (type);
1933 type = ada_check_typedef (type);
1934 return
1935 ada_type_name (type) != NULL
1936 && strstr (ada_type_name (type), "___XP") != NULL;
1937 }
1938
1939 /* Non-zero iff TYPE represents a standard GNAT constrained
1940 packed-array type. */
1941
1942 int
1943 ada_is_constrained_packed_array_type (struct type *type)
1944 {
1945 return ada_is_gnat_encoded_packed_array_type (type)
1946 && !ada_is_array_descriptor_type (type);
1947 }
1948
1949 /* Non-zero iff TYPE represents an array descriptor for a
1950 unconstrained packed-array type. */
1951
1952 static int
1953 ada_is_unconstrained_packed_array_type (struct type *type)
1954 {
1955 if (!ada_is_array_descriptor_type (type))
1956 return 0;
1957
1958 if (ada_is_gnat_encoded_packed_array_type (type))
1959 return 1;
1960
1961 /* If we saw GNAT encodings, then the above code is sufficient.
1962 However, with minimal encodings, we will just have a thick
1963 pointer instead. */
1964 if (is_thick_pntr (type))
1965 {
1966 type = desc_base_type (type);
1967 /* The structure's first field is a pointer to an array, so this
1968 fetches the array type. */
1969 type = TYPE_TARGET_TYPE (type->field (0).type ());
1970 /* Now we can see if the array elements are packed. */
1971 return TYPE_FIELD_BITSIZE (type, 0) > 0;
1972 }
1973
1974 return 0;
1975 }
1976
1977 /* Return true if TYPE is a (Gnat-encoded) constrained packed array
1978 type, or if it is an ordinary (non-Gnat-encoded) packed array. */
1979
1980 static bool
1981 ada_is_any_packed_array_type (struct type *type)
1982 {
1983 return (ada_is_constrained_packed_array_type (type)
1984 || (type->code () == TYPE_CODE_ARRAY
1985 && TYPE_FIELD_BITSIZE (type, 0) % 8 != 0));
1986 }
1987
1988 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
1989 return the size of its elements in bits. */
1990
1991 static long
1992 decode_packed_array_bitsize (struct type *type)
1993 {
1994 const char *raw_name;
1995 const char *tail;
1996 long bits;
1997
1998 /* Access to arrays implemented as fat pointers are encoded as a typedef
1999 of the fat pointer type. We need the name of the fat pointer type
2000 to do the decoding, so strip the typedef layer. */
2001 if (type->code () == TYPE_CODE_TYPEDEF)
2002 type = ada_typedef_target_type (type);
2003
2004 raw_name = ada_type_name (ada_check_typedef (type));
2005 if (!raw_name)
2006 raw_name = ada_type_name (desc_base_type (type));
2007
2008 if (!raw_name)
2009 return 0;
2010
2011 tail = strstr (raw_name, "___XP");
2012 if (tail == nullptr)
2013 {
2014 gdb_assert (is_thick_pntr (type));
2015 /* The structure's first field is a pointer to an array, so this
2016 fetches the array type. */
2017 type = TYPE_TARGET_TYPE (type->field (0).type ());
2018 /* Now we can see if the array elements are packed. */
2019 return TYPE_FIELD_BITSIZE (type, 0);
2020 }
2021
2022 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2023 {
2024 lim_warning
2025 (_("could not understand bit size information on packed array"));
2026 return 0;
2027 }
2028
2029 return bits;
2030 }
2031
2032 /* Given that TYPE is a standard GDB array type with all bounds filled
2033 in, and that the element size of its ultimate scalar constituents
2034 (that is, either its elements, or, if it is an array of arrays, its
2035 elements' elements, etc.) is *ELT_BITS, return an identical type,
2036 but with the bit sizes of its elements (and those of any
2037 constituent arrays) recorded in the BITSIZE components of its
2038 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2039 in bits.
2040
2041 Note that, for arrays whose index type has an XA encoding where
2042 a bound references a record discriminant, getting that discriminant,
2043 and therefore the actual value of that bound, is not possible
2044 because none of the given parameters gives us access to the record.
2045 This function assumes that it is OK in the context where it is being
2046 used to return an array whose bounds are still dynamic and where
2047 the length is arbitrary. */
2048
2049 static struct type *
2050 constrained_packed_array_type (struct type *type, long *elt_bits)
2051 {
2052 struct type *new_elt_type;
2053 struct type *new_type;
2054 struct type *index_type_desc;
2055 struct type *index_type;
2056 LONGEST low_bound, high_bound;
2057
2058 type = ada_check_typedef (type);
2059 if (type->code () != TYPE_CODE_ARRAY)
2060 return type;
2061
2062 index_type_desc = ada_find_parallel_type (type, "___XA");
2063 if (index_type_desc)
2064 index_type = to_fixed_range_type (index_type_desc->field (0).type (),
2065 NULL);
2066 else
2067 index_type = type->index_type ();
2068
2069 new_type = alloc_type_copy (type);
2070 new_elt_type =
2071 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2072 elt_bits);
2073 create_array_type (new_type, new_elt_type, index_type);
2074 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2075 new_type->set_name (ada_type_name (type));
2076
2077 if ((check_typedef (index_type)->code () == TYPE_CODE_RANGE
2078 && is_dynamic_type (check_typedef (index_type)))
2079 || !get_discrete_bounds (index_type, &low_bound, &high_bound))
2080 low_bound = high_bound = 0;
2081 if (high_bound < low_bound)
2082 *elt_bits = TYPE_LENGTH (new_type) = 0;
2083 else
2084 {
2085 *elt_bits *= (high_bound - low_bound + 1);
2086 TYPE_LENGTH (new_type) =
2087 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2088 }
2089
2090 new_type->set_is_fixed_instance (true);
2091 return new_type;
2092 }
2093
2094 /* The array type encoded by TYPE, where
2095 ada_is_constrained_packed_array_type (TYPE). */
2096
2097 static struct type *
2098 decode_constrained_packed_array_type (struct type *type)
2099 {
2100 const char *raw_name = ada_type_name (ada_check_typedef (type));
2101 char *name;
2102 const char *tail;
2103 struct type *shadow_type;
2104 long bits;
2105
2106 if (!raw_name)
2107 raw_name = ada_type_name (desc_base_type (type));
2108
2109 if (!raw_name)
2110 return NULL;
2111
2112 name = (char *) alloca (strlen (raw_name) + 1);
2113 tail = strstr (raw_name, "___XP");
2114 type = desc_base_type (type);
2115
2116 memcpy (name, raw_name, tail - raw_name);
2117 name[tail - raw_name] = '\000';
2118
2119 shadow_type = ada_find_parallel_type_with_name (type, name);
2120
2121 if (shadow_type == NULL)
2122 {
2123 lim_warning (_("could not find bounds information on packed array"));
2124 return NULL;
2125 }
2126 shadow_type = check_typedef (shadow_type);
2127
2128 if (shadow_type->code () != TYPE_CODE_ARRAY)
2129 {
2130 lim_warning (_("could not understand bounds "
2131 "information on packed array"));
2132 return NULL;
2133 }
2134
2135 bits = decode_packed_array_bitsize (type);
2136 return constrained_packed_array_type (shadow_type, &bits);
2137 }
2138
2139 /* Helper function for decode_constrained_packed_array. Set the field
2140 bitsize on a series of packed arrays. Returns the number of
2141 elements in TYPE. */
2142
2143 static LONGEST
2144 recursively_update_array_bitsize (struct type *type)
2145 {
2146 gdb_assert (type->code () == TYPE_CODE_ARRAY);
2147
2148 LONGEST low, high;
2149 if (!get_discrete_bounds (type->index_type (), &low, &high)
2150 || low > high)
2151 return 0;
2152 LONGEST our_len = high - low + 1;
2153
2154 struct type *elt_type = TYPE_TARGET_TYPE (type);
2155 if (elt_type->code () == TYPE_CODE_ARRAY)
2156 {
2157 LONGEST elt_len = recursively_update_array_bitsize (elt_type);
2158 LONGEST elt_bitsize = elt_len * TYPE_FIELD_BITSIZE (elt_type, 0);
2159 TYPE_FIELD_BITSIZE (type, 0) = elt_bitsize;
2160
2161 TYPE_LENGTH (type) = ((our_len * elt_bitsize + HOST_CHAR_BIT - 1)
2162 / HOST_CHAR_BIT);
2163 }
2164
2165 return our_len;
2166 }
2167
2168 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2169 array, returns a simple array that denotes that array. Its type is a
2170 standard GDB array type except that the BITSIZEs of the array
2171 target types are set to the number of bits in each element, and the
2172 type length is set appropriately. */
2173
2174 static struct value *
2175 decode_constrained_packed_array (struct value *arr)
2176 {
2177 struct type *type;
2178
2179 /* If our value is a pointer, then dereference it. Likewise if
2180 the value is a reference. Make sure that this operation does not
2181 cause the target type to be fixed, as this would indirectly cause
2182 this array to be decoded. The rest of the routine assumes that
2183 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2184 and "value_ind" routines to perform the dereferencing, as opposed
2185 to using "ada_coerce_ref" or "ada_value_ind". */
2186 arr = coerce_ref (arr);
2187 if (ada_check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
2188 arr = value_ind (arr);
2189
2190 type = decode_constrained_packed_array_type (value_type (arr));
2191 if (type == NULL)
2192 {
2193 error (_("can't unpack array"));
2194 return NULL;
2195 }
2196
2197 /* Decoding the packed array type could not correctly set the field
2198 bitsizes for any dimension except the innermost, because the
2199 bounds may be variable and were not passed to that function. So,
2200 we further resolve the array bounds here and then update the
2201 sizes. */
2202 const gdb_byte *valaddr = value_contents_for_printing (arr);
2203 CORE_ADDR address = value_address (arr);
2204 gdb::array_view<const gdb_byte> view
2205 = gdb::make_array_view (valaddr, TYPE_LENGTH (type));
2206 type = resolve_dynamic_type (type, view, address);
2207 recursively_update_array_bitsize (type);
2208
2209 if (type_byte_order (value_type (arr)) == BFD_ENDIAN_BIG
2210 && ada_is_modular_type (value_type (arr)))
2211 {
2212 /* This is a (right-justified) modular type representing a packed
2213 array with no wrapper. In order to interpret the value through
2214 the (left-justified) packed array type we just built, we must
2215 first left-justify it. */
2216 int bit_size, bit_pos;
2217 ULONGEST mod;
2218
2219 mod = ada_modulus (value_type (arr)) - 1;
2220 bit_size = 0;
2221 while (mod > 0)
2222 {
2223 bit_size += 1;
2224 mod >>= 1;
2225 }
2226 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2227 arr = ada_value_primitive_packed_val (arr, NULL,
2228 bit_pos / HOST_CHAR_BIT,
2229 bit_pos % HOST_CHAR_BIT,
2230 bit_size,
2231 type);
2232 }
2233
2234 return coerce_unspec_val_to_type (arr, type);
2235 }
2236
2237
2238 /* The value of the element of packed array ARR at the ARITY indices
2239 given in IND. ARR must be a simple array. */
2240
2241 static struct value *
2242 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2243 {
2244 int i;
2245 int bits, elt_off, bit_off;
2246 long elt_total_bit_offset;
2247 struct type *elt_type;
2248 struct value *v;
2249
2250 bits = 0;
2251 elt_total_bit_offset = 0;
2252 elt_type = ada_check_typedef (value_type (arr));
2253 for (i = 0; i < arity; i += 1)
2254 {
2255 if (elt_type->code () != TYPE_CODE_ARRAY
2256 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2257 error
2258 (_("attempt to do packed indexing of "
2259 "something other than a packed array"));
2260 else
2261 {
2262 struct type *range_type = elt_type->index_type ();
2263 LONGEST lowerbound, upperbound;
2264 LONGEST idx;
2265
2266 if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
2267 {
2268 lim_warning (_("don't know bounds of array"));
2269 lowerbound = upperbound = 0;
2270 }
2271
2272 idx = pos_atr (ind[i]);
2273 if (idx < lowerbound || idx > upperbound)
2274 lim_warning (_("packed array index %ld out of bounds"),
2275 (long) idx);
2276 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2277 elt_total_bit_offset += (idx - lowerbound) * bits;
2278 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2279 }
2280 }
2281 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2282 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2283
2284 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2285 bits, elt_type);
2286 return v;
2287 }
2288
2289 /* Non-zero iff TYPE includes negative integer values. */
2290
2291 static int
2292 has_negatives (struct type *type)
2293 {
2294 switch (type->code ())
2295 {
2296 default:
2297 return 0;
2298 case TYPE_CODE_INT:
2299 return !type->is_unsigned ();
2300 case TYPE_CODE_RANGE:
2301 return type->bounds ()->low.const_val () - type->bounds ()->bias < 0;
2302 }
2303 }
2304
2305 /* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
2306 unpack that data into UNPACKED. UNPACKED_LEN is the size in bytes of
2307 the unpacked buffer.
2308
2309 The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2310 enough to contain at least BIT_OFFSET bits. If not, an error is raised.
2311
2312 IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2313 zero otherwise.
2314
2315 IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
2316
2317 IS_SCALAR is nonzero if the data corresponds to a signed type. */
2318
2319 static void
2320 ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2321 gdb_byte *unpacked, int unpacked_len,
2322 int is_big_endian, int is_signed_type,
2323 int is_scalar)
2324 {
2325 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2326 int src_idx; /* Index into the source area */
2327 int src_bytes_left; /* Number of source bytes left to process. */
2328 int srcBitsLeft; /* Number of source bits left to move */
2329 int unusedLS; /* Number of bits in next significant
2330 byte of source that are unused */
2331
2332 int unpacked_idx; /* Index into the unpacked buffer */
2333 int unpacked_bytes_left; /* Number of bytes left to set in unpacked. */
2334
2335 unsigned long accum; /* Staging area for bits being transferred */
2336 int accumSize; /* Number of meaningful bits in accum */
2337 unsigned char sign;
2338
2339 /* Transmit bytes from least to most significant; delta is the direction
2340 the indices move. */
2341 int delta = is_big_endian ? -1 : 1;
2342
2343 /* Make sure that unpacked is large enough to receive the BIT_SIZE
2344 bits from SRC. .*/
2345 if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2346 error (_("Cannot unpack %d bits into buffer of %d bytes"),
2347 bit_size, unpacked_len);
2348
2349 srcBitsLeft = bit_size;
2350 src_bytes_left = src_len;
2351 unpacked_bytes_left = unpacked_len;
2352 sign = 0;
2353
2354 if (is_big_endian)
2355 {
2356 src_idx = src_len - 1;
2357 if (is_signed_type
2358 && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2359 sign = ~0;
2360
2361 unusedLS =
2362 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2363 % HOST_CHAR_BIT;
2364
2365 if (is_scalar)
2366 {
2367 accumSize = 0;
2368 unpacked_idx = unpacked_len - 1;
2369 }
2370 else
2371 {
2372 /* Non-scalar values must be aligned at a byte boundary... */
2373 accumSize =
2374 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2375 /* ... And are placed at the beginning (most-significant) bytes
2376 of the target. */
2377 unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2378 unpacked_bytes_left = unpacked_idx + 1;
2379 }
2380 }
2381 else
2382 {
2383 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2384
2385 src_idx = unpacked_idx = 0;
2386 unusedLS = bit_offset;
2387 accumSize = 0;
2388
2389 if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
2390 sign = ~0;
2391 }
2392
2393 accum = 0;
2394 while (src_bytes_left > 0)
2395 {
2396 /* Mask for removing bits of the next source byte that are not
2397 part of the value. */
2398 unsigned int unusedMSMask =
2399 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2400 1;
2401 /* Sign-extend bits for this byte. */
2402 unsigned int signMask = sign & ~unusedMSMask;
2403
2404 accum |=
2405 (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2406 accumSize += HOST_CHAR_BIT - unusedLS;
2407 if (accumSize >= HOST_CHAR_BIT)
2408 {
2409 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2410 accumSize -= HOST_CHAR_BIT;
2411 accum >>= HOST_CHAR_BIT;
2412 unpacked_bytes_left -= 1;
2413 unpacked_idx += delta;
2414 }
2415 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2416 unusedLS = 0;
2417 src_bytes_left -= 1;
2418 src_idx += delta;
2419 }
2420 while (unpacked_bytes_left > 0)
2421 {
2422 accum |= sign << accumSize;
2423 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2424 accumSize -= HOST_CHAR_BIT;
2425 if (accumSize < 0)
2426 accumSize = 0;
2427 accum >>= HOST_CHAR_BIT;
2428 unpacked_bytes_left -= 1;
2429 unpacked_idx += delta;
2430 }
2431 }
2432
2433 /* Create a new value of type TYPE from the contents of OBJ starting
2434 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2435 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
2436 assigning through the result will set the field fetched from.
2437 VALADDR is ignored unless OBJ is NULL, in which case,
2438 VALADDR+OFFSET must address the start of storage containing the
2439 packed value. The value returned in this case is never an lval.
2440 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
2441
2442 struct value *
2443 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2444 long offset, int bit_offset, int bit_size,
2445 struct type *type)
2446 {
2447 struct value *v;
2448 const gdb_byte *src; /* First byte containing data to unpack */
2449 gdb_byte *unpacked;
2450 const int is_scalar = is_scalar_type (type);
2451 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
2452 gdb::byte_vector staging;
2453
2454 type = ada_check_typedef (type);
2455
2456 if (obj == NULL)
2457 src = valaddr + offset;
2458 else
2459 src = value_contents (obj) + offset;
2460
2461 if (is_dynamic_type (type))
2462 {
2463 /* The length of TYPE might by dynamic, so we need to resolve
2464 TYPE in order to know its actual size, which we then use
2465 to create the contents buffer of the value we return.
2466 The difficulty is that the data containing our object is
2467 packed, and therefore maybe not at a byte boundary. So, what
2468 we do, is unpack the data into a byte-aligned buffer, and then
2469 use that buffer as our object's value for resolving the type. */
2470 int staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2471 staging.resize (staging_len);
2472
2473 ada_unpack_from_contents (src, bit_offset, bit_size,
2474 staging.data (), staging.size (),
2475 is_big_endian, has_negatives (type),
2476 is_scalar);
2477 type = resolve_dynamic_type (type, staging, 0);
2478 if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2479 {
2480 /* This happens when the length of the object is dynamic,
2481 and is actually smaller than the space reserved for it.
2482 For instance, in an array of variant records, the bit_size
2483 we're given is the array stride, which is constant and
2484 normally equal to the maximum size of its element.
2485 But, in reality, each element only actually spans a portion
2486 of that stride. */
2487 bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2488 }
2489 }
2490
2491 if (obj == NULL)
2492 {
2493 v = allocate_value (type);
2494 src = valaddr + offset;
2495 }
2496 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2497 {
2498 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2499 gdb_byte *buf;
2500
2501 v = value_at (type, value_address (obj) + offset);
2502 buf = (gdb_byte *) alloca (src_len);
2503 read_memory (value_address (v), buf, src_len);
2504 src = buf;
2505 }
2506 else
2507 {
2508 v = allocate_value (type);
2509 src = value_contents (obj) + offset;
2510 }
2511
2512 if (obj != NULL)
2513 {
2514 long new_offset = offset;
2515
2516 set_value_component_location (v, obj);
2517 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2518 set_value_bitsize (v, bit_size);
2519 if (value_bitpos (v) >= HOST_CHAR_BIT)
2520 {
2521 ++new_offset;
2522 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2523 }
2524 set_value_offset (v, new_offset);
2525
2526 /* Also set the parent value. This is needed when trying to
2527 assign a new value (in inferior memory). */
2528 set_value_parent (v, obj);
2529 }
2530 else
2531 set_value_bitsize (v, bit_size);
2532 unpacked = value_contents_writeable (v);
2533
2534 if (bit_size == 0)
2535 {
2536 memset (unpacked, 0, TYPE_LENGTH (type));
2537 return v;
2538 }
2539
2540 if (staging.size () == TYPE_LENGTH (type))
2541 {
2542 /* Small short-cut: If we've unpacked the data into a buffer
2543 of the same size as TYPE's length, then we can reuse that,
2544 instead of doing the unpacking again. */
2545 memcpy (unpacked, staging.data (), staging.size ());
2546 }
2547 else
2548 ada_unpack_from_contents (src, bit_offset, bit_size,
2549 unpacked, TYPE_LENGTH (type),
2550 is_big_endian, has_negatives (type), is_scalar);
2551
2552 return v;
2553 }
2554
2555 /* Store the contents of FROMVAL into the location of TOVAL.
2556 Return a new value with the location of TOVAL and contents of
2557 FROMVAL. Handles assignment into packed fields that have
2558 floating-point or non-scalar types. */
2559
2560 static struct value *
2561 ada_value_assign (struct value *toval, struct value *fromval)
2562 {
2563 struct type *type = value_type (toval);
2564 int bits = value_bitsize (toval);
2565
2566 toval = ada_coerce_ref (toval);
2567 fromval = ada_coerce_ref (fromval);
2568
2569 if (ada_is_direct_array_type (value_type (toval)))
2570 toval = ada_coerce_to_simple_array (toval);
2571 if (ada_is_direct_array_type (value_type (fromval)))
2572 fromval = ada_coerce_to_simple_array (fromval);
2573
2574 if (!deprecated_value_modifiable (toval))
2575 error (_("Left operand of assignment is not a modifiable lvalue."));
2576
2577 if (VALUE_LVAL (toval) == lval_memory
2578 && bits > 0
2579 && (type->code () == TYPE_CODE_FLT
2580 || type->code () == TYPE_CODE_STRUCT))
2581 {
2582 int len = (value_bitpos (toval)
2583 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2584 int from_size;
2585 gdb_byte *buffer = (gdb_byte *) alloca (len);
2586 struct value *val;
2587 CORE_ADDR to_addr = value_address (toval);
2588
2589 if (type->code () == TYPE_CODE_FLT)
2590 fromval = value_cast (type, fromval);
2591
2592 read_memory (to_addr, buffer, len);
2593 from_size = value_bitsize (fromval);
2594 if (from_size == 0)
2595 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2596
2597 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
2598 ULONGEST from_offset = 0;
2599 if (is_big_endian && is_scalar_type (value_type (fromval)))
2600 from_offset = from_size - bits;
2601 copy_bitwise (buffer, value_bitpos (toval),
2602 value_contents (fromval), from_offset,
2603 bits, is_big_endian);
2604 write_memory_with_notification (to_addr, buffer, len);
2605
2606 val = value_copy (toval);
2607 memcpy (value_contents_raw (val), value_contents (fromval),
2608 TYPE_LENGTH (type));
2609 deprecated_set_value_type (val, type);
2610
2611 return val;
2612 }
2613
2614 return value_assign (toval, fromval);
2615 }
2616
2617
2618 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2619 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2620 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2621 COMPONENT, and not the inferior's memory. The current contents
2622 of COMPONENT are ignored.
2623
2624 Although not part of the initial design, this function also works
2625 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2626 had a null address, and COMPONENT had an address which is equal to
2627 its offset inside CONTAINER. */
2628
2629 static void
2630 value_assign_to_component (struct value *container, struct value *component,
2631 struct value *val)
2632 {
2633 LONGEST offset_in_container =
2634 (LONGEST) (value_address (component) - value_address (container));
2635 int bit_offset_in_container =
2636 value_bitpos (component) - value_bitpos (container);
2637 int bits;
2638
2639 val = value_cast (value_type (component), val);
2640
2641 if (value_bitsize (component) == 0)
2642 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2643 else
2644 bits = value_bitsize (component);
2645
2646 if (type_byte_order (value_type (container)) == BFD_ENDIAN_BIG)
2647 {
2648 int src_offset;
2649
2650 if (is_scalar_type (check_typedef (value_type (component))))
2651 src_offset
2652 = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
2653 else
2654 src_offset = 0;
2655 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2656 value_bitpos (container) + bit_offset_in_container,
2657 value_contents (val), src_offset, bits, 1);
2658 }
2659 else
2660 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2661 value_bitpos (container) + bit_offset_in_container,
2662 value_contents (val), 0, bits, 0);
2663 }
2664
2665 /* Determine if TYPE is an access to an unconstrained array. */
2666
2667 bool
2668 ada_is_access_to_unconstrained_array (struct type *type)
2669 {
2670 return (type->code () == TYPE_CODE_TYPEDEF
2671 && is_thick_pntr (ada_typedef_target_type (type)));
2672 }
2673
2674 /* The value of the element of array ARR at the ARITY indices given in IND.
2675 ARR may be either a simple array, GNAT array descriptor, or pointer
2676 thereto. */
2677
2678 struct value *
2679 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2680 {
2681 int k;
2682 struct value *elt;
2683 struct type *elt_type;
2684
2685 elt = ada_coerce_to_simple_array (arr);
2686
2687 elt_type = ada_check_typedef (value_type (elt));
2688 if (elt_type->code () == TYPE_CODE_ARRAY
2689 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2690 return value_subscript_packed (elt, arity, ind);
2691
2692 for (k = 0; k < arity; k += 1)
2693 {
2694 struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
2695
2696 if (elt_type->code () != TYPE_CODE_ARRAY)
2697 error (_("too many subscripts (%d expected)"), k);
2698
2699 elt = value_subscript (elt, pos_atr (ind[k]));
2700
2701 if (ada_is_access_to_unconstrained_array (saved_elt_type)
2702 && value_type (elt)->code () != TYPE_CODE_TYPEDEF)
2703 {
2704 /* The element is a typedef to an unconstrained array,
2705 except that the value_subscript call stripped the
2706 typedef layer. The typedef layer is GNAT's way to
2707 specify that the element is, at the source level, an
2708 access to the unconstrained array, rather than the
2709 unconstrained array. So, we need to restore that
2710 typedef layer, which we can do by forcing the element's
2711 type back to its original type. Otherwise, the returned
2712 value is going to be printed as the array, rather
2713 than as an access. Another symptom of the same issue
2714 would be that an expression trying to dereference the
2715 element would also be improperly rejected. */
2716 deprecated_set_value_type (elt, saved_elt_type);
2717 }
2718
2719 elt_type = ada_check_typedef (value_type (elt));
2720 }
2721
2722 return elt;
2723 }
2724
2725 /* Assuming ARR is a pointer to a GDB array, the value of the element
2726 of *ARR at the ARITY indices given in IND.
2727 Does not read the entire array into memory.
2728
2729 Note: Unlike what one would expect, this function is used instead of
2730 ada_value_subscript for basically all non-packed array types. The reason
2731 for this is that a side effect of doing our own pointer arithmetics instead
2732 of relying on value_subscript is that there is no implicit typedef peeling.
2733 This is important for arrays of array accesses, where it allows us to
2734 preserve the fact that the array's element is an array access, where the
2735 access part os encoded in a typedef layer. */
2736
2737 static struct value *
2738 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2739 {
2740 int k;
2741 struct value *array_ind = ada_value_ind (arr);
2742 struct type *type
2743 = check_typedef (value_enclosing_type (array_ind));
2744
2745 if (type->code () == TYPE_CODE_ARRAY
2746 && TYPE_FIELD_BITSIZE (type, 0) > 0)
2747 return value_subscript_packed (array_ind, arity, ind);
2748
2749 for (k = 0; k < arity; k += 1)
2750 {
2751 LONGEST lwb, upb;
2752
2753 if (type->code () != TYPE_CODE_ARRAY)
2754 error (_("too many subscripts (%d expected)"), k);
2755 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2756 value_copy (arr));
2757 get_discrete_bounds (type->index_type (), &lwb, &upb);
2758 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2759 type = TYPE_TARGET_TYPE (type);
2760 }
2761
2762 return value_ind (arr);
2763 }
2764
2765 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2766 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2767 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2768 this array is LOW, as per Ada rules. */
2769 static struct value *
2770 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2771 int low, int high)
2772 {
2773 struct type *type0 = ada_check_typedef (type);
2774 struct type *base_index_type = TYPE_TARGET_TYPE (type0->index_type ());
2775 struct type *index_type
2776 = create_static_range_type (NULL, base_index_type, low, high);
2777 struct type *slice_type = create_array_type_with_stride
2778 (NULL, TYPE_TARGET_TYPE (type0), index_type,
2779 type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
2780 TYPE_FIELD_BITSIZE (type0, 0));
2781 int base_low = ada_discrete_type_low_bound (type0->index_type ());
2782 gdb::optional<LONGEST> base_low_pos, low_pos;
2783 CORE_ADDR base;
2784
2785 low_pos = discrete_position (base_index_type, low);
2786 base_low_pos = discrete_position (base_index_type, base_low);
2787
2788 if (!low_pos.has_value () || !base_low_pos.has_value ())
2789 {
2790 warning (_("unable to get positions in slice, use bounds instead"));
2791 low_pos = low;
2792 base_low_pos = base_low;
2793 }
2794
2795 ULONGEST stride = TYPE_FIELD_BITSIZE (slice_type, 0) / 8;
2796 if (stride == 0)
2797 stride = TYPE_LENGTH (TYPE_TARGET_TYPE (type0));
2798
2799 base = value_as_address (array_ptr) + (*low_pos - *base_low_pos) * stride;
2800 return value_at_lazy (slice_type, base);
2801 }
2802
2803
2804 static struct value *
2805 ada_value_slice (struct value *array, int low, int high)
2806 {
2807 struct type *type = ada_check_typedef (value_type (array));
2808 struct type *base_index_type = TYPE_TARGET_TYPE (type->index_type ());
2809 struct type *index_type
2810 = create_static_range_type (NULL, type->index_type (), low, high);
2811 struct type *slice_type = create_array_type_with_stride
2812 (NULL, TYPE_TARGET_TYPE (type), index_type,
2813 type->dyn_prop (DYN_PROP_BYTE_STRIDE),
2814 TYPE_FIELD_BITSIZE (type, 0));
2815 gdb::optional<LONGEST> low_pos, high_pos;
2816
2817
2818 low_pos = discrete_position (base_index_type, low);
2819 high_pos = discrete_position (base_index_type, high);
2820
2821 if (!low_pos.has_value () || !high_pos.has_value ())
2822 {
2823 warning (_("unable to get positions in slice, use bounds instead"));
2824 low_pos = low;
2825 high_pos = high;
2826 }
2827
2828 return value_cast (slice_type,
2829 value_slice (array, low, *high_pos - *low_pos + 1));
2830 }
2831
2832 /* If type is a record type in the form of a standard GNAT array
2833 descriptor, returns the number of dimensions for type. If arr is a
2834 simple array, returns the number of "array of"s that prefix its
2835 type designation. Otherwise, returns 0. */
2836
2837 int
2838 ada_array_arity (struct type *type)
2839 {
2840 int arity;
2841
2842 if (type == NULL)
2843 return 0;
2844
2845 type = desc_base_type (type);
2846
2847 arity = 0;
2848 if (type->code () == TYPE_CODE_STRUCT)
2849 return desc_arity (desc_bounds_type (type));
2850 else
2851 while (type->code () == TYPE_CODE_ARRAY)
2852 {
2853 arity += 1;
2854 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2855 }
2856
2857 return arity;
2858 }
2859
2860 /* If TYPE is a record type in the form of a standard GNAT array
2861 descriptor or a simple array type, returns the element type for
2862 TYPE after indexing by NINDICES indices, or by all indices if
2863 NINDICES is -1. Otherwise, returns NULL. */
2864
2865 struct type *
2866 ada_array_element_type (struct type *type, int nindices)
2867 {
2868 type = desc_base_type (type);
2869
2870 if (type->code () == TYPE_CODE_STRUCT)
2871 {
2872 int k;
2873 struct type *p_array_type;
2874
2875 p_array_type = desc_data_target_type (type);
2876
2877 k = ada_array_arity (type);
2878 if (k == 0)
2879 return NULL;
2880
2881 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
2882 if (nindices >= 0 && k > nindices)
2883 k = nindices;
2884 while (k > 0 && p_array_type != NULL)
2885 {
2886 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2887 k -= 1;
2888 }
2889 return p_array_type;
2890 }
2891 else if (type->code () == TYPE_CODE_ARRAY)
2892 {
2893 while (nindices != 0 && type->code () == TYPE_CODE_ARRAY)
2894 {
2895 type = TYPE_TARGET_TYPE (type);
2896 nindices -= 1;
2897 }
2898 return type;
2899 }
2900
2901 return NULL;
2902 }
2903
2904 /* The type of nth index in arrays of given type (n numbering from 1).
2905 Does not examine memory. Throws an error if N is invalid or TYPE
2906 is not an array type. NAME is the name of the Ada attribute being
2907 evaluated ('range, 'first, 'last, or 'length); it is used in building
2908 the error message. */
2909
2910 static struct type *
2911 ada_index_type (struct type *type, int n, const char *name)
2912 {
2913 struct type *result_type;
2914
2915 type = desc_base_type (type);
2916
2917 if (n < 0 || n > ada_array_arity (type))
2918 error (_("invalid dimension number to '%s"), name);
2919
2920 if (ada_is_simple_array_type (type))
2921 {
2922 int i;
2923
2924 for (i = 1; i < n; i += 1)
2925 type = TYPE_TARGET_TYPE (type);
2926 result_type = TYPE_TARGET_TYPE (type->index_type ());
2927 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2928 has a target type of TYPE_CODE_UNDEF. We compensate here, but
2929 perhaps stabsread.c would make more sense. */
2930 if (result_type && result_type->code () == TYPE_CODE_UNDEF)
2931 result_type = NULL;
2932 }
2933 else
2934 {
2935 result_type = desc_index_type (desc_bounds_type (type), n);
2936 if (result_type == NULL)
2937 error (_("attempt to take bound of something that is not an array"));
2938 }
2939
2940 return result_type;
2941 }
2942
2943 /* Given that arr is an array type, returns the lower bound of the
2944 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2945 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
2946 array-descriptor type. It works for other arrays with bounds supplied
2947 by run-time quantities other than discriminants. */
2948
2949 static LONGEST
2950 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2951 {
2952 struct type *type, *index_type_desc, *index_type;
2953 int i;
2954
2955 gdb_assert (which == 0 || which == 1);
2956
2957 if (ada_is_constrained_packed_array_type (arr_type))
2958 arr_type = decode_constrained_packed_array_type (arr_type);
2959
2960 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2961 return (LONGEST) - which;
2962
2963 if (arr_type->code () == TYPE_CODE_PTR)
2964 type = TYPE_TARGET_TYPE (arr_type);
2965 else
2966 type = arr_type;
2967
2968 if (type->is_fixed_instance ())
2969 {
2970 /* The array has already been fixed, so we do not need to
2971 check the parallel ___XA type again. That encoding has
2972 already been applied, so ignore it now. */
2973 index_type_desc = NULL;
2974 }
2975 else
2976 {
2977 index_type_desc = ada_find_parallel_type (type, "___XA");
2978 ada_fixup_array_indexes_type (index_type_desc);
2979 }
2980
2981 if (index_type_desc != NULL)
2982 index_type = to_fixed_range_type (index_type_desc->field (n - 1).type (),
2983 NULL);
2984 else
2985 {
2986 struct type *elt_type = check_typedef (type);
2987
2988 for (i = 1; i < n; i++)
2989 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2990
2991 index_type = elt_type->index_type ();
2992 }
2993
2994 return
2995 (LONGEST) (which == 0
2996 ? ada_discrete_type_low_bound (index_type)
2997 : ada_discrete_type_high_bound (index_type));
2998 }
2999
3000 /* Given that arr is an array value, returns the lower bound of the
3001 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3002 WHICH is 1. This routine will also work for arrays with bounds
3003 supplied by run-time quantities other than discriminants. */
3004
3005 static LONGEST
3006 ada_array_bound (struct value *arr, int n, int which)
3007 {
3008 struct type *arr_type;
3009
3010 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
3011 arr = value_ind (arr);
3012 arr_type = value_enclosing_type (arr);
3013
3014 if (ada_is_constrained_packed_array_type (arr_type))
3015 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
3016 else if (ada_is_simple_array_type (arr_type))
3017 return ada_array_bound_from_type (arr_type, n, which);
3018 else
3019 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
3020 }
3021
3022 /* Given that arr is an array value, returns the length of the
3023 nth index. This routine will also work for arrays with bounds
3024 supplied by run-time quantities other than discriminants.
3025 Does not work for arrays indexed by enumeration types with representation
3026 clauses at the moment. */
3027
3028 static LONGEST
3029 ada_array_length (struct value *arr, int n)
3030 {
3031 struct type *arr_type, *index_type;
3032 int low, high;
3033
3034 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
3035 arr = value_ind (arr);
3036 arr_type = value_enclosing_type (arr);
3037
3038 if (ada_is_constrained_packed_array_type (arr_type))
3039 return ada_array_length (decode_constrained_packed_array (arr), n);
3040
3041 if (ada_is_simple_array_type (arr_type))
3042 {
3043 low = ada_array_bound_from_type (arr_type, n, 0);
3044 high = ada_array_bound_from_type (arr_type, n, 1);
3045 }
3046 else
3047 {
3048 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3049 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3050 }
3051
3052 arr_type = check_typedef (arr_type);
3053 index_type = ada_index_type (arr_type, n, "length");
3054 if (index_type != NULL)
3055 {
3056 struct type *base_type;
3057 if (index_type->code () == TYPE_CODE_RANGE)
3058 base_type = TYPE_TARGET_TYPE (index_type);
3059 else
3060 base_type = index_type;
3061
3062 low = pos_atr (value_from_longest (base_type, low));
3063 high = pos_atr (value_from_longest (base_type, high));
3064 }
3065 return high - low + 1;
3066 }
3067
3068 /* An array whose type is that of ARR_TYPE (an array type), with
3069 bounds LOW to HIGH, but whose contents are unimportant. If HIGH is
3070 less than LOW, then LOW-1 is used. */
3071
3072 static struct value *
3073 empty_array (struct type *arr_type, int low, int high)
3074 {
3075 struct type *arr_type0 = ada_check_typedef (arr_type);
3076 struct type *index_type
3077 = create_static_range_type
3078 (NULL, TYPE_TARGET_TYPE (arr_type0->index_type ()), low,
3079 high < low ? low - 1 : high);
3080 struct type *elt_type = ada_array_element_type (arr_type0, 1);
3081
3082 return allocate_value (create_array_type (NULL, elt_type, index_type));
3083 }
3084 \f
3085
3086 /* Name resolution */
3087
3088 /* The "decoded" name for the user-definable Ada operator corresponding
3089 to OP. */
3090
3091 static const char *
3092 ada_decoded_op_name (enum exp_opcode op)
3093 {
3094 int i;
3095
3096 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3097 {
3098 if (ada_opname_table[i].op == op)
3099 return ada_opname_table[i].decoded;
3100 }
3101 error (_("Could not find operator name for opcode"));
3102 }
3103
3104 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3105 in a listing of choices during disambiguation (see sort_choices, below).
3106 The idea is that overloadings of a subprogram name from the
3107 same package should sort in their source order. We settle for ordering
3108 such symbols by their trailing number (__N or $N). */
3109
3110 static int
3111 encoded_ordered_before (const char *N0, const char *N1)
3112 {
3113 if (N1 == NULL)
3114 return 0;
3115 else if (N0 == NULL)
3116 return 1;
3117 else
3118 {
3119 int k0, k1;
3120
3121 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3122 ;
3123 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3124 ;
3125 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3126 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3127 {
3128 int n0, n1;
3129
3130 n0 = k0;
3131 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3132 n0 -= 1;
3133 n1 = k1;
3134 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3135 n1 -= 1;
3136 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3137 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3138 }
3139 return (strcmp (N0, N1) < 0);
3140 }
3141 }
3142
3143 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3144 encoded names. */
3145
3146 static void
3147 sort_choices (struct block_symbol syms[], int nsyms)
3148 {
3149 int i;
3150
3151 for (i = 1; i < nsyms; i += 1)
3152 {
3153 struct block_symbol sym = syms[i];
3154 int j;
3155
3156 for (j = i - 1; j >= 0; j -= 1)
3157 {
3158 if (encoded_ordered_before (syms[j].symbol->linkage_name (),
3159 sym.symbol->linkage_name ()))
3160 break;
3161 syms[j + 1] = syms[j];
3162 }
3163 syms[j + 1] = sym;
3164 }
3165 }
3166
3167 /* Whether GDB should display formals and return types for functions in the
3168 overloads selection menu. */
3169 static bool print_signatures = true;
3170
3171 /* Print the signature for SYM on STREAM according to the FLAGS options. For
3172 all but functions, the signature is just the name of the symbol. For
3173 functions, this is the name of the function, the list of types for formals
3174 and the return type (if any). */
3175
3176 static void
3177 ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3178 const struct type_print_options *flags)
3179 {
3180 struct type *type = SYMBOL_TYPE (sym);
3181
3182 fprintf_filtered (stream, "%s", sym->print_name ());
3183 if (!print_signatures
3184 || type == NULL
3185 || type->code () != TYPE_CODE_FUNC)
3186 return;
3187
3188 if (type->num_fields () > 0)
3189 {
3190 int i;
3191
3192 fprintf_filtered (stream, " (");
3193 for (i = 0; i < type->num_fields (); ++i)
3194 {
3195 if (i > 0)
3196 fprintf_filtered (stream, "; ");
3197 ada_print_type (type->field (i).type (), NULL, stream, -1, 0,
3198 flags);
3199 }
3200 fprintf_filtered (stream, ")");
3201 }
3202 if (TYPE_TARGET_TYPE (type) != NULL
3203 && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
3204 {
3205 fprintf_filtered (stream, " return ");
3206 ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3207 }
3208 }
3209
3210 /* Read and validate a set of numeric choices from the user in the
3211 range 0 .. N_CHOICES-1. Place the results in increasing
3212 order in CHOICES[0 .. N-1], and return N.
3213
3214 The user types choices as a sequence of numbers on one line
3215 separated by blanks, encoding them as follows:
3216
3217 + A choice of 0 means to cancel the selection, throwing an error.
3218 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3219 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3220
3221 The user is not allowed to choose more than MAX_RESULTS values.
3222
3223 ANNOTATION_SUFFIX, if present, is used to annotate the input
3224 prompts (for use with the -f switch). */
3225
3226 static int
3227 get_selections (int *choices, int n_choices, int max_results,
3228 int is_all_choice, const char *annotation_suffix)
3229 {
3230 const char *args;
3231 const char *prompt;
3232 int n_chosen;
3233 int first_choice = is_all_choice ? 2 : 1;
3234
3235 prompt = getenv ("PS2");
3236 if (prompt == NULL)
3237 prompt = "> ";
3238
3239 args = command_line_input (prompt, annotation_suffix);
3240
3241 if (args == NULL)
3242 error_no_arg (_("one or more choice numbers"));
3243
3244 n_chosen = 0;
3245
3246 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3247 order, as given in args. Choices are validated. */
3248 while (1)
3249 {
3250 char *args2;
3251 int choice, j;
3252
3253 args = skip_spaces (args);
3254 if (*args == '\0' && n_chosen == 0)
3255 error_no_arg (_("one or more choice numbers"));
3256 else if (*args == '\0')
3257 break;
3258
3259 choice = strtol (args, &args2, 10);
3260 if (args == args2 || choice < 0
3261 || choice > n_choices + first_choice - 1)
3262 error (_("Argument must be choice number"));
3263 args = args2;
3264
3265 if (choice == 0)
3266 error (_("cancelled"));
3267
3268 if (choice < first_choice)
3269 {
3270 n_chosen = n_choices;
3271 for (j = 0; j < n_choices; j += 1)
3272 choices[j] = j;
3273 break;
3274 }
3275 choice -= first_choice;
3276
3277 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3278 {
3279 }
3280
3281 if (j < 0 || choice != choices[j])
3282 {
3283 int k;
3284
3285 for (k = n_chosen - 1; k > j; k -= 1)
3286 choices[k + 1] = choices[k];
3287 choices[j + 1] = choice;
3288 n_chosen += 1;
3289 }
3290 }
3291
3292 if (n_chosen > max_results)
3293 error (_("Select no more than %d of the above"), max_results);
3294
3295 return n_chosen;
3296 }
3297
3298 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3299 by asking the user (if necessary), returning the number selected,
3300 and setting the first elements of SYMS items. Error if no symbols
3301 selected. */
3302
3303 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3304 to be re-integrated one of these days. */
3305
3306 static int
3307 user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
3308 {
3309 int i;
3310 int *chosen = XALLOCAVEC (int , nsyms);
3311 int n_chosen;
3312 int first_choice = (max_results == 1) ? 1 : 2;
3313 const char *select_mode = multiple_symbols_select_mode ();
3314
3315 if (max_results < 1)
3316 error (_("Request to select 0 symbols!"));
3317 if (nsyms <= 1)
3318 return nsyms;
3319
3320 if (select_mode == multiple_symbols_cancel)
3321 error (_("\
3322 canceled because the command is ambiguous\n\
3323 See set/show multiple-symbol."));
3324
3325 /* If select_mode is "all", then return all possible symbols.
3326 Only do that if more than one symbol can be selected, of course.
3327 Otherwise, display the menu as usual. */
3328 if (select_mode == multiple_symbols_all && max_results > 1)
3329 return nsyms;
3330
3331 printf_filtered (_("[0] cancel\n"));
3332 if (max_results > 1)
3333 printf_filtered (_("[1] all\n"));
3334
3335 sort_choices (syms, nsyms);
3336
3337 for (i = 0; i < nsyms; i += 1)
3338 {
3339 if (syms[i].symbol == NULL)
3340 continue;
3341
3342 if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
3343 {
3344 struct symtab_and_line sal =
3345 find_function_start_sal (syms[i].symbol, 1);
3346
3347 printf_filtered ("[%d] ", i + first_choice);
3348 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3349 &type_print_raw_options);
3350 if (sal.symtab == NULL)
3351 printf_filtered (_(" at %p[<no source file available>%p]:%d\n"),
3352 metadata_style.style ().ptr (), nullptr, sal.line);
3353 else
3354 printf_filtered
3355 (_(" at %ps:%d\n"),
3356 styled_string (file_name_style.style (),
3357 symtab_to_filename_for_display (sal.symtab)),
3358 sal.line);
3359 continue;
3360 }
3361 else
3362 {
3363 int is_enumeral =
3364 (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3365 && SYMBOL_TYPE (syms[i].symbol) != NULL
3366 && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM);
3367 struct symtab *symtab = NULL;
3368
3369 if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3370 symtab = symbol_symtab (syms[i].symbol);
3371
3372 if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
3373 {
3374 printf_filtered ("[%d] ", i + first_choice);
3375 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3376 &type_print_raw_options);
3377 printf_filtered (_(" at %s:%d\n"),
3378 symtab_to_filename_for_display (symtab),
3379 SYMBOL_LINE (syms[i].symbol));
3380 }
3381 else if (is_enumeral
3382 && SYMBOL_TYPE (syms[i].symbol)->name () != NULL)
3383 {
3384 printf_filtered (("[%d] "), i + first_choice);
3385 ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3386 gdb_stdout, -1, 0, &type_print_raw_options);
3387 printf_filtered (_("'(%s) (enumeral)\n"),
3388 syms[i].symbol->print_name ());
3389 }
3390 else
3391 {
3392 printf_filtered ("[%d] ", i + first_choice);
3393 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3394 &type_print_raw_options);
3395
3396 if (symtab != NULL)
3397 printf_filtered (is_enumeral
3398 ? _(" in %s (enumeral)\n")
3399 : _(" at %s:?\n"),
3400 symtab_to_filename_for_display (symtab));
3401 else
3402 printf_filtered (is_enumeral
3403 ? _(" (enumeral)\n")
3404 : _(" at ?\n"));
3405 }
3406 }
3407 }
3408
3409 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3410 "overload-choice");
3411
3412 for (i = 0; i < n_chosen; i += 1)
3413 syms[i] = syms[chosen[i]];
3414
3415 return n_chosen;
3416 }
3417
3418 /* Resolve the operator of the subexpression beginning at
3419 position *POS of *EXPP. "Resolving" consists of replacing
3420 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3421 with their resolutions, replacing built-in operators with
3422 function calls to user-defined operators, where appropriate, and,
3423 when DEPROCEDURE_P is non-zero, converting function-valued variables
3424 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3425 are as in ada_resolve, above. */
3426
3427 static struct value *
3428 resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
3429 struct type *context_type, int parse_completion,
3430 innermost_block_tracker *tracker)
3431 {
3432 int pc = *pos;
3433 int i;
3434 struct expression *exp; /* Convenience: == *expp. */
3435 enum exp_opcode op = (*expp)->elts[pc].opcode;
3436 struct value **argvec; /* Vector of operand types (alloca'ed). */
3437 int nargs; /* Number of operands. */
3438 int oplen;
3439 /* If we're resolving an expression like ARRAY(ARG...), then we set
3440 this to the type of the array, so we can use the index types as
3441 the expected types for resolution. */
3442 struct type *array_type = nullptr;
3443 /* The arity of ARRAY_TYPE. */
3444 int array_arity = 0;
3445
3446 argvec = NULL;
3447 nargs = 0;
3448 exp = expp->get ();
3449
3450 /* Pass one: resolve operands, saving their types and updating *pos,
3451 if needed. */
3452 switch (op)
3453 {
3454 case OP_FUNCALL:
3455 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3456 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3457 *pos += 7;
3458 else
3459 {
3460 *pos += 3;
3461 struct value *lhs = resolve_subexp (expp, pos, 0, NULL,
3462 parse_completion, tracker);
3463 struct type *lhstype = ada_check_typedef (value_type (lhs));
3464 array_arity = ada_array_arity (lhstype);
3465 if (array_arity > 0)
3466 array_type = lhstype;
3467 }
3468 nargs = longest_to_int (exp->elts[pc + 1].longconst);
3469 break;
3470
3471 case UNOP_ADDR:
3472 *pos += 1;
3473 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3474 break;
3475
3476 case UNOP_QUAL:
3477 *pos += 3;
3478 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
3479 parse_completion, tracker);
3480 break;
3481
3482 case OP_ATR_MODULUS:
3483 case OP_ATR_SIZE:
3484 case OP_ATR_TAG:
3485 case OP_ATR_FIRST:
3486 case OP_ATR_LAST:
3487 case OP_ATR_LENGTH:
3488 case OP_ATR_POS:
3489 case OP_ATR_VAL:
3490 case OP_ATR_MIN:
3491 case OP_ATR_MAX:
3492 case TERNOP_IN_RANGE:
3493 case BINOP_IN_BOUNDS:
3494 case UNOP_IN_RANGE:
3495 case OP_AGGREGATE:
3496 case OP_OTHERS:
3497 case OP_CHOICES:
3498 case OP_POSITIONAL:
3499 case OP_DISCRETE_RANGE:
3500 case OP_NAME:
3501 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3502 *pos += oplen;
3503 break;
3504
3505 case BINOP_ASSIGN:
3506 {
3507 struct value *arg1;
3508
3509 *pos += 1;
3510 arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3511 if (arg1 == NULL)
3512 resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
3513 else
3514 resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
3515 tracker);
3516 break;
3517 }
3518
3519 case UNOP_CAST:
3520 *pos += 3;
3521 nargs = 1;
3522 break;
3523
3524 case BINOP_ADD:
3525 case BINOP_SUB:
3526 case BINOP_MUL:
3527 case BINOP_DIV:
3528 case BINOP_REM:
3529 case BINOP_MOD:
3530 case BINOP_EXP:
3531 case BINOP_CONCAT:
3532 case BINOP_LOGICAL_AND:
3533 case BINOP_LOGICAL_OR:
3534 case BINOP_BITWISE_AND:
3535 case BINOP_BITWISE_IOR:
3536 case BINOP_BITWISE_XOR:
3537
3538 case BINOP_EQUAL:
3539 case BINOP_NOTEQUAL:
3540 case BINOP_LESS:
3541 case BINOP_GTR:
3542 case BINOP_LEQ:
3543 case BINOP_GEQ:
3544
3545 case BINOP_REPEAT:
3546 case BINOP_SUBSCRIPT:
3547 case BINOP_COMMA:
3548 *pos += 1;
3549 nargs = 2;
3550 break;
3551
3552 case UNOP_NEG:
3553 case UNOP_PLUS:
3554 case UNOP_LOGICAL_NOT:
3555 case UNOP_ABS:
3556 case UNOP_IND:
3557 *pos += 1;
3558 nargs = 1;
3559 break;
3560
3561 case OP_LONG:
3562 case OP_FLOAT:
3563 case OP_VAR_VALUE:
3564 case OP_VAR_MSYM_VALUE:
3565 *pos += 4;
3566 break;
3567
3568 case OP_TYPE:
3569 case OP_BOOL:
3570 case OP_LAST:
3571 case OP_INTERNALVAR:
3572 *pos += 3;
3573 break;
3574
3575 case UNOP_MEMVAL:
3576 *pos += 3;
3577 nargs = 1;
3578 break;
3579
3580 case OP_REGISTER:
3581 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3582 break;
3583
3584 case STRUCTOP_STRUCT:
3585 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3586 nargs = 1;
3587 break;
3588
3589 case TERNOP_SLICE:
3590 *pos += 1;
3591 nargs = 3;
3592 break;
3593
3594 case OP_STRING:
3595 break;
3596
3597 default:
3598 error (_("Unexpected operator during name resolution"));
3599 }
3600
3601 argvec = XALLOCAVEC (struct value *, nargs + 1);
3602 for (i = 0; i < nargs; i += 1)
3603 {
3604 struct type *subtype = nullptr;
3605 if (i < array_arity)
3606 subtype = ada_index_type (array_type, i + 1, "array type");
3607 argvec[i] = resolve_subexp (expp, pos, 1, subtype, parse_completion,
3608 tracker);
3609 }
3610 argvec[i] = NULL;
3611 exp = expp->get ();
3612
3613 /* Pass two: perform any resolution on principal operator. */
3614 switch (op)
3615 {
3616 default:
3617 break;
3618
3619 case OP_VAR_VALUE:
3620 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3621 {
3622 std::vector<struct block_symbol> candidates
3623 = ada_lookup_symbol_list (exp->elts[pc + 2].symbol->linkage_name (),
3624 exp->elts[pc + 1].block, VAR_DOMAIN);
3625
3626 if (std::any_of (candidates.begin (),
3627 candidates.end (),
3628 [] (block_symbol &sym)
3629 {
3630 switch (SYMBOL_CLASS (sym.symbol))
3631 {
3632 case LOC_REGISTER:
3633 case LOC_ARG:
3634 case LOC_REF_ARG:
3635 case LOC_REGPARM_ADDR:
3636 case LOC_LOCAL:
3637 case LOC_COMPUTED:
3638 return true;
3639 default:
3640 return false;
3641 }
3642 }))
3643 {
3644 /* Types tend to get re-introduced locally, so if there
3645 are any local symbols that are not types, first filter
3646 out all types. */
3647 candidates.erase
3648 (std::remove_if
3649 (candidates.begin (),
3650 candidates.end (),
3651 [] (block_symbol &sym)
3652 {
3653 return SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF;
3654 }),
3655 candidates.end ());
3656 }
3657
3658 if (candidates.empty ())
3659 error (_("No definition found for %s"),
3660 exp->elts[pc + 2].symbol->print_name ());
3661 else if (candidates.size () == 1)
3662 i = 0;
3663 else if (deprocedure_p && !is_nonfunction (candidates))
3664 {
3665 i = ada_resolve_function
3666 (candidates, NULL, 0,
3667 exp->elts[pc + 2].symbol->linkage_name (),
3668 context_type, parse_completion);
3669 if (i < 0)
3670 error (_("Could not find a match for %s"),
3671 exp->elts[pc + 2].symbol->print_name ());
3672 }
3673 else
3674 {
3675 printf_filtered (_("Multiple matches for %s\n"),
3676 exp->elts[pc + 2].symbol->print_name ());
3677 user_select_syms (candidates.data (), candidates.size (), 1);
3678 i = 0;
3679 }
3680
3681 exp->elts[pc + 1].block = candidates[i].block;
3682 exp->elts[pc + 2].symbol = candidates[i].symbol;
3683 tracker->update (candidates[i]);
3684 }
3685
3686 if (deprocedure_p
3687 && (SYMBOL_TYPE (exp->elts[pc + 2].symbol)->code ()
3688 == TYPE_CODE_FUNC))
3689 {
3690 replace_operator_with_call (expp, pc, 0, 4,
3691 exp->elts[pc + 2].symbol,
3692 exp->elts[pc + 1].block);
3693 exp = expp->get ();
3694 }
3695 break;
3696
3697 case OP_FUNCALL:
3698 {
3699 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3700 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3701 {
3702 std::vector<struct block_symbol> candidates
3703 = ada_lookup_symbol_list (exp->elts[pc + 5].symbol->linkage_name (),
3704 exp->elts[pc + 4].block, VAR_DOMAIN);
3705
3706 if (candidates.size () == 1)
3707 i = 0;
3708 else
3709 {
3710 i = ada_resolve_function
3711 (candidates,
3712 argvec, nargs,
3713 exp->elts[pc + 5].symbol->linkage_name (),
3714 context_type, parse_completion);
3715 if (i < 0)
3716 error (_("Could not find a match for %s"),
3717 exp->elts[pc + 5].symbol->print_name ());
3718 }
3719
3720 exp->elts[pc + 4].block = candidates[i].block;
3721 exp->elts[pc + 5].symbol = candidates[i].symbol;
3722 tracker->update (candidates[i]);
3723 }
3724 }
3725 break;
3726 case BINOP_ADD:
3727 case BINOP_SUB:
3728 case BINOP_MUL:
3729 case BINOP_DIV:
3730 case BINOP_REM:
3731 case BINOP_MOD:
3732 case BINOP_CONCAT:
3733 case BINOP_BITWISE_AND:
3734 case BINOP_BITWISE_IOR:
3735 case BINOP_BITWISE_XOR:
3736 case BINOP_EQUAL:
3737 case BINOP_NOTEQUAL:
3738 case BINOP_LESS:
3739 case BINOP_GTR:
3740 case BINOP_LEQ:
3741 case BINOP_GEQ:
3742 case BINOP_EXP:
3743 case UNOP_NEG:
3744 case UNOP_PLUS:
3745 case UNOP_LOGICAL_NOT:
3746 case UNOP_ABS:
3747 if (possible_user_operator_p (op, argvec))
3748 {
3749 std::vector<struct block_symbol> candidates
3750 = ada_lookup_symbol_list (ada_decoded_op_name (op),
3751 NULL, VAR_DOMAIN);
3752
3753 i = ada_resolve_function (candidates, argvec,
3754 nargs, ada_decoded_op_name (op), NULL,
3755 parse_completion);
3756 if (i < 0)
3757 break;
3758
3759 replace_operator_with_call (expp, pc, nargs, 1,
3760 candidates[i].symbol,
3761 candidates[i].block);
3762 exp = expp->get ();
3763 }
3764 break;
3765
3766 case OP_TYPE:
3767 case OP_REGISTER:
3768 return NULL;
3769 }
3770
3771 *pos = pc;
3772 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3773 return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3774 exp->elts[pc + 1].objfile,
3775 exp->elts[pc + 2].msymbol);
3776 else
3777 return evaluate_subexp_type (exp, pos);
3778 }
3779
3780 /* Return non-zero if formal type FTYPE matches actual type ATYPE. If
3781 MAY_DEREF is non-zero, the formal may be a pointer and the actual
3782 a non-pointer. */
3783 /* The term "match" here is rather loose. The match is heuristic and
3784 liberal. */
3785
3786 static int
3787 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3788 {
3789 ftype = ada_check_typedef (ftype);
3790 atype = ada_check_typedef (atype);
3791
3792 if (ftype->code () == TYPE_CODE_REF)
3793 ftype = TYPE_TARGET_TYPE (ftype);
3794 if (atype->code () == TYPE_CODE_REF)
3795 atype = TYPE_TARGET_TYPE (atype);
3796
3797 switch (ftype->code ())
3798 {
3799 default:
3800 return ftype->code () == atype->code ();
3801 case TYPE_CODE_PTR:
3802 if (atype->code () == TYPE_CODE_PTR)
3803 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3804 TYPE_TARGET_TYPE (atype), 0);
3805 else
3806 return (may_deref
3807 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3808 case TYPE_CODE_INT:
3809 case TYPE_CODE_ENUM:
3810 case TYPE_CODE_RANGE:
3811 switch (atype->code ())
3812 {
3813 case TYPE_CODE_INT:
3814 case TYPE_CODE_ENUM:
3815 case TYPE_CODE_RANGE:
3816 return 1;
3817 default:
3818 return 0;
3819 }
3820
3821 case TYPE_CODE_ARRAY:
3822 return (atype->code () == TYPE_CODE_ARRAY
3823 || ada_is_array_descriptor_type (atype));
3824
3825 case TYPE_CODE_STRUCT:
3826 if (ada_is_array_descriptor_type (ftype))
3827 return (atype->code () == TYPE_CODE_ARRAY
3828 || ada_is_array_descriptor_type (atype));
3829 else
3830 return (atype->code () == TYPE_CODE_STRUCT
3831 && !ada_is_array_descriptor_type (atype));
3832
3833 case TYPE_CODE_UNION:
3834 case TYPE_CODE_FLT:
3835 return (atype->code () == ftype->code ());
3836 }
3837 }
3838
3839 /* Return non-zero if the formals of FUNC "sufficiently match" the
3840 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3841 may also be an enumeral, in which case it is treated as a 0-
3842 argument function. */
3843
3844 static int
3845 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3846 {
3847 int i;
3848 struct type *func_type = SYMBOL_TYPE (func);
3849
3850 if (SYMBOL_CLASS (func) == LOC_CONST
3851 && func_type->code () == TYPE_CODE_ENUM)
3852 return (n_actuals == 0);
3853 else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
3854 return 0;
3855
3856 if (func_type->num_fields () != n_actuals)
3857 return 0;
3858
3859 for (i = 0; i < n_actuals; i += 1)
3860 {
3861 if (actuals[i] == NULL)
3862 return 0;
3863 else
3864 {
3865 struct type *ftype = ada_check_typedef (func_type->field (i).type ());
3866 struct type *atype = ada_check_typedef (value_type (actuals[i]));
3867
3868 if (!ada_type_match (ftype, atype, 1))
3869 return 0;
3870 }
3871 }
3872 return 1;
3873 }
3874
3875 /* False iff function type FUNC_TYPE definitely does not produce a value
3876 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3877 FUNC_TYPE is not a valid function type with a non-null return type
3878 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3879
3880 static int
3881 return_match (struct type *func_type, struct type *context_type)
3882 {
3883 struct type *return_type;
3884
3885 if (func_type == NULL)
3886 return 1;
3887
3888 if (func_type->code () == TYPE_CODE_FUNC)
3889 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3890 else
3891 return_type = get_base_type (func_type);
3892 if (return_type == NULL)
3893 return 1;
3894
3895 context_type = get_base_type (context_type);
3896
3897 if (return_type->code () == TYPE_CODE_ENUM)
3898 return context_type == NULL || return_type == context_type;
3899 else if (context_type == NULL)
3900 return return_type->code () != TYPE_CODE_VOID;
3901 else
3902 return return_type->code () == context_type->code ();
3903 }
3904
3905
3906 /* Returns the index in SYMS that contains the symbol for the
3907 function (if any) that matches the types of the NARGS arguments in
3908 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3909 that returns that type, then eliminate matches that don't. If
3910 CONTEXT_TYPE is void and there is at least one match that does not
3911 return void, eliminate all matches that do.
3912
3913 Asks the user if there is more than one match remaining. Returns -1
3914 if there is no such symbol or none is selected. NAME is used
3915 solely for messages. May re-arrange and modify SYMS in
3916 the process; the index returned is for the modified vector. */
3917
3918 static int
3919 ada_resolve_function (std::vector<struct block_symbol> &syms,
3920 struct value **args, int nargs,
3921 const char *name, struct type *context_type,
3922 int parse_completion)
3923 {
3924 int fallback;
3925 int k;
3926 int m; /* Number of hits */
3927
3928 m = 0;
3929 /* In the first pass of the loop, we only accept functions matching
3930 context_type. If none are found, we add a second pass of the loop
3931 where every function is accepted. */
3932 for (fallback = 0; m == 0 && fallback < 2; fallback++)
3933 {
3934 for (k = 0; k < syms.size (); k += 1)
3935 {
3936 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
3937
3938 if (ada_args_match (syms[k].symbol, args, nargs)
3939 && (fallback || return_match (type, context_type)))
3940 {
3941 syms[m] = syms[k];
3942 m += 1;
3943 }
3944 }
3945 }
3946
3947 /* If we got multiple matches, ask the user which one to use. Don't do this
3948 interactive thing during completion, though, as the purpose of the
3949 completion is providing a list of all possible matches. Prompting the
3950 user to filter it down would be completely unexpected in this case. */
3951 if (m == 0)
3952 return -1;
3953 else if (m > 1 && !parse_completion)
3954 {
3955 printf_filtered (_("Multiple matches for %s\n"), name);
3956 user_select_syms (syms.data (), m, 1);
3957 return 0;
3958 }
3959 return 0;
3960 }
3961
3962 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3963 on the function identified by SYM and BLOCK, and taking NARGS
3964 arguments. Update *EXPP as needed to hold more space. */
3965
3966 static void
3967 replace_operator_with_call (expression_up *expp, int pc, int nargs,
3968 int oplen, struct symbol *sym,
3969 const struct block *block)
3970 {
3971 /* We want to add 6 more elements (3 for funcall, 4 for function
3972 symbol, -OPLEN for operator being replaced) to the
3973 expression. */
3974 struct expression *exp = expp->get ();
3975 int save_nelts = exp->nelts;
3976 int extra_elts = 7 - oplen;
3977 exp->nelts += extra_elts;
3978
3979 if (extra_elts > 0)
3980 exp->resize (exp->nelts);
3981 memmove (exp->elts + pc + 7, exp->elts + pc + oplen,
3982 EXP_ELEM_TO_BYTES (save_nelts - pc - oplen));
3983 if (extra_elts < 0)
3984 exp->resize (exp->nelts);
3985
3986 exp->elts[pc].opcode = exp->elts[pc + 2].opcode = OP_FUNCALL;
3987 exp->elts[pc + 1].longconst = (LONGEST) nargs;
3988
3989 exp->elts[pc + 3].opcode = exp->elts[pc + 6].opcode = OP_VAR_VALUE;
3990 exp->elts[pc + 4].block = block;
3991 exp->elts[pc + 5].symbol = sym;
3992 }
3993
3994 /* Type-class predicates */
3995
3996 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3997 or FLOAT). */
3998
3999 static int
4000 numeric_type_p (struct type *type)
4001 {
4002 if (type == NULL)
4003 return 0;
4004 else
4005 {
4006 switch (type->code ())
4007 {
4008 case TYPE_CODE_INT:
4009 case TYPE_CODE_FLT:
4010 return 1;
4011 case TYPE_CODE_RANGE:
4012 return (type == TYPE_TARGET_TYPE (type)
4013 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4014 default:
4015 return 0;
4016 }
4017 }
4018 }
4019
4020 /* True iff TYPE is integral (an INT or RANGE of INTs). */
4021
4022 static int
4023 integer_type_p (struct type *type)
4024 {
4025 if (type == NULL)
4026 return 0;
4027 else
4028 {
4029 switch (type->code ())
4030 {
4031 case TYPE_CODE_INT:
4032 return 1;
4033 case TYPE_CODE_RANGE:
4034 return (type == TYPE_TARGET_TYPE (type)
4035 || integer_type_p (TYPE_TARGET_TYPE (type)));
4036 default:
4037 return 0;
4038 }
4039 }
4040 }
4041
4042 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
4043
4044 static int
4045 scalar_type_p (struct type *type)
4046 {
4047 if (type == NULL)
4048 return 0;
4049 else
4050 {
4051 switch (type->code ())
4052 {
4053 case TYPE_CODE_INT:
4054 case TYPE_CODE_RANGE:
4055 case TYPE_CODE_ENUM:
4056 case TYPE_CODE_FLT:
4057 return 1;
4058 default:
4059 return 0;
4060 }
4061 }
4062 }
4063
4064 /* True iff TYPE is discrete (INT, RANGE, ENUM). */
4065
4066 static int
4067 discrete_type_p (struct type *type)
4068 {
4069 if (type == NULL)
4070 return 0;
4071 else
4072 {
4073 switch (type->code ())
4074 {
4075 case TYPE_CODE_INT:
4076 case TYPE_CODE_RANGE:
4077 case TYPE_CODE_ENUM:
4078 case TYPE_CODE_BOOL:
4079 return 1;
4080 default:
4081 return 0;
4082 }
4083 }
4084 }
4085
4086 /* Returns non-zero if OP with operands in the vector ARGS could be
4087 a user-defined function. Errs on the side of pre-defined operators
4088 (i.e., result 0). */
4089
4090 static int
4091 possible_user_operator_p (enum exp_opcode op, struct value *args[])
4092 {
4093 struct type *type0 =
4094 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
4095 struct type *type1 =
4096 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
4097
4098 if (type0 == NULL)
4099 return 0;
4100
4101 switch (op)
4102 {
4103 default:
4104 return 0;
4105
4106 case BINOP_ADD:
4107 case BINOP_SUB:
4108 case BINOP_MUL:
4109 case BINOP_DIV:
4110 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
4111
4112 case BINOP_REM:
4113 case BINOP_MOD:
4114 case BINOP_BITWISE_AND:
4115 case BINOP_BITWISE_IOR:
4116 case BINOP_BITWISE_XOR:
4117 return (!(integer_type_p (type0) && integer_type_p (type1)));
4118
4119 case BINOP_EQUAL:
4120 case BINOP_NOTEQUAL:
4121 case BINOP_LESS:
4122 case BINOP_GTR:
4123 case BINOP_LEQ:
4124 case BINOP_GEQ:
4125 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4126
4127 case BINOP_CONCAT:
4128 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4129
4130 case BINOP_EXP:
4131 return (!(numeric_type_p (type0) && integer_type_p (type1)));
4132
4133 case UNOP_NEG:
4134 case UNOP_PLUS:
4135 case UNOP_LOGICAL_NOT:
4136 case UNOP_ABS:
4137 return (!numeric_type_p (type0));
4138
4139 }
4140 }
4141 \f
4142 /* Renaming */
4143
4144 /* NOTES:
4145
4146 1. In the following, we assume that a renaming type's name may
4147 have an ___XD suffix. It would be nice if this went away at some
4148 point.
4149 2. We handle both the (old) purely type-based representation of
4150 renamings and the (new) variable-based encoding. At some point,
4151 it is devoutly to be hoped that the former goes away
4152 (FIXME: hilfinger-2007-07-09).
4153 3. Subprogram renamings are not implemented, although the XRS
4154 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4155
4156 /* If SYM encodes a renaming,
4157
4158 <renaming> renames <renamed entity>,
4159
4160 sets *LEN to the length of the renamed entity's name,
4161 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4162 the string describing the subcomponent selected from the renamed
4163 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4164 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4165 are undefined). Otherwise, returns a value indicating the category
4166 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4167 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4168 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4169 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4170 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4171 may be NULL, in which case they are not assigned.
4172
4173 [Currently, however, GCC does not generate subprogram renamings.] */
4174
4175 enum ada_renaming_category
4176 ada_parse_renaming (struct symbol *sym,
4177 const char **renamed_entity, int *len,
4178 const char **renaming_expr)
4179 {
4180 enum ada_renaming_category kind;
4181 const char *info;
4182 const char *suffix;
4183
4184 if (sym == NULL)
4185 return ADA_NOT_RENAMING;
4186 switch (SYMBOL_CLASS (sym))
4187 {
4188 default:
4189 return ADA_NOT_RENAMING;
4190 case LOC_LOCAL:
4191 case LOC_STATIC:
4192 case LOC_COMPUTED:
4193 case LOC_OPTIMIZED_OUT:
4194 info = strstr (sym->linkage_name (), "___XR");
4195 if (info == NULL)
4196 return ADA_NOT_RENAMING;
4197 switch (info[5])
4198 {
4199 case '_':
4200 kind = ADA_OBJECT_RENAMING;
4201 info += 6;
4202 break;
4203 case 'E':
4204 kind = ADA_EXCEPTION_RENAMING;
4205 info += 7;
4206 break;
4207 case 'P':
4208 kind = ADA_PACKAGE_RENAMING;
4209 info += 7;
4210 break;
4211 case 'S':
4212 kind = ADA_SUBPROGRAM_RENAMING;
4213 info += 7;
4214 break;
4215 default:
4216 return ADA_NOT_RENAMING;
4217 }
4218 }
4219
4220 if (renamed_entity != NULL)
4221 *renamed_entity = info;
4222 suffix = strstr (info, "___XE");
4223 if (suffix == NULL || suffix == info)
4224 return ADA_NOT_RENAMING;
4225 if (len != NULL)
4226 *len = strlen (info) - strlen (suffix);
4227 suffix += 5;
4228 if (renaming_expr != NULL)
4229 *renaming_expr = suffix;
4230 return kind;
4231 }
4232
4233 /* Compute the value of the given RENAMING_SYM, which is expected to
4234 be a symbol encoding a renaming expression. BLOCK is the block
4235 used to evaluate the renaming. */
4236
4237 static struct value *
4238 ada_read_renaming_var_value (struct symbol *renaming_sym,
4239 const struct block *block)
4240 {
4241 const char *sym_name;
4242
4243 sym_name = renaming_sym->linkage_name ();
4244 expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4245 return evaluate_expression (expr.get ());
4246 }
4247 \f
4248
4249 /* Evaluation: Function Calls */
4250
4251 /* Return an lvalue containing the value VAL. This is the identity on
4252 lvalues, and otherwise has the side-effect of allocating memory
4253 in the inferior where a copy of the value contents is copied. */
4254
4255 static struct value *
4256 ensure_lval (struct value *val)
4257 {
4258 if (VALUE_LVAL (val) == not_lval
4259 || VALUE_LVAL (val) == lval_internalvar)
4260 {
4261 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4262 const CORE_ADDR addr =
4263 value_as_long (value_allocate_space_in_inferior (len));
4264
4265 VALUE_LVAL (val) = lval_memory;
4266 set_value_address (val, addr);
4267 write_memory (addr, value_contents (val), len);
4268 }
4269
4270 return val;
4271 }
4272
4273 /* Given ARG, a value of type (pointer or reference to a)*
4274 structure/union, extract the component named NAME from the ultimate
4275 target structure/union and return it as a value with its
4276 appropriate type.
4277
4278 The routine searches for NAME among all members of the structure itself
4279 and (recursively) among all members of any wrapper members
4280 (e.g., '_parent').
4281
4282 If NO_ERR, then simply return NULL in case of error, rather than
4283 calling error. */
4284
4285 static struct value *
4286 ada_value_struct_elt (struct value *arg, const char *name, int no_err)
4287 {
4288 struct type *t, *t1;
4289 struct value *v;
4290 int check_tag;
4291
4292 v = NULL;
4293 t1 = t = ada_check_typedef (value_type (arg));
4294 if (t->code () == TYPE_CODE_REF)
4295 {
4296 t1 = TYPE_TARGET_TYPE (t);
4297 if (t1 == NULL)
4298 goto BadValue;
4299 t1 = ada_check_typedef (t1);
4300 if (t1->code () == TYPE_CODE_PTR)
4301 {
4302 arg = coerce_ref (arg);
4303 t = t1;
4304 }
4305 }
4306
4307 while (t->code () == TYPE_CODE_PTR)
4308 {
4309 t1 = TYPE_TARGET_TYPE (t);
4310 if (t1 == NULL)
4311 goto BadValue;
4312 t1 = ada_check_typedef (t1);
4313 if (t1->code () == TYPE_CODE_PTR)
4314 {
4315 arg = value_ind (arg);
4316 t = t1;
4317 }
4318 else
4319 break;
4320 }
4321
4322 if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION)
4323 goto BadValue;
4324
4325 if (t1 == t)
4326 v = ada_search_struct_field (name, arg, 0, t);
4327 else
4328 {
4329 int bit_offset, bit_size, byte_offset;
4330 struct type *field_type;
4331 CORE_ADDR address;
4332
4333 if (t->code () == TYPE_CODE_PTR)
4334 address = value_address (ada_value_ind (arg));
4335 else
4336 address = value_address (ada_coerce_ref (arg));
4337
4338 /* Check to see if this is a tagged type. We also need to handle
4339 the case where the type is a reference to a tagged type, but
4340 we have to be careful to exclude pointers to tagged types.
4341 The latter should be shown as usual (as a pointer), whereas
4342 a reference should mostly be transparent to the user. */
4343
4344 if (ada_is_tagged_type (t1, 0)
4345 || (t1->code () == TYPE_CODE_REF
4346 && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
4347 {
4348 /* We first try to find the searched field in the current type.
4349 If not found then let's look in the fixed type. */
4350
4351 if (!find_struct_field (name, t1, 0,
4352 &field_type, &byte_offset, &bit_offset,
4353 &bit_size, NULL))
4354 check_tag = 1;
4355 else
4356 check_tag = 0;
4357 }
4358 else
4359 check_tag = 0;
4360
4361 /* Convert to fixed type in all cases, so that we have proper
4362 offsets to each field in unconstrained record types. */
4363 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
4364 address, NULL, check_tag);
4365
4366 /* Resolve the dynamic type as well. */
4367 arg = value_from_contents_and_address (t1, nullptr, address);
4368 t1 = value_type (arg);
4369
4370 if (find_struct_field (name, t1, 0,
4371 &field_type, &byte_offset, &bit_offset,
4372 &bit_size, NULL))
4373 {
4374 if (bit_size != 0)
4375 {
4376 if (t->code () == TYPE_CODE_REF)
4377 arg = ada_coerce_ref (arg);
4378 else
4379 arg = ada_value_ind (arg);
4380 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
4381 bit_offset, bit_size,
4382 field_type);
4383 }
4384 else
4385 v = value_at_lazy (field_type, address + byte_offset);
4386 }
4387 }
4388
4389 if (v != NULL || no_err)
4390 return v;
4391 else
4392 error (_("There is no member named %s."), name);
4393
4394 BadValue:
4395 if (no_err)
4396 return NULL;
4397 else
4398 error (_("Attempt to extract a component of "
4399 "a value that is not a record."));
4400 }
4401
4402 /* Return the value ACTUAL, converted to be an appropriate value for a
4403 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4404 allocating any necessary descriptors (fat pointers), or copies of
4405 values not residing in memory, updating it as needed. */
4406
4407 struct value *
4408 ada_convert_actual (struct value *actual, struct type *formal_type0)
4409 {
4410 struct type *actual_type = ada_check_typedef (value_type (actual));
4411 struct type *formal_type = ada_check_typedef (formal_type0);
4412 struct type *formal_target =
4413 formal_type->code () == TYPE_CODE_PTR
4414 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4415 struct type *actual_target =
4416 actual_type->code () == TYPE_CODE_PTR
4417 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4418
4419 if (ada_is_array_descriptor_type (formal_target)
4420 && actual_target->code () == TYPE_CODE_ARRAY)
4421 return make_array_descriptor (formal_type, actual);
4422 else if (formal_type->code () == TYPE_CODE_PTR
4423 || formal_type->code () == TYPE_CODE_REF)
4424 {
4425 struct value *result;
4426
4427 if (formal_target->code () == TYPE_CODE_ARRAY
4428 && ada_is_array_descriptor_type (actual_target))
4429 result = desc_data (actual);
4430 else if (formal_type->code () != TYPE_CODE_PTR)
4431 {
4432 if (VALUE_LVAL (actual) != lval_memory)
4433 {
4434 struct value *val;
4435
4436 actual_type = ada_check_typedef (value_type (actual));
4437 val = allocate_value (actual_type);
4438 memcpy ((char *) value_contents_raw (val),
4439 (char *) value_contents (actual),
4440 TYPE_LENGTH (actual_type));
4441 actual = ensure_lval (val);
4442 }
4443 result = value_addr (actual);
4444 }
4445 else
4446 return actual;
4447 return value_cast_pointers (formal_type, result, 0);
4448 }
4449 else if (actual_type->code () == TYPE_CODE_PTR)
4450 return ada_value_ind (actual);
4451 else if (ada_is_aligner_type (formal_type))
4452 {
4453 /* We need to turn this parameter into an aligner type
4454 as well. */
4455 struct value *aligner = allocate_value (formal_type);
4456 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4457
4458 value_assign_to_component (aligner, component, actual);
4459 return aligner;
4460 }
4461
4462 return actual;
4463 }
4464
4465 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4466 type TYPE. This is usually an inefficient no-op except on some targets
4467 (such as AVR) where the representation of a pointer and an address
4468 differs. */
4469
4470 static CORE_ADDR
4471 value_pointer (struct value *value, struct type *type)
4472 {
4473 unsigned len = TYPE_LENGTH (type);
4474 gdb_byte *buf = (gdb_byte *) alloca (len);
4475 CORE_ADDR addr;
4476
4477 addr = value_address (value);
4478 gdbarch_address_to_pointer (type->arch (), type, buf, addr);
4479 addr = extract_unsigned_integer (buf, len, type_byte_order (type));
4480 return addr;
4481 }
4482
4483
4484 /* Push a descriptor of type TYPE for array value ARR on the stack at
4485 *SP, updating *SP to reflect the new descriptor. Return either
4486 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4487 to-descriptor type rather than a descriptor type), a struct value *
4488 representing a pointer to this descriptor. */
4489
4490 static struct value *
4491 make_array_descriptor (struct type *type, struct value *arr)
4492 {
4493 struct type *bounds_type = desc_bounds_type (type);
4494 struct type *desc_type = desc_base_type (type);
4495 struct value *descriptor = allocate_value (desc_type);
4496 struct value *bounds = allocate_value (bounds_type);
4497 int i;
4498
4499 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4500 i > 0; i -= 1)
4501 {
4502 modify_field (value_type (bounds), value_contents_writeable (bounds),
4503 ada_array_bound (arr, i, 0),
4504 desc_bound_bitpos (bounds_type, i, 0),
4505 desc_bound_bitsize (bounds_type, i, 0));
4506 modify_field (value_type (bounds), value_contents_writeable (bounds),
4507 ada_array_bound (arr, i, 1),
4508 desc_bound_bitpos (bounds_type, i, 1),
4509 desc_bound_bitsize (bounds_type, i, 1));
4510 }
4511
4512 bounds = ensure_lval (bounds);
4513
4514 modify_field (value_type (descriptor),
4515 value_contents_writeable (descriptor),
4516 value_pointer (ensure_lval (arr),
4517 desc_type->field (0).type ()),
4518 fat_pntr_data_bitpos (desc_type),
4519 fat_pntr_data_bitsize (desc_type));
4520
4521 modify_field (value_type (descriptor),
4522 value_contents_writeable (descriptor),
4523 value_pointer (bounds,
4524 desc_type->field (1).type ()),
4525 fat_pntr_bounds_bitpos (desc_type),
4526 fat_pntr_bounds_bitsize (desc_type));
4527
4528 descriptor = ensure_lval (descriptor);
4529
4530 if (type->code () == TYPE_CODE_PTR)
4531 return value_addr (descriptor);
4532 else
4533 return descriptor;
4534 }
4535 \f
4536 /* Symbol Cache Module */
4537
4538 /* Performance measurements made as of 2010-01-15 indicate that
4539 this cache does bring some noticeable improvements. Depending
4540 on the type of entity being printed, the cache can make it as much
4541 as an order of magnitude faster than without it.
4542
4543 The descriptive type DWARF extension has significantly reduced
4544 the need for this cache, at least when DWARF is being used. However,
4545 even in this case, some expensive name-based symbol searches are still
4546 sometimes necessary - to find an XVZ variable, mostly. */
4547
4548 /* Return the symbol cache associated to the given program space PSPACE.
4549 If not allocated for this PSPACE yet, allocate and initialize one. */
4550
4551 static struct ada_symbol_cache *
4552 ada_get_symbol_cache (struct program_space *pspace)
4553 {
4554 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4555
4556 if (pspace_data->sym_cache == nullptr)
4557 pspace_data->sym_cache.reset (new ada_symbol_cache);
4558
4559 return pspace_data->sym_cache.get ();
4560 }
4561
4562 /* Clear all entries from the symbol cache. */
4563
4564 static void
4565 ada_clear_symbol_cache ()
4566 {
4567 struct ada_pspace_data *pspace_data
4568 = get_ada_pspace_data (current_program_space);
4569
4570 if (pspace_data->sym_cache != nullptr)
4571 pspace_data->sym_cache.reset ();
4572 }
4573
4574 /* Search our cache for an entry matching NAME and DOMAIN.
4575 Return it if found, or NULL otherwise. */
4576
4577 static struct cache_entry **
4578 find_entry (const char *name, domain_enum domain)
4579 {
4580 struct ada_symbol_cache *sym_cache
4581 = ada_get_symbol_cache (current_program_space);
4582 int h = msymbol_hash (name) % HASH_SIZE;
4583 struct cache_entry **e;
4584
4585 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4586 {
4587 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
4588 return e;
4589 }
4590 return NULL;
4591 }
4592
4593 /* Search the symbol cache for an entry matching NAME and DOMAIN.
4594 Return 1 if found, 0 otherwise.
4595
4596 If an entry was found and SYM is not NULL, set *SYM to the entry's
4597 SYM. Same principle for BLOCK if not NULL. */
4598
4599 static int
4600 lookup_cached_symbol (const char *name, domain_enum domain,
4601 struct symbol **sym, const struct block **block)
4602 {
4603 struct cache_entry **e = find_entry (name, domain);
4604
4605 if (e == NULL)
4606 return 0;
4607 if (sym != NULL)
4608 *sym = (*e)->sym;
4609 if (block != NULL)
4610 *block = (*e)->block;
4611 return 1;
4612 }
4613
4614 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4615 in domain DOMAIN, save this result in our symbol cache. */
4616
4617 static void
4618 cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
4619 const struct block *block)
4620 {
4621 struct ada_symbol_cache *sym_cache
4622 = ada_get_symbol_cache (current_program_space);
4623 int h;
4624 struct cache_entry *e;
4625
4626 /* Symbols for builtin types don't have a block.
4627 For now don't cache such symbols. */
4628 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4629 return;
4630
4631 /* If the symbol is a local symbol, then do not cache it, as a search
4632 for that symbol depends on the context. To determine whether
4633 the symbol is local or not, we check the block where we found it
4634 against the global and static blocks of its associated symtab. */
4635 if (sym
4636 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4637 GLOBAL_BLOCK) != block
4638 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4639 STATIC_BLOCK) != block)
4640 return;
4641
4642 h = msymbol_hash (name) % HASH_SIZE;
4643 e = XOBNEW (&sym_cache->cache_space, cache_entry);
4644 e->next = sym_cache->root[h];
4645 sym_cache->root[h] = e;
4646 e->name = obstack_strdup (&sym_cache->cache_space, name);
4647 e->sym = sym;
4648 e->domain = domain;
4649 e->block = block;
4650 }
4651 \f
4652 /* Symbol Lookup */
4653
4654 /* Return the symbol name match type that should be used used when
4655 searching for all symbols matching LOOKUP_NAME.
4656
4657 LOOKUP_NAME is expected to be a symbol name after transformation
4658 for Ada lookups. */
4659
4660 static symbol_name_match_type
4661 name_match_type_from_name (const char *lookup_name)
4662 {
4663 return (strstr (lookup_name, "__") == NULL
4664 ? symbol_name_match_type::WILD
4665 : symbol_name_match_type::FULL);
4666 }
4667
4668 /* Return the result of a standard (literal, C-like) lookup of NAME in
4669 given DOMAIN, visible from lexical block BLOCK. */
4670
4671 static struct symbol *
4672 standard_lookup (const char *name, const struct block *block,
4673 domain_enum domain)
4674 {
4675 /* Initialize it just to avoid a GCC false warning. */
4676 struct block_symbol sym = {};
4677
4678 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4679 return sym.symbol;
4680 ada_lookup_encoded_symbol (name, block, domain, &sym);
4681 cache_symbol (name, domain, sym.symbol, sym.block);
4682 return sym.symbol;
4683 }
4684
4685
4686 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4687 in the symbol fields of SYMS. We treat enumerals as functions,
4688 since they contend in overloading in the same way. */
4689 static int
4690 is_nonfunction (const std::vector<struct block_symbol> &syms)
4691 {
4692 for (const block_symbol &sym : syms)
4693 if (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_FUNC
4694 && (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_ENUM
4695 || SYMBOL_CLASS (sym.symbol) != LOC_CONST))
4696 return 1;
4697
4698 return 0;
4699 }
4700
4701 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4702 struct types. Otherwise, they may not. */
4703
4704 static int
4705 equiv_types (struct type *type0, struct type *type1)
4706 {
4707 if (type0 == type1)
4708 return 1;
4709 if (type0 == NULL || type1 == NULL
4710 || type0->code () != type1->code ())
4711 return 0;
4712 if ((type0->code () == TYPE_CODE_STRUCT
4713 || type0->code () == TYPE_CODE_ENUM)
4714 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4715 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4716 return 1;
4717
4718 return 0;
4719 }
4720
4721 /* True iff SYM0 represents the same entity as SYM1, or one that is
4722 no more defined than that of SYM1. */
4723
4724 static int
4725 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4726 {
4727 if (sym0 == sym1)
4728 return 1;
4729 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4730 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4731 return 0;
4732
4733 switch (SYMBOL_CLASS (sym0))
4734 {
4735 case LOC_UNDEF:
4736 return 1;
4737 case LOC_TYPEDEF:
4738 {
4739 struct type *type0 = SYMBOL_TYPE (sym0);
4740 struct type *type1 = SYMBOL_TYPE (sym1);
4741 const char *name0 = sym0->linkage_name ();
4742 const char *name1 = sym1->linkage_name ();
4743 int len0 = strlen (name0);
4744
4745 return
4746 type0->code () == type1->code ()
4747 && (equiv_types (type0, type1)
4748 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4749 && startswith (name1 + len0, "___XV")));
4750 }
4751 case LOC_CONST:
4752 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4753 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4754
4755 case LOC_STATIC:
4756 {
4757 const char *name0 = sym0->linkage_name ();
4758 const char *name1 = sym1->linkage_name ();
4759 return (strcmp (name0, name1) == 0
4760 && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
4761 }
4762
4763 default:
4764 return 0;
4765 }
4766 }
4767
4768 /* Append (SYM,BLOCK) to the end of the array of struct block_symbol
4769 records in RESULT. Do nothing if SYM is a duplicate. */
4770
4771 static void
4772 add_defn_to_vec (std::vector<struct block_symbol> &result,
4773 struct symbol *sym,
4774 const struct block *block)
4775 {
4776 /* Do not try to complete stub types, as the debugger is probably
4777 already scanning all symbols matching a certain name at the
4778 time when this function is called. Trying to replace the stub
4779 type by its associated full type will cause us to restart a scan
4780 which may lead to an infinite recursion. Instead, the client
4781 collecting the matching symbols will end up collecting several
4782 matches, with at least one of them complete. It can then filter
4783 out the stub ones if needed. */
4784
4785 for (int i = result.size () - 1; i >= 0; i -= 1)
4786 {
4787 if (lesseq_defined_than (sym, result[i].symbol))
4788 return;
4789 else if (lesseq_defined_than (result[i].symbol, sym))
4790 {
4791 result[i].symbol = sym;
4792 result[i].block = block;
4793 return;
4794 }
4795 }
4796
4797 struct block_symbol info;
4798 info.symbol = sym;
4799 info.block = block;
4800 result.push_back (info);
4801 }
4802
4803 /* Return a bound minimal symbol matching NAME according to Ada
4804 decoding rules. Returns an invalid symbol if there is no such
4805 minimal symbol. Names prefixed with "standard__" are handled
4806 specially: "standard__" is first stripped off, and only static and
4807 global symbols are searched. */
4808
4809 struct bound_minimal_symbol
4810 ada_lookup_simple_minsym (const char *name)
4811 {
4812 struct bound_minimal_symbol result;
4813
4814 memset (&result, 0, sizeof (result));
4815
4816 symbol_name_match_type match_type = name_match_type_from_name (name);
4817 lookup_name_info lookup_name (name, match_type);
4818
4819 symbol_name_matcher_ftype *match_name
4820 = ada_get_symbol_name_matcher (lookup_name);
4821
4822 for (objfile *objfile : current_program_space->objfiles ())
4823 {
4824 for (minimal_symbol *msymbol : objfile->msymbols ())
4825 {
4826 if (match_name (msymbol->linkage_name (), lookup_name, NULL)
4827 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4828 {
4829 result.minsym = msymbol;
4830 result.objfile = objfile;
4831 break;
4832 }
4833 }
4834 }
4835
4836 return result;
4837 }
4838
4839 /* For all subprograms that statically enclose the subprogram of the
4840 selected frame, add symbols matching identifier NAME in DOMAIN
4841 and their blocks to the list of data in RESULT, as for
4842 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4843 with a wildcard prefix. */
4844
4845 static void
4846 add_symbols_from_enclosing_procs (std::vector<struct block_symbol> &result,
4847 const lookup_name_info &lookup_name,
4848 domain_enum domain)
4849 {
4850 }
4851
4852 /* True if TYPE is definitely an artificial type supplied to a symbol
4853 for which no debugging information was given in the symbol file. */
4854
4855 static int
4856 is_nondebugging_type (struct type *type)
4857 {
4858 const char *name = ada_type_name (type);
4859
4860 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4861 }
4862
4863 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4864 that are deemed "identical" for practical purposes.
4865
4866 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4867 types and that their number of enumerals is identical (in other
4868 words, type1->num_fields () == type2->num_fields ()). */
4869
4870 static int
4871 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4872 {
4873 int i;
4874
4875 /* The heuristic we use here is fairly conservative. We consider
4876 that 2 enumerate types are identical if they have the same
4877 number of enumerals and that all enumerals have the same
4878 underlying value and name. */
4879
4880 /* All enums in the type should have an identical underlying value. */
4881 for (i = 0; i < type1->num_fields (); i++)
4882 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4883 return 0;
4884
4885 /* All enumerals should also have the same name (modulo any numerical
4886 suffix). */
4887 for (i = 0; i < type1->num_fields (); i++)
4888 {
4889 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4890 const char *name_2 = TYPE_FIELD_NAME (type2, i);
4891 int len_1 = strlen (name_1);
4892 int len_2 = strlen (name_2);
4893
4894 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4895 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4896 if (len_1 != len_2
4897 || strncmp (TYPE_FIELD_NAME (type1, i),
4898 TYPE_FIELD_NAME (type2, i),
4899 len_1) != 0)
4900 return 0;
4901 }
4902
4903 return 1;
4904 }
4905
4906 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4907 that are deemed "identical" for practical purposes. Sometimes,
4908 enumerals are not strictly identical, but their types are so similar
4909 that they can be considered identical.
4910
4911 For instance, consider the following code:
4912
4913 type Color is (Black, Red, Green, Blue, White);
4914 type RGB_Color is new Color range Red .. Blue;
4915
4916 Type RGB_Color is a subrange of an implicit type which is a copy
4917 of type Color. If we call that implicit type RGB_ColorB ("B" is
4918 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4919 As a result, when an expression references any of the enumeral
4920 by name (Eg. "print green"), the expression is technically
4921 ambiguous and the user should be asked to disambiguate. But
4922 doing so would only hinder the user, since it wouldn't matter
4923 what choice he makes, the outcome would always be the same.
4924 So, for practical purposes, we consider them as the same. */
4925
4926 static int
4927 symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
4928 {
4929 int i;
4930
4931 /* Before performing a thorough comparison check of each type,
4932 we perform a series of inexpensive checks. We expect that these
4933 checks will quickly fail in the vast majority of cases, and thus
4934 help prevent the unnecessary use of a more expensive comparison.
4935 Said comparison also expects us to make some of these checks
4936 (see ada_identical_enum_types_p). */
4937
4938 /* Quick check: All symbols should have an enum type. */
4939 for (i = 0; i < syms.size (); i++)
4940 if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
4941 return 0;
4942
4943 /* Quick check: They should all have the same value. */
4944 for (i = 1; i < syms.size (); i++)
4945 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
4946 return 0;
4947
4948 /* Quick check: They should all have the same number of enumerals. */
4949 for (i = 1; i < syms.size (); i++)
4950 if (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
4951 != SYMBOL_TYPE (syms[0].symbol)->num_fields ())
4952 return 0;
4953
4954 /* All the sanity checks passed, so we might have a set of
4955 identical enumeration types. Perform a more complete
4956 comparison of the type of each symbol. */
4957 for (i = 1; i < syms.size (); i++)
4958 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
4959 SYMBOL_TYPE (syms[0].symbol)))
4960 return 0;
4961
4962 return 1;
4963 }
4964
4965 /* Remove any non-debugging symbols in SYMS that definitely
4966 duplicate other symbols in the list (The only case I know of where
4967 this happens is when object files containing stabs-in-ecoff are
4968 linked with files containing ordinary ecoff debugging symbols (or no
4969 debugging symbols)). Modifies SYMS to squeeze out deleted entries. */
4970
4971 static void
4972 remove_extra_symbols (std::vector<struct block_symbol> *syms)
4973 {
4974 int i, j;
4975
4976 /* We should never be called with less than 2 symbols, as there
4977 cannot be any extra symbol in that case. But it's easy to
4978 handle, since we have nothing to do in that case. */
4979 if (syms->size () < 2)
4980 return;
4981
4982 i = 0;
4983 while (i < syms->size ())
4984 {
4985 int remove_p = 0;
4986
4987 /* If two symbols have the same name and one of them is a stub type,
4988 the get rid of the stub. */
4989
4990 if (SYMBOL_TYPE ((*syms)[i].symbol)->is_stub ()
4991 && (*syms)[i].symbol->linkage_name () != NULL)
4992 {
4993 for (j = 0; j < syms->size (); j++)
4994 {
4995 if (j != i
4996 && !SYMBOL_TYPE ((*syms)[j].symbol)->is_stub ()
4997 && (*syms)[j].symbol->linkage_name () != NULL
4998 && strcmp ((*syms)[i].symbol->linkage_name (),
4999 (*syms)[j].symbol->linkage_name ()) == 0)
5000 remove_p = 1;
5001 }
5002 }
5003
5004 /* Two symbols with the same name, same class and same address
5005 should be identical. */
5006
5007 else if ((*syms)[i].symbol->linkage_name () != NULL
5008 && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5009 && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
5010 {
5011 for (j = 0; j < syms->size (); j += 1)
5012 {
5013 if (i != j
5014 && (*syms)[j].symbol->linkage_name () != NULL
5015 && strcmp ((*syms)[i].symbol->linkage_name (),
5016 (*syms)[j].symbol->linkage_name ()) == 0
5017 && SYMBOL_CLASS ((*syms)[i].symbol)
5018 == SYMBOL_CLASS ((*syms)[j].symbol)
5019 && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5020 == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
5021 remove_p = 1;
5022 }
5023 }
5024
5025 if (remove_p)
5026 syms->erase (syms->begin () + i);
5027 else
5028 i += 1;
5029 }
5030
5031 /* If all the remaining symbols are identical enumerals, then
5032 just keep the first one and discard the rest.
5033
5034 Unlike what we did previously, we do not discard any entry
5035 unless they are ALL identical. This is because the symbol
5036 comparison is not a strict comparison, but rather a practical
5037 comparison. If all symbols are considered identical, then
5038 we can just go ahead and use the first one and discard the rest.
5039 But if we cannot reduce the list to a single element, we have
5040 to ask the user to disambiguate anyways. And if we have to
5041 present a multiple-choice menu, it's less confusing if the list
5042 isn't missing some choices that were identical and yet distinct. */
5043 if (symbols_are_identical_enums (*syms))
5044 syms->resize (1);
5045 }
5046
5047 /* Given a type that corresponds to a renaming entity, use the type name
5048 to extract the scope (package name or function name, fully qualified,
5049 and following the GNAT encoding convention) where this renaming has been
5050 defined. */
5051
5052 static std::string
5053 xget_renaming_scope (struct type *renaming_type)
5054 {
5055 /* The renaming types adhere to the following convention:
5056 <scope>__<rename>___<XR extension>.
5057 So, to extract the scope, we search for the "___XR" extension,
5058 and then backtrack until we find the first "__". */
5059
5060 const char *name = renaming_type->name ();
5061 const char *suffix = strstr (name, "___XR");
5062 const char *last;
5063
5064 /* Now, backtrack a bit until we find the first "__". Start looking
5065 at suffix - 3, as the <rename> part is at least one character long. */
5066
5067 for (last = suffix - 3; last > name; last--)
5068 if (last[0] == '_' && last[1] == '_')
5069 break;
5070
5071 /* Make a copy of scope and return it. */
5072 return std::string (name, last);
5073 }
5074
5075 /* Return nonzero if NAME corresponds to a package name. */
5076
5077 static int
5078 is_package_name (const char *name)
5079 {
5080 /* Here, We take advantage of the fact that no symbols are generated
5081 for packages, while symbols are generated for each function.
5082 So the condition for NAME represent a package becomes equivalent
5083 to NAME not existing in our list of symbols. There is only one
5084 small complication with library-level functions (see below). */
5085
5086 /* If it is a function that has not been defined at library level,
5087 then we should be able to look it up in the symbols. */
5088 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5089 return 0;
5090
5091 /* Library-level function names start with "_ada_". See if function
5092 "_ada_" followed by NAME can be found. */
5093
5094 /* Do a quick check that NAME does not contain "__", since library-level
5095 functions names cannot contain "__" in them. */
5096 if (strstr (name, "__") != NULL)
5097 return 0;
5098
5099 std::string fun_name = string_printf ("_ada_%s", name);
5100
5101 return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
5102 }
5103
5104 /* Return nonzero if SYM corresponds to a renaming entity that is
5105 not visible from FUNCTION_NAME. */
5106
5107 static int
5108 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
5109 {
5110 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5111 return 0;
5112
5113 std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
5114
5115 /* If the rename has been defined in a package, then it is visible. */
5116 if (is_package_name (scope.c_str ()))
5117 return 0;
5118
5119 /* Check that the rename is in the current function scope by checking
5120 that its name starts with SCOPE. */
5121
5122 /* If the function name starts with "_ada_", it means that it is
5123 a library-level function. Strip this prefix before doing the
5124 comparison, as the encoding for the renaming does not contain
5125 this prefix. */
5126 if (startswith (function_name, "_ada_"))
5127 function_name += 5;
5128
5129 return !startswith (function_name, scope.c_str ());
5130 }
5131
5132 /* Remove entries from SYMS that corresponds to a renaming entity that
5133 is not visible from the function associated with CURRENT_BLOCK or
5134 that is superfluous due to the presence of more specific renaming
5135 information. Places surviving symbols in the initial entries of
5136 SYMS.
5137
5138 Rationale:
5139 First, in cases where an object renaming is implemented as a
5140 reference variable, GNAT may produce both the actual reference
5141 variable and the renaming encoding. In this case, we discard the
5142 latter.
5143
5144 Second, GNAT emits a type following a specified encoding for each renaming
5145 entity. Unfortunately, STABS currently does not support the definition
5146 of types that are local to a given lexical block, so all renamings types
5147 are emitted at library level. As a consequence, if an application
5148 contains two renaming entities using the same name, and a user tries to
5149 print the value of one of these entities, the result of the ada symbol
5150 lookup will also contain the wrong renaming type.
5151
5152 This function partially covers for this limitation by attempting to
5153 remove from the SYMS list renaming symbols that should be visible
5154 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5155 method with the current information available. The implementation
5156 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5157
5158 - When the user tries to print a rename in a function while there
5159 is another rename entity defined in a package: Normally, the
5160 rename in the function has precedence over the rename in the
5161 package, so the latter should be removed from the list. This is
5162 currently not the case.
5163
5164 - This function will incorrectly remove valid renames if
5165 the CURRENT_BLOCK corresponds to a function which symbol name
5166 has been changed by an "Export" pragma. As a consequence,
5167 the user will be unable to print such rename entities. */
5168
5169 static void
5170 remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5171 const struct block *current_block)
5172 {
5173 struct symbol *current_function;
5174 const char *current_function_name;
5175 int i;
5176 int is_new_style_renaming;
5177
5178 /* If there is both a renaming foo___XR... encoded as a variable and
5179 a simple variable foo in the same block, discard the latter.
5180 First, zero out such symbols, then compress. */
5181 is_new_style_renaming = 0;
5182 for (i = 0; i < syms->size (); i += 1)
5183 {
5184 struct symbol *sym = (*syms)[i].symbol;
5185 const struct block *block = (*syms)[i].block;
5186 const char *name;
5187 const char *suffix;
5188
5189 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5190 continue;
5191 name = sym->linkage_name ();
5192 suffix = strstr (name, "___XR");
5193
5194 if (suffix != NULL)
5195 {
5196 int name_len = suffix - name;
5197 int j;
5198
5199 is_new_style_renaming = 1;
5200 for (j = 0; j < syms->size (); j += 1)
5201 if (i != j && (*syms)[j].symbol != NULL
5202 && strncmp (name, (*syms)[j].symbol->linkage_name (),
5203 name_len) == 0
5204 && block == (*syms)[j].block)
5205 (*syms)[j].symbol = NULL;
5206 }
5207 }
5208 if (is_new_style_renaming)
5209 {
5210 int j, k;
5211
5212 for (j = k = 0; j < syms->size (); j += 1)
5213 if ((*syms)[j].symbol != NULL)
5214 {
5215 (*syms)[k] = (*syms)[j];
5216 k += 1;
5217 }
5218 syms->resize (k);
5219 return;
5220 }
5221
5222 /* Extract the function name associated to CURRENT_BLOCK.
5223 Abort if unable to do so. */
5224
5225 if (current_block == NULL)
5226 return;
5227
5228 current_function = block_linkage_function (current_block);
5229 if (current_function == NULL)
5230 return;
5231
5232 current_function_name = current_function->linkage_name ();
5233 if (current_function_name == NULL)
5234 return;
5235
5236 /* Check each of the symbols, and remove it from the list if it is
5237 a type corresponding to a renaming that is out of the scope of
5238 the current block. */
5239
5240 i = 0;
5241 while (i < syms->size ())
5242 {
5243 if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
5244 == ADA_OBJECT_RENAMING
5245 && old_renaming_is_invisible ((*syms)[i].symbol,
5246 current_function_name))
5247 syms->erase (syms->begin () + i);
5248 else
5249 i += 1;
5250 }
5251 }
5252
5253 /* Add to RESULT all symbols from BLOCK (and its super-blocks)
5254 whose name and domain match NAME and DOMAIN respectively.
5255 If no match was found, then extend the search to "enclosing"
5256 routines (in other words, if we're inside a nested function,
5257 search the symbols defined inside the enclosing functions).
5258 If WILD_MATCH_P is nonzero, perform the naming matching in
5259 "wild" mode (see function "wild_match" for more info).
5260
5261 Note: This function assumes that RESULT has 0 (zero) element in it. */
5262
5263 static void
5264 ada_add_local_symbols (std::vector<struct block_symbol> &result,
5265 const lookup_name_info &lookup_name,
5266 const struct block *block, domain_enum domain)
5267 {
5268 int block_depth = 0;
5269
5270 while (block != NULL)
5271 {
5272 block_depth += 1;
5273 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
5274
5275 /* If we found a non-function match, assume that's the one. */
5276 if (is_nonfunction (result))
5277 return;
5278
5279 block = BLOCK_SUPERBLOCK (block);
5280 }
5281
5282 /* If no luck so far, try to find NAME as a local symbol in some lexically
5283 enclosing subprogram. */
5284 if (result.empty () && block_depth > 2)
5285 add_symbols_from_enclosing_procs (result, lookup_name, domain);
5286 }
5287
5288 /* An object of this type is used as the user_data argument when
5289 calling the map_matching_symbols method. */
5290
5291 struct match_data
5292 {
5293 explicit match_data (std::vector<struct block_symbol> *rp)
5294 : resultp (rp)
5295 {
5296 }
5297 DISABLE_COPY_AND_ASSIGN (match_data);
5298
5299 struct objfile *objfile = nullptr;
5300 std::vector<struct block_symbol> *resultp;
5301 struct symbol *arg_sym = nullptr;
5302 bool found_sym = false;
5303 };
5304
5305 /* A callback for add_nonlocal_symbols that adds symbol, found in BSYM,
5306 to a list of symbols. DATA is a pointer to a struct match_data *
5307 containing the vector that collects the symbol list, the file that SYM
5308 must come from, a flag indicating whether a non-argument symbol has
5309 been found in the current block, and the last argument symbol
5310 passed in SYM within the current block (if any). When SYM is null,
5311 marking the end of a block, the argument symbol is added if no
5312 other has been found. */
5313
5314 static bool
5315 aux_add_nonlocal_symbols (struct block_symbol *bsym,
5316 struct match_data *data)
5317 {
5318 const struct block *block = bsym->block;
5319 struct symbol *sym = bsym->symbol;
5320
5321 if (sym == NULL)
5322 {
5323 if (!data->found_sym && data->arg_sym != NULL)
5324 add_defn_to_vec (*data->resultp,
5325 fixup_symbol_section (data->arg_sym, data->objfile),
5326 block);
5327 data->found_sym = false;
5328 data->arg_sym = NULL;
5329 }
5330 else
5331 {
5332 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5333 return true;
5334 else if (SYMBOL_IS_ARGUMENT (sym))
5335 data->arg_sym = sym;
5336 else
5337 {
5338 data->found_sym = true;
5339 add_defn_to_vec (*data->resultp,
5340 fixup_symbol_section (sym, data->objfile),
5341 block);
5342 }
5343 }
5344 return true;
5345 }
5346
5347 /* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
5348 targeted by renamings matching LOOKUP_NAME in BLOCK. Add these
5349 symbols to RESULT. Return whether we found such symbols. */
5350
5351 static int
5352 ada_add_block_renamings (std::vector<struct block_symbol> &result,
5353 const struct block *block,
5354 const lookup_name_info &lookup_name,
5355 domain_enum domain)
5356 {
5357 struct using_direct *renaming;
5358 int defns_mark = result.size ();
5359
5360 symbol_name_matcher_ftype *name_match
5361 = ada_get_symbol_name_matcher (lookup_name);
5362
5363 for (renaming = block_using (block);
5364 renaming != NULL;
5365 renaming = renaming->next)
5366 {
5367 const char *r_name;
5368
5369 /* Avoid infinite recursions: skip this renaming if we are actually
5370 already traversing it.
5371
5372 Currently, symbol lookup in Ada don't use the namespace machinery from
5373 C++/Fortran support: skip namespace imports that use them. */
5374 if (renaming->searched
5375 || (renaming->import_src != NULL
5376 && renaming->import_src[0] != '\0')
5377 || (renaming->import_dest != NULL
5378 && renaming->import_dest[0] != '\0'))
5379 continue;
5380 renaming->searched = 1;
5381
5382 /* TODO: here, we perform another name-based symbol lookup, which can
5383 pull its own multiple overloads. In theory, we should be able to do
5384 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5385 not a simple name. But in order to do this, we would need to enhance
5386 the DWARF reader to associate a symbol to this renaming, instead of a
5387 name. So, for now, we do something simpler: re-use the C++/Fortran
5388 namespace machinery. */
5389 r_name = (renaming->alias != NULL
5390 ? renaming->alias
5391 : renaming->declaration);
5392 if (name_match (r_name, lookup_name, NULL))
5393 {
5394 lookup_name_info decl_lookup_name (renaming->declaration,
5395 lookup_name.match_type ());
5396 ada_add_all_symbols (result, block, decl_lookup_name, domain,
5397 1, NULL);
5398 }
5399 renaming->searched = 0;
5400 }
5401 return result.size () != defns_mark;
5402 }
5403
5404 /* Implements compare_names, but only applying the comparision using
5405 the given CASING. */
5406
5407 static int
5408 compare_names_with_case (const char *string1, const char *string2,
5409 enum case_sensitivity casing)
5410 {
5411 while (*string1 != '\0' && *string2 != '\0')
5412 {
5413 char c1, c2;
5414
5415 if (isspace (*string1) || isspace (*string2))
5416 return strcmp_iw_ordered (string1, string2);
5417
5418 if (casing == case_sensitive_off)
5419 {
5420 c1 = tolower (*string1);
5421 c2 = tolower (*string2);
5422 }
5423 else
5424 {
5425 c1 = *string1;
5426 c2 = *string2;
5427 }
5428 if (c1 != c2)
5429 break;
5430
5431 string1 += 1;
5432 string2 += 1;
5433 }
5434
5435 switch (*string1)
5436 {
5437 case '(':
5438 return strcmp_iw_ordered (string1, string2);
5439 case '_':
5440 if (*string2 == '\0')
5441 {
5442 if (is_name_suffix (string1))
5443 return 0;
5444 else
5445 return 1;
5446 }
5447 /* FALLTHROUGH */
5448 default:
5449 if (*string2 == '(')
5450 return strcmp_iw_ordered (string1, string2);
5451 else
5452 {
5453 if (casing == case_sensitive_off)
5454 return tolower (*string1) - tolower (*string2);
5455 else
5456 return *string1 - *string2;
5457 }
5458 }
5459 }
5460
5461 /* Compare STRING1 to STRING2, with results as for strcmp.
5462 Compatible with strcmp_iw_ordered in that...
5463
5464 strcmp_iw_ordered (STRING1, STRING2) <= 0
5465
5466 ... implies...
5467
5468 compare_names (STRING1, STRING2) <= 0
5469
5470 (they may differ as to what symbols compare equal). */
5471
5472 static int
5473 compare_names (const char *string1, const char *string2)
5474 {
5475 int result;
5476
5477 /* Similar to what strcmp_iw_ordered does, we need to perform
5478 a case-insensitive comparison first, and only resort to
5479 a second, case-sensitive, comparison if the first one was
5480 not sufficient to differentiate the two strings. */
5481
5482 result = compare_names_with_case (string1, string2, case_sensitive_off);
5483 if (result == 0)
5484 result = compare_names_with_case (string1, string2, case_sensitive_on);
5485
5486 return result;
5487 }
5488
5489 /* Convenience function to get at the Ada encoded lookup name for
5490 LOOKUP_NAME, as a C string. */
5491
5492 static const char *
5493 ada_lookup_name (const lookup_name_info &lookup_name)
5494 {
5495 return lookup_name.ada ().lookup_name ().c_str ();
5496 }
5497
5498 /* Add to RESULT all non-local symbols whose name and domain match
5499 LOOKUP_NAME and DOMAIN respectively. The search is performed on
5500 GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5501 symbols otherwise. */
5502
5503 static void
5504 add_nonlocal_symbols (std::vector<struct block_symbol> &result,
5505 const lookup_name_info &lookup_name,
5506 domain_enum domain, int global)
5507 {
5508 struct match_data data (&result);
5509
5510 bool is_wild_match = lookup_name.ada ().wild_match_p ();
5511
5512 auto callback = [&] (struct block_symbol *bsym)
5513 {
5514 return aux_add_nonlocal_symbols (bsym, &data);
5515 };
5516
5517 for (objfile *objfile : current_program_space->objfiles ())
5518 {
5519 data.objfile = objfile;
5520
5521 if (objfile->sf != nullptr)
5522 objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
5523 domain, global, callback,
5524 (is_wild_match
5525 ? NULL : compare_names));
5526
5527 for (compunit_symtab *cu : objfile->compunits ())
5528 {
5529 const struct block *global_block
5530 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5531
5532 if (ada_add_block_renamings (result, global_block, lookup_name,
5533 domain))
5534 data.found_sym = true;
5535 }
5536 }
5537
5538 if (result.empty () && global && !is_wild_match)
5539 {
5540 const char *name = ada_lookup_name (lookup_name);
5541 std::string bracket_name = std::string ("<_ada_") + name + '>';
5542 lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL);
5543
5544 for (objfile *objfile : current_program_space->objfiles ())
5545 {
5546 data.objfile = objfile;
5547 if (objfile->sf != nullptr)
5548 objfile->sf->qf->map_matching_symbols (objfile, name1,
5549 domain, global, callback,
5550 compare_names);
5551 }
5552 }
5553 }
5554
5555 /* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5556 FULL_SEARCH is non-zero, enclosing scope and in global scopes,
5557 returning the number of matches. Add these to RESULT.
5558
5559 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5560 symbol match within the nest of blocks whose innermost member is BLOCK,
5561 is the one match returned (no other matches in that or
5562 enclosing blocks is returned). If there are any matches in or
5563 surrounding BLOCK, then these alone are returned.
5564
5565 Names prefixed with "standard__" are handled specially:
5566 "standard__" is first stripped off (by the lookup_name
5567 constructor), and only static and global symbols are searched.
5568
5569 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5570 to lookup global symbols. */
5571
5572 static void
5573 ada_add_all_symbols (std::vector<struct block_symbol> &result,
5574 const struct block *block,
5575 const lookup_name_info &lookup_name,
5576 domain_enum domain,
5577 int full_search,
5578 int *made_global_lookup_p)
5579 {
5580 struct symbol *sym;
5581
5582 if (made_global_lookup_p)
5583 *made_global_lookup_p = 0;
5584
5585 /* Special case: If the user specifies a symbol name inside package
5586 Standard, do a non-wild matching of the symbol name without
5587 the "standard__" prefix. This was primarily introduced in order
5588 to allow the user to specifically access the standard exceptions
5589 using, for instance, Standard.Constraint_Error when Constraint_Error
5590 is ambiguous (due to the user defining its own Constraint_Error
5591 entity inside its program). */
5592 if (lookup_name.ada ().standard_p ())
5593 block = NULL;
5594
5595 /* Check the non-global symbols. If we have ANY match, then we're done. */
5596
5597 if (block != NULL)
5598 {
5599 if (full_search)
5600 ada_add_local_symbols (result, lookup_name, block, domain);
5601 else
5602 {
5603 /* In the !full_search case we're are being called by
5604 iterate_over_symbols, and we don't want to search
5605 superblocks. */
5606 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
5607 }
5608 if (!result.empty () || !full_search)
5609 return;
5610 }
5611
5612 /* No non-global symbols found. Check our cache to see if we have
5613 already performed this search before. If we have, then return
5614 the same result. */
5615
5616 if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5617 domain, &sym, &block))
5618 {
5619 if (sym != NULL)
5620 add_defn_to_vec (result, sym, block);
5621 return;
5622 }
5623
5624 if (made_global_lookup_p)
5625 *made_global_lookup_p = 1;
5626
5627 /* Search symbols from all global blocks. */
5628
5629 add_nonlocal_symbols (result, lookup_name, domain, 1);
5630
5631 /* Now add symbols from all per-file blocks if we've gotten no hits
5632 (not strictly correct, but perhaps better than an error). */
5633
5634 if (result.empty ())
5635 add_nonlocal_symbols (result, lookup_name, domain, 0);
5636 }
5637
5638 /* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
5639 is non-zero, enclosing scope and in global scopes.
5640
5641 Returns (SYM,BLOCK) tuples, indicating the symbols found and the
5642 blocks and symbol tables (if any) in which they were found.
5643
5644 When full_search is non-zero, any non-function/non-enumeral
5645 symbol match within the nest of blocks whose innermost member is BLOCK,
5646 is the one match returned (no other matches in that or
5647 enclosing blocks is returned). If there are any matches in or
5648 surrounding BLOCK, then these alone are returned.
5649
5650 Names prefixed with "standard__" are handled specially: "standard__"
5651 is first stripped off, and only static and global symbols are searched. */
5652
5653 static std::vector<struct block_symbol>
5654 ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5655 const struct block *block,
5656 domain_enum domain,
5657 int full_search)
5658 {
5659 int syms_from_global_search;
5660 std::vector<struct block_symbol> results;
5661
5662 ada_add_all_symbols (results, block, lookup_name,
5663 domain, full_search, &syms_from_global_search);
5664
5665 remove_extra_symbols (&results);
5666
5667 if (results.empty () && full_search && syms_from_global_search)
5668 cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
5669
5670 if (results.size () == 1 && full_search && syms_from_global_search)
5671 cache_symbol (ada_lookup_name (lookup_name), domain,
5672 results[0].symbol, results[0].block);
5673
5674 remove_irrelevant_renamings (&results, block);
5675 return results;
5676 }
5677
5678 /* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
5679 in global scopes, returning (SYM,BLOCK) tuples.
5680
5681 See ada_lookup_symbol_list_worker for further details. */
5682
5683 std::vector<struct block_symbol>
5684 ada_lookup_symbol_list (const char *name, const struct block *block,
5685 domain_enum domain)
5686 {
5687 symbol_name_match_type name_match_type = name_match_type_from_name (name);
5688 lookup_name_info lookup_name (name, name_match_type);
5689
5690 return ada_lookup_symbol_list_worker (lookup_name, block, domain, 1);
5691 }
5692
5693 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5694 to 1, but choosing the first symbol found if there are multiple
5695 choices.
5696
5697 The result is stored in *INFO, which must be non-NULL.
5698 If no match is found, INFO->SYM is set to NULL. */
5699
5700 void
5701 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5702 domain_enum domain,
5703 struct block_symbol *info)
5704 {
5705 /* Since we already have an encoded name, wrap it in '<>' to force a
5706 verbatim match. Otherwise, if the name happens to not look like
5707 an encoded name (because it doesn't include a "__"),
5708 ada_lookup_name_info would re-encode/fold it again, and that
5709 would e.g., incorrectly lowercase object renaming names like
5710 "R28b" -> "r28b". */
5711 std::string verbatim = add_angle_brackets (name);
5712
5713 gdb_assert (info != NULL);
5714 *info = ada_lookup_symbol (verbatim.c_str (), block, domain);
5715 }
5716
5717 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5718 scope and in global scopes, or NULL if none. NAME is folded and
5719 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
5720 choosing the first symbol if there are multiple choices. */
5721
5722 struct block_symbol
5723 ada_lookup_symbol (const char *name, const struct block *block0,
5724 domain_enum domain)
5725 {
5726 std::vector<struct block_symbol> candidates
5727 = ada_lookup_symbol_list (name, block0, domain);
5728
5729 if (candidates.empty ())
5730 return {};
5731
5732 block_symbol info = candidates[0];
5733 info.symbol = fixup_symbol_section (info.symbol, NULL);
5734 return info;
5735 }
5736
5737
5738 /* True iff STR is a possible encoded suffix of a normal Ada name
5739 that is to be ignored for matching purposes. Suffixes of parallel
5740 names (e.g., XVE) are not included here. Currently, the possible suffixes
5741 are given by any of the regular expressions:
5742
5743 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5744 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
5745 TKB [subprogram suffix for task bodies]
5746 _E[0-9]+[bs]$ [protected object entry suffixes]
5747 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5748
5749 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5750 match is performed. This sequence is used to differentiate homonyms,
5751 is an optional part of a valid name suffix. */
5752
5753 static int
5754 is_name_suffix (const char *str)
5755 {
5756 int k;
5757 const char *matching;
5758 const int len = strlen (str);
5759
5760 /* Skip optional leading __[0-9]+. */
5761
5762 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5763 {
5764 str += 3;
5765 while (isdigit (str[0]))
5766 str += 1;
5767 }
5768
5769 /* [.$][0-9]+ */
5770
5771 if (str[0] == '.' || str[0] == '$')
5772 {
5773 matching = str + 1;
5774 while (isdigit (matching[0]))
5775 matching += 1;
5776 if (matching[0] == '\0')
5777 return 1;
5778 }
5779
5780 /* ___[0-9]+ */
5781
5782 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5783 {
5784 matching = str + 3;
5785 while (isdigit (matching[0]))
5786 matching += 1;
5787 if (matching[0] == '\0')
5788 return 1;
5789 }
5790
5791 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5792
5793 if (strcmp (str, "TKB") == 0)
5794 return 1;
5795
5796 #if 0
5797 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5798 with a N at the end. Unfortunately, the compiler uses the same
5799 convention for other internal types it creates. So treating
5800 all entity names that end with an "N" as a name suffix causes
5801 some regressions. For instance, consider the case of an enumerated
5802 type. To support the 'Image attribute, it creates an array whose
5803 name ends with N.
5804 Having a single character like this as a suffix carrying some
5805 information is a bit risky. Perhaps we should change the encoding
5806 to be something like "_N" instead. In the meantime, do not do
5807 the following check. */
5808 /* Protected Object Subprograms */
5809 if (len == 1 && str [0] == 'N')
5810 return 1;
5811 #endif
5812
5813 /* _E[0-9]+[bs]$ */
5814 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5815 {
5816 matching = str + 3;
5817 while (isdigit (matching[0]))
5818 matching += 1;
5819 if ((matching[0] == 'b' || matching[0] == 's')
5820 && matching [1] == '\0')
5821 return 1;
5822 }
5823
5824 /* ??? We should not modify STR directly, as we are doing below. This
5825 is fine in this case, but may become problematic later if we find
5826 that this alternative did not work, and want to try matching
5827 another one from the begining of STR. Since we modified it, we
5828 won't be able to find the begining of the string anymore! */
5829 if (str[0] == 'X')
5830 {
5831 str += 1;
5832 while (str[0] != '_' && str[0] != '\0')
5833 {
5834 if (str[0] != 'n' && str[0] != 'b')
5835 return 0;
5836 str += 1;
5837 }
5838 }
5839
5840 if (str[0] == '\000')
5841 return 1;
5842
5843 if (str[0] == '_')
5844 {
5845 if (str[1] != '_' || str[2] == '\000')
5846 return 0;
5847 if (str[2] == '_')
5848 {
5849 if (strcmp (str + 3, "JM") == 0)
5850 return 1;
5851 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5852 the LJM suffix in favor of the JM one. But we will
5853 still accept LJM as a valid suffix for a reasonable
5854 amount of time, just to allow ourselves to debug programs
5855 compiled using an older version of GNAT. */
5856 if (strcmp (str + 3, "LJM") == 0)
5857 return 1;
5858 if (str[3] != 'X')
5859 return 0;
5860 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5861 || str[4] == 'U' || str[4] == 'P')
5862 return 1;
5863 if (str[4] == 'R' && str[5] != 'T')
5864 return 1;
5865 return 0;
5866 }
5867 if (!isdigit (str[2]))
5868 return 0;
5869 for (k = 3; str[k] != '\0'; k += 1)
5870 if (!isdigit (str[k]) && str[k] != '_')
5871 return 0;
5872 return 1;
5873 }
5874 if (str[0] == '$' && isdigit (str[1]))
5875 {
5876 for (k = 2; str[k] != '\0'; k += 1)
5877 if (!isdigit (str[k]) && str[k] != '_')
5878 return 0;
5879 return 1;
5880 }
5881 return 0;
5882 }
5883
5884 /* Return non-zero if the string starting at NAME and ending before
5885 NAME_END contains no capital letters. */
5886
5887 static int
5888 is_valid_name_for_wild_match (const char *name0)
5889 {
5890 std::string decoded_name = ada_decode (name0);
5891 int i;
5892
5893 /* If the decoded name starts with an angle bracket, it means that
5894 NAME0 does not follow the GNAT encoding format. It should then
5895 not be allowed as a possible wild match. */
5896 if (decoded_name[0] == '<')
5897 return 0;
5898
5899 for (i=0; decoded_name[i] != '\0'; i++)
5900 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5901 return 0;
5902
5903 return 1;
5904 }
5905
5906 /* Advance *NAMEP to next occurrence in the string NAME0 of the TARGET0
5907 character which could start a simple name. Assumes that *NAMEP points
5908 somewhere inside the string beginning at NAME0. */
5909
5910 static int
5911 advance_wild_match (const char **namep, const char *name0, char target0)
5912 {
5913 const char *name = *namep;
5914
5915 while (1)
5916 {
5917 char t0, t1;
5918
5919 t0 = *name;
5920 if (t0 == '_')
5921 {
5922 t1 = name[1];
5923 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5924 {
5925 name += 1;
5926 if (name == name0 + 5 && startswith (name0, "_ada"))
5927 break;
5928 else
5929 name += 1;
5930 }
5931 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5932 || name[2] == target0))
5933 {
5934 name += 2;
5935 break;
5936 }
5937 else if (t1 == '_' && name[2] == 'B' && name[3] == '_')
5938 {
5939 /* Names like "pkg__B_N__name", where N is a number, are
5940 block-local. We can handle these by simply skipping
5941 the "B_" here. */
5942 name += 4;
5943 }
5944 else
5945 return 0;
5946 }
5947 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5948 name += 1;
5949 else
5950 return 0;
5951 }
5952
5953 *namep = name;
5954 return 1;
5955 }
5956
5957 /* Return true iff NAME encodes a name of the form prefix.PATN.
5958 Ignores any informational suffixes of NAME (i.e., for which
5959 is_name_suffix is true). Assumes that PATN is a lower-cased Ada
5960 simple name. */
5961
5962 static bool
5963 wild_match (const char *name, const char *patn)
5964 {
5965 const char *p;
5966 const char *name0 = name;
5967
5968 while (1)
5969 {
5970 const char *match = name;
5971
5972 if (*name == *patn)
5973 {
5974 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5975 if (*p != *name)
5976 break;
5977 if (*p == '\0' && is_name_suffix (name))
5978 return match == name0 || is_valid_name_for_wild_match (name0);
5979
5980 if (name[-1] == '_')
5981 name -= 1;
5982 }
5983 if (!advance_wild_match (&name, name0, *patn))
5984 return false;
5985 }
5986 }
5987
5988 /* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to RESULT (if
5989 necessary). OBJFILE is the section containing BLOCK. */
5990
5991 static void
5992 ada_add_block_symbols (std::vector<struct block_symbol> &result,
5993 const struct block *block,
5994 const lookup_name_info &lookup_name,
5995 domain_enum domain, struct objfile *objfile)
5996 {
5997 struct block_iterator iter;
5998 /* A matching argument symbol, if any. */
5999 struct symbol *arg_sym;
6000 /* Set true when we find a matching non-argument symbol. */
6001 bool found_sym;
6002 struct symbol *sym;
6003
6004 arg_sym = NULL;
6005 found_sym = false;
6006 for (sym = block_iter_match_first (block, lookup_name, &iter);
6007 sym != NULL;
6008 sym = block_iter_match_next (lookup_name, &iter))
6009 {
6010 if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
6011 {
6012 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6013 {
6014 if (SYMBOL_IS_ARGUMENT (sym))
6015 arg_sym = sym;
6016 else
6017 {
6018 found_sym = true;
6019 add_defn_to_vec (result,
6020 fixup_symbol_section (sym, objfile),
6021 block);
6022 }
6023 }
6024 }
6025 }
6026
6027 /* Handle renamings. */
6028
6029 if (ada_add_block_renamings (result, block, lookup_name, domain))
6030 found_sym = true;
6031
6032 if (!found_sym && arg_sym != NULL)
6033 {
6034 add_defn_to_vec (result,
6035 fixup_symbol_section (arg_sym, objfile),
6036 block);
6037 }
6038
6039 if (!lookup_name.ada ().wild_match_p ())
6040 {
6041 arg_sym = NULL;
6042 found_sym = false;
6043 const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6044 const char *name = ada_lookup_name.c_str ();
6045 size_t name_len = ada_lookup_name.size ();
6046
6047 ALL_BLOCK_SYMBOLS (block, iter, sym)
6048 {
6049 if (symbol_matches_domain (sym->language (),
6050 SYMBOL_DOMAIN (sym), domain))
6051 {
6052 int cmp;
6053
6054 cmp = (int) '_' - (int) sym->linkage_name ()[0];
6055 if (cmp == 0)
6056 {
6057 cmp = !startswith (sym->linkage_name (), "_ada_");
6058 if (cmp == 0)
6059 cmp = strncmp (name, sym->linkage_name () + 5,
6060 name_len);
6061 }
6062
6063 if (cmp == 0
6064 && is_name_suffix (sym->linkage_name () + name_len + 5))
6065 {
6066 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6067 {
6068 if (SYMBOL_IS_ARGUMENT (sym))
6069 arg_sym = sym;
6070 else
6071 {
6072 found_sym = true;
6073 add_defn_to_vec (result,
6074 fixup_symbol_section (sym, objfile),
6075 block);
6076 }
6077 }
6078 }
6079 }
6080 }
6081
6082 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6083 They aren't parameters, right? */
6084 if (!found_sym && arg_sym != NULL)
6085 {
6086 add_defn_to_vec (result,
6087 fixup_symbol_section (arg_sym, objfile),
6088 block);
6089 }
6090 }
6091 }
6092 \f
6093
6094 /* Symbol Completion */
6095
6096 /* See symtab.h. */
6097
6098 bool
6099 ada_lookup_name_info::matches
6100 (const char *sym_name,
6101 symbol_name_match_type match_type,
6102 completion_match_result *comp_match_res) const
6103 {
6104 bool match = false;
6105 const char *text = m_encoded_name.c_str ();
6106 size_t text_len = m_encoded_name.size ();
6107
6108 /* First, test against the fully qualified name of the symbol. */
6109
6110 if (strncmp (sym_name, text, text_len) == 0)
6111 match = true;
6112
6113 std::string decoded_name = ada_decode (sym_name);
6114 if (match && !m_encoded_p)
6115 {
6116 /* One needed check before declaring a positive match is to verify
6117 that iff we are doing a verbatim match, the decoded version
6118 of the symbol name starts with '<'. Otherwise, this symbol name
6119 is not a suitable completion. */
6120
6121 bool has_angle_bracket = (decoded_name[0] == '<');
6122 match = (has_angle_bracket == m_verbatim_p);
6123 }
6124
6125 if (match && !m_verbatim_p)
6126 {
6127 /* When doing non-verbatim match, another check that needs to
6128 be done is to verify that the potentially matching symbol name
6129 does not include capital letters, because the ada-mode would
6130 not be able to understand these symbol names without the
6131 angle bracket notation. */
6132 const char *tmp;
6133
6134 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6135 if (*tmp != '\0')
6136 match = false;
6137 }
6138
6139 /* Second: Try wild matching... */
6140
6141 if (!match && m_wild_match_p)
6142 {
6143 /* Since we are doing wild matching, this means that TEXT
6144 may represent an unqualified symbol name. We therefore must
6145 also compare TEXT against the unqualified name of the symbol. */
6146 sym_name = ada_unqualified_name (decoded_name.c_str ());
6147
6148 if (strncmp (sym_name, text, text_len) == 0)
6149 match = true;
6150 }
6151
6152 /* Finally: If we found a match, prepare the result to return. */
6153
6154 if (!match)
6155 return false;
6156
6157 if (comp_match_res != NULL)
6158 {
6159 std::string &match_str = comp_match_res->match.storage ();
6160
6161 if (!m_encoded_p)
6162 match_str = ada_decode (sym_name);
6163 else
6164 {
6165 if (m_verbatim_p)
6166 match_str = add_angle_brackets (sym_name);
6167 else
6168 match_str = sym_name;
6169
6170 }
6171
6172 comp_match_res->set_match (match_str.c_str ());
6173 }
6174
6175 return true;
6176 }
6177
6178 /* Field Access */
6179
6180 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6181 for tagged types. */
6182
6183 static int
6184 ada_is_dispatch_table_ptr_type (struct type *type)
6185 {
6186 const char *name;
6187
6188 if (type->code () != TYPE_CODE_PTR)
6189 return 0;
6190
6191 name = TYPE_TARGET_TYPE (type)->name ();
6192 if (name == NULL)
6193 return 0;
6194
6195 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6196 }
6197
6198 /* Return non-zero if TYPE is an interface tag. */
6199
6200 static int
6201 ada_is_interface_tag (struct type *type)
6202 {
6203 const char *name = type->name ();
6204
6205 if (name == NULL)
6206 return 0;
6207
6208 return (strcmp (name, "ada__tags__interface_tag") == 0);
6209 }
6210
6211 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6212 to be invisible to users. */
6213
6214 int
6215 ada_is_ignored_field (struct type *type, int field_num)
6216 {
6217 if (field_num < 0 || field_num > type->num_fields ())
6218 return 1;
6219
6220 /* Check the name of that field. */
6221 {
6222 const char *name = TYPE_FIELD_NAME (type, field_num);
6223
6224 /* Anonymous field names should not be printed.
6225 brobecker/2007-02-20: I don't think this can actually happen
6226 but we don't want to print the value of anonymous fields anyway. */
6227 if (name == NULL)
6228 return 1;
6229
6230 /* Normally, fields whose name start with an underscore ("_")
6231 are fields that have been internally generated by the compiler,
6232 and thus should not be printed. The "_parent" field is special,
6233 however: This is a field internally generated by the compiler
6234 for tagged types, and it contains the components inherited from
6235 the parent type. This field should not be printed as is, but
6236 should not be ignored either. */
6237 if (name[0] == '_' && !startswith (name, "_parent"))
6238 return 1;
6239 }
6240
6241 /* If this is the dispatch table of a tagged type or an interface tag,
6242 then ignore. */
6243 if (ada_is_tagged_type (type, 1)
6244 && (ada_is_dispatch_table_ptr_type (type->field (field_num).type ())
6245 || ada_is_interface_tag (type->field (field_num).type ())))
6246 return 1;
6247
6248 /* Not a special field, so it should not be ignored. */
6249 return 0;
6250 }
6251
6252 /* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
6253 pointer or reference type whose ultimate target has a tag field. */
6254
6255 int
6256 ada_is_tagged_type (struct type *type, int refok)
6257 {
6258 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
6259 }
6260
6261 /* True iff TYPE represents the type of X'Tag */
6262
6263 int
6264 ada_is_tag_type (struct type *type)
6265 {
6266 type = ada_check_typedef (type);
6267
6268 if (type == NULL || type->code () != TYPE_CODE_PTR)
6269 return 0;
6270 else
6271 {
6272 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6273
6274 return (name != NULL
6275 && strcmp (name, "ada__tags__dispatch_table") == 0);
6276 }
6277 }
6278
6279 /* The type of the tag on VAL. */
6280
6281 static struct type *
6282 ada_tag_type (struct value *val)
6283 {
6284 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
6285 }
6286
6287 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6288 retired at Ada 05). */
6289
6290 static int
6291 is_ada95_tag (struct value *tag)
6292 {
6293 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6294 }
6295
6296 /* The value of the tag on VAL. */
6297
6298 static struct value *
6299 ada_value_tag (struct value *val)
6300 {
6301 return ada_value_struct_elt (val, "_tag", 0);
6302 }
6303
6304 /* The value of the tag on the object of type TYPE whose contents are
6305 saved at VALADDR, if it is non-null, or is at memory address
6306 ADDRESS. */
6307
6308 static struct value *
6309 value_tag_from_contents_and_address (struct type *type,
6310 const gdb_byte *valaddr,
6311 CORE_ADDR address)
6312 {
6313 int tag_byte_offset;
6314 struct type *tag_type;
6315
6316 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6317 NULL, NULL, NULL))
6318 {
6319 const gdb_byte *valaddr1 = ((valaddr == NULL)
6320 ? NULL
6321 : valaddr + tag_byte_offset);
6322 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6323
6324 return value_from_contents_and_address (tag_type, valaddr1, address1);
6325 }
6326 return NULL;
6327 }
6328
6329 static struct type *
6330 type_from_tag (struct value *tag)
6331 {
6332 gdb::unique_xmalloc_ptr<char> type_name = ada_tag_name (tag);
6333
6334 if (type_name != NULL)
6335 return ada_find_any_type (ada_encode (type_name.get ()).c_str ());
6336 return NULL;
6337 }
6338
6339 /* Given a value OBJ of a tagged type, return a value of this
6340 type at the base address of the object. The base address, as
6341 defined in Ada.Tags, it is the address of the primary tag of
6342 the object, and therefore where the field values of its full
6343 view can be fetched. */
6344
6345 struct value *
6346 ada_tag_value_at_base_address (struct value *obj)
6347 {
6348 struct value *val;
6349 LONGEST offset_to_top = 0;
6350 struct type *ptr_type, *obj_type;
6351 struct value *tag;
6352 CORE_ADDR base_address;
6353
6354 obj_type = value_type (obj);
6355
6356 /* It is the responsability of the caller to deref pointers. */
6357
6358 if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF)
6359 return obj;
6360
6361 tag = ada_value_tag (obj);
6362 if (!tag)
6363 return obj;
6364
6365 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6366
6367 if (is_ada95_tag (tag))
6368 return obj;
6369
6370 ptr_type = language_lookup_primitive_type
6371 (language_def (language_ada), target_gdbarch(), "storage_offset");
6372 ptr_type = lookup_pointer_type (ptr_type);
6373 val = value_cast (ptr_type, tag);
6374 if (!val)
6375 return obj;
6376
6377 /* It is perfectly possible that an exception be raised while
6378 trying to determine the base address, just like for the tag;
6379 see ada_tag_name for more details. We do not print the error
6380 message for the same reason. */
6381
6382 try
6383 {
6384 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6385 }
6386
6387 catch (const gdb_exception_error &e)
6388 {
6389 return obj;
6390 }
6391
6392 /* If offset is null, nothing to do. */
6393
6394 if (offset_to_top == 0)
6395 return obj;
6396
6397 /* -1 is a special case in Ada.Tags; however, what should be done
6398 is not quite clear from the documentation. So do nothing for
6399 now. */
6400
6401 if (offset_to_top == -1)
6402 return obj;
6403
6404 /* OFFSET_TO_TOP used to be a positive value to be subtracted
6405 from the base address. This was however incompatible with
6406 C++ dispatch table: C++ uses a *negative* value to *add*
6407 to the base address. Ada's convention has therefore been
6408 changed in GNAT 19.0w 20171023: since then, C++ and Ada
6409 use the same convention. Here, we support both cases by
6410 checking the sign of OFFSET_TO_TOP. */
6411
6412 if (offset_to_top > 0)
6413 offset_to_top = -offset_to_top;
6414
6415 base_address = value_address (obj) + offset_to_top;
6416 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6417
6418 /* Make sure that we have a proper tag at the new address.
6419 Otherwise, offset_to_top is bogus (which can happen when
6420 the object is not initialized yet). */
6421
6422 if (!tag)
6423 return obj;
6424
6425 obj_type = type_from_tag (tag);
6426
6427 if (!obj_type)
6428 return obj;
6429
6430 return value_from_contents_and_address (obj_type, NULL, base_address);
6431 }
6432
6433 /* Return the "ada__tags__type_specific_data" type. */
6434
6435 static struct type *
6436 ada_get_tsd_type (struct inferior *inf)
6437 {
6438 struct ada_inferior_data *data = get_ada_inferior_data (inf);
6439
6440 if (data->tsd_type == 0)
6441 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6442 return data->tsd_type;
6443 }
6444
6445 /* Return the TSD (type-specific data) associated to the given TAG.
6446 TAG is assumed to be the tag of a tagged-type entity.
6447
6448 May return NULL if we are unable to get the TSD. */
6449
6450 static struct value *
6451 ada_get_tsd_from_tag (struct value *tag)
6452 {
6453 struct value *val;
6454 struct type *type;
6455
6456 /* First option: The TSD is simply stored as a field of our TAG.
6457 Only older versions of GNAT would use this format, but we have
6458 to test it first, because there are no visible markers for
6459 the current approach except the absence of that field. */
6460
6461 val = ada_value_struct_elt (tag, "tsd", 1);
6462 if (val)
6463 return val;
6464
6465 /* Try the second representation for the dispatch table (in which
6466 there is no explicit 'tsd' field in the referent of the tag pointer,
6467 and instead the tsd pointer is stored just before the dispatch
6468 table. */
6469
6470 type = ada_get_tsd_type (current_inferior());
6471 if (type == NULL)
6472 return NULL;
6473 type = lookup_pointer_type (lookup_pointer_type (type));
6474 val = value_cast (type, tag);
6475 if (val == NULL)
6476 return NULL;
6477 return value_ind (value_ptradd (val, -1));
6478 }
6479
6480 /* Given the TSD of a tag (type-specific data), return a string
6481 containing the name of the associated type.
6482
6483 May return NULL if we are unable to determine the tag name. */
6484
6485 static gdb::unique_xmalloc_ptr<char>
6486 ada_tag_name_from_tsd (struct value *tsd)
6487 {
6488 char *p;
6489 struct value *val;
6490
6491 val = ada_value_struct_elt (tsd, "expanded_name", 1);
6492 if (val == NULL)
6493 return NULL;
6494 gdb::unique_xmalloc_ptr<char> buffer
6495 = target_read_string (value_as_address (val), INT_MAX);
6496 if (buffer == nullptr)
6497 return nullptr;
6498
6499 for (p = buffer.get (); *p != '\0'; ++p)
6500 {
6501 if (isalpha (*p))
6502 *p = tolower (*p);
6503 }
6504
6505 return buffer;
6506 }
6507
6508 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6509 a C string.
6510
6511 Return NULL if the TAG is not an Ada tag, or if we were unable to
6512 determine the name of that tag. */
6513
6514 gdb::unique_xmalloc_ptr<char>
6515 ada_tag_name (struct value *tag)
6516 {
6517 gdb::unique_xmalloc_ptr<char> name;
6518
6519 if (!ada_is_tag_type (value_type (tag)))
6520 return NULL;
6521
6522 /* It is perfectly possible that an exception be raised while trying
6523 to determine the TAG's name, even under normal circumstances:
6524 The associated variable may be uninitialized or corrupted, for
6525 instance. We do not let any exception propagate past this point.
6526 instead we return NULL.
6527
6528 We also do not print the error message either (which often is very
6529 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6530 the caller print a more meaningful message if necessary. */
6531 try
6532 {
6533 struct value *tsd = ada_get_tsd_from_tag (tag);
6534
6535 if (tsd != NULL)
6536 name = ada_tag_name_from_tsd (tsd);
6537 }
6538 catch (const gdb_exception_error &e)
6539 {
6540 }
6541
6542 return name;
6543 }
6544
6545 /* The parent type of TYPE, or NULL if none. */
6546
6547 struct type *
6548 ada_parent_type (struct type *type)
6549 {
6550 int i;
6551
6552 type = ada_check_typedef (type);
6553
6554 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
6555 return NULL;
6556
6557 for (i = 0; i < type->num_fields (); i += 1)
6558 if (ada_is_parent_field (type, i))
6559 {
6560 struct type *parent_type = type->field (i).type ();
6561
6562 /* If the _parent field is a pointer, then dereference it. */
6563 if (parent_type->code () == TYPE_CODE_PTR)
6564 parent_type = TYPE_TARGET_TYPE (parent_type);
6565 /* If there is a parallel XVS type, get the actual base type. */
6566 parent_type = ada_get_base_type (parent_type);
6567
6568 return ada_check_typedef (parent_type);
6569 }
6570
6571 return NULL;
6572 }
6573
6574 /* True iff field number FIELD_NUM of structure type TYPE contains the
6575 parent-type (inherited) fields of a derived type. Assumes TYPE is
6576 a structure type with at least FIELD_NUM+1 fields. */
6577
6578 int
6579 ada_is_parent_field (struct type *type, int field_num)
6580 {
6581 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6582
6583 return (name != NULL
6584 && (startswith (name, "PARENT")
6585 || startswith (name, "_parent")));
6586 }
6587
6588 /* True iff field number FIELD_NUM of structure type TYPE is a
6589 transparent wrapper field (which should be silently traversed when doing
6590 field selection and flattened when printing). Assumes TYPE is a
6591 structure type with at least FIELD_NUM+1 fields. Such fields are always
6592 structures. */
6593
6594 int
6595 ada_is_wrapper_field (struct type *type, int field_num)
6596 {
6597 const char *name = TYPE_FIELD_NAME (type, field_num);
6598
6599 if (name != NULL && strcmp (name, "RETVAL") == 0)
6600 {
6601 /* This happens in functions with "out" or "in out" parameters
6602 which are passed by copy. For such functions, GNAT describes
6603 the function's return type as being a struct where the return
6604 value is in a field called RETVAL, and where the other "out"
6605 or "in out" parameters are fields of that struct. This is not
6606 a wrapper. */
6607 return 0;
6608 }
6609
6610 return (name != NULL
6611 && (startswith (name, "PARENT")
6612 || strcmp (name, "REP") == 0
6613 || startswith (name, "_parent")
6614 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6615 }
6616
6617 /* True iff field number FIELD_NUM of structure or union type TYPE
6618 is a variant wrapper. Assumes TYPE is a structure type with at least
6619 FIELD_NUM+1 fields. */
6620
6621 int
6622 ada_is_variant_part (struct type *type, int field_num)
6623 {
6624 /* Only Ada types are eligible. */
6625 if (!ADA_TYPE_P (type))
6626 return 0;
6627
6628 struct type *field_type = type->field (field_num).type ();
6629
6630 return (field_type->code () == TYPE_CODE_UNION
6631 || (is_dynamic_field (type, field_num)
6632 && (TYPE_TARGET_TYPE (field_type)->code ()
6633 == TYPE_CODE_UNION)));
6634 }
6635
6636 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6637 whose discriminants are contained in the record type OUTER_TYPE,
6638 returns the type of the controlling discriminant for the variant.
6639 May return NULL if the type could not be found. */
6640
6641 struct type *
6642 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6643 {
6644 const char *name = ada_variant_discrim_name (var_type);
6645
6646 return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
6647 }
6648
6649 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6650 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6651 represents a 'when others' clause; otherwise 0. */
6652
6653 static int
6654 ada_is_others_clause (struct type *type, int field_num)
6655 {
6656 const char *name = TYPE_FIELD_NAME (type, field_num);
6657
6658 return (name != NULL && name[0] == 'O');
6659 }
6660
6661 /* Assuming that TYPE0 is the type of the variant part of a record,
6662 returns the name of the discriminant controlling the variant.
6663 The value is valid until the next call to ada_variant_discrim_name. */
6664
6665 const char *
6666 ada_variant_discrim_name (struct type *type0)
6667 {
6668 static std::string result;
6669 struct type *type;
6670 const char *name;
6671 const char *discrim_end;
6672 const char *discrim_start;
6673
6674 if (type0->code () == TYPE_CODE_PTR)
6675 type = TYPE_TARGET_TYPE (type0);
6676 else
6677 type = type0;
6678
6679 name = ada_type_name (type);
6680
6681 if (name == NULL || name[0] == '\000')
6682 return "";
6683
6684 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6685 discrim_end -= 1)
6686 {
6687 if (startswith (discrim_end, "___XVN"))
6688 break;
6689 }
6690 if (discrim_end == name)
6691 return "";
6692
6693 for (discrim_start = discrim_end; discrim_start != name + 3;
6694 discrim_start -= 1)
6695 {
6696 if (discrim_start == name + 1)
6697 return "";
6698 if ((discrim_start > name + 3
6699 && startswith (discrim_start - 3, "___"))
6700 || discrim_start[-1] == '.')
6701 break;
6702 }
6703
6704 result = std::string (discrim_start, discrim_end - discrim_start);
6705 return result.c_str ();
6706 }
6707
6708 /* Scan STR for a subtype-encoded number, beginning at position K.
6709 Put the position of the character just past the number scanned in
6710 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6711 Return 1 if there was a valid number at the given position, and 0
6712 otherwise. A "subtype-encoded" number consists of the absolute value
6713 in decimal, followed by the letter 'm' to indicate a negative number.
6714 Assumes 0m does not occur. */
6715
6716 int
6717 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6718 {
6719 ULONGEST RU;
6720
6721 if (!isdigit (str[k]))
6722 return 0;
6723
6724 /* Do it the hard way so as not to make any assumption about
6725 the relationship of unsigned long (%lu scan format code) and
6726 LONGEST. */
6727 RU = 0;
6728 while (isdigit (str[k]))
6729 {
6730 RU = RU * 10 + (str[k] - '0');
6731 k += 1;
6732 }
6733
6734 if (str[k] == 'm')
6735 {
6736 if (R != NULL)
6737 *R = (-(LONGEST) (RU - 1)) - 1;
6738 k += 1;
6739 }
6740 else if (R != NULL)
6741 *R = (LONGEST) RU;
6742
6743 /* NOTE on the above: Technically, C does not say what the results of
6744 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6745 number representable as a LONGEST (although either would probably work
6746 in most implementations). When RU>0, the locution in the then branch
6747 above is always equivalent to the negative of RU. */
6748
6749 if (new_k != NULL)
6750 *new_k = k;
6751 return 1;
6752 }
6753
6754 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6755 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6756 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
6757
6758 static int
6759 ada_in_variant (LONGEST val, struct type *type, int field_num)
6760 {
6761 const char *name = TYPE_FIELD_NAME (type, field_num);
6762 int p;
6763
6764 p = 0;
6765 while (1)
6766 {
6767 switch (name[p])
6768 {
6769 case '\0':
6770 return 0;
6771 case 'S':
6772 {
6773 LONGEST W;
6774
6775 if (!ada_scan_number (name, p + 1, &W, &p))
6776 return 0;
6777 if (val == W)
6778 return 1;
6779 break;
6780 }
6781 case 'R':
6782 {
6783 LONGEST L, U;
6784
6785 if (!ada_scan_number (name, p + 1, &L, &p)
6786 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6787 return 0;
6788 if (val >= L && val <= U)
6789 return 1;
6790 break;
6791 }
6792 case 'O':
6793 return 1;
6794 default:
6795 return 0;
6796 }
6797 }
6798 }
6799
6800 /* FIXME: Lots of redundancy below. Try to consolidate. */
6801
6802 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6803 ARG_TYPE, extract and return the value of one of its (non-static)
6804 fields. FIELDNO says which field. Differs from value_primitive_field
6805 only in that it can handle packed values of arbitrary type. */
6806
6807 struct value *
6808 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6809 struct type *arg_type)
6810 {
6811 struct type *type;
6812
6813 arg_type = ada_check_typedef (arg_type);
6814 type = arg_type->field (fieldno).type ();
6815
6816 /* Handle packed fields. It might be that the field is not packed
6817 relative to its containing structure, but the structure itself is
6818 packed; in this case we must take the bit-field path. */
6819 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
6820 {
6821 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6822 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6823
6824 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6825 offset + bit_pos / 8,
6826 bit_pos % 8, bit_size, type);
6827 }
6828 else
6829 return value_primitive_field (arg1, offset, fieldno, arg_type);
6830 }
6831
6832 /* Find field with name NAME in object of type TYPE. If found,
6833 set the following for each argument that is non-null:
6834 - *FIELD_TYPE_P to the field's type;
6835 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6836 an object of that type;
6837 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6838 - *BIT_SIZE_P to its size in bits if the field is packed, and
6839 0 otherwise;
6840 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6841 fields up to but not including the desired field, or by the total
6842 number of fields if not found. A NULL value of NAME never
6843 matches; the function just counts visible fields in this case.
6844
6845 Notice that we need to handle when a tagged record hierarchy
6846 has some components with the same name, like in this scenario:
6847
6848 type Top_T is tagged record
6849 N : Integer := 1;
6850 U : Integer := 974;
6851 A : Integer := 48;
6852 end record;
6853
6854 type Middle_T is new Top.Top_T with record
6855 N : Character := 'a';
6856 C : Integer := 3;
6857 end record;
6858
6859 type Bottom_T is new Middle.Middle_T with record
6860 N : Float := 4.0;
6861 C : Character := '5';
6862 X : Integer := 6;
6863 A : Character := 'J';
6864 end record;
6865
6866 Let's say we now have a variable declared and initialized as follow:
6867
6868 TC : Top_A := new Bottom_T;
6869
6870 And then we use this variable to call this function
6871
6872 procedure Assign (Obj: in out Top_T; TV : Integer);
6873
6874 as follow:
6875
6876 Assign (Top_T (B), 12);
6877
6878 Now, we're in the debugger, and we're inside that procedure
6879 then and we want to print the value of obj.c:
6880
6881 Usually, the tagged record or one of the parent type owns the
6882 component to print and there's no issue but in this particular
6883 case, what does it mean to ask for Obj.C? Since the actual
6884 type for object is type Bottom_T, it could mean two things: type
6885 component C from the Middle_T view, but also component C from
6886 Bottom_T. So in that "undefined" case, when the component is
6887 not found in the non-resolved type (which includes all the
6888 components of the parent type), then resolve it and see if we
6889 get better luck once expanded.
6890
6891 In the case of homonyms in the derived tagged type, we don't
6892 guaranty anything, and pick the one that's easiest for us
6893 to program.
6894
6895 Returns 1 if found, 0 otherwise. */
6896
6897 static int
6898 find_struct_field (const char *name, struct type *type, int offset,
6899 struct type **field_type_p,
6900 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6901 int *index_p)
6902 {
6903 int i;
6904 int parent_offset = -1;
6905
6906 type = ada_check_typedef (type);
6907
6908 if (field_type_p != NULL)
6909 *field_type_p = NULL;
6910 if (byte_offset_p != NULL)
6911 *byte_offset_p = 0;
6912 if (bit_offset_p != NULL)
6913 *bit_offset_p = 0;
6914 if (bit_size_p != NULL)
6915 *bit_size_p = 0;
6916
6917 for (i = 0; i < type->num_fields (); i += 1)
6918 {
6919 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6920 int fld_offset = offset + bit_pos / 8;
6921 const char *t_field_name = TYPE_FIELD_NAME (type, i);
6922
6923 if (t_field_name == NULL)
6924 continue;
6925
6926 else if (ada_is_parent_field (type, i))
6927 {
6928 /* This is a field pointing us to the parent type of a tagged
6929 type. As hinted in this function's documentation, we give
6930 preference to fields in the current record first, so what
6931 we do here is just record the index of this field before
6932 we skip it. If it turns out we couldn't find our field
6933 in the current record, then we'll get back to it and search
6934 inside it whether the field might exist in the parent. */
6935
6936 parent_offset = i;
6937 continue;
6938 }
6939
6940 else if (name != NULL && field_name_match (t_field_name, name))
6941 {
6942 int bit_size = TYPE_FIELD_BITSIZE (type, i);
6943
6944 if (field_type_p != NULL)
6945 *field_type_p = type->field (i).type ();
6946 if (byte_offset_p != NULL)
6947 *byte_offset_p = fld_offset;
6948 if (bit_offset_p != NULL)
6949 *bit_offset_p = bit_pos % 8;
6950 if (bit_size_p != NULL)
6951 *bit_size_p = bit_size;
6952 return 1;
6953 }
6954 else if (ada_is_wrapper_field (type, i))
6955 {
6956 if (find_struct_field (name, type->field (i).type (), fld_offset,
6957 field_type_p, byte_offset_p, bit_offset_p,
6958 bit_size_p, index_p))
6959 return 1;
6960 }
6961 else if (ada_is_variant_part (type, i))
6962 {
6963 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6964 fixed type?? */
6965 int j;
6966 struct type *field_type
6967 = ada_check_typedef (type->field (i).type ());
6968
6969 for (j = 0; j < field_type->num_fields (); j += 1)
6970 {
6971 if (find_struct_field (name, field_type->field (j).type (),
6972 fld_offset
6973 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6974 field_type_p, byte_offset_p,
6975 bit_offset_p, bit_size_p, index_p))
6976 return 1;
6977 }
6978 }
6979 else if (index_p != NULL)
6980 *index_p += 1;
6981 }
6982
6983 /* Field not found so far. If this is a tagged type which
6984 has a parent, try finding that field in the parent now. */
6985
6986 if (parent_offset != -1)
6987 {
6988 int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
6989 int fld_offset = offset + bit_pos / 8;
6990
6991 if (find_struct_field (name, type->field (parent_offset).type (),
6992 fld_offset, field_type_p, byte_offset_p,
6993 bit_offset_p, bit_size_p, index_p))
6994 return 1;
6995 }
6996
6997 return 0;
6998 }
6999
7000 /* Number of user-visible fields in record type TYPE. */
7001
7002 static int
7003 num_visible_fields (struct type *type)
7004 {
7005 int n;
7006
7007 n = 0;
7008 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7009 return n;
7010 }
7011
7012 /* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
7013 and search in it assuming it has (class) type TYPE.
7014 If found, return value, else return NULL.
7015
7016 Searches recursively through wrapper fields (e.g., '_parent').
7017
7018 In the case of homonyms in the tagged types, please refer to the
7019 long explanation in find_struct_field's function documentation. */
7020
7021 static struct value *
7022 ada_search_struct_field (const char *name, struct value *arg, int offset,
7023 struct type *type)
7024 {
7025 int i;
7026 int parent_offset = -1;
7027
7028 type = ada_check_typedef (type);
7029 for (i = 0; i < type->num_fields (); i += 1)
7030 {
7031 const char *t_field_name = TYPE_FIELD_NAME (type, i);
7032
7033 if (t_field_name == NULL)
7034 continue;
7035
7036 else if (ada_is_parent_field (type, i))
7037 {
7038 /* This is a field pointing us to the parent type of a tagged
7039 type. As hinted in this function's documentation, we give
7040 preference to fields in the current record first, so what
7041 we do here is just record the index of this field before
7042 we skip it. If it turns out we couldn't find our field
7043 in the current record, then we'll get back to it and search
7044 inside it whether the field might exist in the parent. */
7045
7046 parent_offset = i;
7047 continue;
7048 }
7049
7050 else if (field_name_match (t_field_name, name))
7051 return ada_value_primitive_field (arg, offset, i, type);
7052
7053 else if (ada_is_wrapper_field (type, i))
7054 {
7055 struct value *v = /* Do not let indent join lines here. */
7056 ada_search_struct_field (name, arg,
7057 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7058 type->field (i).type ());
7059
7060 if (v != NULL)
7061 return v;
7062 }
7063
7064 else if (ada_is_variant_part (type, i))
7065 {
7066 /* PNH: Do we ever get here? See find_struct_field. */
7067 int j;
7068 struct type *field_type = ada_check_typedef (type->field (i).type ());
7069 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7070
7071 for (j = 0; j < field_type->num_fields (); j += 1)
7072 {
7073 struct value *v = ada_search_struct_field /* Force line
7074 break. */
7075 (name, arg,
7076 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7077 field_type->field (j).type ());
7078
7079 if (v != NULL)
7080 return v;
7081 }
7082 }
7083 }
7084
7085 /* Field not found so far. If this is a tagged type which
7086 has a parent, try finding that field in the parent now. */
7087
7088 if (parent_offset != -1)
7089 {
7090 struct value *v = ada_search_struct_field (
7091 name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
7092 type->field (parent_offset).type ());
7093
7094 if (v != NULL)
7095 return v;
7096 }
7097
7098 return NULL;
7099 }
7100
7101 static struct value *ada_index_struct_field_1 (int *, struct value *,
7102 int, struct type *);
7103
7104
7105 /* Return field #INDEX in ARG, where the index is that returned by
7106 * find_struct_field through its INDEX_P argument. Adjust the address
7107 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7108 * If found, return value, else return NULL. */
7109
7110 static struct value *
7111 ada_index_struct_field (int index, struct value *arg, int offset,
7112 struct type *type)
7113 {
7114 return ada_index_struct_field_1 (&index, arg, offset, type);
7115 }
7116
7117
7118 /* Auxiliary function for ada_index_struct_field. Like
7119 * ada_index_struct_field, but takes index from *INDEX_P and modifies
7120 * *INDEX_P. */
7121
7122 static struct value *
7123 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7124 struct type *type)
7125 {
7126 int i;
7127 type = ada_check_typedef (type);
7128
7129 for (i = 0; i < type->num_fields (); i += 1)
7130 {
7131 if (TYPE_FIELD_NAME (type, i) == NULL)
7132 continue;
7133 else if (ada_is_wrapper_field (type, i))
7134 {
7135 struct value *v = /* Do not let indent join lines here. */
7136 ada_index_struct_field_1 (index_p, arg,
7137 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7138 type->field (i).type ());
7139
7140 if (v != NULL)
7141 return v;
7142 }
7143
7144 else if (ada_is_variant_part (type, i))
7145 {
7146 /* PNH: Do we ever get here? See ada_search_struct_field,
7147 find_struct_field. */
7148 error (_("Cannot assign this kind of variant record"));
7149 }
7150 else if (*index_p == 0)
7151 return ada_value_primitive_field (arg, offset, i, type);
7152 else
7153 *index_p -= 1;
7154 }
7155 return NULL;
7156 }
7157
7158 /* Return a string representation of type TYPE. */
7159
7160 static std::string
7161 type_as_string (struct type *type)
7162 {
7163 string_file tmp_stream;
7164
7165 type_print (type, "", &tmp_stream, -1);
7166
7167 return std::move (tmp_stream.string ());
7168 }
7169
7170 /* Given a type TYPE, look up the type of the component of type named NAME.
7171 If DISPP is non-null, add its byte displacement from the beginning of a
7172 structure (pointed to by a value) of type TYPE to *DISPP (does not
7173 work for packed fields).
7174
7175 Matches any field whose name has NAME as a prefix, possibly
7176 followed by "___".
7177
7178 TYPE can be either a struct or union. If REFOK, TYPE may also
7179 be a (pointer or reference)+ to a struct or union, and the
7180 ultimate target type will be searched.
7181
7182 Looks recursively into variant clauses and parent types.
7183
7184 In the case of homonyms in the tagged types, please refer to the
7185 long explanation in find_struct_field's function documentation.
7186
7187 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7188 TYPE is not a type of the right kind. */
7189
7190 static struct type *
7191 ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
7192 int noerr)
7193 {
7194 int i;
7195 int parent_offset = -1;
7196
7197 if (name == NULL)
7198 goto BadName;
7199
7200 if (refok && type != NULL)
7201 while (1)
7202 {
7203 type = ada_check_typedef (type);
7204 if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF)
7205 break;
7206 type = TYPE_TARGET_TYPE (type);
7207 }
7208
7209 if (type == NULL
7210 || (type->code () != TYPE_CODE_STRUCT
7211 && type->code () != TYPE_CODE_UNION))
7212 {
7213 if (noerr)
7214 return NULL;
7215
7216 error (_("Type %s is not a structure or union type"),
7217 type != NULL ? type_as_string (type).c_str () : _("(null)"));
7218 }
7219
7220 type = to_static_fixed_type (type);
7221
7222 for (i = 0; i < type->num_fields (); i += 1)
7223 {
7224 const char *t_field_name = TYPE_FIELD_NAME (type, i);
7225 struct type *t;
7226
7227 if (t_field_name == NULL)
7228 continue;
7229
7230 else if (ada_is_parent_field (type, i))
7231 {
7232 /* This is a field pointing us to the parent type of a tagged
7233 type. As hinted in this function's documentation, we give
7234 preference to fields in the current record first, so what
7235 we do here is just record the index of this field before
7236 we skip it. If it turns out we couldn't find our field
7237 in the current record, then we'll get back to it and search
7238 inside it whether the field might exist in the parent. */
7239
7240 parent_offset = i;
7241 continue;
7242 }
7243
7244 else if (field_name_match (t_field_name, name))
7245 return type->field (i).type ();
7246
7247 else if (ada_is_wrapper_field (type, i))
7248 {
7249 t = ada_lookup_struct_elt_type (type->field (i).type (), name,
7250 0, 1);
7251 if (t != NULL)
7252 return t;
7253 }
7254
7255 else if (ada_is_variant_part (type, i))
7256 {
7257 int j;
7258 struct type *field_type = ada_check_typedef (type->field (i).type ());
7259
7260 for (j = field_type->num_fields () - 1; j >= 0; j -= 1)
7261 {
7262 /* FIXME pnh 2008/01/26: We check for a field that is
7263 NOT wrapped in a struct, since the compiler sometimes
7264 generates these for unchecked variant types. Revisit
7265 if the compiler changes this practice. */
7266 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7267
7268 if (v_field_name != NULL
7269 && field_name_match (v_field_name, name))
7270 t = field_type->field (j).type ();
7271 else
7272 t = ada_lookup_struct_elt_type (field_type->field (j).type (),
7273 name, 0, 1);
7274
7275 if (t != NULL)
7276 return t;
7277 }
7278 }
7279
7280 }
7281
7282 /* Field not found so far. If this is a tagged type which
7283 has a parent, try finding that field in the parent now. */
7284
7285 if (parent_offset != -1)
7286 {
7287 struct type *t;
7288
7289 t = ada_lookup_struct_elt_type (type->field (parent_offset).type (),
7290 name, 0, 1);
7291 if (t != NULL)
7292 return t;
7293 }
7294
7295 BadName:
7296 if (!noerr)
7297 {
7298 const char *name_str = name != NULL ? name : _("<null>");
7299
7300 error (_("Type %s has no component named %s"),
7301 type_as_string (type).c_str (), name_str);
7302 }
7303
7304 return NULL;
7305 }
7306
7307 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7308 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7309 represents an unchecked union (that is, the variant part of a
7310 record that is named in an Unchecked_Union pragma). */
7311
7312 static int
7313 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7314 {
7315 const char *discrim_name = ada_variant_discrim_name (var_type);
7316
7317 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
7318 }
7319
7320
7321 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7322 within OUTER, determine which variant clause (field number in VAR_TYPE,
7323 numbering from 0) is applicable. Returns -1 if none are. */
7324
7325 int
7326 ada_which_variant_applies (struct type *var_type, struct value *outer)
7327 {
7328 int others_clause;
7329 int i;
7330 const char *discrim_name = ada_variant_discrim_name (var_type);
7331 struct value *discrim;
7332 LONGEST discrim_val;
7333
7334 /* Using plain value_from_contents_and_address here causes problems
7335 because we will end up trying to resolve a type that is currently
7336 being constructed. */
7337 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7338 if (discrim == NULL)
7339 return -1;
7340 discrim_val = value_as_long (discrim);
7341
7342 others_clause = -1;
7343 for (i = 0; i < var_type->num_fields (); i += 1)
7344 {
7345 if (ada_is_others_clause (var_type, i))
7346 others_clause = i;
7347 else if (ada_in_variant (discrim_val, var_type, i))
7348 return i;
7349 }
7350
7351 return others_clause;
7352 }
7353 \f
7354
7355
7356 /* Dynamic-Sized Records */
7357
7358 /* Strategy: The type ostensibly attached to a value with dynamic size
7359 (i.e., a size that is not statically recorded in the debugging
7360 data) does not accurately reflect the size or layout of the value.
7361 Our strategy is to convert these values to values with accurate,
7362 conventional types that are constructed on the fly. */
7363
7364 /* There is a subtle and tricky problem here. In general, we cannot
7365 determine the size of dynamic records without its data. However,
7366 the 'struct value' data structure, which GDB uses to represent
7367 quantities in the inferior process (the target), requires the size
7368 of the type at the time of its allocation in order to reserve space
7369 for GDB's internal copy of the data. That's why the
7370 'to_fixed_xxx_type' routines take (target) addresses as parameters,
7371 rather than struct value*s.
7372
7373 However, GDB's internal history variables ($1, $2, etc.) are
7374 struct value*s containing internal copies of the data that are not, in
7375 general, the same as the data at their corresponding addresses in
7376 the target. Fortunately, the types we give to these values are all
7377 conventional, fixed-size types (as per the strategy described
7378 above), so that we don't usually have to perform the
7379 'to_fixed_xxx_type' conversions to look at their values.
7380 Unfortunately, there is one exception: if one of the internal
7381 history variables is an array whose elements are unconstrained
7382 records, then we will need to create distinct fixed types for each
7383 element selected. */
7384
7385 /* The upshot of all of this is that many routines take a (type, host
7386 address, target address) triple as arguments to represent a value.
7387 The host address, if non-null, is supposed to contain an internal
7388 copy of the relevant data; otherwise, the program is to consult the
7389 target at the target address. */
7390
7391 /* Assuming that VAL0 represents a pointer value, the result of
7392 dereferencing it. Differs from value_ind in its treatment of
7393 dynamic-sized types. */
7394
7395 struct value *
7396 ada_value_ind (struct value *val0)
7397 {
7398 struct value *val = value_ind (val0);
7399
7400 if (ada_is_tagged_type (value_type (val), 0))
7401 val = ada_tag_value_at_base_address (val);
7402
7403 return ada_to_fixed_value (val);
7404 }
7405
7406 /* The value resulting from dereferencing any "reference to"
7407 qualifiers on VAL0. */
7408
7409 static struct value *
7410 ada_coerce_ref (struct value *val0)
7411 {
7412 if (value_type (val0)->code () == TYPE_CODE_REF)
7413 {
7414 struct value *val = val0;
7415
7416 val = coerce_ref (val);
7417
7418 if (ada_is_tagged_type (value_type (val), 0))
7419 val = ada_tag_value_at_base_address (val);
7420
7421 return ada_to_fixed_value (val);
7422 }
7423 else
7424 return val0;
7425 }
7426
7427 /* Return the bit alignment required for field #F of template type TYPE. */
7428
7429 static unsigned int
7430 field_alignment (struct type *type, int f)
7431 {
7432 const char *name = TYPE_FIELD_NAME (type, f);
7433 int len;
7434 int align_offset;
7435
7436 /* The field name should never be null, unless the debugging information
7437 is somehow malformed. In this case, we assume the field does not
7438 require any alignment. */
7439 if (name == NULL)
7440 return 1;
7441
7442 len = strlen (name);
7443
7444 if (!isdigit (name[len - 1]))
7445 return 1;
7446
7447 if (isdigit (name[len - 2]))
7448 align_offset = len - 2;
7449 else
7450 align_offset = len - 1;
7451
7452 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
7453 return TARGET_CHAR_BIT;
7454
7455 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7456 }
7457
7458 /* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
7459
7460 static struct symbol *
7461 ada_find_any_type_symbol (const char *name)
7462 {
7463 struct symbol *sym;
7464
7465 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7466 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7467 return sym;
7468
7469 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7470 return sym;
7471 }
7472
7473 /* Find a type named NAME. Ignores ambiguity. This routine will look
7474 solely for types defined by debug info, it will not search the GDB
7475 primitive types. */
7476
7477 static struct type *
7478 ada_find_any_type (const char *name)
7479 {
7480 struct symbol *sym = ada_find_any_type_symbol (name);
7481
7482 if (sym != NULL)
7483 return SYMBOL_TYPE (sym);
7484
7485 return NULL;
7486 }
7487
7488 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7489 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7490 symbol, in which case it is returned. Otherwise, this looks for
7491 symbols whose name is that of NAME_SYM suffixed with "___XR".
7492 Return symbol if found, and NULL otherwise. */
7493
7494 static bool
7495 ada_is_renaming_symbol (struct symbol *name_sym)
7496 {
7497 const char *name = name_sym->linkage_name ();
7498 return strstr (name, "___XR") != NULL;
7499 }
7500
7501 /* Because of GNAT encoding conventions, several GDB symbols may match a
7502 given type name. If the type denoted by TYPE0 is to be preferred to
7503 that of TYPE1 for purposes of type printing, return non-zero;
7504 otherwise return 0. */
7505
7506 int
7507 ada_prefer_type (struct type *type0, struct type *type1)
7508 {
7509 if (type1 == NULL)
7510 return 1;
7511 else if (type0 == NULL)
7512 return 0;
7513 else if (type1->code () == TYPE_CODE_VOID)
7514 return 1;
7515 else if (type0->code () == TYPE_CODE_VOID)
7516 return 0;
7517 else if (type1->name () == NULL && type0->name () != NULL)
7518 return 1;
7519 else if (ada_is_constrained_packed_array_type (type0))
7520 return 1;
7521 else if (ada_is_array_descriptor_type (type0)
7522 && !ada_is_array_descriptor_type (type1))
7523 return 1;
7524 else
7525 {
7526 const char *type0_name = type0->name ();
7527 const char *type1_name = type1->name ();
7528
7529 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7530 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7531 return 1;
7532 }
7533 return 0;
7534 }
7535
7536 /* The name of TYPE, which is its TYPE_NAME. Null if TYPE is
7537 null. */
7538
7539 const char *
7540 ada_type_name (struct type *type)
7541 {
7542 if (type == NULL)
7543 return NULL;
7544 return type->name ();
7545 }
7546
7547 /* Search the list of "descriptive" types associated to TYPE for a type
7548 whose name is NAME. */
7549
7550 static struct type *
7551 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7552 {
7553 struct type *result, *tmp;
7554
7555 if (ada_ignore_descriptive_types_p)
7556 return NULL;
7557
7558 /* If there no descriptive-type info, then there is no parallel type
7559 to be found. */
7560 if (!HAVE_GNAT_AUX_INFO (type))
7561 return NULL;
7562
7563 result = TYPE_DESCRIPTIVE_TYPE (type);
7564 while (result != NULL)
7565 {
7566 const char *result_name = ada_type_name (result);
7567
7568 if (result_name == NULL)
7569 {
7570 warning (_("unexpected null name on descriptive type"));
7571 return NULL;
7572 }
7573
7574 /* If the names match, stop. */
7575 if (strcmp (result_name, name) == 0)
7576 break;
7577
7578 /* Otherwise, look at the next item on the list, if any. */
7579 if (HAVE_GNAT_AUX_INFO (result))
7580 tmp = TYPE_DESCRIPTIVE_TYPE (result);
7581 else
7582 tmp = NULL;
7583
7584 /* If not found either, try after having resolved the typedef. */
7585 if (tmp != NULL)
7586 result = tmp;
7587 else
7588 {
7589 result = check_typedef (result);
7590 if (HAVE_GNAT_AUX_INFO (result))
7591 result = TYPE_DESCRIPTIVE_TYPE (result);
7592 else
7593 result = NULL;
7594 }
7595 }
7596
7597 /* If we didn't find a match, see whether this is a packed array. With
7598 older compilers, the descriptive type information is either absent or
7599 irrelevant when it comes to packed arrays so the above lookup fails.
7600 Fall back to using a parallel lookup by name in this case. */
7601 if (result == NULL && ada_is_constrained_packed_array_type (type))
7602 return ada_find_any_type (name);
7603
7604 return result;
7605 }
7606
7607 /* Find a parallel type to TYPE with the specified NAME, using the
7608 descriptive type taken from the debugging information, if available,
7609 and otherwise using the (slower) name-based method. */
7610
7611 static struct type *
7612 ada_find_parallel_type_with_name (struct type *type, const char *name)
7613 {
7614 struct type *result = NULL;
7615
7616 if (HAVE_GNAT_AUX_INFO (type))
7617 result = find_parallel_type_by_descriptive_type (type, name);
7618 else
7619 result = ada_find_any_type (name);
7620
7621 return result;
7622 }
7623
7624 /* Same as above, but specify the name of the parallel type by appending
7625 SUFFIX to the name of TYPE. */
7626
7627 struct type *
7628 ada_find_parallel_type (struct type *type, const char *suffix)
7629 {
7630 char *name;
7631 const char *type_name = ada_type_name (type);
7632 int len;
7633
7634 if (type_name == NULL)
7635 return NULL;
7636
7637 len = strlen (type_name);
7638
7639 name = (char *) alloca (len + strlen (suffix) + 1);
7640
7641 strcpy (name, type_name);
7642 strcpy (name + len, suffix);
7643
7644 return ada_find_parallel_type_with_name (type, name);
7645 }
7646
7647 /* If TYPE is a variable-size record type, return the corresponding template
7648 type describing its fields. Otherwise, return NULL. */
7649
7650 static struct type *
7651 dynamic_template_type (struct type *type)
7652 {
7653 type = ada_check_typedef (type);
7654
7655 if (type == NULL || type->code () != TYPE_CODE_STRUCT
7656 || ada_type_name (type) == NULL)
7657 return NULL;
7658 else
7659 {
7660 int len = strlen (ada_type_name (type));
7661
7662 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7663 return type;
7664 else
7665 return ada_find_parallel_type (type, "___XVE");
7666 }
7667 }
7668
7669 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7670 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
7671
7672 static int
7673 is_dynamic_field (struct type *templ_type, int field_num)
7674 {
7675 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7676
7677 return name != NULL
7678 && templ_type->field (field_num).type ()->code () == TYPE_CODE_PTR
7679 && strstr (name, "___XVL") != NULL;
7680 }
7681
7682 /* The index of the variant field of TYPE, or -1 if TYPE does not
7683 represent a variant record type. */
7684
7685 static int
7686 variant_field_index (struct type *type)
7687 {
7688 int f;
7689
7690 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
7691 return -1;
7692
7693 for (f = 0; f < type->num_fields (); f += 1)
7694 {
7695 if (ada_is_variant_part (type, f))
7696 return f;
7697 }
7698 return -1;
7699 }
7700
7701 /* A record type with no fields. */
7702
7703 static struct type *
7704 empty_record (struct type *templ)
7705 {
7706 struct type *type = alloc_type_copy (templ);
7707
7708 type->set_code (TYPE_CODE_STRUCT);
7709 INIT_NONE_SPECIFIC (type);
7710 type->set_name ("<empty>");
7711 TYPE_LENGTH (type) = 0;
7712 return type;
7713 }
7714
7715 /* An ordinary record type (with fixed-length fields) that describes
7716 the value of type TYPE at VALADDR or ADDRESS (see comments at
7717 the beginning of this section) VAL according to GNAT conventions.
7718 DVAL0 should describe the (portion of a) record that contains any
7719 necessary discriminants. It should be NULL if value_type (VAL) is
7720 an outer-level type (i.e., as opposed to a branch of a variant.) A
7721 variant field (unless unchecked) is replaced by a particular branch
7722 of the variant.
7723
7724 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7725 length are not statically known are discarded. As a consequence,
7726 VALADDR, ADDRESS and DVAL0 are ignored.
7727
7728 NOTE: Limitations: For now, we assume that dynamic fields and
7729 variants occupy whole numbers of bytes. However, they need not be
7730 byte-aligned. */
7731
7732 struct type *
7733 ada_template_to_fixed_record_type_1 (struct type *type,
7734 const gdb_byte *valaddr,
7735 CORE_ADDR address, struct value *dval0,
7736 int keep_dynamic_fields)
7737 {
7738 struct value *mark = value_mark ();
7739 struct value *dval;
7740 struct type *rtype;
7741 int nfields, bit_len;
7742 int variant_field;
7743 long off;
7744 int fld_bit_len;
7745 int f;
7746
7747 /* Compute the number of fields in this record type that are going
7748 to be processed: unless keep_dynamic_fields, this includes only
7749 fields whose position and length are static will be processed. */
7750 if (keep_dynamic_fields)
7751 nfields = type->num_fields ();
7752 else
7753 {
7754 nfields = 0;
7755 while (nfields < type->num_fields ()
7756 && !ada_is_variant_part (type, nfields)
7757 && !is_dynamic_field (type, nfields))
7758 nfields++;
7759 }
7760
7761 rtype = alloc_type_copy (type);
7762 rtype->set_code (TYPE_CODE_STRUCT);
7763 INIT_NONE_SPECIFIC (rtype);
7764 rtype->set_num_fields (nfields);
7765 rtype->set_fields
7766 ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field)));
7767 rtype->set_name (ada_type_name (type));
7768 rtype->set_is_fixed_instance (true);
7769
7770 off = 0;
7771 bit_len = 0;
7772 variant_field = -1;
7773
7774 for (f = 0; f < nfields; f += 1)
7775 {
7776 off = align_up (off, field_alignment (type, f))
7777 + TYPE_FIELD_BITPOS (type, f);
7778 SET_FIELD_BITPOS (rtype->field (f), off);
7779 TYPE_FIELD_BITSIZE (rtype, f) = 0;
7780
7781 if (ada_is_variant_part (type, f))
7782 {
7783 variant_field = f;
7784 fld_bit_len = 0;
7785 }
7786 else if (is_dynamic_field (type, f))
7787 {
7788 const gdb_byte *field_valaddr = valaddr;
7789 CORE_ADDR field_address = address;
7790 struct type *field_type =
7791 TYPE_TARGET_TYPE (type->field (f).type ());
7792
7793 if (dval0 == NULL)
7794 {
7795 /* rtype's length is computed based on the run-time
7796 value of discriminants. If the discriminants are not
7797 initialized, the type size may be completely bogus and
7798 GDB may fail to allocate a value for it. So check the
7799 size first before creating the value. */
7800 ada_ensure_varsize_limit (rtype);
7801 /* Using plain value_from_contents_and_address here
7802 causes problems because we will end up trying to
7803 resolve a type that is currently being
7804 constructed. */
7805 dval = value_from_contents_and_address_unresolved (rtype,
7806 valaddr,
7807 address);
7808 rtype = value_type (dval);
7809 }
7810 else
7811 dval = dval0;
7812
7813 /* If the type referenced by this field is an aligner type, we need
7814 to unwrap that aligner type, because its size might not be set.
7815 Keeping the aligner type would cause us to compute the wrong
7816 size for this field, impacting the offset of the all the fields
7817 that follow this one. */
7818 if (ada_is_aligner_type (field_type))
7819 {
7820 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7821
7822 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7823 field_address = cond_offset_target (field_address, field_offset);
7824 field_type = ada_aligned_type (field_type);
7825 }
7826
7827 field_valaddr = cond_offset_host (field_valaddr,
7828 off / TARGET_CHAR_BIT);
7829 field_address = cond_offset_target (field_address,
7830 off / TARGET_CHAR_BIT);
7831
7832 /* Get the fixed type of the field. Note that, in this case,
7833 we do not want to get the real type out of the tag: if
7834 the current field is the parent part of a tagged record,
7835 we will get the tag of the object. Clearly wrong: the real
7836 type of the parent is not the real type of the child. We
7837 would end up in an infinite loop. */
7838 field_type = ada_get_base_type (field_type);
7839 field_type = ada_to_fixed_type (field_type, field_valaddr,
7840 field_address, dval, 0);
7841 /* If the field size is already larger than the maximum
7842 object size, then the record itself will necessarily
7843 be larger than the maximum object size. We need to make
7844 this check now, because the size might be so ridiculously
7845 large (due to an uninitialized variable in the inferior)
7846 that it would cause an overflow when adding it to the
7847 record size. */
7848 ada_ensure_varsize_limit (field_type);
7849
7850 rtype->field (f).set_type (field_type);
7851 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7852 /* The multiplication can potentially overflow. But because
7853 the field length has been size-checked just above, and
7854 assuming that the maximum size is a reasonable value,
7855 an overflow should not happen in practice. So rather than
7856 adding overflow recovery code to this already complex code,
7857 we just assume that it's not going to happen. */
7858 fld_bit_len =
7859 TYPE_LENGTH (rtype->field (f).type ()) * TARGET_CHAR_BIT;
7860 }
7861 else
7862 {
7863 /* Note: If this field's type is a typedef, it is important
7864 to preserve the typedef layer.
7865
7866 Otherwise, we might be transforming a typedef to a fat
7867 pointer (encoding a pointer to an unconstrained array),
7868 into a basic fat pointer (encoding an unconstrained
7869 array). As both types are implemented using the same
7870 structure, the typedef is the only clue which allows us
7871 to distinguish between the two options. Stripping it
7872 would prevent us from printing this field appropriately. */
7873 rtype->field (f).set_type (type->field (f).type ());
7874 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7875 if (TYPE_FIELD_BITSIZE (type, f) > 0)
7876 fld_bit_len =
7877 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7878 else
7879 {
7880 struct type *field_type = type->field (f).type ();
7881
7882 /* We need to be careful of typedefs when computing
7883 the length of our field. If this is a typedef,
7884 get the length of the target type, not the length
7885 of the typedef. */
7886 if (field_type->code () == TYPE_CODE_TYPEDEF)
7887 field_type = ada_typedef_target_type (field_type);
7888
7889 fld_bit_len =
7890 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7891 }
7892 }
7893 if (off + fld_bit_len > bit_len)
7894 bit_len = off + fld_bit_len;
7895 off += fld_bit_len;
7896 TYPE_LENGTH (rtype) =
7897 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7898 }
7899
7900 /* We handle the variant part, if any, at the end because of certain
7901 odd cases in which it is re-ordered so as NOT to be the last field of
7902 the record. This can happen in the presence of representation
7903 clauses. */
7904 if (variant_field >= 0)
7905 {
7906 struct type *branch_type;
7907
7908 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7909
7910 if (dval0 == NULL)
7911 {
7912 /* Using plain value_from_contents_and_address here causes
7913 problems because we will end up trying to resolve a type
7914 that is currently being constructed. */
7915 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
7916 address);
7917 rtype = value_type (dval);
7918 }
7919 else
7920 dval = dval0;
7921
7922 branch_type =
7923 to_fixed_variant_branch_type
7924 (type->field (variant_field).type (),
7925 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7926 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7927 if (branch_type == NULL)
7928 {
7929 for (f = variant_field + 1; f < rtype->num_fields (); f += 1)
7930 rtype->field (f - 1) = rtype->field (f);
7931 rtype->set_num_fields (rtype->num_fields () - 1);
7932 }
7933 else
7934 {
7935 rtype->field (variant_field).set_type (branch_type);
7936 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7937 fld_bit_len =
7938 TYPE_LENGTH (rtype->field (variant_field).type ()) *
7939 TARGET_CHAR_BIT;
7940 if (off + fld_bit_len > bit_len)
7941 bit_len = off + fld_bit_len;
7942 TYPE_LENGTH (rtype) =
7943 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7944 }
7945 }
7946
7947 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7948 should contain the alignment of that record, which should be a strictly
7949 positive value. If null or negative, then something is wrong, most
7950 probably in the debug info. In that case, we don't round up the size
7951 of the resulting type. If this record is not part of another structure,
7952 the current RTYPE length might be good enough for our purposes. */
7953 if (TYPE_LENGTH (type) <= 0)
7954 {
7955 if (rtype->name ())
7956 warning (_("Invalid type size for `%s' detected: %s."),
7957 rtype->name (), pulongest (TYPE_LENGTH (type)));
7958 else
7959 warning (_("Invalid type size for <unnamed> detected: %s."),
7960 pulongest (TYPE_LENGTH (type)));
7961 }
7962 else
7963 {
7964 TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype),
7965 TYPE_LENGTH (type));
7966 }
7967
7968 value_free_to_mark (mark);
7969 if (TYPE_LENGTH (rtype) > varsize_limit)
7970 error (_("record type with dynamic size is larger than varsize-limit"));
7971 return rtype;
7972 }
7973
7974 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7975 of 1. */
7976
7977 static struct type *
7978 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
7979 CORE_ADDR address, struct value *dval0)
7980 {
7981 return ada_template_to_fixed_record_type_1 (type, valaddr,
7982 address, dval0, 1);
7983 }
7984
7985 /* An ordinary record type in which ___XVL-convention fields and
7986 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7987 static approximations, containing all possible fields. Uses
7988 no runtime values. Useless for use in values, but that's OK,
7989 since the results are used only for type determinations. Works on both
7990 structs and unions. Representation note: to save space, we memorize
7991 the result of this function in the TYPE_TARGET_TYPE of the
7992 template type. */
7993
7994 static struct type *
7995 template_to_static_fixed_type (struct type *type0)
7996 {
7997 struct type *type;
7998 int nfields;
7999 int f;
8000
8001 /* No need no do anything if the input type is already fixed. */
8002 if (type0->is_fixed_instance ())
8003 return type0;
8004
8005 /* Likewise if we already have computed the static approximation. */
8006 if (TYPE_TARGET_TYPE (type0) != NULL)
8007 return TYPE_TARGET_TYPE (type0);
8008
8009 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
8010 type = type0;
8011 nfields = type0->num_fields ();
8012
8013 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8014 recompute all over next time. */
8015 TYPE_TARGET_TYPE (type0) = type;
8016
8017 for (f = 0; f < nfields; f += 1)
8018 {
8019 struct type *field_type = type0->field (f).type ();
8020 struct type *new_type;
8021
8022 if (is_dynamic_field (type0, f))
8023 {
8024 field_type = ada_check_typedef (field_type);
8025 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8026 }
8027 else
8028 new_type = static_unwrap_type (field_type);
8029
8030 if (new_type != field_type)
8031 {
8032 /* Clone TYPE0 only the first time we get a new field type. */
8033 if (type == type0)
8034 {
8035 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8036 type->set_code (type0->code ());
8037 INIT_NONE_SPECIFIC (type);
8038 type->set_num_fields (nfields);
8039
8040 field *fields =
8041 ((struct field *)
8042 TYPE_ALLOC (type, nfields * sizeof (struct field)));
8043 memcpy (fields, type0->fields (),
8044 sizeof (struct field) * nfields);
8045 type->set_fields (fields);
8046
8047 type->set_name (ada_type_name (type0));
8048 type->set_is_fixed_instance (true);
8049 TYPE_LENGTH (type) = 0;
8050 }
8051 type->field (f).set_type (new_type);
8052 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8053 }
8054 }
8055
8056 return type;
8057 }
8058
8059 /* Given an object of type TYPE whose contents are at VALADDR and
8060 whose address in memory is ADDRESS, returns a revision of TYPE,
8061 which should be a non-dynamic-sized record, in which the variant
8062 part, if any, is replaced with the appropriate branch. Looks
8063 for discriminant values in DVAL0, which can be NULL if the record
8064 contains the necessary discriminant values. */
8065
8066 static struct type *
8067 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8068 CORE_ADDR address, struct value *dval0)
8069 {
8070 struct value *mark = value_mark ();
8071 struct value *dval;
8072 struct type *rtype;
8073 struct type *branch_type;
8074 int nfields = type->num_fields ();
8075 int variant_field = variant_field_index (type);
8076
8077 if (variant_field == -1)
8078 return type;
8079
8080 if (dval0 == NULL)
8081 {
8082 dval = value_from_contents_and_address (type, valaddr, address);
8083 type = value_type (dval);
8084 }
8085 else
8086 dval = dval0;
8087
8088 rtype = alloc_type_copy (type);
8089 rtype->set_code (TYPE_CODE_STRUCT);
8090 INIT_NONE_SPECIFIC (rtype);
8091 rtype->set_num_fields (nfields);
8092
8093 field *fields =
8094 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8095 memcpy (fields, type->fields (), sizeof (struct field) * nfields);
8096 rtype->set_fields (fields);
8097
8098 rtype->set_name (ada_type_name (type));
8099 rtype->set_is_fixed_instance (true);
8100 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8101
8102 branch_type = to_fixed_variant_branch_type
8103 (type->field (variant_field).type (),
8104 cond_offset_host (valaddr,
8105 TYPE_FIELD_BITPOS (type, variant_field)
8106 / TARGET_CHAR_BIT),
8107 cond_offset_target (address,
8108 TYPE_FIELD_BITPOS (type, variant_field)
8109 / TARGET_CHAR_BIT), dval);
8110 if (branch_type == NULL)
8111 {
8112 int f;
8113
8114 for (f = variant_field + 1; f < nfields; f += 1)
8115 rtype->field (f - 1) = rtype->field (f);
8116 rtype->set_num_fields (rtype->num_fields () - 1);
8117 }
8118 else
8119 {
8120 rtype->field (variant_field).set_type (branch_type);
8121 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8122 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8123 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8124 }
8125 TYPE_LENGTH (rtype) -= TYPE_LENGTH (type->field (variant_field).type ());
8126
8127 value_free_to_mark (mark);
8128 return rtype;
8129 }
8130
8131 /* An ordinary record type (with fixed-length fields) that describes
8132 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8133 beginning of this section]. Any necessary discriminants' values
8134 should be in DVAL, a record value; it may be NULL if the object
8135 at ADDR itself contains any necessary discriminant values.
8136 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8137 values from the record are needed. Except in the case that DVAL,
8138 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8139 unchecked) is replaced by a particular branch of the variant.
8140
8141 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8142 is questionable and may be removed. It can arise during the
8143 processing of an unconstrained-array-of-record type where all the
8144 variant branches have exactly the same size. This is because in
8145 such cases, the compiler does not bother to use the XVS convention
8146 when encoding the record. I am currently dubious of this
8147 shortcut and suspect the compiler should be altered. FIXME. */
8148
8149 static struct type *
8150 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8151 CORE_ADDR address, struct value *dval)
8152 {
8153 struct type *templ_type;
8154
8155 if (type0->is_fixed_instance ())
8156 return type0;
8157
8158 templ_type = dynamic_template_type (type0);
8159
8160 if (templ_type != NULL)
8161 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8162 else if (variant_field_index (type0) >= 0)
8163 {
8164 if (dval == NULL && valaddr == NULL && address == 0)
8165 return type0;
8166 return to_record_with_fixed_variant_part (type0, valaddr, address,
8167 dval);
8168 }
8169 else
8170 {
8171 type0->set_is_fixed_instance (true);
8172 return type0;
8173 }
8174
8175 }
8176
8177 /* An ordinary record type (with fixed-length fields) that describes
8178 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8179 union type. Any necessary discriminants' values should be in DVAL,
8180 a record value. That is, this routine selects the appropriate
8181 branch of the union at ADDR according to the discriminant value
8182 indicated in the union's type name. Returns VAR_TYPE0 itself if
8183 it represents a variant subject to a pragma Unchecked_Union. */
8184
8185 static struct type *
8186 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8187 CORE_ADDR address, struct value *dval)
8188 {
8189 int which;
8190 struct type *templ_type;
8191 struct type *var_type;
8192
8193 if (var_type0->code () == TYPE_CODE_PTR)
8194 var_type = TYPE_TARGET_TYPE (var_type0);
8195 else
8196 var_type = var_type0;
8197
8198 templ_type = ada_find_parallel_type (var_type, "___XVU");
8199
8200 if (templ_type != NULL)
8201 var_type = templ_type;
8202
8203 if (is_unchecked_variant (var_type, value_type (dval)))
8204 return var_type0;
8205 which = ada_which_variant_applies (var_type, dval);
8206
8207 if (which < 0)
8208 return empty_record (var_type);
8209 else if (is_dynamic_field (var_type, which))
8210 return to_fixed_record_type
8211 (TYPE_TARGET_TYPE (var_type->field (which).type ()),
8212 valaddr, address, dval);
8213 else if (variant_field_index (var_type->field (which).type ()) >= 0)
8214 return
8215 to_fixed_record_type
8216 (var_type->field (which).type (), valaddr, address, dval);
8217 else
8218 return var_type->field (which).type ();
8219 }
8220
8221 /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8222 ENCODING_TYPE, a type following the GNAT conventions for discrete
8223 type encodings, only carries redundant information. */
8224
8225 static int
8226 ada_is_redundant_range_encoding (struct type *range_type,
8227 struct type *encoding_type)
8228 {
8229 const char *bounds_str;
8230 int n;
8231 LONGEST lo, hi;
8232
8233 gdb_assert (range_type->code () == TYPE_CODE_RANGE);
8234
8235 if (get_base_type (range_type)->code ()
8236 != get_base_type (encoding_type)->code ())
8237 {
8238 /* The compiler probably used a simple base type to describe
8239 the range type instead of the range's actual base type,
8240 expecting us to get the real base type from the encoding
8241 anyway. In this situation, the encoding cannot be ignored
8242 as redundant. */
8243 return 0;
8244 }
8245
8246 if (is_dynamic_type (range_type))
8247 return 0;
8248
8249 if (encoding_type->name () == NULL)
8250 return 0;
8251
8252 bounds_str = strstr (encoding_type->name (), "___XDLU_");
8253 if (bounds_str == NULL)
8254 return 0;
8255
8256 n = 8; /* Skip "___XDLU_". */
8257 if (!ada_scan_number (bounds_str, n, &lo, &n))
8258 return 0;
8259 if (range_type->bounds ()->low.const_val () != lo)
8260 return 0;
8261
8262 n += 2; /* Skip the "__" separator between the two bounds. */
8263 if (!ada_scan_number (bounds_str, n, &hi, &n))
8264 return 0;
8265 if (range_type->bounds ()->high.const_val () != hi)
8266 return 0;
8267
8268 return 1;
8269 }
8270
8271 /* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8272 a type following the GNAT encoding for describing array type
8273 indices, only carries redundant information. */
8274
8275 static int
8276 ada_is_redundant_index_type_desc (struct type *array_type,
8277 struct type *desc_type)
8278 {
8279 struct type *this_layer = check_typedef (array_type);
8280 int i;
8281
8282 for (i = 0; i < desc_type->num_fields (); i++)
8283 {
8284 if (!ada_is_redundant_range_encoding (this_layer->index_type (),
8285 desc_type->field (i).type ()))
8286 return 0;
8287 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8288 }
8289
8290 return 1;
8291 }
8292
8293 /* Assuming that TYPE0 is an array type describing the type of a value
8294 at ADDR, and that DVAL describes a record containing any
8295 discriminants used in TYPE0, returns a type for the value that
8296 contains no dynamic components (that is, no components whose sizes
8297 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8298 true, gives an error message if the resulting type's size is over
8299 varsize_limit. */
8300
8301 static struct type *
8302 to_fixed_array_type (struct type *type0, struct value *dval,
8303 int ignore_too_big)
8304 {
8305 struct type *index_type_desc;
8306 struct type *result;
8307 int constrained_packed_array_p;
8308 static const char *xa_suffix = "___XA";
8309
8310 type0 = ada_check_typedef (type0);
8311 if (type0->is_fixed_instance ())
8312 return type0;
8313
8314 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8315 if (constrained_packed_array_p)
8316 {
8317 type0 = decode_constrained_packed_array_type (type0);
8318 if (type0 == nullptr)
8319 error (_("could not decode constrained packed array type"));
8320 }
8321
8322 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8323
8324 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8325 encoding suffixed with 'P' may still be generated. If so,
8326 it should be used to find the XA type. */
8327
8328 if (index_type_desc == NULL)
8329 {
8330 const char *type_name = ada_type_name (type0);
8331
8332 if (type_name != NULL)
8333 {
8334 const int len = strlen (type_name);
8335 char *name = (char *) alloca (len + strlen (xa_suffix));
8336
8337 if (type_name[len - 1] == 'P')
8338 {
8339 strcpy (name, type_name);
8340 strcpy (name + len - 1, xa_suffix);
8341 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8342 }
8343 }
8344 }
8345
8346 ada_fixup_array_indexes_type (index_type_desc);
8347 if (index_type_desc != NULL
8348 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8349 {
8350 /* Ignore this ___XA parallel type, as it does not bring any
8351 useful information. This allows us to avoid creating fixed
8352 versions of the array's index types, which would be identical
8353 to the original ones. This, in turn, can also help avoid
8354 the creation of fixed versions of the array itself. */
8355 index_type_desc = NULL;
8356 }
8357
8358 if (index_type_desc == NULL)
8359 {
8360 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8361
8362 /* NOTE: elt_type---the fixed version of elt_type0---should never
8363 depend on the contents of the array in properly constructed
8364 debugging data. */
8365 /* Create a fixed version of the array element type.
8366 We're not providing the address of an element here,
8367 and thus the actual object value cannot be inspected to do
8368 the conversion. This should not be a problem, since arrays of
8369 unconstrained objects are not allowed. In particular, all
8370 the elements of an array of a tagged type should all be of
8371 the same type specified in the debugging info. No need to
8372 consult the object tag. */
8373 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8374
8375 /* Make sure we always create a new array type when dealing with
8376 packed array types, since we're going to fix-up the array
8377 type length and element bitsize a little further down. */
8378 if (elt_type0 == elt_type && !constrained_packed_array_p)
8379 result = type0;
8380 else
8381 result = create_array_type (alloc_type_copy (type0),
8382 elt_type, type0->index_type ());
8383 }
8384 else
8385 {
8386 int i;
8387 struct type *elt_type0;
8388
8389 elt_type0 = type0;
8390 for (i = index_type_desc->num_fields (); i > 0; i -= 1)
8391 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8392
8393 /* NOTE: result---the fixed version of elt_type0---should never
8394 depend on the contents of the array in properly constructed
8395 debugging data. */
8396 /* Create a fixed version of the array element type.
8397 We're not providing the address of an element here,
8398 and thus the actual object value cannot be inspected to do
8399 the conversion. This should not be a problem, since arrays of
8400 unconstrained objects are not allowed. In particular, all
8401 the elements of an array of a tagged type should all be of
8402 the same type specified in the debugging info. No need to
8403 consult the object tag. */
8404 result =
8405 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8406
8407 elt_type0 = type0;
8408 for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1)
8409 {
8410 struct type *range_type =
8411 to_fixed_range_type (index_type_desc->field (i).type (), dval);
8412
8413 result = create_array_type (alloc_type_copy (elt_type0),
8414 result, range_type);
8415 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8416 }
8417 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8418 error (_("array type with dynamic size is larger than varsize-limit"));
8419 }
8420
8421 /* We want to preserve the type name. This can be useful when
8422 trying to get the type name of a value that has already been
8423 printed (for instance, if the user did "print VAR; whatis $". */
8424 result->set_name (type0->name ());
8425
8426 if (constrained_packed_array_p)
8427 {
8428 /* So far, the resulting type has been created as if the original
8429 type was a regular (non-packed) array type. As a result, the
8430 bitsize of the array elements needs to be set again, and the array
8431 length needs to be recomputed based on that bitsize. */
8432 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8433 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8434
8435 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8436 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8437 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8438 TYPE_LENGTH (result)++;
8439 }
8440
8441 result->set_is_fixed_instance (true);
8442 return result;
8443 }
8444
8445
8446 /* A standard type (containing no dynamically sized components)
8447 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8448 DVAL describes a record containing any discriminants used in TYPE0,
8449 and may be NULL if there are none, or if the object of type TYPE at
8450 ADDRESS or in VALADDR contains these discriminants.
8451
8452 If CHECK_TAG is not null, in the case of tagged types, this function
8453 attempts to locate the object's tag and use it to compute the actual
8454 type. However, when ADDRESS is null, we cannot use it to determine the
8455 location of the tag, and therefore compute the tagged type's actual type.
8456 So we return the tagged type without consulting the tag. */
8457
8458 static struct type *
8459 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8460 CORE_ADDR address, struct value *dval, int check_tag)
8461 {
8462 type = ada_check_typedef (type);
8463
8464 /* Only un-fixed types need to be handled here. */
8465 if (!HAVE_GNAT_AUX_INFO (type))
8466 return type;
8467
8468 switch (type->code ())
8469 {
8470 default:
8471 return type;
8472 case TYPE_CODE_STRUCT:
8473 {
8474 struct type *static_type = to_static_fixed_type (type);
8475 struct type *fixed_record_type =
8476 to_fixed_record_type (type, valaddr, address, NULL);
8477
8478 /* If STATIC_TYPE is a tagged type and we know the object's address,
8479 then we can determine its tag, and compute the object's actual
8480 type from there. Note that we have to use the fixed record
8481 type (the parent part of the record may have dynamic fields
8482 and the way the location of _tag is expressed may depend on
8483 them). */
8484
8485 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8486 {
8487 struct value *tag =
8488 value_tag_from_contents_and_address
8489 (fixed_record_type,
8490 valaddr,
8491 address);
8492 struct type *real_type = type_from_tag (tag);
8493 struct value *obj =
8494 value_from_contents_and_address (fixed_record_type,
8495 valaddr,
8496 address);
8497 fixed_record_type = value_type (obj);
8498 if (real_type != NULL)
8499 return to_fixed_record_type
8500 (real_type, NULL,
8501 value_address (ada_tag_value_at_base_address (obj)), NULL);
8502 }
8503
8504 /* Check to see if there is a parallel ___XVZ variable.
8505 If there is, then it provides the actual size of our type. */
8506 else if (ada_type_name (fixed_record_type) != NULL)
8507 {
8508 const char *name = ada_type_name (fixed_record_type);
8509 char *xvz_name
8510 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
8511 bool xvz_found = false;
8512 LONGEST size;
8513
8514 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8515 try
8516 {
8517 xvz_found = get_int_var_value (xvz_name, size);
8518 }
8519 catch (const gdb_exception_error &except)
8520 {
8521 /* We found the variable, but somehow failed to read
8522 its value. Rethrow the same error, but with a little
8523 bit more information, to help the user understand
8524 what went wrong (Eg: the variable might have been
8525 optimized out). */
8526 throw_error (except.error,
8527 _("unable to read value of %s (%s)"),
8528 xvz_name, except.what ());
8529 }
8530
8531 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8532 {
8533 fixed_record_type = copy_type (fixed_record_type);
8534 TYPE_LENGTH (fixed_record_type) = size;
8535
8536 /* The FIXED_RECORD_TYPE may have be a stub. We have
8537 observed this when the debugging info is STABS, and
8538 apparently it is something that is hard to fix.
8539
8540 In practice, we don't need the actual type definition
8541 at all, because the presence of the XVZ variable allows us
8542 to assume that there must be a XVS type as well, which we
8543 should be able to use later, when we need the actual type
8544 definition.
8545
8546 In the meantime, pretend that the "fixed" type we are
8547 returning is NOT a stub, because this can cause trouble
8548 when using this type to create new types targeting it.
8549 Indeed, the associated creation routines often check
8550 whether the target type is a stub and will try to replace
8551 it, thus using a type with the wrong size. This, in turn,
8552 might cause the new type to have the wrong size too.
8553 Consider the case of an array, for instance, where the size
8554 of the array is computed from the number of elements in
8555 our array multiplied by the size of its element. */
8556 fixed_record_type->set_is_stub (false);
8557 }
8558 }
8559 return fixed_record_type;
8560 }
8561 case TYPE_CODE_ARRAY:
8562 return to_fixed_array_type (type, dval, 1);
8563 case TYPE_CODE_UNION:
8564 if (dval == NULL)
8565 return type;
8566 else
8567 return to_fixed_variant_branch_type (type, valaddr, address, dval);
8568 }
8569 }
8570
8571 /* The same as ada_to_fixed_type_1, except that it preserves the type
8572 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8573
8574 The typedef layer needs be preserved in order to differentiate between
8575 arrays and array pointers when both types are implemented using the same
8576 fat pointer. In the array pointer case, the pointer is encoded as
8577 a typedef of the pointer type. For instance, considering:
8578
8579 type String_Access is access String;
8580 S1 : String_Access := null;
8581
8582 To the debugger, S1 is defined as a typedef of type String. But
8583 to the user, it is a pointer. So if the user tries to print S1,
8584 we should not dereference the array, but print the array address
8585 instead.
8586
8587 If we didn't preserve the typedef layer, we would lose the fact that
8588 the type is to be presented as a pointer (needs de-reference before
8589 being printed). And we would also use the source-level type name. */
8590
8591 struct type *
8592 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8593 CORE_ADDR address, struct value *dval, int check_tag)
8594
8595 {
8596 struct type *fixed_type =
8597 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8598
8599 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8600 then preserve the typedef layer.
8601
8602 Implementation note: We can only check the main-type portion of
8603 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8604 from TYPE now returns a type that has the same instance flags
8605 as TYPE. For instance, if TYPE is a "typedef const", and its
8606 target type is a "struct", then the typedef elimination will return
8607 a "const" version of the target type. See check_typedef for more
8608 details about how the typedef layer elimination is done.
8609
8610 brobecker/2010-11-19: It seems to me that the only case where it is
8611 useful to preserve the typedef layer is when dealing with fat pointers.
8612 Perhaps, we could add a check for that and preserve the typedef layer
8613 only in that situation. But this seems unnecessary so far, probably
8614 because we call check_typedef/ada_check_typedef pretty much everywhere.
8615 */
8616 if (type->code () == TYPE_CODE_TYPEDEF
8617 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8618 == TYPE_MAIN_TYPE (fixed_type)))
8619 return type;
8620
8621 return fixed_type;
8622 }
8623
8624 /* A standard (static-sized) type corresponding as well as possible to
8625 TYPE0, but based on no runtime data. */
8626
8627 static struct type *
8628 to_static_fixed_type (struct type *type0)
8629 {
8630 struct type *type;
8631
8632 if (type0 == NULL)
8633 return NULL;
8634
8635 if (type0->is_fixed_instance ())
8636 return type0;
8637
8638 type0 = ada_check_typedef (type0);
8639
8640 switch (type0->code ())
8641 {
8642 default:
8643 return type0;
8644 case TYPE_CODE_STRUCT:
8645 type = dynamic_template_type (type0);
8646 if (type != NULL)
8647 return template_to_static_fixed_type (type);
8648 else
8649 return template_to_static_fixed_type (type0);
8650 case TYPE_CODE_UNION:
8651 type = ada_find_parallel_type (type0, "___XVU");
8652 if (type != NULL)
8653 return template_to_static_fixed_type (type);
8654 else
8655 return template_to_static_fixed_type (type0);
8656 }
8657 }
8658
8659 /* A static approximation of TYPE with all type wrappers removed. */
8660
8661 static struct type *
8662 static_unwrap_type (struct type *type)
8663 {
8664 if (ada_is_aligner_type (type))
8665 {
8666 struct type *type1 = ada_check_typedef (type)->field (0).type ();
8667 if (ada_type_name (type1) == NULL)
8668 type1->set_name (ada_type_name (type));
8669
8670 return static_unwrap_type (type1);
8671 }
8672 else
8673 {
8674 struct type *raw_real_type = ada_get_base_type (type);
8675
8676 if (raw_real_type == type)
8677 return type;
8678 else
8679 return to_static_fixed_type (raw_real_type);
8680 }
8681 }
8682
8683 /* In some cases, incomplete and private types require
8684 cross-references that are not resolved as records (for example,
8685 type Foo;
8686 type FooP is access Foo;
8687 V: FooP;
8688 type Foo is array ...;
8689 ). In these cases, since there is no mechanism for producing
8690 cross-references to such types, we instead substitute for FooP a
8691 stub enumeration type that is nowhere resolved, and whose tag is
8692 the name of the actual type. Call these types "non-record stubs". */
8693
8694 /* A type equivalent to TYPE that is not a non-record stub, if one
8695 exists, otherwise TYPE. */
8696
8697 struct type *
8698 ada_check_typedef (struct type *type)
8699 {
8700 if (type == NULL)
8701 return NULL;
8702
8703 /* If our type is an access to an unconstrained array, which is encoded
8704 as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
8705 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8706 what allows us to distinguish between fat pointers that represent
8707 array types, and fat pointers that represent array access types
8708 (in both cases, the compiler implements them as fat pointers). */
8709 if (ada_is_access_to_unconstrained_array (type))
8710 return type;
8711
8712 type = check_typedef (type);
8713 if (type == NULL || type->code () != TYPE_CODE_ENUM
8714 || !type->is_stub ()
8715 || type->name () == NULL)
8716 return type;
8717 else
8718 {
8719 const char *name = type->name ();
8720 struct type *type1 = ada_find_any_type (name);
8721
8722 if (type1 == NULL)
8723 return type;
8724
8725 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8726 stubs pointing to arrays, as we don't create symbols for array
8727 types, only for the typedef-to-array types). If that's the case,
8728 strip the typedef layer. */
8729 if (type1->code () == TYPE_CODE_TYPEDEF)
8730 type1 = ada_check_typedef (type1);
8731
8732 return type1;
8733 }
8734 }
8735
8736 /* A value representing the data at VALADDR/ADDRESS as described by
8737 type TYPE0, but with a standard (static-sized) type that correctly
8738 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8739 type, then return VAL0 [this feature is simply to avoid redundant
8740 creation of struct values]. */
8741
8742 static struct value *
8743 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8744 struct value *val0)
8745 {
8746 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8747
8748 if (type == type0 && val0 != NULL)
8749 return val0;
8750
8751 if (VALUE_LVAL (val0) != lval_memory)
8752 {
8753 /* Our value does not live in memory; it could be a convenience
8754 variable, for instance. Create a not_lval value using val0's
8755 contents. */
8756 return value_from_contents (type, value_contents (val0));
8757 }
8758
8759 return value_from_contents_and_address (type, 0, address);
8760 }
8761
8762 /* A value representing VAL, but with a standard (static-sized) type
8763 that correctly describes it. Does not necessarily create a new
8764 value. */
8765
8766 struct value *
8767 ada_to_fixed_value (struct value *val)
8768 {
8769 val = unwrap_value (val);
8770 val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
8771 return val;
8772 }
8773 \f
8774
8775 /* Attributes */
8776
8777 /* Table mapping attribute numbers to names.
8778 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
8779
8780 static const char * const attribute_names[] = {
8781 "<?>",
8782
8783 "first",
8784 "last",
8785 "length",
8786 "image",
8787 "max",
8788 "min",
8789 "modulus",
8790 "pos",
8791 "size",
8792 "tag",
8793 "val",
8794 0
8795 };
8796
8797 static const char *
8798 ada_attribute_name (enum exp_opcode n)
8799 {
8800 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8801 return attribute_names[n - OP_ATR_FIRST + 1];
8802 else
8803 return attribute_names[0];
8804 }
8805
8806 /* Evaluate the 'POS attribute applied to ARG. */
8807
8808 static LONGEST
8809 pos_atr (struct value *arg)
8810 {
8811 struct value *val = coerce_ref (arg);
8812 struct type *type = value_type (val);
8813
8814 if (!discrete_type_p (type))
8815 error (_("'POS only defined on discrete types"));
8816
8817 gdb::optional<LONGEST> result = discrete_position (type, value_as_long (val));
8818 if (!result.has_value ())
8819 error (_("enumeration value is invalid: can't find 'POS"));
8820
8821 return *result;
8822 }
8823
8824 static struct value *
8825 value_pos_atr (struct type *type, struct value *arg)
8826 {
8827 return value_from_longest (type, pos_atr (arg));
8828 }
8829
8830 /* Evaluate the TYPE'VAL attribute applied to ARG. */
8831
8832 static struct value *
8833 val_atr (struct type *type, LONGEST val)
8834 {
8835 gdb_assert (discrete_type_p (type));
8836 if (type->code () == TYPE_CODE_RANGE)
8837 type = TYPE_TARGET_TYPE (type);
8838 if (type->code () == TYPE_CODE_ENUM)
8839 {
8840 if (val < 0 || val >= type->num_fields ())
8841 error (_("argument to 'VAL out of range"));
8842 val = TYPE_FIELD_ENUMVAL (type, val);
8843 }
8844 return value_from_longest (type, val);
8845 }
8846
8847 static struct value *
8848 value_val_atr (struct type *type, struct value *arg)
8849 {
8850 if (!discrete_type_p (type))
8851 error (_("'VAL only defined on discrete types"));
8852 if (!integer_type_p (value_type (arg)))
8853 error (_("'VAL requires integral argument"));
8854
8855 return val_atr (type, value_as_long (arg));
8856 }
8857 \f
8858
8859 /* Evaluation */
8860
8861 /* True if TYPE appears to be an Ada character type.
8862 [At the moment, this is true only for Character and Wide_Character;
8863 It is a heuristic test that could stand improvement]. */
8864
8865 bool
8866 ada_is_character_type (struct type *type)
8867 {
8868 const char *name;
8869
8870 /* If the type code says it's a character, then assume it really is,
8871 and don't check any further. */
8872 if (type->code () == TYPE_CODE_CHAR)
8873 return true;
8874
8875 /* Otherwise, assume it's a character type iff it is a discrete type
8876 with a known character type name. */
8877 name = ada_type_name (type);
8878 return (name != NULL
8879 && (type->code () == TYPE_CODE_INT
8880 || type->code () == TYPE_CODE_RANGE)
8881 && (strcmp (name, "character") == 0
8882 || strcmp (name, "wide_character") == 0
8883 || strcmp (name, "wide_wide_character") == 0
8884 || strcmp (name, "unsigned char") == 0));
8885 }
8886
8887 /* True if TYPE appears to be an Ada string type. */
8888
8889 bool
8890 ada_is_string_type (struct type *type)
8891 {
8892 type = ada_check_typedef (type);
8893 if (type != NULL
8894 && type->code () != TYPE_CODE_PTR
8895 && (ada_is_simple_array_type (type)
8896 || ada_is_array_descriptor_type (type))
8897 && ada_array_arity (type) == 1)
8898 {
8899 struct type *elttype = ada_array_element_type (type, 1);
8900
8901 return ada_is_character_type (elttype);
8902 }
8903 else
8904 return false;
8905 }
8906
8907 /* The compiler sometimes provides a parallel XVS type for a given
8908 PAD type. Normally, it is safe to follow the PAD type directly,
8909 but older versions of the compiler have a bug that causes the offset
8910 of its "F" field to be wrong. Following that field in that case
8911 would lead to incorrect results, but this can be worked around
8912 by ignoring the PAD type and using the associated XVS type instead.
8913
8914 Set to True if the debugger should trust the contents of PAD types.
8915 Otherwise, ignore the PAD type if there is a parallel XVS type. */
8916 static bool trust_pad_over_xvs = true;
8917
8918 /* True if TYPE is a struct type introduced by the compiler to force the
8919 alignment of a value. Such types have a single field with a
8920 distinctive name. */
8921
8922 int
8923 ada_is_aligner_type (struct type *type)
8924 {
8925 type = ada_check_typedef (type);
8926
8927 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
8928 return 0;
8929
8930 return (type->code () == TYPE_CODE_STRUCT
8931 && type->num_fields () == 1
8932 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
8933 }
8934
8935 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
8936 the parallel type. */
8937
8938 struct type *
8939 ada_get_base_type (struct type *raw_type)
8940 {
8941 struct type *real_type_namer;
8942 struct type *raw_real_type;
8943
8944 if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT)
8945 return raw_type;
8946
8947 if (ada_is_aligner_type (raw_type))
8948 /* The encoding specifies that we should always use the aligner type.
8949 So, even if this aligner type has an associated XVS type, we should
8950 simply ignore it.
8951
8952 According to the compiler gurus, an XVS type parallel to an aligner
8953 type may exist because of a stabs limitation. In stabs, aligner
8954 types are empty because the field has a variable-sized type, and
8955 thus cannot actually be used as an aligner type. As a result,
8956 we need the associated parallel XVS type to decode the type.
8957 Since the policy in the compiler is to not change the internal
8958 representation based on the debugging info format, we sometimes
8959 end up having a redundant XVS type parallel to the aligner type. */
8960 return raw_type;
8961
8962 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
8963 if (real_type_namer == NULL
8964 || real_type_namer->code () != TYPE_CODE_STRUCT
8965 || real_type_namer->num_fields () != 1)
8966 return raw_type;
8967
8968 if (real_type_namer->field (0).type ()->code () != TYPE_CODE_REF)
8969 {
8970 /* This is an older encoding form where the base type needs to be
8971 looked up by name. We prefer the newer encoding because it is
8972 more efficient. */
8973 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8974 if (raw_real_type == NULL)
8975 return raw_type;
8976 else
8977 return raw_real_type;
8978 }
8979
8980 /* The field in our XVS type is a reference to the base type. */
8981 return TYPE_TARGET_TYPE (real_type_namer->field (0).type ());
8982 }
8983
8984 /* The type of value designated by TYPE, with all aligners removed. */
8985
8986 struct type *
8987 ada_aligned_type (struct type *type)
8988 {
8989 if (ada_is_aligner_type (type))
8990 return ada_aligned_type (type->field (0).type ());
8991 else
8992 return ada_get_base_type (type);
8993 }
8994
8995
8996 /* The address of the aligned value in an object at address VALADDR
8997 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
8998
8999 const gdb_byte *
9000 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
9001 {
9002 if (ada_is_aligner_type (type))
9003 return ada_aligned_value_addr (type->field (0).type (),
9004 valaddr +
9005 TYPE_FIELD_BITPOS (type,
9006 0) / TARGET_CHAR_BIT);
9007 else
9008 return valaddr;
9009 }
9010
9011
9012
9013 /* The printed representation of an enumeration literal with encoded
9014 name NAME. The value is good to the next call of ada_enum_name. */
9015 const char *
9016 ada_enum_name (const char *name)
9017 {
9018 static std::string storage;
9019 const char *tmp;
9020
9021 /* First, unqualify the enumeration name:
9022 1. Search for the last '.' character. If we find one, then skip
9023 all the preceding characters, the unqualified name starts
9024 right after that dot.
9025 2. Otherwise, we may be debugging on a target where the compiler
9026 translates dots into "__". Search forward for double underscores,
9027 but stop searching when we hit an overloading suffix, which is
9028 of the form "__" followed by digits. */
9029
9030 tmp = strrchr (name, '.');
9031 if (tmp != NULL)
9032 name = tmp + 1;
9033 else
9034 {
9035 while ((tmp = strstr (name, "__")) != NULL)
9036 {
9037 if (isdigit (tmp[2]))
9038 break;
9039 else
9040 name = tmp + 2;
9041 }
9042 }
9043
9044 if (name[0] == 'Q')
9045 {
9046 int v;
9047
9048 if (name[1] == 'U' || name[1] == 'W')
9049 {
9050 if (sscanf (name + 2, "%x", &v) != 1)
9051 return name;
9052 }
9053 else if (((name[1] >= '0' && name[1] <= '9')
9054 || (name[1] >= 'a' && name[1] <= 'z'))
9055 && name[2] == '\0')
9056 {
9057 storage = string_printf ("'%c'", name[1]);
9058 return storage.c_str ();
9059 }
9060 else
9061 return name;
9062
9063 if (isascii (v) && isprint (v))
9064 storage = string_printf ("'%c'", v);
9065 else if (name[1] == 'U')
9066 storage = string_printf ("[\"%02x\"]", v);
9067 else
9068 storage = string_printf ("[\"%04x\"]", v);
9069
9070 return storage.c_str ();
9071 }
9072 else
9073 {
9074 tmp = strstr (name, "__");
9075 if (tmp == NULL)
9076 tmp = strstr (name, "$");
9077 if (tmp != NULL)
9078 {
9079 storage = std::string (name, tmp - name);
9080 return storage.c_str ();
9081 }
9082
9083 return name;
9084 }
9085 }
9086
9087 /* Evaluate the subexpression of EXP starting at *POS as for
9088 evaluate_type, updating *POS to point just past the evaluated
9089 expression. */
9090
9091 static struct value *
9092 evaluate_subexp_type (struct expression *exp, int *pos)
9093 {
9094 return evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9095 }
9096
9097 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9098 value it wraps. */
9099
9100 static struct value *
9101 unwrap_value (struct value *val)
9102 {
9103 struct type *type = ada_check_typedef (value_type (val));
9104
9105 if (ada_is_aligner_type (type))
9106 {
9107 struct value *v = ada_value_struct_elt (val, "F", 0);
9108 struct type *val_type = ada_check_typedef (value_type (v));
9109
9110 if (ada_type_name (val_type) == NULL)
9111 val_type->set_name (ada_type_name (type));
9112
9113 return unwrap_value (v);
9114 }
9115 else
9116 {
9117 struct type *raw_real_type =
9118 ada_check_typedef (ada_get_base_type (type));
9119
9120 /* If there is no parallel XVS or XVE type, then the value is
9121 already unwrapped. Return it without further modification. */
9122 if ((type == raw_real_type)
9123 && ada_find_parallel_type (type, "___XVE") == NULL)
9124 return val;
9125
9126 return
9127 coerce_unspec_val_to_type
9128 (val, ada_to_fixed_type (raw_real_type, 0,
9129 value_address (val),
9130 NULL, 1));
9131 }
9132 }
9133
9134 /* Given two array types T1 and T2, return nonzero iff both arrays
9135 contain the same number of elements. */
9136
9137 static int
9138 ada_same_array_size_p (struct type *t1, struct type *t2)
9139 {
9140 LONGEST lo1, hi1, lo2, hi2;
9141
9142 /* Get the array bounds in order to verify that the size of
9143 the two arrays match. */
9144 if (!get_array_bounds (t1, &lo1, &hi1)
9145 || !get_array_bounds (t2, &lo2, &hi2))
9146 error (_("unable to determine array bounds"));
9147
9148 /* To make things easier for size comparison, normalize a bit
9149 the case of empty arrays by making sure that the difference
9150 between upper bound and lower bound is always -1. */
9151 if (lo1 > hi1)
9152 hi1 = lo1 - 1;
9153 if (lo2 > hi2)
9154 hi2 = lo2 - 1;
9155
9156 return (hi1 - lo1 == hi2 - lo2);
9157 }
9158
9159 /* Assuming that VAL is an array of integrals, and TYPE represents
9160 an array with the same number of elements, but with wider integral
9161 elements, return an array "casted" to TYPE. In practice, this
9162 means that the returned array is built by casting each element
9163 of the original array into TYPE's (wider) element type. */
9164
9165 static struct value *
9166 ada_promote_array_of_integrals (struct type *type, struct value *val)
9167 {
9168 struct type *elt_type = TYPE_TARGET_TYPE (type);
9169 LONGEST lo, hi;
9170 struct value *res;
9171 LONGEST i;
9172
9173 /* Verify that both val and type are arrays of scalars, and
9174 that the size of val's elements is smaller than the size
9175 of type's element. */
9176 gdb_assert (type->code () == TYPE_CODE_ARRAY);
9177 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9178 gdb_assert (value_type (val)->code () == TYPE_CODE_ARRAY);
9179 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9180 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9181 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9182
9183 if (!get_array_bounds (type, &lo, &hi))
9184 error (_("unable to determine array bounds"));
9185
9186 res = allocate_value (type);
9187
9188 /* Promote each array element. */
9189 for (i = 0; i < hi - lo + 1; i++)
9190 {
9191 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9192
9193 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9194 value_contents_all (elt), TYPE_LENGTH (elt_type));
9195 }
9196
9197 return res;
9198 }
9199
9200 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9201 return the converted value. */
9202
9203 static struct value *
9204 coerce_for_assign (struct type *type, struct value *val)
9205 {
9206 struct type *type2 = value_type (val);
9207
9208 if (type == type2)
9209 return val;
9210
9211 type2 = ada_check_typedef (type2);
9212 type = ada_check_typedef (type);
9213
9214 if (type2->code () == TYPE_CODE_PTR
9215 && type->code () == TYPE_CODE_ARRAY)
9216 {
9217 val = ada_value_ind (val);
9218 type2 = value_type (val);
9219 }
9220
9221 if (type2->code () == TYPE_CODE_ARRAY
9222 && type->code () == TYPE_CODE_ARRAY)
9223 {
9224 if (!ada_same_array_size_p (type, type2))
9225 error (_("cannot assign arrays of different length"));
9226
9227 if (is_integral_type (TYPE_TARGET_TYPE (type))
9228 && is_integral_type (TYPE_TARGET_TYPE (type2))
9229 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9230 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9231 {
9232 /* Allow implicit promotion of the array elements to
9233 a wider type. */
9234 return ada_promote_array_of_integrals (type, val);
9235 }
9236
9237 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9238 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9239 error (_("Incompatible types in assignment"));
9240 deprecated_set_value_type (val, type);
9241 }
9242 return val;
9243 }
9244
9245 static struct value *
9246 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9247 {
9248 struct value *val;
9249 struct type *type1, *type2;
9250 LONGEST v, v1, v2;
9251
9252 arg1 = coerce_ref (arg1);
9253 arg2 = coerce_ref (arg2);
9254 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9255 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9256
9257 if (type1->code () != TYPE_CODE_INT
9258 || type2->code () != TYPE_CODE_INT)
9259 return value_binop (arg1, arg2, op);
9260
9261 switch (op)
9262 {
9263 case BINOP_MOD:
9264 case BINOP_DIV:
9265 case BINOP_REM:
9266 break;
9267 default:
9268 return value_binop (arg1, arg2, op);
9269 }
9270
9271 v2 = value_as_long (arg2);
9272 if (v2 == 0)
9273 error (_("second operand of %s must not be zero."), op_string (op));
9274
9275 if (type1->is_unsigned () || op == BINOP_MOD)
9276 return value_binop (arg1, arg2, op);
9277
9278 v1 = value_as_long (arg1);
9279 switch (op)
9280 {
9281 case BINOP_DIV:
9282 v = v1 / v2;
9283 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9284 v += v > 0 ? -1 : 1;
9285 break;
9286 case BINOP_REM:
9287 v = v1 % v2;
9288 if (v * v1 < 0)
9289 v -= v2;
9290 break;
9291 default:
9292 /* Should not reach this point. */
9293 v = 0;
9294 }
9295
9296 val = allocate_value (type1);
9297 store_unsigned_integer (value_contents_raw (val),
9298 TYPE_LENGTH (value_type (val)),
9299 type_byte_order (type1), v);
9300 return val;
9301 }
9302
9303 static int
9304 ada_value_equal (struct value *arg1, struct value *arg2)
9305 {
9306 if (ada_is_direct_array_type (value_type (arg1))
9307 || ada_is_direct_array_type (value_type (arg2)))
9308 {
9309 struct type *arg1_type, *arg2_type;
9310
9311 /* Automatically dereference any array reference before
9312 we attempt to perform the comparison. */
9313 arg1 = ada_coerce_ref (arg1);
9314 arg2 = ada_coerce_ref (arg2);
9315
9316 arg1 = ada_coerce_to_simple_array (arg1);
9317 arg2 = ada_coerce_to_simple_array (arg2);
9318
9319 arg1_type = ada_check_typedef (value_type (arg1));
9320 arg2_type = ada_check_typedef (value_type (arg2));
9321
9322 if (arg1_type->code () != TYPE_CODE_ARRAY
9323 || arg2_type->code () != TYPE_CODE_ARRAY)
9324 error (_("Attempt to compare array with non-array"));
9325 /* FIXME: The following works only for types whose
9326 representations use all bits (no padding or undefined bits)
9327 and do not have user-defined equality. */
9328 return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9329 && memcmp (value_contents (arg1), value_contents (arg2),
9330 TYPE_LENGTH (arg1_type)) == 0);
9331 }
9332 return value_equal (arg1, arg2);
9333 }
9334
9335 /* Assign the result of evaluating EXP starting at *POS to the INDEXth
9336 component of LHS (a simple array or a record), updating *POS past
9337 the expression, assuming that LHS is contained in CONTAINER. Does
9338 not modify the inferior's memory, nor does it modify LHS (unless
9339 LHS == CONTAINER). */
9340
9341 static void
9342 assign_component (struct value *container, struct value *lhs, LONGEST index,
9343 struct expression *exp, int *pos)
9344 {
9345 struct value *mark = value_mark ();
9346 struct value *elt;
9347 struct type *lhs_type = check_typedef (value_type (lhs));
9348
9349 if (lhs_type->code () == TYPE_CODE_ARRAY)
9350 {
9351 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9352 struct value *index_val = value_from_longest (index_type, index);
9353
9354 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9355 }
9356 else
9357 {
9358 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9359 elt = ada_to_fixed_value (elt);
9360 }
9361
9362 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9363 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9364 else
9365 value_assign_to_component (container, elt,
9366 ada_evaluate_subexp (NULL, exp, pos,
9367 EVAL_NORMAL));
9368
9369 value_free_to_mark (mark);
9370 }
9371
9372 /* Assuming that LHS represents an lvalue having a record or array
9373 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9374 of that aggregate's value to LHS, advancing *POS past the
9375 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9376 lvalue containing LHS (possibly LHS itself). Does not modify
9377 the inferior's memory, nor does it modify the contents of
9378 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
9379
9380 static struct value *
9381 assign_aggregate (struct value *container,
9382 struct value *lhs, struct expression *exp,
9383 int *pos, enum noside noside)
9384 {
9385 struct type *lhs_type;
9386 int n = exp->elts[*pos+1].longconst;
9387 LONGEST low_index, high_index;
9388 int i;
9389
9390 *pos += 3;
9391 if (noside != EVAL_NORMAL)
9392 {
9393 for (i = 0; i < n; i += 1)
9394 ada_evaluate_subexp (NULL, exp, pos, noside);
9395 return container;
9396 }
9397
9398 container = ada_coerce_ref (container);
9399 if (ada_is_direct_array_type (value_type (container)))
9400 container = ada_coerce_to_simple_array (container);
9401 lhs = ada_coerce_ref (lhs);
9402 if (!deprecated_value_modifiable (lhs))
9403 error (_("Left operand of assignment is not a modifiable lvalue."));
9404
9405 lhs_type = check_typedef (value_type (lhs));
9406 if (ada_is_direct_array_type (lhs_type))
9407 {
9408 lhs = ada_coerce_to_simple_array (lhs);
9409 lhs_type = check_typedef (value_type (lhs));
9410 low_index = lhs_type->bounds ()->low.const_val ();
9411 high_index = lhs_type->bounds ()->high.const_val ();
9412 }
9413 else if (lhs_type->code () == TYPE_CODE_STRUCT)
9414 {
9415 low_index = 0;
9416 high_index = num_visible_fields (lhs_type) - 1;
9417 }
9418 else
9419 error (_("Left-hand side must be array or record."));
9420
9421 std::vector<LONGEST> indices (4);
9422 indices[0] = indices[1] = low_index - 1;
9423 indices[2] = indices[3] = high_index + 1;
9424
9425 for (i = 0; i < n; i += 1)
9426 {
9427 switch (exp->elts[*pos].opcode)
9428 {
9429 case OP_CHOICES:
9430 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9431 low_index, high_index);
9432 break;
9433 case OP_POSITIONAL:
9434 aggregate_assign_positional (container, lhs, exp, pos, indices,
9435 low_index, high_index);
9436 break;
9437 case OP_OTHERS:
9438 if (i != n-1)
9439 error (_("Misplaced 'others' clause"));
9440 aggregate_assign_others (container, lhs, exp, pos, indices,
9441 low_index, high_index);
9442 break;
9443 default:
9444 error (_("Internal error: bad aggregate clause"));
9445 }
9446 }
9447
9448 return container;
9449 }
9450
9451 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9452 construct at *POS, updating *POS past the construct, given that
9453 the positions are relative to lower bound LOW, where HIGH is the
9454 upper bound. Record the position in INDICES. CONTAINER is as for
9455 assign_aggregate. */
9456 static void
9457 aggregate_assign_positional (struct value *container,
9458 struct value *lhs, struct expression *exp,
9459 int *pos, std::vector<LONGEST> &indices,
9460 LONGEST low, LONGEST high)
9461 {
9462 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9463
9464 if (ind - 1 == high)
9465 warning (_("Extra components in aggregate ignored."));
9466 if (ind <= high)
9467 {
9468 add_component_interval (ind, ind, indices);
9469 *pos += 3;
9470 assign_component (container, lhs, ind, exp, pos);
9471 }
9472 else
9473 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9474 }
9475
9476 /* Assign into the components of LHS indexed by the OP_CHOICES
9477 construct at *POS, updating *POS past the construct, given that
9478 the allowable indices are LOW..HIGH. Record the indices assigned
9479 to in INDICES. CONTAINER is as for assign_aggregate. */
9480 static void
9481 aggregate_assign_from_choices (struct value *container,
9482 struct value *lhs, struct expression *exp,
9483 int *pos, std::vector<LONGEST> &indices,
9484 LONGEST low, LONGEST high)
9485 {
9486 int j;
9487 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9488 int choice_pos, expr_pc;
9489 int is_array = ada_is_direct_array_type (value_type (lhs));
9490
9491 choice_pos = *pos += 3;
9492
9493 for (j = 0; j < n_choices; j += 1)
9494 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9495 expr_pc = *pos;
9496 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9497
9498 for (j = 0; j < n_choices; j += 1)
9499 {
9500 LONGEST lower, upper;
9501 enum exp_opcode op = exp->elts[choice_pos].opcode;
9502
9503 if (op == OP_DISCRETE_RANGE)
9504 {
9505 choice_pos += 1;
9506 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9507 EVAL_NORMAL));
9508 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9509 EVAL_NORMAL));
9510 }
9511 else if (is_array)
9512 {
9513 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9514 EVAL_NORMAL));
9515 upper = lower;
9516 }
9517 else
9518 {
9519 int ind;
9520 const char *name;
9521
9522 switch (op)
9523 {
9524 case OP_NAME:
9525 name = &exp->elts[choice_pos + 2].string;
9526 break;
9527 case OP_VAR_VALUE:
9528 name = exp->elts[choice_pos + 2].symbol->natural_name ();
9529 break;
9530 default:
9531 error (_("Invalid record component association."));
9532 }
9533 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9534 ind = 0;
9535 if (! find_struct_field (name, value_type (lhs), 0,
9536 NULL, NULL, NULL, NULL, &ind))
9537 error (_("Unknown component name: %s."), name);
9538 lower = upper = ind;
9539 }
9540
9541 if (lower <= upper && (lower < low || upper > high))
9542 error (_("Index in component association out of bounds."));
9543
9544 add_component_interval (lower, upper, indices);
9545 while (lower <= upper)
9546 {
9547 int pos1;
9548
9549 pos1 = expr_pc;
9550 assign_component (container, lhs, lower, exp, &pos1);
9551 lower += 1;
9552 }
9553 }
9554 }
9555
9556 /* Assign the value of the expression in the OP_OTHERS construct in
9557 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9558 have not been previously assigned. The index intervals already assigned
9559 are in INDICES. Updates *POS to after the OP_OTHERS clause.
9560 CONTAINER is as for assign_aggregate. */
9561 static void
9562 aggregate_assign_others (struct value *container,
9563 struct value *lhs, struct expression *exp,
9564 int *pos, std::vector<LONGEST> &indices,
9565 LONGEST low, LONGEST high)
9566 {
9567 int i;
9568 int expr_pc = *pos + 1;
9569
9570 int num_indices = indices.size ();
9571 for (i = 0; i < num_indices - 2; i += 2)
9572 {
9573 LONGEST ind;
9574
9575 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9576 {
9577 int localpos;
9578
9579 localpos = expr_pc;
9580 assign_component (container, lhs, ind, exp, &localpos);
9581 }
9582 }
9583 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9584 }
9585
9586 /* Add the interval [LOW .. HIGH] to the sorted set of intervals
9587 [ INDICES[0] .. INDICES[1] ],... The resulting intervals do not
9588 overlap. */
9589 static void
9590 add_component_interval (LONGEST low, LONGEST high,
9591 std::vector<LONGEST> &indices)
9592 {
9593 int i, j;
9594
9595 int size = indices.size ();
9596 for (i = 0; i < size; i += 2) {
9597 if (high >= indices[i] && low <= indices[i + 1])
9598 {
9599 int kh;
9600
9601 for (kh = i + 2; kh < size; kh += 2)
9602 if (high < indices[kh])
9603 break;
9604 if (low < indices[i])
9605 indices[i] = low;
9606 indices[i + 1] = indices[kh - 1];
9607 if (high > indices[i + 1])
9608 indices[i + 1] = high;
9609 memcpy (indices.data () + i + 2, indices.data () + kh, size - kh);
9610 indices.resize (kh - i - 2);
9611 return;
9612 }
9613 else if (high < indices[i])
9614 break;
9615 }
9616
9617 indices.resize (indices.size () + 2);
9618 for (j = indices.size () - 1; j >= i + 2; j -= 1)
9619 indices[j] = indices[j - 2];
9620 indices[i] = low;
9621 indices[i + 1] = high;
9622 }
9623
9624 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9625 is different. */
9626
9627 static struct value *
9628 ada_value_cast (struct type *type, struct value *arg2)
9629 {
9630 if (type == ada_check_typedef (value_type (arg2)))
9631 return arg2;
9632
9633 return value_cast (type, arg2);
9634 }
9635
9636 /* Evaluating Ada expressions, and printing their result.
9637 ------------------------------------------------------
9638
9639 1. Introduction:
9640 ----------------
9641
9642 We usually evaluate an Ada expression in order to print its value.
9643 We also evaluate an expression in order to print its type, which
9644 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9645 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9646 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9647 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9648 similar.
9649
9650 Evaluating expressions is a little more complicated for Ada entities
9651 than it is for entities in languages such as C. The main reason for
9652 this is that Ada provides types whose definition might be dynamic.
9653 One example of such types is variant records. Or another example
9654 would be an array whose bounds can only be known at run time.
9655
9656 The following description is a general guide as to what should be
9657 done (and what should NOT be done) in order to evaluate an expression
9658 involving such types, and when. This does not cover how the semantic
9659 information is encoded by GNAT as this is covered separatly. For the
9660 document used as the reference for the GNAT encoding, see exp_dbug.ads
9661 in the GNAT sources.
9662
9663 Ideally, we should embed each part of this description next to its
9664 associated code. Unfortunately, the amount of code is so vast right
9665 now that it's hard to see whether the code handling a particular
9666 situation might be duplicated or not. One day, when the code is
9667 cleaned up, this guide might become redundant with the comments
9668 inserted in the code, and we might want to remove it.
9669
9670 2. ``Fixing'' an Entity, the Simple Case:
9671 -----------------------------------------
9672
9673 When evaluating Ada expressions, the tricky issue is that they may
9674 reference entities whose type contents and size are not statically
9675 known. Consider for instance a variant record:
9676
9677 type Rec (Empty : Boolean := True) is record
9678 case Empty is
9679 when True => null;
9680 when False => Value : Integer;
9681 end case;
9682 end record;
9683 Yes : Rec := (Empty => False, Value => 1);
9684 No : Rec := (empty => True);
9685
9686 The size and contents of that record depends on the value of the
9687 descriminant (Rec.Empty). At this point, neither the debugging
9688 information nor the associated type structure in GDB are able to
9689 express such dynamic types. So what the debugger does is to create
9690 "fixed" versions of the type that applies to the specific object.
9691 We also informally refer to this operation as "fixing" an object,
9692 which means creating its associated fixed type.
9693
9694 Example: when printing the value of variable "Yes" above, its fixed
9695 type would look like this:
9696
9697 type Rec is record
9698 Empty : Boolean;
9699 Value : Integer;
9700 end record;
9701
9702 On the other hand, if we printed the value of "No", its fixed type
9703 would become:
9704
9705 type Rec is record
9706 Empty : Boolean;
9707 end record;
9708
9709 Things become a little more complicated when trying to fix an entity
9710 with a dynamic type that directly contains another dynamic type,
9711 such as an array of variant records, for instance. There are
9712 two possible cases: Arrays, and records.
9713
9714 3. ``Fixing'' Arrays:
9715 ---------------------
9716
9717 The type structure in GDB describes an array in terms of its bounds,
9718 and the type of its elements. By design, all elements in the array
9719 have the same type and we cannot represent an array of variant elements
9720 using the current type structure in GDB. When fixing an array,
9721 we cannot fix the array element, as we would potentially need one
9722 fixed type per element of the array. As a result, the best we can do
9723 when fixing an array is to produce an array whose bounds and size
9724 are correct (allowing us to read it from memory), but without having
9725 touched its element type. Fixing each element will be done later,
9726 when (if) necessary.
9727
9728 Arrays are a little simpler to handle than records, because the same
9729 amount of memory is allocated for each element of the array, even if
9730 the amount of space actually used by each element differs from element
9731 to element. Consider for instance the following array of type Rec:
9732
9733 type Rec_Array is array (1 .. 2) of Rec;
9734
9735 The actual amount of memory occupied by each element might be different
9736 from element to element, depending on the value of their discriminant.
9737 But the amount of space reserved for each element in the array remains
9738 fixed regardless. So we simply need to compute that size using
9739 the debugging information available, from which we can then determine
9740 the array size (we multiply the number of elements of the array by
9741 the size of each element).
9742
9743 The simplest case is when we have an array of a constrained element
9744 type. For instance, consider the following type declarations:
9745
9746 type Bounded_String (Max_Size : Integer) is
9747 Length : Integer;
9748 Buffer : String (1 .. Max_Size);
9749 end record;
9750 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9751
9752 In this case, the compiler describes the array as an array of
9753 variable-size elements (identified by its XVS suffix) for which
9754 the size can be read in the parallel XVZ variable.
9755
9756 In the case of an array of an unconstrained element type, the compiler
9757 wraps the array element inside a private PAD type. This type should not
9758 be shown to the user, and must be "unwrap"'ed before printing. Note
9759 that we also use the adjective "aligner" in our code to designate
9760 these wrapper types.
9761
9762 In some cases, the size allocated for each element is statically
9763 known. In that case, the PAD type already has the correct size,
9764 and the array element should remain unfixed.
9765
9766 But there are cases when this size is not statically known.
9767 For instance, assuming that "Five" is an integer variable:
9768
9769 type Dynamic is array (1 .. Five) of Integer;
9770 type Wrapper (Has_Length : Boolean := False) is record
9771 Data : Dynamic;
9772 case Has_Length is
9773 when True => Length : Integer;
9774 when False => null;
9775 end case;
9776 end record;
9777 type Wrapper_Array is array (1 .. 2) of Wrapper;
9778
9779 Hello : Wrapper_Array := (others => (Has_Length => True,
9780 Data => (others => 17),
9781 Length => 1));
9782
9783
9784 The debugging info would describe variable Hello as being an
9785 array of a PAD type. The size of that PAD type is not statically
9786 known, but can be determined using a parallel XVZ variable.
9787 In that case, a copy of the PAD type with the correct size should
9788 be used for the fixed array.
9789
9790 3. ``Fixing'' record type objects:
9791 ----------------------------------
9792
9793 Things are slightly different from arrays in the case of dynamic
9794 record types. In this case, in order to compute the associated
9795 fixed type, we need to determine the size and offset of each of
9796 its components. This, in turn, requires us to compute the fixed
9797 type of each of these components.
9798
9799 Consider for instance the example:
9800
9801 type Bounded_String (Max_Size : Natural) is record
9802 Str : String (1 .. Max_Size);
9803 Length : Natural;
9804 end record;
9805 My_String : Bounded_String (Max_Size => 10);
9806
9807 In that case, the position of field "Length" depends on the size
9808 of field Str, which itself depends on the value of the Max_Size
9809 discriminant. In order to fix the type of variable My_String,
9810 we need to fix the type of field Str. Therefore, fixing a variant
9811 record requires us to fix each of its components.
9812
9813 However, if a component does not have a dynamic size, the component
9814 should not be fixed. In particular, fields that use a PAD type
9815 should not fixed. Here is an example where this might happen
9816 (assuming type Rec above):
9817
9818 type Container (Big : Boolean) is record
9819 First : Rec;
9820 After : Integer;
9821 case Big is
9822 when True => Another : Integer;
9823 when False => null;
9824 end case;
9825 end record;
9826 My_Container : Container := (Big => False,
9827 First => (Empty => True),
9828 After => 42);
9829
9830 In that example, the compiler creates a PAD type for component First,
9831 whose size is constant, and then positions the component After just
9832 right after it. The offset of component After is therefore constant
9833 in this case.
9834
9835 The debugger computes the position of each field based on an algorithm
9836 that uses, among other things, the actual position and size of the field
9837 preceding it. Let's now imagine that the user is trying to print
9838 the value of My_Container. If the type fixing was recursive, we would
9839 end up computing the offset of field After based on the size of the
9840 fixed version of field First. And since in our example First has
9841 only one actual field, the size of the fixed type is actually smaller
9842 than the amount of space allocated to that field, and thus we would
9843 compute the wrong offset of field After.
9844
9845 To make things more complicated, we need to watch out for dynamic
9846 components of variant records (identified by the ___XVL suffix in
9847 the component name). Even if the target type is a PAD type, the size
9848 of that type might not be statically known. So the PAD type needs
9849 to be unwrapped and the resulting type needs to be fixed. Otherwise,
9850 we might end up with the wrong size for our component. This can be
9851 observed with the following type declarations:
9852
9853 type Octal is new Integer range 0 .. 7;
9854 type Octal_Array is array (Positive range <>) of Octal;
9855 pragma Pack (Octal_Array);
9856
9857 type Octal_Buffer (Size : Positive) is record
9858 Buffer : Octal_Array (1 .. Size);
9859 Length : Integer;
9860 end record;
9861
9862 In that case, Buffer is a PAD type whose size is unset and needs
9863 to be computed by fixing the unwrapped type.
9864
9865 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9866 ----------------------------------------------------------
9867
9868 Lastly, when should the sub-elements of an entity that remained unfixed
9869 thus far, be actually fixed?
9870
9871 The answer is: Only when referencing that element. For instance
9872 when selecting one component of a record, this specific component
9873 should be fixed at that point in time. Or when printing the value
9874 of a record, each component should be fixed before its value gets
9875 printed. Similarly for arrays, the element of the array should be
9876 fixed when printing each element of the array, or when extracting
9877 one element out of that array. On the other hand, fixing should
9878 not be performed on the elements when taking a slice of an array!
9879
9880 Note that one of the side effects of miscomputing the offset and
9881 size of each field is that we end up also miscomputing the size
9882 of the containing type. This can have adverse results when computing
9883 the value of an entity. GDB fetches the value of an entity based
9884 on the size of its type, and thus a wrong size causes GDB to fetch
9885 the wrong amount of memory. In the case where the computed size is
9886 too small, GDB fetches too little data to print the value of our
9887 entity. Results in this case are unpredictable, as we usually read
9888 past the buffer containing the data =:-o. */
9889
9890 /* Evaluate a subexpression of EXP, at index *POS, and return a value
9891 for that subexpression cast to TO_TYPE. Advance *POS over the
9892 subexpression. */
9893
9894 static value *
9895 ada_evaluate_subexp_for_cast (expression *exp, int *pos,
9896 enum noside noside, struct type *to_type)
9897 {
9898 int pc = *pos;
9899
9900 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
9901 || exp->elts[pc].opcode == OP_VAR_VALUE)
9902 {
9903 (*pos) += 4;
9904
9905 value *val;
9906 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
9907 {
9908 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9909 return value_zero (to_type, not_lval);
9910
9911 val = evaluate_var_msym_value (noside,
9912 exp->elts[pc + 1].objfile,
9913 exp->elts[pc + 2].msymbol);
9914 }
9915 else
9916 val = evaluate_var_value (noside,
9917 exp->elts[pc + 1].block,
9918 exp->elts[pc + 2].symbol);
9919
9920 if (noside == EVAL_SKIP)
9921 return eval_skip_value (exp);
9922
9923 val = ada_value_cast (to_type, val);
9924
9925 /* Follow the Ada language semantics that do not allow taking
9926 an address of the result of a cast (view conversion in Ada). */
9927 if (VALUE_LVAL (val) == lval_memory)
9928 {
9929 if (value_lazy (val))
9930 value_fetch_lazy (val);
9931 VALUE_LVAL (val) = not_lval;
9932 }
9933 return val;
9934 }
9935
9936 value *val = evaluate_subexp (to_type, exp, pos, noside);
9937 if (noside == EVAL_SKIP)
9938 return eval_skip_value (exp);
9939 return ada_value_cast (to_type, val);
9940 }
9941
9942 /* A helper function for TERNOP_IN_RANGE. */
9943
9944 static value *
9945 eval_ternop_in_range (struct type *expect_type, struct expression *exp,
9946 enum noside noside,
9947 value *arg1, value *arg2, value *arg3)
9948 {
9949 if (noside == EVAL_SKIP)
9950 return eval_skip_value (exp);
9951
9952 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9953 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9954 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
9955 return
9956 value_from_longest (type,
9957 (value_less (arg1, arg3)
9958 || value_equal (arg1, arg3))
9959 && (value_less (arg2, arg1)
9960 || value_equal (arg2, arg1)));
9961 }
9962
9963 /* A helper function for UNOP_NEG. */
9964
9965 static value *
9966 ada_unop_neg (struct type *expect_type,
9967 struct expression *exp,
9968 enum noside noside, enum exp_opcode op,
9969 struct value *arg1)
9970 {
9971 if (noside == EVAL_SKIP)
9972 return eval_skip_value (exp);
9973 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9974 return value_neg (arg1);
9975 }
9976
9977 /* Implement the evaluate_exp routine in the exp_descriptor structure
9978 for the Ada language. */
9979
9980 static struct value *
9981 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
9982 int *pos, enum noside noside)
9983 {
9984 enum exp_opcode op;
9985 int tem;
9986 int pc;
9987 int preeval_pos;
9988 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9989 struct type *type;
9990 int nargs, oplen;
9991 struct value **argvec;
9992
9993 pc = *pos;
9994 *pos += 1;
9995 op = exp->elts[pc].opcode;
9996
9997 switch (op)
9998 {
9999 default:
10000 *pos -= 1;
10001 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10002
10003 if (noside == EVAL_NORMAL)
10004 arg1 = unwrap_value (arg1);
10005
10006 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
10007 then we need to perform the conversion manually, because
10008 evaluate_subexp_standard doesn't do it. This conversion is
10009 necessary in Ada because the different kinds of float/fixed
10010 types in Ada have different representations.
10011
10012 Similarly, we need to perform the conversion from OP_LONG
10013 ourselves. */
10014 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
10015 arg1 = ada_value_cast (expect_type, arg1);
10016
10017 return arg1;
10018
10019 case OP_STRING:
10020 {
10021 struct value *result;
10022
10023 *pos -= 1;
10024 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10025 /* The result type will have code OP_STRING, bashed there from
10026 OP_ARRAY. Bash it back. */
10027 if (value_type (result)->code () == TYPE_CODE_STRING)
10028 value_type (result)->set_code (TYPE_CODE_ARRAY);
10029 return result;
10030 }
10031
10032 case UNOP_CAST:
10033 (*pos) += 2;
10034 type = exp->elts[pc + 1].type;
10035 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
10036
10037 case UNOP_QUAL:
10038 (*pos) += 2;
10039 type = exp->elts[pc + 1].type;
10040 return ada_evaluate_subexp (type, exp, pos, noside);
10041
10042 case BINOP_ASSIGN:
10043 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10044 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10045 {
10046 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10047 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10048 return arg1;
10049 return ada_value_assign (arg1, arg1);
10050 }
10051 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10052 except if the lhs of our assignment is a convenience variable.
10053 In the case of assigning to a convenience variable, the lhs
10054 should be exactly the result of the evaluation of the rhs. */
10055 type = value_type (arg1);
10056 if (VALUE_LVAL (arg1) == lval_internalvar)
10057 type = NULL;
10058 arg2 = evaluate_subexp (type, exp, pos, noside);
10059 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10060 return arg1;
10061 if (VALUE_LVAL (arg1) == lval_internalvar)
10062 {
10063 /* Nothing. */
10064 }
10065 else
10066 arg2 = coerce_for_assign (value_type (arg1), arg2);
10067 return ada_value_assign (arg1, arg2);
10068
10069 case BINOP_ADD:
10070 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10071 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10072 if (noside == EVAL_SKIP)
10073 goto nosideret;
10074 if (value_type (arg1)->code () == TYPE_CODE_PTR)
10075 return (value_from_longest
10076 (value_type (arg1),
10077 value_as_long (arg1) + value_as_long (arg2)));
10078 if (value_type (arg2)->code () == TYPE_CODE_PTR)
10079 return (value_from_longest
10080 (value_type (arg2),
10081 value_as_long (arg1) + value_as_long (arg2)));
10082 /* Preserve the original type for use by the range case below.
10083 We cannot cast the result to a reference type, so if ARG1 is
10084 a reference type, find its underlying type. */
10085 type = value_type (arg1);
10086 while (type->code () == TYPE_CODE_REF)
10087 type = TYPE_TARGET_TYPE (type);
10088 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10089 arg1 = value_binop (arg1, arg2, BINOP_ADD);
10090 /* We need to special-case the result of adding to a range.
10091 This is done for the benefit of "ptype". gdb's Ada support
10092 historically used the LHS to set the result type here, so
10093 preserve this behavior. */
10094 if (type->code () == TYPE_CODE_RANGE)
10095 arg1 = value_cast (type, arg1);
10096 return arg1;
10097
10098 case BINOP_SUB:
10099 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10100 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10101 if (noside == EVAL_SKIP)
10102 goto nosideret;
10103 if (value_type (arg1)->code () == TYPE_CODE_PTR)
10104 return (value_from_longest
10105 (value_type (arg1),
10106 value_as_long (arg1) - value_as_long (arg2)));
10107 if (value_type (arg2)->code () == TYPE_CODE_PTR)
10108 return (value_from_longest
10109 (value_type (arg2),
10110 value_as_long (arg1) - value_as_long (arg2)));
10111 /* Preserve the original type for use by the range case below.
10112 We cannot cast the result to a reference type, so if ARG1 is
10113 a reference type, find its underlying type. */
10114 type = value_type (arg1);
10115 while (type->code () == TYPE_CODE_REF)
10116 type = TYPE_TARGET_TYPE (type);
10117 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10118 arg1 = value_binop (arg1, arg2, BINOP_SUB);
10119 /* We need to special-case the result of adding to a range.
10120 This is done for the benefit of "ptype". gdb's Ada support
10121 historically used the LHS to set the result type here, so
10122 preserve this behavior. */
10123 if (type->code () == TYPE_CODE_RANGE)
10124 arg1 = value_cast (type, arg1);
10125 return arg1;
10126
10127 case BINOP_MUL:
10128 case BINOP_DIV:
10129 case BINOP_REM:
10130 case BINOP_MOD:
10131 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10132 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10133 if (noside == EVAL_SKIP)
10134 goto nosideret;
10135 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10136 {
10137 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10138 return value_zero (value_type (arg1), not_lval);
10139 }
10140 else
10141 {
10142 type = builtin_type (exp->gdbarch)->builtin_double;
10143 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10144 return ada_value_binop (arg1, arg2, op);
10145 }
10146
10147 case BINOP_EQUAL:
10148 case BINOP_NOTEQUAL:
10149 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10150 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10151 if (noside == EVAL_SKIP)
10152 goto nosideret;
10153 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10154 tem = 0;
10155 else
10156 {
10157 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10158 tem = ada_value_equal (arg1, arg2);
10159 }
10160 if (op == BINOP_NOTEQUAL)
10161 tem = !tem;
10162 type = language_bool_type (exp->language_defn, exp->gdbarch);
10163 return value_from_longest (type, (LONGEST) tem);
10164
10165 case UNOP_NEG:
10166 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10167 return ada_unop_neg (expect_type, exp, noside, op, arg1);
10168
10169 case BINOP_LOGICAL_AND:
10170 case BINOP_LOGICAL_OR:
10171 case UNOP_LOGICAL_NOT:
10172 {
10173 struct value *val;
10174
10175 *pos -= 1;
10176 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10177 type = language_bool_type (exp->language_defn, exp->gdbarch);
10178 return value_cast (type, val);
10179 }
10180
10181 case BINOP_BITWISE_AND:
10182 case BINOP_BITWISE_IOR:
10183 case BINOP_BITWISE_XOR:
10184 {
10185 struct value *val;
10186
10187 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10188 *pos = pc;
10189 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10190
10191 return value_cast (value_type (arg1), val);
10192 }
10193
10194 case OP_VAR_VALUE:
10195 *pos -= 1;
10196
10197 if (noside == EVAL_SKIP)
10198 {
10199 *pos += 4;
10200 goto nosideret;
10201 }
10202
10203 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10204 /* Only encountered when an unresolved symbol occurs in a
10205 context other than a function call, in which case, it is
10206 invalid. */
10207 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10208 exp->elts[pc + 2].symbol->print_name ());
10209
10210 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10211 {
10212 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10213 /* Check to see if this is a tagged type. We also need to handle
10214 the case where the type is a reference to a tagged type, but
10215 we have to be careful to exclude pointers to tagged types.
10216 The latter should be shown as usual (as a pointer), whereas
10217 a reference should mostly be transparent to the user. */
10218 if (ada_is_tagged_type (type, 0)
10219 || (type->code () == TYPE_CODE_REF
10220 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10221 {
10222 /* Tagged types are a little special in the fact that the real
10223 type is dynamic and can only be determined by inspecting the
10224 object's tag. This means that we need to get the object's
10225 value first (EVAL_NORMAL) and then extract the actual object
10226 type from its tag.
10227
10228 Note that we cannot skip the final step where we extract
10229 the object type from its tag, because the EVAL_NORMAL phase
10230 results in dynamic components being resolved into fixed ones.
10231 This can cause problems when trying to print the type
10232 description of tagged types whose parent has a dynamic size:
10233 We use the type name of the "_parent" component in order
10234 to print the name of the ancestor type in the type description.
10235 If that component had a dynamic size, the resolution into
10236 a fixed type would result in the loss of that type name,
10237 thus preventing us from printing the name of the ancestor
10238 type in the type description. */
10239 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);
10240
10241 if (type->code () != TYPE_CODE_REF)
10242 {
10243 struct type *actual_type;
10244
10245 actual_type = type_from_tag (ada_value_tag (arg1));
10246 if (actual_type == NULL)
10247 /* If, for some reason, we were unable to determine
10248 the actual type from the tag, then use the static
10249 approximation that we just computed as a fallback.
10250 This can happen if the debugging information is
10251 incomplete, for instance. */
10252 actual_type = type;
10253 return value_zero (actual_type, not_lval);
10254 }
10255 else
10256 {
10257 /* In the case of a ref, ada_coerce_ref takes care
10258 of determining the actual type. But the evaluation
10259 should return a ref as it should be valid to ask
10260 for its address; so rebuild a ref after coerce. */
10261 arg1 = ada_coerce_ref (arg1);
10262 return value_ref (arg1, TYPE_CODE_REF);
10263 }
10264 }
10265
10266 /* Records and unions for which GNAT encodings have been
10267 generated need to be statically fixed as well.
10268 Otherwise, non-static fixing produces a type where
10269 all dynamic properties are removed, which prevents "ptype"
10270 from being able to completely describe the type.
10271 For instance, a case statement in a variant record would be
10272 replaced by the relevant components based on the actual
10273 value of the discriminants. */
10274 if ((type->code () == TYPE_CODE_STRUCT
10275 && dynamic_template_type (type) != NULL)
10276 || (type->code () == TYPE_CODE_UNION
10277 && ada_find_parallel_type (type, "___XVU") != NULL))
10278 {
10279 *pos += 4;
10280 return value_zero (to_static_fixed_type (type), not_lval);
10281 }
10282 }
10283
10284 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10285 return ada_to_fixed_value (arg1);
10286
10287 case OP_FUNCALL:
10288 (*pos) += 2;
10289
10290 /* Allocate arg vector, including space for the function to be
10291 called in argvec[0] and a terminating NULL. */
10292 nargs = longest_to_int (exp->elts[pc + 1].longconst);
10293 argvec = XALLOCAVEC (struct value *, nargs + 2);
10294
10295 if (exp->elts[*pos].opcode == OP_VAR_VALUE
10296 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10297 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10298 exp->elts[pc + 5].symbol->print_name ());
10299 else
10300 {
10301 for (tem = 0; tem <= nargs; tem += 1)
10302 argvec[tem] = evaluate_subexp (nullptr, exp, pos, noside);
10303 argvec[tem] = 0;
10304
10305 if (noside == EVAL_SKIP)
10306 goto nosideret;
10307 }
10308
10309 if (ada_is_constrained_packed_array_type
10310 (desc_base_type (value_type (argvec[0]))))
10311 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10312 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
10313 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10314 /* This is a packed array that has already been fixed, and
10315 therefore already coerced to a simple array. Nothing further
10316 to do. */
10317 ;
10318 else if (value_type (argvec[0])->code () == TYPE_CODE_REF)
10319 {
10320 /* Make sure we dereference references so that all the code below
10321 feels like it's really handling the referenced value. Wrapping
10322 types (for alignment) may be there, so make sure we strip them as
10323 well. */
10324 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10325 }
10326 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
10327 && VALUE_LVAL (argvec[0]) == lval_memory)
10328 argvec[0] = value_addr (argvec[0]);
10329
10330 type = ada_check_typedef (value_type (argvec[0]));
10331
10332 /* Ada allows us to implicitly dereference arrays when subscripting
10333 them. So, if this is an array typedef (encoding use for array
10334 access types encoded as fat pointers), strip it now. */
10335 if (type->code () == TYPE_CODE_TYPEDEF)
10336 type = ada_typedef_target_type (type);
10337
10338 if (type->code () == TYPE_CODE_PTR)
10339 {
10340 switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
10341 {
10342 case TYPE_CODE_FUNC:
10343 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10344 break;
10345 case TYPE_CODE_ARRAY:
10346 break;
10347 case TYPE_CODE_STRUCT:
10348 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10349 argvec[0] = ada_value_ind (argvec[0]);
10350 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10351 break;
10352 default:
10353 error (_("cannot subscript or call something of type `%s'"),
10354 ada_type_name (value_type (argvec[0])));
10355 break;
10356 }
10357 }
10358
10359 switch (type->code ())
10360 {
10361 case TYPE_CODE_FUNC:
10362 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10363 {
10364 if (TYPE_TARGET_TYPE (type) == NULL)
10365 error_call_unknown_return_type (NULL);
10366 return allocate_value (TYPE_TARGET_TYPE (type));
10367 }
10368 return call_function_by_hand (argvec[0], NULL,
10369 gdb::make_array_view (argvec + 1,
10370 nargs));
10371 case TYPE_CODE_INTERNAL_FUNCTION:
10372 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10373 /* We don't know anything about what the internal
10374 function might return, but we have to return
10375 something. */
10376 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10377 not_lval);
10378 else
10379 return call_internal_function (exp->gdbarch, exp->language_defn,
10380 argvec[0], nargs, argvec + 1);
10381
10382 case TYPE_CODE_STRUCT:
10383 {
10384 int arity;
10385
10386 arity = ada_array_arity (type);
10387 type = ada_array_element_type (type, nargs);
10388 if (type == NULL)
10389 error (_("cannot subscript or call a record"));
10390 if (arity != nargs)
10391 error (_("wrong number of subscripts; expecting %d"), arity);
10392 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10393 return value_zero (ada_aligned_type (type), lval_memory);
10394 return
10395 unwrap_value (ada_value_subscript
10396 (argvec[0], nargs, argvec + 1));
10397 }
10398 case TYPE_CODE_ARRAY:
10399 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10400 {
10401 type = ada_array_element_type (type, nargs);
10402 if (type == NULL)
10403 error (_("element type of array unknown"));
10404 else
10405 return value_zero (ada_aligned_type (type), lval_memory);
10406 }
10407 return
10408 unwrap_value (ada_value_subscript
10409 (ada_coerce_to_simple_array (argvec[0]),
10410 nargs, argvec + 1));
10411 case TYPE_CODE_PTR: /* Pointer to array */
10412 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10413 {
10414 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10415 type = ada_array_element_type (type, nargs);
10416 if (type == NULL)
10417 error (_("element type of array unknown"));
10418 else
10419 return value_zero (ada_aligned_type (type), lval_memory);
10420 }
10421 return
10422 unwrap_value (ada_value_ptr_subscript (argvec[0],
10423 nargs, argvec + 1));
10424
10425 default:
10426 error (_("Attempt to index or call something other than an "
10427 "array or function"));
10428 }
10429
10430 case TERNOP_SLICE:
10431 {
10432 struct value *array = evaluate_subexp (nullptr, exp, pos, noside);
10433 struct value *low_bound_val
10434 = evaluate_subexp (nullptr, exp, pos, noside);
10435 struct value *high_bound_val
10436 = evaluate_subexp (nullptr, exp, pos, noside);
10437 LONGEST low_bound;
10438 LONGEST high_bound;
10439
10440 low_bound_val = coerce_ref (low_bound_val);
10441 high_bound_val = coerce_ref (high_bound_val);
10442 low_bound = value_as_long (low_bound_val);
10443 high_bound = value_as_long (high_bound_val);
10444
10445 if (noside == EVAL_SKIP)
10446 goto nosideret;
10447
10448 /* If this is a reference to an aligner type, then remove all
10449 the aligners. */
10450 if (value_type (array)->code () == TYPE_CODE_REF
10451 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10452 TYPE_TARGET_TYPE (value_type (array)) =
10453 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10454
10455 if (ada_is_any_packed_array_type (value_type (array)))
10456 error (_("cannot slice a packed array"));
10457
10458 /* If this is a reference to an array or an array lvalue,
10459 convert to a pointer. */
10460 if (value_type (array)->code () == TYPE_CODE_REF
10461 || (value_type (array)->code () == TYPE_CODE_ARRAY
10462 && VALUE_LVAL (array) == lval_memory))
10463 array = value_addr (array);
10464
10465 if (noside == EVAL_AVOID_SIDE_EFFECTS
10466 && ada_is_array_descriptor_type (ada_check_typedef
10467 (value_type (array))))
10468 return empty_array (ada_type_of_array (array, 0), low_bound,
10469 high_bound);
10470
10471 array = ada_coerce_to_simple_array_ptr (array);
10472
10473 /* If we have more than one level of pointer indirection,
10474 dereference the value until we get only one level. */
10475 while (value_type (array)->code () == TYPE_CODE_PTR
10476 && (TYPE_TARGET_TYPE (value_type (array))->code ()
10477 == TYPE_CODE_PTR))
10478 array = value_ind (array);
10479
10480 /* Make sure we really do have an array type before going further,
10481 to avoid a SEGV when trying to get the index type or the target
10482 type later down the road if the debug info generated by
10483 the compiler is incorrect or incomplete. */
10484 if (!ada_is_simple_array_type (value_type (array)))
10485 error (_("cannot take slice of non-array"));
10486
10487 if (ada_check_typedef (value_type (array))->code ()
10488 == TYPE_CODE_PTR)
10489 {
10490 struct type *type0 = ada_check_typedef (value_type (array));
10491
10492 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10493 return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
10494 else
10495 {
10496 struct type *arr_type0 =
10497 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10498
10499 return ada_value_slice_from_ptr (array, arr_type0,
10500 longest_to_int (low_bound),
10501 longest_to_int (high_bound));
10502 }
10503 }
10504 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10505 return array;
10506 else if (high_bound < low_bound)
10507 return empty_array (value_type (array), low_bound, high_bound);
10508 else
10509 return ada_value_slice (array, longest_to_int (low_bound),
10510 longest_to_int (high_bound));
10511 }
10512
10513 case UNOP_IN_RANGE:
10514 (*pos) += 2;
10515 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10516 type = check_typedef (exp->elts[pc + 1].type);
10517
10518 if (noside == EVAL_SKIP)
10519 goto nosideret;
10520
10521 switch (type->code ())
10522 {
10523 default:
10524 lim_warning (_("Membership test incompletely implemented; "
10525 "always returns true"));
10526 type = language_bool_type (exp->language_defn, exp->gdbarch);
10527 return value_from_longest (type, (LONGEST) 1);
10528
10529 case TYPE_CODE_RANGE:
10530 arg2 = value_from_longest (type,
10531 type->bounds ()->low.const_val ());
10532 arg3 = value_from_longest (type,
10533 type->bounds ()->high.const_val ());
10534 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10535 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10536 type = language_bool_type (exp->language_defn, exp->gdbarch);
10537 return
10538 value_from_longest (type,
10539 (value_less (arg1, arg3)
10540 || value_equal (arg1, arg3))
10541 && (value_less (arg2, arg1)
10542 || value_equal (arg2, arg1)));
10543 }
10544
10545 case BINOP_IN_BOUNDS:
10546 (*pos) += 2;
10547 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10548 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10549
10550 if (noside == EVAL_SKIP)
10551 goto nosideret;
10552
10553 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10554 {
10555 type = language_bool_type (exp->language_defn, exp->gdbarch);
10556 return value_zero (type, not_lval);
10557 }
10558
10559 tem = longest_to_int (exp->elts[pc + 1].longconst);
10560
10561 type = ada_index_type (value_type (arg2), tem, "range");
10562 if (!type)
10563 type = value_type (arg1);
10564
10565 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10566 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10567
10568 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10569 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10570 type = language_bool_type (exp->language_defn, exp->gdbarch);
10571 return
10572 value_from_longest (type,
10573 (value_less (arg1, arg3)
10574 || value_equal (arg1, arg3))
10575 && (value_less (arg2, arg1)
10576 || value_equal (arg2, arg1)));
10577
10578 case TERNOP_IN_RANGE:
10579 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10580 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10581 arg3 = evaluate_subexp (nullptr, exp, pos, noside);
10582
10583 return eval_ternop_in_range (expect_type, exp, noside, arg1, arg2, arg3);
10584
10585 case OP_ATR_FIRST:
10586 case OP_ATR_LAST:
10587 case OP_ATR_LENGTH:
10588 {
10589 struct type *type_arg;
10590
10591 if (exp->elts[*pos].opcode == OP_TYPE)
10592 {
10593 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10594 arg1 = NULL;
10595 type_arg = check_typedef (exp->elts[pc + 2].type);
10596 }
10597 else
10598 {
10599 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10600 type_arg = NULL;
10601 }
10602
10603 if (exp->elts[*pos].opcode != OP_LONG)
10604 error (_("Invalid operand to '%s"), ada_attribute_name (op));
10605 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10606 *pos += 4;
10607
10608 if (noside == EVAL_SKIP)
10609 goto nosideret;
10610 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10611 {
10612 if (type_arg == NULL)
10613 type_arg = value_type (arg1);
10614
10615 if (ada_is_constrained_packed_array_type (type_arg))
10616 type_arg = decode_constrained_packed_array_type (type_arg);
10617
10618 if (!discrete_type_p (type_arg))
10619 {
10620 switch (op)
10621 {
10622 default: /* Should never happen. */
10623 error (_("unexpected attribute encountered"));
10624 case OP_ATR_FIRST:
10625 case OP_ATR_LAST:
10626 type_arg = ada_index_type (type_arg, tem,
10627 ada_attribute_name (op));
10628 break;
10629 case OP_ATR_LENGTH:
10630 type_arg = builtin_type (exp->gdbarch)->builtin_int;
10631 break;
10632 }
10633 }
10634
10635 return value_zero (type_arg, not_lval);
10636 }
10637 else if (type_arg == NULL)
10638 {
10639 arg1 = ada_coerce_ref (arg1);
10640
10641 if (ada_is_constrained_packed_array_type (value_type (arg1)))
10642 arg1 = ada_coerce_to_simple_array (arg1);
10643
10644 if (op == OP_ATR_LENGTH)
10645 type = builtin_type (exp->gdbarch)->builtin_int;
10646 else
10647 {
10648 type = ada_index_type (value_type (arg1), tem,
10649 ada_attribute_name (op));
10650 if (type == NULL)
10651 type = builtin_type (exp->gdbarch)->builtin_int;
10652 }
10653
10654 switch (op)
10655 {
10656 default: /* Should never happen. */
10657 error (_("unexpected attribute encountered"));
10658 case OP_ATR_FIRST:
10659 return value_from_longest
10660 (type, ada_array_bound (arg1, tem, 0));
10661 case OP_ATR_LAST:
10662 return value_from_longest
10663 (type, ada_array_bound (arg1, tem, 1));
10664 case OP_ATR_LENGTH:
10665 return value_from_longest
10666 (type, ada_array_length (arg1, tem));
10667 }
10668 }
10669 else if (discrete_type_p (type_arg))
10670 {
10671 struct type *range_type;
10672 const char *name = ada_type_name (type_arg);
10673
10674 range_type = NULL;
10675 if (name != NULL && type_arg->code () != TYPE_CODE_ENUM)
10676 range_type = to_fixed_range_type (type_arg, NULL);
10677 if (range_type == NULL)
10678 range_type = type_arg;
10679 switch (op)
10680 {
10681 default:
10682 error (_("unexpected attribute encountered"));
10683 case OP_ATR_FIRST:
10684 return value_from_longest
10685 (range_type, ada_discrete_type_low_bound (range_type));
10686 case OP_ATR_LAST:
10687 return value_from_longest
10688 (range_type, ada_discrete_type_high_bound (range_type));
10689 case OP_ATR_LENGTH:
10690 error (_("the 'length attribute applies only to array types"));
10691 }
10692 }
10693 else if (type_arg->code () == TYPE_CODE_FLT)
10694 error (_("unimplemented type attribute"));
10695 else
10696 {
10697 LONGEST low, high;
10698
10699 if (ada_is_constrained_packed_array_type (type_arg))
10700 type_arg = decode_constrained_packed_array_type (type_arg);
10701
10702 if (op == OP_ATR_LENGTH)
10703 type = builtin_type (exp->gdbarch)->builtin_int;
10704 else
10705 {
10706 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10707 if (type == NULL)
10708 type = builtin_type (exp->gdbarch)->builtin_int;
10709 }
10710
10711 switch (op)
10712 {
10713 default:
10714 error (_("unexpected attribute encountered"));
10715 case OP_ATR_FIRST:
10716 low = ada_array_bound_from_type (type_arg, tem, 0);
10717 return value_from_longest (type, low);
10718 case OP_ATR_LAST:
10719 high = ada_array_bound_from_type (type_arg, tem, 1);
10720 return value_from_longest (type, high);
10721 case OP_ATR_LENGTH:
10722 low = ada_array_bound_from_type (type_arg, tem, 0);
10723 high = ada_array_bound_from_type (type_arg, tem, 1);
10724 return value_from_longest (type, high - low + 1);
10725 }
10726 }
10727 }
10728
10729 case OP_ATR_TAG:
10730 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10731 if (noside == EVAL_SKIP)
10732 goto nosideret;
10733
10734 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10735 return value_zero (ada_tag_type (arg1), not_lval);
10736
10737 return ada_value_tag (arg1);
10738
10739 case OP_ATR_MIN:
10740 case OP_ATR_MAX:
10741 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10742 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10743 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10744 if (noside == EVAL_SKIP)
10745 goto nosideret;
10746 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10747 return value_zero (value_type (arg1), not_lval);
10748 else
10749 {
10750 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10751 return value_binop (arg1, arg2,
10752 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10753 }
10754
10755 case OP_ATR_MODULUS:
10756 {
10757 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10758
10759 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10760 if (noside == EVAL_SKIP)
10761 goto nosideret;
10762
10763 if (!ada_is_modular_type (type_arg))
10764 error (_("'modulus must be applied to modular type"));
10765
10766 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10767 ada_modulus (type_arg));
10768 }
10769
10770
10771 case OP_ATR_POS:
10772 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10773 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10774 if (noside == EVAL_SKIP)
10775 goto nosideret;
10776 type = builtin_type (exp->gdbarch)->builtin_int;
10777 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10778 return value_zero (type, not_lval);
10779 else
10780 return value_pos_atr (type, arg1);
10781
10782 case OP_ATR_SIZE:
10783 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10784 type = value_type (arg1);
10785
10786 /* If the argument is a reference, then dereference its type, since
10787 the user is really asking for the size of the actual object,
10788 not the size of the pointer. */
10789 if (type->code () == TYPE_CODE_REF)
10790 type = TYPE_TARGET_TYPE (type);
10791
10792 if (noside == EVAL_SKIP)
10793 goto nosideret;
10794 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10795 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10796 else
10797 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10798 TARGET_CHAR_BIT * TYPE_LENGTH (type));
10799
10800 case OP_ATR_VAL:
10801 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10802 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10803 type = exp->elts[pc + 2].type;
10804 if (noside == EVAL_SKIP)
10805 goto nosideret;
10806 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10807 return value_zero (type, not_lval);
10808 else
10809 return value_val_atr (type, arg1);
10810
10811 case BINOP_EXP:
10812 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10813 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10814 if (noside == EVAL_SKIP)
10815 goto nosideret;
10816 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10817 return value_zero (value_type (arg1), not_lval);
10818 else
10819 {
10820 /* For integer exponentiation operations,
10821 only promote the first argument. */
10822 if (is_integral_type (value_type (arg2)))
10823 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10824 else
10825 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10826
10827 return value_binop (arg1, arg2, op);
10828 }
10829
10830 case UNOP_PLUS:
10831 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10832 if (noside == EVAL_SKIP)
10833 goto nosideret;
10834 else
10835 return arg1;
10836
10837 case UNOP_ABS:
10838 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10839 if (noside == EVAL_SKIP)
10840 goto nosideret;
10841 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10842 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10843 return value_neg (arg1);
10844 else
10845 return arg1;
10846
10847 case UNOP_IND:
10848 preeval_pos = *pos;
10849 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10850 if (noside == EVAL_SKIP)
10851 goto nosideret;
10852 type = ada_check_typedef (value_type (arg1));
10853 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10854 {
10855 if (ada_is_array_descriptor_type (type))
10856 /* GDB allows dereferencing GNAT array descriptors. */
10857 {
10858 struct type *arrType = ada_type_of_array (arg1, 0);
10859
10860 if (arrType == NULL)
10861 error (_("Attempt to dereference null array pointer."));
10862 return value_at_lazy (arrType, 0);
10863 }
10864 else if (type->code () == TYPE_CODE_PTR
10865 || type->code () == TYPE_CODE_REF
10866 /* In C you can dereference an array to get the 1st elt. */
10867 || type->code () == TYPE_CODE_ARRAY)
10868 {
10869 /* As mentioned in the OP_VAR_VALUE case, tagged types can
10870 only be determined by inspecting the object's tag.
10871 This means that we need to evaluate completely the
10872 expression in order to get its type. */
10873
10874 if ((type->code () == TYPE_CODE_REF
10875 || type->code () == TYPE_CODE_PTR)
10876 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10877 {
10878 arg1
10879 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
10880 type = value_type (ada_value_ind (arg1));
10881 }
10882 else
10883 {
10884 type = to_static_fixed_type
10885 (ada_aligned_type
10886 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10887 }
10888 ada_ensure_varsize_limit (type);
10889 return value_zero (type, lval_memory);
10890 }
10891 else if (type->code () == TYPE_CODE_INT)
10892 {
10893 /* GDB allows dereferencing an int. */
10894 if (expect_type == NULL)
10895 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10896 lval_memory);
10897 else
10898 {
10899 expect_type =
10900 to_static_fixed_type (ada_aligned_type (expect_type));
10901 return value_zero (expect_type, lval_memory);
10902 }
10903 }
10904 else
10905 error (_("Attempt to take contents of a non-pointer value."));
10906 }
10907 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
10908 type = ada_check_typedef (value_type (arg1));
10909
10910 if (type->code () == TYPE_CODE_INT)
10911 /* GDB allows dereferencing an int. If we were given
10912 the expect_type, then use that as the target type.
10913 Otherwise, assume that the target type is an int. */
10914 {
10915 if (expect_type != NULL)
10916 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10917 arg1));
10918 else
10919 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10920 (CORE_ADDR) value_as_address (arg1));
10921 }
10922
10923 if (ada_is_array_descriptor_type (type))
10924 /* GDB allows dereferencing GNAT array descriptors. */
10925 return ada_coerce_to_simple_array (arg1);
10926 else
10927 return ada_value_ind (arg1);
10928
10929 case STRUCTOP_STRUCT:
10930 tem = longest_to_int (exp->elts[pc + 1].longconst);
10931 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10932 preeval_pos = *pos;
10933 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10934 if (noside == EVAL_SKIP)
10935 goto nosideret;
10936 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10937 {
10938 struct type *type1 = value_type (arg1);
10939
10940 if (ada_is_tagged_type (type1, 1))
10941 {
10942 type = ada_lookup_struct_elt_type (type1,
10943 &exp->elts[pc + 2].string,
10944 1, 1);
10945
10946 /* If the field is not found, check if it exists in the
10947 extension of this object's type. This means that we
10948 need to evaluate completely the expression. */
10949
10950 if (type == NULL)
10951 {
10952 arg1
10953 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
10954 arg1 = ada_value_struct_elt (arg1,
10955 &exp->elts[pc + 2].string,
10956 0);
10957 arg1 = unwrap_value (arg1);
10958 type = value_type (ada_to_fixed_value (arg1));
10959 }
10960 }
10961 else
10962 type =
10963 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10964 0);
10965
10966 return value_zero (ada_aligned_type (type), lval_memory);
10967 }
10968 else
10969 {
10970 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10971 arg1 = unwrap_value (arg1);
10972 return ada_to_fixed_value (arg1);
10973 }
10974
10975 case OP_TYPE:
10976 /* The value is not supposed to be used. This is here to make it
10977 easier to accommodate expressions that contain types. */
10978 (*pos) += 2;
10979 if (noside == EVAL_SKIP)
10980 goto nosideret;
10981 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10982 return allocate_value (exp->elts[pc + 1].type);
10983 else
10984 error (_("Attempt to use a type name as an expression"));
10985
10986 case OP_AGGREGATE:
10987 case OP_CHOICES:
10988 case OP_OTHERS:
10989 case OP_DISCRETE_RANGE:
10990 case OP_POSITIONAL:
10991 case OP_NAME:
10992 if (noside == EVAL_NORMAL)
10993 switch (op)
10994 {
10995 case OP_NAME:
10996 error (_("Undefined name, ambiguous name, or renaming used in "
10997 "component association: %s."), &exp->elts[pc+2].string);
10998 case OP_AGGREGATE:
10999 error (_("Aggregates only allowed on the right of an assignment"));
11000 default:
11001 internal_error (__FILE__, __LINE__,
11002 _("aggregate apparently mangled"));
11003 }
11004
11005 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11006 *pos += oplen - 1;
11007 for (tem = 0; tem < nargs; tem += 1)
11008 ada_evaluate_subexp (NULL, exp, pos, noside);
11009 goto nosideret;
11010 }
11011
11012 nosideret:
11013 return eval_skip_value (exp);
11014 }
11015 \f
11016
11017 /* Return non-zero iff TYPE represents a System.Address type. */
11018
11019 int
11020 ada_is_system_address_type (struct type *type)
11021 {
11022 return (type->name () && strcmp (type->name (), "system__address") == 0);
11023 }
11024
11025 \f
11026
11027 /* Range types */
11028
11029 /* Scan STR beginning at position K for a discriminant name, and
11030 return the value of that discriminant field of DVAL in *PX. If
11031 PNEW_K is not null, put the position of the character beyond the
11032 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
11033 not alter *PX and *PNEW_K if unsuccessful. */
11034
11035 static int
11036 scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
11037 int *pnew_k)
11038 {
11039 static std::string storage;
11040 const char *pstart, *pend, *bound;
11041 struct value *bound_val;
11042
11043 if (dval == NULL || str == NULL || str[k] == '\0')
11044 return 0;
11045
11046 pstart = str + k;
11047 pend = strstr (pstart, "__");
11048 if (pend == NULL)
11049 {
11050 bound = pstart;
11051 k += strlen (bound);
11052 }
11053 else
11054 {
11055 int len = pend - pstart;
11056
11057 /* Strip __ and beyond. */
11058 storage = std::string (pstart, len);
11059 bound = storage.c_str ();
11060 k = pend - str;
11061 }
11062
11063 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11064 if (bound_val == NULL)
11065 return 0;
11066
11067 *px = value_as_long (bound_val);
11068 if (pnew_k != NULL)
11069 *pnew_k = k;
11070 return 1;
11071 }
11072
11073 /* Value of variable named NAME. Only exact matches are considered.
11074 If no such variable found, then if ERR_MSG is null, returns 0, and
11075 otherwise causes an error with message ERR_MSG. */
11076
11077 static struct value *
11078 get_var_value (const char *name, const char *err_msg)
11079 {
11080 std::string quoted_name = add_angle_brackets (name);
11081
11082 lookup_name_info lookup_name (quoted_name, symbol_name_match_type::FULL);
11083
11084 std::vector<struct block_symbol> syms
11085 = ada_lookup_symbol_list_worker (lookup_name,
11086 get_selected_block (0),
11087 VAR_DOMAIN, 1);
11088
11089 if (syms.size () != 1)
11090 {
11091 if (err_msg == NULL)
11092 return 0;
11093 else
11094 error (("%s"), err_msg);
11095 }
11096
11097 return value_of_variable (syms[0].symbol, syms[0].block);
11098 }
11099
11100 /* Value of integer variable named NAME in the current environment.
11101 If no such variable is found, returns false. Otherwise, sets VALUE
11102 to the variable's value and returns true. */
11103
11104 bool
11105 get_int_var_value (const char *name, LONGEST &value)
11106 {
11107 struct value *var_val = get_var_value (name, 0);
11108
11109 if (var_val == 0)
11110 return false;
11111
11112 value = value_as_long (var_val);
11113 return true;
11114 }
11115
11116
11117 /* Return a range type whose base type is that of the range type named
11118 NAME in the current environment, and whose bounds are calculated
11119 from NAME according to the GNAT range encoding conventions.
11120 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11121 corresponding range type from debug information; fall back to using it
11122 if symbol lookup fails. If a new type must be created, allocate it
11123 like ORIG_TYPE was. The bounds information, in general, is encoded
11124 in NAME, the base type given in the named range type. */
11125
11126 static struct type *
11127 to_fixed_range_type (struct type *raw_type, struct value *dval)
11128 {
11129 const char *name;
11130 struct type *base_type;
11131 const char *subtype_info;
11132
11133 gdb_assert (raw_type != NULL);
11134 gdb_assert (raw_type->name () != NULL);
11135
11136 if (raw_type->code () == TYPE_CODE_RANGE)
11137 base_type = TYPE_TARGET_TYPE (raw_type);
11138 else
11139 base_type = raw_type;
11140
11141 name = raw_type->name ();
11142 subtype_info = strstr (name, "___XD");
11143 if (subtype_info == NULL)
11144 {
11145 LONGEST L = ada_discrete_type_low_bound (raw_type);
11146 LONGEST U = ada_discrete_type_high_bound (raw_type);
11147
11148 if (L < INT_MIN || U > INT_MAX)
11149 return raw_type;
11150 else
11151 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11152 L, U);
11153 }
11154 else
11155 {
11156 int prefix_len = subtype_info - name;
11157 LONGEST L, U;
11158 struct type *type;
11159 const char *bounds_str;
11160 int n;
11161
11162 subtype_info += 5;
11163 bounds_str = strchr (subtype_info, '_');
11164 n = 1;
11165
11166 if (*subtype_info == 'L')
11167 {
11168 if (!ada_scan_number (bounds_str, n, &L, &n)
11169 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11170 return raw_type;
11171 if (bounds_str[n] == '_')
11172 n += 2;
11173 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
11174 n += 1;
11175 subtype_info += 1;
11176 }
11177 else
11178 {
11179 std::string name_buf = std::string (name, prefix_len) + "___L";
11180 if (!get_int_var_value (name_buf.c_str (), L))
11181 {
11182 lim_warning (_("Unknown lower bound, using 1."));
11183 L = 1;
11184 }
11185 }
11186
11187 if (*subtype_info == 'U')
11188 {
11189 if (!ada_scan_number (bounds_str, n, &U, &n)
11190 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11191 return raw_type;
11192 }
11193 else
11194 {
11195 std::string name_buf = std::string (name, prefix_len) + "___U";
11196 if (!get_int_var_value (name_buf.c_str (), U))
11197 {
11198 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11199 U = L;
11200 }
11201 }
11202
11203 type = create_static_range_type (alloc_type_copy (raw_type),
11204 base_type, L, U);
11205 /* create_static_range_type alters the resulting type's length
11206 to match the size of the base_type, which is not what we want.
11207 Set it back to the original range type's length. */
11208 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
11209 type->set_name (name);
11210 return type;
11211 }
11212 }
11213
11214 /* True iff NAME is the name of a range type. */
11215
11216 int
11217 ada_is_range_type_name (const char *name)
11218 {
11219 return (name != NULL && strstr (name, "___XD"));
11220 }
11221 \f
11222
11223 /* Modular types */
11224
11225 /* True iff TYPE is an Ada modular type. */
11226
11227 int
11228 ada_is_modular_type (struct type *type)
11229 {
11230 struct type *subranged_type = get_base_type (type);
11231
11232 return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
11233 && subranged_type->code () == TYPE_CODE_INT
11234 && subranged_type->is_unsigned ());
11235 }
11236
11237 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11238
11239 ULONGEST
11240 ada_modulus (struct type *type)
11241 {
11242 const dynamic_prop &high = type->bounds ()->high;
11243
11244 if (high.kind () == PROP_CONST)
11245 return (ULONGEST) high.const_val () + 1;
11246
11247 /* If TYPE is unresolved, the high bound might be a location list. Return
11248 0, for lack of a better value to return. */
11249 return 0;
11250 }
11251 \f
11252
11253 /* Ada exception catchpoint support:
11254 ---------------------------------
11255
11256 We support 3 kinds of exception catchpoints:
11257 . catchpoints on Ada exceptions
11258 . catchpoints on unhandled Ada exceptions
11259 . catchpoints on failed assertions
11260
11261 Exceptions raised during failed assertions, or unhandled exceptions
11262 could perfectly be caught with the general catchpoint on Ada exceptions.
11263 However, we can easily differentiate these two special cases, and having
11264 the option to distinguish these two cases from the rest can be useful
11265 to zero-in on certain situations.
11266
11267 Exception catchpoints are a specialized form of breakpoint,
11268 since they rely on inserting breakpoints inside known routines
11269 of the GNAT runtime. The implementation therefore uses a standard
11270 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11271 of breakpoint_ops.
11272
11273 Support in the runtime for exception catchpoints have been changed
11274 a few times already, and these changes affect the implementation
11275 of these catchpoints. In order to be able to support several
11276 variants of the runtime, we use a sniffer that will determine
11277 the runtime variant used by the program being debugged. */
11278
11279 /* Ada's standard exceptions.
11280
11281 The Ada 83 standard also defined Numeric_Error. But there so many
11282 situations where it was unclear from the Ada 83 Reference Manual
11283 (RM) whether Constraint_Error or Numeric_Error should be raised,
11284 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11285 Interpretation saying that anytime the RM says that Numeric_Error
11286 should be raised, the implementation may raise Constraint_Error.
11287 Ada 95 went one step further and pretty much removed Numeric_Error
11288 from the list of standard exceptions (it made it a renaming of
11289 Constraint_Error, to help preserve compatibility when compiling
11290 an Ada83 compiler). As such, we do not include Numeric_Error from
11291 this list of standard exceptions. */
11292
11293 static const char * const standard_exc[] = {
11294 "constraint_error",
11295 "program_error",
11296 "storage_error",
11297 "tasking_error"
11298 };
11299
11300 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11301
11302 /* A structure that describes how to support exception catchpoints
11303 for a given executable. */
11304
11305 struct exception_support_info
11306 {
11307 /* The name of the symbol to break on in order to insert
11308 a catchpoint on exceptions. */
11309 const char *catch_exception_sym;
11310
11311 /* The name of the symbol to break on in order to insert
11312 a catchpoint on unhandled exceptions. */
11313 const char *catch_exception_unhandled_sym;
11314
11315 /* The name of the symbol to break on in order to insert
11316 a catchpoint on failed assertions. */
11317 const char *catch_assert_sym;
11318
11319 /* The name of the symbol to break on in order to insert
11320 a catchpoint on exception handling. */
11321 const char *catch_handlers_sym;
11322
11323 /* Assuming that the inferior just triggered an unhandled exception
11324 catchpoint, this function is responsible for returning the address
11325 in inferior memory where the name of that exception is stored.
11326 Return zero if the address could not be computed. */
11327 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11328 };
11329
11330 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11331 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11332
11333 /* The following exception support info structure describes how to
11334 implement exception catchpoints with the latest version of the
11335 Ada runtime (as of 2019-08-??). */
11336
11337 static const struct exception_support_info default_exception_support_info =
11338 {
11339 "__gnat_debug_raise_exception", /* catch_exception_sym */
11340 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11341 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11342 "__gnat_begin_handler_v1", /* catch_handlers_sym */
11343 ada_unhandled_exception_name_addr
11344 };
11345
11346 /* The following exception support info structure describes how to
11347 implement exception catchpoints with an earlier version of the
11348 Ada runtime (as of 2007-03-06) using v0 of the EH ABI. */
11349
11350 static const struct exception_support_info exception_support_info_v0 =
11351 {
11352 "__gnat_debug_raise_exception", /* catch_exception_sym */
11353 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11354 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11355 "__gnat_begin_handler", /* catch_handlers_sym */
11356 ada_unhandled_exception_name_addr
11357 };
11358
11359 /* The following exception support info structure describes how to
11360 implement exception catchpoints with a slightly older version
11361 of the Ada runtime. */
11362
11363 static const struct exception_support_info exception_support_info_fallback =
11364 {
11365 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11366 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11367 "system__assertions__raise_assert_failure", /* catch_assert_sym */
11368 "__gnat_begin_handler", /* catch_handlers_sym */
11369 ada_unhandled_exception_name_addr_from_raise
11370 };
11371
11372 /* Return nonzero if we can detect the exception support routines
11373 described in EINFO.
11374
11375 This function errors out if an abnormal situation is detected
11376 (for instance, if we find the exception support routines, but
11377 that support is found to be incomplete). */
11378
11379 static int
11380 ada_has_this_exception_support (const struct exception_support_info *einfo)
11381 {
11382 struct symbol *sym;
11383
11384 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11385 that should be compiled with debugging information. As a result, we
11386 expect to find that symbol in the symtabs. */
11387
11388 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11389 if (sym == NULL)
11390 {
11391 /* Perhaps we did not find our symbol because the Ada runtime was
11392 compiled without debugging info, or simply stripped of it.
11393 It happens on some GNU/Linux distributions for instance, where
11394 users have to install a separate debug package in order to get
11395 the runtime's debugging info. In that situation, let the user
11396 know why we cannot insert an Ada exception catchpoint.
11397
11398 Note: Just for the purpose of inserting our Ada exception
11399 catchpoint, we could rely purely on the associated minimal symbol.
11400 But we would be operating in degraded mode anyway, since we are
11401 still lacking the debugging info needed later on to extract
11402 the name of the exception being raised (this name is printed in
11403 the catchpoint message, and is also used when trying to catch
11404 a specific exception). We do not handle this case for now. */
11405 struct bound_minimal_symbol msym
11406 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11407
11408 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11409 error (_("Your Ada runtime appears to be missing some debugging "
11410 "information.\nCannot insert Ada exception catchpoint "
11411 "in this configuration."));
11412
11413 return 0;
11414 }
11415
11416 /* Make sure that the symbol we found corresponds to a function. */
11417
11418 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11419 {
11420 error (_("Symbol \"%s\" is not a function (class = %d)"),
11421 sym->linkage_name (), SYMBOL_CLASS (sym));
11422 return 0;
11423 }
11424
11425 sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
11426 if (sym == NULL)
11427 {
11428 struct bound_minimal_symbol msym
11429 = lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
11430
11431 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11432 error (_("Your Ada runtime appears to be missing some debugging "
11433 "information.\nCannot insert Ada exception catchpoint "
11434 "in this configuration."));
11435
11436 return 0;
11437 }
11438
11439 /* Make sure that the symbol we found corresponds to a function. */
11440
11441 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11442 {
11443 error (_("Symbol \"%s\" is not a function (class = %d)"),
11444 sym->linkage_name (), SYMBOL_CLASS (sym));
11445 return 0;
11446 }
11447
11448 return 1;
11449 }
11450
11451 /* Inspect the Ada runtime and determine which exception info structure
11452 should be used to provide support for exception catchpoints.
11453
11454 This function will always set the per-inferior exception_info,
11455 or raise an error. */
11456
11457 static void
11458 ada_exception_support_info_sniffer (void)
11459 {
11460 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11461
11462 /* If the exception info is already known, then no need to recompute it. */
11463 if (data->exception_info != NULL)
11464 return;
11465
11466 /* Check the latest (default) exception support info. */
11467 if (ada_has_this_exception_support (&default_exception_support_info))
11468 {
11469 data->exception_info = &default_exception_support_info;
11470 return;
11471 }
11472
11473 /* Try the v0 exception suport info. */
11474 if (ada_has_this_exception_support (&exception_support_info_v0))
11475 {
11476 data->exception_info = &exception_support_info_v0;
11477 return;
11478 }
11479
11480 /* Try our fallback exception suport info. */
11481 if (ada_has_this_exception_support (&exception_support_info_fallback))
11482 {
11483 data->exception_info = &exception_support_info_fallback;
11484 return;
11485 }
11486
11487 /* Sometimes, it is normal for us to not be able to find the routine
11488 we are looking for. This happens when the program is linked with
11489 the shared version of the GNAT runtime, and the program has not been
11490 started yet. Inform the user of these two possible causes if
11491 applicable. */
11492
11493 if (ada_update_initial_language (language_unknown) != language_ada)
11494 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11495
11496 /* If the symbol does not exist, then check that the program is
11497 already started, to make sure that shared libraries have been
11498 loaded. If it is not started, this may mean that the symbol is
11499 in a shared library. */
11500
11501 if (inferior_ptid.pid () == 0)
11502 error (_("Unable to insert catchpoint. Try to start the program first."));
11503
11504 /* At this point, we know that we are debugging an Ada program and
11505 that the inferior has been started, but we still are not able to
11506 find the run-time symbols. That can mean that we are in
11507 configurable run time mode, or that a-except as been optimized
11508 out by the linker... In any case, at this point it is not worth
11509 supporting this feature. */
11510
11511 error (_("Cannot insert Ada exception catchpoints in this configuration."));
11512 }
11513
11514 /* True iff FRAME is very likely to be that of a function that is
11515 part of the runtime system. This is all very heuristic, but is
11516 intended to be used as advice as to what frames are uninteresting
11517 to most users. */
11518
11519 static int
11520 is_known_support_routine (struct frame_info *frame)
11521 {
11522 enum language func_lang;
11523 int i;
11524 const char *fullname;
11525
11526 /* If this code does not have any debugging information (no symtab),
11527 This cannot be any user code. */
11528
11529 symtab_and_line sal = find_frame_sal (frame);
11530 if (sal.symtab == NULL)
11531 return 1;
11532
11533 /* If there is a symtab, but the associated source file cannot be
11534 located, then assume this is not user code: Selecting a frame
11535 for which we cannot display the code would not be very helpful
11536 for the user. This should also take care of case such as VxWorks
11537 where the kernel has some debugging info provided for a few units. */
11538
11539 fullname = symtab_to_fullname (sal.symtab);
11540 if (access (fullname, R_OK) != 0)
11541 return 1;
11542
11543 /* Check the unit filename against the Ada runtime file naming.
11544 We also check the name of the objfile against the name of some
11545 known system libraries that sometimes come with debugging info
11546 too. */
11547
11548 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11549 {
11550 re_comp (known_runtime_file_name_patterns[i]);
11551 if (re_exec (lbasename (sal.symtab->filename)))
11552 return 1;
11553 if (SYMTAB_OBJFILE (sal.symtab) != NULL
11554 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11555 return 1;
11556 }
11557
11558 /* Check whether the function is a GNAT-generated entity. */
11559
11560 gdb::unique_xmalloc_ptr<char> func_name
11561 = find_frame_funname (frame, &func_lang, NULL);
11562 if (func_name == NULL)
11563 return 1;
11564
11565 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11566 {
11567 re_comp (known_auxiliary_function_name_patterns[i]);
11568 if (re_exec (func_name.get ()))
11569 return 1;
11570 }
11571
11572 return 0;
11573 }
11574
11575 /* Find the first frame that contains debugging information and that is not
11576 part of the Ada run-time, starting from FI and moving upward. */
11577
11578 void
11579 ada_find_printable_frame (struct frame_info *fi)
11580 {
11581 for (; fi != NULL; fi = get_prev_frame (fi))
11582 {
11583 if (!is_known_support_routine (fi))
11584 {
11585 select_frame (fi);
11586 break;
11587 }
11588 }
11589
11590 }
11591
11592 /* Assuming that the inferior just triggered an unhandled exception
11593 catchpoint, return the address in inferior memory where the name
11594 of the exception is stored.
11595
11596 Return zero if the address could not be computed. */
11597
11598 static CORE_ADDR
11599 ada_unhandled_exception_name_addr (void)
11600 {
11601 return parse_and_eval_address ("e.full_name");
11602 }
11603
11604 /* Same as ada_unhandled_exception_name_addr, except that this function
11605 should be used when the inferior uses an older version of the runtime,
11606 where the exception name needs to be extracted from a specific frame
11607 several frames up in the callstack. */
11608
11609 static CORE_ADDR
11610 ada_unhandled_exception_name_addr_from_raise (void)
11611 {
11612 int frame_level;
11613 struct frame_info *fi;
11614 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11615
11616 /* To determine the name of this exception, we need to select
11617 the frame corresponding to RAISE_SYM_NAME. This frame is
11618 at least 3 levels up, so we simply skip the first 3 frames
11619 without checking the name of their associated function. */
11620 fi = get_current_frame ();
11621 for (frame_level = 0; frame_level < 3; frame_level += 1)
11622 if (fi != NULL)
11623 fi = get_prev_frame (fi);
11624
11625 while (fi != NULL)
11626 {
11627 enum language func_lang;
11628
11629 gdb::unique_xmalloc_ptr<char> func_name
11630 = find_frame_funname (fi, &func_lang, NULL);
11631 if (func_name != NULL)
11632 {
11633 if (strcmp (func_name.get (),
11634 data->exception_info->catch_exception_sym) == 0)
11635 break; /* We found the frame we were looking for... */
11636 }
11637 fi = get_prev_frame (fi);
11638 }
11639
11640 if (fi == NULL)
11641 return 0;
11642
11643 select_frame (fi);
11644 return parse_and_eval_address ("id.full_name");
11645 }
11646
11647 /* Assuming the inferior just triggered an Ada exception catchpoint
11648 (of any type), return the address in inferior memory where the name
11649 of the exception is stored, if applicable.
11650
11651 Assumes the selected frame is the current frame.
11652
11653 Return zero if the address could not be computed, or if not relevant. */
11654
11655 static CORE_ADDR
11656 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11657 struct breakpoint *b)
11658 {
11659 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11660
11661 switch (ex)
11662 {
11663 case ada_catch_exception:
11664 return (parse_and_eval_address ("e.full_name"));
11665 break;
11666
11667 case ada_catch_exception_unhandled:
11668 return data->exception_info->unhandled_exception_name_addr ();
11669 break;
11670
11671 case ada_catch_handlers:
11672 return 0; /* The runtimes does not provide access to the exception
11673 name. */
11674 break;
11675
11676 case ada_catch_assert:
11677 return 0; /* Exception name is not relevant in this case. */
11678 break;
11679
11680 default:
11681 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11682 break;
11683 }
11684
11685 return 0; /* Should never be reached. */
11686 }
11687
11688 /* Assuming the inferior is stopped at an exception catchpoint,
11689 return the message which was associated to the exception, if
11690 available. Return NULL if the message could not be retrieved.
11691
11692 Note: The exception message can be associated to an exception
11693 either through the use of the Raise_Exception function, or
11694 more simply (Ada 2005 and later), via:
11695
11696 raise Exception_Name with "exception message";
11697
11698 */
11699
11700 static gdb::unique_xmalloc_ptr<char>
11701 ada_exception_message_1 (void)
11702 {
11703 struct value *e_msg_val;
11704 int e_msg_len;
11705
11706 /* For runtimes that support this feature, the exception message
11707 is passed as an unbounded string argument called "message". */
11708 e_msg_val = parse_and_eval ("message");
11709 if (e_msg_val == NULL)
11710 return NULL; /* Exception message not supported. */
11711
11712 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
11713 gdb_assert (e_msg_val != NULL);
11714 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
11715
11716 /* If the message string is empty, then treat it as if there was
11717 no exception message. */
11718 if (e_msg_len <= 0)
11719 return NULL;
11720
11721 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
11722 read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (),
11723 e_msg_len);
11724 e_msg.get ()[e_msg_len] = '\0';
11725
11726 return e_msg;
11727 }
11728
11729 /* Same as ada_exception_message_1, except that all exceptions are
11730 contained here (returning NULL instead). */
11731
11732 static gdb::unique_xmalloc_ptr<char>
11733 ada_exception_message (void)
11734 {
11735 gdb::unique_xmalloc_ptr<char> e_msg;
11736
11737 try
11738 {
11739 e_msg = ada_exception_message_1 ();
11740 }
11741 catch (const gdb_exception_error &e)
11742 {
11743 e_msg.reset (nullptr);
11744 }
11745
11746 return e_msg;
11747 }
11748
11749 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11750 any error that ada_exception_name_addr_1 might cause to be thrown.
11751 When an error is intercepted, a warning with the error message is printed,
11752 and zero is returned. */
11753
11754 static CORE_ADDR
11755 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11756 struct breakpoint *b)
11757 {
11758 CORE_ADDR result = 0;
11759
11760 try
11761 {
11762 result = ada_exception_name_addr_1 (ex, b);
11763 }
11764
11765 catch (const gdb_exception_error &e)
11766 {
11767 warning (_("failed to get exception name: %s"), e.what ());
11768 return 0;
11769 }
11770
11771 return result;
11772 }
11773
11774 static std::string ada_exception_catchpoint_cond_string
11775 (const char *excep_string,
11776 enum ada_exception_catchpoint_kind ex);
11777
11778 /* Ada catchpoints.
11779
11780 In the case of catchpoints on Ada exceptions, the catchpoint will
11781 stop the target on every exception the program throws. When a user
11782 specifies the name of a specific exception, we translate this
11783 request into a condition expression (in text form), and then parse
11784 it into an expression stored in each of the catchpoint's locations.
11785 We then use this condition to check whether the exception that was
11786 raised is the one the user is interested in. If not, then the
11787 target is resumed again. We store the name of the requested
11788 exception, in order to be able to re-set the condition expression
11789 when symbols change. */
11790
11791 /* An instance of this type is used to represent an Ada catchpoint
11792 breakpoint location. */
11793
11794 class ada_catchpoint_location : public bp_location
11795 {
11796 public:
11797 ada_catchpoint_location (breakpoint *owner)
11798 : bp_location (owner, bp_loc_software_breakpoint)
11799 {}
11800
11801 /* The condition that checks whether the exception that was raised
11802 is the specific exception the user specified on catchpoint
11803 creation. */
11804 expression_up excep_cond_expr;
11805 };
11806
11807 /* An instance of this type is used to represent an Ada catchpoint. */
11808
11809 struct ada_catchpoint : public breakpoint
11810 {
11811 explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
11812 : m_kind (kind)
11813 {
11814 }
11815
11816 /* The name of the specific exception the user specified. */
11817 std::string excep_string;
11818
11819 /* What kind of catchpoint this is. */
11820 enum ada_exception_catchpoint_kind m_kind;
11821 };
11822
11823 /* Parse the exception condition string in the context of each of the
11824 catchpoint's locations, and store them for later evaluation. */
11825
11826 static void
11827 create_excep_cond_exprs (struct ada_catchpoint *c,
11828 enum ada_exception_catchpoint_kind ex)
11829 {
11830 struct bp_location *bl;
11831
11832 /* Nothing to do if there's no specific exception to catch. */
11833 if (c->excep_string.empty ())
11834 return;
11835
11836 /* Same if there are no locations... */
11837 if (c->loc == NULL)
11838 return;
11839
11840 /* Compute the condition expression in text form, from the specific
11841 expection we want to catch. */
11842 std::string cond_string
11843 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
11844
11845 /* Iterate over all the catchpoint's locations, and parse an
11846 expression for each. */
11847 for (bl = c->loc; bl != NULL; bl = bl->next)
11848 {
11849 struct ada_catchpoint_location *ada_loc
11850 = (struct ada_catchpoint_location *) bl;
11851 expression_up exp;
11852
11853 if (!bl->shlib_disabled)
11854 {
11855 const char *s;
11856
11857 s = cond_string.c_str ();
11858 try
11859 {
11860 exp = parse_exp_1 (&s, bl->address,
11861 block_for_pc (bl->address),
11862 0);
11863 }
11864 catch (const gdb_exception_error &e)
11865 {
11866 warning (_("failed to reevaluate internal exception condition "
11867 "for catchpoint %d: %s"),
11868 c->number, e.what ());
11869 }
11870 }
11871
11872 ada_loc->excep_cond_expr = std::move (exp);
11873 }
11874 }
11875
11876 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11877 structure for all exception catchpoint kinds. */
11878
11879 static struct bp_location *
11880 allocate_location_exception (struct breakpoint *self)
11881 {
11882 return new ada_catchpoint_location (self);
11883 }
11884
11885 /* Implement the RE_SET method in the breakpoint_ops structure for all
11886 exception catchpoint kinds. */
11887
11888 static void
11889 re_set_exception (struct breakpoint *b)
11890 {
11891 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11892
11893 /* Call the base class's method. This updates the catchpoint's
11894 locations. */
11895 bkpt_breakpoint_ops.re_set (b);
11896
11897 /* Reparse the exception conditional expressions. One for each
11898 location. */
11899 create_excep_cond_exprs (c, c->m_kind);
11900 }
11901
11902 /* Returns true if we should stop for this breakpoint hit. If the
11903 user specified a specific exception, we only want to cause a stop
11904 if the program thrown that exception. */
11905
11906 static int
11907 should_stop_exception (const struct bp_location *bl)
11908 {
11909 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11910 const struct ada_catchpoint_location *ada_loc
11911 = (const struct ada_catchpoint_location *) bl;
11912 int stop;
11913
11914 struct internalvar *var = lookup_internalvar ("_ada_exception");
11915 if (c->m_kind == ada_catch_assert)
11916 clear_internalvar (var);
11917 else
11918 {
11919 try
11920 {
11921 const char *expr;
11922
11923 if (c->m_kind == ada_catch_handlers)
11924 expr = ("GNAT_GCC_exception_Access(gcc_exception)"
11925 ".all.occurrence.id");
11926 else
11927 expr = "e";
11928
11929 struct value *exc = parse_and_eval (expr);
11930 set_internalvar (var, exc);
11931 }
11932 catch (const gdb_exception_error &ex)
11933 {
11934 clear_internalvar (var);
11935 }
11936 }
11937
11938 /* With no specific exception, should always stop. */
11939 if (c->excep_string.empty ())
11940 return 1;
11941
11942 if (ada_loc->excep_cond_expr == NULL)
11943 {
11944 /* We will have a NULL expression if back when we were creating
11945 the expressions, this location's had failed to parse. */
11946 return 1;
11947 }
11948
11949 stop = 1;
11950 try
11951 {
11952 struct value *mark;
11953
11954 mark = value_mark ();
11955 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
11956 value_free_to_mark (mark);
11957 }
11958 catch (const gdb_exception &ex)
11959 {
11960 exception_fprintf (gdb_stderr, ex,
11961 _("Error in testing exception condition:\n"));
11962 }
11963
11964 return stop;
11965 }
11966
11967 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
11968 for all exception catchpoint kinds. */
11969
11970 static void
11971 check_status_exception (bpstat bs)
11972 {
11973 bs->stop = should_stop_exception (bs->bp_location_at.get ());
11974 }
11975
11976 /* Implement the PRINT_IT method in the breakpoint_ops structure
11977 for all exception catchpoint kinds. */
11978
11979 static enum print_stop_action
11980 print_it_exception (bpstat bs)
11981 {
11982 struct ui_out *uiout = current_uiout;
11983 struct breakpoint *b = bs->breakpoint_at;
11984
11985 annotate_catchpoint (b->number);
11986
11987 if (uiout->is_mi_like_p ())
11988 {
11989 uiout->field_string ("reason",
11990 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11991 uiout->field_string ("disp", bpdisp_text (b->disposition));
11992 }
11993
11994 uiout->text (b->disposition == disp_del
11995 ? "\nTemporary catchpoint " : "\nCatchpoint ");
11996 uiout->field_signed ("bkptno", b->number);
11997 uiout->text (", ");
11998
11999 /* ada_exception_name_addr relies on the selected frame being the
12000 current frame. Need to do this here because this function may be
12001 called more than once when printing a stop, and below, we'll
12002 select the first frame past the Ada run-time (see
12003 ada_find_printable_frame). */
12004 select_frame (get_current_frame ());
12005
12006 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12007 switch (c->m_kind)
12008 {
12009 case ada_catch_exception:
12010 case ada_catch_exception_unhandled:
12011 case ada_catch_handlers:
12012 {
12013 const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
12014 char exception_name[256];
12015
12016 if (addr != 0)
12017 {
12018 read_memory (addr, (gdb_byte *) exception_name,
12019 sizeof (exception_name) - 1);
12020 exception_name [sizeof (exception_name) - 1] = '\0';
12021 }
12022 else
12023 {
12024 /* For some reason, we were unable to read the exception
12025 name. This could happen if the Runtime was compiled
12026 without debugging info, for instance. In that case,
12027 just replace the exception name by the generic string
12028 "exception" - it will read as "an exception" in the
12029 notification we are about to print. */
12030 memcpy (exception_name, "exception", sizeof ("exception"));
12031 }
12032 /* In the case of unhandled exception breakpoints, we print
12033 the exception name as "unhandled EXCEPTION_NAME", to make
12034 it clearer to the user which kind of catchpoint just got
12035 hit. We used ui_out_text to make sure that this extra
12036 info does not pollute the exception name in the MI case. */
12037 if (c->m_kind == ada_catch_exception_unhandled)
12038 uiout->text ("unhandled ");
12039 uiout->field_string ("exception-name", exception_name);
12040 }
12041 break;
12042 case ada_catch_assert:
12043 /* In this case, the name of the exception is not really
12044 important. Just print "failed assertion" to make it clearer
12045 that his program just hit an assertion-failure catchpoint.
12046 We used ui_out_text because this info does not belong in
12047 the MI output. */
12048 uiout->text ("failed assertion");
12049 break;
12050 }
12051
12052 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
12053 if (exception_message != NULL)
12054 {
12055 uiout->text (" (");
12056 uiout->field_string ("exception-message", exception_message.get ());
12057 uiout->text (")");
12058 }
12059
12060 uiout->text (" at ");
12061 ada_find_printable_frame (get_current_frame ());
12062
12063 return PRINT_SRC_AND_LOC;
12064 }
12065
12066 /* Implement the PRINT_ONE method in the breakpoint_ops structure
12067 for all exception catchpoint kinds. */
12068
12069 static void
12070 print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
12071 {
12072 struct ui_out *uiout = current_uiout;
12073 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12074 struct value_print_options opts;
12075
12076 get_user_print_options (&opts);
12077
12078 if (opts.addressprint)
12079 uiout->field_skip ("addr");
12080
12081 annotate_field (5);
12082 switch (c->m_kind)
12083 {
12084 case ada_catch_exception:
12085 if (!c->excep_string.empty ())
12086 {
12087 std::string msg = string_printf (_("`%s' Ada exception"),
12088 c->excep_string.c_str ());
12089
12090 uiout->field_string ("what", msg);
12091 }
12092 else
12093 uiout->field_string ("what", "all Ada exceptions");
12094
12095 break;
12096
12097 case ada_catch_exception_unhandled:
12098 uiout->field_string ("what", "unhandled Ada exceptions");
12099 break;
12100
12101 case ada_catch_handlers:
12102 if (!c->excep_string.empty ())
12103 {
12104 uiout->field_fmt ("what",
12105 _("`%s' Ada exception handlers"),
12106 c->excep_string.c_str ());
12107 }
12108 else
12109 uiout->field_string ("what", "all Ada exceptions handlers");
12110 break;
12111
12112 case ada_catch_assert:
12113 uiout->field_string ("what", "failed Ada assertions");
12114 break;
12115
12116 default:
12117 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12118 break;
12119 }
12120 }
12121
12122 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12123 for all exception catchpoint kinds. */
12124
12125 static void
12126 print_mention_exception (struct breakpoint *b)
12127 {
12128 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12129 struct ui_out *uiout = current_uiout;
12130
12131 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
12132 : _("Catchpoint "));
12133 uiout->field_signed ("bkptno", b->number);
12134 uiout->text (": ");
12135
12136 switch (c->m_kind)
12137 {
12138 case ada_catch_exception:
12139 if (!c->excep_string.empty ())
12140 {
12141 std::string info = string_printf (_("`%s' Ada exception"),
12142 c->excep_string.c_str ());
12143 uiout->text (info.c_str ());
12144 }
12145 else
12146 uiout->text (_("all Ada exceptions"));
12147 break;
12148
12149 case ada_catch_exception_unhandled:
12150 uiout->text (_("unhandled Ada exceptions"));
12151 break;
12152
12153 case ada_catch_handlers:
12154 if (!c->excep_string.empty ())
12155 {
12156 std::string info
12157 = string_printf (_("`%s' Ada exception handlers"),
12158 c->excep_string.c_str ());
12159 uiout->text (info.c_str ());
12160 }
12161 else
12162 uiout->text (_("all Ada exceptions handlers"));
12163 break;
12164
12165 case ada_catch_assert:
12166 uiout->text (_("failed Ada assertions"));
12167 break;
12168
12169 default:
12170 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12171 break;
12172 }
12173 }
12174
12175 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12176 for all exception catchpoint kinds. */
12177
12178 static void
12179 print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
12180 {
12181 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12182
12183 switch (c->m_kind)
12184 {
12185 case ada_catch_exception:
12186 fprintf_filtered (fp, "catch exception");
12187 if (!c->excep_string.empty ())
12188 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
12189 break;
12190
12191 case ada_catch_exception_unhandled:
12192 fprintf_filtered (fp, "catch exception unhandled");
12193 break;
12194
12195 case ada_catch_handlers:
12196 fprintf_filtered (fp, "catch handlers");
12197 break;
12198
12199 case ada_catch_assert:
12200 fprintf_filtered (fp, "catch assert");
12201 break;
12202
12203 default:
12204 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12205 }
12206 print_recreate_thread (b, fp);
12207 }
12208
12209 /* Virtual tables for various breakpoint types. */
12210 static struct breakpoint_ops catch_exception_breakpoint_ops;
12211 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12212 static struct breakpoint_ops catch_assert_breakpoint_ops;
12213 static struct breakpoint_ops catch_handlers_breakpoint_ops;
12214
12215 /* See ada-lang.h. */
12216
12217 bool
12218 is_ada_exception_catchpoint (breakpoint *bp)
12219 {
12220 return (bp->ops == &catch_exception_breakpoint_ops
12221 || bp->ops == &catch_exception_unhandled_breakpoint_ops
12222 || bp->ops == &catch_assert_breakpoint_ops
12223 || bp->ops == &catch_handlers_breakpoint_ops);
12224 }
12225
12226 /* Split the arguments specified in a "catch exception" command.
12227 Set EX to the appropriate catchpoint type.
12228 Set EXCEP_STRING to the name of the specific exception if
12229 specified by the user.
12230 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
12231 "catch handlers" command. False otherwise.
12232 If a condition is found at the end of the arguments, the condition
12233 expression is stored in COND_STRING (memory must be deallocated
12234 after use). Otherwise COND_STRING is set to NULL. */
12235
12236 static void
12237 catch_ada_exception_command_split (const char *args,
12238 bool is_catch_handlers_cmd,
12239 enum ada_exception_catchpoint_kind *ex,
12240 std::string *excep_string,
12241 std::string *cond_string)
12242 {
12243 std::string exception_name;
12244
12245 exception_name = extract_arg (&args);
12246 if (exception_name == "if")
12247 {
12248 /* This is not an exception name; this is the start of a condition
12249 expression for a catchpoint on all exceptions. So, "un-get"
12250 this token, and set exception_name to NULL. */
12251 exception_name.clear ();
12252 args -= 2;
12253 }
12254
12255 /* Check to see if we have a condition. */
12256
12257 args = skip_spaces (args);
12258 if (startswith (args, "if")
12259 && (isspace (args[2]) || args[2] == '\0'))
12260 {
12261 args += 2;
12262 args = skip_spaces (args);
12263
12264 if (args[0] == '\0')
12265 error (_("Condition missing after `if' keyword"));
12266 *cond_string = args;
12267
12268 args += strlen (args);
12269 }
12270
12271 /* Check that we do not have any more arguments. Anything else
12272 is unexpected. */
12273
12274 if (args[0] != '\0')
12275 error (_("Junk at end of expression"));
12276
12277 if (is_catch_handlers_cmd)
12278 {
12279 /* Catch handling of exceptions. */
12280 *ex = ada_catch_handlers;
12281 *excep_string = exception_name;
12282 }
12283 else if (exception_name.empty ())
12284 {
12285 /* Catch all exceptions. */
12286 *ex = ada_catch_exception;
12287 excep_string->clear ();
12288 }
12289 else if (exception_name == "unhandled")
12290 {
12291 /* Catch unhandled exceptions. */
12292 *ex = ada_catch_exception_unhandled;
12293 excep_string->clear ();
12294 }
12295 else
12296 {
12297 /* Catch a specific exception. */
12298 *ex = ada_catch_exception;
12299 *excep_string = exception_name;
12300 }
12301 }
12302
12303 /* Return the name of the symbol on which we should break in order to
12304 implement a catchpoint of the EX kind. */
12305
12306 static const char *
12307 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12308 {
12309 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12310
12311 gdb_assert (data->exception_info != NULL);
12312
12313 switch (ex)
12314 {
12315 case ada_catch_exception:
12316 return (data->exception_info->catch_exception_sym);
12317 break;
12318 case ada_catch_exception_unhandled:
12319 return (data->exception_info->catch_exception_unhandled_sym);
12320 break;
12321 case ada_catch_assert:
12322 return (data->exception_info->catch_assert_sym);
12323 break;
12324 case ada_catch_handlers:
12325 return (data->exception_info->catch_handlers_sym);
12326 break;
12327 default:
12328 internal_error (__FILE__, __LINE__,
12329 _("unexpected catchpoint kind (%d)"), ex);
12330 }
12331 }
12332
12333 /* Return the breakpoint ops "virtual table" used for catchpoints
12334 of the EX kind. */
12335
12336 static const struct breakpoint_ops *
12337 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12338 {
12339 switch (ex)
12340 {
12341 case ada_catch_exception:
12342 return (&catch_exception_breakpoint_ops);
12343 break;
12344 case ada_catch_exception_unhandled:
12345 return (&catch_exception_unhandled_breakpoint_ops);
12346 break;
12347 case ada_catch_assert:
12348 return (&catch_assert_breakpoint_ops);
12349 break;
12350 case ada_catch_handlers:
12351 return (&catch_handlers_breakpoint_ops);
12352 break;
12353 default:
12354 internal_error (__FILE__, __LINE__,
12355 _("unexpected catchpoint kind (%d)"), ex);
12356 }
12357 }
12358
12359 /* Return the condition that will be used to match the current exception
12360 being raised with the exception that the user wants to catch. This
12361 assumes that this condition is used when the inferior just triggered
12362 an exception catchpoint.
12363 EX: the type of catchpoints used for catching Ada exceptions. */
12364
12365 static std::string
12366 ada_exception_catchpoint_cond_string (const char *excep_string,
12367 enum ada_exception_catchpoint_kind ex)
12368 {
12369 int i;
12370 bool is_standard_exc = false;
12371 std::string result;
12372
12373 if (ex == ada_catch_handlers)
12374 {
12375 /* For exception handlers catchpoints, the condition string does
12376 not use the same parameter as for the other exceptions. */
12377 result = ("long_integer (GNAT_GCC_exception_Access"
12378 "(gcc_exception).all.occurrence.id)");
12379 }
12380 else
12381 result = "long_integer (e)";
12382
12383 /* The standard exceptions are a special case. They are defined in
12384 runtime units that have been compiled without debugging info; if
12385 EXCEP_STRING is the not-fully-qualified name of a standard
12386 exception (e.g. "constraint_error") then, during the evaluation
12387 of the condition expression, the symbol lookup on this name would
12388 *not* return this standard exception. The catchpoint condition
12389 may then be set only on user-defined exceptions which have the
12390 same not-fully-qualified name (e.g. my_package.constraint_error).
12391
12392 To avoid this unexcepted behavior, these standard exceptions are
12393 systematically prefixed by "standard". This means that "catch
12394 exception constraint_error" is rewritten into "catch exception
12395 standard.constraint_error".
12396
12397 If an exception named constraint_error is defined in another package of
12398 the inferior program, then the only way to specify this exception as a
12399 breakpoint condition is to use its fully-qualified named:
12400 e.g. my_package.constraint_error. */
12401
12402 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12403 {
12404 if (strcmp (standard_exc [i], excep_string) == 0)
12405 {
12406 is_standard_exc = true;
12407 break;
12408 }
12409 }
12410
12411 result += " = ";
12412
12413 if (is_standard_exc)
12414 string_appendf (result, "long_integer (&standard.%s)", excep_string);
12415 else
12416 string_appendf (result, "long_integer (&%s)", excep_string);
12417
12418 return result;
12419 }
12420
12421 /* Return the symtab_and_line that should be used to insert an exception
12422 catchpoint of the TYPE kind.
12423
12424 ADDR_STRING returns the name of the function where the real
12425 breakpoint that implements the catchpoints is set, depending on the
12426 type of catchpoint we need to create. */
12427
12428 static struct symtab_and_line
12429 ada_exception_sal (enum ada_exception_catchpoint_kind ex,
12430 std::string *addr_string, const struct breakpoint_ops **ops)
12431 {
12432 const char *sym_name;
12433 struct symbol *sym;
12434
12435 /* First, find out which exception support info to use. */
12436 ada_exception_support_info_sniffer ();
12437
12438 /* Then lookup the function on which we will break in order to catch
12439 the Ada exceptions requested by the user. */
12440 sym_name = ada_exception_sym_name (ex);
12441 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12442
12443 if (sym == NULL)
12444 error (_("Catchpoint symbol not found: %s"), sym_name);
12445
12446 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12447 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
12448
12449 /* Set ADDR_STRING. */
12450 *addr_string = sym_name;
12451
12452 /* Set OPS. */
12453 *ops = ada_exception_breakpoint_ops (ex);
12454
12455 return find_function_start_sal (sym, 1);
12456 }
12457
12458 /* Create an Ada exception catchpoint.
12459
12460 EX_KIND is the kind of exception catchpoint to be created.
12461
12462 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
12463 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
12464 of the exception to which this catchpoint applies.
12465
12466 COND_STRING, if not empty, is the catchpoint condition.
12467
12468 TEMPFLAG, if nonzero, means that the underlying breakpoint
12469 should be temporary.
12470
12471 FROM_TTY is the usual argument passed to all commands implementations. */
12472
12473 void
12474 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12475 enum ada_exception_catchpoint_kind ex_kind,
12476 const std::string &excep_string,
12477 const std::string &cond_string,
12478 int tempflag,
12479 int disabled,
12480 int from_tty)
12481 {
12482 std::string addr_string;
12483 const struct breakpoint_ops *ops = NULL;
12484 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
12485
12486 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
12487 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
12488 ops, tempflag, disabled, from_tty);
12489 c->excep_string = excep_string;
12490 create_excep_cond_exprs (c.get (), ex_kind);
12491 if (!cond_string.empty ())
12492 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty, false);
12493 install_breakpoint (0, std::move (c), 1);
12494 }
12495
12496 /* Implement the "catch exception" command. */
12497
12498 static void
12499 catch_ada_exception_command (const char *arg_entry, int from_tty,
12500 struct cmd_list_element *command)
12501 {
12502 const char *arg = arg_entry;
12503 struct gdbarch *gdbarch = get_current_arch ();
12504 int tempflag;
12505 enum ada_exception_catchpoint_kind ex_kind;
12506 std::string excep_string;
12507 std::string cond_string;
12508
12509 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12510
12511 if (!arg)
12512 arg = "";
12513 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
12514 &cond_string);
12515 create_ada_exception_catchpoint (gdbarch, ex_kind,
12516 excep_string, cond_string,
12517 tempflag, 1 /* enabled */,
12518 from_tty);
12519 }
12520
12521 /* Implement the "catch handlers" command. */
12522
12523 static void
12524 catch_ada_handlers_command (const char *arg_entry, int from_tty,
12525 struct cmd_list_element *command)
12526 {
12527 const char *arg = arg_entry;
12528 struct gdbarch *gdbarch = get_current_arch ();
12529 int tempflag;
12530 enum ada_exception_catchpoint_kind ex_kind;
12531 std::string excep_string;
12532 std::string cond_string;
12533
12534 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12535
12536 if (!arg)
12537 arg = "";
12538 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
12539 &cond_string);
12540 create_ada_exception_catchpoint (gdbarch, ex_kind,
12541 excep_string, cond_string,
12542 tempflag, 1 /* enabled */,
12543 from_tty);
12544 }
12545
12546 /* Completion function for the Ada "catch" commands. */
12547
12548 static void
12549 catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
12550 const char *text, const char *word)
12551 {
12552 std::vector<ada_exc_info> exceptions = ada_exceptions_list (NULL);
12553
12554 for (const ada_exc_info &info : exceptions)
12555 {
12556 if (startswith (info.name, word))
12557 tracker.add_completion (make_unique_xstrdup (info.name));
12558 }
12559 }
12560
12561 /* Split the arguments specified in a "catch assert" command.
12562
12563 ARGS contains the command's arguments (or the empty string if
12564 no arguments were passed).
12565
12566 If ARGS contains a condition, set COND_STRING to that condition
12567 (the memory needs to be deallocated after use). */
12568
12569 static void
12570 catch_ada_assert_command_split (const char *args, std::string &cond_string)
12571 {
12572 args = skip_spaces (args);
12573
12574 /* Check whether a condition was provided. */
12575 if (startswith (args, "if")
12576 && (isspace (args[2]) || args[2] == '\0'))
12577 {
12578 args += 2;
12579 args = skip_spaces (args);
12580 if (args[0] == '\0')
12581 error (_("condition missing after `if' keyword"));
12582 cond_string.assign (args);
12583 }
12584
12585 /* Otherwise, there should be no other argument at the end of
12586 the command. */
12587 else if (args[0] != '\0')
12588 error (_("Junk at end of arguments."));
12589 }
12590
12591 /* Implement the "catch assert" command. */
12592
12593 static void
12594 catch_assert_command (const char *arg_entry, int from_tty,
12595 struct cmd_list_element *command)
12596 {
12597 const char *arg = arg_entry;
12598 struct gdbarch *gdbarch = get_current_arch ();
12599 int tempflag;
12600 std::string cond_string;
12601
12602 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12603
12604 if (!arg)
12605 arg = "";
12606 catch_ada_assert_command_split (arg, cond_string);
12607 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12608 "", cond_string,
12609 tempflag, 1 /* enabled */,
12610 from_tty);
12611 }
12612
12613 /* Return non-zero if the symbol SYM is an Ada exception object. */
12614
12615 static int
12616 ada_is_exception_sym (struct symbol *sym)
12617 {
12618 const char *type_name = SYMBOL_TYPE (sym)->name ();
12619
12620 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12621 && SYMBOL_CLASS (sym) != LOC_BLOCK
12622 && SYMBOL_CLASS (sym) != LOC_CONST
12623 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12624 && type_name != NULL && strcmp (type_name, "exception") == 0);
12625 }
12626
12627 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12628 Ada exception object. This matches all exceptions except the ones
12629 defined by the Ada language. */
12630
12631 static int
12632 ada_is_non_standard_exception_sym (struct symbol *sym)
12633 {
12634 int i;
12635
12636 if (!ada_is_exception_sym (sym))
12637 return 0;
12638
12639 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12640 if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
12641 return 0; /* A standard exception. */
12642
12643 /* Numeric_Error is also a standard exception, so exclude it.
12644 See the STANDARD_EXC description for more details as to why
12645 this exception is not listed in that array. */
12646 if (strcmp (sym->linkage_name (), "numeric_error") == 0)
12647 return 0;
12648
12649 return 1;
12650 }
12651
12652 /* A helper function for std::sort, comparing two struct ada_exc_info
12653 objects.
12654
12655 The comparison is determined first by exception name, and then
12656 by exception address. */
12657
12658 bool
12659 ada_exc_info::operator< (const ada_exc_info &other) const
12660 {
12661 int result;
12662
12663 result = strcmp (name, other.name);
12664 if (result < 0)
12665 return true;
12666 if (result == 0 && addr < other.addr)
12667 return true;
12668 return false;
12669 }
12670
12671 bool
12672 ada_exc_info::operator== (const ada_exc_info &other) const
12673 {
12674 return addr == other.addr && strcmp (name, other.name) == 0;
12675 }
12676
12677 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12678 routine, but keeping the first SKIP elements untouched.
12679
12680 All duplicates are also removed. */
12681
12682 static void
12683 sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
12684 int skip)
12685 {
12686 std::sort (exceptions->begin () + skip, exceptions->end ());
12687 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
12688 exceptions->end ());
12689 }
12690
12691 /* Add all exceptions defined by the Ada standard whose name match
12692 a regular expression.
12693
12694 If PREG is not NULL, then this regexp_t object is used to
12695 perform the symbol name matching. Otherwise, no name-based
12696 filtering is performed.
12697
12698 EXCEPTIONS is a vector of exceptions to which matching exceptions
12699 gets pushed. */
12700
12701 static void
12702 ada_add_standard_exceptions (compiled_regex *preg,
12703 std::vector<ada_exc_info> *exceptions)
12704 {
12705 int i;
12706
12707 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12708 {
12709 if (preg == NULL
12710 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
12711 {
12712 struct bound_minimal_symbol msymbol
12713 = ada_lookup_simple_minsym (standard_exc[i]);
12714
12715 if (msymbol.minsym != NULL)
12716 {
12717 struct ada_exc_info info
12718 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12719
12720 exceptions->push_back (info);
12721 }
12722 }
12723 }
12724 }
12725
12726 /* Add all Ada exceptions defined locally and accessible from the given
12727 FRAME.
12728
12729 If PREG is not NULL, then this regexp_t object is used to
12730 perform the symbol name matching. Otherwise, no name-based
12731 filtering is performed.
12732
12733 EXCEPTIONS is a vector of exceptions to which matching exceptions
12734 gets pushed. */
12735
12736 static void
12737 ada_add_exceptions_from_frame (compiled_regex *preg,
12738 struct frame_info *frame,
12739 std::vector<ada_exc_info> *exceptions)
12740 {
12741 const struct block *block = get_frame_block (frame, 0);
12742
12743 while (block != 0)
12744 {
12745 struct block_iterator iter;
12746 struct symbol *sym;
12747
12748 ALL_BLOCK_SYMBOLS (block, iter, sym)
12749 {
12750 switch (SYMBOL_CLASS (sym))
12751 {
12752 case LOC_TYPEDEF:
12753 case LOC_BLOCK:
12754 case LOC_CONST:
12755 break;
12756 default:
12757 if (ada_is_exception_sym (sym))
12758 {
12759 struct ada_exc_info info = {sym->print_name (),
12760 SYMBOL_VALUE_ADDRESS (sym)};
12761
12762 exceptions->push_back (info);
12763 }
12764 }
12765 }
12766 if (BLOCK_FUNCTION (block) != NULL)
12767 break;
12768 block = BLOCK_SUPERBLOCK (block);
12769 }
12770 }
12771
12772 /* Return true if NAME matches PREG or if PREG is NULL. */
12773
12774 static bool
12775 name_matches_regex (const char *name, compiled_regex *preg)
12776 {
12777 return (preg == NULL
12778 || preg->exec (ada_decode (name).c_str (), 0, NULL, 0) == 0);
12779 }
12780
12781 /* Add all exceptions defined globally whose name name match
12782 a regular expression, excluding standard exceptions.
12783
12784 The reason we exclude standard exceptions is that they need
12785 to be handled separately: Standard exceptions are defined inside
12786 a runtime unit which is normally not compiled with debugging info,
12787 and thus usually do not show up in our symbol search. However,
12788 if the unit was in fact built with debugging info, we need to
12789 exclude them because they would duplicate the entry we found
12790 during the special loop that specifically searches for those
12791 standard exceptions.
12792
12793 If PREG is not NULL, then this regexp_t object is used to
12794 perform the symbol name matching. Otherwise, no name-based
12795 filtering is performed.
12796
12797 EXCEPTIONS is a vector of exceptions to which matching exceptions
12798 gets pushed. */
12799
12800 static void
12801 ada_add_global_exceptions (compiled_regex *preg,
12802 std::vector<ada_exc_info> *exceptions)
12803 {
12804 /* In Ada, the symbol "search name" is a linkage name, whereas the
12805 regular expression used to do the matching refers to the natural
12806 name. So match against the decoded name. */
12807 expand_symtabs_matching (NULL,
12808 lookup_name_info::match_any (),
12809 [&] (const char *search_name)
12810 {
12811 std::string decoded = ada_decode (search_name);
12812 return name_matches_regex (decoded.c_str (), preg);
12813 },
12814 NULL,
12815 VARIABLES_DOMAIN);
12816
12817 for (objfile *objfile : current_program_space->objfiles ())
12818 {
12819 for (compunit_symtab *s : objfile->compunits ())
12820 {
12821 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
12822 int i;
12823
12824 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12825 {
12826 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12827 struct block_iterator iter;
12828 struct symbol *sym;
12829
12830 ALL_BLOCK_SYMBOLS (b, iter, sym)
12831 if (ada_is_non_standard_exception_sym (sym)
12832 && name_matches_regex (sym->natural_name (), preg))
12833 {
12834 struct ada_exc_info info
12835 = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
12836
12837 exceptions->push_back (info);
12838 }
12839 }
12840 }
12841 }
12842 }
12843
12844 /* Implements ada_exceptions_list with the regular expression passed
12845 as a regex_t, rather than a string.
12846
12847 If not NULL, PREG is used to filter out exceptions whose names
12848 do not match. Otherwise, all exceptions are listed. */
12849
12850 static std::vector<ada_exc_info>
12851 ada_exceptions_list_1 (compiled_regex *preg)
12852 {
12853 std::vector<ada_exc_info> result;
12854 int prev_len;
12855
12856 /* First, list the known standard exceptions. These exceptions
12857 need to be handled separately, as they are usually defined in
12858 runtime units that have been compiled without debugging info. */
12859
12860 ada_add_standard_exceptions (preg, &result);
12861
12862 /* Next, find all exceptions whose scope is local and accessible
12863 from the currently selected frame. */
12864
12865 if (has_stack_frames ())
12866 {
12867 prev_len = result.size ();
12868 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12869 &result);
12870 if (result.size () > prev_len)
12871 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12872 }
12873
12874 /* Add all exceptions whose scope is global. */
12875
12876 prev_len = result.size ();
12877 ada_add_global_exceptions (preg, &result);
12878 if (result.size () > prev_len)
12879 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12880
12881 return result;
12882 }
12883
12884 /* Return a vector of ada_exc_info.
12885
12886 If REGEXP is NULL, all exceptions are included in the result.
12887 Otherwise, it should contain a valid regular expression,
12888 and only the exceptions whose names match that regular expression
12889 are included in the result.
12890
12891 The exceptions are sorted in the following order:
12892 - Standard exceptions (defined by the Ada language), in
12893 alphabetical order;
12894 - Exceptions only visible from the current frame, in
12895 alphabetical order;
12896 - Exceptions whose scope is global, in alphabetical order. */
12897
12898 std::vector<ada_exc_info>
12899 ada_exceptions_list (const char *regexp)
12900 {
12901 if (regexp == NULL)
12902 return ada_exceptions_list_1 (NULL);
12903
12904 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
12905 return ada_exceptions_list_1 (&reg);
12906 }
12907
12908 /* Implement the "info exceptions" command. */
12909
12910 static void
12911 info_exceptions_command (const char *regexp, int from_tty)
12912 {
12913 struct gdbarch *gdbarch = get_current_arch ();
12914
12915 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
12916
12917 if (regexp != NULL)
12918 printf_filtered
12919 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12920 else
12921 printf_filtered (_("All defined Ada exceptions:\n"));
12922
12923 for (const ada_exc_info &info : exceptions)
12924 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
12925 }
12926
12927 /* Operators */
12928 /* Information about operators given special treatment in functions
12929 below. */
12930 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
12931
12932 #define ADA_OPERATORS \
12933 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12934 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12935 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12936 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12937 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12938 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12939 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12940 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12941 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12942 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12943 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12944 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12945 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
12946 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
12947 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
12948 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
12949 OP_DEFN (OP_OTHERS, 1, 1, 0) \
12950 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
12951 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
12952
12953 static void
12954 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
12955 int *argsp)
12956 {
12957 switch (exp->elts[pc - 1].opcode)
12958 {
12959 default:
12960 operator_length_standard (exp, pc, oplenp, argsp);
12961 break;
12962
12963 #define OP_DEFN(op, len, args, binop) \
12964 case op: *oplenp = len; *argsp = args; break;
12965 ADA_OPERATORS;
12966 #undef OP_DEFN
12967
12968 case OP_AGGREGATE:
12969 *oplenp = 3;
12970 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
12971 break;
12972
12973 case OP_CHOICES:
12974 *oplenp = 3;
12975 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
12976 break;
12977 }
12978 }
12979
12980 /* Implementation of the exp_descriptor method operator_check. */
12981
12982 static int
12983 ada_operator_check (struct expression *exp, int pos,
12984 int (*objfile_func) (struct objfile *objfile, void *data),
12985 void *data)
12986 {
12987 const union exp_element *const elts = exp->elts;
12988 struct type *type = NULL;
12989
12990 switch (elts[pos].opcode)
12991 {
12992 case UNOP_IN_RANGE:
12993 case UNOP_QUAL:
12994 type = elts[pos + 1].type;
12995 break;
12996
12997 default:
12998 return operator_check_standard (exp, pos, objfile_func, data);
12999 }
13000
13001 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13002
13003 if (type != nullptr && type->objfile_owner () != nullptr
13004 && objfile_func (type->objfile_owner (), data))
13005 return 1;
13006
13007 return 0;
13008 }
13009
13010 /* As for operator_length, but assumes PC is pointing at the first
13011 element of the operator, and gives meaningful results only for the
13012 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
13013
13014 static void
13015 ada_forward_operator_length (struct expression *exp, int pc,
13016 int *oplenp, int *argsp)
13017 {
13018 switch (exp->elts[pc].opcode)
13019 {
13020 default:
13021 *oplenp = *argsp = 0;
13022 break;
13023
13024 #define OP_DEFN(op, len, args, binop) \
13025 case op: *oplenp = len; *argsp = args; break;
13026 ADA_OPERATORS;
13027 #undef OP_DEFN
13028
13029 case OP_AGGREGATE:
13030 *oplenp = 3;
13031 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13032 break;
13033
13034 case OP_CHOICES:
13035 *oplenp = 3;
13036 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13037 break;
13038
13039 case OP_STRING:
13040 case OP_NAME:
13041 {
13042 int len = longest_to_int (exp->elts[pc + 1].longconst);
13043
13044 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13045 *argsp = 0;
13046 break;
13047 }
13048 }
13049 }
13050
13051 static int
13052 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13053 {
13054 enum exp_opcode op = exp->elts[elt].opcode;
13055 int oplen, nargs;
13056 int pc = elt;
13057 int i;
13058
13059 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13060
13061 switch (op)
13062 {
13063 /* Ada attributes ('Foo). */
13064 case OP_ATR_FIRST:
13065 case OP_ATR_LAST:
13066 case OP_ATR_LENGTH:
13067 case OP_ATR_IMAGE:
13068 case OP_ATR_MAX:
13069 case OP_ATR_MIN:
13070 case OP_ATR_MODULUS:
13071 case OP_ATR_POS:
13072 case OP_ATR_SIZE:
13073 case OP_ATR_TAG:
13074 case OP_ATR_VAL:
13075 break;
13076
13077 case UNOP_IN_RANGE:
13078 case UNOP_QUAL:
13079 /* XXX: gdb_sprint_host_address, type_sprint */
13080 fprintf_filtered (stream, _("Type @"));
13081 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13082 fprintf_filtered (stream, " (");
13083 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13084 fprintf_filtered (stream, ")");
13085 break;
13086 case BINOP_IN_BOUNDS:
13087 fprintf_filtered (stream, " (%d)",
13088 longest_to_int (exp->elts[pc + 2].longconst));
13089 break;
13090 case TERNOP_IN_RANGE:
13091 break;
13092
13093 case OP_AGGREGATE:
13094 case OP_OTHERS:
13095 case OP_DISCRETE_RANGE:
13096 case OP_POSITIONAL:
13097 case OP_CHOICES:
13098 break;
13099
13100 case OP_NAME:
13101 case OP_STRING:
13102 {
13103 char *name = &exp->elts[elt + 2].string;
13104 int len = longest_to_int (exp->elts[elt + 1].longconst);
13105
13106 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13107 break;
13108 }
13109
13110 default:
13111 return dump_subexp_body_standard (exp, stream, elt);
13112 }
13113
13114 elt += oplen;
13115 for (i = 0; i < nargs; i += 1)
13116 elt = dump_subexp (exp, stream, elt);
13117
13118 return elt;
13119 }
13120
13121 /* The Ada extension of print_subexp (q.v.). */
13122
13123 static void
13124 ada_print_subexp (struct expression *exp, int *pos,
13125 struct ui_file *stream, enum precedence prec)
13126 {
13127 int oplen, nargs, i;
13128 int pc = *pos;
13129 enum exp_opcode op = exp->elts[pc].opcode;
13130
13131 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13132
13133 *pos += oplen;
13134 switch (op)
13135 {
13136 default:
13137 *pos -= oplen;
13138 print_subexp_standard (exp, pos, stream, prec);
13139 return;
13140
13141 case OP_VAR_VALUE:
13142 fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
13143 return;
13144
13145 case BINOP_IN_BOUNDS:
13146 /* XXX: sprint_subexp */
13147 print_subexp (exp, pos, stream, PREC_SUFFIX);
13148 fputs_filtered (" in ", stream);
13149 print_subexp (exp, pos, stream, PREC_SUFFIX);
13150 fputs_filtered ("'range", stream);
13151 if (exp->elts[pc + 1].longconst > 1)
13152 fprintf_filtered (stream, "(%ld)",
13153 (long) exp->elts[pc + 1].longconst);
13154 return;
13155
13156 case TERNOP_IN_RANGE:
13157 if (prec >= PREC_EQUAL)
13158 fputs_filtered ("(", stream);
13159 /* XXX: sprint_subexp */
13160 print_subexp (exp, pos, stream, PREC_SUFFIX);
13161 fputs_filtered (" in ", stream);
13162 print_subexp (exp, pos, stream, PREC_EQUAL);
13163 fputs_filtered (" .. ", stream);
13164 print_subexp (exp, pos, stream, PREC_EQUAL);
13165 if (prec >= PREC_EQUAL)
13166 fputs_filtered (")", stream);
13167 return;
13168
13169 case OP_ATR_FIRST:
13170 case OP_ATR_LAST:
13171 case OP_ATR_LENGTH:
13172 case OP_ATR_IMAGE:
13173 case OP_ATR_MAX:
13174 case OP_ATR_MIN:
13175 case OP_ATR_MODULUS:
13176 case OP_ATR_POS:
13177 case OP_ATR_SIZE:
13178 case OP_ATR_TAG:
13179 case OP_ATR_VAL:
13180 if (exp->elts[*pos].opcode == OP_TYPE)
13181 {
13182 if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID)
13183 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13184 &type_print_raw_options);
13185 *pos += 3;
13186 }
13187 else
13188 print_subexp (exp, pos, stream, PREC_SUFFIX);
13189 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13190 if (nargs > 1)
13191 {
13192 int tem;
13193
13194 for (tem = 1; tem < nargs; tem += 1)
13195 {
13196 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13197 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13198 }
13199 fputs_filtered (")", stream);
13200 }
13201 return;
13202
13203 case UNOP_QUAL:
13204 type_print (exp->elts[pc + 1].type, "", stream, 0);
13205 fputs_filtered ("'(", stream);
13206 print_subexp (exp, pos, stream, PREC_PREFIX);
13207 fputs_filtered (")", stream);
13208 return;
13209
13210 case UNOP_IN_RANGE:
13211 /* XXX: sprint_subexp */
13212 print_subexp (exp, pos, stream, PREC_SUFFIX);
13213 fputs_filtered (" in ", stream);
13214 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13215 &type_print_raw_options);
13216 return;
13217
13218 case OP_DISCRETE_RANGE:
13219 print_subexp (exp, pos, stream, PREC_SUFFIX);
13220 fputs_filtered ("..", stream);
13221 print_subexp (exp, pos, stream, PREC_SUFFIX);
13222 return;
13223
13224 case OP_OTHERS:
13225 fputs_filtered ("others => ", stream);
13226 print_subexp (exp, pos, stream, PREC_SUFFIX);
13227 return;
13228
13229 case OP_CHOICES:
13230 for (i = 0; i < nargs-1; i += 1)
13231 {
13232 if (i > 0)
13233 fputs_filtered ("|", stream);
13234 print_subexp (exp, pos, stream, PREC_SUFFIX);
13235 }
13236 fputs_filtered (" => ", stream);
13237 print_subexp (exp, pos, stream, PREC_SUFFIX);
13238 return;
13239
13240 case OP_POSITIONAL:
13241 print_subexp (exp, pos, stream, PREC_SUFFIX);
13242 return;
13243
13244 case OP_AGGREGATE:
13245 fputs_filtered ("(", stream);
13246 for (i = 0; i < nargs; i += 1)
13247 {
13248 if (i > 0)
13249 fputs_filtered (", ", stream);
13250 print_subexp (exp, pos, stream, PREC_SUFFIX);
13251 }
13252 fputs_filtered (")", stream);
13253 return;
13254 }
13255 }
13256
13257 /* Table mapping opcodes into strings for printing operators
13258 and precedences of the operators. */
13259
13260 static const struct op_print ada_op_print_tab[] = {
13261 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13262 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13263 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13264 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13265 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13266 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13267 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13268 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13269 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13270 {">=", BINOP_GEQ, PREC_ORDER, 0},
13271 {">", BINOP_GTR, PREC_ORDER, 0},
13272 {"<", BINOP_LESS, PREC_ORDER, 0},
13273 {">>", BINOP_RSH, PREC_SHIFT, 0},
13274 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13275 {"+", BINOP_ADD, PREC_ADD, 0},
13276 {"-", BINOP_SUB, PREC_ADD, 0},
13277 {"&", BINOP_CONCAT, PREC_ADD, 0},
13278 {"*", BINOP_MUL, PREC_MUL, 0},
13279 {"/", BINOP_DIV, PREC_MUL, 0},
13280 {"rem", BINOP_REM, PREC_MUL, 0},
13281 {"mod", BINOP_MOD, PREC_MUL, 0},
13282 {"**", BINOP_EXP, PREC_REPEAT, 0},
13283 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13284 {"-", UNOP_NEG, PREC_PREFIX, 0},
13285 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13286 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13287 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13288 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13289 {".all", UNOP_IND, PREC_SUFFIX, 1},
13290 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13291 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13292 {NULL, OP_NULL, PREC_SUFFIX, 0}
13293 };
13294 \f
13295 /* Language vector */
13296
13297 static const struct exp_descriptor ada_exp_descriptor = {
13298 ada_print_subexp,
13299 ada_operator_length,
13300 ada_operator_check,
13301 ada_dump_subexp_body,
13302 ada_evaluate_subexp
13303 };
13304
13305 /* symbol_name_matcher_ftype adapter for wild_match. */
13306
13307 static bool
13308 do_wild_match (const char *symbol_search_name,
13309 const lookup_name_info &lookup_name,
13310 completion_match_result *comp_match_res)
13311 {
13312 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
13313 }
13314
13315 /* symbol_name_matcher_ftype adapter for full_match. */
13316
13317 static bool
13318 do_full_match (const char *symbol_search_name,
13319 const lookup_name_info &lookup_name,
13320 completion_match_result *comp_match_res)
13321 {
13322 const char *lname = lookup_name.ada ().lookup_name ().c_str ();
13323
13324 /* If both symbols start with "_ada_", just let the loop below
13325 handle the comparison. However, if only the symbol name starts
13326 with "_ada_", skip the prefix and let the match proceed as
13327 usual. */
13328 if (startswith (symbol_search_name, "_ada_")
13329 && !startswith (lname, "_ada"))
13330 symbol_search_name += 5;
13331
13332 int uscore_count = 0;
13333 while (*lname != '\0')
13334 {
13335 if (*symbol_search_name != *lname)
13336 {
13337 if (*symbol_search_name == 'B' && uscore_count == 2
13338 && symbol_search_name[1] == '_')
13339 {
13340 symbol_search_name += 2;
13341 while (isdigit (*symbol_search_name))
13342 ++symbol_search_name;
13343 if (symbol_search_name[0] == '_'
13344 && symbol_search_name[1] == '_')
13345 {
13346 symbol_search_name += 2;
13347 continue;
13348 }
13349 }
13350 return false;
13351 }
13352
13353 if (*symbol_search_name == '_')
13354 ++uscore_count;
13355 else
13356 uscore_count = 0;
13357
13358 ++symbol_search_name;
13359 ++lname;
13360 }
13361
13362 return is_name_suffix (symbol_search_name);
13363 }
13364
13365 /* symbol_name_matcher_ftype for exact (verbatim) matches. */
13366
13367 static bool
13368 do_exact_match (const char *symbol_search_name,
13369 const lookup_name_info &lookup_name,
13370 completion_match_result *comp_match_res)
13371 {
13372 return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
13373 }
13374
13375 /* Build the Ada lookup name for LOOKUP_NAME. */
13376
13377 ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
13378 {
13379 gdb::string_view user_name = lookup_name.name ();
13380
13381 if (!user_name.empty () && user_name[0] == '<')
13382 {
13383 if (user_name.back () == '>')
13384 m_encoded_name
13385 = gdb::to_string (user_name.substr (1, user_name.size () - 2));
13386 else
13387 m_encoded_name
13388 = gdb::to_string (user_name.substr (1, user_name.size () - 1));
13389 m_encoded_p = true;
13390 m_verbatim_p = true;
13391 m_wild_match_p = false;
13392 m_standard_p = false;
13393 }
13394 else
13395 {
13396 m_verbatim_p = false;
13397
13398 m_encoded_p = user_name.find ("__") != gdb::string_view::npos;
13399
13400 if (!m_encoded_p)
13401 {
13402 const char *folded = ada_fold_name (user_name);
13403 m_encoded_name = ada_encode_1 (folded, false);
13404 if (m_encoded_name.empty ())
13405 m_encoded_name = gdb::to_string (user_name);
13406 }
13407 else
13408 m_encoded_name = gdb::to_string (user_name);
13409
13410 /* Handle the 'package Standard' special case. See description
13411 of m_standard_p. */
13412 if (startswith (m_encoded_name.c_str (), "standard__"))
13413 {
13414 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
13415 m_standard_p = true;
13416 }
13417 else
13418 m_standard_p = false;
13419
13420 /* If the name contains a ".", then the user is entering a fully
13421 qualified entity name, and the match must not be done in wild
13422 mode. Similarly, if the user wants to complete what looks
13423 like an encoded name, the match must not be done in wild
13424 mode. Also, in the standard__ special case always do
13425 non-wild matching. */
13426 m_wild_match_p
13427 = (lookup_name.match_type () != symbol_name_match_type::FULL
13428 && !m_encoded_p
13429 && !m_standard_p
13430 && user_name.find ('.') == std::string::npos);
13431 }
13432 }
13433
13434 /* symbol_name_matcher_ftype method for Ada. This only handles
13435 completion mode. */
13436
13437 static bool
13438 ada_symbol_name_matches (const char *symbol_search_name,
13439 const lookup_name_info &lookup_name,
13440 completion_match_result *comp_match_res)
13441 {
13442 return lookup_name.ada ().matches (symbol_search_name,
13443 lookup_name.match_type (),
13444 comp_match_res);
13445 }
13446
13447 /* A name matcher that matches the symbol name exactly, with
13448 strcmp. */
13449
13450 static bool
13451 literal_symbol_name_matcher (const char *symbol_search_name,
13452 const lookup_name_info &lookup_name,
13453 completion_match_result *comp_match_res)
13454 {
13455 gdb::string_view name_view = lookup_name.name ();
13456
13457 if (lookup_name.completion_mode ()
13458 ? (strncmp (symbol_search_name, name_view.data (),
13459 name_view.size ()) == 0)
13460 : symbol_search_name == name_view)
13461 {
13462 if (comp_match_res != NULL)
13463 comp_match_res->set_match (symbol_search_name);
13464 return true;
13465 }
13466 else
13467 return false;
13468 }
13469
13470 /* Implement the "get_symbol_name_matcher" language_defn method for
13471 Ada. */
13472
13473 static symbol_name_matcher_ftype *
13474 ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
13475 {
13476 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
13477 return literal_symbol_name_matcher;
13478
13479 if (lookup_name.completion_mode ())
13480 return ada_symbol_name_matches;
13481 else
13482 {
13483 if (lookup_name.ada ().wild_match_p ())
13484 return do_wild_match;
13485 else if (lookup_name.ada ().verbatim_p ())
13486 return do_exact_match;
13487 else
13488 return do_full_match;
13489 }
13490 }
13491
13492 /* Class representing the Ada language. */
13493
13494 class ada_language : public language_defn
13495 {
13496 public:
13497 ada_language ()
13498 : language_defn (language_ada)
13499 { /* Nothing. */ }
13500
13501 /* See language.h. */
13502
13503 const char *name () const override
13504 { return "ada"; }
13505
13506 /* See language.h. */
13507
13508 const char *natural_name () const override
13509 { return "Ada"; }
13510
13511 /* See language.h. */
13512
13513 const std::vector<const char *> &filename_extensions () const override
13514 {
13515 static const std::vector<const char *> extensions
13516 = { ".adb", ".ads", ".a", ".ada", ".dg" };
13517 return extensions;
13518 }
13519
13520 /* Print an array element index using the Ada syntax. */
13521
13522 void print_array_index (struct type *index_type,
13523 LONGEST index,
13524 struct ui_file *stream,
13525 const value_print_options *options) const override
13526 {
13527 struct value *index_value = val_atr (index_type, index);
13528
13529 value_print (index_value, stream, options);
13530 fprintf_filtered (stream, " => ");
13531 }
13532
13533 /* Implement the "read_var_value" language_defn method for Ada. */
13534
13535 struct value *read_var_value (struct symbol *var,
13536 const struct block *var_block,
13537 struct frame_info *frame) const override
13538 {
13539 /* The only case where default_read_var_value is not sufficient
13540 is when VAR is a renaming... */
13541 if (frame != nullptr)
13542 {
13543 const struct block *frame_block = get_frame_block (frame, NULL);
13544 if (frame_block != nullptr && ada_is_renaming_symbol (var))
13545 return ada_read_renaming_var_value (var, frame_block);
13546 }
13547
13548 /* This is a typical case where we expect the default_read_var_value
13549 function to work. */
13550 return language_defn::read_var_value (var, var_block, frame);
13551 }
13552
13553 /* See language.h. */
13554 void language_arch_info (struct gdbarch *gdbarch,
13555 struct language_arch_info *lai) const override
13556 {
13557 const struct builtin_type *builtin = builtin_type (gdbarch);
13558
13559 /* Helper function to allow shorter lines below. */
13560 auto add = [&] (struct type *t)
13561 {
13562 lai->add_primitive_type (t);
13563 };
13564
13565 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13566 0, "integer"));
13567 add (arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13568 0, "long_integer"));
13569 add (arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13570 0, "short_integer"));
13571 struct type *char_type = arch_character_type (gdbarch, TARGET_CHAR_BIT,
13572 0, "character");
13573 lai->set_string_char_type (char_type);
13574 add (char_type);
13575 add (arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13576 "float", gdbarch_float_format (gdbarch)));
13577 add (arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13578 "long_float", gdbarch_double_format (gdbarch)));
13579 add (arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13580 0, "long_long_integer"));
13581 add (arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
13582 "long_long_float",
13583 gdbarch_long_double_format (gdbarch)));
13584 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13585 0, "natural"));
13586 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13587 0, "positive"));
13588 add (builtin->builtin_void);
13589
13590 struct type *system_addr_ptr
13591 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
13592 "void"));
13593 system_addr_ptr->set_name ("system__address");
13594 add (system_addr_ptr);
13595
13596 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
13597 type. This is a signed integral type whose size is the same as
13598 the size of addresses. */
13599 unsigned int addr_length = TYPE_LENGTH (system_addr_ptr);
13600 add (arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
13601 "storage_offset"));
13602
13603 lai->set_bool_type (builtin->builtin_bool);
13604 }
13605
13606 /* See language.h. */
13607
13608 bool iterate_over_symbols
13609 (const struct block *block, const lookup_name_info &name,
13610 domain_enum domain,
13611 gdb::function_view<symbol_found_callback_ftype> callback) const override
13612 {
13613 std::vector<struct block_symbol> results
13614 = ada_lookup_symbol_list_worker (name, block, domain, 0);
13615 for (block_symbol &sym : results)
13616 {
13617 if (!callback (&sym))
13618 return false;
13619 }
13620
13621 return true;
13622 }
13623
13624 /* See language.h. */
13625 bool sniff_from_mangled_name (const char *mangled,
13626 char **out) const override
13627 {
13628 std::string demangled = ada_decode (mangled);
13629
13630 *out = NULL;
13631
13632 if (demangled != mangled && demangled[0] != '<')
13633 {
13634 /* Set the gsymbol language to Ada, but still return 0.
13635 Two reasons for that:
13636
13637 1. For Ada, we prefer computing the symbol's decoded name
13638 on the fly rather than pre-compute it, in order to save
13639 memory (Ada projects are typically very large).
13640
13641 2. There are some areas in the definition of the GNAT
13642 encoding where, with a bit of bad luck, we might be able
13643 to decode a non-Ada symbol, generating an incorrect
13644 demangled name (Eg: names ending with "TB" for instance
13645 are identified as task bodies and so stripped from
13646 the decoded name returned).
13647
13648 Returning true, here, but not setting *DEMANGLED, helps us get
13649 a little bit of the best of both worlds. Because we're last,
13650 we should not affect any of the other languages that were
13651 able to demangle the symbol before us; we get to correctly
13652 tag Ada symbols as such; and even if we incorrectly tagged a
13653 non-Ada symbol, which should be rare, any routing through the
13654 Ada language should be transparent (Ada tries to behave much
13655 like C/C++ with non-Ada symbols). */
13656 return true;
13657 }
13658
13659 return false;
13660 }
13661
13662 /* See language.h. */
13663
13664 char *demangle_symbol (const char *mangled, int options) const override
13665 {
13666 return ada_la_decode (mangled, options);
13667 }
13668
13669 /* See language.h. */
13670
13671 void print_type (struct type *type, const char *varstring,
13672 struct ui_file *stream, int show, int level,
13673 const struct type_print_options *flags) const override
13674 {
13675 ada_print_type (type, varstring, stream, show, level, flags);
13676 }
13677
13678 /* See language.h. */
13679
13680 const char *word_break_characters (void) const override
13681 {
13682 return ada_completer_word_break_characters;
13683 }
13684
13685 /* See language.h. */
13686
13687 void collect_symbol_completion_matches (completion_tracker &tracker,
13688 complete_symbol_mode mode,
13689 symbol_name_match_type name_match_type,
13690 const char *text, const char *word,
13691 enum type_code code) const override
13692 {
13693 struct symbol *sym;
13694 const struct block *b, *surrounding_static_block = 0;
13695 struct block_iterator iter;
13696
13697 gdb_assert (code == TYPE_CODE_UNDEF);
13698
13699 lookup_name_info lookup_name (text, name_match_type, true);
13700
13701 /* First, look at the partial symtab symbols. */
13702 expand_symtabs_matching (NULL,
13703 lookup_name,
13704 NULL,
13705 NULL,
13706 ALL_DOMAIN);
13707
13708 /* At this point scan through the misc symbol vectors and add each
13709 symbol you find to the list. Eventually we want to ignore
13710 anything that isn't a text symbol (everything else will be
13711 handled by the psymtab code above). */
13712
13713 for (objfile *objfile : current_program_space->objfiles ())
13714 {
13715 for (minimal_symbol *msymbol : objfile->msymbols ())
13716 {
13717 QUIT;
13718
13719 if (completion_skip_symbol (mode, msymbol))
13720 continue;
13721
13722 language symbol_language = msymbol->language ();
13723
13724 /* Ada minimal symbols won't have their language set to Ada. If
13725 we let completion_list_add_name compare using the
13726 default/C-like matcher, then when completing e.g., symbols in a
13727 package named "pck", we'd match internal Ada symbols like
13728 "pckS", which are invalid in an Ada expression, unless you wrap
13729 them in '<' '>' to request a verbatim match.
13730
13731 Unfortunately, some Ada encoded names successfully demangle as
13732 C++ symbols (using an old mangling scheme), such as "name__2Xn"
13733 -> "Xn::name(void)" and thus some Ada minimal symbols end up
13734 with the wrong language set. Paper over that issue here. */
13735 if (symbol_language == language_auto
13736 || symbol_language == language_cplus)
13737 symbol_language = language_ada;
13738
13739 completion_list_add_name (tracker,
13740 symbol_language,
13741 msymbol->linkage_name (),
13742 lookup_name, text, word);
13743 }
13744 }
13745
13746 /* Search upwards from currently selected frame (so that we can
13747 complete on local vars. */
13748
13749 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
13750 {
13751 if (!BLOCK_SUPERBLOCK (b))
13752 surrounding_static_block = b; /* For elmin of dups */
13753
13754 ALL_BLOCK_SYMBOLS (b, iter, sym)
13755 {
13756 if (completion_skip_symbol (mode, sym))
13757 continue;
13758
13759 completion_list_add_name (tracker,
13760 sym->language (),
13761 sym->linkage_name (),
13762 lookup_name, text, word);
13763 }
13764 }
13765
13766 /* Go through the symtabs and check the externs and statics for
13767 symbols which match. */
13768
13769 for (objfile *objfile : current_program_space->objfiles ())
13770 {
13771 for (compunit_symtab *s : objfile->compunits ())
13772 {
13773 QUIT;
13774 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
13775 ALL_BLOCK_SYMBOLS (b, iter, sym)
13776 {
13777 if (completion_skip_symbol (mode, sym))
13778 continue;
13779
13780 completion_list_add_name (tracker,
13781 sym->language (),
13782 sym->linkage_name (),
13783 lookup_name, text, word);
13784 }
13785 }
13786 }
13787
13788 for (objfile *objfile : current_program_space->objfiles ())
13789 {
13790 for (compunit_symtab *s : objfile->compunits ())
13791 {
13792 QUIT;
13793 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
13794 /* Don't do this block twice. */
13795 if (b == surrounding_static_block)
13796 continue;
13797 ALL_BLOCK_SYMBOLS (b, iter, sym)
13798 {
13799 if (completion_skip_symbol (mode, sym))
13800 continue;
13801
13802 completion_list_add_name (tracker,
13803 sym->language (),
13804 sym->linkage_name (),
13805 lookup_name, text, word);
13806 }
13807 }
13808 }
13809 }
13810
13811 /* See language.h. */
13812
13813 gdb::unique_xmalloc_ptr<char> watch_location_expression
13814 (struct type *type, CORE_ADDR addr) const override
13815 {
13816 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
13817 std::string name = type_to_string (type);
13818 return gdb::unique_xmalloc_ptr<char>
13819 (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
13820 }
13821
13822 /* See language.h. */
13823
13824 void value_print (struct value *val, struct ui_file *stream,
13825 const struct value_print_options *options) const override
13826 {
13827 return ada_value_print (val, stream, options);
13828 }
13829
13830 /* See language.h. */
13831
13832 void value_print_inner
13833 (struct value *val, struct ui_file *stream, int recurse,
13834 const struct value_print_options *options) const override
13835 {
13836 return ada_value_print_inner (val, stream, recurse, options);
13837 }
13838
13839 /* See language.h. */
13840
13841 struct block_symbol lookup_symbol_nonlocal
13842 (const char *name, const struct block *block,
13843 const domain_enum domain) const override
13844 {
13845 struct block_symbol sym;
13846
13847 sym = ada_lookup_symbol (name, block_static_block (block), domain);
13848 if (sym.symbol != NULL)
13849 return sym;
13850
13851 /* If we haven't found a match at this point, try the primitive
13852 types. In other languages, this search is performed before
13853 searching for global symbols in order to short-circuit that
13854 global-symbol search if it happens that the name corresponds
13855 to a primitive type. But we cannot do the same in Ada, because
13856 it is perfectly legitimate for a program to declare a type which
13857 has the same name as a standard type. If looking up a type in
13858 that situation, we have traditionally ignored the primitive type
13859 in favor of user-defined types. This is why, unlike most other
13860 languages, we search the primitive types this late and only after
13861 having searched the global symbols without success. */
13862
13863 if (domain == VAR_DOMAIN)
13864 {
13865 struct gdbarch *gdbarch;
13866
13867 if (block == NULL)
13868 gdbarch = target_gdbarch ();
13869 else
13870 gdbarch = block_gdbarch (block);
13871 sym.symbol
13872 = language_lookup_primitive_type_as_symbol (this, gdbarch, name);
13873 if (sym.symbol != NULL)
13874 return sym;
13875 }
13876
13877 return {};
13878 }
13879
13880 /* See language.h. */
13881
13882 int parser (struct parser_state *ps) const override
13883 {
13884 warnings_issued = 0;
13885 return ada_parse (ps);
13886 }
13887
13888 /* See language.h.
13889
13890 Same as evaluate_type (*EXP), but resolves ambiguous symbol references
13891 (marked by OP_VAR_VALUE nodes in which the symbol has an undefined
13892 namespace) and converts operators that are user-defined into
13893 appropriate function calls. If CONTEXT_TYPE is non-null, it provides
13894 a preferred result type [at the moment, only type void has any
13895 effect---causing procedures to be preferred over functions in calls].
13896 A null CONTEXT_TYPE indicates that a non-void return type is
13897 preferred. May change (expand) *EXP. */
13898
13899 void post_parser (expression_up *expp, struct parser_state *ps)
13900 const override
13901 {
13902 struct type *context_type = NULL;
13903 int pc = 0;
13904
13905 if (ps->void_context_p)
13906 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
13907
13908 resolve_subexp (expp, &pc, 1, context_type, ps->parse_completion,
13909 ps->block_tracker);
13910 }
13911
13912 /* See language.h. */
13913
13914 void emitchar (int ch, struct type *chtype,
13915 struct ui_file *stream, int quoter) const override
13916 {
13917 ada_emit_char (ch, chtype, stream, quoter, 1);
13918 }
13919
13920 /* See language.h. */
13921
13922 void printchar (int ch, struct type *chtype,
13923 struct ui_file *stream) const override
13924 {
13925 ada_printchar (ch, chtype, stream);
13926 }
13927
13928 /* See language.h. */
13929
13930 void printstr (struct ui_file *stream, struct type *elttype,
13931 const gdb_byte *string, unsigned int length,
13932 const char *encoding, int force_ellipses,
13933 const struct value_print_options *options) const override
13934 {
13935 ada_printstr (stream, elttype, string, length, encoding,
13936 force_ellipses, options);
13937 }
13938
13939 /* See language.h. */
13940
13941 void print_typedef (struct type *type, struct symbol *new_symbol,
13942 struct ui_file *stream) const override
13943 {
13944 ada_print_typedef (type, new_symbol, stream);
13945 }
13946
13947 /* See language.h. */
13948
13949 bool is_string_type_p (struct type *type) const override
13950 {
13951 return ada_is_string_type (type);
13952 }
13953
13954 /* See language.h. */
13955
13956 const char *struct_too_deep_ellipsis () const override
13957 { return "(...)"; }
13958
13959 /* See language.h. */
13960
13961 bool c_style_arrays_p () const override
13962 { return false; }
13963
13964 /* See language.h. */
13965
13966 bool store_sym_names_in_linkage_form_p () const override
13967 { return true; }
13968
13969 /* See language.h. */
13970
13971 const struct lang_varobj_ops *varobj_ops () const override
13972 { return &ada_varobj_ops; }
13973
13974 /* See language.h. */
13975
13976 const struct exp_descriptor *expression_ops () const override
13977 { return &ada_exp_descriptor; }
13978
13979 /* See language.h. */
13980
13981 const struct op_print *opcode_print_table () const override
13982 { return ada_op_print_tab; }
13983
13984 protected:
13985 /* See language.h. */
13986
13987 symbol_name_matcher_ftype *get_symbol_name_matcher_inner
13988 (const lookup_name_info &lookup_name) const override
13989 {
13990 return ada_get_symbol_name_matcher (lookup_name);
13991 }
13992 };
13993
13994 /* Single instance of the Ada language class. */
13995
13996 static ada_language ada_language_defn;
13997
13998 /* Command-list for the "set/show ada" prefix command. */
13999 static struct cmd_list_element *set_ada_list;
14000 static struct cmd_list_element *show_ada_list;
14001
14002 static void
14003 initialize_ada_catchpoint_ops (void)
14004 {
14005 struct breakpoint_ops *ops;
14006
14007 initialize_breakpoint_ops ();
14008
14009 ops = &catch_exception_breakpoint_ops;
14010 *ops = bkpt_breakpoint_ops;
14011 ops->allocate_location = allocate_location_exception;
14012 ops->re_set = re_set_exception;
14013 ops->check_status = check_status_exception;
14014 ops->print_it = print_it_exception;
14015 ops->print_one = print_one_exception;
14016 ops->print_mention = print_mention_exception;
14017 ops->print_recreate = print_recreate_exception;
14018
14019 ops = &catch_exception_unhandled_breakpoint_ops;
14020 *ops = bkpt_breakpoint_ops;
14021 ops->allocate_location = allocate_location_exception;
14022 ops->re_set = re_set_exception;
14023 ops->check_status = check_status_exception;
14024 ops->print_it = print_it_exception;
14025 ops->print_one = print_one_exception;
14026 ops->print_mention = print_mention_exception;
14027 ops->print_recreate = print_recreate_exception;
14028
14029 ops = &catch_assert_breakpoint_ops;
14030 *ops = bkpt_breakpoint_ops;
14031 ops->allocate_location = allocate_location_exception;
14032 ops->re_set = re_set_exception;
14033 ops->check_status = check_status_exception;
14034 ops->print_it = print_it_exception;
14035 ops->print_one = print_one_exception;
14036 ops->print_mention = print_mention_exception;
14037 ops->print_recreate = print_recreate_exception;
14038
14039 ops = &catch_handlers_breakpoint_ops;
14040 *ops = bkpt_breakpoint_ops;
14041 ops->allocate_location = allocate_location_exception;
14042 ops->re_set = re_set_exception;
14043 ops->check_status = check_status_exception;
14044 ops->print_it = print_it_exception;
14045 ops->print_one = print_one_exception;
14046 ops->print_mention = print_mention_exception;
14047 ops->print_recreate = print_recreate_exception;
14048 }
14049
14050 /* This module's 'new_objfile' observer. */
14051
14052 static void
14053 ada_new_objfile_observer (struct objfile *objfile)
14054 {
14055 ada_clear_symbol_cache ();
14056 }
14057
14058 /* This module's 'free_objfile' observer. */
14059
14060 static void
14061 ada_free_objfile_observer (struct objfile *objfile)
14062 {
14063 ada_clear_symbol_cache ();
14064 }
14065
14066 void _initialize_ada_language ();
14067 void
14068 _initialize_ada_language ()
14069 {
14070 initialize_ada_catchpoint_ops ();
14071
14072 add_basic_prefix_cmd ("ada", no_class,
14073 _("Prefix command for changing Ada-specific settings."),
14074 &set_ada_list, "set ada ", 0, &setlist);
14075
14076 add_show_prefix_cmd ("ada", no_class,
14077 _("Generic command for showing Ada-specific settings."),
14078 &show_ada_list, "show ada ", 0, &showlist);
14079
14080 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14081 &trust_pad_over_xvs, _("\
14082 Enable or disable an optimization trusting PAD types over XVS types."), _("\
14083 Show whether an optimization trusting PAD types over XVS types is activated."),
14084 _("\
14085 This is related to the encoding used by the GNAT compiler. The debugger\n\
14086 should normally trust the contents of PAD types, but certain older versions\n\
14087 of GNAT have a bug that sometimes causes the information in the PAD type\n\
14088 to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14089 work around this bug. It is always safe to turn this option \"off\", but\n\
14090 this incurs a slight performance penalty, so it is recommended to NOT change\n\
14091 this option to \"off\" unless necessary."),
14092 NULL, NULL, &set_ada_list, &show_ada_list);
14093
14094 add_setshow_boolean_cmd ("print-signatures", class_vars,
14095 &print_signatures, _("\
14096 Enable or disable the output of formal and return types for functions in the \
14097 overloads selection menu."), _("\
14098 Show whether the output of formal and return types for functions in the \
14099 overloads selection menu is activated."),
14100 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14101
14102 add_catch_command ("exception", _("\
14103 Catch Ada exceptions, when raised.\n\
14104 Usage: catch exception [ARG] [if CONDITION]\n\
14105 Without any argument, stop when any Ada exception is raised.\n\
14106 If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14107 being raised does not have a handler (and will therefore lead to the task's\n\
14108 termination).\n\
14109 Otherwise, the catchpoint only stops when the name of the exception being\n\
14110 raised is the same as ARG.\n\
14111 CONDITION is a boolean expression that is evaluated to see whether the\n\
14112 exception should cause a stop."),
14113 catch_ada_exception_command,
14114 catch_ada_completer,
14115 CATCH_PERMANENT,
14116 CATCH_TEMPORARY);
14117
14118 add_catch_command ("handlers", _("\
14119 Catch Ada exceptions, when handled.\n\
14120 Usage: catch handlers [ARG] [if CONDITION]\n\
14121 Without any argument, stop when any Ada exception is handled.\n\
14122 With an argument, catch only exceptions with the given name.\n\
14123 CONDITION is a boolean expression that is evaluated to see whether the\n\
14124 exception should cause a stop."),
14125 catch_ada_handlers_command,
14126 catch_ada_completer,
14127 CATCH_PERMANENT,
14128 CATCH_TEMPORARY);
14129 add_catch_command ("assert", _("\
14130 Catch failed Ada assertions, when raised.\n\
14131 Usage: catch assert [if CONDITION]\n\
14132 CONDITION is a boolean expression that is evaluated to see whether the\n\
14133 exception should cause a stop."),
14134 catch_assert_command,
14135 NULL,
14136 CATCH_PERMANENT,
14137 CATCH_TEMPORARY);
14138
14139 varsize_limit = 65536;
14140 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14141 &varsize_limit, _("\
14142 Set the maximum number of bytes allowed in a variable-size object."), _("\
14143 Show the maximum number of bytes allowed in a variable-size object."), _("\
14144 Attempts to access an object whose size is not a compile-time constant\n\
14145 and exceeds this limit will cause an error."),
14146 NULL, NULL, &setlist, &showlist);
14147
14148 add_info ("exceptions", info_exceptions_command,
14149 _("\
14150 List all Ada exception names.\n\
14151 Usage: info exceptions [REGEXP]\n\
14152 If a regular expression is passed as an argument, only those matching\n\
14153 the regular expression are listed."));
14154
14155 add_basic_prefix_cmd ("ada", class_maintenance,
14156 _("Set Ada maintenance-related variables."),
14157 &maint_set_ada_cmdlist, "maintenance set ada ",
14158 0/*allow-unknown*/, &maintenance_set_cmdlist);
14159
14160 add_show_prefix_cmd ("ada", class_maintenance,
14161 _("Show Ada maintenance-related variables."),
14162 &maint_show_ada_cmdlist, "maintenance show ada ",
14163 0/*allow-unknown*/, &maintenance_show_cmdlist);
14164
14165 add_setshow_boolean_cmd
14166 ("ignore-descriptive-types", class_maintenance,
14167 &ada_ignore_descriptive_types_p,
14168 _("Set whether descriptive types generated by GNAT should be ignored."),
14169 _("Show whether descriptive types generated by GNAT should be ignored."),
14170 _("\
14171 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14172 DWARF attribute."),
14173 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14174
14175 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14176 NULL, xcalloc, xfree);
14177
14178 /* The ada-lang observers. */
14179 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14180 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14181 gdb::observers::inferior_exit.attach (ada_inferior_exit);
14182 }
This page took 0.362514 seconds and 4 git commands to generate.