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