gas: support for the sparc %ncc condition codes register.
[deliverable/binutils-gdb.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.
2
3 Copyright (C) 1992-2015 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 "demangle.h"
24 #include "gdb_regex.h"
25 #include "frame.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "gdbcmd.h"
29 #include "expression.h"
30 #include "parser-defs.h"
31 #include "language.h"
32 #include "varobj.h"
33 #include "c-lang.h"
34 #include "inferior.h"
35 #include "symfile.h"
36 #include "objfiles.h"
37 #include "breakpoint.h"
38 #include "gdbcore.h"
39 #include "hashtab.h"
40 #include "gdb_obstack.h"
41 #include "ada-lang.h"
42 #include "completer.h"
43 #include <sys/stat.h>
44 #include "ui-out.h"
45 #include "block.h"
46 #include "infcall.h"
47 #include "dictionary.h"
48 #include "annotate.h"
49 #include "valprint.h"
50 #include "source.h"
51 #include "observer.h"
52 #include "vec.h"
53 #include "stack.h"
54 #include "gdb_vecs.h"
55 #include "typeprint.h"
56
57 #include "psymtab.h"
58 #include "value.h"
59 #include "mi/mi-common.h"
60 #include "arch-utils.h"
61 #include "cli/cli-utils.h"
62
63 /* Define whether or not the C operator '/' truncates towards zero for
64 differently signed operands (truncation direction is undefined in C).
65 Copied from valarith.c. */
66
67 #ifndef TRUNCATION_TOWARDS_ZERO
68 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
69 #endif
70
71 static struct type *desc_base_type (struct type *);
72
73 static struct type *desc_bounds_type (struct type *);
74
75 static struct value *desc_bounds (struct value *);
76
77 static int fat_pntr_bounds_bitpos (struct type *);
78
79 static int fat_pntr_bounds_bitsize (struct type *);
80
81 static struct type *desc_data_target_type (struct type *);
82
83 static struct value *desc_data (struct value *);
84
85 static int fat_pntr_data_bitpos (struct type *);
86
87 static int fat_pntr_data_bitsize (struct type *);
88
89 static struct value *desc_one_bound (struct value *, int, int);
90
91 static int desc_bound_bitpos (struct type *, int, int);
92
93 static int desc_bound_bitsize (struct type *, int, int);
94
95 static struct type *desc_index_type (struct type *, int);
96
97 static int desc_arity (struct type *);
98
99 static int ada_type_match (struct type *, struct type *, int);
100
101 static int ada_args_match (struct symbol *, struct value **, int);
102
103 static int full_match (const char *, const char *);
104
105 static struct value *make_array_descriptor (struct type *, struct value *);
106
107 static void ada_add_block_symbols (struct obstack *,
108 const struct block *, const char *,
109 domain_enum, struct objfile *, int);
110
111 static int is_nonfunction (struct ada_symbol_info *, int);
112
113 static void add_defn_to_vec (struct obstack *, struct symbol *,
114 const struct block *);
115
116 static int num_defns_collected (struct obstack *);
117
118 static struct ada_symbol_info *defns_collected (struct obstack *, int);
119
120 static struct value *resolve_subexp (struct expression **, int *, int,
121 struct type *);
122
123 static void replace_operator_with_call (struct expression **, 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 char *ada_op_name (enum exp_opcode);
129
130 static const char *ada_decoded_op_name (enum exp_opcode);
131
132 static int numeric_type_p (struct type *);
133
134 static int integer_type_p (struct type *);
135
136 static int scalar_type_p (struct type *);
137
138 static int discrete_type_p (struct type *);
139
140 static enum ada_renaming_category parse_old_style_renaming (struct type *,
141 const char **,
142 int *,
143 const char **);
144
145 static struct symbol *find_old_style_renaming_symbol (const char *,
146 const struct block *);
147
148 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
149 int, int, int *);
150
151 static struct value *evaluate_subexp_type (struct expression *, int *);
152
153 static struct type *ada_find_parallel_type_with_name (struct type *,
154 const char *);
155
156 static int is_dynamic_field (struct type *, int);
157
158 static struct type *to_fixed_variant_branch_type (struct type *,
159 const gdb_byte *,
160 CORE_ADDR, struct value *);
161
162 static struct type *to_fixed_array_type (struct type *, struct value *, int);
163
164 static struct type *to_fixed_range_type (struct type *, struct value *);
165
166 static struct type *to_static_fixed_type (struct type *);
167 static struct type *static_unwrap_type (struct type *type);
168
169 static struct value *unwrap_value (struct value *);
170
171 static struct type *constrained_packed_array_type (struct type *, long *);
172
173 static struct type *decode_constrained_packed_array_type (struct type *);
174
175 static long decode_packed_array_bitsize (struct type *);
176
177 static struct value *decode_constrained_packed_array (struct value *);
178
179 static int ada_is_packed_array_type (struct type *);
180
181 static int ada_is_unconstrained_packed_array_type (struct type *);
182
183 static struct value *value_subscript_packed (struct value *, int,
184 struct value **);
185
186 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
187
188 static struct value *coerce_unspec_val_to_type (struct value *,
189 struct type *);
190
191 static struct value *get_var_value (char *, char *);
192
193 static int lesseq_defined_than (struct symbol *, struct symbol *);
194
195 static int equiv_types (struct type *, struct type *);
196
197 static int is_name_suffix (const char *);
198
199 static int advance_wild_match (const char **, const char *, int);
200
201 static int wild_match (const char *, const char *);
202
203 static struct value *ada_coerce_ref (struct value *);
204
205 static LONGEST pos_atr (struct value *);
206
207 static struct value *value_pos_atr (struct type *, struct value *);
208
209 static struct value *value_val_atr (struct type *, struct value *);
210
211 static struct symbol *standard_lookup (const char *, const struct block *,
212 domain_enum);
213
214 static struct value *ada_search_struct_field (char *, struct value *, int,
215 struct type *);
216
217 static struct value *ada_value_primitive_field (struct value *, int, int,
218 struct type *);
219
220 static int find_struct_field (const char *, struct type *, int,
221 struct type **, int *, int *, int *, int *);
222
223 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
224 struct value *);
225
226 static int ada_resolve_function (struct ada_symbol_info *, int,
227 struct value **, int, const char *,
228 struct type *);
229
230 static int ada_is_direct_array_type (struct type *);
231
232 static void ada_language_arch_info (struct gdbarch *,
233 struct language_arch_info *);
234
235 static struct value *ada_index_struct_field (int, struct value *, int,
236 struct type *);
237
238 static struct value *assign_aggregate (struct value *, struct value *,
239 struct expression *,
240 int *, enum noside);
241
242 static void aggregate_assign_from_choices (struct value *, struct value *,
243 struct expression *,
244 int *, LONGEST *, int *,
245 int, LONGEST, LONGEST);
246
247 static void aggregate_assign_positional (struct value *, struct value *,
248 struct expression *,
249 int *, LONGEST *, int *, int,
250 LONGEST, LONGEST);
251
252
253 static void aggregate_assign_others (struct value *, struct value *,
254 struct expression *,
255 int *, LONGEST *, int, LONGEST, LONGEST);
256
257
258 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
259
260
261 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
262 int *, enum noside);
263
264 static void ada_forward_operator_length (struct expression *, int, int *,
265 int *);
266
267 static struct type *ada_find_any_type (const char *name);
268 \f
269
270 /* The result of a symbol lookup to be stored in our symbol cache. */
271
272 struct cache_entry
273 {
274 /* The name used to perform the lookup. */
275 const char *name;
276 /* The namespace used during the lookup. */
277 domain_enum domain;
278 /* The symbol returned by the lookup, or NULL if no matching symbol
279 was found. */
280 struct symbol *sym;
281 /* The block where the symbol was found, or NULL if no matching
282 symbol was found. */
283 const struct block *block;
284 /* A pointer to the next entry with the same hash. */
285 struct cache_entry *next;
286 };
287
288 /* The Ada symbol cache, used to store the result of Ada-mode symbol
289 lookups in the course of executing the user's commands.
290
291 The cache is implemented using a simple, fixed-sized hash.
292 The size is fixed on the grounds that there are not likely to be
293 all that many symbols looked up during any given session, regardless
294 of the size of the symbol table. If we decide to go to a resizable
295 table, let's just use the stuff from libiberty instead. */
296
297 #define HASH_SIZE 1009
298
299 struct ada_symbol_cache
300 {
301 /* An obstack used to store the entries in our cache. */
302 struct obstack cache_space;
303
304 /* The root of the hash table used to implement our symbol cache. */
305 struct cache_entry *root[HASH_SIZE];
306 };
307
308 static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
309
310 /* Maximum-sized dynamic type. */
311 static unsigned int varsize_limit;
312
313 /* FIXME: brobecker/2003-09-17: No longer a const because it is
314 returned by a function that does not return a const char *. */
315 static char *ada_completer_word_break_characters =
316 #ifdef VMS
317 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
318 #else
319 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
320 #endif
321
322 /* The name of the symbol to use to get the name of the main subprogram. */
323 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
324 = "__gnat_ada_main_program_name";
325
326 /* Limit on the number of warnings to raise per expression evaluation. */
327 static int warning_limit = 2;
328
329 /* Number of warning messages issued; reset to 0 by cleanups after
330 expression evaluation. */
331 static int warnings_issued = 0;
332
333 static const char *known_runtime_file_name_patterns[] = {
334 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
335 };
336
337 static const char *known_auxiliary_function_name_patterns[] = {
338 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
339 };
340
341 /* Space for allocating results of ada_lookup_symbol_list. */
342 static struct obstack symbol_list_obstack;
343
344 /* Maintenance-related settings for this module. */
345
346 static struct cmd_list_element *maint_set_ada_cmdlist;
347 static struct cmd_list_element *maint_show_ada_cmdlist;
348
349 /* Implement the "maintenance set ada" (prefix) command. */
350
351 static void
352 maint_set_ada_cmd (char *args, int from_tty)
353 {
354 help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
355 gdb_stdout);
356 }
357
358 /* Implement the "maintenance show ada" (prefix) command. */
359
360 static void
361 maint_show_ada_cmd (char *args, int from_tty)
362 {
363 cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
364 }
365
366 /* The "maintenance ada set/show ignore-descriptive-type" value. */
367
368 static int ada_ignore_descriptive_types_p = 0;
369
370 /* Inferior-specific data. */
371
372 /* Per-inferior data for this module. */
373
374 struct ada_inferior_data
375 {
376 /* The ada__tags__type_specific_data type, which is used when decoding
377 tagged types. With older versions of GNAT, this type was directly
378 accessible through a component ("tsd") in the object tag. But this
379 is no longer the case, so we cache it for each inferior. */
380 struct type *tsd_type;
381
382 /* The exception_support_info data. This data is used to determine
383 how to implement support for Ada exception catchpoints in a given
384 inferior. */
385 const struct exception_support_info *exception_info;
386 };
387
388 /* Our key to this module's inferior data. */
389 static const struct inferior_data *ada_inferior_data;
390
391 /* A cleanup routine for our inferior data. */
392 static void
393 ada_inferior_data_cleanup (struct inferior *inf, void *arg)
394 {
395 struct ada_inferior_data *data;
396
397 data = inferior_data (inf, ada_inferior_data);
398 if (data != NULL)
399 xfree (data);
400 }
401
402 /* Return our inferior data for the given inferior (INF).
403
404 This function always returns a valid pointer to an allocated
405 ada_inferior_data structure. If INF's inferior data has not
406 been previously set, this functions creates a new one with all
407 fields set to zero, sets INF's inferior to it, and then returns
408 a pointer to that newly allocated ada_inferior_data. */
409
410 static struct ada_inferior_data *
411 get_ada_inferior_data (struct inferior *inf)
412 {
413 struct ada_inferior_data *data;
414
415 data = inferior_data (inf, ada_inferior_data);
416 if (data == NULL)
417 {
418 data = XCNEW (struct ada_inferior_data);
419 set_inferior_data (inf, ada_inferior_data, data);
420 }
421
422 return data;
423 }
424
425 /* Perform all necessary cleanups regarding our module's inferior data
426 that is required after the inferior INF just exited. */
427
428 static void
429 ada_inferior_exit (struct inferior *inf)
430 {
431 ada_inferior_data_cleanup (inf, NULL);
432 set_inferior_data (inf, ada_inferior_data, NULL);
433 }
434
435
436 /* program-space-specific data. */
437
438 /* This module's per-program-space data. */
439 struct ada_pspace_data
440 {
441 /* The Ada symbol cache. */
442 struct ada_symbol_cache *sym_cache;
443 };
444
445 /* Key to our per-program-space data. */
446 static const struct program_space_data *ada_pspace_data_handle;
447
448 /* Return this module's data for the given program space (PSPACE).
449 If not is found, add a zero'ed one now.
450
451 This function always returns a valid object. */
452
453 static struct ada_pspace_data *
454 get_ada_pspace_data (struct program_space *pspace)
455 {
456 struct ada_pspace_data *data;
457
458 data = program_space_data (pspace, ada_pspace_data_handle);
459 if (data == NULL)
460 {
461 data = XCNEW (struct ada_pspace_data);
462 set_program_space_data (pspace, ada_pspace_data_handle, data);
463 }
464
465 return data;
466 }
467
468 /* The cleanup callback for this module's per-program-space data. */
469
470 static void
471 ada_pspace_data_cleanup (struct program_space *pspace, void *data)
472 {
473 struct ada_pspace_data *pspace_data = data;
474
475 if (pspace_data->sym_cache != NULL)
476 ada_free_symbol_cache (pspace_data->sym_cache);
477 xfree (pspace_data);
478 }
479
480 /* Utilities */
481
482 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
483 all typedef layers have been peeled. Otherwise, return TYPE.
484
485 Normally, we really expect a typedef type to only have 1 typedef layer.
486 In other words, we really expect the target type of a typedef type to be
487 a non-typedef type. This is particularly true for Ada units, because
488 the language does not have a typedef vs not-typedef distinction.
489 In that respect, the Ada compiler has been trying to eliminate as many
490 typedef definitions in the debugging information, since they generally
491 do not bring any extra information (we still use typedef under certain
492 circumstances related mostly to the GNAT encoding).
493
494 Unfortunately, we have seen situations where the debugging information
495 generated by the compiler leads to such multiple typedef layers. For
496 instance, consider the following example with stabs:
497
498 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
499 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
500
501 This is an error in the debugging information which causes type
502 pck__float_array___XUP to be defined twice, and the second time,
503 it is defined as a typedef of a typedef.
504
505 This is on the fringe of legality as far as debugging information is
506 concerned, and certainly unexpected. But it is easy to handle these
507 situations correctly, so we can afford to be lenient in this case. */
508
509 static struct type *
510 ada_typedef_target_type (struct type *type)
511 {
512 while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
513 type = TYPE_TARGET_TYPE (type);
514 return type;
515 }
516
517 /* Given DECODED_NAME a string holding a symbol name in its
518 decoded form (ie using the Ada dotted notation), returns
519 its unqualified name. */
520
521 static const char *
522 ada_unqualified_name (const char *decoded_name)
523 {
524 const char *result;
525
526 /* If the decoded name starts with '<', it means that the encoded
527 name does not follow standard naming conventions, and thus that
528 it is not your typical Ada symbol name. Trying to unqualify it
529 is therefore pointless and possibly erroneous. */
530 if (decoded_name[0] == '<')
531 return decoded_name;
532
533 result = strrchr (decoded_name, '.');
534 if (result != NULL)
535 result++; /* Skip the dot... */
536 else
537 result = decoded_name;
538
539 return result;
540 }
541
542 /* Return a string starting with '<', followed by STR, and '>'.
543 The result is good until the next call. */
544
545 static char *
546 add_angle_brackets (const char *str)
547 {
548 static char *result = NULL;
549
550 xfree (result);
551 result = xstrprintf ("<%s>", str);
552 return result;
553 }
554
555 static char *
556 ada_get_gdb_completer_word_break_characters (void)
557 {
558 return ada_completer_word_break_characters;
559 }
560
561 /* Print an array element index using the Ada syntax. */
562
563 static void
564 ada_print_array_index (struct value *index_value, struct ui_file *stream,
565 const struct value_print_options *options)
566 {
567 LA_VALUE_PRINT (index_value, stream, options);
568 fprintf_filtered (stream, " => ");
569 }
570
571 /* Assuming VECT points to an array of *SIZE objects of size
572 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
573 updating *SIZE as necessary and returning the (new) array. */
574
575 void *
576 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
577 {
578 if (*size < min_size)
579 {
580 *size *= 2;
581 if (*size < min_size)
582 *size = min_size;
583 vect = xrealloc (vect, *size * element_size);
584 }
585 return vect;
586 }
587
588 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
589 suffix of FIELD_NAME beginning "___". */
590
591 static int
592 field_name_match (const char *field_name, const char *target)
593 {
594 int len = strlen (target);
595
596 return
597 (strncmp (field_name, target, len) == 0
598 && (field_name[len] == '\0'
599 || (startswith (field_name + len, "___")
600 && strcmp (field_name + strlen (field_name) - 6,
601 "___XVN") != 0)));
602 }
603
604
605 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
606 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
607 and return its index. This function also handles fields whose name
608 have ___ suffixes because the compiler sometimes alters their name
609 by adding such a suffix to represent fields with certain constraints.
610 If the field could not be found, return a negative number if
611 MAYBE_MISSING is set. Otherwise raise an error. */
612
613 int
614 ada_get_field_index (const struct type *type, const char *field_name,
615 int maybe_missing)
616 {
617 int fieldno;
618 struct type *struct_type = check_typedef ((struct type *) type);
619
620 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
621 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
622 return fieldno;
623
624 if (!maybe_missing)
625 error (_("Unable to find field %s in struct %s. Aborting"),
626 field_name, TYPE_NAME (struct_type));
627
628 return -1;
629 }
630
631 /* The length of the prefix of NAME prior to any "___" suffix. */
632
633 int
634 ada_name_prefix_len (const char *name)
635 {
636 if (name == NULL)
637 return 0;
638 else
639 {
640 const char *p = strstr (name, "___");
641
642 if (p == NULL)
643 return strlen (name);
644 else
645 return p - name;
646 }
647 }
648
649 /* Return non-zero if SUFFIX is a suffix of STR.
650 Return zero if STR is null. */
651
652 static int
653 is_suffix (const char *str, const char *suffix)
654 {
655 int len1, len2;
656
657 if (str == NULL)
658 return 0;
659 len1 = strlen (str);
660 len2 = strlen (suffix);
661 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
662 }
663
664 /* The contents of value VAL, treated as a value of type TYPE. The
665 result is an lval in memory if VAL is. */
666
667 static struct value *
668 coerce_unspec_val_to_type (struct value *val, struct type *type)
669 {
670 type = ada_check_typedef (type);
671 if (value_type (val) == type)
672 return val;
673 else
674 {
675 struct value *result;
676
677 /* Make sure that the object size is not unreasonable before
678 trying to allocate some memory for it. */
679 ada_ensure_varsize_limit (type);
680
681 if (value_lazy (val)
682 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
683 result = allocate_value_lazy (type);
684 else
685 {
686 result = allocate_value (type);
687 value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
688 }
689 set_value_component_location (result, val);
690 set_value_bitsize (result, value_bitsize (val));
691 set_value_bitpos (result, value_bitpos (val));
692 set_value_address (result, value_address (val));
693 return result;
694 }
695 }
696
697 static const gdb_byte *
698 cond_offset_host (const gdb_byte *valaddr, long offset)
699 {
700 if (valaddr == NULL)
701 return NULL;
702 else
703 return valaddr + offset;
704 }
705
706 static CORE_ADDR
707 cond_offset_target (CORE_ADDR address, long offset)
708 {
709 if (address == 0)
710 return 0;
711 else
712 return address + offset;
713 }
714
715 /* Issue a warning (as for the definition of warning in utils.c, but
716 with exactly one argument rather than ...), unless the limit on the
717 number of warnings has passed during the evaluation of the current
718 expression. */
719
720 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
721 provided by "complaint". */
722 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
723
724 static void
725 lim_warning (const char *format, ...)
726 {
727 va_list args;
728
729 va_start (args, format);
730 warnings_issued += 1;
731 if (warnings_issued <= warning_limit)
732 vwarning (format, args);
733
734 va_end (args);
735 }
736
737 /* Issue an error if the size of an object of type T is unreasonable,
738 i.e. if it would be a bad idea to allocate a value of this type in
739 GDB. */
740
741 void
742 ada_ensure_varsize_limit (const struct type *type)
743 {
744 if (TYPE_LENGTH (type) > varsize_limit)
745 error (_("object size is larger than varsize-limit"));
746 }
747
748 /* Maximum value of a SIZE-byte signed integer type. */
749 static LONGEST
750 max_of_size (int size)
751 {
752 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
753
754 return top_bit | (top_bit - 1);
755 }
756
757 /* Minimum value of a SIZE-byte signed integer type. */
758 static LONGEST
759 min_of_size (int size)
760 {
761 return -max_of_size (size) - 1;
762 }
763
764 /* Maximum value of a SIZE-byte unsigned integer type. */
765 static ULONGEST
766 umax_of_size (int size)
767 {
768 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
769
770 return top_bit | (top_bit - 1);
771 }
772
773 /* Maximum value of integral type T, as a signed quantity. */
774 static LONGEST
775 max_of_type (struct type *t)
776 {
777 if (TYPE_UNSIGNED (t))
778 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
779 else
780 return max_of_size (TYPE_LENGTH (t));
781 }
782
783 /* Minimum value of integral type T, as a signed quantity. */
784 static LONGEST
785 min_of_type (struct type *t)
786 {
787 if (TYPE_UNSIGNED (t))
788 return 0;
789 else
790 return min_of_size (TYPE_LENGTH (t));
791 }
792
793 /* The largest value in the domain of TYPE, a discrete type, as an integer. */
794 LONGEST
795 ada_discrete_type_high_bound (struct type *type)
796 {
797 type = resolve_dynamic_type (type, NULL, 0);
798 switch (TYPE_CODE (type))
799 {
800 case TYPE_CODE_RANGE:
801 return TYPE_HIGH_BOUND (type);
802 case TYPE_CODE_ENUM:
803 return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
804 case TYPE_CODE_BOOL:
805 return 1;
806 case TYPE_CODE_CHAR:
807 case TYPE_CODE_INT:
808 return max_of_type (type);
809 default:
810 error (_("Unexpected type in ada_discrete_type_high_bound."));
811 }
812 }
813
814 /* The smallest value in the domain of TYPE, a discrete type, as an integer. */
815 LONGEST
816 ada_discrete_type_low_bound (struct type *type)
817 {
818 type = resolve_dynamic_type (type, NULL, 0);
819 switch (TYPE_CODE (type))
820 {
821 case TYPE_CODE_RANGE:
822 return TYPE_LOW_BOUND (type);
823 case TYPE_CODE_ENUM:
824 return TYPE_FIELD_ENUMVAL (type, 0);
825 case TYPE_CODE_BOOL:
826 return 0;
827 case TYPE_CODE_CHAR:
828 case TYPE_CODE_INT:
829 return min_of_type (type);
830 default:
831 error (_("Unexpected type in ada_discrete_type_low_bound."));
832 }
833 }
834
835 /* The identity on non-range types. For range types, the underlying
836 non-range scalar type. */
837
838 static struct type *
839 get_base_type (struct type *type)
840 {
841 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
842 {
843 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
844 return type;
845 type = TYPE_TARGET_TYPE (type);
846 }
847 return type;
848 }
849
850 /* Return a decoded version of the given VALUE. This means returning
851 a value whose type is obtained by applying all the GNAT-specific
852 encondings, making the resulting type a static but standard description
853 of the initial type. */
854
855 struct value *
856 ada_get_decoded_value (struct value *value)
857 {
858 struct type *type = ada_check_typedef (value_type (value));
859
860 if (ada_is_array_descriptor_type (type)
861 || (ada_is_constrained_packed_array_type (type)
862 && TYPE_CODE (type) != TYPE_CODE_PTR))
863 {
864 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */
865 value = ada_coerce_to_simple_array_ptr (value);
866 else
867 value = ada_coerce_to_simple_array (value);
868 }
869 else
870 value = ada_to_fixed_value (value);
871
872 return value;
873 }
874
875 /* Same as ada_get_decoded_value, but with the given TYPE.
876 Because there is no associated actual value for this type,
877 the resulting type might be a best-effort approximation in
878 the case of dynamic types. */
879
880 struct type *
881 ada_get_decoded_type (struct type *type)
882 {
883 type = to_static_fixed_type (type);
884 if (ada_is_constrained_packed_array_type (type))
885 type = ada_coerce_to_simple_array_type (type);
886 return type;
887 }
888
889 \f
890
891 /* Language Selection */
892
893 /* If the main program is in Ada, return language_ada, otherwise return LANG
894 (the main program is in Ada iif the adainit symbol is found). */
895
896 enum language
897 ada_update_initial_language (enum language lang)
898 {
899 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
900 (struct objfile *) NULL).minsym != NULL)
901 return language_ada;
902
903 return lang;
904 }
905
906 /* If the main procedure is written in Ada, then return its name.
907 The result is good until the next call. Return NULL if the main
908 procedure doesn't appear to be in Ada. */
909
910 char *
911 ada_main_name (void)
912 {
913 struct bound_minimal_symbol msym;
914 static char *main_program_name = NULL;
915
916 /* For Ada, the name of the main procedure is stored in a specific
917 string constant, generated by the binder. Look for that symbol,
918 extract its address, and then read that string. If we didn't find
919 that string, then most probably the main procedure is not written
920 in Ada. */
921 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
922
923 if (msym.minsym != NULL)
924 {
925 CORE_ADDR main_program_name_addr;
926 int err_code;
927
928 main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
929 if (main_program_name_addr == 0)
930 error (_("Invalid address for Ada main program name."));
931
932 xfree (main_program_name);
933 target_read_string (main_program_name_addr, &main_program_name,
934 1024, &err_code);
935
936 if (err_code != 0)
937 return NULL;
938 return main_program_name;
939 }
940
941 /* The main procedure doesn't seem to be in Ada. */
942 return NULL;
943 }
944 \f
945 /* Symbols */
946
947 /* Table of Ada operators and their GNAT-encoded names. Last entry is pair
948 of NULLs. */
949
950 const struct ada_opname_map ada_opname_table[] = {
951 {"Oadd", "\"+\"", BINOP_ADD},
952 {"Osubtract", "\"-\"", BINOP_SUB},
953 {"Omultiply", "\"*\"", BINOP_MUL},
954 {"Odivide", "\"/\"", BINOP_DIV},
955 {"Omod", "\"mod\"", BINOP_MOD},
956 {"Orem", "\"rem\"", BINOP_REM},
957 {"Oexpon", "\"**\"", BINOP_EXP},
958 {"Olt", "\"<\"", BINOP_LESS},
959 {"Ole", "\"<=\"", BINOP_LEQ},
960 {"Ogt", "\">\"", BINOP_GTR},
961 {"Oge", "\">=\"", BINOP_GEQ},
962 {"Oeq", "\"=\"", BINOP_EQUAL},
963 {"One", "\"/=\"", BINOP_NOTEQUAL},
964 {"Oand", "\"and\"", BINOP_BITWISE_AND},
965 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
966 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
967 {"Oconcat", "\"&\"", BINOP_CONCAT},
968 {"Oabs", "\"abs\"", UNOP_ABS},
969 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
970 {"Oadd", "\"+\"", UNOP_PLUS},
971 {"Osubtract", "\"-\"", UNOP_NEG},
972 {NULL, NULL}
973 };
974
975 /* The "encoded" form of DECODED, according to GNAT conventions.
976 The result is valid until the next call to ada_encode. */
977
978 char *
979 ada_encode (const char *decoded)
980 {
981 static char *encoding_buffer = NULL;
982 static size_t encoding_buffer_size = 0;
983 const char *p;
984 int k;
985
986 if (decoded == NULL)
987 return NULL;
988
989 GROW_VECT (encoding_buffer, encoding_buffer_size,
990 2 * strlen (decoded) + 10);
991
992 k = 0;
993 for (p = decoded; *p != '\0'; p += 1)
994 {
995 if (*p == '.')
996 {
997 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
998 k += 2;
999 }
1000 else if (*p == '"')
1001 {
1002 const struct ada_opname_map *mapping;
1003
1004 for (mapping = ada_opname_table;
1005 mapping->encoded != NULL
1006 && !startswith (p, mapping->decoded); mapping += 1)
1007 ;
1008 if (mapping->encoded == NULL)
1009 error (_("invalid Ada operator name: %s"), p);
1010 strcpy (encoding_buffer + k, mapping->encoded);
1011 k += strlen (mapping->encoded);
1012 break;
1013 }
1014 else
1015 {
1016 encoding_buffer[k] = *p;
1017 k += 1;
1018 }
1019 }
1020
1021 encoding_buffer[k] = '\0';
1022 return encoding_buffer;
1023 }
1024
1025 /* Return NAME folded to lower case, or, if surrounded by single
1026 quotes, unfolded, but with the quotes stripped away. Result good
1027 to next call. */
1028
1029 char *
1030 ada_fold_name (const char *name)
1031 {
1032 static char *fold_buffer = NULL;
1033 static size_t fold_buffer_size = 0;
1034
1035 int len = strlen (name);
1036 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
1037
1038 if (name[0] == '\'')
1039 {
1040 strncpy (fold_buffer, name + 1, len - 2);
1041 fold_buffer[len - 2] = '\000';
1042 }
1043 else
1044 {
1045 int i;
1046
1047 for (i = 0; i <= len; i += 1)
1048 fold_buffer[i] = tolower (name[i]);
1049 }
1050
1051 return fold_buffer;
1052 }
1053
1054 /* Return nonzero if C is either a digit or a lowercase alphabet character. */
1055
1056 static int
1057 is_lower_alphanum (const char c)
1058 {
1059 return (isdigit (c) || (isalpha (c) && islower (c)));
1060 }
1061
1062 /* ENCODED is the linkage name of a symbol and LEN contains its length.
1063 This function saves in LEN the length of that same symbol name but
1064 without either of these suffixes:
1065 . .{DIGIT}+
1066 . ${DIGIT}+
1067 . ___{DIGIT}+
1068 . __{DIGIT}+.
1069
1070 These are suffixes introduced by the compiler for entities such as
1071 nested subprogram for instance, in order to avoid name clashes.
1072 They do not serve any purpose for the debugger. */
1073
1074 static void
1075 ada_remove_trailing_digits (const char *encoded, int *len)
1076 {
1077 if (*len > 1 && isdigit (encoded[*len - 1]))
1078 {
1079 int i = *len - 2;
1080
1081 while (i > 0 && isdigit (encoded[i]))
1082 i--;
1083 if (i >= 0 && encoded[i] == '.')
1084 *len = i;
1085 else if (i >= 0 && encoded[i] == '$')
1086 *len = i;
1087 else if (i >= 2 && startswith (encoded + i - 2, "___"))
1088 *len = i - 2;
1089 else if (i >= 1 && startswith (encoded + i - 1, "__"))
1090 *len = i - 1;
1091 }
1092 }
1093
1094 /* Remove the suffix introduced by the compiler for protected object
1095 subprograms. */
1096
1097 static void
1098 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1099 {
1100 /* Remove trailing N. */
1101
1102 /* Protected entry subprograms are broken into two
1103 separate subprograms: The first one is unprotected, and has
1104 a 'N' suffix; the second is the protected version, and has
1105 the 'P' suffix. The second calls the first one after handling
1106 the protection. Since the P subprograms are internally generated,
1107 we leave these names undecoded, giving the user a clue that this
1108 entity is internal. */
1109
1110 if (*len > 1
1111 && encoded[*len - 1] == 'N'
1112 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1113 *len = *len - 1;
1114 }
1115
1116 /* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
1117
1118 static void
1119 ada_remove_Xbn_suffix (const char *encoded, int *len)
1120 {
1121 int i = *len - 1;
1122
1123 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1124 i--;
1125
1126 if (encoded[i] != 'X')
1127 return;
1128
1129 if (i == 0)
1130 return;
1131
1132 if (isalnum (encoded[i-1]))
1133 *len = i;
1134 }
1135
1136 /* If ENCODED follows the GNAT entity encoding conventions, then return
1137 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
1138 replaced by ENCODED.
1139
1140 The resulting string is valid until the next call of ada_decode.
1141 If the string is unchanged by decoding, the original string pointer
1142 is returned. */
1143
1144 const char *
1145 ada_decode (const char *encoded)
1146 {
1147 int i, j;
1148 int len0;
1149 const char *p;
1150 char *decoded;
1151 int at_start_name;
1152 static char *decoding_buffer = NULL;
1153 static size_t decoding_buffer_size = 0;
1154
1155 /* The name of the Ada main procedure starts with "_ada_".
1156 This prefix is not part of the decoded name, so skip this part
1157 if we see this prefix. */
1158 if (startswith (encoded, "_ada_"))
1159 encoded += 5;
1160
1161 /* If the name starts with '_', then it is not a properly encoded
1162 name, so do not attempt to decode it. Similarly, if the name
1163 starts with '<', the name should not be decoded. */
1164 if (encoded[0] == '_' || encoded[0] == '<')
1165 goto Suppress;
1166
1167 len0 = strlen (encoded);
1168
1169 ada_remove_trailing_digits (encoded, &len0);
1170 ada_remove_po_subprogram_suffix (encoded, &len0);
1171
1172 /* Remove the ___X.* suffix if present. Do not forget to verify that
1173 the suffix is located before the current "end" of ENCODED. We want
1174 to avoid re-matching parts of ENCODED that have previously been
1175 marked as discarded (by decrementing LEN0). */
1176 p = strstr (encoded, "___");
1177 if (p != NULL && p - encoded < len0 - 3)
1178 {
1179 if (p[3] == 'X')
1180 len0 = p - encoded;
1181 else
1182 goto Suppress;
1183 }
1184
1185 /* Remove any trailing TKB suffix. It tells us that this symbol
1186 is for the body of a task, but that information does not actually
1187 appear in the decoded name. */
1188
1189 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
1190 len0 -= 3;
1191
1192 /* Remove any trailing TB suffix. The TB suffix is slightly different
1193 from the TKB suffix because it is used for non-anonymous task
1194 bodies. */
1195
1196 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
1197 len0 -= 2;
1198
1199 /* Remove trailing "B" suffixes. */
1200 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1201
1202 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
1203 len0 -= 1;
1204
1205 /* Make decoded big enough for possible expansion by operator name. */
1206
1207 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1208 decoded = decoding_buffer;
1209
1210 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1211
1212 if (len0 > 1 && isdigit (encoded[len0 - 1]))
1213 {
1214 i = len0 - 2;
1215 while ((i >= 0 && isdigit (encoded[i]))
1216 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1217 i -= 1;
1218 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1219 len0 = i - 1;
1220 else if (encoded[i] == '$')
1221 len0 = i;
1222 }
1223
1224 /* The first few characters that are not alphabetic are not part
1225 of any encoding we use, so we can copy them over verbatim. */
1226
1227 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1228 decoded[j] = encoded[i];
1229
1230 at_start_name = 1;
1231 while (i < len0)
1232 {
1233 /* Is this a symbol function? */
1234 if (at_start_name && encoded[i] == 'O')
1235 {
1236 int k;
1237
1238 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1239 {
1240 int op_len = strlen (ada_opname_table[k].encoded);
1241 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1242 op_len - 1) == 0)
1243 && !isalnum (encoded[i + op_len]))
1244 {
1245 strcpy (decoded + j, ada_opname_table[k].decoded);
1246 at_start_name = 0;
1247 i += op_len;
1248 j += strlen (ada_opname_table[k].decoded);
1249 break;
1250 }
1251 }
1252 if (ada_opname_table[k].encoded != NULL)
1253 continue;
1254 }
1255 at_start_name = 0;
1256
1257 /* Replace "TK__" with "__", which will eventually be translated
1258 into "." (just below). */
1259
1260 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
1261 i += 2;
1262
1263 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1264 be translated into "." (just below). These are internal names
1265 generated for anonymous blocks inside which our symbol is nested. */
1266
1267 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1268 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1269 && isdigit (encoded [i+4]))
1270 {
1271 int k = i + 5;
1272
1273 while (k < len0 && isdigit (encoded[k]))
1274 k++; /* Skip any extra digit. */
1275
1276 /* Double-check that the "__B_{DIGITS}+" sequence we found
1277 is indeed followed by "__". */
1278 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1279 i = k;
1280 }
1281
1282 /* Remove _E{DIGITS}+[sb] */
1283
1284 /* Just as for protected object subprograms, there are 2 categories
1285 of subprograms created by the compiler for each entry. The first
1286 one implements the actual entry code, and has a suffix following
1287 the convention above; the second one implements the barrier and
1288 uses the same convention as above, except that the 'E' is replaced
1289 by a 'B'.
1290
1291 Just as above, we do not decode the name of barrier functions
1292 to give the user a clue that the code he is debugging has been
1293 internally generated. */
1294
1295 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1296 && isdigit (encoded[i+2]))
1297 {
1298 int k = i + 3;
1299
1300 while (k < len0 && isdigit (encoded[k]))
1301 k++;
1302
1303 if (k < len0
1304 && (encoded[k] == 'b' || encoded[k] == 's'))
1305 {
1306 k++;
1307 /* Just as an extra precaution, make sure that if this
1308 suffix is followed by anything else, it is a '_'.
1309 Otherwise, we matched this sequence by accident. */
1310 if (k == len0
1311 || (k < len0 && encoded[k] == '_'))
1312 i = k;
1313 }
1314 }
1315
1316 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1317 the GNAT front-end in protected object subprograms. */
1318
1319 if (i < len0 + 3
1320 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1321 {
1322 /* Backtrack a bit up until we reach either the begining of
1323 the encoded name, or "__". Make sure that we only find
1324 digits or lowercase characters. */
1325 const char *ptr = encoded + i - 1;
1326
1327 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1328 ptr--;
1329 if (ptr < encoded
1330 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1331 i++;
1332 }
1333
1334 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1335 {
1336 /* This is a X[bn]* sequence not separated from the previous
1337 part of the name with a non-alpha-numeric character (in other
1338 words, immediately following an alpha-numeric character), then
1339 verify that it is placed at the end of the encoded name. If
1340 not, then the encoding is not valid and we should abort the
1341 decoding. Otherwise, just skip it, it is used in body-nested
1342 package names. */
1343 do
1344 i += 1;
1345 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1346 if (i < len0)
1347 goto Suppress;
1348 }
1349 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1350 {
1351 /* Replace '__' by '.'. */
1352 decoded[j] = '.';
1353 at_start_name = 1;
1354 i += 2;
1355 j += 1;
1356 }
1357 else
1358 {
1359 /* It's a character part of the decoded name, so just copy it
1360 over. */
1361 decoded[j] = encoded[i];
1362 i += 1;
1363 j += 1;
1364 }
1365 }
1366 decoded[j] = '\000';
1367
1368 /* Decoded names should never contain any uppercase character.
1369 Double-check this, and abort the decoding if we find one. */
1370
1371 for (i = 0; decoded[i] != '\0'; i += 1)
1372 if (isupper (decoded[i]) || decoded[i] == ' ')
1373 goto Suppress;
1374
1375 if (strcmp (decoded, encoded) == 0)
1376 return encoded;
1377 else
1378 return decoded;
1379
1380 Suppress:
1381 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1382 decoded = decoding_buffer;
1383 if (encoded[0] == '<')
1384 strcpy (decoded, encoded);
1385 else
1386 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1387 return decoded;
1388
1389 }
1390
1391 /* Table for keeping permanent unique copies of decoded names. Once
1392 allocated, names in this table are never released. While this is a
1393 storage leak, it should not be significant unless there are massive
1394 changes in the set of decoded names in successive versions of a
1395 symbol table loaded during a single session. */
1396 static struct htab *decoded_names_store;
1397
1398 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1399 in the language-specific part of GSYMBOL, if it has not been
1400 previously computed. Tries to save the decoded name in the same
1401 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1402 in any case, the decoded symbol has a lifetime at least that of
1403 GSYMBOL).
1404 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1405 const, but nevertheless modified to a semantically equivalent form
1406 when a decoded name is cached in it. */
1407
1408 const char *
1409 ada_decode_symbol (const struct general_symbol_info *arg)
1410 {
1411 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1412 const char **resultp =
1413 &gsymbol->language_specific.mangled_lang.demangled_name;
1414
1415 if (!gsymbol->ada_mangled)
1416 {
1417 const char *decoded = ada_decode (gsymbol->name);
1418 struct obstack *obstack = gsymbol->language_specific.obstack;
1419
1420 gsymbol->ada_mangled = 1;
1421
1422 if (obstack != NULL)
1423 *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1424 else
1425 {
1426 /* Sometimes, we can't find a corresponding objfile, in
1427 which case, we put the result on the heap. Since we only
1428 decode when needed, we hope this usually does not cause a
1429 significant memory leak (FIXME). */
1430
1431 char **slot = (char **) htab_find_slot (decoded_names_store,
1432 decoded, INSERT);
1433
1434 if (*slot == NULL)
1435 *slot = xstrdup (decoded);
1436 *resultp = *slot;
1437 }
1438 }
1439
1440 return *resultp;
1441 }
1442
1443 static char *
1444 ada_la_decode (const char *encoded, int options)
1445 {
1446 return xstrdup (ada_decode (encoded));
1447 }
1448
1449 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1450 suffixes that encode debugging information or leading _ada_ on
1451 SYM_NAME (see is_name_suffix commentary for the debugging
1452 information that is ignored). If WILD, then NAME need only match a
1453 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1454 either argument is NULL. */
1455
1456 static int
1457 match_name (const char *sym_name, const char *name, int wild)
1458 {
1459 if (sym_name == NULL || name == NULL)
1460 return 0;
1461 else if (wild)
1462 return wild_match (sym_name, name) == 0;
1463 else
1464 {
1465 int len_name = strlen (name);
1466
1467 return (strncmp (sym_name, name, len_name) == 0
1468 && is_name_suffix (sym_name + len_name))
1469 || (startswith (sym_name, "_ada_")
1470 && strncmp (sym_name + 5, name, len_name) == 0
1471 && is_name_suffix (sym_name + len_name + 5));
1472 }
1473 }
1474 \f
1475
1476 /* Arrays */
1477
1478 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1479 generated by the GNAT compiler to describe the index type used
1480 for each dimension of an array, check whether it follows the latest
1481 known encoding. If not, fix it up to conform to the latest encoding.
1482 Otherwise, do nothing. This function also does nothing if
1483 INDEX_DESC_TYPE is NULL.
1484
1485 The GNAT encoding used to describle the array index type evolved a bit.
1486 Initially, the information would be provided through the name of each
1487 field of the structure type only, while the type of these fields was
1488 described as unspecified and irrelevant. The debugger was then expected
1489 to perform a global type lookup using the name of that field in order
1490 to get access to the full index type description. Because these global
1491 lookups can be very expensive, the encoding was later enhanced to make
1492 the global lookup unnecessary by defining the field type as being
1493 the full index type description.
1494
1495 The purpose of this routine is to allow us to support older versions
1496 of the compiler by detecting the use of the older encoding, and by
1497 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1498 we essentially replace each field's meaningless type by the associated
1499 index subtype). */
1500
1501 void
1502 ada_fixup_array_indexes_type (struct type *index_desc_type)
1503 {
1504 int i;
1505
1506 if (index_desc_type == NULL)
1507 return;
1508 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1509
1510 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1511 to check one field only, no need to check them all). If not, return
1512 now.
1513
1514 If our INDEX_DESC_TYPE was generated using the older encoding,
1515 the field type should be a meaningless integer type whose name
1516 is not equal to the field name. */
1517 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1518 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1519 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1520 return;
1521
1522 /* Fixup each field of INDEX_DESC_TYPE. */
1523 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1524 {
1525 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
1526 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1527
1528 if (raw_type)
1529 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1530 }
1531 }
1532
1533 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
1534
1535 static char *bound_name[] = {
1536 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1537 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1538 };
1539
1540 /* Maximum number of array dimensions we are prepared to handle. */
1541
1542 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1543
1544
1545 /* The desc_* routines return primitive portions of array descriptors
1546 (fat pointers). */
1547
1548 /* The descriptor or array type, if any, indicated by TYPE; removes
1549 level of indirection, if needed. */
1550
1551 static struct type *
1552 desc_base_type (struct type *type)
1553 {
1554 if (type == NULL)
1555 return NULL;
1556 type = ada_check_typedef (type);
1557 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1558 type = ada_typedef_target_type (type);
1559
1560 if (type != NULL
1561 && (TYPE_CODE (type) == TYPE_CODE_PTR
1562 || TYPE_CODE (type) == TYPE_CODE_REF))
1563 return ada_check_typedef (TYPE_TARGET_TYPE (type));
1564 else
1565 return type;
1566 }
1567
1568 /* True iff TYPE indicates a "thin" array pointer type. */
1569
1570 static int
1571 is_thin_pntr (struct type *type)
1572 {
1573 return
1574 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1575 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1576 }
1577
1578 /* The descriptor type for thin pointer type TYPE. */
1579
1580 static struct type *
1581 thin_descriptor_type (struct type *type)
1582 {
1583 struct type *base_type = desc_base_type (type);
1584
1585 if (base_type == NULL)
1586 return NULL;
1587 if (is_suffix (ada_type_name (base_type), "___XVE"))
1588 return base_type;
1589 else
1590 {
1591 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1592
1593 if (alt_type == NULL)
1594 return base_type;
1595 else
1596 return alt_type;
1597 }
1598 }
1599
1600 /* A pointer to the array data for thin-pointer value VAL. */
1601
1602 static struct value *
1603 thin_data_pntr (struct value *val)
1604 {
1605 struct type *type = ada_check_typedef (value_type (val));
1606 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1607
1608 data_type = lookup_pointer_type (data_type);
1609
1610 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1611 return value_cast (data_type, value_copy (val));
1612 else
1613 return value_from_longest (data_type, value_address (val));
1614 }
1615
1616 /* True iff TYPE indicates a "thick" array pointer type. */
1617
1618 static int
1619 is_thick_pntr (struct type *type)
1620 {
1621 type = desc_base_type (type);
1622 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1623 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1624 }
1625
1626 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1627 pointer to one, the type of its bounds data; otherwise, NULL. */
1628
1629 static struct type *
1630 desc_bounds_type (struct type *type)
1631 {
1632 struct type *r;
1633
1634 type = desc_base_type (type);
1635
1636 if (type == NULL)
1637 return NULL;
1638 else if (is_thin_pntr (type))
1639 {
1640 type = thin_descriptor_type (type);
1641 if (type == NULL)
1642 return NULL;
1643 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1644 if (r != NULL)
1645 return ada_check_typedef (r);
1646 }
1647 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1648 {
1649 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1650 if (r != NULL)
1651 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1652 }
1653 return NULL;
1654 }
1655
1656 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1657 one, a pointer to its bounds data. Otherwise NULL. */
1658
1659 static struct value *
1660 desc_bounds (struct value *arr)
1661 {
1662 struct type *type = ada_check_typedef (value_type (arr));
1663
1664 if (is_thin_pntr (type))
1665 {
1666 struct type *bounds_type =
1667 desc_bounds_type (thin_descriptor_type (type));
1668 LONGEST addr;
1669
1670 if (bounds_type == NULL)
1671 error (_("Bad GNAT array descriptor"));
1672
1673 /* NOTE: The following calculation is not really kosher, but
1674 since desc_type is an XVE-encoded type (and shouldn't be),
1675 the correct calculation is a real pain. FIXME (and fix GCC). */
1676 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1677 addr = value_as_long (arr);
1678 else
1679 addr = value_address (arr);
1680
1681 return
1682 value_from_longest (lookup_pointer_type (bounds_type),
1683 addr - TYPE_LENGTH (bounds_type));
1684 }
1685
1686 else if (is_thick_pntr (type))
1687 {
1688 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1689 _("Bad GNAT array descriptor"));
1690 struct type *p_bounds_type = value_type (p_bounds);
1691
1692 if (p_bounds_type
1693 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1694 {
1695 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1696
1697 if (TYPE_STUB (target_type))
1698 p_bounds = value_cast (lookup_pointer_type
1699 (ada_check_typedef (target_type)),
1700 p_bounds);
1701 }
1702 else
1703 error (_("Bad GNAT array descriptor"));
1704
1705 return p_bounds;
1706 }
1707 else
1708 return NULL;
1709 }
1710
1711 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1712 position of the field containing the address of the bounds data. */
1713
1714 static int
1715 fat_pntr_bounds_bitpos (struct type *type)
1716 {
1717 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1718 }
1719
1720 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1721 size of the field containing the address of the bounds data. */
1722
1723 static int
1724 fat_pntr_bounds_bitsize (struct type *type)
1725 {
1726 type = desc_base_type (type);
1727
1728 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1729 return TYPE_FIELD_BITSIZE (type, 1);
1730 else
1731 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1732 }
1733
1734 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1735 pointer to one, the type of its array data (a array-with-no-bounds type);
1736 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1737 data. */
1738
1739 static struct type *
1740 desc_data_target_type (struct type *type)
1741 {
1742 type = desc_base_type (type);
1743
1744 /* NOTE: The following is bogus; see comment in desc_bounds. */
1745 if (is_thin_pntr (type))
1746 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1747 else if (is_thick_pntr (type))
1748 {
1749 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1750
1751 if (data_type
1752 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1753 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
1754 }
1755
1756 return NULL;
1757 }
1758
1759 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1760 its array data. */
1761
1762 static struct value *
1763 desc_data (struct value *arr)
1764 {
1765 struct type *type = value_type (arr);
1766
1767 if (is_thin_pntr (type))
1768 return thin_data_pntr (arr);
1769 else if (is_thick_pntr (type))
1770 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1771 _("Bad GNAT array descriptor"));
1772 else
1773 return NULL;
1774 }
1775
1776
1777 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1778 position of the field containing the address of the data. */
1779
1780 static int
1781 fat_pntr_data_bitpos (struct type *type)
1782 {
1783 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1784 }
1785
1786 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1787 size of the field containing the address of the data. */
1788
1789 static int
1790 fat_pntr_data_bitsize (struct type *type)
1791 {
1792 type = desc_base_type (type);
1793
1794 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1795 return TYPE_FIELD_BITSIZE (type, 0);
1796 else
1797 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1798 }
1799
1800 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1801 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1802 bound, if WHICH is 1. The first bound is I=1. */
1803
1804 static struct value *
1805 desc_one_bound (struct value *bounds, int i, int which)
1806 {
1807 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1808 _("Bad GNAT array descriptor bounds"));
1809 }
1810
1811 /* If BOUNDS is an array-bounds structure type, return the bit position
1812 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1813 bound, if WHICH is 1. The first bound is I=1. */
1814
1815 static int
1816 desc_bound_bitpos (struct type *type, int i, int which)
1817 {
1818 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1819 }
1820
1821 /* If BOUNDS is an array-bounds structure type, return the bit field size
1822 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1823 bound, if WHICH is 1. The first bound is I=1. */
1824
1825 static int
1826 desc_bound_bitsize (struct type *type, int i, int which)
1827 {
1828 type = desc_base_type (type);
1829
1830 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1831 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1832 else
1833 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1834 }
1835
1836 /* If TYPE is the type of an array-bounds structure, the type of its
1837 Ith bound (numbering from 1). Otherwise, NULL. */
1838
1839 static struct type *
1840 desc_index_type (struct type *type, int i)
1841 {
1842 type = desc_base_type (type);
1843
1844 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1845 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1846 else
1847 return NULL;
1848 }
1849
1850 /* The number of index positions in the array-bounds type TYPE.
1851 Return 0 if TYPE is NULL. */
1852
1853 static int
1854 desc_arity (struct type *type)
1855 {
1856 type = desc_base_type (type);
1857
1858 if (type != NULL)
1859 return TYPE_NFIELDS (type) / 2;
1860 return 0;
1861 }
1862
1863 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1864 an array descriptor type (representing an unconstrained array
1865 type). */
1866
1867 static int
1868 ada_is_direct_array_type (struct type *type)
1869 {
1870 if (type == NULL)
1871 return 0;
1872 type = ada_check_typedef (type);
1873 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1874 || ada_is_array_descriptor_type (type));
1875 }
1876
1877 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1878 * to one. */
1879
1880 static int
1881 ada_is_array_type (struct type *type)
1882 {
1883 while (type != NULL
1884 && (TYPE_CODE (type) == TYPE_CODE_PTR
1885 || TYPE_CODE (type) == TYPE_CODE_REF))
1886 type = TYPE_TARGET_TYPE (type);
1887 return ada_is_direct_array_type (type);
1888 }
1889
1890 /* Non-zero iff TYPE is a simple array type or pointer to one. */
1891
1892 int
1893 ada_is_simple_array_type (struct type *type)
1894 {
1895 if (type == NULL)
1896 return 0;
1897 type = ada_check_typedef (type);
1898 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1899 || (TYPE_CODE (type) == TYPE_CODE_PTR
1900 && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1901 == TYPE_CODE_ARRAY));
1902 }
1903
1904 /* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1905
1906 int
1907 ada_is_array_descriptor_type (struct type *type)
1908 {
1909 struct type *data_type = desc_data_target_type (type);
1910
1911 if (type == NULL)
1912 return 0;
1913 type = ada_check_typedef (type);
1914 return (data_type != NULL
1915 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1916 && desc_arity (desc_bounds_type (type)) > 0);
1917 }
1918
1919 /* Non-zero iff type is a partially mal-formed GNAT array
1920 descriptor. FIXME: This is to compensate for some problems with
1921 debugging output from GNAT. Re-examine periodically to see if it
1922 is still needed. */
1923
1924 int
1925 ada_is_bogus_array_descriptor (struct type *type)
1926 {
1927 return
1928 type != NULL
1929 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1930 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1931 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1932 && !ada_is_array_descriptor_type (type);
1933 }
1934
1935
1936 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1937 (fat pointer) returns the type of the array data described---specifically,
1938 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
1939 in from the descriptor; otherwise, they are left unspecified. If
1940 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1941 returns NULL. The result is simply the type of ARR if ARR is not
1942 a descriptor. */
1943 struct type *
1944 ada_type_of_array (struct value *arr, int bounds)
1945 {
1946 if (ada_is_constrained_packed_array_type (value_type (arr)))
1947 return decode_constrained_packed_array_type (value_type (arr));
1948
1949 if (!ada_is_array_descriptor_type (value_type (arr)))
1950 return value_type (arr);
1951
1952 if (!bounds)
1953 {
1954 struct type *array_type =
1955 ada_check_typedef (desc_data_target_type (value_type (arr)));
1956
1957 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1958 TYPE_FIELD_BITSIZE (array_type, 0) =
1959 decode_packed_array_bitsize (value_type (arr));
1960
1961 return array_type;
1962 }
1963 else
1964 {
1965 struct type *elt_type;
1966 int arity;
1967 struct value *descriptor;
1968
1969 elt_type = ada_array_element_type (value_type (arr), -1);
1970 arity = ada_array_arity (value_type (arr));
1971
1972 if (elt_type == NULL || arity == 0)
1973 return ada_check_typedef (value_type (arr));
1974
1975 descriptor = desc_bounds (arr);
1976 if (value_as_long (descriptor) == 0)
1977 return NULL;
1978 while (arity > 0)
1979 {
1980 struct type *range_type = alloc_type_copy (value_type (arr));
1981 struct type *array_type = alloc_type_copy (value_type (arr));
1982 struct value *low = desc_one_bound (descriptor, arity, 0);
1983 struct value *high = desc_one_bound (descriptor, arity, 1);
1984
1985 arity -= 1;
1986 create_static_range_type (range_type, value_type (low),
1987 longest_to_int (value_as_long (low)),
1988 longest_to_int (value_as_long (high)));
1989 elt_type = create_array_type (array_type, elt_type, range_type);
1990
1991 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1992 {
1993 /* We need to store the element packed bitsize, as well as
1994 recompute the array size, because it was previously
1995 computed based on the unpacked element size. */
1996 LONGEST lo = value_as_long (low);
1997 LONGEST hi = value_as_long (high);
1998
1999 TYPE_FIELD_BITSIZE (elt_type, 0) =
2000 decode_packed_array_bitsize (value_type (arr));
2001 /* If the array has no element, then the size is already
2002 zero, and does not need to be recomputed. */
2003 if (lo < hi)
2004 {
2005 int array_bitsize =
2006 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2007
2008 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2009 }
2010 }
2011 }
2012
2013 return lookup_pointer_type (elt_type);
2014 }
2015 }
2016
2017 /* If ARR does not represent an array, returns ARR unchanged.
2018 Otherwise, returns either a standard GDB array with bounds set
2019 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2020 GDB array. Returns NULL if ARR is a null fat pointer. */
2021
2022 struct value *
2023 ada_coerce_to_simple_array_ptr (struct value *arr)
2024 {
2025 if (ada_is_array_descriptor_type (value_type (arr)))
2026 {
2027 struct type *arrType = ada_type_of_array (arr, 1);
2028
2029 if (arrType == NULL)
2030 return NULL;
2031 return value_cast (arrType, value_copy (desc_data (arr)));
2032 }
2033 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2034 return decode_constrained_packed_array (arr);
2035 else
2036 return arr;
2037 }
2038
2039 /* If ARR does not represent an array, returns ARR unchanged.
2040 Otherwise, returns a standard GDB array describing ARR (which may
2041 be ARR itself if it already is in the proper form). */
2042
2043 struct value *
2044 ada_coerce_to_simple_array (struct value *arr)
2045 {
2046 if (ada_is_array_descriptor_type (value_type (arr)))
2047 {
2048 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
2049
2050 if (arrVal == NULL)
2051 error (_("Bounds unavailable for null array pointer."));
2052 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
2053 return value_ind (arrVal);
2054 }
2055 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2056 return decode_constrained_packed_array (arr);
2057 else
2058 return arr;
2059 }
2060
2061 /* If TYPE represents a GNAT array type, return it translated to an
2062 ordinary GDB array type (possibly with BITSIZE fields indicating
2063 packing). For other types, is the identity. */
2064
2065 struct type *
2066 ada_coerce_to_simple_array_type (struct type *type)
2067 {
2068 if (ada_is_constrained_packed_array_type (type))
2069 return decode_constrained_packed_array_type (type);
2070
2071 if (ada_is_array_descriptor_type (type))
2072 return ada_check_typedef (desc_data_target_type (type));
2073
2074 return type;
2075 }
2076
2077 /* Non-zero iff TYPE represents a standard GNAT packed-array type. */
2078
2079 static int
2080 ada_is_packed_array_type (struct type *type)
2081 {
2082 if (type == NULL)
2083 return 0;
2084 type = desc_base_type (type);
2085 type = ada_check_typedef (type);
2086 return
2087 ada_type_name (type) != NULL
2088 && strstr (ada_type_name (type), "___XP") != NULL;
2089 }
2090
2091 /* Non-zero iff TYPE represents a standard GNAT constrained
2092 packed-array type. */
2093
2094 int
2095 ada_is_constrained_packed_array_type (struct type *type)
2096 {
2097 return ada_is_packed_array_type (type)
2098 && !ada_is_array_descriptor_type (type);
2099 }
2100
2101 /* Non-zero iff TYPE represents an array descriptor for a
2102 unconstrained packed-array type. */
2103
2104 static int
2105 ada_is_unconstrained_packed_array_type (struct type *type)
2106 {
2107 return ada_is_packed_array_type (type)
2108 && ada_is_array_descriptor_type (type);
2109 }
2110
2111 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
2112 return the size of its elements in bits. */
2113
2114 static long
2115 decode_packed_array_bitsize (struct type *type)
2116 {
2117 const char *raw_name;
2118 const char *tail;
2119 long bits;
2120
2121 /* Access to arrays implemented as fat pointers are encoded as a typedef
2122 of the fat pointer type. We need the name of the fat pointer type
2123 to do the decoding, so strip the typedef layer. */
2124 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2125 type = ada_typedef_target_type (type);
2126
2127 raw_name = ada_type_name (ada_check_typedef (type));
2128 if (!raw_name)
2129 raw_name = ada_type_name (desc_base_type (type));
2130
2131 if (!raw_name)
2132 return 0;
2133
2134 tail = strstr (raw_name, "___XP");
2135 gdb_assert (tail != NULL);
2136
2137 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2138 {
2139 lim_warning
2140 (_("could not understand bit size information on packed array"));
2141 return 0;
2142 }
2143
2144 return bits;
2145 }
2146
2147 /* Given that TYPE is a standard GDB array type with all bounds filled
2148 in, and that the element size of its ultimate scalar constituents
2149 (that is, either its elements, or, if it is an array of arrays, its
2150 elements' elements, etc.) is *ELT_BITS, return an identical type,
2151 but with the bit sizes of its elements (and those of any
2152 constituent arrays) recorded in the BITSIZE components of its
2153 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2154 in bits.
2155
2156 Note that, for arrays whose index type has an XA encoding where
2157 a bound references a record discriminant, getting that discriminant,
2158 and therefore the actual value of that bound, is not possible
2159 because none of the given parameters gives us access to the record.
2160 This function assumes that it is OK in the context where it is being
2161 used to return an array whose bounds are still dynamic and where
2162 the length is arbitrary. */
2163
2164 static struct type *
2165 constrained_packed_array_type (struct type *type, long *elt_bits)
2166 {
2167 struct type *new_elt_type;
2168 struct type *new_type;
2169 struct type *index_type_desc;
2170 struct type *index_type;
2171 LONGEST low_bound, high_bound;
2172
2173 type = ada_check_typedef (type);
2174 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2175 return type;
2176
2177 index_type_desc = ada_find_parallel_type (type, "___XA");
2178 if (index_type_desc)
2179 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2180 NULL);
2181 else
2182 index_type = TYPE_INDEX_TYPE (type);
2183
2184 new_type = alloc_type_copy (type);
2185 new_elt_type =
2186 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2187 elt_bits);
2188 create_array_type (new_type, new_elt_type, index_type);
2189 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2190 TYPE_NAME (new_type) = ada_type_name (type);
2191
2192 if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2193 && is_dynamic_type (check_typedef (index_type)))
2194 || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
2195 low_bound = high_bound = 0;
2196 if (high_bound < low_bound)
2197 *elt_bits = TYPE_LENGTH (new_type) = 0;
2198 else
2199 {
2200 *elt_bits *= (high_bound - low_bound + 1);
2201 TYPE_LENGTH (new_type) =
2202 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2203 }
2204
2205 TYPE_FIXED_INSTANCE (new_type) = 1;
2206 return new_type;
2207 }
2208
2209 /* The array type encoded by TYPE, where
2210 ada_is_constrained_packed_array_type (TYPE). */
2211
2212 static struct type *
2213 decode_constrained_packed_array_type (struct type *type)
2214 {
2215 const char *raw_name = ada_type_name (ada_check_typedef (type));
2216 char *name;
2217 const char *tail;
2218 struct type *shadow_type;
2219 long bits;
2220
2221 if (!raw_name)
2222 raw_name = ada_type_name (desc_base_type (type));
2223
2224 if (!raw_name)
2225 return NULL;
2226
2227 name = (char *) alloca (strlen (raw_name) + 1);
2228 tail = strstr (raw_name, "___XP");
2229 type = desc_base_type (type);
2230
2231 memcpy (name, raw_name, tail - raw_name);
2232 name[tail - raw_name] = '\000';
2233
2234 shadow_type = ada_find_parallel_type_with_name (type, name);
2235
2236 if (shadow_type == NULL)
2237 {
2238 lim_warning (_("could not find bounds information on packed array"));
2239 return NULL;
2240 }
2241 CHECK_TYPEDEF (shadow_type);
2242
2243 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2244 {
2245 lim_warning (_("could not understand bounds "
2246 "information on packed array"));
2247 return NULL;
2248 }
2249
2250 bits = decode_packed_array_bitsize (type);
2251 return constrained_packed_array_type (shadow_type, &bits);
2252 }
2253
2254 /* Given that ARR is a struct value *indicating a GNAT constrained packed
2255 array, returns a simple array that denotes that array. Its type is a
2256 standard GDB array type except that the BITSIZEs of the array
2257 target types are set to the number of bits in each element, and the
2258 type length is set appropriately. */
2259
2260 static struct value *
2261 decode_constrained_packed_array (struct value *arr)
2262 {
2263 struct type *type;
2264
2265 /* If our value is a pointer, then dereference it. Likewise if
2266 the value is a reference. Make sure that this operation does not
2267 cause the target type to be fixed, as this would indirectly cause
2268 this array to be decoded. The rest of the routine assumes that
2269 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2270 and "value_ind" routines to perform the dereferencing, as opposed
2271 to using "ada_coerce_ref" or "ada_value_ind". */
2272 arr = coerce_ref (arr);
2273 if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2274 arr = value_ind (arr);
2275
2276 type = decode_constrained_packed_array_type (value_type (arr));
2277 if (type == NULL)
2278 {
2279 error (_("can't unpack array"));
2280 return NULL;
2281 }
2282
2283 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
2284 && ada_is_modular_type (value_type (arr)))
2285 {
2286 /* This is a (right-justified) modular type representing a packed
2287 array with no wrapper. In order to interpret the value through
2288 the (left-justified) packed array type we just built, we must
2289 first left-justify it. */
2290 int bit_size, bit_pos;
2291 ULONGEST mod;
2292
2293 mod = ada_modulus (value_type (arr)) - 1;
2294 bit_size = 0;
2295 while (mod > 0)
2296 {
2297 bit_size += 1;
2298 mod >>= 1;
2299 }
2300 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
2301 arr = ada_value_primitive_packed_val (arr, NULL,
2302 bit_pos / HOST_CHAR_BIT,
2303 bit_pos % HOST_CHAR_BIT,
2304 bit_size,
2305 type);
2306 }
2307
2308 return coerce_unspec_val_to_type (arr, type);
2309 }
2310
2311
2312 /* The value of the element of packed array ARR at the ARITY indices
2313 given in IND. ARR must be a simple array. */
2314
2315 static struct value *
2316 value_subscript_packed (struct value *arr, int arity, struct value **ind)
2317 {
2318 int i;
2319 int bits, elt_off, bit_off;
2320 long elt_total_bit_offset;
2321 struct type *elt_type;
2322 struct value *v;
2323
2324 bits = 0;
2325 elt_total_bit_offset = 0;
2326 elt_type = ada_check_typedef (value_type (arr));
2327 for (i = 0; i < arity; i += 1)
2328 {
2329 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
2330 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2331 error
2332 (_("attempt to do packed indexing of "
2333 "something other than a packed array"));
2334 else
2335 {
2336 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2337 LONGEST lowerbound, upperbound;
2338 LONGEST idx;
2339
2340 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2341 {
2342 lim_warning (_("don't know bounds of array"));
2343 lowerbound = upperbound = 0;
2344 }
2345
2346 idx = pos_atr (ind[i]);
2347 if (idx < lowerbound || idx > upperbound)
2348 lim_warning (_("packed array index %ld out of bounds"),
2349 (long) idx);
2350 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2351 elt_total_bit_offset += (idx - lowerbound) * bits;
2352 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2353 }
2354 }
2355 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2356 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
2357
2358 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
2359 bits, elt_type);
2360 return v;
2361 }
2362
2363 /* Non-zero iff TYPE includes negative integer values. */
2364
2365 static int
2366 has_negatives (struct type *type)
2367 {
2368 switch (TYPE_CODE (type))
2369 {
2370 default:
2371 return 0;
2372 case TYPE_CODE_INT:
2373 return !TYPE_UNSIGNED (type);
2374 case TYPE_CODE_RANGE:
2375 return TYPE_LOW_BOUND (type) < 0;
2376 }
2377 }
2378
2379
2380 /* Create a new value of type TYPE from the contents of OBJ starting
2381 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2382 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
2383 assigning through the result will set the field fetched from.
2384 VALADDR is ignored unless OBJ is NULL, in which case,
2385 VALADDR+OFFSET must address the start of storage containing the
2386 packed value. The value returned in this case is never an lval.
2387 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
2388
2389 struct value *
2390 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2391 long offset, int bit_offset, int bit_size,
2392 struct type *type)
2393 {
2394 struct value *v;
2395 int src, /* Index into the source area */
2396 targ, /* Index into the target area */
2397 srcBitsLeft, /* Number of source bits left to move */
2398 nsrc, ntarg, /* Number of source and target bytes */
2399 unusedLS, /* Number of bits in next significant
2400 byte of source that are unused */
2401 accumSize; /* Number of meaningful bits in accum */
2402 unsigned char *bytes; /* First byte containing data to unpack */
2403 unsigned char *unpacked;
2404 unsigned long accum; /* Staging area for bits being transferred */
2405 unsigned char sign;
2406 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2407 /* Transmit bytes from least to most significant; delta is the direction
2408 the indices move. */
2409 int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2410
2411 type = ada_check_typedef (type);
2412
2413 if (obj == NULL)
2414 {
2415 v = allocate_value (type);
2416 bytes = (unsigned char *) (valaddr + offset);
2417 }
2418 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2419 {
2420 v = value_at (type, value_address (obj) + offset);
2421 type = value_type (v);
2422 if (TYPE_LENGTH (type) * HOST_CHAR_BIT < bit_size)
2423 {
2424 /* This can happen in the case of an array of dynamic objects,
2425 where the size of each element changes from element to element.
2426 In that case, we're initially given the array stride, but
2427 after resolving the element type, we find that its size is
2428 less than this stride. In that case, adjust bit_size to
2429 match TYPE's length, and recompute LEN accordingly. */
2430 bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2431 len = TYPE_LENGTH (type) + (bit_offset + HOST_CHAR_BIT - 1) / 8;
2432 }
2433 bytes = (unsigned char *) alloca (len);
2434 read_memory (value_address (v), bytes, len);
2435 }
2436 else
2437 {
2438 v = allocate_value (type);
2439 bytes = (unsigned char *) value_contents (obj) + offset;
2440 }
2441
2442 if (obj != NULL)
2443 {
2444 long new_offset = offset;
2445
2446 set_value_component_location (v, obj);
2447 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2448 set_value_bitsize (v, bit_size);
2449 if (value_bitpos (v) >= HOST_CHAR_BIT)
2450 {
2451 ++new_offset;
2452 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2453 }
2454 set_value_offset (v, new_offset);
2455
2456 /* Also set the parent value. This is needed when trying to
2457 assign a new value (in inferior memory). */
2458 set_value_parent (v, obj);
2459 }
2460 else
2461 set_value_bitsize (v, bit_size);
2462 unpacked = (unsigned char *) value_contents (v);
2463
2464 srcBitsLeft = bit_size;
2465 nsrc = len;
2466 ntarg = TYPE_LENGTH (type);
2467 sign = 0;
2468 if (bit_size == 0)
2469 {
2470 memset (unpacked, 0, TYPE_LENGTH (type));
2471 return v;
2472 }
2473 else if (gdbarch_bits_big_endian (get_type_arch (type)))
2474 {
2475 src = len - 1;
2476 if (has_negatives (type)
2477 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2478 sign = ~0;
2479
2480 unusedLS =
2481 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2482 % HOST_CHAR_BIT;
2483
2484 switch (TYPE_CODE (type))
2485 {
2486 case TYPE_CODE_ARRAY:
2487 case TYPE_CODE_UNION:
2488 case TYPE_CODE_STRUCT:
2489 /* Non-scalar values must be aligned at a byte boundary... */
2490 accumSize =
2491 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2492 /* ... And are placed at the beginning (most-significant) bytes
2493 of the target. */
2494 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2495 ntarg = targ + 1;
2496 break;
2497 default:
2498 accumSize = 0;
2499 targ = TYPE_LENGTH (type) - 1;
2500 break;
2501 }
2502 }
2503 else
2504 {
2505 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2506
2507 src = targ = 0;
2508 unusedLS = bit_offset;
2509 accumSize = 0;
2510
2511 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2512 sign = ~0;
2513 }
2514
2515 accum = 0;
2516 while (nsrc > 0)
2517 {
2518 /* Mask for removing bits of the next source byte that are not
2519 part of the value. */
2520 unsigned int unusedMSMask =
2521 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2522 1;
2523 /* Sign-extend bits for this byte. */
2524 unsigned int signMask = sign & ~unusedMSMask;
2525
2526 accum |=
2527 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2528 accumSize += HOST_CHAR_BIT - unusedLS;
2529 if (accumSize >= HOST_CHAR_BIT)
2530 {
2531 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2532 accumSize -= HOST_CHAR_BIT;
2533 accum >>= HOST_CHAR_BIT;
2534 ntarg -= 1;
2535 targ += delta;
2536 }
2537 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2538 unusedLS = 0;
2539 nsrc -= 1;
2540 src += delta;
2541 }
2542 while (ntarg > 0)
2543 {
2544 accum |= sign << accumSize;
2545 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2546 accumSize -= HOST_CHAR_BIT;
2547 accum >>= HOST_CHAR_BIT;
2548 ntarg -= 1;
2549 targ += delta;
2550 }
2551
2552 if (is_dynamic_type (value_type (v)))
2553 v = value_from_contents_and_address (value_type (v), value_contents (v),
2554 0);
2555 return v;
2556 }
2557
2558 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2559 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
2560 not overlap. */
2561 static void
2562 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2563 int src_offset, int n, int bits_big_endian_p)
2564 {
2565 unsigned int accum, mask;
2566 int accum_bits, chunk_size;
2567
2568 target += targ_offset / HOST_CHAR_BIT;
2569 targ_offset %= HOST_CHAR_BIT;
2570 source += src_offset / HOST_CHAR_BIT;
2571 src_offset %= HOST_CHAR_BIT;
2572 if (bits_big_endian_p)
2573 {
2574 accum = (unsigned char) *source;
2575 source += 1;
2576 accum_bits = HOST_CHAR_BIT - src_offset;
2577
2578 while (n > 0)
2579 {
2580 int unused_right;
2581
2582 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2583 accum_bits += HOST_CHAR_BIT;
2584 source += 1;
2585 chunk_size = HOST_CHAR_BIT - targ_offset;
2586 if (chunk_size > n)
2587 chunk_size = n;
2588 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2589 mask = ((1 << chunk_size) - 1) << unused_right;
2590 *target =
2591 (*target & ~mask)
2592 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2593 n -= chunk_size;
2594 accum_bits -= chunk_size;
2595 target += 1;
2596 targ_offset = 0;
2597 }
2598 }
2599 else
2600 {
2601 accum = (unsigned char) *source >> src_offset;
2602 source += 1;
2603 accum_bits = HOST_CHAR_BIT - src_offset;
2604
2605 while (n > 0)
2606 {
2607 accum = accum + ((unsigned char) *source << accum_bits);
2608 accum_bits += HOST_CHAR_BIT;
2609 source += 1;
2610 chunk_size = HOST_CHAR_BIT - targ_offset;
2611 if (chunk_size > n)
2612 chunk_size = n;
2613 mask = ((1 << chunk_size) - 1) << targ_offset;
2614 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2615 n -= chunk_size;
2616 accum_bits -= chunk_size;
2617 accum >>= chunk_size;
2618 target += 1;
2619 targ_offset = 0;
2620 }
2621 }
2622 }
2623
2624 /* Store the contents of FROMVAL into the location of TOVAL.
2625 Return a new value with the location of TOVAL and contents of
2626 FROMVAL. Handles assignment into packed fields that have
2627 floating-point or non-scalar types. */
2628
2629 static struct value *
2630 ada_value_assign (struct value *toval, struct value *fromval)
2631 {
2632 struct type *type = value_type (toval);
2633 int bits = value_bitsize (toval);
2634
2635 toval = ada_coerce_ref (toval);
2636 fromval = ada_coerce_ref (fromval);
2637
2638 if (ada_is_direct_array_type (value_type (toval)))
2639 toval = ada_coerce_to_simple_array (toval);
2640 if (ada_is_direct_array_type (value_type (fromval)))
2641 fromval = ada_coerce_to_simple_array (fromval);
2642
2643 if (!deprecated_value_modifiable (toval))
2644 error (_("Left operand of assignment is not a modifiable lvalue."));
2645
2646 if (VALUE_LVAL (toval) == lval_memory
2647 && bits > 0
2648 && (TYPE_CODE (type) == TYPE_CODE_FLT
2649 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2650 {
2651 int len = (value_bitpos (toval)
2652 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2653 int from_size;
2654 gdb_byte *buffer = alloca (len);
2655 struct value *val;
2656 CORE_ADDR to_addr = value_address (toval);
2657
2658 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2659 fromval = value_cast (type, fromval);
2660
2661 read_memory (to_addr, buffer, len);
2662 from_size = value_bitsize (fromval);
2663 if (from_size == 0)
2664 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2665 if (gdbarch_bits_big_endian (get_type_arch (type)))
2666 move_bits (buffer, value_bitpos (toval),
2667 value_contents (fromval), from_size - bits, bits, 1);
2668 else
2669 move_bits (buffer, value_bitpos (toval),
2670 value_contents (fromval), 0, bits, 0);
2671 write_memory_with_notification (to_addr, buffer, len);
2672
2673 val = value_copy (toval);
2674 memcpy (value_contents_raw (val), value_contents (fromval),
2675 TYPE_LENGTH (type));
2676 deprecated_set_value_type (val, type);
2677
2678 return val;
2679 }
2680
2681 return value_assign (toval, fromval);
2682 }
2683
2684
2685 /* Given that COMPONENT is a memory lvalue that is part of the lvalue
2686 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2687 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2688 COMPONENT, and not the inferior's memory. The current contents
2689 of COMPONENT are ignored.
2690
2691 Although not part of the initial design, this function also works
2692 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2693 had a null address, and COMPONENT had an address which is equal to
2694 its offset inside CONTAINER. */
2695
2696 static void
2697 value_assign_to_component (struct value *container, struct value *component,
2698 struct value *val)
2699 {
2700 LONGEST offset_in_container =
2701 (LONGEST) (value_address (component) - value_address (container));
2702 int bit_offset_in_container =
2703 value_bitpos (component) - value_bitpos (container);
2704 int bits;
2705
2706 val = value_cast (value_type (component), val);
2707
2708 if (value_bitsize (component) == 0)
2709 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2710 else
2711 bits = value_bitsize (component);
2712
2713 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2714 move_bits (value_contents_writeable (container) + offset_in_container,
2715 value_bitpos (container) + bit_offset_in_container,
2716 value_contents (val),
2717 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2718 bits, 1);
2719 else
2720 move_bits (value_contents_writeable (container) + offset_in_container,
2721 value_bitpos (container) + bit_offset_in_container,
2722 value_contents (val), 0, bits, 0);
2723 }
2724
2725 /* The value of the element of array ARR at the ARITY indices given in IND.
2726 ARR may be either a simple array, GNAT array descriptor, or pointer
2727 thereto. */
2728
2729 struct value *
2730 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2731 {
2732 int k;
2733 struct value *elt;
2734 struct type *elt_type;
2735
2736 elt = ada_coerce_to_simple_array (arr);
2737
2738 elt_type = ada_check_typedef (value_type (elt));
2739 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2740 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2741 return value_subscript_packed (elt, arity, ind);
2742
2743 for (k = 0; k < arity; k += 1)
2744 {
2745 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2746 error (_("too many subscripts (%d expected)"), k);
2747 elt = value_subscript (elt, pos_atr (ind[k]));
2748 }
2749 return elt;
2750 }
2751
2752 /* Assuming ARR is a pointer to a GDB array, the value of the element
2753 of *ARR at the ARITY indices given in IND.
2754 Does not read the entire array into memory. */
2755
2756 static struct value *
2757 ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
2758 {
2759 int k;
2760 struct type *type
2761 = check_typedef (value_enclosing_type (ada_value_ind (arr)));
2762
2763 for (k = 0; k < arity; k += 1)
2764 {
2765 LONGEST lwb, upb;
2766
2767 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2768 error (_("too many subscripts (%d expected)"), k);
2769 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2770 value_copy (arr));
2771 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2772 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2773 type = TYPE_TARGET_TYPE (type);
2774 }
2775
2776 return value_ind (arr);
2777 }
2778
2779 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2780 actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2781 elements starting at index LOW. The lower bound of this array is LOW, as
2782 per Ada rules. */
2783 static struct value *
2784 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2785 int low, int high)
2786 {
2787 struct type *type0 = ada_check_typedef (type);
2788 CORE_ADDR base = value_as_address (array_ptr)
2789 + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2790 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
2791 struct type *index_type
2792 = create_static_range_type (NULL,
2793 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2794 low, high);
2795 struct type *slice_type =
2796 create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
2797
2798 return value_at_lazy (slice_type, base);
2799 }
2800
2801
2802 static struct value *
2803 ada_value_slice (struct value *array, int low, int high)
2804 {
2805 struct type *type = ada_check_typedef (value_type (array));
2806 struct type *index_type
2807 = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2808 struct type *slice_type =
2809 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2810
2811 return value_cast (slice_type, value_slice (array, low, high - low + 1));
2812 }
2813
2814 /* If type is a record type in the form of a standard GNAT array
2815 descriptor, returns the number of dimensions for type. If arr is a
2816 simple array, returns the number of "array of"s that prefix its
2817 type designation. Otherwise, returns 0. */
2818
2819 int
2820 ada_array_arity (struct type *type)
2821 {
2822 int arity;
2823
2824 if (type == NULL)
2825 return 0;
2826
2827 type = desc_base_type (type);
2828
2829 arity = 0;
2830 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2831 return desc_arity (desc_bounds_type (type));
2832 else
2833 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2834 {
2835 arity += 1;
2836 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2837 }
2838
2839 return arity;
2840 }
2841
2842 /* If TYPE is a record type in the form of a standard GNAT array
2843 descriptor or a simple array type, returns the element type for
2844 TYPE after indexing by NINDICES indices, or by all indices if
2845 NINDICES is -1. Otherwise, returns NULL. */
2846
2847 struct type *
2848 ada_array_element_type (struct type *type, int nindices)
2849 {
2850 type = desc_base_type (type);
2851
2852 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2853 {
2854 int k;
2855 struct type *p_array_type;
2856
2857 p_array_type = desc_data_target_type (type);
2858
2859 k = ada_array_arity (type);
2860 if (k == 0)
2861 return NULL;
2862
2863 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
2864 if (nindices >= 0 && k > nindices)
2865 k = nindices;
2866 while (k > 0 && p_array_type != NULL)
2867 {
2868 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2869 k -= 1;
2870 }
2871 return p_array_type;
2872 }
2873 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2874 {
2875 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2876 {
2877 type = TYPE_TARGET_TYPE (type);
2878 nindices -= 1;
2879 }
2880 return type;
2881 }
2882
2883 return NULL;
2884 }
2885
2886 /* The type of nth index in arrays of given type (n numbering from 1).
2887 Does not examine memory. Throws an error if N is invalid or TYPE
2888 is not an array type. NAME is the name of the Ada attribute being
2889 evaluated ('range, 'first, 'last, or 'length); it is used in building
2890 the error message. */
2891
2892 static struct type *
2893 ada_index_type (struct type *type, int n, const char *name)
2894 {
2895 struct type *result_type;
2896
2897 type = desc_base_type (type);
2898
2899 if (n < 0 || n > ada_array_arity (type))
2900 error (_("invalid dimension number to '%s"), name);
2901
2902 if (ada_is_simple_array_type (type))
2903 {
2904 int i;
2905
2906 for (i = 1; i < n; i += 1)
2907 type = TYPE_TARGET_TYPE (type);
2908 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2909 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2910 has a target type of TYPE_CODE_UNDEF. We compensate here, but
2911 perhaps stabsread.c would make more sense. */
2912 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2913 result_type = NULL;
2914 }
2915 else
2916 {
2917 result_type = desc_index_type (desc_bounds_type (type), n);
2918 if (result_type == NULL)
2919 error (_("attempt to take bound of something that is not an array"));
2920 }
2921
2922 return result_type;
2923 }
2924
2925 /* Given that arr is an array type, returns the lower bound of the
2926 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2927 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
2928 array-descriptor type. It works for other arrays with bounds supplied
2929 by run-time quantities other than discriminants. */
2930
2931 static LONGEST
2932 ada_array_bound_from_type (struct type *arr_type, int n, int which)
2933 {
2934 struct type *type, *index_type_desc, *index_type;
2935 int i;
2936
2937 gdb_assert (which == 0 || which == 1);
2938
2939 if (ada_is_constrained_packed_array_type (arr_type))
2940 arr_type = decode_constrained_packed_array_type (arr_type);
2941
2942 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2943 return (LONGEST) - which;
2944
2945 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2946 type = TYPE_TARGET_TYPE (arr_type);
2947 else
2948 type = arr_type;
2949
2950 if (TYPE_FIXED_INSTANCE (type))
2951 {
2952 /* The array has already been fixed, so we do not need to
2953 check the parallel ___XA type again. That encoding has
2954 already been applied, so ignore it now. */
2955 index_type_desc = NULL;
2956 }
2957 else
2958 {
2959 index_type_desc = ada_find_parallel_type (type, "___XA");
2960 ada_fixup_array_indexes_type (index_type_desc);
2961 }
2962
2963 if (index_type_desc != NULL)
2964 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2965 NULL);
2966 else
2967 {
2968 struct type *elt_type = check_typedef (type);
2969
2970 for (i = 1; i < n; i++)
2971 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2972
2973 index_type = TYPE_INDEX_TYPE (elt_type);
2974 }
2975
2976 return
2977 (LONGEST) (which == 0
2978 ? ada_discrete_type_low_bound (index_type)
2979 : ada_discrete_type_high_bound (index_type));
2980 }
2981
2982 /* Given that arr is an array value, returns the lower bound of the
2983 nth index (numbering from 1) if WHICH is 0, and the upper bound if
2984 WHICH is 1. This routine will also work for arrays with bounds
2985 supplied by run-time quantities other than discriminants. */
2986
2987 static LONGEST
2988 ada_array_bound (struct value *arr, int n, int which)
2989 {
2990 struct type *arr_type;
2991
2992 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2993 arr = value_ind (arr);
2994 arr_type = value_enclosing_type (arr);
2995
2996 if (ada_is_constrained_packed_array_type (arr_type))
2997 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2998 else if (ada_is_simple_array_type (arr_type))
2999 return ada_array_bound_from_type (arr_type, n, which);
3000 else
3001 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
3002 }
3003
3004 /* Given that arr is an array value, returns the length of the
3005 nth index. This routine will also work for arrays with bounds
3006 supplied by run-time quantities other than discriminants.
3007 Does not work for arrays indexed by enumeration types with representation
3008 clauses at the moment. */
3009
3010 static LONGEST
3011 ada_array_length (struct value *arr, int n)
3012 {
3013 struct type *arr_type;
3014
3015 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3016 arr = value_ind (arr);
3017 arr_type = value_enclosing_type (arr);
3018
3019 if (ada_is_constrained_packed_array_type (arr_type))
3020 return ada_array_length (decode_constrained_packed_array (arr), n);
3021
3022 if (ada_is_simple_array_type (arr_type))
3023 return (ada_array_bound_from_type (arr_type, n, 1)
3024 - ada_array_bound_from_type (arr_type, n, 0) + 1);
3025 else
3026 return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
3027 - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
3028 }
3029
3030 /* An empty array whose type is that of ARR_TYPE (an array type),
3031 with bounds LOW to LOW-1. */
3032
3033 static struct value *
3034 empty_array (struct type *arr_type, int low)
3035 {
3036 struct type *arr_type0 = ada_check_typedef (arr_type);
3037 struct type *index_type
3038 = create_static_range_type
3039 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low, low - 1);
3040 struct type *elt_type = ada_array_element_type (arr_type0, 1);
3041
3042 return allocate_value (create_array_type (NULL, elt_type, index_type));
3043 }
3044 \f
3045
3046 /* Name resolution */
3047
3048 /* The "decoded" name for the user-definable Ada operator corresponding
3049 to OP. */
3050
3051 static const char *
3052 ada_decoded_op_name (enum exp_opcode op)
3053 {
3054 int i;
3055
3056 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
3057 {
3058 if (ada_opname_table[i].op == op)
3059 return ada_opname_table[i].decoded;
3060 }
3061 error (_("Could not find operator name for opcode"));
3062 }
3063
3064
3065 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3066 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3067 undefined namespace) and converts operators that are
3068 user-defined into appropriate function calls. If CONTEXT_TYPE is
3069 non-null, it provides a preferred result type [at the moment, only
3070 type void has any effect---causing procedures to be preferred over
3071 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
3072 return type is preferred. May change (expand) *EXP. */
3073
3074 static void
3075 resolve (struct expression **expp, int void_context_p)
3076 {
3077 struct type *context_type = NULL;
3078 int pc = 0;
3079
3080 if (void_context_p)
3081 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3082
3083 resolve_subexp (expp, &pc, 1, context_type);
3084 }
3085
3086 /* Resolve the operator of the subexpression beginning at
3087 position *POS of *EXPP. "Resolving" consists of replacing
3088 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3089 with their resolutions, replacing built-in operators with
3090 function calls to user-defined operators, where appropriate, and,
3091 when DEPROCEDURE_P is non-zero, converting function-valued variables
3092 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3093 are as in ada_resolve, above. */
3094
3095 static struct value *
3096 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
3097 struct type *context_type)
3098 {
3099 int pc = *pos;
3100 int i;
3101 struct expression *exp; /* Convenience: == *expp. */
3102 enum exp_opcode op = (*expp)->elts[pc].opcode;
3103 struct value **argvec; /* Vector of operand types (alloca'ed). */
3104 int nargs; /* Number of operands. */
3105 int oplen;
3106
3107 argvec = NULL;
3108 nargs = 0;
3109 exp = *expp;
3110
3111 /* Pass one: resolve operands, saving their types and updating *pos,
3112 if needed. */
3113 switch (op)
3114 {
3115 case OP_FUNCALL:
3116 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3117 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3118 *pos += 7;
3119 else
3120 {
3121 *pos += 3;
3122 resolve_subexp (expp, pos, 0, NULL);
3123 }
3124 nargs = longest_to_int (exp->elts[pc + 1].longconst);
3125 break;
3126
3127 case UNOP_ADDR:
3128 *pos += 1;
3129 resolve_subexp (expp, pos, 0, NULL);
3130 break;
3131
3132 case UNOP_QUAL:
3133 *pos += 3;
3134 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
3135 break;
3136
3137 case OP_ATR_MODULUS:
3138 case OP_ATR_SIZE:
3139 case OP_ATR_TAG:
3140 case OP_ATR_FIRST:
3141 case OP_ATR_LAST:
3142 case OP_ATR_LENGTH:
3143 case OP_ATR_POS:
3144 case OP_ATR_VAL:
3145 case OP_ATR_MIN:
3146 case OP_ATR_MAX:
3147 case TERNOP_IN_RANGE:
3148 case BINOP_IN_BOUNDS:
3149 case UNOP_IN_RANGE:
3150 case OP_AGGREGATE:
3151 case OP_OTHERS:
3152 case OP_CHOICES:
3153 case OP_POSITIONAL:
3154 case OP_DISCRETE_RANGE:
3155 case OP_NAME:
3156 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3157 *pos += oplen;
3158 break;
3159
3160 case BINOP_ASSIGN:
3161 {
3162 struct value *arg1;
3163
3164 *pos += 1;
3165 arg1 = resolve_subexp (expp, pos, 0, NULL);
3166 if (arg1 == NULL)
3167 resolve_subexp (expp, pos, 1, NULL);
3168 else
3169 resolve_subexp (expp, pos, 1, value_type (arg1));
3170 break;
3171 }
3172
3173 case UNOP_CAST:
3174 *pos += 3;
3175 nargs = 1;
3176 break;
3177
3178 case BINOP_ADD:
3179 case BINOP_SUB:
3180 case BINOP_MUL:
3181 case BINOP_DIV:
3182 case BINOP_REM:
3183 case BINOP_MOD:
3184 case BINOP_EXP:
3185 case BINOP_CONCAT:
3186 case BINOP_LOGICAL_AND:
3187 case BINOP_LOGICAL_OR:
3188 case BINOP_BITWISE_AND:
3189 case BINOP_BITWISE_IOR:
3190 case BINOP_BITWISE_XOR:
3191
3192 case BINOP_EQUAL:
3193 case BINOP_NOTEQUAL:
3194 case BINOP_LESS:
3195 case BINOP_GTR:
3196 case BINOP_LEQ:
3197 case BINOP_GEQ:
3198
3199 case BINOP_REPEAT:
3200 case BINOP_SUBSCRIPT:
3201 case BINOP_COMMA:
3202 *pos += 1;
3203 nargs = 2;
3204 break;
3205
3206 case UNOP_NEG:
3207 case UNOP_PLUS:
3208 case UNOP_LOGICAL_NOT:
3209 case UNOP_ABS:
3210 case UNOP_IND:
3211 *pos += 1;
3212 nargs = 1;
3213 break;
3214
3215 case OP_LONG:
3216 case OP_DOUBLE:
3217 case OP_VAR_VALUE:
3218 *pos += 4;
3219 break;
3220
3221 case OP_TYPE:
3222 case OP_BOOL:
3223 case OP_LAST:
3224 case OP_INTERNALVAR:
3225 *pos += 3;
3226 break;
3227
3228 case UNOP_MEMVAL:
3229 *pos += 3;
3230 nargs = 1;
3231 break;
3232
3233 case OP_REGISTER:
3234 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3235 break;
3236
3237 case STRUCTOP_STRUCT:
3238 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3239 nargs = 1;
3240 break;
3241
3242 case TERNOP_SLICE:
3243 *pos += 1;
3244 nargs = 3;
3245 break;
3246
3247 case OP_STRING:
3248 break;
3249
3250 default:
3251 error (_("Unexpected operator during name resolution"));
3252 }
3253
3254 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
3255 for (i = 0; i < nargs; i += 1)
3256 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3257 argvec[i] = NULL;
3258 exp = *expp;
3259
3260 /* Pass two: perform any resolution on principal operator. */
3261 switch (op)
3262 {
3263 default:
3264 break;
3265
3266 case OP_VAR_VALUE:
3267 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
3268 {
3269 struct ada_symbol_info *candidates;
3270 int n_candidates;
3271
3272 n_candidates =
3273 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3274 (exp->elts[pc + 2].symbol),
3275 exp->elts[pc + 1].block, VAR_DOMAIN,
3276 &candidates);
3277
3278 if (n_candidates > 1)
3279 {
3280 /* Types tend to get re-introduced locally, so if there
3281 are any local symbols that are not types, first filter
3282 out all types. */
3283 int j;
3284 for (j = 0; j < n_candidates; j += 1)
3285 switch (SYMBOL_CLASS (candidates[j].sym))
3286 {
3287 case LOC_REGISTER:
3288 case LOC_ARG:
3289 case LOC_REF_ARG:
3290 case LOC_REGPARM_ADDR:
3291 case LOC_LOCAL:
3292 case LOC_COMPUTED:
3293 goto FoundNonType;
3294 default:
3295 break;
3296 }
3297 FoundNonType:
3298 if (j < n_candidates)
3299 {
3300 j = 0;
3301 while (j < n_candidates)
3302 {
3303 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3304 {
3305 candidates[j] = candidates[n_candidates - 1];
3306 n_candidates -= 1;
3307 }
3308 else
3309 j += 1;
3310 }
3311 }
3312 }
3313
3314 if (n_candidates == 0)
3315 error (_("No definition found for %s"),
3316 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3317 else if (n_candidates == 1)
3318 i = 0;
3319 else if (deprocedure_p
3320 && !is_nonfunction (candidates, n_candidates))
3321 {
3322 i = ada_resolve_function
3323 (candidates, n_candidates, NULL, 0,
3324 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3325 context_type);
3326 if (i < 0)
3327 error (_("Could not find a match for %s"),
3328 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3329 }
3330 else
3331 {
3332 printf_filtered (_("Multiple matches for %s\n"),
3333 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3334 user_select_syms (candidates, n_candidates, 1);
3335 i = 0;
3336 }
3337
3338 exp->elts[pc + 1].block = candidates[i].block;
3339 exp->elts[pc + 2].symbol = candidates[i].sym;
3340 if (innermost_block == NULL
3341 || contained_in (candidates[i].block, innermost_block))
3342 innermost_block = candidates[i].block;
3343 }
3344
3345 if (deprocedure_p
3346 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3347 == TYPE_CODE_FUNC))
3348 {
3349 replace_operator_with_call (expp, pc, 0, 0,
3350 exp->elts[pc + 2].symbol,
3351 exp->elts[pc + 1].block);
3352 exp = *expp;
3353 }
3354 break;
3355
3356 case OP_FUNCALL:
3357 {
3358 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3359 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3360 {
3361 struct ada_symbol_info *candidates;
3362 int n_candidates;
3363
3364 n_candidates =
3365 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3366 (exp->elts[pc + 5].symbol),
3367 exp->elts[pc + 4].block, VAR_DOMAIN,
3368 &candidates);
3369 if (n_candidates == 1)
3370 i = 0;
3371 else
3372 {
3373 i = ada_resolve_function
3374 (candidates, n_candidates,
3375 argvec, nargs,
3376 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3377 context_type);
3378 if (i < 0)
3379 error (_("Could not find a match for %s"),
3380 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3381 }
3382
3383 exp->elts[pc + 4].block = candidates[i].block;
3384 exp->elts[pc + 5].symbol = candidates[i].sym;
3385 if (innermost_block == NULL
3386 || contained_in (candidates[i].block, innermost_block))
3387 innermost_block = candidates[i].block;
3388 }
3389 }
3390 break;
3391 case BINOP_ADD:
3392 case BINOP_SUB:
3393 case BINOP_MUL:
3394 case BINOP_DIV:
3395 case BINOP_REM:
3396 case BINOP_MOD:
3397 case BINOP_CONCAT:
3398 case BINOP_BITWISE_AND:
3399 case BINOP_BITWISE_IOR:
3400 case BINOP_BITWISE_XOR:
3401 case BINOP_EQUAL:
3402 case BINOP_NOTEQUAL:
3403 case BINOP_LESS:
3404 case BINOP_GTR:
3405 case BINOP_LEQ:
3406 case BINOP_GEQ:
3407 case BINOP_EXP:
3408 case UNOP_NEG:
3409 case UNOP_PLUS:
3410 case UNOP_LOGICAL_NOT:
3411 case UNOP_ABS:
3412 if (possible_user_operator_p (op, argvec))
3413 {
3414 struct ada_symbol_info *candidates;
3415 int n_candidates;
3416
3417 n_candidates =
3418 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3419 (struct block *) NULL, VAR_DOMAIN,
3420 &candidates);
3421 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3422 ada_decoded_op_name (op), NULL);
3423 if (i < 0)
3424 break;
3425
3426 replace_operator_with_call (expp, pc, nargs, 1,
3427 candidates[i].sym, candidates[i].block);
3428 exp = *expp;
3429 }
3430 break;
3431
3432 case OP_TYPE:
3433 case OP_REGISTER:
3434 return NULL;
3435 }
3436
3437 *pos = pc;
3438 return evaluate_subexp_type (exp, pos);
3439 }
3440
3441 /* Return non-zero if formal type FTYPE matches actual type ATYPE. If
3442 MAY_DEREF is non-zero, the formal may be a pointer and the actual
3443 a non-pointer. */
3444 /* The term "match" here is rather loose. The match is heuristic and
3445 liberal. */
3446
3447 static int
3448 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3449 {
3450 ftype = ada_check_typedef (ftype);
3451 atype = ada_check_typedef (atype);
3452
3453 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3454 ftype = TYPE_TARGET_TYPE (ftype);
3455 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3456 atype = TYPE_TARGET_TYPE (atype);
3457
3458 switch (TYPE_CODE (ftype))
3459 {
3460 default:
3461 return TYPE_CODE (ftype) == TYPE_CODE (atype);
3462 case TYPE_CODE_PTR:
3463 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3464 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3465 TYPE_TARGET_TYPE (atype), 0);
3466 else
3467 return (may_deref
3468 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3469 case TYPE_CODE_INT:
3470 case TYPE_CODE_ENUM:
3471 case TYPE_CODE_RANGE:
3472 switch (TYPE_CODE (atype))
3473 {
3474 case TYPE_CODE_INT:
3475 case TYPE_CODE_ENUM:
3476 case TYPE_CODE_RANGE:
3477 return 1;
3478 default:
3479 return 0;
3480 }
3481
3482 case TYPE_CODE_ARRAY:
3483 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3484 || ada_is_array_descriptor_type (atype));
3485
3486 case TYPE_CODE_STRUCT:
3487 if (ada_is_array_descriptor_type (ftype))
3488 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3489 || ada_is_array_descriptor_type (atype));
3490 else
3491 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3492 && !ada_is_array_descriptor_type (atype));
3493
3494 case TYPE_CODE_UNION:
3495 case TYPE_CODE_FLT:
3496 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3497 }
3498 }
3499
3500 /* Return non-zero if the formals of FUNC "sufficiently match" the
3501 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3502 may also be an enumeral, in which case it is treated as a 0-
3503 argument function. */
3504
3505 static int
3506 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3507 {
3508 int i;
3509 struct type *func_type = SYMBOL_TYPE (func);
3510
3511 if (SYMBOL_CLASS (func) == LOC_CONST
3512 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3513 return (n_actuals == 0);
3514 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3515 return 0;
3516
3517 if (TYPE_NFIELDS (func_type) != n_actuals)
3518 return 0;
3519
3520 for (i = 0; i < n_actuals; i += 1)
3521 {
3522 if (actuals[i] == NULL)
3523 return 0;
3524 else
3525 {
3526 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3527 i));
3528 struct type *atype = ada_check_typedef (value_type (actuals[i]));
3529
3530 if (!ada_type_match (ftype, atype, 1))
3531 return 0;
3532 }
3533 }
3534 return 1;
3535 }
3536
3537 /* False iff function type FUNC_TYPE definitely does not produce a value
3538 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3539 FUNC_TYPE is not a valid function type with a non-null return type
3540 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3541
3542 static int
3543 return_match (struct type *func_type, struct type *context_type)
3544 {
3545 struct type *return_type;
3546
3547 if (func_type == NULL)
3548 return 1;
3549
3550 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3551 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3552 else
3553 return_type = get_base_type (func_type);
3554 if (return_type == NULL)
3555 return 1;
3556
3557 context_type = get_base_type (context_type);
3558
3559 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3560 return context_type == NULL || return_type == context_type;
3561 else if (context_type == NULL)
3562 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3563 else
3564 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3565 }
3566
3567
3568 /* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
3569 function (if any) that matches the types of the NARGS arguments in
3570 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3571 that returns that type, then eliminate matches that don't. If
3572 CONTEXT_TYPE is void and there is at least one match that does not
3573 return void, eliminate all matches that do.
3574
3575 Asks the user if there is more than one match remaining. Returns -1
3576 if there is no such symbol or none is selected. NAME is used
3577 solely for messages. May re-arrange and modify SYMS in
3578 the process; the index returned is for the modified vector. */
3579
3580 static int
3581 ada_resolve_function (struct ada_symbol_info syms[],
3582 int nsyms, struct value **args, int nargs,
3583 const char *name, struct type *context_type)
3584 {
3585 int fallback;
3586 int k;
3587 int m; /* Number of hits */
3588
3589 m = 0;
3590 /* In the first pass of the loop, we only accept functions matching
3591 context_type. If none are found, we add a second pass of the loop
3592 where every function is accepted. */
3593 for (fallback = 0; m == 0 && fallback < 2; fallback++)
3594 {
3595 for (k = 0; k < nsyms; k += 1)
3596 {
3597 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3598
3599 if (ada_args_match (syms[k].sym, args, nargs)
3600 && (fallback || return_match (type, context_type)))
3601 {
3602 syms[m] = syms[k];
3603 m += 1;
3604 }
3605 }
3606 }
3607
3608 if (m == 0)
3609 return -1;
3610 else if (m > 1)
3611 {
3612 printf_filtered (_("Multiple matches for %s\n"), name);
3613 user_select_syms (syms, m, 1);
3614 return 0;
3615 }
3616 return 0;
3617 }
3618
3619 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3620 in a listing of choices during disambiguation (see sort_choices, below).
3621 The idea is that overloadings of a subprogram name from the
3622 same package should sort in their source order. We settle for ordering
3623 such symbols by their trailing number (__N or $N). */
3624
3625 static int
3626 encoded_ordered_before (const char *N0, const char *N1)
3627 {
3628 if (N1 == NULL)
3629 return 0;
3630 else if (N0 == NULL)
3631 return 1;
3632 else
3633 {
3634 int k0, k1;
3635
3636 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3637 ;
3638 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3639 ;
3640 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3641 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3642 {
3643 int n0, n1;
3644
3645 n0 = k0;
3646 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3647 n0 -= 1;
3648 n1 = k1;
3649 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3650 n1 -= 1;
3651 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3652 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3653 }
3654 return (strcmp (N0, N1) < 0);
3655 }
3656 }
3657
3658 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3659 encoded names. */
3660
3661 static void
3662 sort_choices (struct ada_symbol_info syms[], int nsyms)
3663 {
3664 int i;
3665
3666 for (i = 1; i < nsyms; i += 1)
3667 {
3668 struct ada_symbol_info sym = syms[i];
3669 int j;
3670
3671 for (j = i - 1; j >= 0; j -= 1)
3672 {
3673 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3674 SYMBOL_LINKAGE_NAME (sym.sym)))
3675 break;
3676 syms[j + 1] = syms[j];
3677 }
3678 syms[j + 1] = sym;
3679 }
3680 }
3681
3682 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3683 by asking the user (if necessary), returning the number selected,
3684 and setting the first elements of SYMS items. Error if no symbols
3685 selected. */
3686
3687 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3688 to be re-integrated one of these days. */
3689
3690 int
3691 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3692 {
3693 int i;
3694 int *chosen = (int *) alloca (sizeof (int) * nsyms);
3695 int n_chosen;
3696 int first_choice = (max_results == 1) ? 1 : 2;
3697 const char *select_mode = multiple_symbols_select_mode ();
3698
3699 if (max_results < 1)
3700 error (_("Request to select 0 symbols!"));
3701 if (nsyms <= 1)
3702 return nsyms;
3703
3704 if (select_mode == multiple_symbols_cancel)
3705 error (_("\
3706 canceled because the command is ambiguous\n\
3707 See set/show multiple-symbol."));
3708
3709 /* If select_mode is "all", then return all possible symbols.
3710 Only do that if more than one symbol can be selected, of course.
3711 Otherwise, display the menu as usual. */
3712 if (select_mode == multiple_symbols_all && max_results > 1)
3713 return nsyms;
3714
3715 printf_unfiltered (_("[0] cancel\n"));
3716 if (max_results > 1)
3717 printf_unfiltered (_("[1] all\n"));
3718
3719 sort_choices (syms, nsyms);
3720
3721 for (i = 0; i < nsyms; i += 1)
3722 {
3723 if (syms[i].sym == NULL)
3724 continue;
3725
3726 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3727 {
3728 struct symtab_and_line sal =
3729 find_function_start_sal (syms[i].sym, 1);
3730
3731 if (sal.symtab == NULL)
3732 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3733 i + first_choice,
3734 SYMBOL_PRINT_NAME (syms[i].sym),
3735 sal.line);
3736 else
3737 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3738 SYMBOL_PRINT_NAME (syms[i].sym),
3739 symtab_to_filename_for_display (sal.symtab),
3740 sal.line);
3741 continue;
3742 }
3743 else
3744 {
3745 int is_enumeral =
3746 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3747 && SYMBOL_TYPE (syms[i].sym) != NULL
3748 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3749 struct symtab *symtab = NULL;
3750
3751 if (SYMBOL_OBJFILE_OWNED (syms[i].sym))
3752 symtab = symbol_symtab (syms[i].sym);
3753
3754 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3755 printf_unfiltered (_("[%d] %s at %s:%d\n"),
3756 i + first_choice,
3757 SYMBOL_PRINT_NAME (syms[i].sym),
3758 symtab_to_filename_for_display (symtab),
3759 SYMBOL_LINE (syms[i].sym));
3760 else if (is_enumeral
3761 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3762 {
3763 printf_unfiltered (("[%d] "), i + first_choice);
3764 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3765 gdb_stdout, -1, 0, &type_print_raw_options);
3766 printf_unfiltered (_("'(%s) (enumeral)\n"),
3767 SYMBOL_PRINT_NAME (syms[i].sym));
3768 }
3769 else if (symtab != NULL)
3770 printf_unfiltered (is_enumeral
3771 ? _("[%d] %s in %s (enumeral)\n")
3772 : _("[%d] %s at %s:?\n"),
3773 i + first_choice,
3774 SYMBOL_PRINT_NAME (syms[i].sym),
3775 symtab_to_filename_for_display (symtab));
3776 else
3777 printf_unfiltered (is_enumeral
3778 ? _("[%d] %s (enumeral)\n")
3779 : _("[%d] %s at ?\n"),
3780 i + first_choice,
3781 SYMBOL_PRINT_NAME (syms[i].sym));
3782 }
3783 }
3784
3785 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3786 "overload-choice");
3787
3788 for (i = 0; i < n_chosen; i += 1)
3789 syms[i] = syms[chosen[i]];
3790
3791 return n_chosen;
3792 }
3793
3794 /* Read and validate a set of numeric choices from the user in the
3795 range 0 .. N_CHOICES-1. Place the results in increasing
3796 order in CHOICES[0 .. N-1], and return N.
3797
3798 The user types choices as a sequence of numbers on one line
3799 separated by blanks, encoding them as follows:
3800
3801 + A choice of 0 means to cancel the selection, throwing an error.
3802 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3803 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3804
3805 The user is not allowed to choose more than MAX_RESULTS values.
3806
3807 ANNOTATION_SUFFIX, if present, is used to annotate the input
3808 prompts (for use with the -f switch). */
3809
3810 int
3811 get_selections (int *choices, int n_choices, int max_results,
3812 int is_all_choice, char *annotation_suffix)
3813 {
3814 char *args;
3815 char *prompt;
3816 int n_chosen;
3817 int first_choice = is_all_choice ? 2 : 1;
3818
3819 prompt = getenv ("PS2");
3820 if (prompt == NULL)
3821 prompt = "> ";
3822
3823 args = command_line_input (prompt, 0, annotation_suffix);
3824
3825 if (args == NULL)
3826 error_no_arg (_("one or more choice numbers"));
3827
3828 n_chosen = 0;
3829
3830 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3831 order, as given in args. Choices are validated. */
3832 while (1)
3833 {
3834 char *args2;
3835 int choice, j;
3836
3837 args = skip_spaces (args);
3838 if (*args == '\0' && n_chosen == 0)
3839 error_no_arg (_("one or more choice numbers"));
3840 else if (*args == '\0')
3841 break;
3842
3843 choice = strtol (args, &args2, 10);
3844 if (args == args2 || choice < 0
3845 || choice > n_choices + first_choice - 1)
3846 error (_("Argument must be choice number"));
3847 args = args2;
3848
3849 if (choice == 0)
3850 error (_("cancelled"));
3851
3852 if (choice < first_choice)
3853 {
3854 n_chosen = n_choices;
3855 for (j = 0; j < n_choices; j += 1)
3856 choices[j] = j;
3857 break;
3858 }
3859 choice -= first_choice;
3860
3861 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3862 {
3863 }
3864
3865 if (j < 0 || choice != choices[j])
3866 {
3867 int k;
3868
3869 for (k = n_chosen - 1; k > j; k -= 1)
3870 choices[k + 1] = choices[k];
3871 choices[j + 1] = choice;
3872 n_chosen += 1;
3873 }
3874 }
3875
3876 if (n_chosen > max_results)
3877 error (_("Select no more than %d of the above"), max_results);
3878
3879 return n_chosen;
3880 }
3881
3882 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3883 on the function identified by SYM and BLOCK, and taking NARGS
3884 arguments. Update *EXPP as needed to hold more space. */
3885
3886 static void
3887 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3888 int oplen, struct symbol *sym,
3889 const struct block *block)
3890 {
3891 /* A new expression, with 6 more elements (3 for funcall, 4 for function
3892 symbol, -oplen for operator being replaced). */
3893 struct expression *newexp = (struct expression *)
3894 xzalloc (sizeof (struct expression)
3895 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3896 struct expression *exp = *expp;
3897
3898 newexp->nelts = exp->nelts + 7 - oplen;
3899 newexp->language_defn = exp->language_defn;
3900 newexp->gdbarch = exp->gdbarch;
3901 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3902 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3903 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3904
3905 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3906 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3907
3908 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3909 newexp->elts[pc + 4].block = block;
3910 newexp->elts[pc + 5].symbol = sym;
3911
3912 *expp = newexp;
3913 xfree (exp);
3914 }
3915
3916 /* Type-class predicates */
3917
3918 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3919 or FLOAT). */
3920
3921 static int
3922 numeric_type_p (struct type *type)
3923 {
3924 if (type == NULL)
3925 return 0;
3926 else
3927 {
3928 switch (TYPE_CODE (type))
3929 {
3930 case TYPE_CODE_INT:
3931 case TYPE_CODE_FLT:
3932 return 1;
3933 case TYPE_CODE_RANGE:
3934 return (type == TYPE_TARGET_TYPE (type)
3935 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3936 default:
3937 return 0;
3938 }
3939 }
3940 }
3941
3942 /* True iff TYPE is integral (an INT or RANGE of INTs). */
3943
3944 static int
3945 integer_type_p (struct type *type)
3946 {
3947 if (type == NULL)
3948 return 0;
3949 else
3950 {
3951 switch (TYPE_CODE (type))
3952 {
3953 case TYPE_CODE_INT:
3954 return 1;
3955 case TYPE_CODE_RANGE:
3956 return (type == TYPE_TARGET_TYPE (type)
3957 || integer_type_p (TYPE_TARGET_TYPE (type)));
3958 default:
3959 return 0;
3960 }
3961 }
3962 }
3963
3964 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
3965
3966 static int
3967 scalar_type_p (struct type *type)
3968 {
3969 if (type == NULL)
3970 return 0;
3971 else
3972 {
3973 switch (TYPE_CODE (type))
3974 {
3975 case TYPE_CODE_INT:
3976 case TYPE_CODE_RANGE:
3977 case TYPE_CODE_ENUM:
3978 case TYPE_CODE_FLT:
3979 return 1;
3980 default:
3981 return 0;
3982 }
3983 }
3984 }
3985
3986 /* True iff TYPE is discrete (INT, RANGE, ENUM). */
3987
3988 static int
3989 discrete_type_p (struct type *type)
3990 {
3991 if (type == NULL)
3992 return 0;
3993 else
3994 {
3995 switch (TYPE_CODE (type))
3996 {
3997 case TYPE_CODE_INT:
3998 case TYPE_CODE_RANGE:
3999 case TYPE_CODE_ENUM:
4000 case TYPE_CODE_BOOL:
4001 return 1;
4002 default:
4003 return 0;
4004 }
4005 }
4006 }
4007
4008 /* Returns non-zero if OP with operands in the vector ARGS could be
4009 a user-defined function. Errs on the side of pre-defined operators
4010 (i.e., result 0). */
4011
4012 static int
4013 possible_user_operator_p (enum exp_opcode op, struct value *args[])
4014 {
4015 struct type *type0 =
4016 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
4017 struct type *type1 =
4018 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
4019
4020 if (type0 == NULL)
4021 return 0;
4022
4023 switch (op)
4024 {
4025 default:
4026 return 0;
4027
4028 case BINOP_ADD:
4029 case BINOP_SUB:
4030 case BINOP_MUL:
4031 case BINOP_DIV:
4032 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
4033
4034 case BINOP_REM:
4035 case BINOP_MOD:
4036 case BINOP_BITWISE_AND:
4037 case BINOP_BITWISE_IOR:
4038 case BINOP_BITWISE_XOR:
4039 return (!(integer_type_p (type0) && integer_type_p (type1)));
4040
4041 case BINOP_EQUAL:
4042 case BINOP_NOTEQUAL:
4043 case BINOP_LESS:
4044 case BINOP_GTR:
4045 case BINOP_LEQ:
4046 case BINOP_GEQ:
4047 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
4048
4049 case BINOP_CONCAT:
4050 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
4051
4052 case BINOP_EXP:
4053 return (!(numeric_type_p (type0) && integer_type_p (type1)));
4054
4055 case UNOP_NEG:
4056 case UNOP_PLUS:
4057 case UNOP_LOGICAL_NOT:
4058 case UNOP_ABS:
4059 return (!numeric_type_p (type0));
4060
4061 }
4062 }
4063 \f
4064 /* Renaming */
4065
4066 /* NOTES:
4067
4068 1. In the following, we assume that a renaming type's name may
4069 have an ___XD suffix. It would be nice if this went away at some
4070 point.
4071 2. We handle both the (old) purely type-based representation of
4072 renamings and the (new) variable-based encoding. At some point,
4073 it is devoutly to be hoped that the former goes away
4074 (FIXME: hilfinger-2007-07-09).
4075 3. Subprogram renamings are not implemented, although the XRS
4076 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4077
4078 /* If SYM encodes a renaming,
4079
4080 <renaming> renames <renamed entity>,
4081
4082 sets *LEN to the length of the renamed entity's name,
4083 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4084 the string describing the subcomponent selected from the renamed
4085 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
4086 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4087 are undefined). Otherwise, returns a value indicating the category
4088 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4089 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4090 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4091 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4092 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4093 may be NULL, in which case they are not assigned.
4094
4095 [Currently, however, GCC does not generate subprogram renamings.] */
4096
4097 enum ada_renaming_category
4098 ada_parse_renaming (struct symbol *sym,
4099 const char **renamed_entity, int *len,
4100 const char **renaming_expr)
4101 {
4102 enum ada_renaming_category kind;
4103 const char *info;
4104 const char *suffix;
4105
4106 if (sym == NULL)
4107 return ADA_NOT_RENAMING;
4108 switch (SYMBOL_CLASS (sym))
4109 {
4110 default:
4111 return ADA_NOT_RENAMING;
4112 case LOC_TYPEDEF:
4113 return parse_old_style_renaming (SYMBOL_TYPE (sym),
4114 renamed_entity, len, renaming_expr);
4115 case LOC_LOCAL:
4116 case LOC_STATIC:
4117 case LOC_COMPUTED:
4118 case LOC_OPTIMIZED_OUT:
4119 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4120 if (info == NULL)
4121 return ADA_NOT_RENAMING;
4122 switch (info[5])
4123 {
4124 case '_':
4125 kind = ADA_OBJECT_RENAMING;
4126 info += 6;
4127 break;
4128 case 'E':
4129 kind = ADA_EXCEPTION_RENAMING;
4130 info += 7;
4131 break;
4132 case 'P':
4133 kind = ADA_PACKAGE_RENAMING;
4134 info += 7;
4135 break;
4136 case 'S':
4137 kind = ADA_SUBPROGRAM_RENAMING;
4138 info += 7;
4139 break;
4140 default:
4141 return ADA_NOT_RENAMING;
4142 }
4143 }
4144
4145 if (renamed_entity != NULL)
4146 *renamed_entity = info;
4147 suffix = strstr (info, "___XE");
4148 if (suffix == NULL || suffix == info)
4149 return ADA_NOT_RENAMING;
4150 if (len != NULL)
4151 *len = strlen (info) - strlen (suffix);
4152 suffix += 5;
4153 if (renaming_expr != NULL)
4154 *renaming_expr = suffix;
4155 return kind;
4156 }
4157
4158 /* Assuming TYPE encodes a renaming according to the old encoding in
4159 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4160 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
4161 ADA_NOT_RENAMING otherwise. */
4162 static enum ada_renaming_category
4163 parse_old_style_renaming (struct type *type,
4164 const char **renamed_entity, int *len,
4165 const char **renaming_expr)
4166 {
4167 enum ada_renaming_category kind;
4168 const char *name;
4169 const char *info;
4170 const char *suffix;
4171
4172 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4173 || TYPE_NFIELDS (type) != 1)
4174 return ADA_NOT_RENAMING;
4175
4176 name = type_name_no_tag (type);
4177 if (name == NULL)
4178 return ADA_NOT_RENAMING;
4179
4180 name = strstr (name, "___XR");
4181 if (name == NULL)
4182 return ADA_NOT_RENAMING;
4183 switch (name[5])
4184 {
4185 case '\0':
4186 case '_':
4187 kind = ADA_OBJECT_RENAMING;
4188 break;
4189 case 'E':
4190 kind = ADA_EXCEPTION_RENAMING;
4191 break;
4192 case 'P':
4193 kind = ADA_PACKAGE_RENAMING;
4194 break;
4195 case 'S':
4196 kind = ADA_SUBPROGRAM_RENAMING;
4197 break;
4198 default:
4199 return ADA_NOT_RENAMING;
4200 }
4201
4202 info = TYPE_FIELD_NAME (type, 0);
4203 if (info == NULL)
4204 return ADA_NOT_RENAMING;
4205 if (renamed_entity != NULL)
4206 *renamed_entity = info;
4207 suffix = strstr (info, "___XE");
4208 if (renaming_expr != NULL)
4209 *renaming_expr = suffix + 5;
4210 if (suffix == NULL || suffix == info)
4211 return ADA_NOT_RENAMING;
4212 if (len != NULL)
4213 *len = suffix - info;
4214 return kind;
4215 }
4216
4217 /* Compute the value of the given RENAMING_SYM, which is expected to
4218 be a symbol encoding a renaming expression. BLOCK is the block
4219 used to evaluate the renaming. */
4220
4221 static struct value *
4222 ada_read_renaming_var_value (struct symbol *renaming_sym,
4223 const struct block *block)
4224 {
4225 const char *sym_name;
4226 struct expression *expr;
4227 struct value *value;
4228 struct cleanup *old_chain = NULL;
4229
4230 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4231 expr = parse_exp_1 (&sym_name, 0, block, 0);
4232 old_chain = make_cleanup (free_current_contents, &expr);
4233 value = evaluate_expression (expr);
4234
4235 do_cleanups (old_chain);
4236 return value;
4237 }
4238 \f
4239
4240 /* Evaluation: Function Calls */
4241
4242 /* Return an lvalue containing the value VAL. This is the identity on
4243 lvalues, and otherwise has the side-effect of allocating memory
4244 in the inferior where a copy of the value contents is copied. */
4245
4246 static struct value *
4247 ensure_lval (struct value *val)
4248 {
4249 if (VALUE_LVAL (val) == not_lval
4250 || VALUE_LVAL (val) == lval_internalvar)
4251 {
4252 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4253 const CORE_ADDR addr =
4254 value_as_long (value_allocate_space_in_inferior (len));
4255
4256 set_value_address (val, addr);
4257 VALUE_LVAL (val) = lval_memory;
4258 write_memory (addr, value_contents (val), len);
4259 }
4260
4261 return val;
4262 }
4263
4264 /* Return the value ACTUAL, converted to be an appropriate value for a
4265 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4266 allocating any necessary descriptors (fat pointers), or copies of
4267 values not residing in memory, updating it as needed. */
4268
4269 struct value *
4270 ada_convert_actual (struct value *actual, struct type *formal_type0)
4271 {
4272 struct type *actual_type = ada_check_typedef (value_type (actual));
4273 struct type *formal_type = ada_check_typedef (formal_type0);
4274 struct type *formal_target =
4275 TYPE_CODE (formal_type) == TYPE_CODE_PTR
4276 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
4277 struct type *actual_target =
4278 TYPE_CODE (actual_type) == TYPE_CODE_PTR
4279 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
4280
4281 if (ada_is_array_descriptor_type (formal_target)
4282 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4283 return make_array_descriptor (formal_type, actual);
4284 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4285 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
4286 {
4287 struct value *result;
4288
4289 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4290 && ada_is_array_descriptor_type (actual_target))
4291 result = desc_data (actual);
4292 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4293 {
4294 if (VALUE_LVAL (actual) != lval_memory)
4295 {
4296 struct value *val;
4297
4298 actual_type = ada_check_typedef (value_type (actual));
4299 val = allocate_value (actual_type);
4300 memcpy ((char *) value_contents_raw (val),
4301 (char *) value_contents (actual),
4302 TYPE_LENGTH (actual_type));
4303 actual = ensure_lval (val);
4304 }
4305 result = value_addr (actual);
4306 }
4307 else
4308 return actual;
4309 return value_cast_pointers (formal_type, result, 0);
4310 }
4311 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4312 return ada_value_ind (actual);
4313
4314 return actual;
4315 }
4316
4317 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4318 type TYPE. This is usually an inefficient no-op except on some targets
4319 (such as AVR) where the representation of a pointer and an address
4320 differs. */
4321
4322 static CORE_ADDR
4323 value_pointer (struct value *value, struct type *type)
4324 {
4325 struct gdbarch *gdbarch = get_type_arch (type);
4326 unsigned len = TYPE_LENGTH (type);
4327 gdb_byte *buf = alloca (len);
4328 CORE_ADDR addr;
4329
4330 addr = value_address (value);
4331 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4332 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4333 return addr;
4334 }
4335
4336
4337 /* Push a descriptor of type TYPE for array value ARR on the stack at
4338 *SP, updating *SP to reflect the new descriptor. Return either
4339 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4340 to-descriptor type rather than a descriptor type), a struct value *
4341 representing a pointer to this descriptor. */
4342
4343 static struct value *
4344 make_array_descriptor (struct type *type, struct value *arr)
4345 {
4346 struct type *bounds_type = desc_bounds_type (type);
4347 struct type *desc_type = desc_base_type (type);
4348 struct value *descriptor = allocate_value (desc_type);
4349 struct value *bounds = allocate_value (bounds_type);
4350 int i;
4351
4352 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4353 i > 0; i -= 1)
4354 {
4355 modify_field (value_type (bounds), value_contents_writeable (bounds),
4356 ada_array_bound (arr, i, 0),
4357 desc_bound_bitpos (bounds_type, i, 0),
4358 desc_bound_bitsize (bounds_type, i, 0));
4359 modify_field (value_type (bounds), value_contents_writeable (bounds),
4360 ada_array_bound (arr, i, 1),
4361 desc_bound_bitpos (bounds_type, i, 1),
4362 desc_bound_bitsize (bounds_type, i, 1));
4363 }
4364
4365 bounds = ensure_lval (bounds);
4366
4367 modify_field (value_type (descriptor),
4368 value_contents_writeable (descriptor),
4369 value_pointer (ensure_lval (arr),
4370 TYPE_FIELD_TYPE (desc_type, 0)),
4371 fat_pntr_data_bitpos (desc_type),
4372 fat_pntr_data_bitsize (desc_type));
4373
4374 modify_field (value_type (descriptor),
4375 value_contents_writeable (descriptor),
4376 value_pointer (bounds,
4377 TYPE_FIELD_TYPE (desc_type, 1)),
4378 fat_pntr_bounds_bitpos (desc_type),
4379 fat_pntr_bounds_bitsize (desc_type));
4380
4381 descriptor = ensure_lval (descriptor);
4382
4383 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4384 return value_addr (descriptor);
4385 else
4386 return descriptor;
4387 }
4388 \f
4389 /* Symbol Cache Module */
4390
4391 /* Performance measurements made as of 2010-01-15 indicate that
4392 this cache does bring some noticeable improvements. Depending
4393 on the type of entity being printed, the cache can make it as much
4394 as an order of magnitude faster than without it.
4395
4396 The descriptive type DWARF extension has significantly reduced
4397 the need for this cache, at least when DWARF is being used. However,
4398 even in this case, some expensive name-based symbol searches are still
4399 sometimes necessary - to find an XVZ variable, mostly. */
4400
4401 /* Initialize the contents of SYM_CACHE. */
4402
4403 static void
4404 ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4405 {
4406 obstack_init (&sym_cache->cache_space);
4407 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4408 }
4409
4410 /* Free the memory used by SYM_CACHE. */
4411
4412 static void
4413 ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
4414 {
4415 obstack_free (&sym_cache->cache_space, NULL);
4416 xfree (sym_cache);
4417 }
4418
4419 /* Return the symbol cache associated to the given program space PSPACE.
4420 If not allocated for this PSPACE yet, allocate and initialize one. */
4421
4422 static struct ada_symbol_cache *
4423 ada_get_symbol_cache (struct program_space *pspace)
4424 {
4425 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4426
4427 if (pspace_data->sym_cache == NULL)
4428 {
4429 pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4430 ada_init_symbol_cache (pspace_data->sym_cache);
4431 }
4432
4433 return pspace_data->sym_cache;
4434 }
4435
4436 /* Clear all entries from the symbol cache. */
4437
4438 static void
4439 ada_clear_symbol_cache (void)
4440 {
4441 struct ada_symbol_cache *sym_cache
4442 = ada_get_symbol_cache (current_program_space);
4443
4444 obstack_free (&sym_cache->cache_space, NULL);
4445 ada_init_symbol_cache (sym_cache);
4446 }
4447
4448 /* Search our cache for an entry matching NAME and DOMAIN.
4449 Return it if found, or NULL otherwise. */
4450
4451 static struct cache_entry **
4452 find_entry (const char *name, domain_enum domain)
4453 {
4454 struct ada_symbol_cache *sym_cache
4455 = ada_get_symbol_cache (current_program_space);
4456 int h = msymbol_hash (name) % HASH_SIZE;
4457 struct cache_entry **e;
4458
4459 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
4460 {
4461 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
4462 return e;
4463 }
4464 return NULL;
4465 }
4466
4467 /* Search the symbol cache for an entry matching NAME and DOMAIN.
4468 Return 1 if found, 0 otherwise.
4469
4470 If an entry was found and SYM is not NULL, set *SYM to the entry's
4471 SYM. Same principle for BLOCK if not NULL. */
4472
4473 static int
4474 lookup_cached_symbol (const char *name, domain_enum domain,
4475 struct symbol **sym, const struct block **block)
4476 {
4477 struct cache_entry **e = find_entry (name, domain);
4478
4479 if (e == NULL)
4480 return 0;
4481 if (sym != NULL)
4482 *sym = (*e)->sym;
4483 if (block != NULL)
4484 *block = (*e)->block;
4485 return 1;
4486 }
4487
4488 /* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4489 in domain DOMAIN, save this result in our symbol cache. */
4490
4491 static void
4492 cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
4493 const struct block *block)
4494 {
4495 struct ada_symbol_cache *sym_cache
4496 = ada_get_symbol_cache (current_program_space);
4497 int h;
4498 char *copy;
4499 struct cache_entry *e;
4500
4501 /* Symbols for builtin types don't have a block.
4502 For now don't cache such symbols. */
4503 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4504 return;
4505
4506 /* If the symbol is a local symbol, then do not cache it, as a search
4507 for that symbol depends on the context. To determine whether
4508 the symbol is local or not, we check the block where we found it
4509 against the global and static blocks of its associated symtab. */
4510 if (sym
4511 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4512 GLOBAL_BLOCK) != block
4513 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
4514 STATIC_BLOCK) != block)
4515 return;
4516
4517 h = msymbol_hash (name) % HASH_SIZE;
4518 e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4519 sizeof (*e));
4520 e->next = sym_cache->root[h];
4521 sym_cache->root[h] = e;
4522 e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
4523 strcpy (copy, name);
4524 e->sym = sym;
4525 e->domain = domain;
4526 e->block = block;
4527 }
4528 \f
4529 /* Symbol Lookup */
4530
4531 /* Return nonzero if wild matching should be used when searching for
4532 all symbols matching LOOKUP_NAME.
4533
4534 LOOKUP_NAME is expected to be a symbol name after transformation
4535 for Ada lookups (see ada_name_for_lookup). */
4536
4537 static int
4538 should_use_wild_match (const char *lookup_name)
4539 {
4540 return (strstr (lookup_name, "__") == NULL);
4541 }
4542
4543 /* Return the result of a standard (literal, C-like) lookup of NAME in
4544 given DOMAIN, visible from lexical block BLOCK. */
4545
4546 static struct symbol *
4547 standard_lookup (const char *name, const struct block *block,
4548 domain_enum domain)
4549 {
4550 /* Initialize it just to avoid a GCC false warning. */
4551 struct symbol *sym = NULL;
4552
4553 if (lookup_cached_symbol (name, domain, &sym, NULL))
4554 return sym;
4555 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4556 cache_symbol (name, domain, sym, block_found);
4557 return sym;
4558 }
4559
4560
4561 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4562 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4563 since they contend in overloading in the same way. */
4564 static int
4565 is_nonfunction (struct ada_symbol_info syms[], int n)
4566 {
4567 int i;
4568
4569 for (i = 0; i < n; i += 1)
4570 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4571 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4572 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4573 return 1;
4574
4575 return 0;
4576 }
4577
4578 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4579 struct types. Otherwise, they may not. */
4580
4581 static int
4582 equiv_types (struct type *type0, struct type *type1)
4583 {
4584 if (type0 == type1)
4585 return 1;
4586 if (type0 == NULL || type1 == NULL
4587 || TYPE_CODE (type0) != TYPE_CODE (type1))
4588 return 0;
4589 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4590 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4591 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4592 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4593 return 1;
4594
4595 return 0;
4596 }
4597
4598 /* True iff SYM0 represents the same entity as SYM1, or one that is
4599 no more defined than that of SYM1. */
4600
4601 static int
4602 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4603 {
4604 if (sym0 == sym1)
4605 return 1;
4606 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4607 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4608 return 0;
4609
4610 switch (SYMBOL_CLASS (sym0))
4611 {
4612 case LOC_UNDEF:
4613 return 1;
4614 case LOC_TYPEDEF:
4615 {
4616 struct type *type0 = SYMBOL_TYPE (sym0);
4617 struct type *type1 = SYMBOL_TYPE (sym1);
4618 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4619 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4620 int len0 = strlen (name0);
4621
4622 return
4623 TYPE_CODE (type0) == TYPE_CODE (type1)
4624 && (equiv_types (type0, type1)
4625 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4626 && startswith (name1 + len0, "___XV")));
4627 }
4628 case LOC_CONST:
4629 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4630 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4631 default:
4632 return 0;
4633 }
4634 }
4635
4636 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4637 records in OBSTACKP. Do nothing if SYM is a duplicate. */
4638
4639 static void
4640 add_defn_to_vec (struct obstack *obstackp,
4641 struct symbol *sym,
4642 const struct block *block)
4643 {
4644 int i;
4645 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4646
4647 /* Do not try to complete stub types, as the debugger is probably
4648 already scanning all symbols matching a certain name at the
4649 time when this function is called. Trying to replace the stub
4650 type by its associated full type will cause us to restart a scan
4651 which may lead to an infinite recursion. Instead, the client
4652 collecting the matching symbols will end up collecting several
4653 matches, with at least one of them complete. It can then filter
4654 out the stub ones if needed. */
4655
4656 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4657 {
4658 if (lesseq_defined_than (sym, prevDefns[i].sym))
4659 return;
4660 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4661 {
4662 prevDefns[i].sym = sym;
4663 prevDefns[i].block = block;
4664 return;
4665 }
4666 }
4667
4668 {
4669 struct ada_symbol_info info;
4670
4671 info.sym = sym;
4672 info.block = block;
4673 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4674 }
4675 }
4676
4677 /* Number of ada_symbol_info structures currently collected in
4678 current vector in *OBSTACKP. */
4679
4680 static int
4681 num_defns_collected (struct obstack *obstackp)
4682 {
4683 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4684 }
4685
4686 /* Vector of ada_symbol_info structures currently collected in current
4687 vector in *OBSTACKP. If FINISH, close off the vector and return
4688 its final address. */
4689
4690 static struct ada_symbol_info *
4691 defns_collected (struct obstack *obstackp, int finish)
4692 {
4693 if (finish)
4694 return obstack_finish (obstackp);
4695 else
4696 return (struct ada_symbol_info *) obstack_base (obstackp);
4697 }
4698
4699 /* Return a bound minimal symbol matching NAME according to Ada
4700 decoding rules. Returns an invalid symbol if there is no such
4701 minimal symbol. Names prefixed with "standard__" are handled
4702 specially: "standard__" is first stripped off, and only static and
4703 global symbols are searched. */
4704
4705 struct bound_minimal_symbol
4706 ada_lookup_simple_minsym (const char *name)
4707 {
4708 struct bound_minimal_symbol result;
4709 struct objfile *objfile;
4710 struct minimal_symbol *msymbol;
4711 const int wild_match_p = should_use_wild_match (name);
4712
4713 memset (&result, 0, sizeof (result));
4714
4715 /* Special case: If the user specifies a symbol name inside package
4716 Standard, do a non-wild matching of the symbol name without
4717 the "standard__" prefix. This was primarily introduced in order
4718 to allow the user to specifically access the standard exceptions
4719 using, for instance, Standard.Constraint_Error when Constraint_Error
4720 is ambiguous (due to the user defining its own Constraint_Error
4721 entity inside its program). */
4722 if (startswith (name, "standard__"))
4723 name += sizeof ("standard__") - 1;
4724
4725 ALL_MSYMBOLS (objfile, msymbol)
4726 {
4727 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
4728 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4729 {
4730 result.minsym = msymbol;
4731 result.objfile = objfile;
4732 break;
4733 }
4734 }
4735
4736 return result;
4737 }
4738
4739 /* For all subprograms that statically enclose the subprogram of the
4740 selected frame, add symbols matching identifier NAME in DOMAIN
4741 and their blocks to the list of data in OBSTACKP, as for
4742 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4743 with a wildcard prefix. */
4744
4745 static void
4746 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4747 const char *name, domain_enum domain,
4748 int wild_match_p)
4749 {
4750 }
4751
4752 /* True if TYPE is definitely an artificial type supplied to a symbol
4753 for which no debugging information was given in the symbol file. */
4754
4755 static int
4756 is_nondebugging_type (struct type *type)
4757 {
4758 const char *name = ada_type_name (type);
4759
4760 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4761 }
4762
4763 /* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4764 that are deemed "identical" for practical purposes.
4765
4766 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4767 types and that their number of enumerals is identical (in other
4768 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
4769
4770 static int
4771 ada_identical_enum_types_p (struct type *type1, struct type *type2)
4772 {
4773 int i;
4774
4775 /* The heuristic we use here is fairly conservative. We consider
4776 that 2 enumerate types are identical if they have the same
4777 number of enumerals and that all enumerals have the same
4778 underlying value and name. */
4779
4780 /* All enums in the type should have an identical underlying value. */
4781 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4782 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
4783 return 0;
4784
4785 /* All enumerals should also have the same name (modulo any numerical
4786 suffix). */
4787 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4788 {
4789 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4790 const char *name_2 = TYPE_FIELD_NAME (type2, i);
4791 int len_1 = strlen (name_1);
4792 int len_2 = strlen (name_2);
4793
4794 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4795 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4796 if (len_1 != len_2
4797 || strncmp (TYPE_FIELD_NAME (type1, i),
4798 TYPE_FIELD_NAME (type2, i),
4799 len_1) != 0)
4800 return 0;
4801 }
4802
4803 return 1;
4804 }
4805
4806 /* Return nonzero if all the symbols in SYMS are all enumeral symbols
4807 that are deemed "identical" for practical purposes. Sometimes,
4808 enumerals are not strictly identical, but their types are so similar
4809 that they can be considered identical.
4810
4811 For instance, consider the following code:
4812
4813 type Color is (Black, Red, Green, Blue, White);
4814 type RGB_Color is new Color range Red .. Blue;
4815
4816 Type RGB_Color is a subrange of an implicit type which is a copy
4817 of type Color. If we call that implicit type RGB_ColorB ("B" is
4818 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4819 As a result, when an expression references any of the enumeral
4820 by name (Eg. "print green"), the expression is technically
4821 ambiguous and the user should be asked to disambiguate. But
4822 doing so would only hinder the user, since it wouldn't matter
4823 what choice he makes, the outcome would always be the same.
4824 So, for practical purposes, we consider them as the same. */
4825
4826 static int
4827 symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4828 {
4829 int i;
4830
4831 /* Before performing a thorough comparison check of each type,
4832 we perform a series of inexpensive checks. We expect that these
4833 checks will quickly fail in the vast majority of cases, and thus
4834 help prevent the unnecessary use of a more expensive comparison.
4835 Said comparison also expects us to make some of these checks
4836 (see ada_identical_enum_types_p). */
4837
4838 /* Quick check: All symbols should have an enum type. */
4839 for (i = 0; i < nsyms; i++)
4840 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4841 return 0;
4842
4843 /* Quick check: They should all have the same value. */
4844 for (i = 1; i < nsyms; i++)
4845 if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4846 return 0;
4847
4848 /* Quick check: They should all have the same number of enumerals. */
4849 for (i = 1; i < nsyms; i++)
4850 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4851 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4852 return 0;
4853
4854 /* All the sanity checks passed, so we might have a set of
4855 identical enumeration types. Perform a more complete
4856 comparison of the type of each symbol. */
4857 for (i = 1; i < nsyms; i++)
4858 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4859 SYMBOL_TYPE (syms[0].sym)))
4860 return 0;
4861
4862 return 1;
4863 }
4864
4865 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4866 duplicate other symbols in the list (The only case I know of where
4867 this happens is when object files containing stabs-in-ecoff are
4868 linked with files containing ordinary ecoff debugging symbols (or no
4869 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4870 Returns the number of items in the modified list. */
4871
4872 static int
4873 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4874 {
4875 int i, j;
4876
4877 /* We should never be called with less than 2 symbols, as there
4878 cannot be any extra symbol in that case. But it's easy to
4879 handle, since we have nothing to do in that case. */
4880 if (nsyms < 2)
4881 return nsyms;
4882
4883 i = 0;
4884 while (i < nsyms)
4885 {
4886 int remove_p = 0;
4887
4888 /* If two symbols have the same name and one of them is a stub type,
4889 the get rid of the stub. */
4890
4891 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4892 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4893 {
4894 for (j = 0; j < nsyms; j++)
4895 {
4896 if (j != i
4897 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4898 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4899 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4900 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4901 remove_p = 1;
4902 }
4903 }
4904
4905 /* Two symbols with the same name, same class and same address
4906 should be identical. */
4907
4908 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4909 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4910 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4911 {
4912 for (j = 0; j < nsyms; j += 1)
4913 {
4914 if (i != j
4915 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4916 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4917 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4918 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4919 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4920 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4921 remove_p = 1;
4922 }
4923 }
4924
4925 if (remove_p)
4926 {
4927 for (j = i + 1; j < nsyms; j += 1)
4928 syms[j - 1] = syms[j];
4929 nsyms -= 1;
4930 }
4931
4932 i += 1;
4933 }
4934
4935 /* If all the remaining symbols are identical enumerals, then
4936 just keep the first one and discard the rest.
4937
4938 Unlike what we did previously, we do not discard any entry
4939 unless they are ALL identical. This is because the symbol
4940 comparison is not a strict comparison, but rather a practical
4941 comparison. If all symbols are considered identical, then
4942 we can just go ahead and use the first one and discard the rest.
4943 But if we cannot reduce the list to a single element, we have
4944 to ask the user to disambiguate anyways. And if we have to
4945 present a multiple-choice menu, it's less confusing if the list
4946 isn't missing some choices that were identical and yet distinct. */
4947 if (symbols_are_identical_enums (syms, nsyms))
4948 nsyms = 1;
4949
4950 return nsyms;
4951 }
4952
4953 /* Given a type that corresponds to a renaming entity, use the type name
4954 to extract the scope (package name or function name, fully qualified,
4955 and following the GNAT encoding convention) where this renaming has been
4956 defined. The string returned needs to be deallocated after use. */
4957
4958 static char *
4959 xget_renaming_scope (struct type *renaming_type)
4960 {
4961 /* The renaming types adhere to the following convention:
4962 <scope>__<rename>___<XR extension>.
4963 So, to extract the scope, we search for the "___XR" extension,
4964 and then backtrack until we find the first "__". */
4965
4966 const char *name = type_name_no_tag (renaming_type);
4967 char *suffix = strstr (name, "___XR");
4968 char *last;
4969 int scope_len;
4970 char *scope;
4971
4972 /* Now, backtrack a bit until we find the first "__". Start looking
4973 at suffix - 3, as the <rename> part is at least one character long. */
4974
4975 for (last = suffix - 3; last > name; last--)
4976 if (last[0] == '_' && last[1] == '_')
4977 break;
4978
4979 /* Make a copy of scope and return it. */
4980
4981 scope_len = last - name;
4982 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4983
4984 strncpy (scope, name, scope_len);
4985 scope[scope_len] = '\0';
4986
4987 return scope;
4988 }
4989
4990 /* Return nonzero if NAME corresponds to a package name. */
4991
4992 static int
4993 is_package_name (const char *name)
4994 {
4995 /* Here, We take advantage of the fact that no symbols are generated
4996 for packages, while symbols are generated for each function.
4997 So the condition for NAME represent a package becomes equivalent
4998 to NAME not existing in our list of symbols. There is only one
4999 small complication with library-level functions (see below). */
5000
5001 char *fun_name;
5002
5003 /* If it is a function that has not been defined at library level,
5004 then we should be able to look it up in the symbols. */
5005 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5006 return 0;
5007
5008 /* Library-level function names start with "_ada_". See if function
5009 "_ada_" followed by NAME can be found. */
5010
5011 /* Do a quick check that NAME does not contain "__", since library-level
5012 functions names cannot contain "__" in them. */
5013 if (strstr (name, "__") != NULL)
5014 return 0;
5015
5016 fun_name = xstrprintf ("_ada_%s", name);
5017
5018 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
5019 }
5020
5021 /* Return nonzero if SYM corresponds to a renaming entity that is
5022 not visible from FUNCTION_NAME. */
5023
5024 static int
5025 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
5026 {
5027 char *scope;
5028 struct cleanup *old_chain;
5029
5030 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5031 return 0;
5032
5033 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
5034 old_chain = make_cleanup (xfree, scope);
5035
5036 /* If the rename has been defined in a package, then it is visible. */
5037 if (is_package_name (scope))
5038 {
5039 do_cleanups (old_chain);
5040 return 0;
5041 }
5042
5043 /* Check that the rename is in the current function scope by checking
5044 that its name starts with SCOPE. */
5045
5046 /* If the function name starts with "_ada_", it means that it is
5047 a library-level function. Strip this prefix before doing the
5048 comparison, as the encoding for the renaming does not contain
5049 this prefix. */
5050 if (startswith (function_name, "_ada_"))
5051 function_name += 5;
5052
5053 {
5054 int is_invisible = !startswith (function_name, scope);
5055
5056 do_cleanups (old_chain);
5057 return is_invisible;
5058 }
5059 }
5060
5061 /* Remove entries from SYMS that corresponds to a renaming entity that
5062 is not visible from the function associated with CURRENT_BLOCK or
5063 that is superfluous due to the presence of more specific renaming
5064 information. Places surviving symbols in the initial entries of
5065 SYMS and returns the number of surviving symbols.
5066
5067 Rationale:
5068 First, in cases where an object renaming is implemented as a
5069 reference variable, GNAT may produce both the actual reference
5070 variable and the renaming encoding. In this case, we discard the
5071 latter.
5072
5073 Second, GNAT emits a type following a specified encoding for each renaming
5074 entity. Unfortunately, STABS currently does not support the definition
5075 of types that are local to a given lexical block, so all renamings types
5076 are emitted at library level. As a consequence, if an application
5077 contains two renaming entities using the same name, and a user tries to
5078 print the value of one of these entities, the result of the ada symbol
5079 lookup will also contain the wrong renaming type.
5080
5081 This function partially covers for this limitation by attempting to
5082 remove from the SYMS list renaming symbols that should be visible
5083 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5084 method with the current information available. The implementation
5085 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5086
5087 - When the user tries to print a rename in a function while there
5088 is another rename entity defined in a package: Normally, the
5089 rename in the function has precedence over the rename in the
5090 package, so the latter should be removed from the list. This is
5091 currently not the case.
5092
5093 - This function will incorrectly remove valid renames if
5094 the CURRENT_BLOCK corresponds to a function which symbol name
5095 has been changed by an "Export" pragma. As a consequence,
5096 the user will be unable to print such rename entities. */
5097
5098 static int
5099 remove_irrelevant_renamings (struct ada_symbol_info *syms,
5100 int nsyms, const struct block *current_block)
5101 {
5102 struct symbol *current_function;
5103 const char *current_function_name;
5104 int i;
5105 int is_new_style_renaming;
5106
5107 /* If there is both a renaming foo___XR... encoded as a variable and
5108 a simple variable foo in the same block, discard the latter.
5109 First, zero out such symbols, then compress. */
5110 is_new_style_renaming = 0;
5111 for (i = 0; i < nsyms; i += 1)
5112 {
5113 struct symbol *sym = syms[i].sym;
5114 const struct block *block = syms[i].block;
5115 const char *name;
5116 const char *suffix;
5117
5118 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5119 continue;
5120 name = SYMBOL_LINKAGE_NAME (sym);
5121 suffix = strstr (name, "___XR");
5122
5123 if (suffix != NULL)
5124 {
5125 int name_len = suffix - name;
5126 int j;
5127
5128 is_new_style_renaming = 1;
5129 for (j = 0; j < nsyms; j += 1)
5130 if (i != j && syms[j].sym != NULL
5131 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5132 name_len) == 0
5133 && block == syms[j].block)
5134 syms[j].sym = NULL;
5135 }
5136 }
5137 if (is_new_style_renaming)
5138 {
5139 int j, k;
5140
5141 for (j = k = 0; j < nsyms; j += 1)
5142 if (syms[j].sym != NULL)
5143 {
5144 syms[k] = syms[j];
5145 k += 1;
5146 }
5147 return k;
5148 }
5149
5150 /* Extract the function name associated to CURRENT_BLOCK.
5151 Abort if unable to do so. */
5152
5153 if (current_block == NULL)
5154 return nsyms;
5155
5156 current_function = block_linkage_function (current_block);
5157 if (current_function == NULL)
5158 return nsyms;
5159
5160 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5161 if (current_function_name == NULL)
5162 return nsyms;
5163
5164 /* Check each of the symbols, and remove it from the list if it is
5165 a type corresponding to a renaming that is out of the scope of
5166 the current block. */
5167
5168 i = 0;
5169 while (i < nsyms)
5170 {
5171 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5172 == ADA_OBJECT_RENAMING
5173 && old_renaming_is_invisible (syms[i].sym, current_function_name))
5174 {
5175 int j;
5176
5177 for (j = i + 1; j < nsyms; j += 1)
5178 syms[j - 1] = syms[j];
5179 nsyms -= 1;
5180 }
5181 else
5182 i += 1;
5183 }
5184
5185 return nsyms;
5186 }
5187
5188 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5189 whose name and domain match NAME and DOMAIN respectively.
5190 If no match was found, then extend the search to "enclosing"
5191 routines (in other words, if we're inside a nested function,
5192 search the symbols defined inside the enclosing functions).
5193 If WILD_MATCH_P is nonzero, perform the naming matching in
5194 "wild" mode (see function "wild_match" for more info).
5195
5196 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5197
5198 static void
5199 ada_add_local_symbols (struct obstack *obstackp, const char *name,
5200 const struct block *block, domain_enum domain,
5201 int wild_match_p)
5202 {
5203 int block_depth = 0;
5204
5205 while (block != NULL)
5206 {
5207 block_depth += 1;
5208 ada_add_block_symbols (obstackp, block, name, domain, NULL,
5209 wild_match_p);
5210
5211 /* If we found a non-function match, assume that's the one. */
5212 if (is_nonfunction (defns_collected (obstackp, 0),
5213 num_defns_collected (obstackp)))
5214 return;
5215
5216 block = BLOCK_SUPERBLOCK (block);
5217 }
5218
5219 /* If no luck so far, try to find NAME as a local symbol in some lexically
5220 enclosing subprogram. */
5221 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
5222 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
5223 }
5224
5225 /* An object of this type is used as the user_data argument when
5226 calling the map_matching_symbols method. */
5227
5228 struct match_data
5229 {
5230 struct objfile *objfile;
5231 struct obstack *obstackp;
5232 struct symbol *arg_sym;
5233 int found_sym;
5234 };
5235
5236 /* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5237 to a list of symbols. DATA0 is a pointer to a struct match_data *
5238 containing the obstack that collects the symbol list, the file that SYM
5239 must come from, a flag indicating whether a non-argument symbol has
5240 been found in the current block, and the last argument symbol
5241 passed in SYM within the current block (if any). When SYM is null,
5242 marking the end of a block, the argument symbol is added if no
5243 other has been found. */
5244
5245 static int
5246 aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
5247 {
5248 struct match_data *data = (struct match_data *) data0;
5249
5250 if (sym == NULL)
5251 {
5252 if (!data->found_sym && data->arg_sym != NULL)
5253 add_defn_to_vec (data->obstackp,
5254 fixup_symbol_section (data->arg_sym, data->objfile),
5255 block);
5256 data->found_sym = 0;
5257 data->arg_sym = NULL;
5258 }
5259 else
5260 {
5261 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5262 return 0;
5263 else if (SYMBOL_IS_ARGUMENT (sym))
5264 data->arg_sym = sym;
5265 else
5266 {
5267 data->found_sym = 1;
5268 add_defn_to_vec (data->obstackp,
5269 fixup_symbol_section (sym, data->objfile),
5270 block);
5271 }
5272 }
5273 return 0;
5274 }
5275
5276 /* Implements compare_names, but only applying the comparision using
5277 the given CASING. */
5278
5279 static int
5280 compare_names_with_case (const char *string1, const char *string2,
5281 enum case_sensitivity casing)
5282 {
5283 while (*string1 != '\0' && *string2 != '\0')
5284 {
5285 char c1, c2;
5286
5287 if (isspace (*string1) || isspace (*string2))
5288 return strcmp_iw_ordered (string1, string2);
5289
5290 if (casing == case_sensitive_off)
5291 {
5292 c1 = tolower (*string1);
5293 c2 = tolower (*string2);
5294 }
5295 else
5296 {
5297 c1 = *string1;
5298 c2 = *string2;
5299 }
5300 if (c1 != c2)
5301 break;
5302
5303 string1 += 1;
5304 string2 += 1;
5305 }
5306
5307 switch (*string1)
5308 {
5309 case '(':
5310 return strcmp_iw_ordered (string1, string2);
5311 case '_':
5312 if (*string2 == '\0')
5313 {
5314 if (is_name_suffix (string1))
5315 return 0;
5316 else
5317 return 1;
5318 }
5319 /* FALLTHROUGH */
5320 default:
5321 if (*string2 == '(')
5322 return strcmp_iw_ordered (string1, string2);
5323 else
5324 {
5325 if (casing == case_sensitive_off)
5326 return tolower (*string1) - tolower (*string2);
5327 else
5328 return *string1 - *string2;
5329 }
5330 }
5331 }
5332
5333 /* Compare STRING1 to STRING2, with results as for strcmp.
5334 Compatible with strcmp_iw_ordered in that...
5335
5336 strcmp_iw_ordered (STRING1, STRING2) <= 0
5337
5338 ... implies...
5339
5340 compare_names (STRING1, STRING2) <= 0
5341
5342 (they may differ as to what symbols compare equal). */
5343
5344 static int
5345 compare_names (const char *string1, const char *string2)
5346 {
5347 int result;
5348
5349 /* Similar to what strcmp_iw_ordered does, we need to perform
5350 a case-insensitive comparison first, and only resort to
5351 a second, case-sensitive, comparison if the first one was
5352 not sufficient to differentiate the two strings. */
5353
5354 result = compare_names_with_case (string1, string2, case_sensitive_off);
5355 if (result == 0)
5356 result = compare_names_with_case (string1, string2, case_sensitive_on);
5357
5358 return result;
5359 }
5360
5361 /* Add to OBSTACKP all non-local symbols whose name and domain match
5362 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
5363 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
5364
5365 static void
5366 add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5367 domain_enum domain, int global,
5368 int is_wild_match)
5369 {
5370 struct objfile *objfile;
5371 struct match_data data;
5372
5373 memset (&data, 0, sizeof data);
5374 data.obstackp = obstackp;
5375
5376 ALL_OBJFILES (objfile)
5377 {
5378 data.objfile = objfile;
5379
5380 if (is_wild_match)
5381 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5382 aux_add_nonlocal_symbols, &data,
5383 wild_match, NULL);
5384 else
5385 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5386 aux_add_nonlocal_symbols, &data,
5387 full_match, compare_names);
5388 }
5389
5390 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5391 {
5392 ALL_OBJFILES (objfile)
5393 {
5394 char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5395 strcpy (name1, "_ada_");
5396 strcpy (name1 + sizeof ("_ada_") - 1, name);
5397 data.objfile = objfile;
5398 objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5399 global,
5400 aux_add_nonlocal_symbols,
5401 &data,
5402 full_match, compare_names);
5403 }
5404 }
5405 }
5406
5407 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5408 non-zero, enclosing scope and in global scopes, returning the number of
5409 matches.
5410 Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5411 indicating the symbols found and the blocks and symbol tables (if
5412 any) in which they were found. This vector is transient---good only to
5413 the next call of ada_lookup_symbol_list.
5414
5415 When full_search is non-zero, any non-function/non-enumeral
5416 symbol match within the nest of blocks whose innermost member is BLOCK0,
5417 is the one match returned (no other matches in that or
5418 enclosing blocks is returned). If there are any matches in or
5419 surrounding BLOCK0, then these alone are returned.
5420
5421 Names prefixed with "standard__" are handled specially: "standard__"
5422 is first stripped off, and only static and global symbols are searched. */
5423
5424 static int
5425 ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5426 domain_enum domain,
5427 struct ada_symbol_info **results,
5428 int full_search)
5429 {
5430 struct symbol *sym;
5431 const struct block *block;
5432 const char *name;
5433 const int wild_match_p = should_use_wild_match (name0);
5434 int syms_from_global_search = 0;
5435 int ndefns;
5436
5437 obstack_free (&symbol_list_obstack, NULL);
5438 obstack_init (&symbol_list_obstack);
5439
5440 /* Search specified block and its superiors. */
5441
5442 name = name0;
5443 block = block0;
5444
5445 /* Special case: If the user specifies a symbol name inside package
5446 Standard, do a non-wild matching of the symbol name without
5447 the "standard__" prefix. This was primarily introduced in order
5448 to allow the user to specifically access the standard exceptions
5449 using, for instance, Standard.Constraint_Error when Constraint_Error
5450 is ambiguous (due to the user defining its own Constraint_Error
5451 entity inside its program). */
5452 if (startswith (name0, "standard__"))
5453 {
5454 block = NULL;
5455 name = name0 + sizeof ("standard__") - 1;
5456 }
5457
5458 /* Check the non-global symbols. If we have ANY match, then we're done. */
5459
5460 if (block != NULL)
5461 {
5462 if (full_search)
5463 {
5464 ada_add_local_symbols (&symbol_list_obstack, name, block,
5465 domain, wild_match_p);
5466 }
5467 else
5468 {
5469 /* In the !full_search case we're are being called by
5470 ada_iterate_over_symbols, and we don't want to search
5471 superblocks. */
5472 ada_add_block_symbols (&symbol_list_obstack, block, name,
5473 domain, NULL, wild_match_p);
5474 }
5475 if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5476 goto done;
5477 }
5478
5479 /* No non-global symbols found. Check our cache to see if we have
5480 already performed this search before. If we have, then return
5481 the same result. */
5482
5483 if (lookup_cached_symbol (name0, domain, &sym, &block))
5484 {
5485 if (sym != NULL)
5486 add_defn_to_vec (&symbol_list_obstack, sym, block);
5487 goto done;
5488 }
5489
5490 syms_from_global_search = 1;
5491
5492 /* Search symbols from all global blocks. */
5493
5494 add_nonlocal_symbols (&symbol_list_obstack, name, domain, 1,
5495 wild_match_p);
5496
5497 /* Now add symbols from all per-file blocks if we've gotten no hits
5498 (not strictly correct, but perhaps better than an error). */
5499
5500 if (num_defns_collected (&symbol_list_obstack) == 0)
5501 add_nonlocal_symbols (&symbol_list_obstack, name, domain, 0,
5502 wild_match_p);
5503
5504 done:
5505 ndefns = num_defns_collected (&symbol_list_obstack);
5506 *results = defns_collected (&symbol_list_obstack, 1);
5507
5508 ndefns = remove_extra_symbols (*results, ndefns);
5509
5510 if (ndefns == 0 && full_search && syms_from_global_search)
5511 cache_symbol (name0, domain, NULL, NULL);
5512
5513 if (ndefns == 1 && full_search && syms_from_global_search)
5514 cache_symbol (name0, domain, (*results)[0].sym, (*results)[0].block);
5515
5516 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
5517
5518 return ndefns;
5519 }
5520
5521 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5522 in global scopes, returning the number of matches, and setting *RESULTS
5523 to a vector of (SYM,BLOCK) tuples.
5524 See ada_lookup_symbol_list_worker for further details. */
5525
5526 int
5527 ada_lookup_symbol_list (const char *name0, const struct block *block0,
5528 domain_enum domain, struct ada_symbol_info **results)
5529 {
5530 return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5531 }
5532
5533 /* Implementation of the la_iterate_over_symbols method. */
5534
5535 static void
5536 ada_iterate_over_symbols (const struct block *block,
5537 const char *name, domain_enum domain,
5538 symbol_found_callback_ftype *callback,
5539 void *data)
5540 {
5541 int ndefs, i;
5542 struct ada_symbol_info *results;
5543
5544 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5545 for (i = 0; i < ndefs; ++i)
5546 {
5547 if (! (*callback) (results[i].sym, data))
5548 break;
5549 }
5550 }
5551
5552 /* If NAME is the name of an entity, return a string that should
5553 be used to look that entity up in Ada units. This string should
5554 be deallocated after use using xfree.
5555
5556 NAME can have any form that the "break" or "print" commands might
5557 recognize. In other words, it does not have to be the "natural"
5558 name, or the "encoded" name. */
5559
5560 char *
5561 ada_name_for_lookup (const char *name)
5562 {
5563 char *canon;
5564 int nlen = strlen (name);
5565
5566 if (name[0] == '<' && name[nlen - 1] == '>')
5567 {
5568 canon = xmalloc (nlen - 1);
5569 memcpy (canon, name + 1, nlen - 2);
5570 canon[nlen - 2] = '\0';
5571 }
5572 else
5573 canon = xstrdup (ada_encode (ada_fold_name (name)));
5574 return canon;
5575 }
5576
5577 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5578 to 1, but choosing the first symbol found if there are multiple
5579 choices.
5580
5581 The result is stored in *INFO, which must be non-NULL.
5582 If no match is found, INFO->SYM is set to NULL. */
5583
5584 void
5585 ada_lookup_encoded_symbol (const char *name, const struct block *block,
5586 domain_enum domain,
5587 struct ada_symbol_info *info)
5588 {
5589 struct ada_symbol_info *candidates;
5590 int n_candidates;
5591
5592 gdb_assert (info != NULL);
5593 memset (info, 0, sizeof (struct ada_symbol_info));
5594
5595 n_candidates = ada_lookup_symbol_list (name, block, domain, &candidates);
5596 if (n_candidates == 0)
5597 return;
5598
5599 *info = candidates[0];
5600 info->sym = fixup_symbol_section (info->sym, NULL);
5601 }
5602
5603 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5604 scope and in global scopes, or NULL if none. NAME is folded and
5605 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
5606 choosing the first symbol if there are multiple choices.
5607 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5608
5609 struct symbol *
5610 ada_lookup_symbol (const char *name, const struct block *block0,
5611 domain_enum domain, int *is_a_field_of_this)
5612 {
5613 struct ada_symbol_info info;
5614
5615 if (is_a_field_of_this != NULL)
5616 *is_a_field_of_this = 0;
5617
5618 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5619 block0, domain, &info);
5620 return info.sym;
5621 }
5622
5623 static struct symbol *
5624 ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5625 const char *name,
5626 const struct block *block,
5627 const domain_enum domain)
5628 {
5629 struct symbol *sym;
5630
5631 sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5632 if (sym != NULL)
5633 return sym;
5634
5635 /* If we haven't found a match at this point, try the primitive
5636 types. In other languages, this search is performed before
5637 searching for global symbols in order to short-circuit that
5638 global-symbol search if it happens that the name corresponds
5639 to a primitive type. But we cannot do the same in Ada, because
5640 it is perfectly legitimate for a program to declare a type which
5641 has the same name as a standard type. If looking up a type in
5642 that situation, we have traditionally ignored the primitive type
5643 in favor of user-defined types. This is why, unlike most other
5644 languages, we search the primitive types this late and only after
5645 having searched the global symbols without success. */
5646
5647 if (domain == VAR_DOMAIN)
5648 {
5649 struct gdbarch *gdbarch;
5650
5651 if (block == NULL)
5652 gdbarch = target_gdbarch ();
5653 else
5654 gdbarch = block_gdbarch (block);
5655 sym = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5656 if (sym != NULL)
5657 return sym;
5658 }
5659
5660 return NULL;
5661 }
5662
5663
5664 /* True iff STR is a possible encoded suffix of a normal Ada name
5665 that is to be ignored for matching purposes. Suffixes of parallel
5666 names (e.g., XVE) are not included here. Currently, the possible suffixes
5667 are given by any of the regular expressions:
5668
5669 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5670 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
5671 TKB [subprogram suffix for task bodies]
5672 _E[0-9]+[bs]$ [protected object entry suffixes]
5673 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
5674
5675 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5676 match is performed. This sequence is used to differentiate homonyms,
5677 is an optional part of a valid name suffix. */
5678
5679 static int
5680 is_name_suffix (const char *str)
5681 {
5682 int k;
5683 const char *matching;
5684 const int len = strlen (str);
5685
5686 /* Skip optional leading __[0-9]+. */
5687
5688 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5689 {
5690 str += 3;
5691 while (isdigit (str[0]))
5692 str += 1;
5693 }
5694
5695 /* [.$][0-9]+ */
5696
5697 if (str[0] == '.' || str[0] == '$')
5698 {
5699 matching = str + 1;
5700 while (isdigit (matching[0]))
5701 matching += 1;
5702 if (matching[0] == '\0')
5703 return 1;
5704 }
5705
5706 /* ___[0-9]+ */
5707
5708 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5709 {
5710 matching = str + 3;
5711 while (isdigit (matching[0]))
5712 matching += 1;
5713 if (matching[0] == '\0')
5714 return 1;
5715 }
5716
5717 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5718
5719 if (strcmp (str, "TKB") == 0)
5720 return 1;
5721
5722 #if 0
5723 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5724 with a N at the end. Unfortunately, the compiler uses the same
5725 convention for other internal types it creates. So treating
5726 all entity names that end with an "N" as a name suffix causes
5727 some regressions. For instance, consider the case of an enumerated
5728 type. To support the 'Image attribute, it creates an array whose
5729 name ends with N.
5730 Having a single character like this as a suffix carrying some
5731 information is a bit risky. Perhaps we should change the encoding
5732 to be something like "_N" instead. In the meantime, do not do
5733 the following check. */
5734 /* Protected Object Subprograms */
5735 if (len == 1 && str [0] == 'N')
5736 return 1;
5737 #endif
5738
5739 /* _E[0-9]+[bs]$ */
5740 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5741 {
5742 matching = str + 3;
5743 while (isdigit (matching[0]))
5744 matching += 1;
5745 if ((matching[0] == 'b' || matching[0] == 's')
5746 && matching [1] == '\0')
5747 return 1;
5748 }
5749
5750 /* ??? We should not modify STR directly, as we are doing below. This
5751 is fine in this case, but may become problematic later if we find
5752 that this alternative did not work, and want to try matching
5753 another one from the begining of STR. Since we modified it, we
5754 won't be able to find the begining of the string anymore! */
5755 if (str[0] == 'X')
5756 {
5757 str += 1;
5758 while (str[0] != '_' && str[0] != '\0')
5759 {
5760 if (str[0] != 'n' && str[0] != 'b')
5761 return 0;
5762 str += 1;
5763 }
5764 }
5765
5766 if (str[0] == '\000')
5767 return 1;
5768
5769 if (str[0] == '_')
5770 {
5771 if (str[1] != '_' || str[2] == '\000')
5772 return 0;
5773 if (str[2] == '_')
5774 {
5775 if (strcmp (str + 3, "JM") == 0)
5776 return 1;
5777 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5778 the LJM suffix in favor of the JM one. But we will
5779 still accept LJM as a valid suffix for a reasonable
5780 amount of time, just to allow ourselves to debug programs
5781 compiled using an older version of GNAT. */
5782 if (strcmp (str + 3, "LJM") == 0)
5783 return 1;
5784 if (str[3] != 'X')
5785 return 0;
5786 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5787 || str[4] == 'U' || str[4] == 'P')
5788 return 1;
5789 if (str[4] == 'R' && str[5] != 'T')
5790 return 1;
5791 return 0;
5792 }
5793 if (!isdigit (str[2]))
5794 return 0;
5795 for (k = 3; str[k] != '\0'; k += 1)
5796 if (!isdigit (str[k]) && str[k] != '_')
5797 return 0;
5798 return 1;
5799 }
5800 if (str[0] == '$' && isdigit (str[1]))
5801 {
5802 for (k = 2; str[k] != '\0'; k += 1)
5803 if (!isdigit (str[k]) && str[k] != '_')
5804 return 0;
5805 return 1;
5806 }
5807 return 0;
5808 }
5809
5810 /* Return non-zero if the string starting at NAME and ending before
5811 NAME_END contains no capital letters. */
5812
5813 static int
5814 is_valid_name_for_wild_match (const char *name0)
5815 {
5816 const char *decoded_name = ada_decode (name0);
5817 int i;
5818
5819 /* If the decoded name starts with an angle bracket, it means that
5820 NAME0 does not follow the GNAT encoding format. It should then
5821 not be allowed as a possible wild match. */
5822 if (decoded_name[0] == '<')
5823 return 0;
5824
5825 for (i=0; decoded_name[i] != '\0'; i++)
5826 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5827 return 0;
5828
5829 return 1;
5830 }
5831
5832 /* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5833 that could start a simple name. Assumes that *NAMEP points into
5834 the string beginning at NAME0. */
5835
5836 static int
5837 advance_wild_match (const char **namep, const char *name0, int target0)
5838 {
5839 const char *name = *namep;
5840
5841 while (1)
5842 {
5843 int t0, t1;
5844
5845 t0 = *name;
5846 if (t0 == '_')
5847 {
5848 t1 = name[1];
5849 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5850 {
5851 name += 1;
5852 if (name == name0 + 5 && startswith (name0, "_ada"))
5853 break;
5854 else
5855 name += 1;
5856 }
5857 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5858 || name[2] == target0))
5859 {
5860 name += 2;
5861 break;
5862 }
5863 else
5864 return 0;
5865 }
5866 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5867 name += 1;
5868 else
5869 return 0;
5870 }
5871
5872 *namep = name;
5873 return 1;
5874 }
5875
5876 /* Return 0 iff NAME encodes a name of the form prefix.PATN. Ignores any
5877 informational suffixes of NAME (i.e., for which is_name_suffix is
5878 true). Assumes that PATN is a lower-cased Ada simple name. */
5879
5880 static int
5881 wild_match (const char *name, const char *patn)
5882 {
5883 const char *p;
5884 const char *name0 = name;
5885
5886 while (1)
5887 {
5888 const char *match = name;
5889
5890 if (*name == *patn)
5891 {
5892 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5893 if (*p != *name)
5894 break;
5895 if (*p == '\0' && is_name_suffix (name))
5896 return match != name0 && !is_valid_name_for_wild_match (name0);
5897
5898 if (name[-1] == '_')
5899 name -= 1;
5900 }
5901 if (!advance_wild_match (&name, name0, *patn))
5902 return 1;
5903 }
5904 }
5905
5906 /* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5907 informational suffix. */
5908
5909 static int
5910 full_match (const char *sym_name, const char *search_name)
5911 {
5912 return !match_name (sym_name, search_name, 0);
5913 }
5914
5915
5916 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5917 vector *defn_symbols, updating the list of symbols in OBSTACKP
5918 (if necessary). If WILD, treat as NAME with a wildcard prefix.
5919 OBJFILE is the section containing BLOCK. */
5920
5921 static void
5922 ada_add_block_symbols (struct obstack *obstackp,
5923 const struct block *block, const char *name,
5924 domain_enum domain, struct objfile *objfile,
5925 int wild)
5926 {
5927 struct block_iterator iter;
5928 int name_len = strlen (name);
5929 /* A matching argument symbol, if any. */
5930 struct symbol *arg_sym;
5931 /* Set true when we find a matching non-argument symbol. */
5932 int found_sym;
5933 struct symbol *sym;
5934
5935 arg_sym = NULL;
5936 found_sym = 0;
5937 if (wild)
5938 {
5939 for (sym = block_iter_match_first (block, name, wild_match, &iter);
5940 sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
5941 {
5942 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5943 SYMBOL_DOMAIN (sym), domain)
5944 && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
5945 {
5946 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5947 continue;
5948 else if (SYMBOL_IS_ARGUMENT (sym))
5949 arg_sym = sym;
5950 else
5951 {
5952 found_sym = 1;
5953 add_defn_to_vec (obstackp,
5954 fixup_symbol_section (sym, objfile),
5955 block);
5956 }
5957 }
5958 }
5959 }
5960 else
5961 {
5962 for (sym = block_iter_match_first (block, name, full_match, &iter);
5963 sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
5964 {
5965 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5966 SYMBOL_DOMAIN (sym), domain))
5967 {
5968 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5969 {
5970 if (SYMBOL_IS_ARGUMENT (sym))
5971 arg_sym = sym;
5972 else
5973 {
5974 found_sym = 1;
5975 add_defn_to_vec (obstackp,
5976 fixup_symbol_section (sym, objfile),
5977 block);
5978 }
5979 }
5980 }
5981 }
5982 }
5983
5984 if (!found_sym && arg_sym != NULL)
5985 {
5986 add_defn_to_vec (obstackp,
5987 fixup_symbol_section (arg_sym, objfile),
5988 block);
5989 }
5990
5991 if (!wild)
5992 {
5993 arg_sym = NULL;
5994 found_sym = 0;
5995
5996 ALL_BLOCK_SYMBOLS (block, iter, sym)
5997 {
5998 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5999 SYMBOL_DOMAIN (sym), domain))
6000 {
6001 int cmp;
6002
6003 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
6004 if (cmp == 0)
6005 {
6006 cmp = !startswith (SYMBOL_LINKAGE_NAME (sym), "_ada_");
6007 if (cmp == 0)
6008 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
6009 name_len);
6010 }
6011
6012 if (cmp == 0
6013 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
6014 {
6015 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6016 {
6017 if (SYMBOL_IS_ARGUMENT (sym))
6018 arg_sym = sym;
6019 else
6020 {
6021 found_sym = 1;
6022 add_defn_to_vec (obstackp,
6023 fixup_symbol_section (sym, objfile),
6024 block);
6025 }
6026 }
6027 }
6028 }
6029 }
6030
6031 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6032 They aren't parameters, right? */
6033 if (!found_sym && arg_sym != NULL)
6034 {
6035 add_defn_to_vec (obstackp,
6036 fixup_symbol_section (arg_sym, objfile),
6037 block);
6038 }
6039 }
6040 }
6041 \f
6042
6043 /* Symbol Completion */
6044
6045 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
6046 name in a form that's appropriate for the completion. The result
6047 does not need to be deallocated, but is only good until the next call.
6048
6049 TEXT_LEN is equal to the length of TEXT.
6050 Perform a wild match if WILD_MATCH_P is set.
6051 ENCODED_P should be set if TEXT represents the start of a symbol name
6052 in its encoded form. */
6053
6054 static const char *
6055 symbol_completion_match (const char *sym_name,
6056 const char *text, int text_len,
6057 int wild_match_p, int encoded_p)
6058 {
6059 const int verbatim_match = (text[0] == '<');
6060 int match = 0;
6061
6062 if (verbatim_match)
6063 {
6064 /* Strip the leading angle bracket. */
6065 text = text + 1;
6066 text_len--;
6067 }
6068
6069 /* First, test against the fully qualified name of the symbol. */
6070
6071 if (strncmp (sym_name, text, text_len) == 0)
6072 match = 1;
6073
6074 if (match && !encoded_p)
6075 {
6076 /* One needed check before declaring a positive match is to verify
6077 that iff we are doing a verbatim match, the decoded version
6078 of the symbol name starts with '<'. Otherwise, this symbol name
6079 is not a suitable completion. */
6080 const char *sym_name_copy = sym_name;
6081 int has_angle_bracket;
6082
6083 sym_name = ada_decode (sym_name);
6084 has_angle_bracket = (sym_name[0] == '<');
6085 match = (has_angle_bracket == verbatim_match);
6086 sym_name = sym_name_copy;
6087 }
6088
6089 if (match && !verbatim_match)
6090 {
6091 /* When doing non-verbatim match, another check that needs to
6092 be done is to verify that the potentially matching symbol name
6093 does not include capital letters, because the ada-mode would
6094 not be able to understand these symbol names without the
6095 angle bracket notation. */
6096 const char *tmp;
6097
6098 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6099 if (*tmp != '\0')
6100 match = 0;
6101 }
6102
6103 /* Second: Try wild matching... */
6104
6105 if (!match && wild_match_p)
6106 {
6107 /* Since we are doing wild matching, this means that TEXT
6108 may represent an unqualified symbol name. We therefore must
6109 also compare TEXT against the unqualified name of the symbol. */
6110 sym_name = ada_unqualified_name (ada_decode (sym_name));
6111
6112 if (strncmp (sym_name, text, text_len) == 0)
6113 match = 1;
6114 }
6115
6116 /* Finally: If we found a mach, prepare the result to return. */
6117
6118 if (!match)
6119 return NULL;
6120
6121 if (verbatim_match)
6122 sym_name = add_angle_brackets (sym_name);
6123
6124 if (!encoded_p)
6125 sym_name = ada_decode (sym_name);
6126
6127 return sym_name;
6128 }
6129
6130 /* A companion function to ada_make_symbol_completion_list().
6131 Check if SYM_NAME represents a symbol which name would be suitable
6132 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6133 it is appended at the end of the given string vector SV.
6134
6135 ORIG_TEXT is the string original string from the user command
6136 that needs to be completed. WORD is the entire command on which
6137 completion should be performed. These two parameters are used to
6138 determine which part of the symbol name should be added to the
6139 completion vector.
6140 if WILD_MATCH_P is set, then wild matching is performed.
6141 ENCODED_P should be set if TEXT represents a symbol name in its
6142 encoded formed (in which case the completion should also be
6143 encoded). */
6144
6145 static void
6146 symbol_completion_add (VEC(char_ptr) **sv,
6147 const char *sym_name,
6148 const char *text, int text_len,
6149 const char *orig_text, const char *word,
6150 int wild_match_p, int encoded_p)
6151 {
6152 const char *match = symbol_completion_match (sym_name, text, text_len,
6153 wild_match_p, encoded_p);
6154 char *completion;
6155
6156 if (match == NULL)
6157 return;
6158
6159 /* We found a match, so add the appropriate completion to the given
6160 string vector. */
6161
6162 if (word == orig_text)
6163 {
6164 completion = xmalloc (strlen (match) + 5);
6165 strcpy (completion, match);
6166 }
6167 else if (word > orig_text)
6168 {
6169 /* Return some portion of sym_name. */
6170 completion = xmalloc (strlen (match) + 5);
6171 strcpy (completion, match + (word - orig_text));
6172 }
6173 else
6174 {
6175 /* Return some of ORIG_TEXT plus sym_name. */
6176 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6177 strncpy (completion, word, orig_text - word);
6178 completion[orig_text - word] = '\0';
6179 strcat (completion, match);
6180 }
6181
6182 VEC_safe_push (char_ptr, *sv, completion);
6183 }
6184
6185 /* An object of this type is passed as the user_data argument to the
6186 expand_symtabs_matching method. */
6187 struct add_partial_datum
6188 {
6189 VEC(char_ptr) **completions;
6190 const char *text;
6191 int text_len;
6192 const char *text0;
6193 const char *word;
6194 int wild_match;
6195 int encoded;
6196 };
6197
6198 /* A callback for expand_symtabs_matching. */
6199
6200 static int
6201 ada_complete_symbol_matcher (const char *name, void *user_data)
6202 {
6203 struct add_partial_datum *data = user_data;
6204
6205 return symbol_completion_match (name, data->text, data->text_len,
6206 data->wild_match, data->encoded) != NULL;
6207 }
6208
6209 /* Return a list of possible symbol names completing TEXT0. WORD is
6210 the entire command on which completion is made. */
6211
6212 static VEC (char_ptr) *
6213 ada_make_symbol_completion_list (const char *text0, const char *word,
6214 enum type_code code)
6215 {
6216 char *text;
6217 int text_len;
6218 int wild_match_p;
6219 int encoded_p;
6220 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
6221 struct symbol *sym;
6222 struct compunit_symtab *s;
6223 struct minimal_symbol *msymbol;
6224 struct objfile *objfile;
6225 const struct block *b, *surrounding_static_block = 0;
6226 int i;
6227 struct block_iterator iter;
6228 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
6229
6230 gdb_assert (code == TYPE_CODE_UNDEF);
6231
6232 if (text0[0] == '<')
6233 {
6234 text = xstrdup (text0);
6235 make_cleanup (xfree, text);
6236 text_len = strlen (text);
6237 wild_match_p = 0;
6238 encoded_p = 1;
6239 }
6240 else
6241 {
6242 text = xstrdup (ada_encode (text0));
6243 make_cleanup (xfree, text);
6244 text_len = strlen (text);
6245 for (i = 0; i < text_len; i++)
6246 text[i] = tolower (text[i]);
6247
6248 encoded_p = (strstr (text0, "__") != NULL);
6249 /* If the name contains a ".", then the user is entering a fully
6250 qualified entity name, and the match must not be done in wild
6251 mode. Similarly, if the user wants to complete what looks like
6252 an encoded name, the match must not be done in wild mode. */
6253 wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
6254 }
6255
6256 /* First, look at the partial symtab symbols. */
6257 {
6258 struct add_partial_datum data;
6259
6260 data.completions = &completions;
6261 data.text = text;
6262 data.text_len = text_len;
6263 data.text0 = text0;
6264 data.word = word;
6265 data.wild_match = wild_match_p;
6266 data.encoded = encoded_p;
6267 expand_symtabs_matching (NULL, ada_complete_symbol_matcher, NULL,
6268 ALL_DOMAIN, &data);
6269 }
6270
6271 /* At this point scan through the misc symbol vectors and add each
6272 symbol you find to the list. Eventually we want to ignore
6273 anything that isn't a text symbol (everything else will be
6274 handled by the psymtab code above). */
6275
6276 ALL_MSYMBOLS (objfile, msymbol)
6277 {
6278 QUIT;
6279 symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
6280 text, text_len, text0, word, wild_match_p,
6281 encoded_p);
6282 }
6283
6284 /* Search upwards from currently selected frame (so that we can
6285 complete on local vars. */
6286
6287 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6288 {
6289 if (!BLOCK_SUPERBLOCK (b))
6290 surrounding_static_block = b; /* For elmin of dups */
6291
6292 ALL_BLOCK_SYMBOLS (b, iter, sym)
6293 {
6294 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6295 text, text_len, text0, word,
6296 wild_match_p, encoded_p);
6297 }
6298 }
6299
6300 /* Go through the symtabs and check the externs and statics for
6301 symbols which match. */
6302
6303 ALL_COMPUNITS (objfile, s)
6304 {
6305 QUIT;
6306 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
6307 ALL_BLOCK_SYMBOLS (b, iter, sym)
6308 {
6309 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6310 text, text_len, text0, word,
6311 wild_match_p, encoded_p);
6312 }
6313 }
6314
6315 ALL_COMPUNITS (objfile, s)
6316 {
6317 QUIT;
6318 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
6319 /* Don't do this block twice. */
6320 if (b == surrounding_static_block)
6321 continue;
6322 ALL_BLOCK_SYMBOLS (b, iter, sym)
6323 {
6324 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
6325 text, text_len, text0, word,
6326 wild_match_p, encoded_p);
6327 }
6328 }
6329
6330 do_cleanups (old_chain);
6331 return completions;
6332 }
6333
6334 /* Field Access */
6335
6336 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6337 for tagged types. */
6338
6339 static int
6340 ada_is_dispatch_table_ptr_type (struct type *type)
6341 {
6342 const char *name;
6343
6344 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6345 return 0;
6346
6347 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6348 if (name == NULL)
6349 return 0;
6350
6351 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6352 }
6353
6354 /* Return non-zero if TYPE is an interface tag. */
6355
6356 static int
6357 ada_is_interface_tag (struct type *type)
6358 {
6359 const char *name = TYPE_NAME (type);
6360
6361 if (name == NULL)
6362 return 0;
6363
6364 return (strcmp (name, "ada__tags__interface_tag") == 0);
6365 }
6366
6367 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
6368 to be invisible to users. */
6369
6370 int
6371 ada_is_ignored_field (struct type *type, int field_num)
6372 {
6373 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6374 return 1;
6375
6376 /* Check the name of that field. */
6377 {
6378 const char *name = TYPE_FIELD_NAME (type, field_num);
6379
6380 /* Anonymous field names should not be printed.
6381 brobecker/2007-02-20: I don't think this can actually happen
6382 but we don't want to print the value of annonymous fields anyway. */
6383 if (name == NULL)
6384 return 1;
6385
6386 /* Normally, fields whose name start with an underscore ("_")
6387 are fields that have been internally generated by the compiler,
6388 and thus should not be printed. The "_parent" field is special,
6389 however: This is a field internally generated by the compiler
6390 for tagged types, and it contains the components inherited from
6391 the parent type. This field should not be printed as is, but
6392 should not be ignored either. */
6393 if (name[0] == '_' && !startswith (name, "_parent"))
6394 return 1;
6395 }
6396
6397 /* If this is the dispatch table of a tagged type or an interface tag,
6398 then ignore. */
6399 if (ada_is_tagged_type (type, 1)
6400 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6401 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
6402 return 1;
6403
6404 /* Not a special field, so it should not be ignored. */
6405 return 0;
6406 }
6407
6408 /* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
6409 pointer or reference type whose ultimate target has a tag field. */
6410
6411 int
6412 ada_is_tagged_type (struct type *type, int refok)
6413 {
6414 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6415 }
6416
6417 /* True iff TYPE represents the type of X'Tag */
6418
6419 int
6420 ada_is_tag_type (struct type *type)
6421 {
6422 type = ada_check_typedef (type);
6423
6424 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6425 return 0;
6426 else
6427 {
6428 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
6429
6430 return (name != NULL
6431 && strcmp (name, "ada__tags__dispatch_table") == 0);
6432 }
6433 }
6434
6435 /* The type of the tag on VAL. */
6436
6437 struct type *
6438 ada_tag_type (struct value *val)
6439 {
6440 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
6441 }
6442
6443 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6444 retired at Ada 05). */
6445
6446 static int
6447 is_ada95_tag (struct value *tag)
6448 {
6449 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6450 }
6451
6452 /* The value of the tag on VAL. */
6453
6454 struct value *
6455 ada_value_tag (struct value *val)
6456 {
6457 return ada_value_struct_elt (val, "_tag", 0);
6458 }
6459
6460 /* The value of the tag on the object of type TYPE whose contents are
6461 saved at VALADDR, if it is non-null, or is at memory address
6462 ADDRESS. */
6463
6464 static struct value *
6465 value_tag_from_contents_and_address (struct type *type,
6466 const gdb_byte *valaddr,
6467 CORE_ADDR address)
6468 {
6469 int tag_byte_offset;
6470 struct type *tag_type;
6471
6472 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
6473 NULL, NULL, NULL))
6474 {
6475 const gdb_byte *valaddr1 = ((valaddr == NULL)
6476 ? NULL
6477 : valaddr + tag_byte_offset);
6478 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
6479
6480 return value_from_contents_and_address (tag_type, valaddr1, address1);
6481 }
6482 return NULL;
6483 }
6484
6485 static struct type *
6486 type_from_tag (struct value *tag)
6487 {
6488 const char *type_name = ada_tag_name (tag);
6489
6490 if (type_name != NULL)
6491 return ada_find_any_type (ada_encode (type_name));
6492 return NULL;
6493 }
6494
6495 /* Given a value OBJ of a tagged type, return a value of this
6496 type at the base address of the object. The base address, as
6497 defined in Ada.Tags, it is the address of the primary tag of
6498 the object, and therefore where the field values of its full
6499 view can be fetched. */
6500
6501 struct value *
6502 ada_tag_value_at_base_address (struct value *obj)
6503 {
6504 struct value *val;
6505 LONGEST offset_to_top = 0;
6506 struct type *ptr_type, *obj_type;
6507 struct value *tag;
6508 CORE_ADDR base_address;
6509
6510 obj_type = value_type (obj);
6511
6512 /* It is the responsability of the caller to deref pointers. */
6513
6514 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6515 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6516 return obj;
6517
6518 tag = ada_value_tag (obj);
6519 if (!tag)
6520 return obj;
6521
6522 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6523
6524 if (is_ada95_tag (tag))
6525 return obj;
6526
6527 ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6528 ptr_type = lookup_pointer_type (ptr_type);
6529 val = value_cast (ptr_type, tag);
6530 if (!val)
6531 return obj;
6532
6533 /* It is perfectly possible that an exception be raised while
6534 trying to determine the base address, just like for the tag;
6535 see ada_tag_name for more details. We do not print the error
6536 message for the same reason. */
6537
6538 TRY
6539 {
6540 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6541 }
6542
6543 CATCH (e, RETURN_MASK_ERROR)
6544 {
6545 return obj;
6546 }
6547 END_CATCH
6548
6549 /* If offset is null, nothing to do. */
6550
6551 if (offset_to_top == 0)
6552 return obj;
6553
6554 /* -1 is a special case in Ada.Tags; however, what should be done
6555 is not quite clear from the documentation. So do nothing for
6556 now. */
6557
6558 if (offset_to_top == -1)
6559 return obj;
6560
6561 base_address = value_address (obj) - offset_to_top;
6562 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6563
6564 /* Make sure that we have a proper tag at the new address.
6565 Otherwise, offset_to_top is bogus (which can happen when
6566 the object is not initialized yet). */
6567
6568 if (!tag)
6569 return obj;
6570
6571 obj_type = type_from_tag (tag);
6572
6573 if (!obj_type)
6574 return obj;
6575
6576 return value_from_contents_and_address (obj_type, NULL, base_address);
6577 }
6578
6579 /* Return the "ada__tags__type_specific_data" type. */
6580
6581 static struct type *
6582 ada_get_tsd_type (struct inferior *inf)
6583 {
6584 struct ada_inferior_data *data = get_ada_inferior_data (inf);
6585
6586 if (data->tsd_type == 0)
6587 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6588 return data->tsd_type;
6589 }
6590
6591 /* Return the TSD (type-specific data) associated to the given TAG.
6592 TAG is assumed to be the tag of a tagged-type entity.
6593
6594 May return NULL if we are unable to get the TSD. */
6595
6596 static struct value *
6597 ada_get_tsd_from_tag (struct value *tag)
6598 {
6599 struct value *val;
6600 struct type *type;
6601
6602 /* First option: The TSD is simply stored as a field of our TAG.
6603 Only older versions of GNAT would use this format, but we have
6604 to test it first, because there are no visible markers for
6605 the current approach except the absence of that field. */
6606
6607 val = ada_value_struct_elt (tag, "tsd", 1);
6608 if (val)
6609 return val;
6610
6611 /* Try the second representation for the dispatch table (in which
6612 there is no explicit 'tsd' field in the referent of the tag pointer,
6613 and instead the tsd pointer is stored just before the dispatch
6614 table. */
6615
6616 type = ada_get_tsd_type (current_inferior());
6617 if (type == NULL)
6618 return NULL;
6619 type = lookup_pointer_type (lookup_pointer_type (type));
6620 val = value_cast (type, tag);
6621 if (val == NULL)
6622 return NULL;
6623 return value_ind (value_ptradd (val, -1));
6624 }
6625
6626 /* Given the TSD of a tag (type-specific data), return a string
6627 containing the name of the associated type.
6628
6629 The returned value is good until the next call. May return NULL
6630 if we are unable to determine the tag name. */
6631
6632 static char *
6633 ada_tag_name_from_tsd (struct value *tsd)
6634 {
6635 static char name[1024];
6636 char *p;
6637 struct value *val;
6638
6639 val = ada_value_struct_elt (tsd, "expanded_name", 1);
6640 if (val == NULL)
6641 return NULL;
6642 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6643 for (p = name; *p != '\0'; p += 1)
6644 if (isalpha (*p))
6645 *p = tolower (*p);
6646 return name;
6647 }
6648
6649 /* The type name of the dynamic type denoted by the 'tag value TAG, as
6650 a C string.
6651
6652 Return NULL if the TAG is not an Ada tag, or if we were unable to
6653 determine the name of that tag. The result is good until the next
6654 call. */
6655
6656 const char *
6657 ada_tag_name (struct value *tag)
6658 {
6659 char *name = NULL;
6660
6661 if (!ada_is_tag_type (value_type (tag)))
6662 return NULL;
6663
6664 /* It is perfectly possible that an exception be raised while trying
6665 to determine the TAG's name, even under normal circumstances:
6666 The associated variable may be uninitialized or corrupted, for
6667 instance. We do not let any exception propagate past this point.
6668 instead we return NULL.
6669
6670 We also do not print the error message either (which often is very
6671 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6672 the caller print a more meaningful message if necessary. */
6673 TRY
6674 {
6675 struct value *tsd = ada_get_tsd_from_tag (tag);
6676
6677 if (tsd != NULL)
6678 name = ada_tag_name_from_tsd (tsd);
6679 }
6680 CATCH (e, RETURN_MASK_ERROR)
6681 {
6682 }
6683 END_CATCH
6684
6685 return name;
6686 }
6687
6688 /* The parent type of TYPE, or NULL if none. */
6689
6690 struct type *
6691 ada_parent_type (struct type *type)
6692 {
6693 int i;
6694
6695 type = ada_check_typedef (type);
6696
6697 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6698 return NULL;
6699
6700 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6701 if (ada_is_parent_field (type, i))
6702 {
6703 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6704
6705 /* If the _parent field is a pointer, then dereference it. */
6706 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6707 parent_type = TYPE_TARGET_TYPE (parent_type);
6708 /* If there is a parallel XVS type, get the actual base type. */
6709 parent_type = ada_get_base_type (parent_type);
6710
6711 return ada_check_typedef (parent_type);
6712 }
6713
6714 return NULL;
6715 }
6716
6717 /* True iff field number FIELD_NUM of structure type TYPE contains the
6718 parent-type (inherited) fields of a derived type. Assumes TYPE is
6719 a structure type with at least FIELD_NUM+1 fields. */
6720
6721 int
6722 ada_is_parent_field (struct type *type, int field_num)
6723 {
6724 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
6725
6726 return (name != NULL
6727 && (startswith (name, "PARENT")
6728 || startswith (name, "_parent")));
6729 }
6730
6731 /* True iff field number FIELD_NUM of structure type TYPE is a
6732 transparent wrapper field (which should be silently traversed when doing
6733 field selection and flattened when printing). Assumes TYPE is a
6734 structure type with at least FIELD_NUM+1 fields. Such fields are always
6735 structures. */
6736
6737 int
6738 ada_is_wrapper_field (struct type *type, int field_num)
6739 {
6740 const char *name = TYPE_FIELD_NAME (type, field_num);
6741
6742 return (name != NULL
6743 && (startswith (name, "PARENT")
6744 || strcmp (name, "REP") == 0
6745 || startswith (name, "_parent")
6746 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
6747 }
6748
6749 /* True iff field number FIELD_NUM of structure or union type TYPE
6750 is a variant wrapper. Assumes TYPE is a structure type with at least
6751 FIELD_NUM+1 fields. */
6752
6753 int
6754 ada_is_variant_part (struct type *type, int field_num)
6755 {
6756 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
6757
6758 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
6759 || (is_dynamic_field (type, field_num)
6760 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6761 == TYPE_CODE_UNION)));
6762 }
6763
6764 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
6765 whose discriminants are contained in the record type OUTER_TYPE,
6766 returns the type of the controlling discriminant for the variant.
6767 May return NULL if the type could not be found. */
6768
6769 struct type *
6770 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
6771 {
6772 char *name = ada_variant_discrim_name (var_type);
6773
6774 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
6775 }
6776
6777 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
6778 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
6779 represents a 'when others' clause; otherwise 0. */
6780
6781 int
6782 ada_is_others_clause (struct type *type, int field_num)
6783 {
6784 const char *name = TYPE_FIELD_NAME (type, field_num);
6785
6786 return (name != NULL && name[0] == 'O');
6787 }
6788
6789 /* Assuming that TYPE0 is the type of the variant part of a record,
6790 returns the name of the discriminant controlling the variant.
6791 The value is valid until the next call to ada_variant_discrim_name. */
6792
6793 char *
6794 ada_variant_discrim_name (struct type *type0)
6795 {
6796 static char *result = NULL;
6797 static size_t result_len = 0;
6798 struct type *type;
6799 const char *name;
6800 const char *discrim_end;
6801 const char *discrim_start;
6802
6803 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6804 type = TYPE_TARGET_TYPE (type0);
6805 else
6806 type = type0;
6807
6808 name = ada_type_name (type);
6809
6810 if (name == NULL || name[0] == '\000')
6811 return "";
6812
6813 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6814 discrim_end -= 1)
6815 {
6816 if (startswith (discrim_end, "___XVN"))
6817 break;
6818 }
6819 if (discrim_end == name)
6820 return "";
6821
6822 for (discrim_start = discrim_end; discrim_start != name + 3;
6823 discrim_start -= 1)
6824 {
6825 if (discrim_start == name + 1)
6826 return "";
6827 if ((discrim_start > name + 3
6828 && startswith (discrim_start - 3, "___"))
6829 || discrim_start[-1] == '.')
6830 break;
6831 }
6832
6833 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6834 strncpy (result, discrim_start, discrim_end - discrim_start);
6835 result[discrim_end - discrim_start] = '\0';
6836 return result;
6837 }
6838
6839 /* Scan STR for a subtype-encoded number, beginning at position K.
6840 Put the position of the character just past the number scanned in
6841 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6842 Return 1 if there was a valid number at the given position, and 0
6843 otherwise. A "subtype-encoded" number consists of the absolute value
6844 in decimal, followed by the letter 'm' to indicate a negative number.
6845 Assumes 0m does not occur. */
6846
6847 int
6848 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6849 {
6850 ULONGEST RU;
6851
6852 if (!isdigit (str[k]))
6853 return 0;
6854
6855 /* Do it the hard way so as not to make any assumption about
6856 the relationship of unsigned long (%lu scan format code) and
6857 LONGEST. */
6858 RU = 0;
6859 while (isdigit (str[k]))
6860 {
6861 RU = RU * 10 + (str[k] - '0');
6862 k += 1;
6863 }
6864
6865 if (str[k] == 'm')
6866 {
6867 if (R != NULL)
6868 *R = (-(LONGEST) (RU - 1)) - 1;
6869 k += 1;
6870 }
6871 else if (R != NULL)
6872 *R = (LONGEST) RU;
6873
6874 /* NOTE on the above: Technically, C does not say what the results of
6875 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6876 number representable as a LONGEST (although either would probably work
6877 in most implementations). When RU>0, the locution in the then branch
6878 above is always equivalent to the negative of RU. */
6879
6880 if (new_k != NULL)
6881 *new_k = k;
6882 return 1;
6883 }
6884
6885 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6886 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6887 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
6888
6889 int
6890 ada_in_variant (LONGEST val, struct type *type, int field_num)
6891 {
6892 const char *name = TYPE_FIELD_NAME (type, field_num);
6893 int p;
6894
6895 p = 0;
6896 while (1)
6897 {
6898 switch (name[p])
6899 {
6900 case '\0':
6901 return 0;
6902 case 'S':
6903 {
6904 LONGEST W;
6905
6906 if (!ada_scan_number (name, p + 1, &W, &p))
6907 return 0;
6908 if (val == W)
6909 return 1;
6910 break;
6911 }
6912 case 'R':
6913 {
6914 LONGEST L, U;
6915
6916 if (!ada_scan_number (name, p + 1, &L, &p)
6917 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6918 return 0;
6919 if (val >= L && val <= U)
6920 return 1;
6921 break;
6922 }
6923 case 'O':
6924 return 1;
6925 default:
6926 return 0;
6927 }
6928 }
6929 }
6930
6931 /* FIXME: Lots of redundancy below. Try to consolidate. */
6932
6933 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6934 ARG_TYPE, extract and return the value of one of its (non-static)
6935 fields. FIELDNO says which field. Differs from value_primitive_field
6936 only in that it can handle packed values of arbitrary type. */
6937
6938 static struct value *
6939 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6940 struct type *arg_type)
6941 {
6942 struct type *type;
6943
6944 arg_type = ada_check_typedef (arg_type);
6945 type = TYPE_FIELD_TYPE (arg_type, fieldno);
6946
6947 /* Handle packed fields. */
6948
6949 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6950 {
6951 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6952 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6953
6954 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6955 offset + bit_pos / 8,
6956 bit_pos % 8, bit_size, type);
6957 }
6958 else
6959 return value_primitive_field (arg1, offset, fieldno, arg_type);
6960 }
6961
6962 /* Find field with name NAME in object of type TYPE. If found,
6963 set the following for each argument that is non-null:
6964 - *FIELD_TYPE_P to the field's type;
6965 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6966 an object of that type;
6967 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6968 - *BIT_SIZE_P to its size in bits if the field is packed, and
6969 0 otherwise;
6970 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6971 fields up to but not including the desired field, or by the total
6972 number of fields if not found. A NULL value of NAME never
6973 matches; the function just counts visible fields in this case.
6974
6975 Returns 1 if found, 0 otherwise. */
6976
6977 static int
6978 find_struct_field (const char *name, struct type *type, int offset,
6979 struct type **field_type_p,
6980 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6981 int *index_p)
6982 {
6983 int i;
6984
6985 type = ada_check_typedef (type);
6986
6987 if (field_type_p != NULL)
6988 *field_type_p = NULL;
6989 if (byte_offset_p != NULL)
6990 *byte_offset_p = 0;
6991 if (bit_offset_p != NULL)
6992 *bit_offset_p = 0;
6993 if (bit_size_p != NULL)
6994 *bit_size_p = 0;
6995
6996 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6997 {
6998 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6999 int fld_offset = offset + bit_pos / 8;
7000 const char *t_field_name = TYPE_FIELD_NAME (type, i);
7001
7002 if (t_field_name == NULL)
7003 continue;
7004
7005 else if (name != NULL && field_name_match (t_field_name, name))
7006 {
7007 int bit_size = TYPE_FIELD_BITSIZE (type, i);
7008
7009 if (field_type_p != NULL)
7010 *field_type_p = TYPE_FIELD_TYPE (type, i);
7011 if (byte_offset_p != NULL)
7012 *byte_offset_p = fld_offset;
7013 if (bit_offset_p != NULL)
7014 *bit_offset_p = bit_pos % 8;
7015 if (bit_size_p != NULL)
7016 *bit_size_p = bit_size;
7017 return 1;
7018 }
7019 else if (ada_is_wrapper_field (type, i))
7020 {
7021 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7022 field_type_p, byte_offset_p, bit_offset_p,
7023 bit_size_p, index_p))
7024 return 1;
7025 }
7026 else if (ada_is_variant_part (type, i))
7027 {
7028 /* PNH: Wait. Do we ever execute this section, or is ARG always of
7029 fixed type?? */
7030 int j;
7031 struct type *field_type
7032 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
7033
7034 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7035 {
7036 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7037 fld_offset
7038 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7039 field_type_p, byte_offset_p,
7040 bit_offset_p, bit_size_p, index_p))
7041 return 1;
7042 }
7043 }
7044 else if (index_p != NULL)
7045 *index_p += 1;
7046 }
7047 return 0;
7048 }
7049
7050 /* Number of user-visible fields in record type TYPE. */
7051
7052 static int
7053 num_visible_fields (struct type *type)
7054 {
7055 int n;
7056
7057 n = 0;
7058 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7059 return n;
7060 }
7061
7062 /* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
7063 and search in it assuming it has (class) type TYPE.
7064 If found, return value, else return NULL.
7065
7066 Searches recursively through wrapper fields (e.g., '_parent'). */
7067
7068 static struct value *
7069 ada_search_struct_field (char *name, struct value *arg, int offset,
7070 struct type *type)
7071 {
7072 int i;
7073
7074 type = ada_check_typedef (type);
7075 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7076 {
7077 const char *t_field_name = TYPE_FIELD_NAME (type, i);
7078
7079 if (t_field_name == NULL)
7080 continue;
7081
7082 else if (field_name_match (t_field_name, name))
7083 return ada_value_primitive_field (arg, offset, i, type);
7084
7085 else if (ada_is_wrapper_field (type, i))
7086 {
7087 struct value *v = /* Do not let indent join lines here. */
7088 ada_search_struct_field (name, arg,
7089 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7090 TYPE_FIELD_TYPE (type, i));
7091
7092 if (v != NULL)
7093 return v;
7094 }
7095
7096 else if (ada_is_variant_part (type, i))
7097 {
7098 /* PNH: Do we ever get here? See find_struct_field. */
7099 int j;
7100 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7101 i));
7102 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7103
7104 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
7105 {
7106 struct value *v = ada_search_struct_field /* Force line
7107 break. */
7108 (name, arg,
7109 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7110 TYPE_FIELD_TYPE (field_type, j));
7111
7112 if (v != NULL)
7113 return v;
7114 }
7115 }
7116 }
7117 return NULL;
7118 }
7119
7120 static struct value *ada_index_struct_field_1 (int *, struct value *,
7121 int, struct type *);
7122
7123
7124 /* Return field #INDEX in ARG, where the index is that returned by
7125 * find_struct_field through its INDEX_P argument. Adjust the address
7126 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
7127 * If found, return value, else return NULL. */
7128
7129 static struct value *
7130 ada_index_struct_field (int index, struct value *arg, int offset,
7131 struct type *type)
7132 {
7133 return ada_index_struct_field_1 (&index, arg, offset, type);
7134 }
7135
7136
7137 /* Auxiliary function for ada_index_struct_field. Like
7138 * ada_index_struct_field, but takes index from *INDEX_P and modifies
7139 * *INDEX_P. */
7140
7141 static struct value *
7142 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7143 struct type *type)
7144 {
7145 int i;
7146 type = ada_check_typedef (type);
7147
7148 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7149 {
7150 if (TYPE_FIELD_NAME (type, i) == NULL)
7151 continue;
7152 else if (ada_is_wrapper_field (type, i))
7153 {
7154 struct value *v = /* Do not let indent join lines here. */
7155 ada_index_struct_field_1 (index_p, arg,
7156 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7157 TYPE_FIELD_TYPE (type, i));
7158
7159 if (v != NULL)
7160 return v;
7161 }
7162
7163 else if (ada_is_variant_part (type, i))
7164 {
7165 /* PNH: Do we ever get here? See ada_search_struct_field,
7166 find_struct_field. */
7167 error (_("Cannot assign this kind of variant record"));
7168 }
7169 else if (*index_p == 0)
7170 return ada_value_primitive_field (arg, offset, i, type);
7171 else
7172 *index_p -= 1;
7173 }
7174 return NULL;
7175 }
7176
7177 /* Given ARG, a value of type (pointer or reference to a)*
7178 structure/union, extract the component named NAME from the ultimate
7179 target structure/union and return it as a value with its
7180 appropriate type.
7181
7182 The routine searches for NAME among all members of the structure itself
7183 and (recursively) among all members of any wrapper members
7184 (e.g., '_parent').
7185
7186 If NO_ERR, then simply return NULL in case of error, rather than
7187 calling error. */
7188
7189 struct value *
7190 ada_value_struct_elt (struct value *arg, char *name, int no_err)
7191 {
7192 struct type *t, *t1;
7193 struct value *v;
7194
7195 v = NULL;
7196 t1 = t = ada_check_typedef (value_type (arg));
7197 if (TYPE_CODE (t) == TYPE_CODE_REF)
7198 {
7199 t1 = TYPE_TARGET_TYPE (t);
7200 if (t1 == NULL)
7201 goto BadValue;
7202 t1 = ada_check_typedef (t1);
7203 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7204 {
7205 arg = coerce_ref (arg);
7206 t = t1;
7207 }
7208 }
7209
7210 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7211 {
7212 t1 = TYPE_TARGET_TYPE (t);
7213 if (t1 == NULL)
7214 goto BadValue;
7215 t1 = ada_check_typedef (t1);
7216 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
7217 {
7218 arg = value_ind (arg);
7219 t = t1;
7220 }
7221 else
7222 break;
7223 }
7224
7225 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
7226 goto BadValue;
7227
7228 if (t1 == t)
7229 v = ada_search_struct_field (name, arg, 0, t);
7230 else
7231 {
7232 int bit_offset, bit_size, byte_offset;
7233 struct type *field_type;
7234 CORE_ADDR address;
7235
7236 if (TYPE_CODE (t) == TYPE_CODE_PTR)
7237 address = value_address (ada_value_ind (arg));
7238 else
7239 address = value_address (ada_coerce_ref (arg));
7240
7241 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
7242 if (find_struct_field (name, t1, 0,
7243 &field_type, &byte_offset, &bit_offset,
7244 &bit_size, NULL))
7245 {
7246 if (bit_size != 0)
7247 {
7248 if (TYPE_CODE (t) == TYPE_CODE_REF)
7249 arg = ada_coerce_ref (arg);
7250 else
7251 arg = ada_value_ind (arg);
7252 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7253 bit_offset, bit_size,
7254 field_type);
7255 }
7256 else
7257 v = value_at_lazy (field_type, address + byte_offset);
7258 }
7259 }
7260
7261 if (v != NULL || no_err)
7262 return v;
7263 else
7264 error (_("There is no member named %s."), name);
7265
7266 BadValue:
7267 if (no_err)
7268 return NULL;
7269 else
7270 error (_("Attempt to extract a component of "
7271 "a value that is not a record."));
7272 }
7273
7274 /* Given a type TYPE, look up the type of the component of type named NAME.
7275 If DISPP is non-null, add its byte displacement from the beginning of a
7276 structure (pointed to by a value) of type TYPE to *DISPP (does not
7277 work for packed fields).
7278
7279 Matches any field whose name has NAME as a prefix, possibly
7280 followed by "___".
7281
7282 TYPE can be either a struct or union. If REFOK, TYPE may also
7283 be a (pointer or reference)+ to a struct or union, and the
7284 ultimate target type will be searched.
7285
7286 Looks recursively into variant clauses and parent types.
7287
7288 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7289 TYPE is not a type of the right kind. */
7290
7291 static struct type *
7292 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7293 int noerr, int *dispp)
7294 {
7295 int i;
7296
7297 if (name == NULL)
7298 goto BadName;
7299
7300 if (refok && type != NULL)
7301 while (1)
7302 {
7303 type = ada_check_typedef (type);
7304 if (TYPE_CODE (type) != TYPE_CODE_PTR
7305 && TYPE_CODE (type) != TYPE_CODE_REF)
7306 break;
7307 type = TYPE_TARGET_TYPE (type);
7308 }
7309
7310 if (type == NULL
7311 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7312 && TYPE_CODE (type) != TYPE_CODE_UNION))
7313 {
7314 if (noerr)
7315 return NULL;
7316 else
7317 {
7318 target_terminal_ours ();
7319 gdb_flush (gdb_stdout);
7320 if (type == NULL)
7321 error (_("Type (null) is not a structure or union type"));
7322 else
7323 {
7324 /* XXX: type_sprint */
7325 fprintf_unfiltered (gdb_stderr, _("Type "));
7326 type_print (type, "", gdb_stderr, -1);
7327 error (_(" is not a structure or union type"));
7328 }
7329 }
7330 }
7331
7332 type = to_static_fixed_type (type);
7333
7334 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7335 {
7336 const char *t_field_name = TYPE_FIELD_NAME (type, i);
7337 struct type *t;
7338 int disp;
7339
7340 if (t_field_name == NULL)
7341 continue;
7342
7343 else if (field_name_match (t_field_name, name))
7344 {
7345 if (dispp != NULL)
7346 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
7347 return TYPE_FIELD_TYPE (type, i);
7348 }
7349
7350 else if (ada_is_wrapper_field (type, i))
7351 {
7352 disp = 0;
7353 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7354 0, 1, &disp);
7355 if (t != NULL)
7356 {
7357 if (dispp != NULL)
7358 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7359 return t;
7360 }
7361 }
7362
7363 else if (ada_is_variant_part (type, i))
7364 {
7365 int j;
7366 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7367 i));
7368
7369 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7370 {
7371 /* FIXME pnh 2008/01/26: We check for a field that is
7372 NOT wrapped in a struct, since the compiler sometimes
7373 generates these for unchecked variant types. Revisit
7374 if the compiler changes this practice. */
7375 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
7376 disp = 0;
7377 if (v_field_name != NULL
7378 && field_name_match (v_field_name, name))
7379 t = TYPE_FIELD_TYPE (field_type, j);
7380 else
7381 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7382 j),
7383 name, 0, 1, &disp);
7384
7385 if (t != NULL)
7386 {
7387 if (dispp != NULL)
7388 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7389 return t;
7390 }
7391 }
7392 }
7393
7394 }
7395
7396 BadName:
7397 if (!noerr)
7398 {
7399 target_terminal_ours ();
7400 gdb_flush (gdb_stdout);
7401 if (name == NULL)
7402 {
7403 /* XXX: type_sprint */
7404 fprintf_unfiltered (gdb_stderr, _("Type "));
7405 type_print (type, "", gdb_stderr, -1);
7406 error (_(" has no component named <null>"));
7407 }
7408 else
7409 {
7410 /* XXX: type_sprint */
7411 fprintf_unfiltered (gdb_stderr, _("Type "));
7412 type_print (type, "", gdb_stderr, -1);
7413 error (_(" has no component named %s"), name);
7414 }
7415 }
7416
7417 return NULL;
7418 }
7419
7420 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7421 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7422 represents an unchecked union (that is, the variant part of a
7423 record that is named in an Unchecked_Union pragma). */
7424
7425 static int
7426 is_unchecked_variant (struct type *var_type, struct type *outer_type)
7427 {
7428 char *discrim_name = ada_variant_discrim_name (var_type);
7429
7430 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
7431 == NULL);
7432 }
7433
7434
7435 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7436 within a value of type OUTER_TYPE that is stored in GDB at
7437 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7438 numbering from 0) is applicable. Returns -1 if none are. */
7439
7440 int
7441 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
7442 const gdb_byte *outer_valaddr)
7443 {
7444 int others_clause;
7445 int i;
7446 char *discrim_name = ada_variant_discrim_name (var_type);
7447 struct value *outer;
7448 struct value *discrim;
7449 LONGEST discrim_val;
7450
7451 /* Using plain value_from_contents_and_address here causes problems
7452 because we will end up trying to resolve a type that is currently
7453 being constructed. */
7454 outer = value_from_contents_and_address_unresolved (outer_type,
7455 outer_valaddr, 0);
7456 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7457 if (discrim == NULL)
7458 return -1;
7459 discrim_val = value_as_long (discrim);
7460
7461 others_clause = -1;
7462 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7463 {
7464 if (ada_is_others_clause (var_type, i))
7465 others_clause = i;
7466 else if (ada_in_variant (discrim_val, var_type, i))
7467 return i;
7468 }
7469
7470 return others_clause;
7471 }
7472 \f
7473
7474
7475 /* Dynamic-Sized Records */
7476
7477 /* Strategy: The type ostensibly attached to a value with dynamic size
7478 (i.e., a size that is not statically recorded in the debugging
7479 data) does not accurately reflect the size or layout of the value.
7480 Our strategy is to convert these values to values with accurate,
7481 conventional types that are constructed on the fly. */
7482
7483 /* There is a subtle and tricky problem here. In general, we cannot
7484 determine the size of dynamic records without its data. However,
7485 the 'struct value' data structure, which GDB uses to represent
7486 quantities in the inferior process (the target), requires the size
7487 of the type at the time of its allocation in order to reserve space
7488 for GDB's internal copy of the data. That's why the
7489 'to_fixed_xxx_type' routines take (target) addresses as parameters,
7490 rather than struct value*s.
7491
7492 However, GDB's internal history variables ($1, $2, etc.) are
7493 struct value*s containing internal copies of the data that are not, in
7494 general, the same as the data at their corresponding addresses in
7495 the target. Fortunately, the types we give to these values are all
7496 conventional, fixed-size types (as per the strategy described
7497 above), so that we don't usually have to perform the
7498 'to_fixed_xxx_type' conversions to look at their values.
7499 Unfortunately, there is one exception: if one of the internal
7500 history variables is an array whose elements are unconstrained
7501 records, then we will need to create distinct fixed types for each
7502 element selected. */
7503
7504 /* The upshot of all of this is that many routines take a (type, host
7505 address, target address) triple as arguments to represent a value.
7506 The host address, if non-null, is supposed to contain an internal
7507 copy of the relevant data; otherwise, the program is to consult the
7508 target at the target address. */
7509
7510 /* Assuming that VAL0 represents a pointer value, the result of
7511 dereferencing it. Differs from value_ind in its treatment of
7512 dynamic-sized types. */
7513
7514 struct value *
7515 ada_value_ind (struct value *val0)
7516 {
7517 struct value *val = value_ind (val0);
7518
7519 if (ada_is_tagged_type (value_type (val), 0))
7520 val = ada_tag_value_at_base_address (val);
7521
7522 return ada_to_fixed_value (val);
7523 }
7524
7525 /* The value resulting from dereferencing any "reference to"
7526 qualifiers on VAL0. */
7527
7528 static struct value *
7529 ada_coerce_ref (struct value *val0)
7530 {
7531 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
7532 {
7533 struct value *val = val0;
7534
7535 val = coerce_ref (val);
7536
7537 if (ada_is_tagged_type (value_type (val), 0))
7538 val = ada_tag_value_at_base_address (val);
7539
7540 return ada_to_fixed_value (val);
7541 }
7542 else
7543 return val0;
7544 }
7545
7546 /* Return OFF rounded upward if necessary to a multiple of
7547 ALIGNMENT (a power of 2). */
7548
7549 static unsigned int
7550 align_value (unsigned int off, unsigned int alignment)
7551 {
7552 return (off + alignment - 1) & ~(alignment - 1);
7553 }
7554
7555 /* Return the bit alignment required for field #F of template type TYPE. */
7556
7557 static unsigned int
7558 field_alignment (struct type *type, int f)
7559 {
7560 const char *name = TYPE_FIELD_NAME (type, f);
7561 int len;
7562 int align_offset;
7563
7564 /* The field name should never be null, unless the debugging information
7565 is somehow malformed. In this case, we assume the field does not
7566 require any alignment. */
7567 if (name == NULL)
7568 return 1;
7569
7570 len = strlen (name);
7571
7572 if (!isdigit (name[len - 1]))
7573 return 1;
7574
7575 if (isdigit (name[len - 2]))
7576 align_offset = len - 2;
7577 else
7578 align_offset = len - 1;
7579
7580 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
7581 return TARGET_CHAR_BIT;
7582
7583 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7584 }
7585
7586 /* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
7587
7588 static struct symbol *
7589 ada_find_any_type_symbol (const char *name)
7590 {
7591 struct symbol *sym;
7592
7593 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7594 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7595 return sym;
7596
7597 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7598 return sym;
7599 }
7600
7601 /* Find a type named NAME. Ignores ambiguity. This routine will look
7602 solely for types defined by debug info, it will not search the GDB
7603 primitive types. */
7604
7605 static struct type *
7606 ada_find_any_type (const char *name)
7607 {
7608 struct symbol *sym = ada_find_any_type_symbol (name);
7609
7610 if (sym != NULL)
7611 return SYMBOL_TYPE (sym);
7612
7613 return NULL;
7614 }
7615
7616 /* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7617 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7618 symbol, in which case it is returned. Otherwise, this looks for
7619 symbols whose name is that of NAME_SYM suffixed with "___XR".
7620 Return symbol if found, and NULL otherwise. */
7621
7622 struct symbol *
7623 ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
7624 {
7625 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
7626 struct symbol *sym;
7627
7628 if (strstr (name, "___XR") != NULL)
7629 return name_sym;
7630
7631 sym = find_old_style_renaming_symbol (name, block);
7632
7633 if (sym != NULL)
7634 return sym;
7635
7636 /* Not right yet. FIXME pnh 7/20/2007. */
7637 sym = ada_find_any_type_symbol (name);
7638 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7639 return sym;
7640 else
7641 return NULL;
7642 }
7643
7644 static struct symbol *
7645 find_old_style_renaming_symbol (const char *name, const struct block *block)
7646 {
7647 const struct symbol *function_sym = block_linkage_function (block);
7648 char *rename;
7649
7650 if (function_sym != NULL)
7651 {
7652 /* If the symbol is defined inside a function, NAME is not fully
7653 qualified. This means we need to prepend the function name
7654 as well as adding the ``___XR'' suffix to build the name of
7655 the associated renaming symbol. */
7656 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
7657 /* Function names sometimes contain suffixes used
7658 for instance to qualify nested subprograms. When building
7659 the XR type name, we need to make sure that this suffix is
7660 not included. So do not include any suffix in the function
7661 name length below. */
7662 int function_name_len = ada_name_prefix_len (function_name);
7663 const int rename_len = function_name_len + 2 /* "__" */
7664 + strlen (name) + 6 /* "___XR\0" */ ;
7665
7666 /* Strip the suffix if necessary. */
7667 ada_remove_trailing_digits (function_name, &function_name_len);
7668 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7669 ada_remove_Xbn_suffix (function_name, &function_name_len);
7670
7671 /* Library-level functions are a special case, as GNAT adds
7672 a ``_ada_'' prefix to the function name to avoid namespace
7673 pollution. However, the renaming symbols themselves do not
7674 have this prefix, so we need to skip this prefix if present. */
7675 if (function_name_len > 5 /* "_ada_" */
7676 && strstr (function_name, "_ada_") == function_name)
7677 {
7678 function_name += 5;
7679 function_name_len -= 5;
7680 }
7681
7682 rename = (char *) alloca (rename_len * sizeof (char));
7683 strncpy (rename, function_name, function_name_len);
7684 xsnprintf (rename + function_name_len, rename_len - function_name_len,
7685 "__%s___XR", name);
7686 }
7687 else
7688 {
7689 const int rename_len = strlen (name) + 6;
7690
7691 rename = (char *) alloca (rename_len * sizeof (char));
7692 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
7693 }
7694
7695 return ada_find_any_type_symbol (rename);
7696 }
7697
7698 /* Because of GNAT encoding conventions, several GDB symbols may match a
7699 given type name. If the type denoted by TYPE0 is to be preferred to
7700 that of TYPE1 for purposes of type printing, return non-zero;
7701 otherwise return 0. */
7702
7703 int
7704 ada_prefer_type (struct type *type0, struct type *type1)
7705 {
7706 if (type1 == NULL)
7707 return 1;
7708 else if (type0 == NULL)
7709 return 0;
7710 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7711 return 1;
7712 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7713 return 0;
7714 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7715 return 1;
7716 else if (ada_is_constrained_packed_array_type (type0))
7717 return 1;
7718 else if (ada_is_array_descriptor_type (type0)
7719 && !ada_is_array_descriptor_type (type1))
7720 return 1;
7721 else
7722 {
7723 const char *type0_name = type_name_no_tag (type0);
7724 const char *type1_name = type_name_no_tag (type1);
7725
7726 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7727 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7728 return 1;
7729 }
7730 return 0;
7731 }
7732
7733 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
7734 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7735
7736 const char *
7737 ada_type_name (struct type *type)
7738 {
7739 if (type == NULL)
7740 return NULL;
7741 else if (TYPE_NAME (type) != NULL)
7742 return TYPE_NAME (type);
7743 else
7744 return TYPE_TAG_NAME (type);
7745 }
7746
7747 /* Search the list of "descriptive" types associated to TYPE for a type
7748 whose name is NAME. */
7749
7750 static struct type *
7751 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7752 {
7753 struct type *result;
7754
7755 if (ada_ignore_descriptive_types_p)
7756 return NULL;
7757
7758 /* If there no descriptive-type info, then there is no parallel type
7759 to be found. */
7760 if (!HAVE_GNAT_AUX_INFO (type))
7761 return NULL;
7762
7763 result = TYPE_DESCRIPTIVE_TYPE (type);
7764 while (result != NULL)
7765 {
7766 const char *result_name = ada_type_name (result);
7767
7768 if (result_name == NULL)
7769 {
7770 warning (_("unexpected null name on descriptive type"));
7771 return NULL;
7772 }
7773
7774 /* If the names match, stop. */
7775 if (strcmp (result_name, name) == 0)
7776 break;
7777
7778 /* Otherwise, look at the next item on the list, if any. */
7779 if (HAVE_GNAT_AUX_INFO (result))
7780 result = TYPE_DESCRIPTIVE_TYPE (result);
7781 else
7782 result = NULL;
7783 }
7784
7785 /* If we didn't find a match, see whether this is a packed array. With
7786 older compilers, the descriptive type information is either absent or
7787 irrelevant when it comes to packed arrays so the above lookup fails.
7788 Fall back to using a parallel lookup by name in this case. */
7789 if (result == NULL && ada_is_constrained_packed_array_type (type))
7790 return ada_find_any_type (name);
7791
7792 return result;
7793 }
7794
7795 /* Find a parallel type to TYPE with the specified NAME, using the
7796 descriptive type taken from the debugging information, if available,
7797 and otherwise using the (slower) name-based method. */
7798
7799 static struct type *
7800 ada_find_parallel_type_with_name (struct type *type, const char *name)
7801 {
7802 struct type *result = NULL;
7803
7804 if (HAVE_GNAT_AUX_INFO (type))
7805 result = find_parallel_type_by_descriptive_type (type, name);
7806 else
7807 result = ada_find_any_type (name);
7808
7809 return result;
7810 }
7811
7812 /* Same as above, but specify the name of the parallel type by appending
7813 SUFFIX to the name of TYPE. */
7814
7815 struct type *
7816 ada_find_parallel_type (struct type *type, const char *suffix)
7817 {
7818 char *name;
7819 const char *type_name = ada_type_name (type);
7820 int len;
7821
7822 if (type_name == NULL)
7823 return NULL;
7824
7825 len = strlen (type_name);
7826
7827 name = (char *) alloca (len + strlen (suffix) + 1);
7828
7829 strcpy (name, type_name);
7830 strcpy (name + len, suffix);
7831
7832 return ada_find_parallel_type_with_name (type, name);
7833 }
7834
7835 /* If TYPE is a variable-size record type, return the corresponding template
7836 type describing its fields. Otherwise, return NULL. */
7837
7838 static struct type *
7839 dynamic_template_type (struct type *type)
7840 {
7841 type = ada_check_typedef (type);
7842
7843 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
7844 || ada_type_name (type) == NULL)
7845 return NULL;
7846 else
7847 {
7848 int len = strlen (ada_type_name (type));
7849
7850 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7851 return type;
7852 else
7853 return ada_find_parallel_type (type, "___XVE");
7854 }
7855 }
7856
7857 /* Assuming that TEMPL_TYPE is a union or struct type, returns
7858 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
7859
7860 static int
7861 is_dynamic_field (struct type *templ_type, int field_num)
7862 {
7863 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
7864
7865 return name != NULL
7866 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7867 && strstr (name, "___XVL") != NULL;
7868 }
7869
7870 /* The index of the variant field of TYPE, or -1 if TYPE does not
7871 represent a variant record type. */
7872
7873 static int
7874 variant_field_index (struct type *type)
7875 {
7876 int f;
7877
7878 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7879 return -1;
7880
7881 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7882 {
7883 if (ada_is_variant_part (type, f))
7884 return f;
7885 }
7886 return -1;
7887 }
7888
7889 /* A record type with no fields. */
7890
7891 static struct type *
7892 empty_record (struct type *templ)
7893 {
7894 struct type *type = alloc_type_copy (templ);
7895
7896 TYPE_CODE (type) = TYPE_CODE_STRUCT;
7897 TYPE_NFIELDS (type) = 0;
7898 TYPE_FIELDS (type) = NULL;
7899 INIT_CPLUS_SPECIFIC (type);
7900 TYPE_NAME (type) = "<empty>";
7901 TYPE_TAG_NAME (type) = NULL;
7902 TYPE_LENGTH (type) = 0;
7903 return type;
7904 }
7905
7906 /* An ordinary record type (with fixed-length fields) that describes
7907 the value of type TYPE at VALADDR or ADDRESS (see comments at
7908 the beginning of this section) VAL according to GNAT conventions.
7909 DVAL0 should describe the (portion of a) record that contains any
7910 necessary discriminants. It should be NULL if value_type (VAL) is
7911 an outer-level type (i.e., as opposed to a branch of a variant.) A
7912 variant field (unless unchecked) is replaced by a particular branch
7913 of the variant.
7914
7915 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7916 length are not statically known are discarded. As a consequence,
7917 VALADDR, ADDRESS and DVAL0 are ignored.
7918
7919 NOTE: Limitations: For now, we assume that dynamic fields and
7920 variants occupy whole numbers of bytes. However, they need not be
7921 byte-aligned. */
7922
7923 struct type *
7924 ada_template_to_fixed_record_type_1 (struct type *type,
7925 const gdb_byte *valaddr,
7926 CORE_ADDR address, struct value *dval0,
7927 int keep_dynamic_fields)
7928 {
7929 struct value *mark = value_mark ();
7930 struct value *dval;
7931 struct type *rtype;
7932 int nfields, bit_len;
7933 int variant_field;
7934 long off;
7935 int fld_bit_len;
7936 int f;
7937
7938 /* Compute the number of fields in this record type that are going
7939 to be processed: unless keep_dynamic_fields, this includes only
7940 fields whose position and length are static will be processed. */
7941 if (keep_dynamic_fields)
7942 nfields = TYPE_NFIELDS (type);
7943 else
7944 {
7945 nfields = 0;
7946 while (nfields < TYPE_NFIELDS (type)
7947 && !ada_is_variant_part (type, nfields)
7948 && !is_dynamic_field (type, nfields))
7949 nfields++;
7950 }
7951
7952 rtype = alloc_type_copy (type);
7953 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7954 INIT_CPLUS_SPECIFIC (rtype);
7955 TYPE_NFIELDS (rtype) = nfields;
7956 TYPE_FIELDS (rtype) = (struct field *)
7957 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7958 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7959 TYPE_NAME (rtype) = ada_type_name (type);
7960 TYPE_TAG_NAME (rtype) = NULL;
7961 TYPE_FIXED_INSTANCE (rtype) = 1;
7962
7963 off = 0;
7964 bit_len = 0;
7965 variant_field = -1;
7966
7967 for (f = 0; f < nfields; f += 1)
7968 {
7969 off = align_value (off, field_alignment (type, f))
7970 + TYPE_FIELD_BITPOS (type, f);
7971 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
7972 TYPE_FIELD_BITSIZE (rtype, f) = 0;
7973
7974 if (ada_is_variant_part (type, f))
7975 {
7976 variant_field = f;
7977 fld_bit_len = 0;
7978 }
7979 else if (is_dynamic_field (type, f))
7980 {
7981 const gdb_byte *field_valaddr = valaddr;
7982 CORE_ADDR field_address = address;
7983 struct type *field_type =
7984 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7985
7986 if (dval0 == NULL)
7987 {
7988 /* rtype's length is computed based on the run-time
7989 value of discriminants. If the discriminants are not
7990 initialized, the type size may be completely bogus and
7991 GDB may fail to allocate a value for it. So check the
7992 size first before creating the value. */
7993 ada_ensure_varsize_limit (rtype);
7994 /* Using plain value_from_contents_and_address here
7995 causes problems because we will end up trying to
7996 resolve a type that is currently being
7997 constructed. */
7998 dval = value_from_contents_and_address_unresolved (rtype,
7999 valaddr,
8000 address);
8001 rtype = value_type (dval);
8002 }
8003 else
8004 dval = dval0;
8005
8006 /* If the type referenced by this field is an aligner type, we need
8007 to unwrap that aligner type, because its size might not be set.
8008 Keeping the aligner type would cause us to compute the wrong
8009 size for this field, impacting the offset of the all the fields
8010 that follow this one. */
8011 if (ada_is_aligner_type (field_type))
8012 {
8013 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8014
8015 field_valaddr = cond_offset_host (field_valaddr, field_offset);
8016 field_address = cond_offset_target (field_address, field_offset);
8017 field_type = ada_aligned_type (field_type);
8018 }
8019
8020 field_valaddr = cond_offset_host (field_valaddr,
8021 off / TARGET_CHAR_BIT);
8022 field_address = cond_offset_target (field_address,
8023 off / TARGET_CHAR_BIT);
8024
8025 /* Get the fixed type of the field. Note that, in this case,
8026 we do not want to get the real type out of the tag: if
8027 the current field is the parent part of a tagged record,
8028 we will get the tag of the object. Clearly wrong: the real
8029 type of the parent is not the real type of the child. We
8030 would end up in an infinite loop. */
8031 field_type = ada_get_base_type (field_type);
8032 field_type = ada_to_fixed_type (field_type, field_valaddr,
8033 field_address, dval, 0);
8034 /* If the field size is already larger than the maximum
8035 object size, then the record itself will necessarily
8036 be larger than the maximum object size. We need to make
8037 this check now, because the size might be so ridiculously
8038 large (due to an uninitialized variable in the inferior)
8039 that it would cause an overflow when adding it to the
8040 record size. */
8041 ada_ensure_varsize_limit (field_type);
8042
8043 TYPE_FIELD_TYPE (rtype, f) = field_type;
8044 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8045 /* The multiplication can potentially overflow. But because
8046 the field length has been size-checked just above, and
8047 assuming that the maximum size is a reasonable value,
8048 an overflow should not happen in practice. So rather than
8049 adding overflow recovery code to this already complex code,
8050 we just assume that it's not going to happen. */
8051 fld_bit_len =
8052 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8053 }
8054 else
8055 {
8056 /* Note: If this field's type is a typedef, it is important
8057 to preserve the typedef layer.
8058
8059 Otherwise, we might be transforming a typedef to a fat
8060 pointer (encoding a pointer to an unconstrained array),
8061 into a basic fat pointer (encoding an unconstrained
8062 array). As both types are implemented using the same
8063 structure, the typedef is the only clue which allows us
8064 to distinguish between the two options. Stripping it
8065 would prevent us from printing this field appropriately. */
8066 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
8067 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8068 if (TYPE_FIELD_BITSIZE (type, f) > 0)
8069 fld_bit_len =
8070 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8071 else
8072 {
8073 struct type *field_type = TYPE_FIELD_TYPE (type, f);
8074
8075 /* We need to be careful of typedefs when computing
8076 the length of our field. If this is a typedef,
8077 get the length of the target type, not the length
8078 of the typedef. */
8079 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8080 field_type = ada_typedef_target_type (field_type);
8081
8082 fld_bit_len =
8083 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8084 }
8085 }
8086 if (off + fld_bit_len > bit_len)
8087 bit_len = off + fld_bit_len;
8088 off += fld_bit_len;
8089 TYPE_LENGTH (rtype) =
8090 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8091 }
8092
8093 /* We handle the variant part, if any, at the end because of certain
8094 odd cases in which it is re-ordered so as NOT to be the last field of
8095 the record. This can happen in the presence of representation
8096 clauses. */
8097 if (variant_field >= 0)
8098 {
8099 struct type *branch_type;
8100
8101 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8102
8103 if (dval0 == NULL)
8104 {
8105 /* Using plain value_from_contents_and_address here causes
8106 problems because we will end up trying to resolve a type
8107 that is currently being constructed. */
8108 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8109 address);
8110 rtype = value_type (dval);
8111 }
8112 else
8113 dval = dval0;
8114
8115 branch_type =
8116 to_fixed_variant_branch_type
8117 (TYPE_FIELD_TYPE (type, variant_field),
8118 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8119 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8120 if (branch_type == NULL)
8121 {
8122 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8123 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8124 TYPE_NFIELDS (rtype) -= 1;
8125 }
8126 else
8127 {
8128 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8129 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8130 fld_bit_len =
8131 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8132 TARGET_CHAR_BIT;
8133 if (off + fld_bit_len > bit_len)
8134 bit_len = off + fld_bit_len;
8135 TYPE_LENGTH (rtype) =
8136 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8137 }
8138 }
8139
8140 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8141 should contain the alignment of that record, which should be a strictly
8142 positive value. If null or negative, then something is wrong, most
8143 probably in the debug info. In that case, we don't round up the size
8144 of the resulting type. If this record is not part of another structure,
8145 the current RTYPE length might be good enough for our purposes. */
8146 if (TYPE_LENGTH (type) <= 0)
8147 {
8148 if (TYPE_NAME (rtype))
8149 warning (_("Invalid type size for `%s' detected: %d."),
8150 TYPE_NAME (rtype), TYPE_LENGTH (type));
8151 else
8152 warning (_("Invalid type size for <unnamed> detected: %d."),
8153 TYPE_LENGTH (type));
8154 }
8155 else
8156 {
8157 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8158 TYPE_LENGTH (type));
8159 }
8160
8161 value_free_to_mark (mark);
8162 if (TYPE_LENGTH (rtype) > varsize_limit)
8163 error (_("record type with dynamic size is larger than varsize-limit"));
8164 return rtype;
8165 }
8166
8167 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8168 of 1. */
8169
8170 static struct type *
8171 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
8172 CORE_ADDR address, struct value *dval0)
8173 {
8174 return ada_template_to_fixed_record_type_1 (type, valaddr,
8175 address, dval0, 1);
8176 }
8177
8178 /* An ordinary record type in which ___XVL-convention fields and
8179 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8180 static approximations, containing all possible fields. Uses
8181 no runtime values. Useless for use in values, but that's OK,
8182 since the results are used only for type determinations. Works on both
8183 structs and unions. Representation note: to save space, we memorize
8184 the result of this function in the TYPE_TARGET_TYPE of the
8185 template type. */
8186
8187 static struct type *
8188 template_to_static_fixed_type (struct type *type0)
8189 {
8190 struct type *type;
8191 int nfields;
8192 int f;
8193
8194 /* No need no do anything if the input type is already fixed. */
8195 if (TYPE_FIXED_INSTANCE (type0))
8196 return type0;
8197
8198 /* Likewise if we already have computed the static approximation. */
8199 if (TYPE_TARGET_TYPE (type0) != NULL)
8200 return TYPE_TARGET_TYPE (type0);
8201
8202 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
8203 type = type0;
8204 nfields = TYPE_NFIELDS (type0);
8205
8206 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8207 recompute all over next time. */
8208 TYPE_TARGET_TYPE (type0) = type;
8209
8210 for (f = 0; f < nfields; f += 1)
8211 {
8212 struct type *field_type = TYPE_FIELD_TYPE (type0, f);
8213 struct type *new_type;
8214
8215 if (is_dynamic_field (type0, f))
8216 {
8217 field_type = ada_check_typedef (field_type);
8218 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8219 }
8220 else
8221 new_type = static_unwrap_type (field_type);
8222
8223 if (new_type != field_type)
8224 {
8225 /* Clone TYPE0 only the first time we get a new field type. */
8226 if (type == type0)
8227 {
8228 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8229 TYPE_CODE (type) = TYPE_CODE (type0);
8230 INIT_CPLUS_SPECIFIC (type);
8231 TYPE_NFIELDS (type) = nfields;
8232 TYPE_FIELDS (type) = (struct field *)
8233 TYPE_ALLOC (type, nfields * sizeof (struct field));
8234 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8235 sizeof (struct field) * nfields);
8236 TYPE_NAME (type) = ada_type_name (type0);
8237 TYPE_TAG_NAME (type) = NULL;
8238 TYPE_FIXED_INSTANCE (type) = 1;
8239 TYPE_LENGTH (type) = 0;
8240 }
8241 TYPE_FIELD_TYPE (type, f) = new_type;
8242 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8243 }
8244 }
8245
8246 return type;
8247 }
8248
8249 /* Given an object of type TYPE whose contents are at VALADDR and
8250 whose address in memory is ADDRESS, returns a revision of TYPE,
8251 which should be a non-dynamic-sized record, in which the variant
8252 part, if any, is replaced with the appropriate branch. Looks
8253 for discriminant values in DVAL0, which can be NULL if the record
8254 contains the necessary discriminant values. */
8255
8256 static struct type *
8257 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
8258 CORE_ADDR address, struct value *dval0)
8259 {
8260 struct value *mark = value_mark ();
8261 struct value *dval;
8262 struct type *rtype;
8263 struct type *branch_type;
8264 int nfields = TYPE_NFIELDS (type);
8265 int variant_field = variant_field_index (type);
8266
8267 if (variant_field == -1)
8268 return type;
8269
8270 if (dval0 == NULL)
8271 {
8272 dval = value_from_contents_and_address (type, valaddr, address);
8273 type = value_type (dval);
8274 }
8275 else
8276 dval = dval0;
8277
8278 rtype = alloc_type_copy (type);
8279 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8280 INIT_CPLUS_SPECIFIC (rtype);
8281 TYPE_NFIELDS (rtype) = nfields;
8282 TYPE_FIELDS (rtype) =
8283 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8284 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
8285 sizeof (struct field) * nfields);
8286 TYPE_NAME (rtype) = ada_type_name (type);
8287 TYPE_TAG_NAME (rtype) = NULL;
8288 TYPE_FIXED_INSTANCE (rtype) = 1;
8289 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8290
8291 branch_type = to_fixed_variant_branch_type
8292 (TYPE_FIELD_TYPE (type, variant_field),
8293 cond_offset_host (valaddr,
8294 TYPE_FIELD_BITPOS (type, variant_field)
8295 / TARGET_CHAR_BIT),
8296 cond_offset_target (address,
8297 TYPE_FIELD_BITPOS (type, variant_field)
8298 / TARGET_CHAR_BIT), dval);
8299 if (branch_type == NULL)
8300 {
8301 int f;
8302
8303 for (f = variant_field + 1; f < nfields; f += 1)
8304 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8305 TYPE_NFIELDS (rtype) -= 1;
8306 }
8307 else
8308 {
8309 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8310 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8311 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
8312 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
8313 }
8314 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
8315
8316 value_free_to_mark (mark);
8317 return rtype;
8318 }
8319
8320 /* An ordinary record type (with fixed-length fields) that describes
8321 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8322 beginning of this section]. Any necessary discriminants' values
8323 should be in DVAL, a record value; it may be NULL if the object
8324 at ADDR itself contains any necessary discriminant values.
8325 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8326 values from the record are needed. Except in the case that DVAL,
8327 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8328 unchecked) is replaced by a particular branch of the variant.
8329
8330 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8331 is questionable and may be removed. It can arise during the
8332 processing of an unconstrained-array-of-record type where all the
8333 variant branches have exactly the same size. This is because in
8334 such cases, the compiler does not bother to use the XVS convention
8335 when encoding the record. I am currently dubious of this
8336 shortcut and suspect the compiler should be altered. FIXME. */
8337
8338 static struct type *
8339 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
8340 CORE_ADDR address, struct value *dval)
8341 {
8342 struct type *templ_type;
8343
8344 if (TYPE_FIXED_INSTANCE (type0))
8345 return type0;
8346
8347 templ_type = dynamic_template_type (type0);
8348
8349 if (templ_type != NULL)
8350 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
8351 else if (variant_field_index (type0) >= 0)
8352 {
8353 if (dval == NULL && valaddr == NULL && address == 0)
8354 return type0;
8355 return to_record_with_fixed_variant_part (type0, valaddr, address,
8356 dval);
8357 }
8358 else
8359 {
8360 TYPE_FIXED_INSTANCE (type0) = 1;
8361 return type0;
8362 }
8363
8364 }
8365
8366 /* An ordinary record type (with fixed-length fields) that describes
8367 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8368 union type. Any necessary discriminants' values should be in DVAL,
8369 a record value. That is, this routine selects the appropriate
8370 branch of the union at ADDR according to the discriminant value
8371 indicated in the union's type name. Returns VAR_TYPE0 itself if
8372 it represents a variant subject to a pragma Unchecked_Union. */
8373
8374 static struct type *
8375 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
8376 CORE_ADDR address, struct value *dval)
8377 {
8378 int which;
8379 struct type *templ_type;
8380 struct type *var_type;
8381
8382 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8383 var_type = TYPE_TARGET_TYPE (var_type0);
8384 else
8385 var_type = var_type0;
8386
8387 templ_type = ada_find_parallel_type (var_type, "___XVU");
8388
8389 if (templ_type != NULL)
8390 var_type = templ_type;
8391
8392 if (is_unchecked_variant (var_type, value_type (dval)))
8393 return var_type0;
8394 which =
8395 ada_which_variant_applies (var_type,
8396 value_type (dval), value_contents (dval));
8397
8398 if (which < 0)
8399 return empty_record (var_type);
8400 else if (is_dynamic_field (var_type, which))
8401 return to_fixed_record_type
8402 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8403 valaddr, address, dval);
8404 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
8405 return
8406 to_fixed_record_type
8407 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
8408 else
8409 return TYPE_FIELD_TYPE (var_type, which);
8410 }
8411
8412 /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8413 ENCODING_TYPE, a type following the GNAT conventions for discrete
8414 type encodings, only carries redundant information. */
8415
8416 static int
8417 ada_is_redundant_range_encoding (struct type *range_type,
8418 struct type *encoding_type)
8419 {
8420 struct type *fixed_range_type;
8421 char *bounds_str;
8422 int n;
8423 LONGEST lo, hi;
8424
8425 gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8426
8427 if (TYPE_CODE (get_base_type (range_type))
8428 != TYPE_CODE (get_base_type (encoding_type)))
8429 {
8430 /* The compiler probably used a simple base type to describe
8431 the range type instead of the range's actual base type,
8432 expecting us to get the real base type from the encoding
8433 anyway. In this situation, the encoding cannot be ignored
8434 as redundant. */
8435 return 0;
8436 }
8437
8438 if (is_dynamic_type (range_type))
8439 return 0;
8440
8441 if (TYPE_NAME (encoding_type) == NULL)
8442 return 0;
8443
8444 bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8445 if (bounds_str == NULL)
8446 return 0;
8447
8448 n = 8; /* Skip "___XDLU_". */
8449 if (!ada_scan_number (bounds_str, n, &lo, &n))
8450 return 0;
8451 if (TYPE_LOW_BOUND (range_type) != lo)
8452 return 0;
8453
8454 n += 2; /* Skip the "__" separator between the two bounds. */
8455 if (!ada_scan_number (bounds_str, n, &hi, &n))
8456 return 0;
8457 if (TYPE_HIGH_BOUND (range_type) != hi)
8458 return 0;
8459
8460 return 1;
8461 }
8462
8463 /* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8464 a type following the GNAT encoding for describing array type
8465 indices, only carries redundant information. */
8466
8467 static int
8468 ada_is_redundant_index_type_desc (struct type *array_type,
8469 struct type *desc_type)
8470 {
8471 struct type *this_layer = check_typedef (array_type);
8472 int i;
8473
8474 for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8475 {
8476 if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8477 TYPE_FIELD_TYPE (desc_type, i)))
8478 return 0;
8479 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8480 }
8481
8482 return 1;
8483 }
8484
8485 /* Assuming that TYPE0 is an array type describing the type of a value
8486 at ADDR, and that DVAL describes a record containing any
8487 discriminants used in TYPE0, returns a type for the value that
8488 contains no dynamic components (that is, no components whose sizes
8489 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8490 true, gives an error message if the resulting type's size is over
8491 varsize_limit. */
8492
8493 static struct type *
8494 to_fixed_array_type (struct type *type0, struct value *dval,
8495 int ignore_too_big)
8496 {
8497 struct type *index_type_desc;
8498 struct type *result;
8499 int constrained_packed_array_p;
8500
8501 type0 = ada_check_typedef (type0);
8502 if (TYPE_FIXED_INSTANCE (type0))
8503 return type0;
8504
8505 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8506 if (constrained_packed_array_p)
8507 type0 = decode_constrained_packed_array_type (type0);
8508
8509 index_type_desc = ada_find_parallel_type (type0, "___XA");
8510 ada_fixup_array_indexes_type (index_type_desc);
8511 if (index_type_desc != NULL
8512 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8513 {
8514 /* Ignore this ___XA parallel type, as it does not bring any
8515 useful information. This allows us to avoid creating fixed
8516 versions of the array's index types, which would be identical
8517 to the original ones. This, in turn, can also help avoid
8518 the creation of fixed versions of the array itself. */
8519 index_type_desc = NULL;
8520 }
8521
8522 if (index_type_desc == NULL)
8523 {
8524 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
8525
8526 /* NOTE: elt_type---the fixed version of elt_type0---should never
8527 depend on the contents of the array in properly constructed
8528 debugging data. */
8529 /* Create a fixed version of the array element type.
8530 We're not providing the address of an element here,
8531 and thus the actual object value cannot be inspected to do
8532 the conversion. This should not be a problem, since arrays of
8533 unconstrained objects are not allowed. In particular, all
8534 the elements of an array of a tagged type should all be of
8535 the same type specified in the debugging info. No need to
8536 consult the object tag. */
8537 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
8538
8539 /* Make sure we always create a new array type when dealing with
8540 packed array types, since we're going to fix-up the array
8541 type length and element bitsize a little further down. */
8542 if (elt_type0 == elt_type && !constrained_packed_array_p)
8543 result = type0;
8544 else
8545 result = create_array_type (alloc_type_copy (type0),
8546 elt_type, TYPE_INDEX_TYPE (type0));
8547 }
8548 else
8549 {
8550 int i;
8551 struct type *elt_type0;
8552
8553 elt_type0 = type0;
8554 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
8555 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8556
8557 /* NOTE: result---the fixed version of elt_type0---should never
8558 depend on the contents of the array in properly constructed
8559 debugging data. */
8560 /* Create a fixed version of the array element type.
8561 We're not providing the address of an element here,
8562 and thus the actual object value cannot be inspected to do
8563 the conversion. This should not be a problem, since arrays of
8564 unconstrained objects are not allowed. In particular, all
8565 the elements of an array of a tagged type should all be of
8566 the same type specified in the debugging info. No need to
8567 consult the object tag. */
8568 result =
8569 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
8570
8571 elt_type0 = type0;
8572 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
8573 {
8574 struct type *range_type =
8575 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
8576
8577 result = create_array_type (alloc_type_copy (elt_type0),
8578 result, range_type);
8579 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
8580 }
8581 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
8582 error (_("array type with dynamic size is larger than varsize-limit"));
8583 }
8584
8585 /* We want to preserve the type name. This can be useful when
8586 trying to get the type name of a value that has already been
8587 printed (for instance, if the user did "print VAR; whatis $". */
8588 TYPE_NAME (result) = TYPE_NAME (type0);
8589
8590 if (constrained_packed_array_p)
8591 {
8592 /* So far, the resulting type has been created as if the original
8593 type was a regular (non-packed) array type. As a result, the
8594 bitsize of the array elements needs to be set again, and the array
8595 length needs to be recomputed based on that bitsize. */
8596 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8597 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8598
8599 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8600 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8601 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8602 TYPE_LENGTH (result)++;
8603 }
8604
8605 TYPE_FIXED_INSTANCE (result) = 1;
8606 return result;
8607 }
8608
8609
8610 /* A standard type (containing no dynamically sized components)
8611 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8612 DVAL describes a record containing any discriminants used in TYPE0,
8613 and may be NULL if there are none, or if the object of type TYPE at
8614 ADDRESS or in VALADDR contains these discriminants.
8615
8616 If CHECK_TAG is not null, in the case of tagged types, this function
8617 attempts to locate the object's tag and use it to compute the actual
8618 type. However, when ADDRESS is null, we cannot use it to determine the
8619 location of the tag, and therefore compute the tagged type's actual type.
8620 So we return the tagged type without consulting the tag. */
8621
8622 static struct type *
8623 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
8624 CORE_ADDR address, struct value *dval, int check_tag)
8625 {
8626 type = ada_check_typedef (type);
8627 switch (TYPE_CODE (type))
8628 {
8629 default:
8630 return type;
8631 case TYPE_CODE_STRUCT:
8632 {
8633 struct type *static_type = to_static_fixed_type (type);
8634 struct type *fixed_record_type =
8635 to_fixed_record_type (type, valaddr, address, NULL);
8636
8637 /* If STATIC_TYPE is a tagged type and we know the object's address,
8638 then we can determine its tag, and compute the object's actual
8639 type from there. Note that we have to use the fixed record
8640 type (the parent part of the record may have dynamic fields
8641 and the way the location of _tag is expressed may depend on
8642 them). */
8643
8644 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8645 {
8646 struct value *tag =
8647 value_tag_from_contents_and_address
8648 (fixed_record_type,
8649 valaddr,
8650 address);
8651 struct type *real_type = type_from_tag (tag);
8652 struct value *obj =
8653 value_from_contents_and_address (fixed_record_type,
8654 valaddr,
8655 address);
8656 fixed_record_type = value_type (obj);
8657 if (real_type != NULL)
8658 return to_fixed_record_type
8659 (real_type, NULL,
8660 value_address (ada_tag_value_at_base_address (obj)), NULL);
8661 }
8662
8663 /* Check to see if there is a parallel ___XVZ variable.
8664 If there is, then it provides the actual size of our type. */
8665 else if (ada_type_name (fixed_record_type) != NULL)
8666 {
8667 const char *name = ada_type_name (fixed_record_type);
8668 char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8669 int xvz_found = 0;
8670 LONGEST size;
8671
8672 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
8673 size = get_int_var_value (xvz_name, &xvz_found);
8674 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8675 {
8676 fixed_record_type = copy_type (fixed_record_type);
8677 TYPE_LENGTH (fixed_record_type) = size;
8678
8679 /* The FIXED_RECORD_TYPE may have be a stub. We have
8680 observed this when the debugging info is STABS, and
8681 apparently it is something that is hard to fix.
8682
8683 In practice, we don't need the actual type definition
8684 at all, because the presence of the XVZ variable allows us
8685 to assume that there must be a XVS type as well, which we
8686 should be able to use later, when we need the actual type
8687 definition.
8688
8689 In the meantime, pretend that the "fixed" type we are
8690 returning is NOT a stub, because this can cause trouble
8691 when using this type to create new types targeting it.
8692 Indeed, the associated creation routines often check
8693 whether the target type is a stub and will try to replace
8694 it, thus using a type with the wrong size. This, in turn,
8695 might cause the new type to have the wrong size too.
8696 Consider the case of an array, for instance, where the size
8697 of the array is computed from the number of elements in
8698 our array multiplied by the size of its element. */
8699 TYPE_STUB (fixed_record_type) = 0;
8700 }
8701 }
8702 return fixed_record_type;
8703 }
8704 case TYPE_CODE_ARRAY:
8705 return to_fixed_array_type (type, dval, 1);
8706 case TYPE_CODE_UNION:
8707 if (dval == NULL)
8708 return type;
8709 else
8710 return to_fixed_variant_branch_type (type, valaddr, address, dval);
8711 }
8712 }
8713
8714 /* The same as ada_to_fixed_type_1, except that it preserves the type
8715 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
8716
8717 The typedef layer needs be preserved in order to differentiate between
8718 arrays and array pointers when both types are implemented using the same
8719 fat pointer. In the array pointer case, the pointer is encoded as
8720 a typedef of the pointer type. For instance, considering:
8721
8722 type String_Access is access String;
8723 S1 : String_Access := null;
8724
8725 To the debugger, S1 is defined as a typedef of type String. But
8726 to the user, it is a pointer. So if the user tries to print S1,
8727 we should not dereference the array, but print the array address
8728 instead.
8729
8730 If we didn't preserve the typedef layer, we would lose the fact that
8731 the type is to be presented as a pointer (needs de-reference before
8732 being printed). And we would also use the source-level type name. */
8733
8734 struct type *
8735 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8736 CORE_ADDR address, struct value *dval, int check_tag)
8737
8738 {
8739 struct type *fixed_type =
8740 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8741
8742 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8743 then preserve the typedef layer.
8744
8745 Implementation note: We can only check the main-type portion of
8746 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8747 from TYPE now returns a type that has the same instance flags
8748 as TYPE. For instance, if TYPE is a "typedef const", and its
8749 target type is a "struct", then the typedef elimination will return
8750 a "const" version of the target type. See check_typedef for more
8751 details about how the typedef layer elimination is done.
8752
8753 brobecker/2010-11-19: It seems to me that the only case where it is
8754 useful to preserve the typedef layer is when dealing with fat pointers.
8755 Perhaps, we could add a check for that and preserve the typedef layer
8756 only in that situation. But this seems unecessary so far, probably
8757 because we call check_typedef/ada_check_typedef pretty much everywhere.
8758 */
8759 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8760 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
8761 == TYPE_MAIN_TYPE (fixed_type)))
8762 return type;
8763
8764 return fixed_type;
8765 }
8766
8767 /* A standard (static-sized) type corresponding as well as possible to
8768 TYPE0, but based on no runtime data. */
8769
8770 static struct type *
8771 to_static_fixed_type (struct type *type0)
8772 {
8773 struct type *type;
8774
8775 if (type0 == NULL)
8776 return NULL;
8777
8778 if (TYPE_FIXED_INSTANCE (type0))
8779 return type0;
8780
8781 type0 = ada_check_typedef (type0);
8782
8783 switch (TYPE_CODE (type0))
8784 {
8785 default:
8786 return type0;
8787 case TYPE_CODE_STRUCT:
8788 type = dynamic_template_type (type0);
8789 if (type != NULL)
8790 return template_to_static_fixed_type (type);
8791 else
8792 return template_to_static_fixed_type (type0);
8793 case TYPE_CODE_UNION:
8794 type = ada_find_parallel_type (type0, "___XVU");
8795 if (type != NULL)
8796 return template_to_static_fixed_type (type);
8797 else
8798 return template_to_static_fixed_type (type0);
8799 }
8800 }
8801
8802 /* A static approximation of TYPE with all type wrappers removed. */
8803
8804 static struct type *
8805 static_unwrap_type (struct type *type)
8806 {
8807 if (ada_is_aligner_type (type))
8808 {
8809 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
8810 if (ada_type_name (type1) == NULL)
8811 TYPE_NAME (type1) = ada_type_name (type);
8812
8813 return static_unwrap_type (type1);
8814 }
8815 else
8816 {
8817 struct type *raw_real_type = ada_get_base_type (type);
8818
8819 if (raw_real_type == type)
8820 return type;
8821 else
8822 return to_static_fixed_type (raw_real_type);
8823 }
8824 }
8825
8826 /* In some cases, incomplete and private types require
8827 cross-references that are not resolved as records (for example,
8828 type Foo;
8829 type FooP is access Foo;
8830 V: FooP;
8831 type Foo is array ...;
8832 ). In these cases, since there is no mechanism for producing
8833 cross-references to such types, we instead substitute for FooP a
8834 stub enumeration type that is nowhere resolved, and whose tag is
8835 the name of the actual type. Call these types "non-record stubs". */
8836
8837 /* A type equivalent to TYPE that is not a non-record stub, if one
8838 exists, otherwise TYPE. */
8839
8840 struct type *
8841 ada_check_typedef (struct type *type)
8842 {
8843 if (type == NULL)
8844 return NULL;
8845
8846 /* If our type is a typedef type of a fat pointer, then we're done.
8847 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8848 what allows us to distinguish between fat pointers that represent
8849 array types, and fat pointers that represent array access types
8850 (in both cases, the compiler implements them as fat pointers). */
8851 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8852 && is_thick_pntr (ada_typedef_target_type (type)))
8853 return type;
8854
8855 CHECK_TYPEDEF (type);
8856 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
8857 || !TYPE_STUB (type)
8858 || TYPE_TAG_NAME (type) == NULL)
8859 return type;
8860 else
8861 {
8862 const char *name = TYPE_TAG_NAME (type);
8863 struct type *type1 = ada_find_any_type (name);
8864
8865 if (type1 == NULL)
8866 return type;
8867
8868 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8869 stubs pointing to arrays, as we don't create symbols for array
8870 types, only for the typedef-to-array types). If that's the case,
8871 strip the typedef layer. */
8872 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8873 type1 = ada_check_typedef (type1);
8874
8875 return type1;
8876 }
8877 }
8878
8879 /* A value representing the data at VALADDR/ADDRESS as described by
8880 type TYPE0, but with a standard (static-sized) type that correctly
8881 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8882 type, then return VAL0 [this feature is simply to avoid redundant
8883 creation of struct values]. */
8884
8885 static struct value *
8886 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8887 struct value *val0)
8888 {
8889 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
8890
8891 if (type == type0 && val0 != NULL)
8892 return val0;
8893 else
8894 return value_from_contents_and_address (type, 0, address);
8895 }
8896
8897 /* A value representing VAL, but with a standard (static-sized) type
8898 that correctly describes it. Does not necessarily create a new
8899 value. */
8900
8901 struct value *
8902 ada_to_fixed_value (struct value *val)
8903 {
8904 val = unwrap_value (val);
8905 val = ada_to_fixed_value_create (value_type (val),
8906 value_address (val),
8907 val);
8908 return val;
8909 }
8910 \f
8911
8912 /* Attributes */
8913
8914 /* Table mapping attribute numbers to names.
8915 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
8916
8917 static const char *attribute_names[] = {
8918 "<?>",
8919
8920 "first",
8921 "last",
8922 "length",
8923 "image",
8924 "max",
8925 "min",
8926 "modulus",
8927 "pos",
8928 "size",
8929 "tag",
8930 "val",
8931 0
8932 };
8933
8934 const char *
8935 ada_attribute_name (enum exp_opcode n)
8936 {
8937 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8938 return attribute_names[n - OP_ATR_FIRST + 1];
8939 else
8940 return attribute_names[0];
8941 }
8942
8943 /* Evaluate the 'POS attribute applied to ARG. */
8944
8945 static LONGEST
8946 pos_atr (struct value *arg)
8947 {
8948 struct value *val = coerce_ref (arg);
8949 struct type *type = value_type (val);
8950
8951 if (!discrete_type_p (type))
8952 error (_("'POS only defined on discrete types"));
8953
8954 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8955 {
8956 int i;
8957 LONGEST v = value_as_long (val);
8958
8959 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
8960 {
8961 if (v == TYPE_FIELD_ENUMVAL (type, i))
8962 return i;
8963 }
8964 error (_("enumeration value is invalid: can't find 'POS"));
8965 }
8966 else
8967 return value_as_long (val);
8968 }
8969
8970 static struct value *
8971 value_pos_atr (struct type *type, struct value *arg)
8972 {
8973 return value_from_longest (type, pos_atr (arg));
8974 }
8975
8976 /* Evaluate the TYPE'VAL attribute applied to ARG. */
8977
8978 static struct value *
8979 value_val_atr (struct type *type, struct value *arg)
8980 {
8981 if (!discrete_type_p (type))
8982 error (_("'VAL only defined on discrete types"));
8983 if (!integer_type_p (value_type (arg)))
8984 error (_("'VAL requires integral argument"));
8985
8986 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8987 {
8988 long pos = value_as_long (arg);
8989
8990 if (pos < 0 || pos >= TYPE_NFIELDS (type))
8991 error (_("argument to 'VAL out of range"));
8992 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
8993 }
8994 else
8995 return value_from_longest (type, value_as_long (arg));
8996 }
8997 \f
8998
8999 /* Evaluation */
9000
9001 /* True if TYPE appears to be an Ada character type.
9002 [At the moment, this is true only for Character and Wide_Character;
9003 It is a heuristic test that could stand improvement]. */
9004
9005 int
9006 ada_is_character_type (struct type *type)
9007 {
9008 const char *name;
9009
9010 /* If the type code says it's a character, then assume it really is,
9011 and don't check any further. */
9012 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
9013 return 1;
9014
9015 /* Otherwise, assume it's a character type iff it is a discrete type
9016 with a known character type name. */
9017 name = ada_type_name (type);
9018 return (name != NULL
9019 && (TYPE_CODE (type) == TYPE_CODE_INT
9020 || TYPE_CODE (type) == TYPE_CODE_RANGE)
9021 && (strcmp (name, "character") == 0
9022 || strcmp (name, "wide_character") == 0
9023 || strcmp (name, "wide_wide_character") == 0
9024 || strcmp (name, "unsigned char") == 0));
9025 }
9026
9027 /* True if TYPE appears to be an Ada string type. */
9028
9029 int
9030 ada_is_string_type (struct type *type)
9031 {
9032 type = ada_check_typedef (type);
9033 if (type != NULL
9034 && TYPE_CODE (type) != TYPE_CODE_PTR
9035 && (ada_is_simple_array_type (type)
9036 || ada_is_array_descriptor_type (type))
9037 && ada_array_arity (type) == 1)
9038 {
9039 struct type *elttype = ada_array_element_type (type, 1);
9040
9041 return ada_is_character_type (elttype);
9042 }
9043 else
9044 return 0;
9045 }
9046
9047 /* The compiler sometimes provides a parallel XVS type for a given
9048 PAD type. Normally, it is safe to follow the PAD type directly,
9049 but older versions of the compiler have a bug that causes the offset
9050 of its "F" field to be wrong. Following that field in that case
9051 would lead to incorrect results, but this can be worked around
9052 by ignoring the PAD type and using the associated XVS type instead.
9053
9054 Set to True if the debugger should trust the contents of PAD types.
9055 Otherwise, ignore the PAD type if there is a parallel XVS type. */
9056 static int trust_pad_over_xvs = 1;
9057
9058 /* True if TYPE is a struct type introduced by the compiler to force the
9059 alignment of a value. Such types have a single field with a
9060 distinctive name. */
9061
9062 int
9063 ada_is_aligner_type (struct type *type)
9064 {
9065 type = ada_check_typedef (type);
9066
9067 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
9068 return 0;
9069
9070 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
9071 && TYPE_NFIELDS (type) == 1
9072 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
9073 }
9074
9075 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
9076 the parallel type. */
9077
9078 struct type *
9079 ada_get_base_type (struct type *raw_type)
9080 {
9081 struct type *real_type_namer;
9082 struct type *raw_real_type;
9083
9084 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9085 return raw_type;
9086
9087 if (ada_is_aligner_type (raw_type))
9088 /* The encoding specifies that we should always use the aligner type.
9089 So, even if this aligner type has an associated XVS type, we should
9090 simply ignore it.
9091
9092 According to the compiler gurus, an XVS type parallel to an aligner
9093 type may exist because of a stabs limitation. In stabs, aligner
9094 types are empty because the field has a variable-sized type, and
9095 thus cannot actually be used as an aligner type. As a result,
9096 we need the associated parallel XVS type to decode the type.
9097 Since the policy in the compiler is to not change the internal
9098 representation based on the debugging info format, we sometimes
9099 end up having a redundant XVS type parallel to the aligner type. */
9100 return raw_type;
9101
9102 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
9103 if (real_type_namer == NULL
9104 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9105 || TYPE_NFIELDS (real_type_namer) != 1)
9106 return raw_type;
9107
9108 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9109 {
9110 /* This is an older encoding form where the base type needs to be
9111 looked up by name. We prefer the newer enconding because it is
9112 more efficient. */
9113 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9114 if (raw_real_type == NULL)
9115 return raw_type;
9116 else
9117 return raw_real_type;
9118 }
9119
9120 /* The field in our XVS type is a reference to the base type. */
9121 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
9122 }
9123
9124 /* The type of value designated by TYPE, with all aligners removed. */
9125
9126 struct type *
9127 ada_aligned_type (struct type *type)
9128 {
9129 if (ada_is_aligner_type (type))
9130 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9131 else
9132 return ada_get_base_type (type);
9133 }
9134
9135
9136 /* The address of the aligned value in an object at address VALADDR
9137 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
9138
9139 const gdb_byte *
9140 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
9141 {
9142 if (ada_is_aligner_type (type))
9143 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
9144 valaddr +
9145 TYPE_FIELD_BITPOS (type,
9146 0) / TARGET_CHAR_BIT);
9147 else
9148 return valaddr;
9149 }
9150
9151
9152
9153 /* The printed representation of an enumeration literal with encoded
9154 name NAME. The value is good to the next call of ada_enum_name. */
9155 const char *
9156 ada_enum_name (const char *name)
9157 {
9158 static char *result;
9159 static size_t result_len = 0;
9160 char *tmp;
9161
9162 /* First, unqualify the enumeration name:
9163 1. Search for the last '.' character. If we find one, then skip
9164 all the preceding characters, the unqualified name starts
9165 right after that dot.
9166 2. Otherwise, we may be debugging on a target where the compiler
9167 translates dots into "__". Search forward for double underscores,
9168 but stop searching when we hit an overloading suffix, which is
9169 of the form "__" followed by digits. */
9170
9171 tmp = strrchr (name, '.');
9172 if (tmp != NULL)
9173 name = tmp + 1;
9174 else
9175 {
9176 while ((tmp = strstr (name, "__")) != NULL)
9177 {
9178 if (isdigit (tmp[2]))
9179 break;
9180 else
9181 name = tmp + 2;
9182 }
9183 }
9184
9185 if (name[0] == 'Q')
9186 {
9187 int v;
9188
9189 if (name[1] == 'U' || name[1] == 'W')
9190 {
9191 if (sscanf (name + 2, "%x", &v) != 1)
9192 return name;
9193 }
9194 else
9195 return name;
9196
9197 GROW_VECT (result, result_len, 16);
9198 if (isascii (v) && isprint (v))
9199 xsnprintf (result, result_len, "'%c'", v);
9200 else if (name[1] == 'U')
9201 xsnprintf (result, result_len, "[\"%02x\"]", v);
9202 else
9203 xsnprintf (result, result_len, "[\"%04x\"]", v);
9204
9205 return result;
9206 }
9207 else
9208 {
9209 tmp = strstr (name, "__");
9210 if (tmp == NULL)
9211 tmp = strstr (name, "$");
9212 if (tmp != NULL)
9213 {
9214 GROW_VECT (result, result_len, tmp - name + 1);
9215 strncpy (result, name, tmp - name);
9216 result[tmp - name] = '\0';
9217 return result;
9218 }
9219
9220 return name;
9221 }
9222 }
9223
9224 /* Evaluate the subexpression of EXP starting at *POS as for
9225 evaluate_type, updating *POS to point just past the evaluated
9226 expression. */
9227
9228 static struct value *
9229 evaluate_subexp_type (struct expression *exp, int *pos)
9230 {
9231 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9232 }
9233
9234 /* If VAL is wrapped in an aligner or subtype wrapper, return the
9235 value it wraps. */
9236
9237 static struct value *
9238 unwrap_value (struct value *val)
9239 {
9240 struct type *type = ada_check_typedef (value_type (val));
9241
9242 if (ada_is_aligner_type (type))
9243 {
9244 struct value *v = ada_value_struct_elt (val, "F", 0);
9245 struct type *val_type = ada_check_typedef (value_type (v));
9246
9247 if (ada_type_name (val_type) == NULL)
9248 TYPE_NAME (val_type) = ada_type_name (type);
9249
9250 return unwrap_value (v);
9251 }
9252 else
9253 {
9254 struct type *raw_real_type =
9255 ada_check_typedef (ada_get_base_type (type));
9256
9257 /* If there is no parallel XVS or XVE type, then the value is
9258 already unwrapped. Return it without further modification. */
9259 if ((type == raw_real_type)
9260 && ada_find_parallel_type (type, "___XVE") == NULL)
9261 return val;
9262
9263 return
9264 coerce_unspec_val_to_type
9265 (val, ada_to_fixed_type (raw_real_type, 0,
9266 value_address (val),
9267 NULL, 1));
9268 }
9269 }
9270
9271 static struct value *
9272 cast_to_fixed (struct type *type, struct value *arg)
9273 {
9274 LONGEST val;
9275
9276 if (type == value_type (arg))
9277 return arg;
9278 else if (ada_is_fixed_point_type (value_type (arg)))
9279 val = ada_float_to_fixed (type,
9280 ada_fixed_to_float (value_type (arg),
9281 value_as_long (arg)));
9282 else
9283 {
9284 DOUBLEST argd = value_as_double (arg);
9285
9286 val = ada_float_to_fixed (type, argd);
9287 }
9288
9289 return value_from_longest (type, val);
9290 }
9291
9292 static struct value *
9293 cast_from_fixed (struct type *type, struct value *arg)
9294 {
9295 DOUBLEST val = ada_fixed_to_float (value_type (arg),
9296 value_as_long (arg));
9297
9298 return value_from_double (type, val);
9299 }
9300
9301 /* Given two array types T1 and T2, return nonzero iff both arrays
9302 contain the same number of elements. */
9303
9304 static int
9305 ada_same_array_size_p (struct type *t1, struct type *t2)
9306 {
9307 LONGEST lo1, hi1, lo2, hi2;
9308
9309 /* Get the array bounds in order to verify that the size of
9310 the two arrays match. */
9311 if (!get_array_bounds (t1, &lo1, &hi1)
9312 || !get_array_bounds (t2, &lo2, &hi2))
9313 error (_("unable to determine array bounds"));
9314
9315 /* To make things easier for size comparison, normalize a bit
9316 the case of empty arrays by making sure that the difference
9317 between upper bound and lower bound is always -1. */
9318 if (lo1 > hi1)
9319 hi1 = lo1 - 1;
9320 if (lo2 > hi2)
9321 hi2 = lo2 - 1;
9322
9323 return (hi1 - lo1 == hi2 - lo2);
9324 }
9325
9326 /* Assuming that VAL is an array of integrals, and TYPE represents
9327 an array with the same number of elements, but with wider integral
9328 elements, return an array "casted" to TYPE. In practice, this
9329 means that the returned array is built by casting each element
9330 of the original array into TYPE's (wider) element type. */
9331
9332 static struct value *
9333 ada_promote_array_of_integrals (struct type *type, struct value *val)
9334 {
9335 struct type *elt_type = TYPE_TARGET_TYPE (type);
9336 LONGEST lo, hi;
9337 struct value *res;
9338 LONGEST i;
9339
9340 /* Verify that both val and type are arrays of scalars, and
9341 that the size of val's elements is smaller than the size
9342 of type's element. */
9343 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9344 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9345 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9346 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9347 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9348 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9349
9350 if (!get_array_bounds (type, &lo, &hi))
9351 error (_("unable to determine array bounds"));
9352
9353 res = allocate_value (type);
9354
9355 /* Promote each array element. */
9356 for (i = 0; i < hi - lo + 1; i++)
9357 {
9358 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9359
9360 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9361 value_contents_all (elt), TYPE_LENGTH (elt_type));
9362 }
9363
9364 return res;
9365 }
9366
9367 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9368 return the converted value. */
9369
9370 static struct value *
9371 coerce_for_assign (struct type *type, struct value *val)
9372 {
9373 struct type *type2 = value_type (val);
9374
9375 if (type == type2)
9376 return val;
9377
9378 type2 = ada_check_typedef (type2);
9379 type = ada_check_typedef (type);
9380
9381 if (TYPE_CODE (type2) == TYPE_CODE_PTR
9382 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9383 {
9384 val = ada_value_ind (val);
9385 type2 = value_type (val);
9386 }
9387
9388 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
9389 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9390 {
9391 if (!ada_same_array_size_p (type, type2))
9392 error (_("cannot assign arrays of different length"));
9393
9394 if (is_integral_type (TYPE_TARGET_TYPE (type))
9395 && is_integral_type (TYPE_TARGET_TYPE (type2))
9396 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9397 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9398 {
9399 /* Allow implicit promotion of the array elements to
9400 a wider type. */
9401 return ada_promote_array_of_integrals (type, val);
9402 }
9403
9404 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9405 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9406 error (_("Incompatible types in assignment"));
9407 deprecated_set_value_type (val, type);
9408 }
9409 return val;
9410 }
9411
9412 static struct value *
9413 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9414 {
9415 struct value *val;
9416 struct type *type1, *type2;
9417 LONGEST v, v1, v2;
9418
9419 arg1 = coerce_ref (arg1);
9420 arg2 = coerce_ref (arg2);
9421 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9422 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
9423
9424 if (TYPE_CODE (type1) != TYPE_CODE_INT
9425 || TYPE_CODE (type2) != TYPE_CODE_INT)
9426 return value_binop (arg1, arg2, op);
9427
9428 switch (op)
9429 {
9430 case BINOP_MOD:
9431 case BINOP_DIV:
9432 case BINOP_REM:
9433 break;
9434 default:
9435 return value_binop (arg1, arg2, op);
9436 }
9437
9438 v2 = value_as_long (arg2);
9439 if (v2 == 0)
9440 error (_("second operand of %s must not be zero."), op_string (op));
9441
9442 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9443 return value_binop (arg1, arg2, op);
9444
9445 v1 = value_as_long (arg1);
9446 switch (op)
9447 {
9448 case BINOP_DIV:
9449 v = v1 / v2;
9450 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9451 v += v > 0 ? -1 : 1;
9452 break;
9453 case BINOP_REM:
9454 v = v1 % v2;
9455 if (v * v1 < 0)
9456 v -= v2;
9457 break;
9458 default:
9459 /* Should not reach this point. */
9460 v = 0;
9461 }
9462
9463 val = allocate_value (type1);
9464 store_unsigned_integer (value_contents_raw (val),
9465 TYPE_LENGTH (value_type (val)),
9466 gdbarch_byte_order (get_type_arch (type1)), v);
9467 return val;
9468 }
9469
9470 static int
9471 ada_value_equal (struct value *arg1, struct value *arg2)
9472 {
9473 if (ada_is_direct_array_type (value_type (arg1))
9474 || ada_is_direct_array_type (value_type (arg2)))
9475 {
9476 /* Automatically dereference any array reference before
9477 we attempt to perform the comparison. */
9478 arg1 = ada_coerce_ref (arg1);
9479 arg2 = ada_coerce_ref (arg2);
9480
9481 arg1 = ada_coerce_to_simple_array (arg1);
9482 arg2 = ada_coerce_to_simple_array (arg2);
9483 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9484 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
9485 error (_("Attempt to compare array with non-array"));
9486 /* FIXME: The following works only for types whose
9487 representations use all bits (no padding or undefined bits)
9488 and do not have user-defined equality. */
9489 return
9490 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
9491 && memcmp (value_contents (arg1), value_contents (arg2),
9492 TYPE_LENGTH (value_type (arg1))) == 0;
9493 }
9494 return value_equal (arg1, arg2);
9495 }
9496
9497 /* Total number of component associations in the aggregate starting at
9498 index PC in EXP. Assumes that index PC is the start of an
9499 OP_AGGREGATE. */
9500
9501 static int
9502 num_component_specs (struct expression *exp, int pc)
9503 {
9504 int n, m, i;
9505
9506 m = exp->elts[pc + 1].longconst;
9507 pc += 3;
9508 n = 0;
9509 for (i = 0; i < m; i += 1)
9510 {
9511 switch (exp->elts[pc].opcode)
9512 {
9513 default:
9514 n += 1;
9515 break;
9516 case OP_CHOICES:
9517 n += exp->elts[pc + 1].longconst;
9518 break;
9519 }
9520 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9521 }
9522 return n;
9523 }
9524
9525 /* Assign the result of evaluating EXP starting at *POS to the INDEXth
9526 component of LHS (a simple array or a record), updating *POS past
9527 the expression, assuming that LHS is contained in CONTAINER. Does
9528 not modify the inferior's memory, nor does it modify LHS (unless
9529 LHS == CONTAINER). */
9530
9531 static void
9532 assign_component (struct value *container, struct value *lhs, LONGEST index,
9533 struct expression *exp, int *pos)
9534 {
9535 struct value *mark = value_mark ();
9536 struct value *elt;
9537
9538 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9539 {
9540 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9541 struct value *index_val = value_from_longest (index_type, index);
9542
9543 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9544 }
9545 else
9546 {
9547 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
9548 elt = ada_to_fixed_value (elt);
9549 }
9550
9551 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9552 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9553 else
9554 value_assign_to_component (container, elt,
9555 ada_evaluate_subexp (NULL, exp, pos,
9556 EVAL_NORMAL));
9557
9558 value_free_to_mark (mark);
9559 }
9560
9561 /* Assuming that LHS represents an lvalue having a record or array
9562 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9563 of that aggregate's value to LHS, advancing *POS past the
9564 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9565 lvalue containing LHS (possibly LHS itself). Does not modify
9566 the inferior's memory, nor does it modify the contents of
9567 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
9568
9569 static struct value *
9570 assign_aggregate (struct value *container,
9571 struct value *lhs, struct expression *exp,
9572 int *pos, enum noside noside)
9573 {
9574 struct type *lhs_type;
9575 int n = exp->elts[*pos+1].longconst;
9576 LONGEST low_index, high_index;
9577 int num_specs;
9578 LONGEST *indices;
9579 int max_indices, num_indices;
9580 int i;
9581
9582 *pos += 3;
9583 if (noside != EVAL_NORMAL)
9584 {
9585 for (i = 0; i < n; i += 1)
9586 ada_evaluate_subexp (NULL, exp, pos, noside);
9587 return container;
9588 }
9589
9590 container = ada_coerce_ref (container);
9591 if (ada_is_direct_array_type (value_type (container)))
9592 container = ada_coerce_to_simple_array (container);
9593 lhs = ada_coerce_ref (lhs);
9594 if (!deprecated_value_modifiable (lhs))
9595 error (_("Left operand of assignment is not a modifiable lvalue."));
9596
9597 lhs_type = value_type (lhs);
9598 if (ada_is_direct_array_type (lhs_type))
9599 {
9600 lhs = ada_coerce_to_simple_array (lhs);
9601 lhs_type = value_type (lhs);
9602 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9603 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
9604 }
9605 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9606 {
9607 low_index = 0;
9608 high_index = num_visible_fields (lhs_type) - 1;
9609 }
9610 else
9611 error (_("Left-hand side must be array or record."));
9612
9613 num_specs = num_component_specs (exp, *pos - 3);
9614 max_indices = 4 * num_specs + 4;
9615 indices = alloca (max_indices * sizeof (indices[0]));
9616 indices[0] = indices[1] = low_index - 1;
9617 indices[2] = indices[3] = high_index + 1;
9618 num_indices = 4;
9619
9620 for (i = 0; i < n; i += 1)
9621 {
9622 switch (exp->elts[*pos].opcode)
9623 {
9624 case OP_CHOICES:
9625 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9626 &num_indices, max_indices,
9627 low_index, high_index);
9628 break;
9629 case OP_POSITIONAL:
9630 aggregate_assign_positional (container, lhs, exp, pos, indices,
9631 &num_indices, max_indices,
9632 low_index, high_index);
9633 break;
9634 case OP_OTHERS:
9635 if (i != n-1)
9636 error (_("Misplaced 'others' clause"));
9637 aggregate_assign_others (container, lhs, exp, pos, indices,
9638 num_indices, low_index, high_index);
9639 break;
9640 default:
9641 error (_("Internal error: bad aggregate clause"));
9642 }
9643 }
9644
9645 return container;
9646 }
9647
9648 /* Assign into the component of LHS indexed by the OP_POSITIONAL
9649 construct at *POS, updating *POS past the construct, given that
9650 the positions are relative to lower bound LOW, where HIGH is the
9651 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
9652 updating *NUM_INDICES as needed. CONTAINER is as for
9653 assign_aggregate. */
9654 static void
9655 aggregate_assign_positional (struct value *container,
9656 struct value *lhs, struct expression *exp,
9657 int *pos, LONGEST *indices, int *num_indices,
9658 int max_indices, LONGEST low, LONGEST high)
9659 {
9660 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9661
9662 if (ind - 1 == high)
9663 warning (_("Extra components in aggregate ignored."));
9664 if (ind <= high)
9665 {
9666 add_component_interval (ind, ind, indices, num_indices, max_indices);
9667 *pos += 3;
9668 assign_component (container, lhs, ind, exp, pos);
9669 }
9670 else
9671 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9672 }
9673
9674 /* Assign into the components of LHS indexed by the OP_CHOICES
9675 construct at *POS, updating *POS past the construct, given that
9676 the allowable indices are LOW..HIGH. Record the indices assigned
9677 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
9678 needed. CONTAINER is as for assign_aggregate. */
9679 static void
9680 aggregate_assign_from_choices (struct value *container,
9681 struct value *lhs, struct expression *exp,
9682 int *pos, LONGEST *indices, int *num_indices,
9683 int max_indices, LONGEST low, LONGEST high)
9684 {
9685 int j;
9686 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9687 int choice_pos, expr_pc;
9688 int is_array = ada_is_direct_array_type (value_type (lhs));
9689
9690 choice_pos = *pos += 3;
9691
9692 for (j = 0; j < n_choices; j += 1)
9693 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9694 expr_pc = *pos;
9695 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9696
9697 for (j = 0; j < n_choices; j += 1)
9698 {
9699 LONGEST lower, upper;
9700 enum exp_opcode op = exp->elts[choice_pos].opcode;
9701
9702 if (op == OP_DISCRETE_RANGE)
9703 {
9704 choice_pos += 1;
9705 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9706 EVAL_NORMAL));
9707 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9708 EVAL_NORMAL));
9709 }
9710 else if (is_array)
9711 {
9712 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9713 EVAL_NORMAL));
9714 upper = lower;
9715 }
9716 else
9717 {
9718 int ind;
9719 const char *name;
9720
9721 switch (op)
9722 {
9723 case OP_NAME:
9724 name = &exp->elts[choice_pos + 2].string;
9725 break;
9726 case OP_VAR_VALUE:
9727 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9728 break;
9729 default:
9730 error (_("Invalid record component association."));
9731 }
9732 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9733 ind = 0;
9734 if (! find_struct_field (name, value_type (lhs), 0,
9735 NULL, NULL, NULL, NULL, &ind))
9736 error (_("Unknown component name: %s."), name);
9737 lower = upper = ind;
9738 }
9739
9740 if (lower <= upper && (lower < low || upper > high))
9741 error (_("Index in component association out of bounds."));
9742
9743 add_component_interval (lower, upper, indices, num_indices,
9744 max_indices);
9745 while (lower <= upper)
9746 {
9747 int pos1;
9748
9749 pos1 = expr_pc;
9750 assign_component (container, lhs, lower, exp, &pos1);
9751 lower += 1;
9752 }
9753 }
9754 }
9755
9756 /* Assign the value of the expression in the OP_OTHERS construct in
9757 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9758 have not been previously assigned. The index intervals already assigned
9759 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
9760 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
9761 static void
9762 aggregate_assign_others (struct value *container,
9763 struct value *lhs, struct expression *exp,
9764 int *pos, LONGEST *indices, int num_indices,
9765 LONGEST low, LONGEST high)
9766 {
9767 int i;
9768 int expr_pc = *pos + 1;
9769
9770 for (i = 0; i < num_indices - 2; i += 2)
9771 {
9772 LONGEST ind;
9773
9774 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9775 {
9776 int localpos;
9777
9778 localpos = expr_pc;
9779 assign_component (container, lhs, ind, exp, &localpos);
9780 }
9781 }
9782 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9783 }
9784
9785 /* Add the interval [LOW .. HIGH] to the sorted set of intervals
9786 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9787 modifying *SIZE as needed. It is an error if *SIZE exceeds
9788 MAX_SIZE. The resulting intervals do not overlap. */
9789 static void
9790 add_component_interval (LONGEST low, LONGEST high,
9791 LONGEST* indices, int *size, int max_size)
9792 {
9793 int i, j;
9794
9795 for (i = 0; i < *size; i += 2) {
9796 if (high >= indices[i] && low <= indices[i + 1])
9797 {
9798 int kh;
9799
9800 for (kh = i + 2; kh < *size; kh += 2)
9801 if (high < indices[kh])
9802 break;
9803 if (low < indices[i])
9804 indices[i] = low;
9805 indices[i + 1] = indices[kh - 1];
9806 if (high > indices[i + 1])
9807 indices[i + 1] = high;
9808 memcpy (indices + i + 2, indices + kh, *size - kh);
9809 *size -= kh - i - 2;
9810 return;
9811 }
9812 else if (high < indices[i])
9813 break;
9814 }
9815
9816 if (*size == max_size)
9817 error (_("Internal error: miscounted aggregate components."));
9818 *size += 2;
9819 for (j = *size-1; j >= i+2; j -= 1)
9820 indices[j] = indices[j - 2];
9821 indices[i] = low;
9822 indices[i + 1] = high;
9823 }
9824
9825 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9826 is different. */
9827
9828 static struct value *
9829 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9830 {
9831 if (type == ada_check_typedef (value_type (arg2)))
9832 return arg2;
9833
9834 if (ada_is_fixed_point_type (type))
9835 return (cast_to_fixed (type, arg2));
9836
9837 if (ada_is_fixed_point_type (value_type (arg2)))
9838 return cast_from_fixed (type, arg2);
9839
9840 return value_cast (type, arg2);
9841 }
9842
9843 /* Evaluating Ada expressions, and printing their result.
9844 ------------------------------------------------------
9845
9846 1. Introduction:
9847 ----------------
9848
9849 We usually evaluate an Ada expression in order to print its value.
9850 We also evaluate an expression in order to print its type, which
9851 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9852 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9853 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9854 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9855 similar.
9856
9857 Evaluating expressions is a little more complicated for Ada entities
9858 than it is for entities in languages such as C. The main reason for
9859 this is that Ada provides types whose definition might be dynamic.
9860 One example of such types is variant records. Or another example
9861 would be an array whose bounds can only be known at run time.
9862
9863 The following description is a general guide as to what should be
9864 done (and what should NOT be done) in order to evaluate an expression
9865 involving such types, and when. This does not cover how the semantic
9866 information is encoded by GNAT as this is covered separatly. For the
9867 document used as the reference for the GNAT encoding, see exp_dbug.ads
9868 in the GNAT sources.
9869
9870 Ideally, we should embed each part of this description next to its
9871 associated code. Unfortunately, the amount of code is so vast right
9872 now that it's hard to see whether the code handling a particular
9873 situation might be duplicated or not. One day, when the code is
9874 cleaned up, this guide might become redundant with the comments
9875 inserted in the code, and we might want to remove it.
9876
9877 2. ``Fixing'' an Entity, the Simple Case:
9878 -----------------------------------------
9879
9880 When evaluating Ada expressions, the tricky issue is that they may
9881 reference entities whose type contents and size are not statically
9882 known. Consider for instance a variant record:
9883
9884 type Rec (Empty : Boolean := True) is record
9885 case Empty is
9886 when True => null;
9887 when False => Value : Integer;
9888 end case;
9889 end record;
9890 Yes : Rec := (Empty => False, Value => 1);
9891 No : Rec := (empty => True);
9892
9893 The size and contents of that record depends on the value of the
9894 descriminant (Rec.Empty). At this point, neither the debugging
9895 information nor the associated type structure in GDB are able to
9896 express such dynamic types. So what the debugger does is to create
9897 "fixed" versions of the type that applies to the specific object.
9898 We also informally refer to this opperation as "fixing" an object,
9899 which means creating its associated fixed type.
9900
9901 Example: when printing the value of variable "Yes" above, its fixed
9902 type would look like this:
9903
9904 type Rec is record
9905 Empty : Boolean;
9906 Value : Integer;
9907 end record;
9908
9909 On the other hand, if we printed the value of "No", its fixed type
9910 would become:
9911
9912 type Rec is record
9913 Empty : Boolean;
9914 end record;
9915
9916 Things become a little more complicated when trying to fix an entity
9917 with a dynamic type that directly contains another dynamic type,
9918 such as an array of variant records, for instance. There are
9919 two possible cases: Arrays, and records.
9920
9921 3. ``Fixing'' Arrays:
9922 ---------------------
9923
9924 The type structure in GDB describes an array in terms of its bounds,
9925 and the type of its elements. By design, all elements in the array
9926 have the same type and we cannot represent an array of variant elements
9927 using the current type structure in GDB. When fixing an array,
9928 we cannot fix the array element, as we would potentially need one
9929 fixed type per element of the array. As a result, the best we can do
9930 when fixing an array is to produce an array whose bounds and size
9931 are correct (allowing us to read it from memory), but without having
9932 touched its element type. Fixing each element will be done later,
9933 when (if) necessary.
9934
9935 Arrays are a little simpler to handle than records, because the same
9936 amount of memory is allocated for each element of the array, even if
9937 the amount of space actually used by each element differs from element
9938 to element. Consider for instance the following array of type Rec:
9939
9940 type Rec_Array is array (1 .. 2) of Rec;
9941
9942 The actual amount of memory occupied by each element might be different
9943 from element to element, depending on the value of their discriminant.
9944 But the amount of space reserved for each element in the array remains
9945 fixed regardless. So we simply need to compute that size using
9946 the debugging information available, from which we can then determine
9947 the array size (we multiply the number of elements of the array by
9948 the size of each element).
9949
9950 The simplest case is when we have an array of a constrained element
9951 type. For instance, consider the following type declarations:
9952
9953 type Bounded_String (Max_Size : Integer) is
9954 Length : Integer;
9955 Buffer : String (1 .. Max_Size);
9956 end record;
9957 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9958
9959 In this case, the compiler describes the array as an array of
9960 variable-size elements (identified by its XVS suffix) for which
9961 the size can be read in the parallel XVZ variable.
9962
9963 In the case of an array of an unconstrained element type, the compiler
9964 wraps the array element inside a private PAD type. This type should not
9965 be shown to the user, and must be "unwrap"'ed before printing. Note
9966 that we also use the adjective "aligner" in our code to designate
9967 these wrapper types.
9968
9969 In some cases, the size allocated for each element is statically
9970 known. In that case, the PAD type already has the correct size,
9971 and the array element should remain unfixed.
9972
9973 But there are cases when this size is not statically known.
9974 For instance, assuming that "Five" is an integer variable:
9975
9976 type Dynamic is array (1 .. Five) of Integer;
9977 type Wrapper (Has_Length : Boolean := False) is record
9978 Data : Dynamic;
9979 case Has_Length is
9980 when True => Length : Integer;
9981 when False => null;
9982 end case;
9983 end record;
9984 type Wrapper_Array is array (1 .. 2) of Wrapper;
9985
9986 Hello : Wrapper_Array := (others => (Has_Length => True,
9987 Data => (others => 17),
9988 Length => 1));
9989
9990
9991 The debugging info would describe variable Hello as being an
9992 array of a PAD type. The size of that PAD type is not statically
9993 known, but can be determined using a parallel XVZ variable.
9994 In that case, a copy of the PAD type with the correct size should
9995 be used for the fixed array.
9996
9997 3. ``Fixing'' record type objects:
9998 ----------------------------------
9999
10000 Things are slightly different from arrays in the case of dynamic
10001 record types. In this case, in order to compute the associated
10002 fixed type, we need to determine the size and offset of each of
10003 its components. This, in turn, requires us to compute the fixed
10004 type of each of these components.
10005
10006 Consider for instance the example:
10007
10008 type Bounded_String (Max_Size : Natural) is record
10009 Str : String (1 .. Max_Size);
10010 Length : Natural;
10011 end record;
10012 My_String : Bounded_String (Max_Size => 10);
10013
10014 In that case, the position of field "Length" depends on the size
10015 of field Str, which itself depends on the value of the Max_Size
10016 discriminant. In order to fix the type of variable My_String,
10017 we need to fix the type of field Str. Therefore, fixing a variant
10018 record requires us to fix each of its components.
10019
10020 However, if a component does not have a dynamic size, the component
10021 should not be fixed. In particular, fields that use a PAD type
10022 should not fixed. Here is an example where this might happen
10023 (assuming type Rec above):
10024
10025 type Container (Big : Boolean) is record
10026 First : Rec;
10027 After : Integer;
10028 case Big is
10029 when True => Another : Integer;
10030 when False => null;
10031 end case;
10032 end record;
10033 My_Container : Container := (Big => False,
10034 First => (Empty => True),
10035 After => 42);
10036
10037 In that example, the compiler creates a PAD type for component First,
10038 whose size is constant, and then positions the component After just
10039 right after it. The offset of component After is therefore constant
10040 in this case.
10041
10042 The debugger computes the position of each field based on an algorithm
10043 that uses, among other things, the actual position and size of the field
10044 preceding it. Let's now imagine that the user is trying to print
10045 the value of My_Container. If the type fixing was recursive, we would
10046 end up computing the offset of field After based on the size of the
10047 fixed version of field First. And since in our example First has
10048 only one actual field, the size of the fixed type is actually smaller
10049 than the amount of space allocated to that field, and thus we would
10050 compute the wrong offset of field After.
10051
10052 To make things more complicated, we need to watch out for dynamic
10053 components of variant records (identified by the ___XVL suffix in
10054 the component name). Even if the target type is a PAD type, the size
10055 of that type might not be statically known. So the PAD type needs
10056 to be unwrapped and the resulting type needs to be fixed. Otherwise,
10057 we might end up with the wrong size for our component. This can be
10058 observed with the following type declarations:
10059
10060 type Octal is new Integer range 0 .. 7;
10061 type Octal_Array is array (Positive range <>) of Octal;
10062 pragma Pack (Octal_Array);
10063
10064 type Octal_Buffer (Size : Positive) is record
10065 Buffer : Octal_Array (1 .. Size);
10066 Length : Integer;
10067 end record;
10068
10069 In that case, Buffer is a PAD type whose size is unset and needs
10070 to be computed by fixing the unwrapped type.
10071
10072 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10073 ----------------------------------------------------------
10074
10075 Lastly, when should the sub-elements of an entity that remained unfixed
10076 thus far, be actually fixed?
10077
10078 The answer is: Only when referencing that element. For instance
10079 when selecting one component of a record, this specific component
10080 should be fixed at that point in time. Or when printing the value
10081 of a record, each component should be fixed before its value gets
10082 printed. Similarly for arrays, the element of the array should be
10083 fixed when printing each element of the array, or when extracting
10084 one element out of that array. On the other hand, fixing should
10085 not be performed on the elements when taking a slice of an array!
10086
10087 Note that one of the side-effects of miscomputing the offset and
10088 size of each field is that we end up also miscomputing the size
10089 of the containing type. This can have adverse results when computing
10090 the value of an entity. GDB fetches the value of an entity based
10091 on the size of its type, and thus a wrong size causes GDB to fetch
10092 the wrong amount of memory. In the case where the computed size is
10093 too small, GDB fetches too little data to print the value of our
10094 entiry. Results in this case as unpredicatble, as we usually read
10095 past the buffer containing the data =:-o. */
10096
10097 /* Implement the evaluate_exp routine in the exp_descriptor structure
10098 for the Ada language. */
10099
10100 static struct value *
10101 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
10102 int *pos, enum noside noside)
10103 {
10104 enum exp_opcode op;
10105 int tem;
10106 int pc;
10107 int preeval_pos;
10108 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10109 struct type *type;
10110 int nargs, oplen;
10111 struct value **argvec;
10112
10113 pc = *pos;
10114 *pos += 1;
10115 op = exp->elts[pc].opcode;
10116
10117 switch (op)
10118 {
10119 default:
10120 *pos -= 1;
10121 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10122
10123 if (noside == EVAL_NORMAL)
10124 arg1 = unwrap_value (arg1);
10125
10126 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10127 then we need to perform the conversion manually, because
10128 evaluate_subexp_standard doesn't do it. This conversion is
10129 necessary in Ada because the different kinds of float/fixed
10130 types in Ada have different representations.
10131
10132 Similarly, we need to perform the conversion from OP_LONG
10133 ourselves. */
10134 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10135 arg1 = ada_value_cast (expect_type, arg1, noside);
10136
10137 return arg1;
10138
10139 case OP_STRING:
10140 {
10141 struct value *result;
10142
10143 *pos -= 1;
10144 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10145 /* The result type will have code OP_STRING, bashed there from
10146 OP_ARRAY. Bash it back. */
10147 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10148 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
10149 return result;
10150 }
10151
10152 case UNOP_CAST:
10153 (*pos) += 2;
10154 type = exp->elts[pc + 1].type;
10155 arg1 = evaluate_subexp (type, exp, pos, noside);
10156 if (noside == EVAL_SKIP)
10157 goto nosideret;
10158 arg1 = ada_value_cast (type, arg1, noside);
10159 return arg1;
10160
10161 case UNOP_QUAL:
10162 (*pos) += 2;
10163 type = exp->elts[pc + 1].type;
10164 return ada_evaluate_subexp (type, exp, pos, noside);
10165
10166 case BINOP_ASSIGN:
10167 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10168 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10169 {
10170 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10171 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10172 return arg1;
10173 return ada_value_assign (arg1, arg1);
10174 }
10175 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10176 except if the lhs of our assignment is a convenience variable.
10177 In the case of assigning to a convenience variable, the lhs
10178 should be exactly the result of the evaluation of the rhs. */
10179 type = value_type (arg1);
10180 if (VALUE_LVAL (arg1) == lval_internalvar)
10181 type = NULL;
10182 arg2 = evaluate_subexp (type, exp, pos, noside);
10183 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10184 return arg1;
10185 if (ada_is_fixed_point_type (value_type (arg1)))
10186 arg2 = cast_to_fixed (value_type (arg1), arg2);
10187 else if (ada_is_fixed_point_type (value_type (arg2)))
10188 error
10189 (_("Fixed-point values must be assigned to fixed-point variables"));
10190 else
10191 arg2 = coerce_for_assign (value_type (arg1), arg2);
10192 return ada_value_assign (arg1, arg2);
10193
10194 case BINOP_ADD:
10195 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10196 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10197 if (noside == EVAL_SKIP)
10198 goto nosideret;
10199 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10200 return (value_from_longest
10201 (value_type (arg1),
10202 value_as_long (arg1) + value_as_long (arg2)));
10203 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10204 return (value_from_longest
10205 (value_type (arg2),
10206 value_as_long (arg1) + value_as_long (arg2)));
10207 if ((ada_is_fixed_point_type (value_type (arg1))
10208 || ada_is_fixed_point_type (value_type (arg2)))
10209 && value_type (arg1) != value_type (arg2))
10210 error (_("Operands of fixed-point addition must have the same type"));
10211 /* Do the addition, and cast the result to the type of the first
10212 argument. We cannot cast the result to a reference type, so if
10213 ARG1 is a reference type, find its underlying type. */
10214 type = value_type (arg1);
10215 while (TYPE_CODE (type) == TYPE_CODE_REF)
10216 type = TYPE_TARGET_TYPE (type);
10217 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10218 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
10219
10220 case BINOP_SUB:
10221 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10222 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10223 if (noside == EVAL_SKIP)
10224 goto nosideret;
10225 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10226 return (value_from_longest
10227 (value_type (arg1),
10228 value_as_long (arg1) - value_as_long (arg2)));
10229 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10230 return (value_from_longest
10231 (value_type (arg2),
10232 value_as_long (arg1) - value_as_long (arg2)));
10233 if ((ada_is_fixed_point_type (value_type (arg1))
10234 || ada_is_fixed_point_type (value_type (arg2)))
10235 && value_type (arg1) != value_type (arg2))
10236 error (_("Operands of fixed-point subtraction "
10237 "must have the same type"));
10238 /* Do the substraction, and cast the result to the type of the first
10239 argument. We cannot cast the result to a reference type, so if
10240 ARG1 is a reference type, find its underlying type. */
10241 type = value_type (arg1);
10242 while (TYPE_CODE (type) == TYPE_CODE_REF)
10243 type = TYPE_TARGET_TYPE (type);
10244 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10245 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
10246
10247 case BINOP_MUL:
10248 case BINOP_DIV:
10249 case BINOP_REM:
10250 case BINOP_MOD:
10251 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10252 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10253 if (noside == EVAL_SKIP)
10254 goto nosideret;
10255 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10256 {
10257 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10258 return value_zero (value_type (arg1), not_lval);
10259 }
10260 else
10261 {
10262 type = builtin_type (exp->gdbarch)->builtin_double;
10263 if (ada_is_fixed_point_type (value_type (arg1)))
10264 arg1 = cast_from_fixed (type, arg1);
10265 if (ada_is_fixed_point_type (value_type (arg2)))
10266 arg2 = cast_from_fixed (type, arg2);
10267 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10268 return ada_value_binop (arg1, arg2, op);
10269 }
10270
10271 case BINOP_EQUAL:
10272 case BINOP_NOTEQUAL:
10273 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10274 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
10275 if (noside == EVAL_SKIP)
10276 goto nosideret;
10277 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10278 tem = 0;
10279 else
10280 {
10281 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10282 tem = ada_value_equal (arg1, arg2);
10283 }
10284 if (op == BINOP_NOTEQUAL)
10285 tem = !tem;
10286 type = language_bool_type (exp->language_defn, exp->gdbarch);
10287 return value_from_longest (type, (LONGEST) tem);
10288
10289 case UNOP_NEG:
10290 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10291 if (noside == EVAL_SKIP)
10292 goto nosideret;
10293 else if (ada_is_fixed_point_type (value_type (arg1)))
10294 return value_cast (value_type (arg1), value_neg (arg1));
10295 else
10296 {
10297 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10298 return value_neg (arg1);
10299 }
10300
10301 case BINOP_LOGICAL_AND:
10302 case BINOP_LOGICAL_OR:
10303 case UNOP_LOGICAL_NOT:
10304 {
10305 struct value *val;
10306
10307 *pos -= 1;
10308 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10309 type = language_bool_type (exp->language_defn, exp->gdbarch);
10310 return value_cast (type, val);
10311 }
10312
10313 case BINOP_BITWISE_AND:
10314 case BINOP_BITWISE_IOR:
10315 case BINOP_BITWISE_XOR:
10316 {
10317 struct value *val;
10318
10319 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10320 *pos = pc;
10321 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10322
10323 return value_cast (value_type (arg1), val);
10324 }
10325
10326 case OP_VAR_VALUE:
10327 *pos -= 1;
10328
10329 if (noside == EVAL_SKIP)
10330 {
10331 *pos += 4;
10332 goto nosideret;
10333 }
10334
10335 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
10336 /* Only encountered when an unresolved symbol occurs in a
10337 context other than a function call, in which case, it is
10338 invalid. */
10339 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10340 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
10341
10342 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10343 {
10344 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10345 /* Check to see if this is a tagged type. We also need to handle
10346 the case where the type is a reference to a tagged type, but
10347 we have to be careful to exclude pointers to tagged types.
10348 The latter should be shown as usual (as a pointer), whereas
10349 a reference should mostly be transparent to the user. */
10350 if (ada_is_tagged_type (type, 0)
10351 || (TYPE_CODE (type) == TYPE_CODE_REF
10352 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10353 {
10354 /* Tagged types are a little special in the fact that the real
10355 type is dynamic and can only be determined by inspecting the
10356 object's tag. This means that we need to get the object's
10357 value first (EVAL_NORMAL) and then extract the actual object
10358 type from its tag.
10359
10360 Note that we cannot skip the final step where we extract
10361 the object type from its tag, because the EVAL_NORMAL phase
10362 results in dynamic components being resolved into fixed ones.
10363 This can cause problems when trying to print the type
10364 description of tagged types whose parent has a dynamic size:
10365 We use the type name of the "_parent" component in order
10366 to print the name of the ancestor type in the type description.
10367 If that component had a dynamic size, the resolution into
10368 a fixed type would result in the loss of that type name,
10369 thus preventing us from printing the name of the ancestor
10370 type in the type description. */
10371 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10372
10373 if (TYPE_CODE (type) != TYPE_CODE_REF)
10374 {
10375 struct type *actual_type;
10376
10377 actual_type = type_from_tag (ada_value_tag (arg1));
10378 if (actual_type == NULL)
10379 /* If, for some reason, we were unable to determine
10380 the actual type from the tag, then use the static
10381 approximation that we just computed as a fallback.
10382 This can happen if the debugging information is
10383 incomplete, for instance. */
10384 actual_type = type;
10385 return value_zero (actual_type, not_lval);
10386 }
10387 else
10388 {
10389 /* In the case of a ref, ada_coerce_ref takes care
10390 of determining the actual type. But the evaluation
10391 should return a ref as it should be valid to ask
10392 for its address; so rebuild a ref after coerce. */
10393 arg1 = ada_coerce_ref (arg1);
10394 return value_ref (arg1);
10395 }
10396 }
10397
10398 /* Records and unions for which GNAT encodings have been
10399 generated need to be statically fixed as well.
10400 Otherwise, non-static fixing produces a type where
10401 all dynamic properties are removed, which prevents "ptype"
10402 from being able to completely describe the type.
10403 For instance, a case statement in a variant record would be
10404 replaced by the relevant components based on the actual
10405 value of the discriminants. */
10406 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10407 && dynamic_template_type (type) != NULL)
10408 || (TYPE_CODE (type) == TYPE_CODE_UNION
10409 && ada_find_parallel_type (type, "___XVU") != NULL))
10410 {
10411 *pos += 4;
10412 return value_zero (to_static_fixed_type (type), not_lval);
10413 }
10414 }
10415
10416 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10417 return ada_to_fixed_value (arg1);
10418
10419 case OP_FUNCALL:
10420 (*pos) += 2;
10421
10422 /* Allocate arg vector, including space for the function to be
10423 called in argvec[0] and a terminating NULL. */
10424 nargs = longest_to_int (exp->elts[pc + 1].longconst);
10425 argvec =
10426 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10427
10428 if (exp->elts[*pos].opcode == OP_VAR_VALUE
10429 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10430 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10431 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10432 else
10433 {
10434 for (tem = 0; tem <= nargs; tem += 1)
10435 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10436 argvec[tem] = 0;
10437
10438 if (noside == EVAL_SKIP)
10439 goto nosideret;
10440 }
10441
10442 if (ada_is_constrained_packed_array_type
10443 (desc_base_type (value_type (argvec[0]))))
10444 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
10445 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10446 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10447 /* This is a packed array that has already been fixed, and
10448 therefore already coerced to a simple array. Nothing further
10449 to do. */
10450 ;
10451 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10452 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10453 && VALUE_LVAL (argvec[0]) == lval_memory))
10454 argvec[0] = value_addr (argvec[0]);
10455
10456 type = ada_check_typedef (value_type (argvec[0]));
10457
10458 /* Ada allows us to implicitly dereference arrays when subscripting
10459 them. So, if this is an array typedef (encoding use for array
10460 access types encoded as fat pointers), strip it now. */
10461 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10462 type = ada_typedef_target_type (type);
10463
10464 if (TYPE_CODE (type) == TYPE_CODE_PTR)
10465 {
10466 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
10467 {
10468 case TYPE_CODE_FUNC:
10469 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10470 break;
10471 case TYPE_CODE_ARRAY:
10472 break;
10473 case TYPE_CODE_STRUCT:
10474 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10475 argvec[0] = ada_value_ind (argvec[0]);
10476 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10477 break;
10478 default:
10479 error (_("cannot subscript or call something of type `%s'"),
10480 ada_type_name (value_type (argvec[0])));
10481 break;
10482 }
10483 }
10484
10485 switch (TYPE_CODE (type))
10486 {
10487 case TYPE_CODE_FUNC:
10488 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10489 {
10490 struct type *rtype = TYPE_TARGET_TYPE (type);
10491
10492 if (TYPE_GNU_IFUNC (type))
10493 return allocate_value (TYPE_TARGET_TYPE (rtype));
10494 return allocate_value (rtype);
10495 }
10496 return call_function_by_hand (argvec[0], nargs, argvec + 1);
10497 case TYPE_CODE_INTERNAL_FUNCTION:
10498 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10499 /* We don't know anything about what the internal
10500 function might return, but we have to return
10501 something. */
10502 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10503 not_lval);
10504 else
10505 return call_internal_function (exp->gdbarch, exp->language_defn,
10506 argvec[0], nargs, argvec + 1);
10507
10508 case TYPE_CODE_STRUCT:
10509 {
10510 int arity;
10511
10512 arity = ada_array_arity (type);
10513 type = ada_array_element_type (type, nargs);
10514 if (type == NULL)
10515 error (_("cannot subscript or call a record"));
10516 if (arity != nargs)
10517 error (_("wrong number of subscripts; expecting %d"), arity);
10518 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10519 return value_zero (ada_aligned_type (type), lval_memory);
10520 return
10521 unwrap_value (ada_value_subscript
10522 (argvec[0], nargs, argvec + 1));
10523 }
10524 case TYPE_CODE_ARRAY:
10525 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10526 {
10527 type = ada_array_element_type (type, nargs);
10528 if (type == NULL)
10529 error (_("element type of array unknown"));
10530 else
10531 return value_zero (ada_aligned_type (type), lval_memory);
10532 }
10533 return
10534 unwrap_value (ada_value_subscript
10535 (ada_coerce_to_simple_array (argvec[0]),
10536 nargs, argvec + 1));
10537 case TYPE_CODE_PTR: /* Pointer to array */
10538 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10539 {
10540 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10541 type = ada_array_element_type (type, nargs);
10542 if (type == NULL)
10543 error (_("element type of array unknown"));
10544 else
10545 return value_zero (ada_aligned_type (type), lval_memory);
10546 }
10547 return
10548 unwrap_value (ada_value_ptr_subscript (argvec[0],
10549 nargs, argvec + 1));
10550
10551 default:
10552 error (_("Attempt to index or call something other than an "
10553 "array or function"));
10554 }
10555
10556 case TERNOP_SLICE:
10557 {
10558 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10559 struct value *low_bound_val =
10560 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10561 struct value *high_bound_val =
10562 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10563 LONGEST low_bound;
10564 LONGEST high_bound;
10565
10566 low_bound_val = coerce_ref (low_bound_val);
10567 high_bound_val = coerce_ref (high_bound_val);
10568 low_bound = pos_atr (low_bound_val);
10569 high_bound = pos_atr (high_bound_val);
10570
10571 if (noside == EVAL_SKIP)
10572 goto nosideret;
10573
10574 /* If this is a reference to an aligner type, then remove all
10575 the aligners. */
10576 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10577 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10578 TYPE_TARGET_TYPE (value_type (array)) =
10579 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10580
10581 if (ada_is_constrained_packed_array_type (value_type (array)))
10582 error (_("cannot slice a packed array"));
10583
10584 /* If this is a reference to an array or an array lvalue,
10585 convert to a pointer. */
10586 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10587 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
10588 && VALUE_LVAL (array) == lval_memory))
10589 array = value_addr (array);
10590
10591 if (noside == EVAL_AVOID_SIDE_EFFECTS
10592 && ada_is_array_descriptor_type (ada_check_typedef
10593 (value_type (array))))
10594 return empty_array (ada_type_of_array (array, 0), low_bound);
10595
10596 array = ada_coerce_to_simple_array_ptr (array);
10597
10598 /* If we have more than one level of pointer indirection,
10599 dereference the value until we get only one level. */
10600 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10601 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
10602 == TYPE_CODE_PTR))
10603 array = value_ind (array);
10604
10605 /* Make sure we really do have an array type before going further,
10606 to avoid a SEGV when trying to get the index type or the target
10607 type later down the road if the debug info generated by
10608 the compiler is incorrect or incomplete. */
10609 if (!ada_is_simple_array_type (value_type (array)))
10610 error (_("cannot take slice of non-array"));
10611
10612 if (TYPE_CODE (ada_check_typedef (value_type (array)))
10613 == TYPE_CODE_PTR)
10614 {
10615 struct type *type0 = ada_check_typedef (value_type (array));
10616
10617 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10618 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
10619 else
10620 {
10621 struct type *arr_type0 =
10622 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10623
10624 return ada_value_slice_from_ptr (array, arr_type0,
10625 longest_to_int (low_bound),
10626 longest_to_int (high_bound));
10627 }
10628 }
10629 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10630 return array;
10631 else if (high_bound < low_bound)
10632 return empty_array (value_type (array), low_bound);
10633 else
10634 return ada_value_slice (array, longest_to_int (low_bound),
10635 longest_to_int (high_bound));
10636 }
10637
10638 case UNOP_IN_RANGE:
10639 (*pos) += 2;
10640 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10641 type = check_typedef (exp->elts[pc + 1].type);
10642
10643 if (noside == EVAL_SKIP)
10644 goto nosideret;
10645
10646 switch (TYPE_CODE (type))
10647 {
10648 default:
10649 lim_warning (_("Membership test incompletely implemented; "
10650 "always returns true"));
10651 type = language_bool_type (exp->language_defn, exp->gdbarch);
10652 return value_from_longest (type, (LONGEST) 1);
10653
10654 case TYPE_CODE_RANGE:
10655 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10656 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
10657 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10658 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10659 type = language_bool_type (exp->language_defn, exp->gdbarch);
10660 return
10661 value_from_longest (type,
10662 (value_less (arg1, arg3)
10663 || value_equal (arg1, arg3))
10664 && (value_less (arg2, arg1)
10665 || value_equal (arg2, arg1)));
10666 }
10667
10668 case BINOP_IN_BOUNDS:
10669 (*pos) += 2;
10670 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10671 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10672
10673 if (noside == EVAL_SKIP)
10674 goto nosideret;
10675
10676 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10677 {
10678 type = language_bool_type (exp->language_defn, exp->gdbarch);
10679 return value_zero (type, not_lval);
10680 }
10681
10682 tem = longest_to_int (exp->elts[pc + 1].longconst);
10683
10684 type = ada_index_type (value_type (arg2), tem, "range");
10685 if (!type)
10686 type = value_type (arg1);
10687
10688 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10689 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
10690
10691 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10692 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10693 type = language_bool_type (exp->language_defn, exp->gdbarch);
10694 return
10695 value_from_longest (type,
10696 (value_less (arg1, arg3)
10697 || value_equal (arg1, arg3))
10698 && (value_less (arg2, arg1)
10699 || value_equal (arg2, arg1)));
10700
10701 case TERNOP_IN_RANGE:
10702 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10703 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10704 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10705
10706 if (noside == EVAL_SKIP)
10707 goto nosideret;
10708
10709 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10710 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10711 type = language_bool_type (exp->language_defn, exp->gdbarch);
10712 return
10713 value_from_longest (type,
10714 (value_less (arg1, arg3)
10715 || value_equal (arg1, arg3))
10716 && (value_less (arg2, arg1)
10717 || value_equal (arg2, arg1)));
10718
10719 case OP_ATR_FIRST:
10720 case OP_ATR_LAST:
10721 case OP_ATR_LENGTH:
10722 {
10723 struct type *type_arg;
10724
10725 if (exp->elts[*pos].opcode == OP_TYPE)
10726 {
10727 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10728 arg1 = NULL;
10729 type_arg = check_typedef (exp->elts[pc + 2].type);
10730 }
10731 else
10732 {
10733 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10734 type_arg = NULL;
10735 }
10736
10737 if (exp->elts[*pos].opcode != OP_LONG)
10738 error (_("Invalid operand to '%s"), ada_attribute_name (op));
10739 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10740 *pos += 4;
10741
10742 if (noside == EVAL_SKIP)
10743 goto nosideret;
10744
10745 if (type_arg == NULL)
10746 {
10747 arg1 = ada_coerce_ref (arg1);
10748
10749 if (ada_is_constrained_packed_array_type (value_type (arg1)))
10750 arg1 = ada_coerce_to_simple_array (arg1);
10751
10752 if (op == OP_ATR_LENGTH)
10753 type = builtin_type (exp->gdbarch)->builtin_int;
10754 else
10755 {
10756 type = ada_index_type (value_type (arg1), tem,
10757 ada_attribute_name (op));
10758 if (type == NULL)
10759 type = builtin_type (exp->gdbarch)->builtin_int;
10760 }
10761
10762 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10763 return allocate_value (type);
10764
10765 switch (op)
10766 {
10767 default: /* Should never happen. */
10768 error (_("unexpected attribute encountered"));
10769 case OP_ATR_FIRST:
10770 return value_from_longest
10771 (type, ada_array_bound (arg1, tem, 0));
10772 case OP_ATR_LAST:
10773 return value_from_longest
10774 (type, ada_array_bound (arg1, tem, 1));
10775 case OP_ATR_LENGTH:
10776 return value_from_longest
10777 (type, ada_array_length (arg1, tem));
10778 }
10779 }
10780 else if (discrete_type_p (type_arg))
10781 {
10782 struct type *range_type;
10783 const char *name = ada_type_name (type_arg);
10784
10785 range_type = NULL;
10786 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
10787 range_type = to_fixed_range_type (type_arg, NULL);
10788 if (range_type == NULL)
10789 range_type = type_arg;
10790 switch (op)
10791 {
10792 default:
10793 error (_("unexpected attribute encountered"));
10794 case OP_ATR_FIRST:
10795 return value_from_longest
10796 (range_type, ada_discrete_type_low_bound (range_type));
10797 case OP_ATR_LAST:
10798 return value_from_longest
10799 (range_type, ada_discrete_type_high_bound (range_type));
10800 case OP_ATR_LENGTH:
10801 error (_("the 'length attribute applies only to array types"));
10802 }
10803 }
10804 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
10805 error (_("unimplemented type attribute"));
10806 else
10807 {
10808 LONGEST low, high;
10809
10810 if (ada_is_constrained_packed_array_type (type_arg))
10811 type_arg = decode_constrained_packed_array_type (type_arg);
10812
10813 if (op == OP_ATR_LENGTH)
10814 type = builtin_type (exp->gdbarch)->builtin_int;
10815 else
10816 {
10817 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10818 if (type == NULL)
10819 type = builtin_type (exp->gdbarch)->builtin_int;
10820 }
10821
10822 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10823 return allocate_value (type);
10824
10825 switch (op)
10826 {
10827 default:
10828 error (_("unexpected attribute encountered"));
10829 case OP_ATR_FIRST:
10830 low = ada_array_bound_from_type (type_arg, tem, 0);
10831 return value_from_longest (type, low);
10832 case OP_ATR_LAST:
10833 high = ada_array_bound_from_type (type_arg, tem, 1);
10834 return value_from_longest (type, high);
10835 case OP_ATR_LENGTH:
10836 low = ada_array_bound_from_type (type_arg, tem, 0);
10837 high = ada_array_bound_from_type (type_arg, tem, 1);
10838 return value_from_longest (type, high - low + 1);
10839 }
10840 }
10841 }
10842
10843 case OP_ATR_TAG:
10844 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10845 if (noside == EVAL_SKIP)
10846 goto nosideret;
10847
10848 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10849 return value_zero (ada_tag_type (arg1), not_lval);
10850
10851 return ada_value_tag (arg1);
10852
10853 case OP_ATR_MIN:
10854 case OP_ATR_MAX:
10855 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10856 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10857 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10858 if (noside == EVAL_SKIP)
10859 goto nosideret;
10860 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10861 return value_zero (value_type (arg1), not_lval);
10862 else
10863 {
10864 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10865 return value_binop (arg1, arg2,
10866 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10867 }
10868
10869 case OP_ATR_MODULUS:
10870 {
10871 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
10872
10873 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10874 if (noside == EVAL_SKIP)
10875 goto nosideret;
10876
10877 if (!ada_is_modular_type (type_arg))
10878 error (_("'modulus must be applied to modular type"));
10879
10880 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10881 ada_modulus (type_arg));
10882 }
10883
10884
10885 case OP_ATR_POS:
10886 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10887 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10888 if (noside == EVAL_SKIP)
10889 goto nosideret;
10890 type = builtin_type (exp->gdbarch)->builtin_int;
10891 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10892 return value_zero (type, not_lval);
10893 else
10894 return value_pos_atr (type, arg1);
10895
10896 case OP_ATR_SIZE:
10897 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10898 type = value_type (arg1);
10899
10900 /* If the argument is a reference, then dereference its type, since
10901 the user is really asking for the size of the actual object,
10902 not the size of the pointer. */
10903 if (TYPE_CODE (type) == TYPE_CODE_REF)
10904 type = TYPE_TARGET_TYPE (type);
10905
10906 if (noside == EVAL_SKIP)
10907 goto nosideret;
10908 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10909 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10910 else
10911 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10912 TARGET_CHAR_BIT * TYPE_LENGTH (type));
10913
10914 case OP_ATR_VAL:
10915 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10916 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10917 type = exp->elts[pc + 2].type;
10918 if (noside == EVAL_SKIP)
10919 goto nosideret;
10920 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10921 return value_zero (type, not_lval);
10922 else
10923 return value_val_atr (type, arg1);
10924
10925 case BINOP_EXP:
10926 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10927 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10928 if (noside == EVAL_SKIP)
10929 goto nosideret;
10930 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10931 return value_zero (value_type (arg1), not_lval);
10932 else
10933 {
10934 /* For integer exponentiation operations,
10935 only promote the first argument. */
10936 if (is_integral_type (value_type (arg2)))
10937 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10938 else
10939 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10940
10941 return value_binop (arg1, arg2, op);
10942 }
10943
10944 case UNOP_PLUS:
10945 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10946 if (noside == EVAL_SKIP)
10947 goto nosideret;
10948 else
10949 return arg1;
10950
10951 case UNOP_ABS:
10952 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10953 if (noside == EVAL_SKIP)
10954 goto nosideret;
10955 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10956 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10957 return value_neg (arg1);
10958 else
10959 return arg1;
10960
10961 case UNOP_IND:
10962 preeval_pos = *pos;
10963 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10964 if (noside == EVAL_SKIP)
10965 goto nosideret;
10966 type = ada_check_typedef (value_type (arg1));
10967 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10968 {
10969 if (ada_is_array_descriptor_type (type))
10970 /* GDB allows dereferencing GNAT array descriptors. */
10971 {
10972 struct type *arrType = ada_type_of_array (arg1, 0);
10973
10974 if (arrType == NULL)
10975 error (_("Attempt to dereference null array pointer."));
10976 return value_at_lazy (arrType, 0);
10977 }
10978 else if (TYPE_CODE (type) == TYPE_CODE_PTR
10979 || TYPE_CODE (type) == TYPE_CODE_REF
10980 /* In C you can dereference an array to get the 1st elt. */
10981 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
10982 {
10983 /* As mentioned in the OP_VAR_VALUE case, tagged types can
10984 only be determined by inspecting the object's tag.
10985 This means that we need to evaluate completely the
10986 expression in order to get its type. */
10987
10988 if ((TYPE_CODE (type) == TYPE_CODE_REF
10989 || TYPE_CODE (type) == TYPE_CODE_PTR)
10990 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10991 {
10992 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10993 EVAL_NORMAL);
10994 type = value_type (ada_value_ind (arg1));
10995 }
10996 else
10997 {
10998 type = to_static_fixed_type
10999 (ada_aligned_type
11000 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11001 }
11002 ada_ensure_varsize_limit (type);
11003 return value_zero (type, lval_memory);
11004 }
11005 else if (TYPE_CODE (type) == TYPE_CODE_INT)
11006 {
11007 /* GDB allows dereferencing an int. */
11008 if (expect_type == NULL)
11009 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11010 lval_memory);
11011 else
11012 {
11013 expect_type =
11014 to_static_fixed_type (ada_aligned_type (expect_type));
11015 return value_zero (expect_type, lval_memory);
11016 }
11017 }
11018 else
11019 error (_("Attempt to take contents of a non-pointer value."));
11020 }
11021 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
11022 type = ada_check_typedef (value_type (arg1));
11023
11024 if (TYPE_CODE (type) == TYPE_CODE_INT)
11025 /* GDB allows dereferencing an int. If we were given
11026 the expect_type, then use that as the target type.
11027 Otherwise, assume that the target type is an int. */
11028 {
11029 if (expect_type != NULL)
11030 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11031 arg1));
11032 else
11033 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11034 (CORE_ADDR) value_as_address (arg1));
11035 }
11036
11037 if (ada_is_array_descriptor_type (type))
11038 /* GDB allows dereferencing GNAT array descriptors. */
11039 return ada_coerce_to_simple_array (arg1);
11040 else
11041 return ada_value_ind (arg1);
11042
11043 case STRUCTOP_STRUCT:
11044 tem = longest_to_int (exp->elts[pc + 1].longconst);
11045 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
11046 preeval_pos = *pos;
11047 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11048 if (noside == EVAL_SKIP)
11049 goto nosideret;
11050 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11051 {
11052 struct type *type1 = value_type (arg1);
11053
11054 if (ada_is_tagged_type (type1, 1))
11055 {
11056 type = ada_lookup_struct_elt_type (type1,
11057 &exp->elts[pc + 2].string,
11058 1, 1, NULL);
11059
11060 /* If the field is not found, check if it exists in the
11061 extension of this object's type. This means that we
11062 need to evaluate completely the expression. */
11063
11064 if (type == NULL)
11065 {
11066 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11067 EVAL_NORMAL);
11068 arg1 = ada_value_struct_elt (arg1,
11069 &exp->elts[pc + 2].string,
11070 0);
11071 arg1 = unwrap_value (arg1);
11072 type = value_type (ada_to_fixed_value (arg1));
11073 }
11074 }
11075 else
11076 type =
11077 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11078 0, NULL);
11079
11080 return value_zero (ada_aligned_type (type), lval_memory);
11081 }
11082 else
11083 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11084 arg1 = unwrap_value (arg1);
11085 return ada_to_fixed_value (arg1);
11086
11087 case OP_TYPE:
11088 /* The value is not supposed to be used. This is here to make it
11089 easier to accommodate expressions that contain types. */
11090 (*pos) += 2;
11091 if (noside == EVAL_SKIP)
11092 goto nosideret;
11093 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11094 return allocate_value (exp->elts[pc + 1].type);
11095 else
11096 error (_("Attempt to use a type name as an expression"));
11097
11098 case OP_AGGREGATE:
11099 case OP_CHOICES:
11100 case OP_OTHERS:
11101 case OP_DISCRETE_RANGE:
11102 case OP_POSITIONAL:
11103 case OP_NAME:
11104 if (noside == EVAL_NORMAL)
11105 switch (op)
11106 {
11107 case OP_NAME:
11108 error (_("Undefined name, ambiguous name, or renaming used in "
11109 "component association: %s."), &exp->elts[pc+2].string);
11110 case OP_AGGREGATE:
11111 error (_("Aggregates only allowed on the right of an assignment"));
11112 default:
11113 internal_error (__FILE__, __LINE__,
11114 _("aggregate apparently mangled"));
11115 }
11116
11117 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11118 *pos += oplen - 1;
11119 for (tem = 0; tem < nargs; tem += 1)
11120 ada_evaluate_subexp (NULL, exp, pos, noside);
11121 goto nosideret;
11122 }
11123
11124 nosideret:
11125 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
11126 }
11127 \f
11128
11129 /* Fixed point */
11130
11131 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
11132 type name that encodes the 'small and 'delta information.
11133 Otherwise, return NULL. */
11134
11135 static const char *
11136 fixed_type_info (struct type *type)
11137 {
11138 const char *name = ada_type_name (type);
11139 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11140
11141 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11142 {
11143 const char *tail = strstr (name, "___XF_");
11144
11145 if (tail == NULL)
11146 return NULL;
11147 else
11148 return tail + 5;
11149 }
11150 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11151 return fixed_type_info (TYPE_TARGET_TYPE (type));
11152 else
11153 return NULL;
11154 }
11155
11156 /* Returns non-zero iff TYPE represents an Ada fixed-point type. */
11157
11158 int
11159 ada_is_fixed_point_type (struct type *type)
11160 {
11161 return fixed_type_info (type) != NULL;
11162 }
11163
11164 /* Return non-zero iff TYPE represents a System.Address type. */
11165
11166 int
11167 ada_is_system_address_type (struct type *type)
11168 {
11169 return (TYPE_NAME (type)
11170 && strcmp (TYPE_NAME (type), "system__address") == 0);
11171 }
11172
11173 /* Assuming that TYPE is the representation of an Ada fixed-point
11174 type, return its delta, or -1 if the type is malformed and the
11175 delta cannot be determined. */
11176
11177 DOUBLEST
11178 ada_delta (struct type *type)
11179 {
11180 const char *encoding = fixed_type_info (type);
11181 DOUBLEST num, den;
11182
11183 /* Strictly speaking, num and den are encoded as integer. However,
11184 they may not fit into a long, and they will have to be converted
11185 to DOUBLEST anyway. So scan them as DOUBLEST. */
11186 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11187 &num, &den) < 2)
11188 return -1.0;
11189 else
11190 return num / den;
11191 }
11192
11193 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
11194 factor ('SMALL value) associated with the type. */
11195
11196 static DOUBLEST
11197 scaling_factor (struct type *type)
11198 {
11199 const char *encoding = fixed_type_info (type);
11200 DOUBLEST num0, den0, num1, den1;
11201 int n;
11202
11203 /* Strictly speaking, num's and den's are encoded as integer. However,
11204 they may not fit into a long, and they will have to be converted
11205 to DOUBLEST anyway. So scan them as DOUBLEST. */
11206 n = sscanf (encoding,
11207 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11208 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11209 &num0, &den0, &num1, &den1);
11210
11211 if (n < 2)
11212 return 1.0;
11213 else if (n == 4)
11214 return num1 / den1;
11215 else
11216 return num0 / den0;
11217 }
11218
11219
11220 /* Assuming that X is the representation of a value of fixed-point
11221 type TYPE, return its floating-point equivalent. */
11222
11223 DOUBLEST
11224 ada_fixed_to_float (struct type *type, LONGEST x)
11225 {
11226 return (DOUBLEST) x *scaling_factor (type);
11227 }
11228
11229 /* The representation of a fixed-point value of type TYPE
11230 corresponding to the value X. */
11231
11232 LONGEST
11233 ada_float_to_fixed (struct type *type, DOUBLEST x)
11234 {
11235 return (LONGEST) (x / scaling_factor (type) + 0.5);
11236 }
11237
11238 \f
11239
11240 /* Range types */
11241
11242 /* Scan STR beginning at position K for a discriminant name, and
11243 return the value of that discriminant field of DVAL in *PX. If
11244 PNEW_K is not null, put the position of the character beyond the
11245 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
11246 not alter *PX and *PNEW_K if unsuccessful. */
11247
11248 static int
11249 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
11250 int *pnew_k)
11251 {
11252 static char *bound_buffer = NULL;
11253 static size_t bound_buffer_len = 0;
11254 char *bound;
11255 char *pend;
11256 struct value *bound_val;
11257
11258 if (dval == NULL || str == NULL || str[k] == '\0')
11259 return 0;
11260
11261 pend = strstr (str + k, "__");
11262 if (pend == NULL)
11263 {
11264 bound = str + k;
11265 k += strlen (bound);
11266 }
11267 else
11268 {
11269 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
11270 bound = bound_buffer;
11271 strncpy (bound_buffer, str + k, pend - (str + k));
11272 bound[pend - (str + k)] = '\0';
11273 k = pend - str;
11274 }
11275
11276 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
11277 if (bound_val == NULL)
11278 return 0;
11279
11280 *px = value_as_long (bound_val);
11281 if (pnew_k != NULL)
11282 *pnew_k = k;
11283 return 1;
11284 }
11285
11286 /* Value of variable named NAME in the current environment. If
11287 no such variable found, then if ERR_MSG is null, returns 0, and
11288 otherwise causes an error with message ERR_MSG. */
11289
11290 static struct value *
11291 get_var_value (char *name, char *err_msg)
11292 {
11293 struct ada_symbol_info *syms;
11294 int nsyms;
11295
11296 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
11297 &syms);
11298
11299 if (nsyms != 1)
11300 {
11301 if (err_msg == NULL)
11302 return 0;
11303 else
11304 error (("%s"), err_msg);
11305 }
11306
11307 return value_of_variable (syms[0].sym, syms[0].block);
11308 }
11309
11310 /* Value of integer variable named NAME in the current environment. If
11311 no such variable found, returns 0, and sets *FLAG to 0. If
11312 successful, sets *FLAG to 1. */
11313
11314 LONGEST
11315 get_int_var_value (char *name, int *flag)
11316 {
11317 struct value *var_val = get_var_value (name, 0);
11318
11319 if (var_val == 0)
11320 {
11321 if (flag != NULL)
11322 *flag = 0;
11323 return 0;
11324 }
11325 else
11326 {
11327 if (flag != NULL)
11328 *flag = 1;
11329 return value_as_long (var_val);
11330 }
11331 }
11332
11333
11334 /* Return a range type whose base type is that of the range type named
11335 NAME in the current environment, and whose bounds are calculated
11336 from NAME according to the GNAT range encoding conventions.
11337 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11338 corresponding range type from debug information; fall back to using it
11339 if symbol lookup fails. If a new type must be created, allocate it
11340 like ORIG_TYPE was. The bounds information, in general, is encoded
11341 in NAME, the base type given in the named range type. */
11342
11343 static struct type *
11344 to_fixed_range_type (struct type *raw_type, struct value *dval)
11345 {
11346 const char *name;
11347 struct type *base_type;
11348 char *subtype_info;
11349
11350 gdb_assert (raw_type != NULL);
11351 gdb_assert (TYPE_NAME (raw_type) != NULL);
11352
11353 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
11354 base_type = TYPE_TARGET_TYPE (raw_type);
11355 else
11356 base_type = raw_type;
11357
11358 name = TYPE_NAME (raw_type);
11359 subtype_info = strstr (name, "___XD");
11360 if (subtype_info == NULL)
11361 {
11362 LONGEST L = ada_discrete_type_low_bound (raw_type);
11363 LONGEST U = ada_discrete_type_high_bound (raw_type);
11364
11365 if (L < INT_MIN || U > INT_MAX)
11366 return raw_type;
11367 else
11368 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11369 L, U);
11370 }
11371 else
11372 {
11373 static char *name_buf = NULL;
11374 static size_t name_len = 0;
11375 int prefix_len = subtype_info - name;
11376 LONGEST L, U;
11377 struct type *type;
11378 char *bounds_str;
11379 int n;
11380
11381 GROW_VECT (name_buf, name_len, prefix_len + 5);
11382 strncpy (name_buf, name, prefix_len);
11383 name_buf[prefix_len] = '\0';
11384
11385 subtype_info += 5;
11386 bounds_str = strchr (subtype_info, '_');
11387 n = 1;
11388
11389 if (*subtype_info == 'L')
11390 {
11391 if (!ada_scan_number (bounds_str, n, &L, &n)
11392 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11393 return raw_type;
11394 if (bounds_str[n] == '_')
11395 n += 2;
11396 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
11397 n += 1;
11398 subtype_info += 1;
11399 }
11400 else
11401 {
11402 int ok;
11403
11404 strcpy (name_buf + prefix_len, "___L");
11405 L = get_int_var_value (name_buf, &ok);
11406 if (!ok)
11407 {
11408 lim_warning (_("Unknown lower bound, using 1."));
11409 L = 1;
11410 }
11411 }
11412
11413 if (*subtype_info == 'U')
11414 {
11415 if (!ada_scan_number (bounds_str, n, &U, &n)
11416 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11417 return raw_type;
11418 }
11419 else
11420 {
11421 int ok;
11422
11423 strcpy (name_buf + prefix_len, "___U");
11424 U = get_int_var_value (name_buf, &ok);
11425 if (!ok)
11426 {
11427 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11428 U = L;
11429 }
11430 }
11431
11432 type = create_static_range_type (alloc_type_copy (raw_type),
11433 base_type, L, U);
11434 TYPE_NAME (type) = name;
11435 return type;
11436 }
11437 }
11438
11439 /* True iff NAME is the name of a range type. */
11440
11441 int
11442 ada_is_range_type_name (const char *name)
11443 {
11444 return (name != NULL && strstr (name, "___XD"));
11445 }
11446 \f
11447
11448 /* Modular types */
11449
11450 /* True iff TYPE is an Ada modular type. */
11451
11452 int
11453 ada_is_modular_type (struct type *type)
11454 {
11455 struct type *subranged_type = get_base_type (type);
11456
11457 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
11458 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
11459 && TYPE_UNSIGNED (subranged_type));
11460 }
11461
11462 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11463
11464 ULONGEST
11465 ada_modulus (struct type *type)
11466 {
11467 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
11468 }
11469 \f
11470
11471 /* Ada exception catchpoint support:
11472 ---------------------------------
11473
11474 We support 3 kinds of exception catchpoints:
11475 . catchpoints on Ada exceptions
11476 . catchpoints on unhandled Ada exceptions
11477 . catchpoints on failed assertions
11478
11479 Exceptions raised during failed assertions, or unhandled exceptions
11480 could perfectly be caught with the general catchpoint on Ada exceptions.
11481 However, we can easily differentiate these two special cases, and having
11482 the option to distinguish these two cases from the rest can be useful
11483 to zero-in on certain situations.
11484
11485 Exception catchpoints are a specialized form of breakpoint,
11486 since they rely on inserting breakpoints inside known routines
11487 of the GNAT runtime. The implementation therefore uses a standard
11488 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11489 of breakpoint_ops.
11490
11491 Support in the runtime for exception catchpoints have been changed
11492 a few times already, and these changes affect the implementation
11493 of these catchpoints. In order to be able to support several
11494 variants of the runtime, we use a sniffer that will determine
11495 the runtime variant used by the program being debugged. */
11496
11497 /* Ada's standard exceptions.
11498
11499 The Ada 83 standard also defined Numeric_Error. But there so many
11500 situations where it was unclear from the Ada 83 Reference Manual
11501 (RM) whether Constraint_Error or Numeric_Error should be raised,
11502 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11503 Interpretation saying that anytime the RM says that Numeric_Error
11504 should be raised, the implementation may raise Constraint_Error.
11505 Ada 95 went one step further and pretty much removed Numeric_Error
11506 from the list of standard exceptions (it made it a renaming of
11507 Constraint_Error, to help preserve compatibility when compiling
11508 an Ada83 compiler). As such, we do not include Numeric_Error from
11509 this list of standard exceptions. */
11510
11511 static char *standard_exc[] = {
11512 "constraint_error",
11513 "program_error",
11514 "storage_error",
11515 "tasking_error"
11516 };
11517
11518 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11519
11520 /* A structure that describes how to support exception catchpoints
11521 for a given executable. */
11522
11523 struct exception_support_info
11524 {
11525 /* The name of the symbol to break on in order to insert
11526 a catchpoint on exceptions. */
11527 const char *catch_exception_sym;
11528
11529 /* The name of the symbol to break on in order to insert
11530 a catchpoint on unhandled exceptions. */
11531 const char *catch_exception_unhandled_sym;
11532
11533 /* The name of the symbol to break on in order to insert
11534 a catchpoint on failed assertions. */
11535 const char *catch_assert_sym;
11536
11537 /* Assuming that the inferior just triggered an unhandled exception
11538 catchpoint, this function is responsible for returning the address
11539 in inferior memory where the name of that exception is stored.
11540 Return zero if the address could not be computed. */
11541 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11542 };
11543
11544 static CORE_ADDR ada_unhandled_exception_name_addr (void);
11545 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11546
11547 /* The following exception support info structure describes how to
11548 implement exception catchpoints with the latest version of the
11549 Ada runtime (as of 2007-03-06). */
11550
11551 static const struct exception_support_info default_exception_support_info =
11552 {
11553 "__gnat_debug_raise_exception", /* catch_exception_sym */
11554 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11555 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11556 ada_unhandled_exception_name_addr
11557 };
11558
11559 /* The following exception support info structure describes how to
11560 implement exception catchpoints with a slightly older version
11561 of the Ada runtime. */
11562
11563 static const struct exception_support_info exception_support_info_fallback =
11564 {
11565 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11566 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11567 "system__assertions__raise_assert_failure", /* catch_assert_sym */
11568 ada_unhandled_exception_name_addr_from_raise
11569 };
11570
11571 /* Return nonzero if we can detect the exception support routines
11572 described in EINFO.
11573
11574 This function errors out if an abnormal situation is detected
11575 (for instance, if we find the exception support routines, but
11576 that support is found to be incomplete). */
11577
11578 static int
11579 ada_has_this_exception_support (const struct exception_support_info *einfo)
11580 {
11581 struct symbol *sym;
11582
11583 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11584 that should be compiled with debugging information. As a result, we
11585 expect to find that symbol in the symtabs. */
11586
11587 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11588 if (sym == NULL)
11589 {
11590 /* Perhaps we did not find our symbol because the Ada runtime was
11591 compiled without debugging info, or simply stripped of it.
11592 It happens on some GNU/Linux distributions for instance, where
11593 users have to install a separate debug package in order to get
11594 the runtime's debugging info. In that situation, let the user
11595 know why we cannot insert an Ada exception catchpoint.
11596
11597 Note: Just for the purpose of inserting our Ada exception
11598 catchpoint, we could rely purely on the associated minimal symbol.
11599 But we would be operating in degraded mode anyway, since we are
11600 still lacking the debugging info needed later on to extract
11601 the name of the exception being raised (this name is printed in
11602 the catchpoint message, and is also used when trying to catch
11603 a specific exception). We do not handle this case for now. */
11604 struct bound_minimal_symbol msym
11605 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11606
11607 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11608 error (_("Your Ada runtime appears to be missing some debugging "
11609 "information.\nCannot insert Ada exception catchpoint "
11610 "in this configuration."));
11611
11612 return 0;
11613 }
11614
11615 /* Make sure that the symbol we found corresponds to a function. */
11616
11617 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11618 error (_("Symbol \"%s\" is not a function (class = %d)"),
11619 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11620
11621 return 1;
11622 }
11623
11624 /* Inspect the Ada runtime and determine which exception info structure
11625 should be used to provide support for exception catchpoints.
11626
11627 This function will always set the per-inferior exception_info,
11628 or raise an error. */
11629
11630 static void
11631 ada_exception_support_info_sniffer (void)
11632 {
11633 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11634
11635 /* If the exception info is already known, then no need to recompute it. */
11636 if (data->exception_info != NULL)
11637 return;
11638
11639 /* Check the latest (default) exception support info. */
11640 if (ada_has_this_exception_support (&default_exception_support_info))
11641 {
11642 data->exception_info = &default_exception_support_info;
11643 return;
11644 }
11645
11646 /* Try our fallback exception suport info. */
11647 if (ada_has_this_exception_support (&exception_support_info_fallback))
11648 {
11649 data->exception_info = &exception_support_info_fallback;
11650 return;
11651 }
11652
11653 /* Sometimes, it is normal for us to not be able to find the routine
11654 we are looking for. This happens when the program is linked with
11655 the shared version of the GNAT runtime, and the program has not been
11656 started yet. Inform the user of these two possible causes if
11657 applicable. */
11658
11659 if (ada_update_initial_language (language_unknown) != language_ada)
11660 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11661
11662 /* If the symbol does not exist, then check that the program is
11663 already started, to make sure that shared libraries have been
11664 loaded. If it is not started, this may mean that the symbol is
11665 in a shared library. */
11666
11667 if (ptid_get_pid (inferior_ptid) == 0)
11668 error (_("Unable to insert catchpoint. Try to start the program first."));
11669
11670 /* At this point, we know that we are debugging an Ada program and
11671 that the inferior has been started, but we still are not able to
11672 find the run-time symbols. That can mean that we are in
11673 configurable run time mode, or that a-except as been optimized
11674 out by the linker... In any case, at this point it is not worth
11675 supporting this feature. */
11676
11677 error (_("Cannot insert Ada exception catchpoints in this configuration."));
11678 }
11679
11680 /* True iff FRAME is very likely to be that of a function that is
11681 part of the runtime system. This is all very heuristic, but is
11682 intended to be used as advice as to what frames are uninteresting
11683 to most users. */
11684
11685 static int
11686 is_known_support_routine (struct frame_info *frame)
11687 {
11688 struct symtab_and_line sal;
11689 char *func_name;
11690 enum language func_lang;
11691 int i;
11692 const char *fullname;
11693
11694 /* If this code does not have any debugging information (no symtab),
11695 This cannot be any user code. */
11696
11697 find_frame_sal (frame, &sal);
11698 if (sal.symtab == NULL)
11699 return 1;
11700
11701 /* If there is a symtab, but the associated source file cannot be
11702 located, then assume this is not user code: Selecting a frame
11703 for which we cannot display the code would not be very helpful
11704 for the user. This should also take care of case such as VxWorks
11705 where the kernel has some debugging info provided for a few units. */
11706
11707 fullname = symtab_to_fullname (sal.symtab);
11708 if (access (fullname, R_OK) != 0)
11709 return 1;
11710
11711 /* Check the unit filename againt the Ada runtime file naming.
11712 We also check the name of the objfile against the name of some
11713 known system libraries that sometimes come with debugging info
11714 too. */
11715
11716 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11717 {
11718 re_comp (known_runtime_file_name_patterns[i]);
11719 if (re_exec (lbasename (sal.symtab->filename)))
11720 return 1;
11721 if (SYMTAB_OBJFILE (sal.symtab) != NULL
11722 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11723 return 1;
11724 }
11725
11726 /* Check whether the function is a GNAT-generated entity. */
11727
11728 find_frame_funname (frame, &func_name, &func_lang, NULL);
11729 if (func_name == NULL)
11730 return 1;
11731
11732 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11733 {
11734 re_comp (known_auxiliary_function_name_patterns[i]);
11735 if (re_exec (func_name))
11736 {
11737 xfree (func_name);
11738 return 1;
11739 }
11740 }
11741
11742 xfree (func_name);
11743 return 0;
11744 }
11745
11746 /* Find the first frame that contains debugging information and that is not
11747 part of the Ada run-time, starting from FI and moving upward. */
11748
11749 void
11750 ada_find_printable_frame (struct frame_info *fi)
11751 {
11752 for (; fi != NULL; fi = get_prev_frame (fi))
11753 {
11754 if (!is_known_support_routine (fi))
11755 {
11756 select_frame (fi);
11757 break;
11758 }
11759 }
11760
11761 }
11762
11763 /* Assuming that the inferior just triggered an unhandled exception
11764 catchpoint, return the address in inferior memory where the name
11765 of the exception is stored.
11766
11767 Return zero if the address could not be computed. */
11768
11769 static CORE_ADDR
11770 ada_unhandled_exception_name_addr (void)
11771 {
11772 return parse_and_eval_address ("e.full_name");
11773 }
11774
11775 /* Same as ada_unhandled_exception_name_addr, except that this function
11776 should be used when the inferior uses an older version of the runtime,
11777 where the exception name needs to be extracted from a specific frame
11778 several frames up in the callstack. */
11779
11780 static CORE_ADDR
11781 ada_unhandled_exception_name_addr_from_raise (void)
11782 {
11783 int frame_level;
11784 struct frame_info *fi;
11785 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11786 struct cleanup *old_chain;
11787
11788 /* To determine the name of this exception, we need to select
11789 the frame corresponding to RAISE_SYM_NAME. This frame is
11790 at least 3 levels up, so we simply skip the first 3 frames
11791 without checking the name of their associated function. */
11792 fi = get_current_frame ();
11793 for (frame_level = 0; frame_level < 3; frame_level += 1)
11794 if (fi != NULL)
11795 fi = get_prev_frame (fi);
11796
11797 old_chain = make_cleanup (null_cleanup, NULL);
11798 while (fi != NULL)
11799 {
11800 char *func_name;
11801 enum language func_lang;
11802
11803 find_frame_funname (fi, &func_name, &func_lang, NULL);
11804 if (func_name != NULL)
11805 {
11806 make_cleanup (xfree, func_name);
11807
11808 if (strcmp (func_name,
11809 data->exception_info->catch_exception_sym) == 0)
11810 break; /* We found the frame we were looking for... */
11811 fi = get_prev_frame (fi);
11812 }
11813 }
11814 do_cleanups (old_chain);
11815
11816 if (fi == NULL)
11817 return 0;
11818
11819 select_frame (fi);
11820 return parse_and_eval_address ("id.full_name");
11821 }
11822
11823 /* Assuming the inferior just triggered an Ada exception catchpoint
11824 (of any type), return the address in inferior memory where the name
11825 of the exception is stored, if applicable.
11826
11827 Return zero if the address could not be computed, or if not relevant. */
11828
11829 static CORE_ADDR
11830 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
11831 struct breakpoint *b)
11832 {
11833 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11834
11835 switch (ex)
11836 {
11837 case ada_catch_exception:
11838 return (parse_and_eval_address ("e.full_name"));
11839 break;
11840
11841 case ada_catch_exception_unhandled:
11842 return data->exception_info->unhandled_exception_name_addr ();
11843 break;
11844
11845 case ada_catch_assert:
11846 return 0; /* Exception name is not relevant in this case. */
11847 break;
11848
11849 default:
11850 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11851 break;
11852 }
11853
11854 return 0; /* Should never be reached. */
11855 }
11856
11857 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
11858 any error that ada_exception_name_addr_1 might cause to be thrown.
11859 When an error is intercepted, a warning with the error message is printed,
11860 and zero is returned. */
11861
11862 static CORE_ADDR
11863 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
11864 struct breakpoint *b)
11865 {
11866 CORE_ADDR result = 0;
11867
11868 TRY
11869 {
11870 result = ada_exception_name_addr_1 (ex, b);
11871 }
11872
11873 CATCH (e, RETURN_MASK_ERROR)
11874 {
11875 warning (_("failed to get exception name: %s"), e.message);
11876 return 0;
11877 }
11878 END_CATCH
11879
11880 return result;
11881 }
11882
11883 static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11884
11885 /* Ada catchpoints.
11886
11887 In the case of catchpoints on Ada exceptions, the catchpoint will
11888 stop the target on every exception the program throws. When a user
11889 specifies the name of a specific exception, we translate this
11890 request into a condition expression (in text form), and then parse
11891 it into an expression stored in each of the catchpoint's locations.
11892 We then use this condition to check whether the exception that was
11893 raised is the one the user is interested in. If not, then the
11894 target is resumed again. We store the name of the requested
11895 exception, in order to be able to re-set the condition expression
11896 when symbols change. */
11897
11898 /* An instance of this type is used to represent an Ada catchpoint
11899 breakpoint location. It includes a "struct bp_location" as a kind
11900 of base class; users downcast to "struct bp_location *" when
11901 needed. */
11902
11903 struct ada_catchpoint_location
11904 {
11905 /* The base class. */
11906 struct bp_location base;
11907
11908 /* The condition that checks whether the exception that was raised
11909 is the specific exception the user specified on catchpoint
11910 creation. */
11911 struct expression *excep_cond_expr;
11912 };
11913
11914 /* Implement the DTOR method in the bp_location_ops structure for all
11915 Ada exception catchpoint kinds. */
11916
11917 static void
11918 ada_catchpoint_location_dtor (struct bp_location *bl)
11919 {
11920 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11921
11922 xfree (al->excep_cond_expr);
11923 }
11924
11925 /* The vtable to be used in Ada catchpoint locations. */
11926
11927 static const struct bp_location_ops ada_catchpoint_location_ops =
11928 {
11929 ada_catchpoint_location_dtor
11930 };
11931
11932 /* An instance of this type is used to represent an Ada catchpoint.
11933 It includes a "struct breakpoint" as a kind of base class; users
11934 downcast to "struct breakpoint *" when needed. */
11935
11936 struct ada_catchpoint
11937 {
11938 /* The base class. */
11939 struct breakpoint base;
11940
11941 /* The name of the specific exception the user specified. */
11942 char *excep_string;
11943 };
11944
11945 /* Parse the exception condition string in the context of each of the
11946 catchpoint's locations, and store them for later evaluation. */
11947
11948 static void
11949 create_excep_cond_exprs (struct ada_catchpoint *c)
11950 {
11951 struct cleanup *old_chain;
11952 struct bp_location *bl;
11953 char *cond_string;
11954
11955 /* Nothing to do if there's no specific exception to catch. */
11956 if (c->excep_string == NULL)
11957 return;
11958
11959 /* Same if there are no locations... */
11960 if (c->base.loc == NULL)
11961 return;
11962
11963 /* Compute the condition expression in text form, from the specific
11964 expection we want to catch. */
11965 cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11966 old_chain = make_cleanup (xfree, cond_string);
11967
11968 /* Iterate over all the catchpoint's locations, and parse an
11969 expression for each. */
11970 for (bl = c->base.loc; bl != NULL; bl = bl->next)
11971 {
11972 struct ada_catchpoint_location *ada_loc
11973 = (struct ada_catchpoint_location *) bl;
11974 struct expression *exp = NULL;
11975
11976 if (!bl->shlib_disabled)
11977 {
11978 const char *s;
11979
11980 s = cond_string;
11981 TRY
11982 {
11983 exp = parse_exp_1 (&s, bl->address,
11984 block_for_pc (bl->address), 0);
11985 }
11986 CATCH (e, RETURN_MASK_ERROR)
11987 {
11988 warning (_("failed to reevaluate internal exception condition "
11989 "for catchpoint %d: %s"),
11990 c->base.number, e.message);
11991 /* There is a bug in GCC on sparc-solaris when building with
11992 optimization which causes EXP to change unexpectedly
11993 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11994 The problem should be fixed starting with GCC 4.9.
11995 In the meantime, work around it by forcing EXP back
11996 to NULL. */
11997 exp = NULL;
11998 }
11999 END_CATCH
12000 }
12001
12002 ada_loc->excep_cond_expr = exp;
12003 }
12004
12005 do_cleanups (old_chain);
12006 }
12007
12008 /* Implement the DTOR method in the breakpoint_ops structure for all
12009 exception catchpoint kinds. */
12010
12011 static void
12012 dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
12013 {
12014 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12015
12016 xfree (c->excep_string);
12017
12018 bkpt_breakpoint_ops.dtor (b);
12019 }
12020
12021 /* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12022 structure for all exception catchpoint kinds. */
12023
12024 static struct bp_location *
12025 allocate_location_exception (enum ada_exception_catchpoint_kind ex,
12026 struct breakpoint *self)
12027 {
12028 struct ada_catchpoint_location *loc;
12029
12030 loc = XNEW (struct ada_catchpoint_location);
12031 init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
12032 loc->excep_cond_expr = NULL;
12033 return &loc->base;
12034 }
12035
12036 /* Implement the RE_SET method in the breakpoint_ops structure for all
12037 exception catchpoint kinds. */
12038
12039 static void
12040 re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
12041 {
12042 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12043
12044 /* Call the base class's method. This updates the catchpoint's
12045 locations. */
12046 bkpt_breakpoint_ops.re_set (b);
12047
12048 /* Reparse the exception conditional expressions. One for each
12049 location. */
12050 create_excep_cond_exprs (c);
12051 }
12052
12053 /* Returns true if we should stop for this breakpoint hit. If the
12054 user specified a specific exception, we only want to cause a stop
12055 if the program thrown that exception. */
12056
12057 static int
12058 should_stop_exception (const struct bp_location *bl)
12059 {
12060 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12061 const struct ada_catchpoint_location *ada_loc
12062 = (const struct ada_catchpoint_location *) bl;
12063 int stop;
12064
12065 /* With no specific exception, should always stop. */
12066 if (c->excep_string == NULL)
12067 return 1;
12068
12069 if (ada_loc->excep_cond_expr == NULL)
12070 {
12071 /* We will have a NULL expression if back when we were creating
12072 the expressions, this location's had failed to parse. */
12073 return 1;
12074 }
12075
12076 stop = 1;
12077 TRY
12078 {
12079 struct value *mark;
12080
12081 mark = value_mark ();
12082 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
12083 value_free_to_mark (mark);
12084 }
12085 CATCH (ex, RETURN_MASK_ALL)
12086 {
12087 exception_fprintf (gdb_stderr, ex,
12088 _("Error in testing exception condition:\n"));
12089 }
12090 END_CATCH
12091
12092 return stop;
12093 }
12094
12095 /* Implement the CHECK_STATUS method in the breakpoint_ops structure
12096 for all exception catchpoint kinds. */
12097
12098 static void
12099 check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12100 {
12101 bs->stop = should_stop_exception (bs->bp_location_at);
12102 }
12103
12104 /* Implement the PRINT_IT method in the breakpoint_ops structure
12105 for all exception catchpoint kinds. */
12106
12107 static enum print_stop_action
12108 print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
12109 {
12110 struct ui_out *uiout = current_uiout;
12111 struct breakpoint *b = bs->breakpoint_at;
12112
12113 annotate_catchpoint (b->number);
12114
12115 if (ui_out_is_mi_like_p (uiout))
12116 {
12117 ui_out_field_string (uiout, "reason",
12118 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12119 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
12120 }
12121
12122 ui_out_text (uiout,
12123 b->disposition == disp_del ? "\nTemporary catchpoint "
12124 : "\nCatchpoint ");
12125 ui_out_field_int (uiout, "bkptno", b->number);
12126 ui_out_text (uiout, ", ");
12127
12128 switch (ex)
12129 {
12130 case ada_catch_exception:
12131 case ada_catch_exception_unhandled:
12132 {
12133 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12134 char exception_name[256];
12135
12136 if (addr != 0)
12137 {
12138 read_memory (addr, (gdb_byte *) exception_name,
12139 sizeof (exception_name) - 1);
12140 exception_name [sizeof (exception_name) - 1] = '\0';
12141 }
12142 else
12143 {
12144 /* For some reason, we were unable to read the exception
12145 name. This could happen if the Runtime was compiled
12146 without debugging info, for instance. In that case,
12147 just replace the exception name by the generic string
12148 "exception" - it will read as "an exception" in the
12149 notification we are about to print. */
12150 memcpy (exception_name, "exception", sizeof ("exception"));
12151 }
12152 /* In the case of unhandled exception breakpoints, we print
12153 the exception name as "unhandled EXCEPTION_NAME", to make
12154 it clearer to the user which kind of catchpoint just got
12155 hit. We used ui_out_text to make sure that this extra
12156 info does not pollute the exception name in the MI case. */
12157 if (ex == ada_catch_exception_unhandled)
12158 ui_out_text (uiout, "unhandled ");
12159 ui_out_field_string (uiout, "exception-name", exception_name);
12160 }
12161 break;
12162 case ada_catch_assert:
12163 /* In this case, the name of the exception is not really
12164 important. Just print "failed assertion" to make it clearer
12165 that his program just hit an assertion-failure catchpoint.
12166 We used ui_out_text because this info does not belong in
12167 the MI output. */
12168 ui_out_text (uiout, "failed assertion");
12169 break;
12170 }
12171 ui_out_text (uiout, " at ");
12172 ada_find_printable_frame (get_current_frame ());
12173
12174 return PRINT_SRC_AND_LOC;
12175 }
12176
12177 /* Implement the PRINT_ONE method in the breakpoint_ops structure
12178 for all exception catchpoint kinds. */
12179
12180 static void
12181 print_one_exception (enum ada_exception_catchpoint_kind ex,
12182 struct breakpoint *b, struct bp_location **last_loc)
12183 {
12184 struct ui_out *uiout = current_uiout;
12185 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12186 struct value_print_options opts;
12187
12188 get_user_print_options (&opts);
12189 if (opts.addressprint)
12190 {
12191 annotate_field (4);
12192 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
12193 }
12194
12195 annotate_field (5);
12196 *last_loc = b->loc;
12197 switch (ex)
12198 {
12199 case ada_catch_exception:
12200 if (c->excep_string != NULL)
12201 {
12202 char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12203
12204 ui_out_field_string (uiout, "what", msg);
12205 xfree (msg);
12206 }
12207 else
12208 ui_out_field_string (uiout, "what", "all Ada exceptions");
12209
12210 break;
12211
12212 case ada_catch_exception_unhandled:
12213 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12214 break;
12215
12216 case ada_catch_assert:
12217 ui_out_field_string (uiout, "what", "failed Ada assertions");
12218 break;
12219
12220 default:
12221 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12222 break;
12223 }
12224 }
12225
12226 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
12227 for all exception catchpoint kinds. */
12228
12229 static void
12230 print_mention_exception (enum ada_exception_catchpoint_kind ex,
12231 struct breakpoint *b)
12232 {
12233 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12234 struct ui_out *uiout = current_uiout;
12235
12236 ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12237 : _("Catchpoint "));
12238 ui_out_field_int (uiout, "bkptno", b->number);
12239 ui_out_text (uiout, ": ");
12240
12241 switch (ex)
12242 {
12243 case ada_catch_exception:
12244 if (c->excep_string != NULL)
12245 {
12246 char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12247 struct cleanup *old_chain = make_cleanup (xfree, info);
12248
12249 ui_out_text (uiout, info);
12250 do_cleanups (old_chain);
12251 }
12252 else
12253 ui_out_text (uiout, _("all Ada exceptions"));
12254 break;
12255
12256 case ada_catch_exception_unhandled:
12257 ui_out_text (uiout, _("unhandled Ada exceptions"));
12258 break;
12259
12260 case ada_catch_assert:
12261 ui_out_text (uiout, _("failed Ada assertions"));
12262 break;
12263
12264 default:
12265 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12266 break;
12267 }
12268 }
12269
12270 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12271 for all exception catchpoint kinds. */
12272
12273 static void
12274 print_recreate_exception (enum ada_exception_catchpoint_kind ex,
12275 struct breakpoint *b, struct ui_file *fp)
12276 {
12277 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12278
12279 switch (ex)
12280 {
12281 case ada_catch_exception:
12282 fprintf_filtered (fp, "catch exception");
12283 if (c->excep_string != NULL)
12284 fprintf_filtered (fp, " %s", c->excep_string);
12285 break;
12286
12287 case ada_catch_exception_unhandled:
12288 fprintf_filtered (fp, "catch exception unhandled");
12289 break;
12290
12291 case ada_catch_assert:
12292 fprintf_filtered (fp, "catch assert");
12293 break;
12294
12295 default:
12296 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12297 }
12298 print_recreate_thread (b, fp);
12299 }
12300
12301 /* Virtual table for "catch exception" breakpoints. */
12302
12303 static void
12304 dtor_catch_exception (struct breakpoint *b)
12305 {
12306 dtor_exception (ada_catch_exception, b);
12307 }
12308
12309 static struct bp_location *
12310 allocate_location_catch_exception (struct breakpoint *self)
12311 {
12312 return allocate_location_exception (ada_catch_exception, self);
12313 }
12314
12315 static void
12316 re_set_catch_exception (struct breakpoint *b)
12317 {
12318 re_set_exception (ada_catch_exception, b);
12319 }
12320
12321 static void
12322 check_status_catch_exception (bpstat bs)
12323 {
12324 check_status_exception (ada_catch_exception, bs);
12325 }
12326
12327 static enum print_stop_action
12328 print_it_catch_exception (bpstat bs)
12329 {
12330 return print_it_exception (ada_catch_exception, bs);
12331 }
12332
12333 static void
12334 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
12335 {
12336 print_one_exception (ada_catch_exception, b, last_loc);
12337 }
12338
12339 static void
12340 print_mention_catch_exception (struct breakpoint *b)
12341 {
12342 print_mention_exception (ada_catch_exception, b);
12343 }
12344
12345 static void
12346 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12347 {
12348 print_recreate_exception (ada_catch_exception, b, fp);
12349 }
12350
12351 static struct breakpoint_ops catch_exception_breakpoint_ops;
12352
12353 /* Virtual table for "catch exception unhandled" breakpoints. */
12354
12355 static void
12356 dtor_catch_exception_unhandled (struct breakpoint *b)
12357 {
12358 dtor_exception (ada_catch_exception_unhandled, b);
12359 }
12360
12361 static struct bp_location *
12362 allocate_location_catch_exception_unhandled (struct breakpoint *self)
12363 {
12364 return allocate_location_exception (ada_catch_exception_unhandled, self);
12365 }
12366
12367 static void
12368 re_set_catch_exception_unhandled (struct breakpoint *b)
12369 {
12370 re_set_exception (ada_catch_exception_unhandled, b);
12371 }
12372
12373 static void
12374 check_status_catch_exception_unhandled (bpstat bs)
12375 {
12376 check_status_exception (ada_catch_exception_unhandled, bs);
12377 }
12378
12379 static enum print_stop_action
12380 print_it_catch_exception_unhandled (bpstat bs)
12381 {
12382 return print_it_exception (ada_catch_exception_unhandled, bs);
12383 }
12384
12385 static void
12386 print_one_catch_exception_unhandled (struct breakpoint *b,
12387 struct bp_location **last_loc)
12388 {
12389 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
12390 }
12391
12392 static void
12393 print_mention_catch_exception_unhandled (struct breakpoint *b)
12394 {
12395 print_mention_exception (ada_catch_exception_unhandled, b);
12396 }
12397
12398 static void
12399 print_recreate_catch_exception_unhandled (struct breakpoint *b,
12400 struct ui_file *fp)
12401 {
12402 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
12403 }
12404
12405 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
12406
12407 /* Virtual table for "catch assert" breakpoints. */
12408
12409 static void
12410 dtor_catch_assert (struct breakpoint *b)
12411 {
12412 dtor_exception (ada_catch_assert, b);
12413 }
12414
12415 static struct bp_location *
12416 allocate_location_catch_assert (struct breakpoint *self)
12417 {
12418 return allocate_location_exception (ada_catch_assert, self);
12419 }
12420
12421 static void
12422 re_set_catch_assert (struct breakpoint *b)
12423 {
12424 re_set_exception (ada_catch_assert, b);
12425 }
12426
12427 static void
12428 check_status_catch_assert (bpstat bs)
12429 {
12430 check_status_exception (ada_catch_assert, bs);
12431 }
12432
12433 static enum print_stop_action
12434 print_it_catch_assert (bpstat bs)
12435 {
12436 return print_it_exception (ada_catch_assert, bs);
12437 }
12438
12439 static void
12440 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
12441 {
12442 print_one_exception (ada_catch_assert, b, last_loc);
12443 }
12444
12445 static void
12446 print_mention_catch_assert (struct breakpoint *b)
12447 {
12448 print_mention_exception (ada_catch_assert, b);
12449 }
12450
12451 static void
12452 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12453 {
12454 print_recreate_exception (ada_catch_assert, b, fp);
12455 }
12456
12457 static struct breakpoint_ops catch_assert_breakpoint_ops;
12458
12459 /* Return a newly allocated copy of the first space-separated token
12460 in ARGSP, and then adjust ARGSP to point immediately after that
12461 token.
12462
12463 Return NULL if ARGPS does not contain any more tokens. */
12464
12465 static char *
12466 ada_get_next_arg (char **argsp)
12467 {
12468 char *args = *argsp;
12469 char *end;
12470 char *result;
12471
12472 args = skip_spaces (args);
12473 if (args[0] == '\0')
12474 return NULL; /* No more arguments. */
12475
12476 /* Find the end of the current argument. */
12477
12478 end = skip_to_space (args);
12479
12480 /* Adjust ARGSP to point to the start of the next argument. */
12481
12482 *argsp = end;
12483
12484 /* Make a copy of the current argument and return it. */
12485
12486 result = xmalloc (end - args + 1);
12487 strncpy (result, args, end - args);
12488 result[end - args] = '\0';
12489
12490 return result;
12491 }
12492
12493 /* Split the arguments specified in a "catch exception" command.
12494 Set EX to the appropriate catchpoint type.
12495 Set EXCEP_STRING to the name of the specific exception if
12496 specified by the user.
12497 If a condition is found at the end of the arguments, the condition
12498 expression is stored in COND_STRING (memory must be deallocated
12499 after use). Otherwise COND_STRING is set to NULL. */
12500
12501 static void
12502 catch_ada_exception_command_split (char *args,
12503 enum ada_exception_catchpoint_kind *ex,
12504 char **excep_string,
12505 char **cond_string)
12506 {
12507 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12508 char *exception_name;
12509 char *cond = NULL;
12510
12511 exception_name = ada_get_next_arg (&args);
12512 if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12513 {
12514 /* This is not an exception name; this is the start of a condition
12515 expression for a catchpoint on all exceptions. So, "un-get"
12516 this token, and set exception_name to NULL. */
12517 xfree (exception_name);
12518 exception_name = NULL;
12519 args -= 2;
12520 }
12521 make_cleanup (xfree, exception_name);
12522
12523 /* Check to see if we have a condition. */
12524
12525 args = skip_spaces (args);
12526 if (startswith (args, "if")
12527 && (isspace (args[2]) || args[2] == '\0'))
12528 {
12529 args += 2;
12530 args = skip_spaces (args);
12531
12532 if (args[0] == '\0')
12533 error (_("Condition missing after `if' keyword"));
12534 cond = xstrdup (args);
12535 make_cleanup (xfree, cond);
12536
12537 args += strlen (args);
12538 }
12539
12540 /* Check that we do not have any more arguments. Anything else
12541 is unexpected. */
12542
12543 if (args[0] != '\0')
12544 error (_("Junk at end of expression"));
12545
12546 discard_cleanups (old_chain);
12547
12548 if (exception_name == NULL)
12549 {
12550 /* Catch all exceptions. */
12551 *ex = ada_catch_exception;
12552 *excep_string = NULL;
12553 }
12554 else if (strcmp (exception_name, "unhandled") == 0)
12555 {
12556 /* Catch unhandled exceptions. */
12557 *ex = ada_catch_exception_unhandled;
12558 *excep_string = NULL;
12559 }
12560 else
12561 {
12562 /* Catch a specific exception. */
12563 *ex = ada_catch_exception;
12564 *excep_string = exception_name;
12565 }
12566 *cond_string = cond;
12567 }
12568
12569 /* Return the name of the symbol on which we should break in order to
12570 implement a catchpoint of the EX kind. */
12571
12572 static const char *
12573 ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
12574 {
12575 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12576
12577 gdb_assert (data->exception_info != NULL);
12578
12579 switch (ex)
12580 {
12581 case ada_catch_exception:
12582 return (data->exception_info->catch_exception_sym);
12583 break;
12584 case ada_catch_exception_unhandled:
12585 return (data->exception_info->catch_exception_unhandled_sym);
12586 break;
12587 case ada_catch_assert:
12588 return (data->exception_info->catch_assert_sym);
12589 break;
12590 default:
12591 internal_error (__FILE__, __LINE__,
12592 _("unexpected catchpoint kind (%d)"), ex);
12593 }
12594 }
12595
12596 /* Return the breakpoint ops "virtual table" used for catchpoints
12597 of the EX kind. */
12598
12599 static const struct breakpoint_ops *
12600 ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
12601 {
12602 switch (ex)
12603 {
12604 case ada_catch_exception:
12605 return (&catch_exception_breakpoint_ops);
12606 break;
12607 case ada_catch_exception_unhandled:
12608 return (&catch_exception_unhandled_breakpoint_ops);
12609 break;
12610 case ada_catch_assert:
12611 return (&catch_assert_breakpoint_ops);
12612 break;
12613 default:
12614 internal_error (__FILE__, __LINE__,
12615 _("unexpected catchpoint kind (%d)"), ex);
12616 }
12617 }
12618
12619 /* Return the condition that will be used to match the current exception
12620 being raised with the exception that the user wants to catch. This
12621 assumes that this condition is used when the inferior just triggered
12622 an exception catchpoint.
12623
12624 The string returned is a newly allocated string that needs to be
12625 deallocated later. */
12626
12627 static char *
12628 ada_exception_catchpoint_cond_string (const char *excep_string)
12629 {
12630 int i;
12631
12632 /* The standard exceptions are a special case. They are defined in
12633 runtime units that have been compiled without debugging info; if
12634 EXCEP_STRING is the not-fully-qualified name of a standard
12635 exception (e.g. "constraint_error") then, during the evaluation
12636 of the condition expression, the symbol lookup on this name would
12637 *not* return this standard exception. The catchpoint condition
12638 may then be set only on user-defined exceptions which have the
12639 same not-fully-qualified name (e.g. my_package.constraint_error).
12640
12641 To avoid this unexcepted behavior, these standard exceptions are
12642 systematically prefixed by "standard". This means that "catch
12643 exception constraint_error" is rewritten into "catch exception
12644 standard.constraint_error".
12645
12646 If an exception named contraint_error is defined in another package of
12647 the inferior program, then the only way to specify this exception as a
12648 breakpoint condition is to use its fully-qualified named:
12649 e.g. my_package.constraint_error. */
12650
12651 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12652 {
12653 if (strcmp (standard_exc [i], excep_string) == 0)
12654 {
12655 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
12656 excep_string);
12657 }
12658 }
12659 return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
12660 }
12661
12662 /* Return the symtab_and_line that should be used to insert an exception
12663 catchpoint of the TYPE kind.
12664
12665 EXCEP_STRING should contain the name of a specific exception that
12666 the catchpoint should catch, or NULL otherwise.
12667
12668 ADDR_STRING returns the name of the function where the real
12669 breakpoint that implements the catchpoints is set, depending on the
12670 type of catchpoint we need to create. */
12671
12672 static struct symtab_and_line
12673 ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
12674 char **addr_string, const struct breakpoint_ops **ops)
12675 {
12676 const char *sym_name;
12677 struct symbol *sym;
12678
12679 /* First, find out which exception support info to use. */
12680 ada_exception_support_info_sniffer ();
12681
12682 /* Then lookup the function on which we will break in order to catch
12683 the Ada exceptions requested by the user. */
12684 sym_name = ada_exception_sym_name (ex);
12685 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12686
12687 /* We can assume that SYM is not NULL at this stage. If the symbol
12688 did not exist, ada_exception_support_info_sniffer would have
12689 raised an exception.
12690
12691 Also, ada_exception_support_info_sniffer should have already
12692 verified that SYM is a function symbol. */
12693 gdb_assert (sym != NULL);
12694 gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
12695
12696 /* Set ADDR_STRING. */
12697 *addr_string = xstrdup (sym_name);
12698
12699 /* Set OPS. */
12700 *ops = ada_exception_breakpoint_ops (ex);
12701
12702 return find_function_start_sal (sym, 1);
12703 }
12704
12705 /* Create an Ada exception catchpoint.
12706
12707 EX_KIND is the kind of exception catchpoint to be created.
12708
12709 If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12710 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
12711 of the exception to which this catchpoint applies. When not NULL,
12712 the string must be allocated on the heap, and its deallocation
12713 is no longer the responsibility of the caller.
12714
12715 COND_STRING, if not NULL, is the catchpoint condition. This string
12716 must be allocated on the heap, and its deallocation is no longer
12717 the responsibility of the caller.
12718
12719 TEMPFLAG, if nonzero, means that the underlying breakpoint
12720 should be temporary.
12721
12722 FROM_TTY is the usual argument passed to all commands implementations. */
12723
12724 void
12725 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
12726 enum ada_exception_catchpoint_kind ex_kind,
12727 char *excep_string,
12728 char *cond_string,
12729 int tempflag,
12730 int disabled,
12731 int from_tty)
12732 {
12733 struct ada_catchpoint *c;
12734 char *addr_string = NULL;
12735 const struct breakpoint_ops *ops = NULL;
12736 struct symtab_and_line sal
12737 = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
12738
12739 c = XNEW (struct ada_catchpoint);
12740 init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
12741 ops, tempflag, disabled, from_tty);
12742 c->excep_string = excep_string;
12743 create_excep_cond_exprs (c);
12744 if (cond_string != NULL)
12745 set_breakpoint_condition (&c->base, cond_string, from_tty);
12746 install_breakpoint (0, &c->base, 1);
12747 }
12748
12749 /* Implement the "catch exception" command. */
12750
12751 static void
12752 catch_ada_exception_command (char *arg, int from_tty,
12753 struct cmd_list_element *command)
12754 {
12755 struct gdbarch *gdbarch = get_current_arch ();
12756 int tempflag;
12757 enum ada_exception_catchpoint_kind ex_kind;
12758 char *excep_string = NULL;
12759 char *cond_string = NULL;
12760
12761 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12762
12763 if (!arg)
12764 arg = "";
12765 catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12766 &cond_string);
12767 create_ada_exception_catchpoint (gdbarch, ex_kind,
12768 excep_string, cond_string,
12769 tempflag, 1 /* enabled */,
12770 from_tty);
12771 }
12772
12773 /* Split the arguments specified in a "catch assert" command.
12774
12775 ARGS contains the command's arguments (or the empty string if
12776 no arguments were passed).
12777
12778 If ARGS contains a condition, set COND_STRING to that condition
12779 (the memory needs to be deallocated after use). */
12780
12781 static void
12782 catch_ada_assert_command_split (char *args, char **cond_string)
12783 {
12784 args = skip_spaces (args);
12785
12786 /* Check whether a condition was provided. */
12787 if (startswith (args, "if")
12788 && (isspace (args[2]) || args[2] == '\0'))
12789 {
12790 args += 2;
12791 args = skip_spaces (args);
12792 if (args[0] == '\0')
12793 error (_("condition missing after `if' keyword"));
12794 *cond_string = xstrdup (args);
12795 }
12796
12797 /* Otherwise, there should be no other argument at the end of
12798 the command. */
12799 else if (args[0] != '\0')
12800 error (_("Junk at end of arguments."));
12801 }
12802
12803 /* Implement the "catch assert" command. */
12804
12805 static void
12806 catch_assert_command (char *arg, int from_tty,
12807 struct cmd_list_element *command)
12808 {
12809 struct gdbarch *gdbarch = get_current_arch ();
12810 int tempflag;
12811 char *cond_string = NULL;
12812
12813 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12814
12815 if (!arg)
12816 arg = "";
12817 catch_ada_assert_command_split (arg, &cond_string);
12818 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
12819 NULL, cond_string,
12820 tempflag, 1 /* enabled */,
12821 from_tty);
12822 }
12823
12824 /* Return non-zero if the symbol SYM is an Ada exception object. */
12825
12826 static int
12827 ada_is_exception_sym (struct symbol *sym)
12828 {
12829 const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12830
12831 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12832 && SYMBOL_CLASS (sym) != LOC_BLOCK
12833 && SYMBOL_CLASS (sym) != LOC_CONST
12834 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12835 && type_name != NULL && strcmp (type_name, "exception") == 0);
12836 }
12837
12838 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12839 Ada exception object. This matches all exceptions except the ones
12840 defined by the Ada language. */
12841
12842 static int
12843 ada_is_non_standard_exception_sym (struct symbol *sym)
12844 {
12845 int i;
12846
12847 if (!ada_is_exception_sym (sym))
12848 return 0;
12849
12850 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12851 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12852 return 0; /* A standard exception. */
12853
12854 /* Numeric_Error is also a standard exception, so exclude it.
12855 See the STANDARD_EXC description for more details as to why
12856 this exception is not listed in that array. */
12857 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12858 return 0;
12859
12860 return 1;
12861 }
12862
12863 /* A helper function for qsort, comparing two struct ada_exc_info
12864 objects.
12865
12866 The comparison is determined first by exception name, and then
12867 by exception address. */
12868
12869 static int
12870 compare_ada_exception_info (const void *a, const void *b)
12871 {
12872 const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12873 const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12874 int result;
12875
12876 result = strcmp (exc_a->name, exc_b->name);
12877 if (result != 0)
12878 return result;
12879
12880 if (exc_a->addr < exc_b->addr)
12881 return -1;
12882 if (exc_a->addr > exc_b->addr)
12883 return 1;
12884
12885 return 0;
12886 }
12887
12888 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12889 routine, but keeping the first SKIP elements untouched.
12890
12891 All duplicates are also removed. */
12892
12893 static void
12894 sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12895 int skip)
12896 {
12897 struct ada_exc_info *to_sort
12898 = VEC_address (ada_exc_info, *exceptions) + skip;
12899 int to_sort_len
12900 = VEC_length (ada_exc_info, *exceptions) - skip;
12901 int i, j;
12902
12903 qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12904 compare_ada_exception_info);
12905
12906 for (i = 1, j = 1; i < to_sort_len; i++)
12907 if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12908 to_sort[j++] = to_sort[i];
12909 to_sort_len = j;
12910 VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12911 }
12912
12913 /* A function intended as the "name_matcher" callback in the struct
12914 quick_symbol_functions' expand_symtabs_matching method.
12915
12916 SEARCH_NAME is the symbol's search name.
12917
12918 If USER_DATA is not NULL, it is a pointer to a regext_t object
12919 used to match the symbol (by natural name). Otherwise, when USER_DATA
12920 is null, no filtering is performed, and all symbols are a positive
12921 match. */
12922
12923 static int
12924 ada_exc_search_name_matches (const char *search_name, void *user_data)
12925 {
12926 regex_t *preg = user_data;
12927
12928 if (preg == NULL)
12929 return 1;
12930
12931 /* In Ada, the symbol "search name" is a linkage name, whereas
12932 the regular expression used to do the matching refers to
12933 the natural name. So match against the decoded name. */
12934 return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12935 }
12936
12937 /* Add all exceptions defined by the Ada standard whose name match
12938 a regular expression.
12939
12940 If PREG is not NULL, then this regexp_t object is used to
12941 perform the symbol name matching. Otherwise, no name-based
12942 filtering is performed.
12943
12944 EXCEPTIONS is a vector of exceptions to which matching exceptions
12945 gets pushed. */
12946
12947 static void
12948 ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12949 {
12950 int i;
12951
12952 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12953 {
12954 if (preg == NULL
12955 || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12956 {
12957 struct bound_minimal_symbol msymbol
12958 = ada_lookup_simple_minsym (standard_exc[i]);
12959
12960 if (msymbol.minsym != NULL)
12961 {
12962 struct ada_exc_info info
12963 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
12964
12965 VEC_safe_push (ada_exc_info, *exceptions, &info);
12966 }
12967 }
12968 }
12969 }
12970
12971 /* Add all Ada exceptions defined locally and accessible from the given
12972 FRAME.
12973
12974 If PREG is not NULL, then this regexp_t object is used to
12975 perform the symbol name matching. Otherwise, no name-based
12976 filtering is performed.
12977
12978 EXCEPTIONS is a vector of exceptions to which matching exceptions
12979 gets pushed. */
12980
12981 static void
12982 ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12983 VEC(ada_exc_info) **exceptions)
12984 {
12985 const struct block *block = get_frame_block (frame, 0);
12986
12987 while (block != 0)
12988 {
12989 struct block_iterator iter;
12990 struct symbol *sym;
12991
12992 ALL_BLOCK_SYMBOLS (block, iter, sym)
12993 {
12994 switch (SYMBOL_CLASS (sym))
12995 {
12996 case LOC_TYPEDEF:
12997 case LOC_BLOCK:
12998 case LOC_CONST:
12999 break;
13000 default:
13001 if (ada_is_exception_sym (sym))
13002 {
13003 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
13004 SYMBOL_VALUE_ADDRESS (sym)};
13005
13006 VEC_safe_push (ada_exc_info, *exceptions, &info);
13007 }
13008 }
13009 }
13010 if (BLOCK_FUNCTION (block) != NULL)
13011 break;
13012 block = BLOCK_SUPERBLOCK (block);
13013 }
13014 }
13015
13016 /* Add all exceptions defined globally whose name name match
13017 a regular expression, excluding standard exceptions.
13018
13019 The reason we exclude standard exceptions is that they need
13020 to be handled separately: Standard exceptions are defined inside
13021 a runtime unit which is normally not compiled with debugging info,
13022 and thus usually do not show up in our symbol search. However,
13023 if the unit was in fact built with debugging info, we need to
13024 exclude them because they would duplicate the entry we found
13025 during the special loop that specifically searches for those
13026 standard exceptions.
13027
13028 If PREG is not NULL, then this regexp_t object is used to
13029 perform the symbol name matching. Otherwise, no name-based
13030 filtering is performed.
13031
13032 EXCEPTIONS is a vector of exceptions to which matching exceptions
13033 gets pushed. */
13034
13035 static void
13036 ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13037 {
13038 struct objfile *objfile;
13039 struct compunit_symtab *s;
13040
13041 expand_symtabs_matching (NULL, ada_exc_search_name_matches, NULL,
13042 VARIABLES_DOMAIN, preg);
13043
13044 ALL_COMPUNITS (objfile, s)
13045 {
13046 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13047 int i;
13048
13049 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13050 {
13051 struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13052 struct block_iterator iter;
13053 struct symbol *sym;
13054
13055 ALL_BLOCK_SYMBOLS (b, iter, sym)
13056 if (ada_is_non_standard_exception_sym (sym)
13057 && (preg == NULL
13058 || regexec (preg, SYMBOL_NATURAL_NAME (sym),
13059 0, NULL, 0) == 0))
13060 {
13061 struct ada_exc_info info
13062 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13063
13064 VEC_safe_push (ada_exc_info, *exceptions, &info);
13065 }
13066 }
13067 }
13068 }
13069
13070 /* Implements ada_exceptions_list with the regular expression passed
13071 as a regex_t, rather than a string.
13072
13073 If not NULL, PREG is used to filter out exceptions whose names
13074 do not match. Otherwise, all exceptions are listed. */
13075
13076 static VEC(ada_exc_info) *
13077 ada_exceptions_list_1 (regex_t *preg)
13078 {
13079 VEC(ada_exc_info) *result = NULL;
13080 struct cleanup *old_chain
13081 = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13082 int prev_len;
13083
13084 /* First, list the known standard exceptions. These exceptions
13085 need to be handled separately, as they are usually defined in
13086 runtime units that have been compiled without debugging info. */
13087
13088 ada_add_standard_exceptions (preg, &result);
13089
13090 /* Next, find all exceptions whose scope is local and accessible
13091 from the currently selected frame. */
13092
13093 if (has_stack_frames ())
13094 {
13095 prev_len = VEC_length (ada_exc_info, result);
13096 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13097 &result);
13098 if (VEC_length (ada_exc_info, result) > prev_len)
13099 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13100 }
13101
13102 /* Add all exceptions whose scope is global. */
13103
13104 prev_len = VEC_length (ada_exc_info, result);
13105 ada_add_global_exceptions (preg, &result);
13106 if (VEC_length (ada_exc_info, result) > prev_len)
13107 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13108
13109 discard_cleanups (old_chain);
13110 return result;
13111 }
13112
13113 /* Return a vector of ada_exc_info.
13114
13115 If REGEXP is NULL, all exceptions are included in the result.
13116 Otherwise, it should contain a valid regular expression,
13117 and only the exceptions whose names match that regular expression
13118 are included in the result.
13119
13120 The exceptions are sorted in the following order:
13121 - Standard exceptions (defined by the Ada language), in
13122 alphabetical order;
13123 - Exceptions only visible from the current frame, in
13124 alphabetical order;
13125 - Exceptions whose scope is global, in alphabetical order. */
13126
13127 VEC(ada_exc_info) *
13128 ada_exceptions_list (const char *regexp)
13129 {
13130 VEC(ada_exc_info) *result = NULL;
13131 struct cleanup *old_chain = NULL;
13132 regex_t reg;
13133
13134 if (regexp != NULL)
13135 old_chain = compile_rx_or_error (&reg, regexp,
13136 _("invalid regular expression"));
13137
13138 result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
13139
13140 if (old_chain != NULL)
13141 do_cleanups (old_chain);
13142 return result;
13143 }
13144
13145 /* Implement the "info exceptions" command. */
13146
13147 static void
13148 info_exceptions_command (char *regexp, int from_tty)
13149 {
13150 VEC(ada_exc_info) *exceptions;
13151 struct cleanup *cleanup;
13152 struct gdbarch *gdbarch = get_current_arch ();
13153 int ix;
13154 struct ada_exc_info *info;
13155
13156 exceptions = ada_exceptions_list (regexp);
13157 cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13158
13159 if (regexp != NULL)
13160 printf_filtered
13161 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13162 else
13163 printf_filtered (_("All defined Ada exceptions:\n"));
13164
13165 for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13166 printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13167
13168 do_cleanups (cleanup);
13169 }
13170
13171 /* Operators */
13172 /* Information about operators given special treatment in functions
13173 below. */
13174 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13175
13176 #define ADA_OPERATORS \
13177 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13178 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13179 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13180 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13181 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13182 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13183 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13184 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13185 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13186 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13187 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13188 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13189 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13190 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13191 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
13192 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13193 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13194 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13195 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
13196
13197 static void
13198 ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13199 int *argsp)
13200 {
13201 switch (exp->elts[pc - 1].opcode)
13202 {
13203 default:
13204 operator_length_standard (exp, pc, oplenp, argsp);
13205 break;
13206
13207 #define OP_DEFN(op, len, args, binop) \
13208 case op: *oplenp = len; *argsp = args; break;
13209 ADA_OPERATORS;
13210 #undef OP_DEFN
13211
13212 case OP_AGGREGATE:
13213 *oplenp = 3;
13214 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13215 break;
13216
13217 case OP_CHOICES:
13218 *oplenp = 3;
13219 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13220 break;
13221 }
13222 }
13223
13224 /* Implementation of the exp_descriptor method operator_check. */
13225
13226 static int
13227 ada_operator_check (struct expression *exp, int pos,
13228 int (*objfile_func) (struct objfile *objfile, void *data),
13229 void *data)
13230 {
13231 const union exp_element *const elts = exp->elts;
13232 struct type *type = NULL;
13233
13234 switch (elts[pos].opcode)
13235 {
13236 case UNOP_IN_RANGE:
13237 case UNOP_QUAL:
13238 type = elts[pos + 1].type;
13239 break;
13240
13241 default:
13242 return operator_check_standard (exp, pos, objfile_func, data);
13243 }
13244
13245 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13246
13247 if (type && TYPE_OBJFILE (type)
13248 && (*objfile_func) (TYPE_OBJFILE (type), data))
13249 return 1;
13250
13251 return 0;
13252 }
13253
13254 static char *
13255 ada_op_name (enum exp_opcode opcode)
13256 {
13257 switch (opcode)
13258 {
13259 default:
13260 return op_name_standard (opcode);
13261
13262 #define OP_DEFN(op, len, args, binop) case op: return #op;
13263 ADA_OPERATORS;
13264 #undef OP_DEFN
13265
13266 case OP_AGGREGATE:
13267 return "OP_AGGREGATE";
13268 case OP_CHOICES:
13269 return "OP_CHOICES";
13270 case OP_NAME:
13271 return "OP_NAME";
13272 }
13273 }
13274
13275 /* As for operator_length, but assumes PC is pointing at the first
13276 element of the operator, and gives meaningful results only for the
13277 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
13278
13279 static void
13280 ada_forward_operator_length (struct expression *exp, int pc,
13281 int *oplenp, int *argsp)
13282 {
13283 switch (exp->elts[pc].opcode)
13284 {
13285 default:
13286 *oplenp = *argsp = 0;
13287 break;
13288
13289 #define OP_DEFN(op, len, args, binop) \
13290 case op: *oplenp = len; *argsp = args; break;
13291 ADA_OPERATORS;
13292 #undef OP_DEFN
13293
13294 case OP_AGGREGATE:
13295 *oplenp = 3;
13296 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13297 break;
13298
13299 case OP_CHOICES:
13300 *oplenp = 3;
13301 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13302 break;
13303
13304 case OP_STRING:
13305 case OP_NAME:
13306 {
13307 int len = longest_to_int (exp->elts[pc + 1].longconst);
13308
13309 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13310 *argsp = 0;
13311 break;
13312 }
13313 }
13314 }
13315
13316 static int
13317 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13318 {
13319 enum exp_opcode op = exp->elts[elt].opcode;
13320 int oplen, nargs;
13321 int pc = elt;
13322 int i;
13323
13324 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13325
13326 switch (op)
13327 {
13328 /* Ada attributes ('Foo). */
13329 case OP_ATR_FIRST:
13330 case OP_ATR_LAST:
13331 case OP_ATR_LENGTH:
13332 case OP_ATR_IMAGE:
13333 case OP_ATR_MAX:
13334 case OP_ATR_MIN:
13335 case OP_ATR_MODULUS:
13336 case OP_ATR_POS:
13337 case OP_ATR_SIZE:
13338 case OP_ATR_TAG:
13339 case OP_ATR_VAL:
13340 break;
13341
13342 case UNOP_IN_RANGE:
13343 case UNOP_QUAL:
13344 /* XXX: gdb_sprint_host_address, type_sprint */
13345 fprintf_filtered (stream, _("Type @"));
13346 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13347 fprintf_filtered (stream, " (");
13348 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13349 fprintf_filtered (stream, ")");
13350 break;
13351 case BINOP_IN_BOUNDS:
13352 fprintf_filtered (stream, " (%d)",
13353 longest_to_int (exp->elts[pc + 2].longconst));
13354 break;
13355 case TERNOP_IN_RANGE:
13356 break;
13357
13358 case OP_AGGREGATE:
13359 case OP_OTHERS:
13360 case OP_DISCRETE_RANGE:
13361 case OP_POSITIONAL:
13362 case OP_CHOICES:
13363 break;
13364
13365 case OP_NAME:
13366 case OP_STRING:
13367 {
13368 char *name = &exp->elts[elt + 2].string;
13369 int len = longest_to_int (exp->elts[elt + 1].longconst);
13370
13371 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13372 break;
13373 }
13374
13375 default:
13376 return dump_subexp_body_standard (exp, stream, elt);
13377 }
13378
13379 elt += oplen;
13380 for (i = 0; i < nargs; i += 1)
13381 elt = dump_subexp (exp, stream, elt);
13382
13383 return elt;
13384 }
13385
13386 /* The Ada extension of print_subexp (q.v.). */
13387
13388 static void
13389 ada_print_subexp (struct expression *exp, int *pos,
13390 struct ui_file *stream, enum precedence prec)
13391 {
13392 int oplen, nargs, i;
13393 int pc = *pos;
13394 enum exp_opcode op = exp->elts[pc].opcode;
13395
13396 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13397
13398 *pos += oplen;
13399 switch (op)
13400 {
13401 default:
13402 *pos -= oplen;
13403 print_subexp_standard (exp, pos, stream, prec);
13404 return;
13405
13406 case OP_VAR_VALUE:
13407 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13408 return;
13409
13410 case BINOP_IN_BOUNDS:
13411 /* XXX: sprint_subexp */
13412 print_subexp (exp, pos, stream, PREC_SUFFIX);
13413 fputs_filtered (" in ", stream);
13414 print_subexp (exp, pos, stream, PREC_SUFFIX);
13415 fputs_filtered ("'range", stream);
13416 if (exp->elts[pc + 1].longconst > 1)
13417 fprintf_filtered (stream, "(%ld)",
13418 (long) exp->elts[pc + 1].longconst);
13419 return;
13420
13421 case TERNOP_IN_RANGE:
13422 if (prec >= PREC_EQUAL)
13423 fputs_filtered ("(", stream);
13424 /* XXX: sprint_subexp */
13425 print_subexp (exp, pos, stream, PREC_SUFFIX);
13426 fputs_filtered (" in ", stream);
13427 print_subexp (exp, pos, stream, PREC_EQUAL);
13428 fputs_filtered (" .. ", stream);
13429 print_subexp (exp, pos, stream, PREC_EQUAL);
13430 if (prec >= PREC_EQUAL)
13431 fputs_filtered (")", stream);
13432 return;
13433
13434 case OP_ATR_FIRST:
13435 case OP_ATR_LAST:
13436 case OP_ATR_LENGTH:
13437 case OP_ATR_IMAGE:
13438 case OP_ATR_MAX:
13439 case OP_ATR_MIN:
13440 case OP_ATR_MODULUS:
13441 case OP_ATR_POS:
13442 case OP_ATR_SIZE:
13443 case OP_ATR_TAG:
13444 case OP_ATR_VAL:
13445 if (exp->elts[*pos].opcode == OP_TYPE)
13446 {
13447 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
13448 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13449 &type_print_raw_options);
13450 *pos += 3;
13451 }
13452 else
13453 print_subexp (exp, pos, stream, PREC_SUFFIX);
13454 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13455 if (nargs > 1)
13456 {
13457 int tem;
13458
13459 for (tem = 1; tem < nargs; tem += 1)
13460 {
13461 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13462 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13463 }
13464 fputs_filtered (")", stream);
13465 }
13466 return;
13467
13468 case UNOP_QUAL:
13469 type_print (exp->elts[pc + 1].type, "", stream, 0);
13470 fputs_filtered ("'(", stream);
13471 print_subexp (exp, pos, stream, PREC_PREFIX);
13472 fputs_filtered (")", stream);
13473 return;
13474
13475 case UNOP_IN_RANGE:
13476 /* XXX: sprint_subexp */
13477 print_subexp (exp, pos, stream, PREC_SUFFIX);
13478 fputs_filtered (" in ", stream);
13479 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13480 &type_print_raw_options);
13481 return;
13482
13483 case OP_DISCRETE_RANGE:
13484 print_subexp (exp, pos, stream, PREC_SUFFIX);
13485 fputs_filtered ("..", stream);
13486 print_subexp (exp, pos, stream, PREC_SUFFIX);
13487 return;
13488
13489 case OP_OTHERS:
13490 fputs_filtered ("others => ", stream);
13491 print_subexp (exp, pos, stream, PREC_SUFFIX);
13492 return;
13493
13494 case OP_CHOICES:
13495 for (i = 0; i < nargs-1; i += 1)
13496 {
13497 if (i > 0)
13498 fputs_filtered ("|", stream);
13499 print_subexp (exp, pos, stream, PREC_SUFFIX);
13500 }
13501 fputs_filtered (" => ", stream);
13502 print_subexp (exp, pos, stream, PREC_SUFFIX);
13503 return;
13504
13505 case OP_POSITIONAL:
13506 print_subexp (exp, pos, stream, PREC_SUFFIX);
13507 return;
13508
13509 case OP_AGGREGATE:
13510 fputs_filtered ("(", stream);
13511 for (i = 0; i < nargs; i += 1)
13512 {
13513 if (i > 0)
13514 fputs_filtered (", ", stream);
13515 print_subexp (exp, pos, stream, PREC_SUFFIX);
13516 }
13517 fputs_filtered (")", stream);
13518 return;
13519 }
13520 }
13521
13522 /* Table mapping opcodes into strings for printing operators
13523 and precedences of the operators. */
13524
13525 static const struct op_print ada_op_print_tab[] = {
13526 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13527 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13528 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13529 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13530 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13531 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13532 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13533 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13534 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13535 {">=", BINOP_GEQ, PREC_ORDER, 0},
13536 {">", BINOP_GTR, PREC_ORDER, 0},
13537 {"<", BINOP_LESS, PREC_ORDER, 0},
13538 {">>", BINOP_RSH, PREC_SHIFT, 0},
13539 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13540 {"+", BINOP_ADD, PREC_ADD, 0},
13541 {"-", BINOP_SUB, PREC_ADD, 0},
13542 {"&", BINOP_CONCAT, PREC_ADD, 0},
13543 {"*", BINOP_MUL, PREC_MUL, 0},
13544 {"/", BINOP_DIV, PREC_MUL, 0},
13545 {"rem", BINOP_REM, PREC_MUL, 0},
13546 {"mod", BINOP_MOD, PREC_MUL, 0},
13547 {"**", BINOP_EXP, PREC_REPEAT, 0},
13548 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13549 {"-", UNOP_NEG, PREC_PREFIX, 0},
13550 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13551 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13552 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13553 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
13554 {".all", UNOP_IND, PREC_SUFFIX, 1},
13555 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13556 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
13557 {NULL, 0, 0, 0}
13558 };
13559 \f
13560 enum ada_primitive_types {
13561 ada_primitive_type_int,
13562 ada_primitive_type_long,
13563 ada_primitive_type_short,
13564 ada_primitive_type_char,
13565 ada_primitive_type_float,
13566 ada_primitive_type_double,
13567 ada_primitive_type_void,
13568 ada_primitive_type_long_long,
13569 ada_primitive_type_long_double,
13570 ada_primitive_type_natural,
13571 ada_primitive_type_positive,
13572 ada_primitive_type_system_address,
13573 nr_ada_primitive_types
13574 };
13575
13576 static void
13577 ada_language_arch_info (struct gdbarch *gdbarch,
13578 struct language_arch_info *lai)
13579 {
13580 const struct builtin_type *builtin = builtin_type (gdbarch);
13581
13582 lai->primitive_type_vector
13583 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
13584 struct type *);
13585
13586 lai->primitive_type_vector [ada_primitive_type_int]
13587 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13588 0, "integer");
13589 lai->primitive_type_vector [ada_primitive_type_long]
13590 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13591 0, "long_integer");
13592 lai->primitive_type_vector [ada_primitive_type_short]
13593 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13594 0, "short_integer");
13595 lai->string_char_type
13596 = lai->primitive_type_vector [ada_primitive_type_char]
13597 = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13598 lai->primitive_type_vector [ada_primitive_type_float]
13599 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13600 "float", NULL);
13601 lai->primitive_type_vector [ada_primitive_type_double]
13602 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13603 "long_float", NULL);
13604 lai->primitive_type_vector [ada_primitive_type_long_long]
13605 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13606 0, "long_long_integer");
13607 lai->primitive_type_vector [ada_primitive_type_long_double]
13608 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13609 "long_long_float", NULL);
13610 lai->primitive_type_vector [ada_primitive_type_natural]
13611 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13612 0, "natural");
13613 lai->primitive_type_vector [ada_primitive_type_positive]
13614 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13615 0, "positive");
13616 lai->primitive_type_vector [ada_primitive_type_void]
13617 = builtin->builtin_void;
13618
13619 lai->primitive_type_vector [ada_primitive_type_system_address]
13620 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
13621 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13622 = "system__address";
13623
13624 lai->bool_type_symbol = NULL;
13625 lai->bool_type_default = builtin->builtin_bool;
13626 }
13627 \f
13628 /* Language vector */
13629
13630 /* Not really used, but needed in the ada_language_defn. */
13631
13632 static void
13633 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
13634 {
13635 ada_emit_char (c, type, stream, quoter, 1);
13636 }
13637
13638 static int
13639 parse (struct parser_state *ps)
13640 {
13641 warnings_issued = 0;
13642 return ada_parse (ps);
13643 }
13644
13645 static const struct exp_descriptor ada_exp_descriptor = {
13646 ada_print_subexp,
13647 ada_operator_length,
13648 ada_operator_check,
13649 ada_op_name,
13650 ada_dump_subexp_body,
13651 ada_evaluate_subexp
13652 };
13653
13654 /* Implement the "la_get_symbol_name_cmp" language_defn method
13655 for Ada. */
13656
13657 static symbol_name_cmp_ftype
13658 ada_get_symbol_name_cmp (const char *lookup_name)
13659 {
13660 if (should_use_wild_match (lookup_name))
13661 return wild_match;
13662 else
13663 return compare_names;
13664 }
13665
13666 /* Implement the "la_read_var_value" language_defn method for Ada. */
13667
13668 static struct value *
13669 ada_read_var_value (struct symbol *var, struct frame_info *frame)
13670 {
13671 const struct block *frame_block = NULL;
13672 struct symbol *renaming_sym = NULL;
13673
13674 /* The only case where default_read_var_value is not sufficient
13675 is when VAR is a renaming... */
13676 if (frame)
13677 frame_block = get_frame_block (frame, NULL);
13678 if (frame_block)
13679 renaming_sym = ada_find_renaming_symbol (var, frame_block);
13680 if (renaming_sym != NULL)
13681 return ada_read_renaming_var_value (renaming_sym, frame_block);
13682
13683 /* This is a typical case where we expect the default_read_var_value
13684 function to work. */
13685 return default_read_var_value (var, frame);
13686 }
13687
13688 const struct language_defn ada_language_defn = {
13689 "ada", /* Language name */
13690 "Ada",
13691 language_ada,
13692 range_check_off,
13693 case_sensitive_on, /* Yes, Ada is case-insensitive, but
13694 that's not quite what this means. */
13695 array_row_major,
13696 macro_expansion_no,
13697 &ada_exp_descriptor,
13698 parse,
13699 ada_error,
13700 resolve,
13701 ada_printchar, /* Print a character constant */
13702 ada_printstr, /* Function to print string constant */
13703 emit_char, /* Function to print single char (not used) */
13704 ada_print_type, /* Print a type using appropriate syntax */
13705 ada_print_typedef, /* Print a typedef using appropriate syntax */
13706 ada_val_print, /* Print a value using appropriate syntax */
13707 ada_value_print, /* Print a top-level value */
13708 ada_read_var_value, /* la_read_var_value */
13709 NULL, /* Language specific skip_trampoline */
13710 NULL, /* name_of_this */
13711 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
13712 basic_lookup_transparent_type, /* lookup_transparent_type */
13713 ada_la_decode, /* Language specific symbol demangler */
13714 NULL, /* Language specific
13715 class_name_from_physname */
13716 ada_op_print_tab, /* expression operators for printing */
13717 0, /* c-style arrays */
13718 1, /* String lower bound */
13719 ada_get_gdb_completer_word_break_characters,
13720 ada_make_symbol_completion_list,
13721 ada_language_arch_info,
13722 ada_print_array_index,
13723 default_pass_by_reference,
13724 c_get_string,
13725 ada_get_symbol_name_cmp, /* la_get_symbol_name_cmp */
13726 ada_iterate_over_symbols,
13727 &ada_varobj_ops,
13728 NULL,
13729 NULL,
13730 LANG_MAGIC
13731 };
13732
13733 /* Provide a prototype to silence -Wmissing-prototypes. */
13734 extern initialize_file_ftype _initialize_ada_language;
13735
13736 /* Command-list for the "set/show ada" prefix command. */
13737 static struct cmd_list_element *set_ada_list;
13738 static struct cmd_list_element *show_ada_list;
13739
13740 /* Implement the "set ada" prefix command. */
13741
13742 static void
13743 set_ada_command (char *arg, int from_tty)
13744 {
13745 printf_unfiltered (_(\
13746 "\"set ada\" must be followed by the name of a setting.\n"));
13747 help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
13748 }
13749
13750 /* Implement the "show ada" prefix command. */
13751
13752 static void
13753 show_ada_command (char *args, int from_tty)
13754 {
13755 cmd_show_list (show_ada_list, from_tty, "");
13756 }
13757
13758 static void
13759 initialize_ada_catchpoint_ops (void)
13760 {
13761 struct breakpoint_ops *ops;
13762
13763 initialize_breakpoint_ops ();
13764
13765 ops = &catch_exception_breakpoint_ops;
13766 *ops = bkpt_breakpoint_ops;
13767 ops->dtor = dtor_catch_exception;
13768 ops->allocate_location = allocate_location_catch_exception;
13769 ops->re_set = re_set_catch_exception;
13770 ops->check_status = check_status_catch_exception;
13771 ops->print_it = print_it_catch_exception;
13772 ops->print_one = print_one_catch_exception;
13773 ops->print_mention = print_mention_catch_exception;
13774 ops->print_recreate = print_recreate_catch_exception;
13775
13776 ops = &catch_exception_unhandled_breakpoint_ops;
13777 *ops = bkpt_breakpoint_ops;
13778 ops->dtor = dtor_catch_exception_unhandled;
13779 ops->allocate_location = allocate_location_catch_exception_unhandled;
13780 ops->re_set = re_set_catch_exception_unhandled;
13781 ops->check_status = check_status_catch_exception_unhandled;
13782 ops->print_it = print_it_catch_exception_unhandled;
13783 ops->print_one = print_one_catch_exception_unhandled;
13784 ops->print_mention = print_mention_catch_exception_unhandled;
13785 ops->print_recreate = print_recreate_catch_exception_unhandled;
13786
13787 ops = &catch_assert_breakpoint_ops;
13788 *ops = bkpt_breakpoint_ops;
13789 ops->dtor = dtor_catch_assert;
13790 ops->allocate_location = allocate_location_catch_assert;
13791 ops->re_set = re_set_catch_assert;
13792 ops->check_status = check_status_catch_assert;
13793 ops->print_it = print_it_catch_assert;
13794 ops->print_one = print_one_catch_assert;
13795 ops->print_mention = print_mention_catch_assert;
13796 ops->print_recreate = print_recreate_catch_assert;
13797 }
13798
13799 /* This module's 'new_objfile' observer. */
13800
13801 static void
13802 ada_new_objfile_observer (struct objfile *objfile)
13803 {
13804 ada_clear_symbol_cache ();
13805 }
13806
13807 /* This module's 'free_objfile' observer. */
13808
13809 static void
13810 ada_free_objfile_observer (struct objfile *objfile)
13811 {
13812 ada_clear_symbol_cache ();
13813 }
13814
13815 void
13816 _initialize_ada_language (void)
13817 {
13818 add_language (&ada_language_defn);
13819
13820 initialize_ada_catchpoint_ops ();
13821
13822 add_prefix_cmd ("ada", no_class, set_ada_command,
13823 _("Prefix command for changing Ada-specfic settings"),
13824 &set_ada_list, "set ada ", 0, &setlist);
13825
13826 add_prefix_cmd ("ada", no_class, show_ada_command,
13827 _("Generic command for showing Ada-specific settings."),
13828 &show_ada_list, "show ada ", 0, &showlist);
13829
13830 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13831 &trust_pad_over_xvs, _("\
13832 Enable or disable an optimization trusting PAD types over XVS types"), _("\
13833 Show whether an optimization trusting PAD types over XVS types is activated"),
13834 _("\
13835 This is related to the encoding used by the GNAT compiler. The debugger\n\
13836 should normally trust the contents of PAD types, but certain older versions\n\
13837 of GNAT have a bug that sometimes causes the information in the PAD type\n\
13838 to be incorrect. Turning this setting \"off\" allows the debugger to\n\
13839 work around this bug. It is always safe to turn this option \"off\", but\n\
13840 this incurs a slight performance penalty, so it is recommended to NOT change\n\
13841 this option to \"off\" unless necessary."),
13842 NULL, NULL, &set_ada_list, &show_ada_list);
13843
13844 add_catch_command ("exception", _("\
13845 Catch Ada exceptions, when raised.\n\
13846 With an argument, catch only exceptions with the given name."),
13847 catch_ada_exception_command,
13848 NULL,
13849 CATCH_PERMANENT,
13850 CATCH_TEMPORARY);
13851 add_catch_command ("assert", _("\
13852 Catch failed Ada assertions, when raised.\n\
13853 With an argument, catch only exceptions with the given name."),
13854 catch_assert_command,
13855 NULL,
13856 CATCH_PERMANENT,
13857 CATCH_TEMPORARY);
13858
13859 varsize_limit = 65536;
13860
13861 add_info ("exceptions", info_exceptions_command,
13862 _("\
13863 List all Ada exception names.\n\
13864 If a regular expression is passed as an argument, only those matching\n\
13865 the regular expression are listed."));
13866
13867 add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13868 _("Set Ada maintenance-related variables."),
13869 &maint_set_ada_cmdlist, "maintenance set ada ",
13870 0/*allow-unknown*/, &maintenance_set_cmdlist);
13871
13872 add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13873 _("Show Ada maintenance-related variables"),
13874 &maint_show_ada_cmdlist, "maintenance show ada ",
13875 0/*allow-unknown*/, &maintenance_show_cmdlist);
13876
13877 add_setshow_boolean_cmd
13878 ("ignore-descriptive-types", class_maintenance,
13879 &ada_ignore_descriptive_types_p,
13880 _("Set whether descriptive types generated by GNAT should be ignored."),
13881 _("Show whether descriptive types generated by GNAT should be ignored."),
13882 _("\
13883 When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13884 DWARF attribute."),
13885 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13886
13887 obstack_init (&symbol_list_obstack);
13888
13889 decoded_names_store = htab_create_alloc
13890 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13891 NULL, xcalloc, xfree);
13892
13893 /* The ada-lang observers. */
13894 observer_attach_new_objfile (ada_new_objfile_observer);
13895 observer_attach_free_objfile (ada_free_objfile_observer);
13896 observer_attach_inferior_exit (ada_inferior_exit);
13897
13898 /* Setup various context-specific data. */
13899 ada_inferior_data
13900 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
13901 ada_pspace_data_handle
13902 = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
13903 }
This page took 0.351994 seconds and 4 git commands to generate.