]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
Add support reading D modules from DWARF
[thirdparty/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
32d0add0 3 Copyright (C) 1992-2015 Free Software Foundation, Inc.
14f9c5c9 4
a9762ec7 5 This file is part of GDB.
14f9c5c9 6
a9762ec7
JB
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
14f9c5c9 11
a9762ec7
JB
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
14f9c5c9 16
a9762ec7
JB
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
14f9c5c9 19
96d887e8 20
4c4b4cd2 21#include "defs.h"
14f9c5c9 22#include <ctype.h>
14f9c5c9 23#include "demangle.h"
4c4b4cd2
PH
24#include "gdb_regex.h"
25#include "frame.h"
14f9c5c9
AS
26#include "symtab.h"
27#include "gdbtypes.h"
28#include "gdbcmd.h"
29#include "expression.h"
30#include "parser-defs.h"
31#include "language.h"
a53b64ea 32#include "varobj.h"
14f9c5c9
AS
33#include "c-lang.h"
34#include "inferior.h"
35#include "symfile.h"
36#include "objfiles.h"
37#include "breakpoint.h"
38#include "gdbcore.h"
4c4b4cd2
PH
39#include "hashtab.h"
40#include "gdb_obstack.h"
14f9c5c9 41#include "ada-lang.h"
4c4b4cd2 42#include "completer.h"
53ce3c39 43#include <sys/stat.h>
14f9c5c9 44#include "ui-out.h"
fe898f56 45#include "block.h"
04714b91 46#include "infcall.h"
de4f826b 47#include "dictionary.h"
f7f9143b
JB
48#include "annotate.h"
49#include "valprint.h"
9bbc9174 50#include "source.h"
0259addd 51#include "observer.h"
2ba95b9b 52#include "vec.h"
692465f1 53#include "stack.h"
fa864999 54#include "gdb_vecs.h"
79d43c61 55#include "typeprint.h"
14f9c5c9 56
ccefe4c4 57#include "psymtab.h"
40bc484c 58#include "value.h"
956a9fb9 59#include "mi/mi-common.h"
9ac4176b 60#include "arch-utils.h"
0fcd72ba 61#include "cli/cli-utils.h"
ccefe4c4 62
4c4b4cd2 63/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 64 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
65 Copied from valarith.c. */
66
67#ifndef TRUNCATION_TOWARDS_ZERO
68#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
69#endif
70
d2e4a39e 71static struct type *desc_base_type (struct type *);
14f9c5c9 72
d2e4a39e 73static struct type *desc_bounds_type (struct type *);
14f9c5c9 74
d2e4a39e 75static struct value *desc_bounds (struct value *);
14f9c5c9 76
d2e4a39e 77static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 78
d2e4a39e 79static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 80
556bdfd4 81static struct type *desc_data_target_type (struct type *);
14f9c5c9 82
d2e4a39e 83static struct value *desc_data (struct value *);
14f9c5c9 84
d2e4a39e 85static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 86
d2e4a39e 87static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 88
d2e4a39e 89static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 90
d2e4a39e 91static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 92
d2e4a39e 93static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 94
d2e4a39e 95static struct type *desc_index_type (struct type *, int);
14f9c5c9 96
d2e4a39e 97static int desc_arity (struct type *);
14f9c5c9 98
d2e4a39e 99static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 100
d2e4a39e 101static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 102
40658b94
PH
103static int full_match (const char *, const char *);
104
40bc484c 105static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 106
4c4b4cd2 107static void ada_add_block_symbols (struct obstack *,
f0c5f9b2 108 const struct block *, const char *,
2570f2b7 109 domain_enum, struct objfile *, int);
14f9c5c9 110
4c4b4cd2 111static int is_nonfunction (struct ada_symbol_info *, int);
14f9c5c9 112
76a01679 113static void add_defn_to_vec (struct obstack *, struct symbol *,
f0c5f9b2 114 const struct block *);
14f9c5c9 115
4c4b4cd2
PH
116static int num_defns_collected (struct obstack *);
117
118static struct ada_symbol_info *defns_collected (struct obstack *, int);
14f9c5c9 119
4c4b4cd2 120static struct value *resolve_subexp (struct expression **, int *, int,
76a01679 121 struct type *);
14f9c5c9 122
d2e4a39e 123static void replace_operator_with_call (struct expression **, int, int, int,
270140bd 124 struct symbol *, const struct block *);
14f9c5c9 125
d2e4a39e 126static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 127
4c4b4cd2
PH
128static char *ada_op_name (enum exp_opcode);
129
130static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 131
d2e4a39e 132static int numeric_type_p (struct type *);
14f9c5c9 133
d2e4a39e 134static int integer_type_p (struct type *);
14f9c5c9 135
d2e4a39e 136static int scalar_type_p (struct type *);
14f9c5c9 137
d2e4a39e 138static int discrete_type_p (struct type *);
14f9c5c9 139
aeb5907d
JB
140static enum ada_renaming_category parse_old_style_renaming (struct type *,
141 const char **,
142 int *,
143 const char **);
144
145static struct symbol *find_old_style_renaming_symbol (const char *,
270140bd 146 const struct block *);
aeb5907d 147
4c4b4cd2 148static struct type *ada_lookup_struct_elt_type (struct type *, char *,
76a01679 149 int, int, int *);
4c4b4cd2 150
d2e4a39e 151static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 152
b4ba55a1
JB
153static struct type *ada_find_parallel_type_with_name (struct type *,
154 const char *);
155
d2e4a39e 156static int is_dynamic_field (struct type *, int);
14f9c5c9 157
10a2c479 158static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 159 const gdb_byte *,
4c4b4cd2
PH
160 CORE_ADDR, struct value *);
161
162static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 163
28c85d6c 164static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 165
d2e4a39e 166static struct type *to_static_fixed_type (struct type *);
f192137b 167static struct type *static_unwrap_type (struct type *type);
14f9c5c9 168
d2e4a39e 169static struct value *unwrap_value (struct value *);
14f9c5c9 170
ad82864c 171static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 172
ad82864c 173static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 174
ad82864c
JB
175static long decode_packed_array_bitsize (struct type *);
176
177static struct value *decode_constrained_packed_array (struct value *);
178
179static int ada_is_packed_array_type (struct type *);
180
181static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 182
d2e4a39e 183static struct value *value_subscript_packed (struct value *, int,
4c4b4cd2 184 struct value **);
14f9c5c9 185
50810684 186static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
52ce6436 187
4c4b4cd2
PH
188static struct value *coerce_unspec_val_to_type (struct value *,
189 struct type *);
14f9c5c9 190
d2e4a39e 191static struct value *get_var_value (char *, char *);
14f9c5c9 192
d2e4a39e 193static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 194
d2e4a39e 195static int equiv_types (struct type *, struct type *);
14f9c5c9 196
d2e4a39e 197static int is_name_suffix (const char *);
14f9c5c9 198
73589123
PH
199static int advance_wild_match (const char **, const char *, int);
200
201static int wild_match (const char *, const char *);
14f9c5c9 202
d2e4a39e 203static struct value *ada_coerce_ref (struct value *);
14f9c5c9 204
4c4b4cd2
PH
205static LONGEST pos_atr (struct value *);
206
3cb382c9 207static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 208
d2e4a39e 209static struct value *value_val_atr (struct type *, struct value *);
14f9c5c9 210
4c4b4cd2
PH
211static struct symbol *standard_lookup (const char *, const struct block *,
212 domain_enum);
14f9c5c9 213
4c4b4cd2
PH
214static struct value *ada_search_struct_field (char *, struct value *, int,
215 struct type *);
216
217static struct value *ada_value_primitive_field (struct value *, int, int,
218 struct type *);
219
0d5cff50 220static int find_struct_field (const char *, struct type *, int,
52ce6436 221 struct type **, int *, int *, int *, int *);
4c4b4cd2
PH
222
223static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
224 struct value *);
225
4c4b4cd2
PH
226static int ada_resolve_function (struct ada_symbol_info *, int,
227 struct value **, int, const char *,
228 struct type *);
229
4c4b4cd2
PH
230static int ada_is_direct_array_type (struct type *);
231
72d5681a
PH
232static void ada_language_arch_info (struct gdbarch *,
233 struct language_arch_info *);
714e53ab 234
52ce6436
PH
235static struct value *ada_index_struct_field (int, struct value *, int,
236 struct type *);
237
238static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
239 struct expression *,
240 int *, enum noside);
52ce6436
PH
241
242static void aggregate_assign_from_choices (struct value *, struct value *,
243 struct expression *,
244 int *, LONGEST *, int *,
245 int, LONGEST, LONGEST);
246
247static void aggregate_assign_positional (struct value *, struct value *,
248 struct expression *,
249 int *, LONGEST *, int *, int,
250 LONGEST, LONGEST);
251
252
253static void aggregate_assign_others (struct value *, struct value *,
254 struct expression *,
255 int *, LONGEST *, int, LONGEST, LONGEST);
256
257
258static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
259
260
261static struct value *ada_evaluate_subexp (struct type *, struct expression *,
262 int *, enum noside);
263
264static void ada_forward_operator_length (struct expression *, int, int *,
265 int *);
852dff6c
JB
266
267static struct type *ada_find_any_type (const char *name);
4c4b4cd2
PH
268\f
269
ee01b665
JB
270/* The result of a symbol lookup to be stored in our symbol cache. */
271
272struct cache_entry
273{
274 /* The name used to perform the lookup. */
275 const char *name;
276 /* The namespace used during the lookup. */
fe978cb0 277 domain_enum domain;
ee01b665
JB
278 /* The symbol returned by the lookup, or NULL if no matching symbol
279 was found. */
280 struct symbol *sym;
281 /* The block where the symbol was found, or NULL if no matching
282 symbol was found. */
283 const struct block *block;
284 /* A pointer to the next entry with the same hash. */
285 struct cache_entry *next;
286};
287
288/* The Ada symbol cache, used to store the result of Ada-mode symbol
289 lookups in the course of executing the user's commands.
290
291 The cache is implemented using a simple, fixed-sized hash.
292 The size is fixed on the grounds that there are not likely to be
293 all that many symbols looked up during any given session, regardless
294 of the size of the symbol table. If we decide to go to a resizable
295 table, let's just use the stuff from libiberty instead. */
296
297#define HASH_SIZE 1009
298
299struct ada_symbol_cache
300{
301 /* An obstack used to store the entries in our cache. */
302 struct obstack cache_space;
303
304 /* The root of the hash table used to implement our symbol cache. */
305 struct cache_entry *root[HASH_SIZE];
306};
307
308static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
76a01679 309
4c4b4cd2 310/* Maximum-sized dynamic type. */
14f9c5c9
AS
311static unsigned int varsize_limit;
312
4c4b4cd2
PH
313/* FIXME: brobecker/2003-09-17: No longer a const because it is
314 returned by a function that does not return a const char *. */
315static char *ada_completer_word_break_characters =
316#ifdef VMS
317 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
318#else
14f9c5c9 319 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 320#endif
14f9c5c9 321
4c4b4cd2 322/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 323static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 324 = "__gnat_ada_main_program_name";
14f9c5c9 325
4c4b4cd2
PH
326/* Limit on the number of warnings to raise per expression evaluation. */
327static int warning_limit = 2;
328
329/* Number of warning messages issued; reset to 0 by cleanups after
330 expression evaluation. */
331static int warnings_issued = 0;
332
333static const char *known_runtime_file_name_patterns[] = {
334 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
335};
336
337static const char *known_auxiliary_function_name_patterns[] = {
338 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
339};
340
341/* Space for allocating results of ada_lookup_symbol_list. */
342static struct obstack symbol_list_obstack;
343
c6044dd1
JB
344/* Maintenance-related settings for this module. */
345
346static struct cmd_list_element *maint_set_ada_cmdlist;
347static struct cmd_list_element *maint_show_ada_cmdlist;
348
349/* Implement the "maintenance set ada" (prefix) command. */
350
351static void
352maint_set_ada_cmd (char *args, int from_tty)
353{
635c7e8a
TT
354 help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
355 gdb_stdout);
c6044dd1
JB
356}
357
358/* Implement the "maintenance show ada" (prefix) command. */
359
360static void
361maint_show_ada_cmd (char *args, int from_tty)
362{
363 cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
364}
365
366/* The "maintenance ada set/show ignore-descriptive-type" value. */
367
368static int ada_ignore_descriptive_types_p = 0;
369
e802dbe0
JB
370 /* Inferior-specific data. */
371
372/* Per-inferior data for this module. */
373
374struct ada_inferior_data
375{
376 /* The ada__tags__type_specific_data type, which is used when decoding
377 tagged types. With older versions of GNAT, this type was directly
378 accessible through a component ("tsd") in the object tag. But this
379 is no longer the case, so we cache it for each inferior. */
380 struct type *tsd_type;
3eecfa55
JB
381
382 /* The exception_support_info data. This data is used to determine
383 how to implement support for Ada exception catchpoints in a given
384 inferior. */
385 const struct exception_support_info *exception_info;
e802dbe0
JB
386};
387
388/* Our key to this module's inferior data. */
389static const struct inferior_data *ada_inferior_data;
390
391/* A cleanup routine for our inferior data. */
392static void
393ada_inferior_data_cleanup (struct inferior *inf, void *arg)
394{
395 struct ada_inferior_data *data;
396
397 data = inferior_data (inf, ada_inferior_data);
398 if (data != NULL)
399 xfree (data);
400}
401
402/* Return our inferior data for the given inferior (INF).
403
404 This function always returns a valid pointer to an allocated
405 ada_inferior_data structure. If INF's inferior data has not
406 been previously set, this functions creates a new one with all
407 fields set to zero, sets INF's inferior to it, and then returns
408 a pointer to that newly allocated ada_inferior_data. */
409
410static struct ada_inferior_data *
411get_ada_inferior_data (struct inferior *inf)
412{
413 struct ada_inferior_data *data;
414
415 data = inferior_data (inf, ada_inferior_data);
416 if (data == NULL)
417 {
41bf6aca 418 data = XCNEW (struct ada_inferior_data);
e802dbe0
JB
419 set_inferior_data (inf, ada_inferior_data, data);
420 }
421
422 return data;
423}
424
425/* Perform all necessary cleanups regarding our module's inferior data
426 that is required after the inferior INF just exited. */
427
428static void
429ada_inferior_exit (struct inferior *inf)
430{
431 ada_inferior_data_cleanup (inf, NULL);
432 set_inferior_data (inf, ada_inferior_data, NULL);
433}
434
ee01b665
JB
435
436 /* program-space-specific data. */
437
438/* This module's per-program-space data. */
439struct ada_pspace_data
440{
441 /* The Ada symbol cache. */
442 struct ada_symbol_cache *sym_cache;
443};
444
445/* Key to our per-program-space data. */
446static const struct program_space_data *ada_pspace_data_handle;
447
448/* Return this module's data for the given program space (PSPACE).
449 If not is found, add a zero'ed one now.
450
451 This function always returns a valid object. */
452
453static struct ada_pspace_data *
454get_ada_pspace_data (struct program_space *pspace)
455{
456 struct ada_pspace_data *data;
457
458 data = program_space_data (pspace, ada_pspace_data_handle);
459 if (data == NULL)
460 {
461 data = XCNEW (struct ada_pspace_data);
462 set_program_space_data (pspace, ada_pspace_data_handle, data);
463 }
464
465 return data;
466}
467
468/* The cleanup callback for this module's per-program-space data. */
469
470static void
471ada_pspace_data_cleanup (struct program_space *pspace, void *data)
472{
473 struct ada_pspace_data *pspace_data = data;
474
475 if (pspace_data->sym_cache != NULL)
476 ada_free_symbol_cache (pspace_data->sym_cache);
477 xfree (pspace_data);
478}
479
4c4b4cd2
PH
480 /* Utilities */
481
720d1a40 482/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 483 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
484
485 Normally, we really expect a typedef type to only have 1 typedef layer.
486 In other words, we really expect the target type of a typedef type to be
487 a non-typedef type. This is particularly true for Ada units, because
488 the language does not have a typedef vs not-typedef distinction.
489 In that respect, the Ada compiler has been trying to eliminate as many
490 typedef definitions in the debugging information, since they generally
491 do not bring any extra information (we still use typedef under certain
492 circumstances related mostly to the GNAT encoding).
493
494 Unfortunately, we have seen situations where the debugging information
495 generated by the compiler leads to such multiple typedef layers. For
496 instance, consider the following example with stabs:
497
498 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
499 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
500
501 This is an error in the debugging information which causes type
502 pck__float_array___XUP to be defined twice, and the second time,
503 it is defined as a typedef of a typedef.
504
505 This is on the fringe of legality as far as debugging information is
506 concerned, and certainly unexpected. But it is easy to handle these
507 situations correctly, so we can afford to be lenient in this case. */
508
509static struct type *
510ada_typedef_target_type (struct type *type)
511{
512 while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
513 type = TYPE_TARGET_TYPE (type);
514 return type;
515}
516
41d27058
JB
517/* Given DECODED_NAME a string holding a symbol name in its
518 decoded form (ie using the Ada dotted notation), returns
519 its unqualified name. */
520
521static const char *
522ada_unqualified_name (const char *decoded_name)
523{
2b0f535a
JB
524 const char *result;
525
526 /* If the decoded name starts with '<', it means that the encoded
527 name does not follow standard naming conventions, and thus that
528 it is not your typical Ada symbol name. Trying to unqualify it
529 is therefore pointless and possibly erroneous. */
530 if (decoded_name[0] == '<')
531 return decoded_name;
532
533 result = strrchr (decoded_name, '.');
41d27058
JB
534 if (result != NULL)
535 result++; /* Skip the dot... */
536 else
537 result = decoded_name;
538
539 return result;
540}
541
542/* Return a string starting with '<', followed by STR, and '>'.
543 The result is good until the next call. */
544
545static char *
546add_angle_brackets (const char *str)
547{
548 static char *result = NULL;
549
550 xfree (result);
88c15c34 551 result = xstrprintf ("<%s>", str);
41d27058
JB
552 return result;
553}
96d887e8 554
4c4b4cd2
PH
555static char *
556ada_get_gdb_completer_word_break_characters (void)
557{
558 return ada_completer_word_break_characters;
559}
560
e79af960
JB
561/* Print an array element index using the Ada syntax. */
562
563static void
564ada_print_array_index (struct value *index_value, struct ui_file *stream,
79a45b7d 565 const struct value_print_options *options)
e79af960 566{
79a45b7d 567 LA_VALUE_PRINT (index_value, stream, options);
e79af960
JB
568 fprintf_filtered (stream, " => ");
569}
570
f27cf670 571/* Assuming VECT points to an array of *SIZE objects of size
14f9c5c9 572 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
f27cf670 573 updating *SIZE as necessary and returning the (new) array. */
14f9c5c9 574
f27cf670
AS
575void *
576grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
14f9c5c9 577{
d2e4a39e
AS
578 if (*size < min_size)
579 {
580 *size *= 2;
581 if (*size < min_size)
4c4b4cd2 582 *size = min_size;
f27cf670 583 vect = xrealloc (vect, *size * element_size);
d2e4a39e 584 }
f27cf670 585 return vect;
14f9c5c9
AS
586}
587
588/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 589 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
590
591static int
ebf56fd3 592field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
593{
594 int len = strlen (target);
5b4ee69b 595
d2e4a39e 596 return
4c4b4cd2
PH
597 (strncmp (field_name, target, len) == 0
598 && (field_name[len] == '\0'
61012eef 599 || (startswith (field_name + len, "___")
76a01679
JB
600 && strcmp (field_name + strlen (field_name) - 6,
601 "___XVN") != 0)));
14f9c5c9
AS
602}
603
604
872c8b51
JB
605/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
606 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
607 and return its index. This function also handles fields whose name
608 have ___ suffixes because the compiler sometimes alters their name
609 by adding such a suffix to represent fields with certain constraints.
610 If the field could not be found, return a negative number if
611 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
612
613int
614ada_get_field_index (const struct type *type, const char *field_name,
615 int maybe_missing)
616{
617 int fieldno;
872c8b51
JB
618 struct type *struct_type = check_typedef ((struct type *) type);
619
620 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
621 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
622 return fieldno;
623
624 if (!maybe_missing)
323e0a4a 625 error (_("Unable to find field %s in struct %s. Aborting"),
872c8b51 626 field_name, TYPE_NAME (struct_type));
4c4b4cd2
PH
627
628 return -1;
629}
630
631/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
632
633int
d2e4a39e 634ada_name_prefix_len (const char *name)
14f9c5c9
AS
635{
636 if (name == NULL)
637 return 0;
d2e4a39e 638 else
14f9c5c9 639 {
d2e4a39e 640 const char *p = strstr (name, "___");
5b4ee69b 641
14f9c5c9 642 if (p == NULL)
4c4b4cd2 643 return strlen (name);
14f9c5c9 644 else
4c4b4cd2 645 return p - name;
14f9c5c9
AS
646 }
647}
648
4c4b4cd2
PH
649/* Return non-zero if SUFFIX is a suffix of STR.
650 Return zero if STR is null. */
651
14f9c5c9 652static int
d2e4a39e 653is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
654{
655 int len1, len2;
5b4ee69b 656
14f9c5c9
AS
657 if (str == NULL)
658 return 0;
659 len1 = strlen (str);
660 len2 = strlen (suffix);
4c4b4cd2 661 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
662}
663
4c4b4cd2
PH
664/* The contents of value VAL, treated as a value of type TYPE. The
665 result is an lval in memory if VAL is. */
14f9c5c9 666
d2e4a39e 667static struct value *
4c4b4cd2 668coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 669{
61ee279c 670 type = ada_check_typedef (type);
df407dfe 671 if (value_type (val) == type)
4c4b4cd2 672 return val;
d2e4a39e 673 else
14f9c5c9 674 {
4c4b4cd2
PH
675 struct value *result;
676
677 /* Make sure that the object size is not unreasonable before
678 trying to allocate some memory for it. */
c1b5a1a6 679 ada_ensure_varsize_limit (type);
4c4b4cd2 680
41e8491f
JK
681 if (value_lazy (val)
682 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
683 result = allocate_value_lazy (type);
684 else
685 {
686 result = allocate_value (type);
9a0dc9e3 687 value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
41e8491f 688 }
74bcbdf3 689 set_value_component_location (result, val);
9bbda503
AC
690 set_value_bitsize (result, value_bitsize (val));
691 set_value_bitpos (result, value_bitpos (val));
42ae5230 692 set_value_address (result, value_address (val));
14f9c5c9
AS
693 return result;
694 }
695}
696
fc1a4b47
AC
697static const gdb_byte *
698cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
699{
700 if (valaddr == NULL)
701 return NULL;
702 else
703 return valaddr + offset;
704}
705
706static CORE_ADDR
ebf56fd3 707cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
708{
709 if (address == 0)
710 return 0;
d2e4a39e 711 else
14f9c5c9
AS
712 return address + offset;
713}
714
4c4b4cd2
PH
715/* Issue a warning (as for the definition of warning in utils.c, but
716 with exactly one argument rather than ...), unless the limit on the
717 number of warnings has passed during the evaluation of the current
718 expression. */
a2249542 719
77109804
AC
720/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
721 provided by "complaint". */
a0b31db1 722static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 723
14f9c5c9 724static void
a2249542 725lim_warning (const char *format, ...)
14f9c5c9 726{
a2249542 727 va_list args;
a2249542 728
5b4ee69b 729 va_start (args, format);
4c4b4cd2
PH
730 warnings_issued += 1;
731 if (warnings_issued <= warning_limit)
a2249542
MK
732 vwarning (format, args);
733
734 va_end (args);
4c4b4cd2
PH
735}
736
714e53ab
PH
737/* Issue an error if the size of an object of type T is unreasonable,
738 i.e. if it would be a bad idea to allocate a value of this type in
739 GDB. */
740
c1b5a1a6
JB
741void
742ada_ensure_varsize_limit (const struct type *type)
714e53ab
PH
743{
744 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 745 error (_("object size is larger than varsize-limit"));
714e53ab
PH
746}
747
0963b4bd 748/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 749static LONGEST
c3e5cd34 750max_of_size (int size)
4c4b4cd2 751{
76a01679 752 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 753
76a01679 754 return top_bit | (top_bit - 1);
4c4b4cd2
PH
755}
756
0963b4bd 757/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 758static LONGEST
c3e5cd34 759min_of_size (int size)
4c4b4cd2 760{
c3e5cd34 761 return -max_of_size (size) - 1;
4c4b4cd2
PH
762}
763
0963b4bd 764/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 765static ULONGEST
c3e5cd34 766umax_of_size (int size)
4c4b4cd2 767{
76a01679 768 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 769
76a01679 770 return top_bit | (top_bit - 1);
4c4b4cd2
PH
771}
772
0963b4bd 773/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
774static LONGEST
775max_of_type (struct type *t)
4c4b4cd2 776{
c3e5cd34
PH
777 if (TYPE_UNSIGNED (t))
778 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
779 else
780 return max_of_size (TYPE_LENGTH (t));
781}
782
0963b4bd 783/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
784static LONGEST
785min_of_type (struct type *t)
786{
787 if (TYPE_UNSIGNED (t))
788 return 0;
789 else
790 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
791}
792
793/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
794LONGEST
795ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 796{
c3345124 797 type = resolve_dynamic_type (type, NULL, 0);
76a01679 798 switch (TYPE_CODE (type))
4c4b4cd2
PH
799 {
800 case TYPE_CODE_RANGE:
690cc4eb 801 return TYPE_HIGH_BOUND (type);
4c4b4cd2 802 case TYPE_CODE_ENUM:
14e75d8e 803 return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
690cc4eb
PH
804 case TYPE_CODE_BOOL:
805 return 1;
806 case TYPE_CODE_CHAR:
76a01679 807 case TYPE_CODE_INT:
690cc4eb 808 return max_of_type (type);
4c4b4cd2 809 default:
43bbcdc2 810 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
811 }
812}
813
14e75d8e 814/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
815LONGEST
816ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 817{
c3345124 818 type = resolve_dynamic_type (type, NULL, 0);
76a01679 819 switch (TYPE_CODE (type))
4c4b4cd2
PH
820 {
821 case TYPE_CODE_RANGE:
690cc4eb 822 return TYPE_LOW_BOUND (type);
4c4b4cd2 823 case TYPE_CODE_ENUM:
14e75d8e 824 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
825 case TYPE_CODE_BOOL:
826 return 0;
827 case TYPE_CODE_CHAR:
76a01679 828 case TYPE_CODE_INT:
690cc4eb 829 return min_of_type (type);
4c4b4cd2 830 default:
43bbcdc2 831 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
832 }
833}
834
835/* The identity on non-range types. For range types, the underlying
76a01679 836 non-range scalar type. */
4c4b4cd2
PH
837
838static struct type *
18af8284 839get_base_type (struct type *type)
4c4b4cd2
PH
840{
841 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
842 {
76a01679
JB
843 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
844 return type;
4c4b4cd2
PH
845 type = TYPE_TARGET_TYPE (type);
846 }
847 return type;
14f9c5c9 848}
41246937
JB
849
850/* Return a decoded version of the given VALUE. This means returning
851 a value whose type is obtained by applying all the GNAT-specific
852 encondings, making the resulting type a static but standard description
853 of the initial type. */
854
855struct value *
856ada_get_decoded_value (struct value *value)
857{
858 struct type *type = ada_check_typedef (value_type (value));
859
860 if (ada_is_array_descriptor_type (type)
861 || (ada_is_constrained_packed_array_type (type)
862 && TYPE_CODE (type) != TYPE_CODE_PTR))
863 {
864 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */
865 value = ada_coerce_to_simple_array_ptr (value);
866 else
867 value = ada_coerce_to_simple_array (value);
868 }
869 else
870 value = ada_to_fixed_value (value);
871
872 return value;
873}
874
875/* Same as ada_get_decoded_value, but with the given TYPE.
876 Because there is no associated actual value for this type,
877 the resulting type might be a best-effort approximation in
878 the case of dynamic types. */
879
880struct type *
881ada_get_decoded_type (struct type *type)
882{
883 type = to_static_fixed_type (type);
884 if (ada_is_constrained_packed_array_type (type))
885 type = ada_coerce_to_simple_array_type (type);
886 return type;
887}
888
4c4b4cd2 889\f
76a01679 890
4c4b4cd2 891 /* Language Selection */
14f9c5c9
AS
892
893/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 894 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 895
14f9c5c9 896enum language
ccefe4c4 897ada_update_initial_language (enum language lang)
14f9c5c9 898{
d2e4a39e 899 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
3b7344d5 900 (struct objfile *) NULL).minsym != NULL)
4c4b4cd2 901 return language_ada;
14f9c5c9
AS
902
903 return lang;
904}
96d887e8
PH
905
906/* If the main procedure is written in Ada, then return its name.
907 The result is good until the next call. Return NULL if the main
908 procedure doesn't appear to be in Ada. */
909
910char *
911ada_main_name (void)
912{
3b7344d5 913 struct bound_minimal_symbol msym;
f9bc20b9 914 static char *main_program_name = NULL;
6c038f32 915
96d887e8
PH
916 /* For Ada, the name of the main procedure is stored in a specific
917 string constant, generated by the binder. Look for that symbol,
918 extract its address, and then read that string. If we didn't find
919 that string, then most probably the main procedure is not written
920 in Ada. */
921 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
922
3b7344d5 923 if (msym.minsym != NULL)
96d887e8 924 {
f9bc20b9
JB
925 CORE_ADDR main_program_name_addr;
926 int err_code;
927
77e371c0 928 main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
96d887e8 929 if (main_program_name_addr == 0)
323e0a4a 930 error (_("Invalid address for Ada main program name."));
96d887e8 931
f9bc20b9
JB
932 xfree (main_program_name);
933 target_read_string (main_program_name_addr, &main_program_name,
934 1024, &err_code);
935
936 if (err_code != 0)
937 return NULL;
96d887e8
PH
938 return main_program_name;
939 }
940
941 /* The main procedure doesn't seem to be in Ada. */
942 return NULL;
943}
14f9c5c9 944\f
4c4b4cd2 945 /* Symbols */
d2e4a39e 946
4c4b4cd2
PH
947/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
948 of NULLs. */
14f9c5c9 949
d2e4a39e
AS
950const struct ada_opname_map ada_opname_table[] = {
951 {"Oadd", "\"+\"", BINOP_ADD},
952 {"Osubtract", "\"-\"", BINOP_SUB},
953 {"Omultiply", "\"*\"", BINOP_MUL},
954 {"Odivide", "\"/\"", BINOP_DIV},
955 {"Omod", "\"mod\"", BINOP_MOD},
956 {"Orem", "\"rem\"", BINOP_REM},
957 {"Oexpon", "\"**\"", BINOP_EXP},
958 {"Olt", "\"<\"", BINOP_LESS},
959 {"Ole", "\"<=\"", BINOP_LEQ},
960 {"Ogt", "\">\"", BINOP_GTR},
961 {"Oge", "\">=\"", BINOP_GEQ},
962 {"Oeq", "\"=\"", BINOP_EQUAL},
963 {"One", "\"/=\"", BINOP_NOTEQUAL},
964 {"Oand", "\"and\"", BINOP_BITWISE_AND},
965 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
966 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
967 {"Oconcat", "\"&\"", BINOP_CONCAT},
968 {"Oabs", "\"abs\"", UNOP_ABS},
969 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
970 {"Oadd", "\"+\"", UNOP_PLUS},
971 {"Osubtract", "\"-\"", UNOP_NEG},
972 {NULL, NULL}
14f9c5c9
AS
973};
974
4c4b4cd2
PH
975/* The "encoded" form of DECODED, according to GNAT conventions.
976 The result is valid until the next call to ada_encode. */
977
14f9c5c9 978char *
4c4b4cd2 979ada_encode (const char *decoded)
14f9c5c9 980{
4c4b4cd2
PH
981 static char *encoding_buffer = NULL;
982 static size_t encoding_buffer_size = 0;
d2e4a39e 983 const char *p;
14f9c5c9 984 int k;
d2e4a39e 985
4c4b4cd2 986 if (decoded == NULL)
14f9c5c9
AS
987 return NULL;
988
4c4b4cd2
PH
989 GROW_VECT (encoding_buffer, encoding_buffer_size,
990 2 * strlen (decoded) + 10);
14f9c5c9
AS
991
992 k = 0;
4c4b4cd2 993 for (p = decoded; *p != '\0'; p += 1)
14f9c5c9 994 {
cdc7bb92 995 if (*p == '.')
4c4b4cd2
PH
996 {
997 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
998 k += 2;
999 }
14f9c5c9 1000 else if (*p == '"')
4c4b4cd2
PH
1001 {
1002 const struct ada_opname_map *mapping;
1003
1004 for (mapping = ada_opname_table;
1265e4aa 1005 mapping->encoded != NULL
61012eef 1006 && !startswith (p, mapping->decoded); mapping += 1)
4c4b4cd2
PH
1007 ;
1008 if (mapping->encoded == NULL)
323e0a4a 1009 error (_("invalid Ada operator name: %s"), p);
4c4b4cd2
PH
1010 strcpy (encoding_buffer + k, mapping->encoded);
1011 k += strlen (mapping->encoded);
1012 break;
1013 }
d2e4a39e 1014 else
4c4b4cd2
PH
1015 {
1016 encoding_buffer[k] = *p;
1017 k += 1;
1018 }
14f9c5c9
AS
1019 }
1020
4c4b4cd2
PH
1021 encoding_buffer[k] = '\0';
1022 return encoding_buffer;
14f9c5c9
AS
1023}
1024
1025/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
1026 quotes, unfolded, but with the quotes stripped away. Result good
1027 to next call. */
1028
d2e4a39e
AS
1029char *
1030ada_fold_name (const char *name)
14f9c5c9 1031{
d2e4a39e 1032 static char *fold_buffer = NULL;
14f9c5c9
AS
1033 static size_t fold_buffer_size = 0;
1034
1035 int len = strlen (name);
d2e4a39e 1036 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
1037
1038 if (name[0] == '\'')
1039 {
d2e4a39e
AS
1040 strncpy (fold_buffer, name + 1, len - 2);
1041 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
1042 }
1043 else
1044 {
1045 int i;
5b4ee69b 1046
14f9c5c9 1047 for (i = 0; i <= len; i += 1)
4c4b4cd2 1048 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
1049 }
1050
1051 return fold_buffer;
1052}
1053
529cad9c
PH
1054/* Return nonzero if C is either a digit or a lowercase alphabet character. */
1055
1056static int
1057is_lower_alphanum (const char c)
1058{
1059 return (isdigit (c) || (isalpha (c) && islower (c)));
1060}
1061
c90092fe
JB
1062/* ENCODED is the linkage name of a symbol and LEN contains its length.
1063 This function saves in LEN the length of that same symbol name but
1064 without either of these suffixes:
29480c32
JB
1065 . .{DIGIT}+
1066 . ${DIGIT}+
1067 . ___{DIGIT}+
1068 . __{DIGIT}+.
c90092fe 1069
29480c32
JB
1070 These are suffixes introduced by the compiler for entities such as
1071 nested subprogram for instance, in order to avoid name clashes.
1072 They do not serve any purpose for the debugger. */
1073
1074static void
1075ada_remove_trailing_digits (const char *encoded, int *len)
1076{
1077 if (*len > 1 && isdigit (encoded[*len - 1]))
1078 {
1079 int i = *len - 2;
5b4ee69b 1080
29480c32
JB
1081 while (i > 0 && isdigit (encoded[i]))
1082 i--;
1083 if (i >= 0 && encoded[i] == '.')
1084 *len = i;
1085 else if (i >= 0 && encoded[i] == '$')
1086 *len = i;
61012eef 1087 else if (i >= 2 && startswith (encoded + i - 2, "___"))
29480c32 1088 *len = i - 2;
61012eef 1089 else if (i >= 1 && startswith (encoded + i - 1, "__"))
29480c32
JB
1090 *len = i - 1;
1091 }
1092}
1093
1094/* Remove the suffix introduced by the compiler for protected object
1095 subprograms. */
1096
1097static void
1098ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1099{
1100 /* Remove trailing N. */
1101
1102 /* Protected entry subprograms are broken into two
1103 separate subprograms: The first one is unprotected, and has
1104 a 'N' suffix; the second is the protected version, and has
0963b4bd 1105 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1106 the protection. Since the P subprograms are internally generated,
1107 we leave these names undecoded, giving the user a clue that this
1108 entity is internal. */
1109
1110 if (*len > 1
1111 && encoded[*len - 1] == 'N'
1112 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1113 *len = *len - 1;
1114}
1115
69fadcdf
JB
1116/* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
1117
1118static void
1119ada_remove_Xbn_suffix (const char *encoded, int *len)
1120{
1121 int i = *len - 1;
1122
1123 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1124 i--;
1125
1126 if (encoded[i] != 'X')
1127 return;
1128
1129 if (i == 0)
1130 return;
1131
1132 if (isalnum (encoded[i-1]))
1133 *len = i;
1134}
1135
29480c32
JB
1136/* If ENCODED follows the GNAT entity encoding conventions, then return
1137 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
1138 replaced by ENCODED.
14f9c5c9 1139
4c4b4cd2 1140 The resulting string is valid until the next call of ada_decode.
29480c32 1141 If the string is unchanged by decoding, the original string pointer
4c4b4cd2
PH
1142 is returned. */
1143
1144const char *
1145ada_decode (const char *encoded)
14f9c5c9
AS
1146{
1147 int i, j;
1148 int len0;
d2e4a39e 1149 const char *p;
4c4b4cd2 1150 char *decoded;
14f9c5c9 1151 int at_start_name;
4c4b4cd2
PH
1152 static char *decoding_buffer = NULL;
1153 static size_t decoding_buffer_size = 0;
d2e4a39e 1154
29480c32
JB
1155 /* The name of the Ada main procedure starts with "_ada_".
1156 This prefix is not part of the decoded name, so skip this part
1157 if we see this prefix. */
61012eef 1158 if (startswith (encoded, "_ada_"))
4c4b4cd2 1159 encoded += 5;
14f9c5c9 1160
29480c32
JB
1161 /* If the name starts with '_', then it is not a properly encoded
1162 name, so do not attempt to decode it. Similarly, if the name
1163 starts with '<', the name should not be decoded. */
4c4b4cd2 1164 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1165 goto Suppress;
1166
4c4b4cd2 1167 len0 = strlen (encoded);
4c4b4cd2 1168
29480c32
JB
1169 ada_remove_trailing_digits (encoded, &len0);
1170 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1171
4c4b4cd2
PH
1172 /* Remove the ___X.* suffix if present. Do not forget to verify that
1173 the suffix is located before the current "end" of ENCODED. We want
1174 to avoid re-matching parts of ENCODED that have previously been
1175 marked as discarded (by decrementing LEN0). */
1176 p = strstr (encoded, "___");
1177 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1178 {
1179 if (p[3] == 'X')
4c4b4cd2 1180 len0 = p - encoded;
14f9c5c9 1181 else
4c4b4cd2 1182 goto Suppress;
14f9c5c9 1183 }
4c4b4cd2 1184
29480c32
JB
1185 /* Remove any trailing TKB suffix. It tells us that this symbol
1186 is for the body of a task, but that information does not actually
1187 appear in the decoded name. */
1188
61012eef 1189 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
14f9c5c9 1190 len0 -= 3;
76a01679 1191
a10967fa
JB
1192 /* Remove any trailing TB suffix. The TB suffix is slightly different
1193 from the TKB suffix because it is used for non-anonymous task
1194 bodies. */
1195
61012eef 1196 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
a10967fa
JB
1197 len0 -= 2;
1198
29480c32
JB
1199 /* Remove trailing "B" suffixes. */
1200 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1201
61012eef 1202 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
14f9c5c9
AS
1203 len0 -= 1;
1204
4c4b4cd2 1205 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1206
4c4b4cd2
PH
1207 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1208 decoded = decoding_buffer;
14f9c5c9 1209
29480c32
JB
1210 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1211
4c4b4cd2 1212 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1213 {
4c4b4cd2
PH
1214 i = len0 - 2;
1215 while ((i >= 0 && isdigit (encoded[i]))
1216 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1217 i -= 1;
1218 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1219 len0 = i - 1;
1220 else if (encoded[i] == '$')
1221 len0 = i;
d2e4a39e 1222 }
14f9c5c9 1223
29480c32
JB
1224 /* The first few characters that are not alphabetic are not part
1225 of any encoding we use, so we can copy them over verbatim. */
1226
4c4b4cd2
PH
1227 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1228 decoded[j] = encoded[i];
14f9c5c9
AS
1229
1230 at_start_name = 1;
1231 while (i < len0)
1232 {
29480c32 1233 /* Is this a symbol function? */
4c4b4cd2
PH
1234 if (at_start_name && encoded[i] == 'O')
1235 {
1236 int k;
5b4ee69b 1237
4c4b4cd2
PH
1238 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1239 {
1240 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1241 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1242 op_len - 1) == 0)
1243 && !isalnum (encoded[i + op_len]))
4c4b4cd2
PH
1244 {
1245 strcpy (decoded + j, ada_opname_table[k].decoded);
1246 at_start_name = 0;
1247 i += op_len;
1248 j += strlen (ada_opname_table[k].decoded);
1249 break;
1250 }
1251 }
1252 if (ada_opname_table[k].encoded != NULL)
1253 continue;
1254 }
14f9c5c9
AS
1255 at_start_name = 0;
1256
529cad9c
PH
1257 /* Replace "TK__" with "__", which will eventually be translated
1258 into "." (just below). */
1259
61012eef 1260 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
4c4b4cd2 1261 i += 2;
529cad9c 1262
29480c32
JB
1263 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1264 be translated into "." (just below). These are internal names
1265 generated for anonymous blocks inside which our symbol is nested. */
1266
1267 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1268 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1269 && isdigit (encoded [i+4]))
1270 {
1271 int k = i + 5;
1272
1273 while (k < len0 && isdigit (encoded[k]))
1274 k++; /* Skip any extra digit. */
1275
1276 /* Double-check that the "__B_{DIGITS}+" sequence we found
1277 is indeed followed by "__". */
1278 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1279 i = k;
1280 }
1281
529cad9c
PH
1282 /* Remove _E{DIGITS}+[sb] */
1283
1284 /* Just as for protected object subprograms, there are 2 categories
0963b4bd 1285 of subprograms created by the compiler for each entry. The first
529cad9c
PH
1286 one implements the actual entry code, and has a suffix following
1287 the convention above; the second one implements the barrier and
1288 uses the same convention as above, except that the 'E' is replaced
1289 by a 'B'.
1290
1291 Just as above, we do not decode the name of barrier functions
1292 to give the user a clue that the code he is debugging has been
1293 internally generated. */
1294
1295 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1296 && isdigit (encoded[i+2]))
1297 {
1298 int k = i + 3;
1299
1300 while (k < len0 && isdigit (encoded[k]))
1301 k++;
1302
1303 if (k < len0
1304 && (encoded[k] == 'b' || encoded[k] == 's'))
1305 {
1306 k++;
1307 /* Just as an extra precaution, make sure that if this
1308 suffix is followed by anything else, it is a '_'.
1309 Otherwise, we matched this sequence by accident. */
1310 if (k == len0
1311 || (k < len0 && encoded[k] == '_'))
1312 i = k;
1313 }
1314 }
1315
1316 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1317 the GNAT front-end in protected object subprograms. */
1318
1319 if (i < len0 + 3
1320 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1321 {
1322 /* Backtrack a bit up until we reach either the begining of
1323 the encoded name, or "__". Make sure that we only find
1324 digits or lowercase characters. */
1325 const char *ptr = encoded + i - 1;
1326
1327 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1328 ptr--;
1329 if (ptr < encoded
1330 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1331 i++;
1332 }
1333
4c4b4cd2
PH
1334 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1335 {
29480c32
JB
1336 /* This is a X[bn]* sequence not separated from the previous
1337 part of the name with a non-alpha-numeric character (in other
1338 words, immediately following an alpha-numeric character), then
1339 verify that it is placed at the end of the encoded name. If
1340 not, then the encoding is not valid and we should abort the
1341 decoding. Otherwise, just skip it, it is used in body-nested
1342 package names. */
4c4b4cd2
PH
1343 do
1344 i += 1;
1345 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1346 if (i < len0)
1347 goto Suppress;
1348 }
cdc7bb92 1349 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1350 {
29480c32 1351 /* Replace '__' by '.'. */
4c4b4cd2
PH
1352 decoded[j] = '.';
1353 at_start_name = 1;
1354 i += 2;
1355 j += 1;
1356 }
14f9c5c9 1357 else
4c4b4cd2 1358 {
29480c32
JB
1359 /* It's a character part of the decoded name, so just copy it
1360 over. */
4c4b4cd2
PH
1361 decoded[j] = encoded[i];
1362 i += 1;
1363 j += 1;
1364 }
14f9c5c9 1365 }
4c4b4cd2 1366 decoded[j] = '\000';
14f9c5c9 1367
29480c32
JB
1368 /* Decoded names should never contain any uppercase character.
1369 Double-check this, and abort the decoding if we find one. */
1370
4c4b4cd2
PH
1371 for (i = 0; decoded[i] != '\0'; i += 1)
1372 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1373 goto Suppress;
1374
4c4b4cd2
PH
1375 if (strcmp (decoded, encoded) == 0)
1376 return encoded;
1377 else
1378 return decoded;
14f9c5c9
AS
1379
1380Suppress:
4c4b4cd2
PH
1381 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1382 decoded = decoding_buffer;
1383 if (encoded[0] == '<')
1384 strcpy (decoded, encoded);
14f9c5c9 1385 else
88c15c34 1386 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
4c4b4cd2
PH
1387 return decoded;
1388
1389}
1390
1391/* Table for keeping permanent unique copies of decoded names. Once
1392 allocated, names in this table are never released. While this is a
1393 storage leak, it should not be significant unless there are massive
1394 changes in the set of decoded names in successive versions of a
1395 symbol table loaded during a single session. */
1396static struct htab *decoded_names_store;
1397
1398/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1399 in the language-specific part of GSYMBOL, if it has not been
1400 previously computed. Tries to save the decoded name in the same
1401 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1402 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1403 GSYMBOL).
4c4b4cd2
PH
1404 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1405 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1406 when a decoded name is cached in it. */
4c4b4cd2 1407
45e6c716 1408const char *
f85f34ed 1409ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1410{
f85f34ed
TT
1411 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1412 const char **resultp =
1413 &gsymbol->language_specific.mangled_lang.demangled_name;
5b4ee69b 1414
f85f34ed 1415 if (!gsymbol->ada_mangled)
4c4b4cd2
PH
1416 {
1417 const char *decoded = ada_decode (gsymbol->name);
f85f34ed 1418 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1419
f85f34ed 1420 gsymbol->ada_mangled = 1;
5b4ee69b 1421
f85f34ed
TT
1422 if (obstack != NULL)
1423 *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1424 else
76a01679 1425 {
f85f34ed
TT
1426 /* Sometimes, we can't find a corresponding objfile, in
1427 which case, we put the result on the heap. Since we only
1428 decode when needed, we hope this usually does not cause a
1429 significant memory leak (FIXME). */
1430
76a01679
JB
1431 char **slot = (char **) htab_find_slot (decoded_names_store,
1432 decoded, INSERT);
5b4ee69b 1433
76a01679
JB
1434 if (*slot == NULL)
1435 *slot = xstrdup (decoded);
1436 *resultp = *slot;
1437 }
4c4b4cd2 1438 }
14f9c5c9 1439
4c4b4cd2
PH
1440 return *resultp;
1441}
76a01679 1442
2c0b251b 1443static char *
76a01679 1444ada_la_decode (const char *encoded, int options)
4c4b4cd2
PH
1445{
1446 return xstrdup (ada_decode (encoded));
14f9c5c9
AS
1447}
1448
1449/* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
4c4b4cd2
PH
1450 suffixes that encode debugging information or leading _ada_ on
1451 SYM_NAME (see is_name_suffix commentary for the debugging
1452 information that is ignored). If WILD, then NAME need only match a
1453 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1454 either argument is NULL. */
14f9c5c9 1455
2c0b251b 1456static int
40658b94 1457match_name (const char *sym_name, const char *name, int wild)
14f9c5c9
AS
1458{
1459 if (sym_name == NULL || name == NULL)
1460 return 0;
1461 else if (wild)
73589123 1462 return wild_match (sym_name, name) == 0;
d2e4a39e
AS
1463 else
1464 {
1465 int len_name = strlen (name);
5b4ee69b 1466
4c4b4cd2
PH
1467 return (strncmp (sym_name, name, len_name) == 0
1468 && is_name_suffix (sym_name + len_name))
61012eef 1469 || (startswith (sym_name, "_ada_")
4c4b4cd2
PH
1470 && strncmp (sym_name + 5, name, len_name) == 0
1471 && is_name_suffix (sym_name + len_name + 5));
d2e4a39e 1472 }
14f9c5c9 1473}
14f9c5c9 1474\f
d2e4a39e 1475
4c4b4cd2 1476 /* Arrays */
14f9c5c9 1477
28c85d6c
JB
1478/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1479 generated by the GNAT compiler to describe the index type used
1480 for each dimension of an array, check whether it follows the latest
1481 known encoding. If not, fix it up to conform to the latest encoding.
1482 Otherwise, do nothing. This function also does nothing if
1483 INDEX_DESC_TYPE is NULL.
1484
1485 The GNAT encoding used to describle the array index type evolved a bit.
1486 Initially, the information would be provided through the name of each
1487 field of the structure type only, while the type of these fields was
1488 described as unspecified and irrelevant. The debugger was then expected
1489 to perform a global type lookup using the name of that field in order
1490 to get access to the full index type description. Because these global
1491 lookups can be very expensive, the encoding was later enhanced to make
1492 the global lookup unnecessary by defining the field type as being
1493 the full index type description.
1494
1495 The purpose of this routine is to allow us to support older versions
1496 of the compiler by detecting the use of the older encoding, and by
1497 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1498 we essentially replace each field's meaningless type by the associated
1499 index subtype). */
1500
1501void
1502ada_fixup_array_indexes_type (struct type *index_desc_type)
1503{
1504 int i;
1505
1506 if (index_desc_type == NULL)
1507 return;
1508 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1509
1510 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1511 to check one field only, no need to check them all). If not, return
1512 now.
1513
1514 If our INDEX_DESC_TYPE was generated using the older encoding,
1515 the field type should be a meaningless integer type whose name
1516 is not equal to the field name. */
1517 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1518 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1519 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1520 return;
1521
1522 /* Fixup each field of INDEX_DESC_TYPE. */
1523 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1524 {
0d5cff50 1525 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1526 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1527
1528 if (raw_type)
1529 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1530 }
1531}
1532
4c4b4cd2 1533/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
14f9c5c9 1534
d2e4a39e
AS
1535static char *bound_name[] = {
1536 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
14f9c5c9
AS
1537 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1538};
1539
1540/* Maximum number of array dimensions we are prepared to handle. */
1541
4c4b4cd2 1542#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
14f9c5c9 1543
14f9c5c9 1544
4c4b4cd2
PH
1545/* The desc_* routines return primitive portions of array descriptors
1546 (fat pointers). */
14f9c5c9
AS
1547
1548/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1549 level of indirection, if needed. */
1550
d2e4a39e
AS
1551static struct type *
1552desc_base_type (struct type *type)
14f9c5c9
AS
1553{
1554 if (type == NULL)
1555 return NULL;
61ee279c 1556 type = ada_check_typedef (type);
720d1a40
JB
1557 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1558 type = ada_typedef_target_type (type);
1559
1265e4aa
JB
1560 if (type != NULL
1561 && (TYPE_CODE (type) == TYPE_CODE_PTR
1562 || TYPE_CODE (type) == TYPE_CODE_REF))
61ee279c 1563 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1564 else
1565 return type;
1566}
1567
4c4b4cd2
PH
1568/* True iff TYPE indicates a "thin" array pointer type. */
1569
14f9c5c9 1570static int
d2e4a39e 1571is_thin_pntr (struct type *type)
14f9c5c9 1572{
d2e4a39e 1573 return
14f9c5c9
AS
1574 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1575 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1576}
1577
4c4b4cd2
PH
1578/* The descriptor type for thin pointer type TYPE. */
1579
d2e4a39e
AS
1580static struct type *
1581thin_descriptor_type (struct type *type)
14f9c5c9 1582{
d2e4a39e 1583 struct type *base_type = desc_base_type (type);
5b4ee69b 1584
14f9c5c9
AS
1585 if (base_type == NULL)
1586 return NULL;
1587 if (is_suffix (ada_type_name (base_type), "___XVE"))
1588 return base_type;
d2e4a39e 1589 else
14f9c5c9 1590 {
d2e4a39e 1591 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1592
14f9c5c9 1593 if (alt_type == NULL)
4c4b4cd2 1594 return base_type;
14f9c5c9 1595 else
4c4b4cd2 1596 return alt_type;
14f9c5c9
AS
1597 }
1598}
1599
4c4b4cd2
PH
1600/* A pointer to the array data for thin-pointer value VAL. */
1601
d2e4a39e
AS
1602static struct value *
1603thin_data_pntr (struct value *val)
14f9c5c9 1604{
828292f2 1605 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1606 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1607
556bdfd4
UW
1608 data_type = lookup_pointer_type (data_type);
1609
14f9c5c9 1610 if (TYPE_CODE (type) == TYPE_CODE_PTR)
556bdfd4 1611 return value_cast (data_type, value_copy (val));
d2e4a39e 1612 else
42ae5230 1613 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1614}
1615
4c4b4cd2
PH
1616/* True iff TYPE indicates a "thick" array pointer type. */
1617
14f9c5c9 1618static int
d2e4a39e 1619is_thick_pntr (struct type *type)
14f9c5c9
AS
1620{
1621 type = desc_base_type (type);
1622 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2 1623 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1624}
1625
4c4b4cd2
PH
1626/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1627 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1628
d2e4a39e
AS
1629static struct type *
1630desc_bounds_type (struct type *type)
14f9c5c9 1631{
d2e4a39e 1632 struct type *r;
14f9c5c9
AS
1633
1634 type = desc_base_type (type);
1635
1636 if (type == NULL)
1637 return NULL;
1638 else if (is_thin_pntr (type))
1639 {
1640 type = thin_descriptor_type (type);
1641 if (type == NULL)
4c4b4cd2 1642 return NULL;
14f9c5c9
AS
1643 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1644 if (r != NULL)
61ee279c 1645 return ada_check_typedef (r);
14f9c5c9
AS
1646 }
1647 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1648 {
1649 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1650 if (r != NULL)
61ee279c 1651 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1652 }
1653 return NULL;
1654}
1655
1656/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1657 one, a pointer to its bounds data. Otherwise NULL. */
1658
d2e4a39e
AS
1659static struct value *
1660desc_bounds (struct value *arr)
14f9c5c9 1661{
df407dfe 1662 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1663
d2e4a39e 1664 if (is_thin_pntr (type))
14f9c5c9 1665 {
d2e4a39e 1666 struct type *bounds_type =
4c4b4cd2 1667 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1668 LONGEST addr;
1669
4cdfadb1 1670 if (bounds_type == NULL)
323e0a4a 1671 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1672
1673 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1674 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1675 the correct calculation is a real pain. FIXME (and fix GCC). */
14f9c5c9 1676 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4c4b4cd2 1677 addr = value_as_long (arr);
d2e4a39e 1678 else
42ae5230 1679 addr = value_address (arr);
14f9c5c9 1680
d2e4a39e 1681 return
4c4b4cd2
PH
1682 value_from_longest (lookup_pointer_type (bounds_type),
1683 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1684 }
1685
1686 else if (is_thick_pntr (type))
05e522ef
JB
1687 {
1688 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1689 _("Bad GNAT array descriptor"));
1690 struct type *p_bounds_type = value_type (p_bounds);
1691
1692 if (p_bounds_type
1693 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1694 {
1695 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1696
1697 if (TYPE_STUB (target_type))
1698 p_bounds = value_cast (lookup_pointer_type
1699 (ada_check_typedef (target_type)),
1700 p_bounds);
1701 }
1702 else
1703 error (_("Bad GNAT array descriptor"));
1704
1705 return p_bounds;
1706 }
14f9c5c9
AS
1707 else
1708 return NULL;
1709}
1710
4c4b4cd2
PH
1711/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1712 position of the field containing the address of the bounds data. */
1713
14f9c5c9 1714static int
d2e4a39e 1715fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1716{
1717 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1718}
1719
1720/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1721 size of the field containing the address of the bounds data. */
1722
14f9c5c9 1723static int
d2e4a39e 1724fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1725{
1726 type = desc_base_type (type);
1727
d2e4a39e 1728 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1729 return TYPE_FIELD_BITSIZE (type, 1);
1730 else
61ee279c 1731 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1732}
1733
4c4b4cd2 1734/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1735 pointer to one, the type of its array data (a array-with-no-bounds type);
1736 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1737 data. */
4c4b4cd2 1738
d2e4a39e 1739static struct type *
556bdfd4 1740desc_data_target_type (struct type *type)
14f9c5c9
AS
1741{
1742 type = desc_base_type (type);
1743
4c4b4cd2 1744 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1745 if (is_thin_pntr (type))
556bdfd4 1746 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1747 else if (is_thick_pntr (type))
556bdfd4
UW
1748 {
1749 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1750
1751 if (data_type
1752 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
05e522ef 1753 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1754 }
1755
1756 return NULL;
14f9c5c9
AS
1757}
1758
1759/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1760 its array data. */
4c4b4cd2 1761
d2e4a39e
AS
1762static struct value *
1763desc_data (struct value *arr)
14f9c5c9 1764{
df407dfe 1765 struct type *type = value_type (arr);
5b4ee69b 1766
14f9c5c9
AS
1767 if (is_thin_pntr (type))
1768 return thin_data_pntr (arr);
1769 else if (is_thick_pntr (type))
d2e4a39e 1770 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1771 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1772 else
1773 return NULL;
1774}
1775
1776
1777/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1778 position of the field containing the address of the data. */
1779
14f9c5c9 1780static int
d2e4a39e 1781fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1782{
1783 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1784}
1785
1786/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1787 size of the field containing the address of the data. */
1788
14f9c5c9 1789static int
d2e4a39e 1790fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1791{
1792 type = desc_base_type (type);
1793
1794 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1795 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1796 else
14f9c5c9
AS
1797 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1798}
1799
4c4b4cd2 1800/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1801 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1802 bound, if WHICH is 1. The first bound is I=1. */
1803
d2e4a39e
AS
1804static struct value *
1805desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1806{
d2e4a39e 1807 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
323e0a4a 1808 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1809}
1810
1811/* If BOUNDS is an array-bounds structure type, return the bit position
1812 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1813 bound, if WHICH is 1. The first bound is I=1. */
1814
14f9c5c9 1815static int
d2e4a39e 1816desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1817{
d2e4a39e 1818 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1819}
1820
1821/* If BOUNDS is an array-bounds structure type, return the bit field size
1822 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1823 bound, if WHICH is 1. The first bound is I=1. */
1824
76a01679 1825static int
d2e4a39e 1826desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1827{
1828 type = desc_base_type (type);
1829
d2e4a39e
AS
1830 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1831 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1832 else
1833 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1834}
1835
1836/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1837 Ith bound (numbering from 1). Otherwise, NULL. */
1838
d2e4a39e
AS
1839static struct type *
1840desc_index_type (struct type *type, int i)
14f9c5c9
AS
1841{
1842 type = desc_base_type (type);
1843
1844 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
d2e4a39e
AS
1845 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1846 else
14f9c5c9
AS
1847 return NULL;
1848}
1849
4c4b4cd2
PH
1850/* The number of index positions in the array-bounds type TYPE.
1851 Return 0 if TYPE is NULL. */
1852
14f9c5c9 1853static int
d2e4a39e 1854desc_arity (struct type *type)
14f9c5c9
AS
1855{
1856 type = desc_base_type (type);
1857
1858 if (type != NULL)
1859 return TYPE_NFIELDS (type) / 2;
1860 return 0;
1861}
1862
4c4b4cd2
PH
1863/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1864 an array descriptor type (representing an unconstrained array
1865 type). */
1866
76a01679
JB
1867static int
1868ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1869{
1870 if (type == NULL)
1871 return 0;
61ee279c 1872 type = ada_check_typedef (type);
4c4b4cd2 1873 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
76a01679 1874 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1875}
1876
52ce6436 1877/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1878 * to one. */
52ce6436 1879
2c0b251b 1880static int
52ce6436
PH
1881ada_is_array_type (struct type *type)
1882{
1883 while (type != NULL
1884 && (TYPE_CODE (type) == TYPE_CODE_PTR
1885 || TYPE_CODE (type) == TYPE_CODE_REF))
1886 type = TYPE_TARGET_TYPE (type);
1887 return ada_is_direct_array_type (type);
1888}
1889
4c4b4cd2 1890/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1891
14f9c5c9 1892int
4c4b4cd2 1893ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1894{
1895 if (type == NULL)
1896 return 0;
61ee279c 1897 type = ada_check_typedef (type);
14f9c5c9 1898 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
4c4b4cd2 1899 || (TYPE_CODE (type) == TYPE_CODE_PTR
b0dd7688
JB
1900 && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1901 == TYPE_CODE_ARRAY));
14f9c5c9
AS
1902}
1903
4c4b4cd2
PH
1904/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1905
14f9c5c9 1906int
4c4b4cd2 1907ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1908{
556bdfd4 1909 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1910
1911 if (type == NULL)
1912 return 0;
61ee279c 1913 type = ada_check_typedef (type);
556bdfd4
UW
1914 return (data_type != NULL
1915 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1916 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1917}
1918
1919/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1920 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1921 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1922 is still needed. */
1923
14f9c5c9 1924int
ebf56fd3 1925ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1926{
d2e4a39e 1927 return
14f9c5c9
AS
1928 type != NULL
1929 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1930 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1931 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1932 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1933}
1934
1935
4c4b4cd2 1936/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1937 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1938 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1939 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1940 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1941 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1942 a descriptor. */
d2e4a39e
AS
1943struct type *
1944ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1945{
ad82864c
JB
1946 if (ada_is_constrained_packed_array_type (value_type (arr)))
1947 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1948
df407dfe
AC
1949 if (!ada_is_array_descriptor_type (value_type (arr)))
1950 return value_type (arr);
d2e4a39e
AS
1951
1952 if (!bounds)
ad82864c
JB
1953 {
1954 struct type *array_type =
1955 ada_check_typedef (desc_data_target_type (value_type (arr)));
1956
1957 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1958 TYPE_FIELD_BITSIZE (array_type, 0) =
1959 decode_packed_array_bitsize (value_type (arr));
1960
1961 return array_type;
1962 }
14f9c5c9
AS
1963 else
1964 {
d2e4a39e 1965 struct type *elt_type;
14f9c5c9 1966 int arity;
d2e4a39e 1967 struct value *descriptor;
14f9c5c9 1968
df407dfe
AC
1969 elt_type = ada_array_element_type (value_type (arr), -1);
1970 arity = ada_array_arity (value_type (arr));
14f9c5c9 1971
d2e4a39e 1972 if (elt_type == NULL || arity == 0)
df407dfe 1973 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1974
1975 descriptor = desc_bounds (arr);
d2e4a39e 1976 if (value_as_long (descriptor) == 0)
4c4b4cd2 1977 return NULL;
d2e4a39e 1978 while (arity > 0)
4c4b4cd2 1979 {
e9bb382b
UW
1980 struct type *range_type = alloc_type_copy (value_type (arr));
1981 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
1982 struct value *low = desc_one_bound (descriptor, arity, 0);
1983 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 1984
5b4ee69b 1985 arity -= 1;
0c9c3474
SA
1986 create_static_range_type (range_type, value_type (low),
1987 longest_to_int (value_as_long (low)),
1988 longest_to_int (value_as_long (high)));
4c4b4cd2 1989 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1990
1991 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1992 {
1993 /* We need to store the element packed bitsize, as well as
1994 recompute the array size, because it was previously
1995 computed based on the unpacked element size. */
1996 LONGEST lo = value_as_long (low);
1997 LONGEST hi = value_as_long (high);
1998
1999 TYPE_FIELD_BITSIZE (elt_type, 0) =
2000 decode_packed_array_bitsize (value_type (arr));
2001 /* If the array has no element, then the size is already
2002 zero, and does not need to be recomputed. */
2003 if (lo < hi)
2004 {
2005 int array_bitsize =
2006 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2007
2008 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2009 }
2010 }
4c4b4cd2 2011 }
14f9c5c9
AS
2012
2013 return lookup_pointer_type (elt_type);
2014 }
2015}
2016
2017/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
2018 Otherwise, returns either a standard GDB array with bounds set
2019 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2020 GDB array. Returns NULL if ARR is a null fat pointer. */
2021
d2e4a39e
AS
2022struct value *
2023ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 2024{
df407dfe 2025 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2026 {
d2e4a39e 2027 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 2028
14f9c5c9 2029 if (arrType == NULL)
4c4b4cd2 2030 return NULL;
14f9c5c9
AS
2031 return value_cast (arrType, value_copy (desc_data (arr)));
2032 }
ad82864c
JB
2033 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2034 return decode_constrained_packed_array (arr);
14f9c5c9
AS
2035 else
2036 return arr;
2037}
2038
2039/* If ARR does not represent an array, returns ARR unchanged.
2040 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
2041 be ARR itself if it already is in the proper form). */
2042
720d1a40 2043struct value *
d2e4a39e 2044ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 2045{
df407dfe 2046 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2047 {
d2e4a39e 2048 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 2049
14f9c5c9 2050 if (arrVal == NULL)
323e0a4a 2051 error (_("Bounds unavailable for null array pointer."));
c1b5a1a6 2052 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
2053 return value_ind (arrVal);
2054 }
ad82864c
JB
2055 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2056 return decode_constrained_packed_array (arr);
d2e4a39e 2057 else
14f9c5c9
AS
2058 return arr;
2059}
2060
2061/* If TYPE represents a GNAT array type, return it translated to an
2062 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
2063 packing). For other types, is the identity. */
2064
d2e4a39e
AS
2065struct type *
2066ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 2067{
ad82864c
JB
2068 if (ada_is_constrained_packed_array_type (type))
2069 return decode_constrained_packed_array_type (type);
17280b9f
UW
2070
2071 if (ada_is_array_descriptor_type (type))
556bdfd4 2072 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
2073
2074 return type;
14f9c5c9
AS
2075}
2076
4c4b4cd2
PH
2077/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
2078
ad82864c
JB
2079static int
2080ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
2081{
2082 if (type == NULL)
2083 return 0;
4c4b4cd2 2084 type = desc_base_type (type);
61ee279c 2085 type = ada_check_typedef (type);
d2e4a39e 2086 return
14f9c5c9
AS
2087 ada_type_name (type) != NULL
2088 && strstr (ada_type_name (type), "___XP") != NULL;
2089}
2090
ad82864c
JB
2091/* Non-zero iff TYPE represents a standard GNAT constrained
2092 packed-array type. */
2093
2094int
2095ada_is_constrained_packed_array_type (struct type *type)
2096{
2097 return ada_is_packed_array_type (type)
2098 && !ada_is_array_descriptor_type (type);
2099}
2100
2101/* Non-zero iff TYPE represents an array descriptor for a
2102 unconstrained packed-array type. */
2103
2104static int
2105ada_is_unconstrained_packed_array_type (struct type *type)
2106{
2107 return ada_is_packed_array_type (type)
2108 && ada_is_array_descriptor_type (type);
2109}
2110
2111/* Given that TYPE encodes a packed array type (constrained or unconstrained),
2112 return the size of its elements in bits. */
2113
2114static long
2115decode_packed_array_bitsize (struct type *type)
2116{
0d5cff50
DE
2117 const char *raw_name;
2118 const char *tail;
ad82864c
JB
2119 long bits;
2120
720d1a40
JB
2121 /* Access to arrays implemented as fat pointers are encoded as a typedef
2122 of the fat pointer type. We need the name of the fat pointer type
2123 to do the decoding, so strip the typedef layer. */
2124 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2125 type = ada_typedef_target_type (type);
2126
2127 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2128 if (!raw_name)
2129 raw_name = ada_type_name (desc_base_type (type));
2130
2131 if (!raw_name)
2132 return 0;
2133
2134 tail = strstr (raw_name, "___XP");
720d1a40 2135 gdb_assert (tail != NULL);
ad82864c
JB
2136
2137 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2138 {
2139 lim_warning
2140 (_("could not understand bit size information on packed array"));
2141 return 0;
2142 }
2143
2144 return bits;
2145}
2146
14f9c5c9
AS
2147/* Given that TYPE is a standard GDB array type with all bounds filled
2148 in, and that the element size of its ultimate scalar constituents
2149 (that is, either its elements, or, if it is an array of arrays, its
2150 elements' elements, etc.) is *ELT_BITS, return an identical type,
2151 but with the bit sizes of its elements (and those of any
2152 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2 2153 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
4a46959e
JB
2154 in bits.
2155
2156 Note that, for arrays whose index type has an XA encoding where
2157 a bound references a record discriminant, getting that discriminant,
2158 and therefore the actual value of that bound, is not possible
2159 because none of the given parameters gives us access to the record.
2160 This function assumes that it is OK in the context where it is being
2161 used to return an array whose bounds are still dynamic and where
2162 the length is arbitrary. */
4c4b4cd2 2163
d2e4a39e 2164static struct type *
ad82864c 2165constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2166{
d2e4a39e
AS
2167 struct type *new_elt_type;
2168 struct type *new_type;
99b1c762
JB
2169 struct type *index_type_desc;
2170 struct type *index_type;
14f9c5c9
AS
2171 LONGEST low_bound, high_bound;
2172
61ee279c 2173 type = ada_check_typedef (type);
14f9c5c9
AS
2174 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2175 return type;
2176
99b1c762
JB
2177 index_type_desc = ada_find_parallel_type (type, "___XA");
2178 if (index_type_desc)
2179 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2180 NULL);
2181 else
2182 index_type = TYPE_INDEX_TYPE (type);
2183
e9bb382b 2184 new_type = alloc_type_copy (type);
ad82864c
JB
2185 new_elt_type =
2186 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2187 elt_bits);
99b1c762 2188 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9
AS
2189 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2190 TYPE_NAME (new_type) = ada_type_name (type);
2191
4a46959e
JB
2192 if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2193 && is_dynamic_type (check_typedef (index_type)))
2194 || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
14f9c5c9
AS
2195 low_bound = high_bound = 0;
2196 if (high_bound < low_bound)
2197 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2198 else
14f9c5c9
AS
2199 {
2200 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2201 TYPE_LENGTH (new_type) =
4c4b4cd2 2202 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2203 }
2204
876cecd0 2205 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
2206 return new_type;
2207}
2208
ad82864c
JB
2209/* The array type encoded by TYPE, where
2210 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2211
d2e4a39e 2212static struct type *
ad82864c 2213decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2214{
0d5cff50 2215 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2216 char *name;
0d5cff50 2217 const char *tail;
d2e4a39e 2218 struct type *shadow_type;
14f9c5c9 2219 long bits;
14f9c5c9 2220
727e3d2e
JB
2221 if (!raw_name)
2222 raw_name = ada_type_name (desc_base_type (type));
2223
2224 if (!raw_name)
2225 return NULL;
2226
2227 name = (char *) alloca (strlen (raw_name) + 1);
2228 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2229 type = desc_base_type (type);
2230
14f9c5c9
AS
2231 memcpy (name, raw_name, tail - raw_name);
2232 name[tail - raw_name] = '\000';
2233
b4ba55a1
JB
2234 shadow_type = ada_find_parallel_type_with_name (type, name);
2235
2236 if (shadow_type == NULL)
14f9c5c9 2237 {
323e0a4a 2238 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2239 return NULL;
2240 }
cb249c71 2241 CHECK_TYPEDEF (shadow_type);
14f9c5c9
AS
2242
2243 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2244 {
0963b4bd
MS
2245 lim_warning (_("could not understand bounds "
2246 "information on packed array"));
14f9c5c9
AS
2247 return NULL;
2248 }
d2e4a39e 2249
ad82864c
JB
2250 bits = decode_packed_array_bitsize (type);
2251 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2252}
2253
ad82864c
JB
2254/* Given that ARR is a struct value *indicating a GNAT constrained packed
2255 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2256 standard GDB array type except that the BITSIZEs of the array
2257 target types are set to the number of bits in each element, and the
4c4b4cd2 2258 type length is set appropriately. */
14f9c5c9 2259
d2e4a39e 2260static struct value *
ad82864c 2261decode_constrained_packed_array (struct value *arr)
14f9c5c9 2262{
4c4b4cd2 2263 struct type *type;
14f9c5c9 2264
11aa919a
PMR
2265 /* If our value is a pointer, then dereference it. Likewise if
2266 the value is a reference. Make sure that this operation does not
2267 cause the target type to be fixed, as this would indirectly cause
2268 this array to be decoded. The rest of the routine assumes that
2269 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2270 and "value_ind" routines to perform the dereferencing, as opposed
2271 to using "ada_coerce_ref" or "ada_value_ind". */
2272 arr = coerce_ref (arr);
828292f2 2273 if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
284614f0 2274 arr = value_ind (arr);
4c4b4cd2 2275
ad82864c 2276 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2277 if (type == NULL)
2278 {
323e0a4a 2279 error (_("can't unpack array"));
14f9c5c9
AS
2280 return NULL;
2281 }
61ee279c 2282
50810684 2283 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
32c9a795 2284 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2285 {
2286 /* This is a (right-justified) modular type representing a packed
2287 array with no wrapper. In order to interpret the value through
2288 the (left-justified) packed array type we just built, we must
2289 first left-justify it. */
2290 int bit_size, bit_pos;
2291 ULONGEST mod;
2292
df407dfe 2293 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2294 bit_size = 0;
2295 while (mod > 0)
2296 {
2297 bit_size += 1;
2298 mod >>= 1;
2299 }
df407dfe 2300 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2301 arr = ada_value_primitive_packed_val (arr, NULL,
2302 bit_pos / HOST_CHAR_BIT,
2303 bit_pos % HOST_CHAR_BIT,
2304 bit_size,
2305 type);
2306 }
2307
4c4b4cd2 2308 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2309}
2310
2311
2312/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2313 given in IND. ARR must be a simple array. */
14f9c5c9 2314
d2e4a39e
AS
2315static struct value *
2316value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2317{
2318 int i;
2319 int bits, elt_off, bit_off;
2320 long elt_total_bit_offset;
d2e4a39e
AS
2321 struct type *elt_type;
2322 struct value *v;
14f9c5c9
AS
2323
2324 bits = 0;
2325 elt_total_bit_offset = 0;
df407dfe 2326 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2327 for (i = 0; i < arity; i += 1)
14f9c5c9 2328 {
d2e4a39e 2329 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
4c4b4cd2
PH
2330 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2331 error
0963b4bd
MS
2332 (_("attempt to do packed indexing of "
2333 "something other than a packed array"));
14f9c5c9 2334 else
4c4b4cd2
PH
2335 {
2336 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2337 LONGEST lowerbound, upperbound;
2338 LONGEST idx;
2339
2340 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2341 {
323e0a4a 2342 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2343 lowerbound = upperbound = 0;
2344 }
2345
3cb382c9 2346 idx = pos_atr (ind[i]);
4c4b4cd2 2347 if (idx < lowerbound || idx > upperbound)
0963b4bd
MS
2348 lim_warning (_("packed array index %ld out of bounds"),
2349 (long) idx);
4c4b4cd2
PH
2350 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2351 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2352 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2353 }
14f9c5c9
AS
2354 }
2355 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2356 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2357
2358 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2359 bits, elt_type);
14f9c5c9
AS
2360 return v;
2361}
2362
4c4b4cd2 2363/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2364
2365static int
d2e4a39e 2366has_negatives (struct type *type)
14f9c5c9 2367{
d2e4a39e
AS
2368 switch (TYPE_CODE (type))
2369 {
2370 default:
2371 return 0;
2372 case TYPE_CODE_INT:
2373 return !TYPE_UNSIGNED (type);
2374 case TYPE_CODE_RANGE:
2375 return TYPE_LOW_BOUND (type) < 0;
2376 }
14f9c5c9 2377}
d2e4a39e 2378
14f9c5c9
AS
2379
2380/* Create a new value of type TYPE from the contents of OBJ starting
2381 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2382 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
0963b4bd 2383 assigning through the result will set the field fetched from.
4c4b4cd2
PH
2384 VALADDR is ignored unless OBJ is NULL, in which case,
2385 VALADDR+OFFSET must address the start of storage containing the
2386 packed value. The value returned in this case is never an lval.
2387 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
14f9c5c9 2388
d2e4a39e 2389struct value *
fc1a4b47 2390ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
a2bd3dcd 2391 long offset, int bit_offset, int bit_size,
4c4b4cd2 2392 struct type *type)
14f9c5c9 2393{
d2e4a39e 2394 struct value *v;
4c4b4cd2
PH
2395 int src, /* Index into the source area */
2396 targ, /* Index into the target area */
2397 srcBitsLeft, /* Number of source bits left to move */
2398 nsrc, ntarg, /* Number of source and target bytes */
2399 unusedLS, /* Number of bits in next significant
2400 byte of source that are unused */
2401 accumSize; /* Number of meaningful bits in accum */
2402 unsigned char *bytes; /* First byte containing data to unpack */
d2e4a39e 2403 unsigned char *unpacked;
4c4b4cd2 2404 unsigned long accum; /* Staging area for bits being transferred */
14f9c5c9
AS
2405 unsigned char sign;
2406 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
4c4b4cd2
PH
2407 /* Transmit bytes from least to most significant; delta is the direction
2408 the indices move. */
50810684 2409 int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
14f9c5c9 2410
61ee279c 2411 type = ada_check_typedef (type);
14f9c5c9
AS
2412
2413 if (obj == NULL)
2414 {
2415 v = allocate_value (type);
d2e4a39e 2416 bytes = (unsigned char *) (valaddr + offset);
14f9c5c9 2417 }
9214ee5f 2418 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
14f9c5c9 2419 {
ca34b84f 2420 v = value_at (type, value_address (obj) + offset);
9f1f738a 2421 type = value_type (v);
fc958966
JB
2422 if (TYPE_LENGTH (type) * HOST_CHAR_BIT < bit_size)
2423 {
2424 /* This can happen in the case of an array of dynamic objects,
2425 where the size of each element changes from element to element.
2426 In that case, we're initially given the array stride, but
2427 after resolving the element type, we find that its size is
2428 less than this stride. In that case, adjust bit_size to
2429 match TYPE's length, and recompute LEN accordingly. */
2430 bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2431 len = TYPE_LENGTH (type) + (bit_offset + HOST_CHAR_BIT - 1) / 8;
2432 }
d2e4a39e 2433 bytes = (unsigned char *) alloca (len);
ca34b84f 2434 read_memory (value_address (v), bytes, len);
14f9c5c9 2435 }
d2e4a39e 2436 else
14f9c5c9
AS
2437 {
2438 v = allocate_value (type);
0fd88904 2439 bytes = (unsigned char *) value_contents (obj) + offset;
14f9c5c9 2440 }
d2e4a39e
AS
2441
2442 if (obj != NULL)
14f9c5c9 2443 {
53ba8333 2444 long new_offset = offset;
5b4ee69b 2445
74bcbdf3 2446 set_value_component_location (v, obj);
9bbda503
AC
2447 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2448 set_value_bitsize (v, bit_size);
df407dfe 2449 if (value_bitpos (v) >= HOST_CHAR_BIT)
4c4b4cd2 2450 {
53ba8333 2451 ++new_offset;
9bbda503 2452 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
4c4b4cd2 2453 }
53ba8333
JB
2454 set_value_offset (v, new_offset);
2455
2456 /* Also set the parent value. This is needed when trying to
2457 assign a new value (in inferior memory). */
2458 set_value_parent (v, obj);
14f9c5c9
AS
2459 }
2460 else
9bbda503 2461 set_value_bitsize (v, bit_size);
0fd88904 2462 unpacked = (unsigned char *) value_contents (v);
14f9c5c9
AS
2463
2464 srcBitsLeft = bit_size;
2465 nsrc = len;
2466 ntarg = TYPE_LENGTH (type);
2467 sign = 0;
2468 if (bit_size == 0)
2469 {
2470 memset (unpacked, 0, TYPE_LENGTH (type));
2471 return v;
2472 }
50810684 2473 else if (gdbarch_bits_big_endian (get_type_arch (type)))
14f9c5c9 2474 {
d2e4a39e 2475 src = len - 1;
1265e4aa
JB
2476 if (has_negatives (type)
2477 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2478 sign = ~0;
d2e4a39e
AS
2479
2480 unusedLS =
4c4b4cd2
PH
2481 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2482 % HOST_CHAR_BIT;
14f9c5c9
AS
2483
2484 switch (TYPE_CODE (type))
4c4b4cd2
PH
2485 {
2486 case TYPE_CODE_ARRAY:
2487 case TYPE_CODE_UNION:
2488 case TYPE_CODE_STRUCT:
2489 /* Non-scalar values must be aligned at a byte boundary... */
2490 accumSize =
2491 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2492 /* ... And are placed at the beginning (most-significant) bytes
2493 of the target. */
529cad9c 2494 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
0056e4d5 2495 ntarg = targ + 1;
4c4b4cd2
PH
2496 break;
2497 default:
2498 accumSize = 0;
2499 targ = TYPE_LENGTH (type) - 1;
2500 break;
2501 }
14f9c5c9 2502 }
d2e4a39e 2503 else
14f9c5c9
AS
2504 {
2505 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2506
2507 src = targ = 0;
2508 unusedLS = bit_offset;
2509 accumSize = 0;
2510
d2e4a39e 2511 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2512 sign = ~0;
14f9c5c9 2513 }
d2e4a39e 2514
14f9c5c9
AS
2515 accum = 0;
2516 while (nsrc > 0)
2517 {
2518 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2519 part of the value. */
d2e4a39e 2520 unsigned int unusedMSMask =
4c4b4cd2
PH
2521 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2522 1;
2523 /* Sign-extend bits for this byte. */
14f9c5c9 2524 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2525
d2e4a39e 2526 accum |=
4c4b4cd2 2527 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2528 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2529 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2
PH
2530 {
2531 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2532 accumSize -= HOST_CHAR_BIT;
2533 accum >>= HOST_CHAR_BIT;
2534 ntarg -= 1;
2535 targ += delta;
2536 }
14f9c5c9
AS
2537 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2538 unusedLS = 0;
2539 nsrc -= 1;
2540 src += delta;
2541 }
2542 while (ntarg > 0)
2543 {
2544 accum |= sign << accumSize;
2545 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2546 accumSize -= HOST_CHAR_BIT;
9cd4d857
JB
2547 if (accumSize < 0)
2548 accumSize = 0;
14f9c5c9
AS
2549 accum >>= HOST_CHAR_BIT;
2550 ntarg -= 1;
2551 targ += delta;
2552 }
2553
2478d075
JB
2554 if (is_dynamic_type (value_type (v)))
2555 v = value_from_contents_and_address (value_type (v), value_contents (v),
2556 0);
14f9c5c9
AS
2557 return v;
2558}
d2e4a39e 2559
14f9c5c9
AS
2560/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2561 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
4c4b4cd2 2562 not overlap. */
14f9c5c9 2563static void
fc1a4b47 2564move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
50810684 2565 int src_offset, int n, int bits_big_endian_p)
14f9c5c9
AS
2566{
2567 unsigned int accum, mask;
2568 int accum_bits, chunk_size;
2569
2570 target += targ_offset / HOST_CHAR_BIT;
2571 targ_offset %= HOST_CHAR_BIT;
2572 source += src_offset / HOST_CHAR_BIT;
2573 src_offset %= HOST_CHAR_BIT;
50810684 2574 if (bits_big_endian_p)
14f9c5c9
AS
2575 {
2576 accum = (unsigned char) *source;
2577 source += 1;
2578 accum_bits = HOST_CHAR_BIT - src_offset;
2579
d2e4a39e 2580 while (n > 0)
4c4b4cd2
PH
2581 {
2582 int unused_right;
5b4ee69b 2583
4c4b4cd2
PH
2584 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2585 accum_bits += HOST_CHAR_BIT;
2586 source += 1;
2587 chunk_size = HOST_CHAR_BIT - targ_offset;
2588 if (chunk_size > n)
2589 chunk_size = n;
2590 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2591 mask = ((1 << chunk_size) - 1) << unused_right;
2592 *target =
2593 (*target & ~mask)
2594 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2595 n -= chunk_size;
2596 accum_bits -= chunk_size;
2597 target += 1;
2598 targ_offset = 0;
2599 }
14f9c5c9
AS
2600 }
2601 else
2602 {
2603 accum = (unsigned char) *source >> src_offset;
2604 source += 1;
2605 accum_bits = HOST_CHAR_BIT - src_offset;
2606
d2e4a39e 2607 while (n > 0)
4c4b4cd2
PH
2608 {
2609 accum = accum + ((unsigned char) *source << accum_bits);
2610 accum_bits += HOST_CHAR_BIT;
2611 source += 1;
2612 chunk_size = HOST_CHAR_BIT - targ_offset;
2613 if (chunk_size > n)
2614 chunk_size = n;
2615 mask = ((1 << chunk_size) - 1) << targ_offset;
2616 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2617 n -= chunk_size;
2618 accum_bits -= chunk_size;
2619 accum >>= chunk_size;
2620 target += 1;
2621 targ_offset = 0;
2622 }
14f9c5c9
AS
2623 }
2624}
2625
14f9c5c9
AS
2626/* Store the contents of FROMVAL into the location of TOVAL.
2627 Return a new value with the location of TOVAL and contents of
2628 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2629 floating-point or non-scalar types. */
14f9c5c9 2630
d2e4a39e
AS
2631static struct value *
2632ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2633{
df407dfe
AC
2634 struct type *type = value_type (toval);
2635 int bits = value_bitsize (toval);
14f9c5c9 2636
52ce6436
PH
2637 toval = ada_coerce_ref (toval);
2638 fromval = ada_coerce_ref (fromval);
2639
2640 if (ada_is_direct_array_type (value_type (toval)))
2641 toval = ada_coerce_to_simple_array (toval);
2642 if (ada_is_direct_array_type (value_type (fromval)))
2643 fromval = ada_coerce_to_simple_array (fromval);
2644
88e3b34b 2645 if (!deprecated_value_modifiable (toval))
323e0a4a 2646 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2647
d2e4a39e 2648 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2649 && bits > 0
d2e4a39e 2650 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2651 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2652 {
df407dfe
AC
2653 int len = (value_bitpos (toval)
2654 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2655 int from_size;
948f8e3d 2656 gdb_byte *buffer = alloca (len);
d2e4a39e 2657 struct value *val;
42ae5230 2658 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2659
2660 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2661 fromval = value_cast (type, fromval);
14f9c5c9 2662
52ce6436 2663 read_memory (to_addr, buffer, len);
aced2898
PH
2664 from_size = value_bitsize (fromval);
2665 if (from_size == 0)
2666 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2667 if (gdbarch_bits_big_endian (get_type_arch (type)))
df407dfe 2668 move_bits (buffer, value_bitpos (toval),
50810684 2669 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2670 else
50810684
UW
2671 move_bits (buffer, value_bitpos (toval),
2672 value_contents (fromval), 0, bits, 0);
972daa01 2673 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2674
14f9c5c9 2675 val = value_copy (toval);
0fd88904 2676 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2677 TYPE_LENGTH (type));
04624583 2678 deprecated_set_value_type (val, type);
d2e4a39e 2679
14f9c5c9
AS
2680 return val;
2681 }
2682
2683 return value_assign (toval, fromval);
2684}
2685
2686
7c512744
JB
2687/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2688 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2689 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2690 COMPONENT, and not the inferior's memory. The current contents
2691 of COMPONENT are ignored.
2692
2693 Although not part of the initial design, this function also works
2694 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2695 had a null address, and COMPONENT had an address which is equal to
2696 its offset inside CONTAINER. */
2697
52ce6436
PH
2698static void
2699value_assign_to_component (struct value *container, struct value *component,
2700 struct value *val)
2701{
2702 LONGEST offset_in_container =
42ae5230 2703 (LONGEST) (value_address (component) - value_address (container));
7c512744 2704 int bit_offset_in_container =
52ce6436
PH
2705 value_bitpos (component) - value_bitpos (container);
2706 int bits;
7c512744 2707
52ce6436
PH
2708 val = value_cast (value_type (component), val);
2709
2710 if (value_bitsize (component) == 0)
2711 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2712 else
2713 bits = value_bitsize (component);
2714
50810684 2715 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
7c512744 2716 move_bits (value_contents_writeable (container) + offset_in_container,
52ce6436
PH
2717 value_bitpos (container) + bit_offset_in_container,
2718 value_contents (val),
2719 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
50810684 2720 bits, 1);
52ce6436 2721 else
7c512744 2722 move_bits (value_contents_writeable (container) + offset_in_container,
52ce6436 2723 value_bitpos (container) + bit_offset_in_container,
50810684 2724 value_contents (val), 0, bits, 0);
7c512744
JB
2725}
2726
4c4b4cd2
PH
2727/* The value of the element of array ARR at the ARITY indices given in IND.
2728 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2729 thereto. */
2730
d2e4a39e
AS
2731struct value *
2732ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2733{
2734 int k;
d2e4a39e
AS
2735 struct value *elt;
2736 struct type *elt_type;
14f9c5c9
AS
2737
2738 elt = ada_coerce_to_simple_array (arr);
2739
df407dfe 2740 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2741 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2742 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2743 return value_subscript_packed (elt, arity, ind);
2744
2745 for (k = 0; k < arity; k += 1)
2746 {
2747 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2748 error (_("too many subscripts (%d expected)"), k);
2497b498 2749 elt = value_subscript (elt, pos_atr (ind[k]));
14f9c5c9
AS
2750 }
2751 return elt;
2752}
2753
deede10c
JB
2754/* Assuming ARR is a pointer to a GDB array, the value of the element
2755 of *ARR at the ARITY indices given in IND.
2756 Does not read the entire array into memory. */
14f9c5c9 2757
2c0b251b 2758static struct value *
deede10c 2759ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2760{
2761 int k;
deede10c
JB
2762 struct type *type
2763 = check_typedef (value_enclosing_type (ada_value_ind (arr)));
14f9c5c9
AS
2764
2765 for (k = 0; k < arity; k += 1)
2766 {
2767 LONGEST lwb, upb;
aa715135 2768 struct value *lwb_value;
14f9c5c9
AS
2769
2770 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2771 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2772 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2773 value_copy (arr));
14f9c5c9 2774 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
aa715135
JG
2775 lwb_value = value_from_longest (value_type(ind[k]), lwb);
2776 arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value));
14f9c5c9
AS
2777 type = TYPE_TARGET_TYPE (type);
2778 }
2779
2780 return value_ind (arr);
2781}
2782
0b5d8877 2783/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
aa715135
JG
2784 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2785 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2786 this array is LOW, as per Ada rules. */
0b5d8877 2787static struct value *
f5938064
JG
2788ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2789 int low, int high)
0b5d8877 2790{
b0dd7688 2791 struct type *type0 = ada_check_typedef (type);
aa715135 2792 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
0c9c3474 2793 struct type *index_type
aa715135 2794 = create_static_range_type (NULL, base_index_type, low, high);
6c038f32 2795 struct type *slice_type =
b0dd7688 2796 create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
aa715135
JG
2797 int base_low = ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
2798 LONGEST base_low_pos, low_pos;
2799 CORE_ADDR base;
2800
2801 if (!discrete_position (base_index_type, low, &low_pos)
2802 || !discrete_position (base_index_type, base_low, &base_low_pos))
2803 {
2804 warning (_("unable to get positions in slice, use bounds instead"));
2805 low_pos = low;
2806 base_low_pos = base_low;
2807 }
5b4ee69b 2808
aa715135
JG
2809 base = value_as_address (array_ptr)
2810 + ((low_pos - base_low_pos)
2811 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
f5938064 2812 return value_at_lazy (slice_type, base);
0b5d8877
PH
2813}
2814
2815
2816static struct value *
2817ada_value_slice (struct value *array, int low, int high)
2818{
b0dd7688 2819 struct type *type = ada_check_typedef (value_type (array));
aa715135 2820 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
0c9c3474
SA
2821 struct type *index_type
2822 = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
6c038f32 2823 struct type *slice_type =
0b5d8877 2824 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
aa715135 2825 LONGEST low_pos, high_pos;
5b4ee69b 2826
aa715135
JG
2827 if (!discrete_position (base_index_type, low, &low_pos)
2828 || !discrete_position (base_index_type, high, &high_pos))
2829 {
2830 warning (_("unable to get positions in slice, use bounds instead"));
2831 low_pos = low;
2832 high_pos = high;
2833 }
2834
2835 return value_cast (slice_type,
2836 value_slice (array, low, high_pos - low_pos + 1));
0b5d8877
PH
2837}
2838
14f9c5c9
AS
2839/* If type is a record type in the form of a standard GNAT array
2840 descriptor, returns the number of dimensions for type. If arr is a
2841 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2842 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2843
2844int
d2e4a39e 2845ada_array_arity (struct type *type)
14f9c5c9
AS
2846{
2847 int arity;
2848
2849 if (type == NULL)
2850 return 0;
2851
2852 type = desc_base_type (type);
2853
2854 arity = 0;
d2e4a39e 2855 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 2856 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
2857 else
2858 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 2859 {
4c4b4cd2 2860 arity += 1;
61ee279c 2861 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2862 }
d2e4a39e 2863
14f9c5c9
AS
2864 return arity;
2865}
2866
2867/* If TYPE is a record type in the form of a standard GNAT array
2868 descriptor or a simple array type, returns the element type for
2869 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2870 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2871
d2e4a39e
AS
2872struct type *
2873ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2874{
2875 type = desc_base_type (type);
2876
d2e4a39e 2877 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
2878 {
2879 int k;
d2e4a39e 2880 struct type *p_array_type;
14f9c5c9 2881
556bdfd4 2882 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2883
2884 k = ada_array_arity (type);
2885 if (k == 0)
4c4b4cd2 2886 return NULL;
d2e4a39e 2887
4c4b4cd2 2888 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2889 if (nindices >= 0 && k > nindices)
4c4b4cd2 2890 k = nindices;
d2e4a39e 2891 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2892 {
61ee279c 2893 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2894 k -= 1;
2895 }
14f9c5c9
AS
2896 return p_array_type;
2897 }
2898 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2899 {
2900 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
2901 {
2902 type = TYPE_TARGET_TYPE (type);
2903 nindices -= 1;
2904 }
14f9c5c9
AS
2905 return type;
2906 }
2907
2908 return NULL;
2909}
2910
4c4b4cd2 2911/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2912 Does not examine memory. Throws an error if N is invalid or TYPE
2913 is not an array type. NAME is the name of the Ada attribute being
2914 evaluated ('range, 'first, 'last, or 'length); it is used in building
2915 the error message. */
14f9c5c9 2916
1eea4ebd
UW
2917static struct type *
2918ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2919{
4c4b4cd2
PH
2920 struct type *result_type;
2921
14f9c5c9
AS
2922 type = desc_base_type (type);
2923
1eea4ebd
UW
2924 if (n < 0 || n > ada_array_arity (type))
2925 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2926
4c4b4cd2 2927 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2928 {
2929 int i;
2930
2931 for (i = 1; i < n; i += 1)
4c4b4cd2 2932 type = TYPE_TARGET_TYPE (type);
262452ec 2933 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
2934 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2935 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 2936 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
2937 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2938 result_type = NULL;
14f9c5c9 2939 }
d2e4a39e 2940 else
1eea4ebd
UW
2941 {
2942 result_type = desc_index_type (desc_bounds_type (type), n);
2943 if (result_type == NULL)
2944 error (_("attempt to take bound of something that is not an array"));
2945 }
2946
2947 return result_type;
14f9c5c9
AS
2948}
2949
2950/* Given that arr is an array type, returns the lower bound of the
2951 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2952 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2953 array-descriptor type. It works for other arrays with bounds supplied
2954 by run-time quantities other than discriminants. */
14f9c5c9 2955
abb68b3e 2956static LONGEST
fb5e3d5c 2957ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 2958{
8a48ac95 2959 struct type *type, *index_type_desc, *index_type;
1ce677a4 2960 int i;
262452ec
JK
2961
2962 gdb_assert (which == 0 || which == 1);
14f9c5c9 2963
ad82864c
JB
2964 if (ada_is_constrained_packed_array_type (arr_type))
2965 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2966
4c4b4cd2 2967 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2968 return (LONGEST) - which;
14f9c5c9
AS
2969
2970 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2971 type = TYPE_TARGET_TYPE (arr_type);
2972 else
2973 type = arr_type;
2974
bafffb51
JB
2975 if (TYPE_FIXED_INSTANCE (type))
2976 {
2977 /* The array has already been fixed, so we do not need to
2978 check the parallel ___XA type again. That encoding has
2979 already been applied, so ignore it now. */
2980 index_type_desc = NULL;
2981 }
2982 else
2983 {
2984 index_type_desc = ada_find_parallel_type (type, "___XA");
2985 ada_fixup_array_indexes_type (index_type_desc);
2986 }
2987
262452ec 2988 if (index_type_desc != NULL)
28c85d6c
JB
2989 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2990 NULL);
262452ec 2991 else
8a48ac95
JB
2992 {
2993 struct type *elt_type = check_typedef (type);
2994
2995 for (i = 1; i < n; i++)
2996 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2997
2998 index_type = TYPE_INDEX_TYPE (elt_type);
2999 }
262452ec 3000
43bbcdc2
PH
3001 return
3002 (LONGEST) (which == 0
3003 ? ada_discrete_type_low_bound (index_type)
3004 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
3005}
3006
3007/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
3008 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3009 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 3010 supplied by run-time quantities other than discriminants. */
14f9c5c9 3011
1eea4ebd 3012static LONGEST
4dc81987 3013ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 3014{
eb479039
JB
3015 struct type *arr_type;
3016
3017 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3018 arr = value_ind (arr);
3019 arr_type = value_enclosing_type (arr);
14f9c5c9 3020
ad82864c
JB
3021 if (ada_is_constrained_packed_array_type (arr_type))
3022 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 3023 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 3024 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 3025 else
1eea4ebd 3026 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
3027}
3028
3029/* Given that arr is an array value, returns the length of the
3030 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
3031 supplied by run-time quantities other than discriminants.
3032 Does not work for arrays indexed by enumeration types with representation
3033 clauses at the moment. */
14f9c5c9 3034
1eea4ebd 3035static LONGEST
d2e4a39e 3036ada_array_length (struct value *arr, int n)
14f9c5c9 3037{
aa715135
JG
3038 struct type *arr_type, *index_type;
3039 int low, high;
eb479039
JB
3040
3041 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3042 arr = value_ind (arr);
3043 arr_type = value_enclosing_type (arr);
14f9c5c9 3044
ad82864c
JB
3045 if (ada_is_constrained_packed_array_type (arr_type))
3046 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3047
4c4b4cd2 3048 if (ada_is_simple_array_type (arr_type))
aa715135
JG
3049 {
3050 low = ada_array_bound_from_type (arr_type, n, 0);
3051 high = ada_array_bound_from_type (arr_type, n, 1);
3052 }
14f9c5c9 3053 else
aa715135
JG
3054 {
3055 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3056 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3057 }
3058
3059 CHECK_TYPEDEF (arr_type);
3060 index_type = TYPE_INDEX_TYPE (arr_type);
3061 if (index_type != NULL)
3062 {
3063 struct type *base_type;
3064 if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
3065 base_type = TYPE_TARGET_TYPE (index_type);
3066 else
3067 base_type = index_type;
3068
3069 low = pos_atr (value_from_longest (base_type, low));
3070 high = pos_atr (value_from_longest (base_type, high));
3071 }
3072 return high - low + 1;
4c4b4cd2
PH
3073}
3074
3075/* An empty array whose type is that of ARR_TYPE (an array type),
3076 with bounds LOW to LOW-1. */
3077
3078static struct value *
3079empty_array (struct type *arr_type, int low)
3080{
b0dd7688 3081 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3082 struct type *index_type
3083 = create_static_range_type
3084 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low, low - 1);
b0dd7688 3085 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3086
0b5d8877 3087 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3088}
14f9c5c9 3089\f
d2e4a39e 3090
4c4b4cd2 3091 /* Name resolution */
14f9c5c9 3092
4c4b4cd2
PH
3093/* The "decoded" name for the user-definable Ada operator corresponding
3094 to OP. */
14f9c5c9 3095
d2e4a39e 3096static const char *
4c4b4cd2 3097ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3098{
3099 int i;
3100
4c4b4cd2 3101 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3102 {
3103 if (ada_opname_table[i].op == op)
4c4b4cd2 3104 return ada_opname_table[i].decoded;
14f9c5c9 3105 }
323e0a4a 3106 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3107}
3108
3109
4c4b4cd2
PH
3110/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3111 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3112 undefined namespace) and converts operators that are
3113 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
3114 non-null, it provides a preferred result type [at the moment, only
3115 type void has any effect---causing procedures to be preferred over
3116 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 3117 return type is preferred. May change (expand) *EXP. */
14f9c5c9 3118
4c4b4cd2
PH
3119static void
3120resolve (struct expression **expp, int void_context_p)
14f9c5c9 3121{
30b15541
UW
3122 struct type *context_type = NULL;
3123 int pc = 0;
3124
3125 if (void_context_p)
3126 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3127
3128 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
3129}
3130
4c4b4cd2
PH
3131/* Resolve the operator of the subexpression beginning at
3132 position *POS of *EXPP. "Resolving" consists of replacing
3133 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3134 with their resolutions, replacing built-in operators with
3135 function calls to user-defined operators, where appropriate, and,
3136 when DEPROCEDURE_P is non-zero, converting function-valued variables
3137 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3138 are as in ada_resolve, above. */
14f9c5c9 3139
d2e4a39e 3140static struct value *
4c4b4cd2 3141resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
76a01679 3142 struct type *context_type)
14f9c5c9
AS
3143{
3144 int pc = *pos;
3145 int i;
4c4b4cd2 3146 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 3147 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
3148 struct value **argvec; /* Vector of operand types (alloca'ed). */
3149 int nargs; /* Number of operands. */
52ce6436 3150 int oplen;
14f9c5c9
AS
3151
3152 argvec = NULL;
3153 nargs = 0;
3154 exp = *expp;
3155
52ce6436
PH
3156 /* Pass one: resolve operands, saving their types and updating *pos,
3157 if needed. */
14f9c5c9
AS
3158 switch (op)
3159 {
4c4b4cd2
PH
3160 case OP_FUNCALL:
3161 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
3162 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3163 *pos += 7;
4c4b4cd2
PH
3164 else
3165 {
3166 *pos += 3;
3167 resolve_subexp (expp, pos, 0, NULL);
3168 }
3169 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
3170 break;
3171
14f9c5c9 3172 case UNOP_ADDR:
4c4b4cd2
PH
3173 *pos += 1;
3174 resolve_subexp (expp, pos, 0, NULL);
3175 break;
3176
52ce6436
PH
3177 case UNOP_QUAL:
3178 *pos += 3;
17466c1a 3179 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
3180 break;
3181
52ce6436 3182 case OP_ATR_MODULUS:
4c4b4cd2
PH
3183 case OP_ATR_SIZE:
3184 case OP_ATR_TAG:
4c4b4cd2
PH
3185 case OP_ATR_FIRST:
3186 case OP_ATR_LAST:
3187 case OP_ATR_LENGTH:
3188 case OP_ATR_POS:
3189 case OP_ATR_VAL:
4c4b4cd2
PH
3190 case OP_ATR_MIN:
3191 case OP_ATR_MAX:
52ce6436
PH
3192 case TERNOP_IN_RANGE:
3193 case BINOP_IN_BOUNDS:
3194 case UNOP_IN_RANGE:
3195 case OP_AGGREGATE:
3196 case OP_OTHERS:
3197 case OP_CHOICES:
3198 case OP_POSITIONAL:
3199 case OP_DISCRETE_RANGE:
3200 case OP_NAME:
3201 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3202 *pos += oplen;
14f9c5c9
AS
3203 break;
3204
3205 case BINOP_ASSIGN:
3206 {
4c4b4cd2
PH
3207 struct value *arg1;
3208
3209 *pos += 1;
3210 arg1 = resolve_subexp (expp, pos, 0, NULL);
3211 if (arg1 == NULL)
3212 resolve_subexp (expp, pos, 1, NULL);
3213 else
df407dfe 3214 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 3215 break;
14f9c5c9
AS
3216 }
3217
4c4b4cd2 3218 case UNOP_CAST:
4c4b4cd2
PH
3219 *pos += 3;
3220 nargs = 1;
3221 break;
14f9c5c9 3222
4c4b4cd2
PH
3223 case BINOP_ADD:
3224 case BINOP_SUB:
3225 case BINOP_MUL:
3226 case BINOP_DIV:
3227 case BINOP_REM:
3228 case BINOP_MOD:
3229 case BINOP_EXP:
3230 case BINOP_CONCAT:
3231 case BINOP_LOGICAL_AND:
3232 case BINOP_LOGICAL_OR:
3233 case BINOP_BITWISE_AND:
3234 case BINOP_BITWISE_IOR:
3235 case BINOP_BITWISE_XOR:
14f9c5c9 3236
4c4b4cd2
PH
3237 case BINOP_EQUAL:
3238 case BINOP_NOTEQUAL:
3239 case BINOP_LESS:
3240 case BINOP_GTR:
3241 case BINOP_LEQ:
3242 case BINOP_GEQ:
14f9c5c9 3243
4c4b4cd2
PH
3244 case BINOP_REPEAT:
3245 case BINOP_SUBSCRIPT:
3246 case BINOP_COMMA:
40c8aaa9
JB
3247 *pos += 1;
3248 nargs = 2;
3249 break;
14f9c5c9 3250
4c4b4cd2
PH
3251 case UNOP_NEG:
3252 case UNOP_PLUS:
3253 case UNOP_LOGICAL_NOT:
3254 case UNOP_ABS:
3255 case UNOP_IND:
3256 *pos += 1;
3257 nargs = 1;
3258 break;
14f9c5c9 3259
4c4b4cd2
PH
3260 case OP_LONG:
3261 case OP_DOUBLE:
3262 case OP_VAR_VALUE:
3263 *pos += 4;
3264 break;
14f9c5c9 3265
4c4b4cd2
PH
3266 case OP_TYPE:
3267 case OP_BOOL:
3268 case OP_LAST:
4c4b4cd2
PH
3269 case OP_INTERNALVAR:
3270 *pos += 3;
3271 break;
14f9c5c9 3272
4c4b4cd2
PH
3273 case UNOP_MEMVAL:
3274 *pos += 3;
3275 nargs = 1;
3276 break;
3277
67f3407f
DJ
3278 case OP_REGISTER:
3279 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3280 break;
3281
4c4b4cd2
PH
3282 case STRUCTOP_STRUCT:
3283 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3284 nargs = 1;
3285 break;
3286
4c4b4cd2 3287 case TERNOP_SLICE:
4c4b4cd2
PH
3288 *pos += 1;
3289 nargs = 3;
3290 break;
3291
52ce6436 3292 case OP_STRING:
14f9c5c9 3293 break;
4c4b4cd2
PH
3294
3295 default:
323e0a4a 3296 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3297 }
3298
76a01679 3299 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
4c4b4cd2
PH
3300 for (i = 0; i < nargs; i += 1)
3301 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3302 argvec[i] = NULL;
3303 exp = *expp;
3304
3305 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3306 switch (op)
3307 {
3308 default:
3309 break;
3310
14f9c5c9 3311 case OP_VAR_VALUE:
4c4b4cd2 3312 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
3313 {
3314 struct ada_symbol_info *candidates;
3315 int n_candidates;
3316
3317 n_candidates =
3318 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3319 (exp->elts[pc + 2].symbol),
3320 exp->elts[pc + 1].block, VAR_DOMAIN,
4eeaa230 3321 &candidates);
76a01679
JB
3322
3323 if (n_candidates > 1)
3324 {
3325 /* Types tend to get re-introduced locally, so if there
3326 are any local symbols that are not types, first filter
3327 out all types. */
3328 int j;
3329 for (j = 0; j < n_candidates; j += 1)
3330 switch (SYMBOL_CLASS (candidates[j].sym))
3331 {
3332 case LOC_REGISTER:
3333 case LOC_ARG:
3334 case LOC_REF_ARG:
76a01679
JB
3335 case LOC_REGPARM_ADDR:
3336 case LOC_LOCAL:
76a01679 3337 case LOC_COMPUTED:
76a01679
JB
3338 goto FoundNonType;
3339 default:
3340 break;
3341 }
3342 FoundNonType:
3343 if (j < n_candidates)
3344 {
3345 j = 0;
3346 while (j < n_candidates)
3347 {
3348 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3349 {
3350 candidates[j] = candidates[n_candidates - 1];
3351 n_candidates -= 1;
3352 }
3353 else
3354 j += 1;
3355 }
3356 }
3357 }
3358
3359 if (n_candidates == 0)
323e0a4a 3360 error (_("No definition found for %s"),
76a01679
JB
3361 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3362 else if (n_candidates == 1)
3363 i = 0;
3364 else if (deprocedure_p
3365 && !is_nonfunction (candidates, n_candidates))
3366 {
06d5cf63
JB
3367 i = ada_resolve_function
3368 (candidates, n_candidates, NULL, 0,
3369 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3370 context_type);
76a01679 3371 if (i < 0)
323e0a4a 3372 error (_("Could not find a match for %s"),
76a01679
JB
3373 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3374 }
3375 else
3376 {
323e0a4a 3377 printf_filtered (_("Multiple matches for %s\n"),
76a01679
JB
3378 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3379 user_select_syms (candidates, n_candidates, 1);
3380 i = 0;
3381 }
3382
3383 exp->elts[pc + 1].block = candidates[i].block;
3384 exp->elts[pc + 2].symbol = candidates[i].sym;
1265e4aa
JB
3385 if (innermost_block == NULL
3386 || contained_in (candidates[i].block, innermost_block))
76a01679
JB
3387 innermost_block = candidates[i].block;
3388 }
3389
3390 if (deprocedure_p
3391 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3392 == TYPE_CODE_FUNC))
3393 {
3394 replace_operator_with_call (expp, pc, 0, 0,
3395 exp->elts[pc + 2].symbol,
3396 exp->elts[pc + 1].block);
3397 exp = *expp;
3398 }
14f9c5c9
AS
3399 break;
3400
3401 case OP_FUNCALL:
3402 {
4c4b4cd2 3403 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3404 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2
PH
3405 {
3406 struct ada_symbol_info *candidates;
3407 int n_candidates;
3408
3409 n_candidates =
76a01679
JB
3410 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3411 (exp->elts[pc + 5].symbol),
3412 exp->elts[pc + 4].block, VAR_DOMAIN,
4eeaa230 3413 &candidates);
4c4b4cd2
PH
3414 if (n_candidates == 1)
3415 i = 0;
3416 else
3417 {
06d5cf63
JB
3418 i = ada_resolve_function
3419 (candidates, n_candidates,
3420 argvec, nargs,
3421 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3422 context_type);
4c4b4cd2 3423 if (i < 0)
323e0a4a 3424 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3425 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3426 }
3427
3428 exp->elts[pc + 4].block = candidates[i].block;
3429 exp->elts[pc + 5].symbol = candidates[i].sym;
1265e4aa
JB
3430 if (innermost_block == NULL
3431 || contained_in (candidates[i].block, innermost_block))
4c4b4cd2
PH
3432 innermost_block = candidates[i].block;
3433 }
14f9c5c9
AS
3434 }
3435 break;
3436 case BINOP_ADD:
3437 case BINOP_SUB:
3438 case BINOP_MUL:
3439 case BINOP_DIV:
3440 case BINOP_REM:
3441 case BINOP_MOD:
3442 case BINOP_CONCAT:
3443 case BINOP_BITWISE_AND:
3444 case BINOP_BITWISE_IOR:
3445 case BINOP_BITWISE_XOR:
3446 case BINOP_EQUAL:
3447 case BINOP_NOTEQUAL:
3448 case BINOP_LESS:
3449 case BINOP_GTR:
3450 case BINOP_LEQ:
3451 case BINOP_GEQ:
3452 case BINOP_EXP:
3453 case UNOP_NEG:
3454 case UNOP_PLUS:
3455 case UNOP_LOGICAL_NOT:
3456 case UNOP_ABS:
3457 if (possible_user_operator_p (op, argvec))
4c4b4cd2
PH
3458 {
3459 struct ada_symbol_info *candidates;
3460 int n_candidates;
3461
3462 n_candidates =
3463 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3464 (struct block *) NULL, VAR_DOMAIN,
4eeaa230 3465 &candidates);
4c4b4cd2 3466 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
76a01679 3467 ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3468 if (i < 0)
3469 break;
3470
76a01679
JB
3471 replace_operator_with_call (expp, pc, nargs, 1,
3472 candidates[i].sym, candidates[i].block);
4c4b4cd2
PH
3473 exp = *expp;
3474 }
14f9c5c9 3475 break;
4c4b4cd2
PH
3476
3477 case OP_TYPE:
b3dbf008 3478 case OP_REGISTER:
4c4b4cd2 3479 return NULL;
14f9c5c9
AS
3480 }
3481
3482 *pos = pc;
3483 return evaluate_subexp_type (exp, pos);
3484}
3485
3486/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3487 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3488 a non-pointer. */
14f9c5c9 3489/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3490 liberal. */
14f9c5c9
AS
3491
3492static int
4dc81987 3493ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3494{
61ee279c
PH
3495 ftype = ada_check_typedef (ftype);
3496 atype = ada_check_typedef (atype);
14f9c5c9
AS
3497
3498 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3499 ftype = TYPE_TARGET_TYPE (ftype);
3500 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3501 atype = TYPE_TARGET_TYPE (atype);
3502
d2e4a39e 3503 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3504 {
3505 default:
5b3d5b7d 3506 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3507 case TYPE_CODE_PTR:
3508 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3509 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3510 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3511 else
1265e4aa
JB
3512 return (may_deref
3513 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3514 case TYPE_CODE_INT:
3515 case TYPE_CODE_ENUM:
3516 case TYPE_CODE_RANGE:
3517 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3518 {
3519 case TYPE_CODE_INT:
3520 case TYPE_CODE_ENUM:
3521 case TYPE_CODE_RANGE:
3522 return 1;
3523 default:
3524 return 0;
3525 }
14f9c5c9
AS
3526
3527 case TYPE_CODE_ARRAY:
d2e4a39e 3528 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3529 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3530
3531 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3532 if (ada_is_array_descriptor_type (ftype))
3533 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3534 || ada_is_array_descriptor_type (atype));
14f9c5c9 3535 else
4c4b4cd2
PH
3536 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3537 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3538
3539 case TYPE_CODE_UNION:
3540 case TYPE_CODE_FLT:
3541 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3542 }
3543}
3544
3545/* Return non-zero if the formals of FUNC "sufficiently match" the
3546 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3547 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3548 argument function. */
14f9c5c9
AS
3549
3550static int
d2e4a39e 3551ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3552{
3553 int i;
d2e4a39e 3554 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3555
1265e4aa
JB
3556 if (SYMBOL_CLASS (func) == LOC_CONST
3557 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3558 return (n_actuals == 0);
3559 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3560 return 0;
3561
3562 if (TYPE_NFIELDS (func_type) != n_actuals)
3563 return 0;
3564
3565 for (i = 0; i < n_actuals; i += 1)
3566 {
4c4b4cd2 3567 if (actuals[i] == NULL)
76a01679
JB
3568 return 0;
3569 else
3570 {
5b4ee69b
MS
3571 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3572 i));
df407dfe 3573 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3574
76a01679
JB
3575 if (!ada_type_match (ftype, atype, 1))
3576 return 0;
3577 }
14f9c5c9
AS
3578 }
3579 return 1;
3580}
3581
3582/* False iff function type FUNC_TYPE definitely does not produce a value
3583 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3584 FUNC_TYPE is not a valid function type with a non-null return type
3585 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3586
3587static int
d2e4a39e 3588return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3589{
d2e4a39e 3590 struct type *return_type;
14f9c5c9
AS
3591
3592 if (func_type == NULL)
3593 return 1;
3594
4c4b4cd2 3595 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3596 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3597 else
18af8284 3598 return_type = get_base_type (func_type);
14f9c5c9
AS
3599 if (return_type == NULL)
3600 return 1;
3601
18af8284 3602 context_type = get_base_type (context_type);
14f9c5c9
AS
3603
3604 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3605 return context_type == NULL || return_type == context_type;
3606 else if (context_type == NULL)
3607 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3608 else
3609 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3610}
3611
3612
4c4b4cd2 3613/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3614 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3615 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3616 that returns that type, then eliminate matches that don't. If
3617 CONTEXT_TYPE is void and there is at least one match that does not
3618 return void, eliminate all matches that do.
3619
14f9c5c9
AS
3620 Asks the user if there is more than one match remaining. Returns -1
3621 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3622 solely for messages. May re-arrange and modify SYMS in
3623 the process; the index returned is for the modified vector. */
14f9c5c9 3624
4c4b4cd2
PH
3625static int
3626ada_resolve_function (struct ada_symbol_info syms[],
3627 int nsyms, struct value **args, int nargs,
3628 const char *name, struct type *context_type)
14f9c5c9 3629{
30b15541 3630 int fallback;
14f9c5c9 3631 int k;
4c4b4cd2 3632 int m; /* Number of hits */
14f9c5c9 3633
d2e4a39e 3634 m = 0;
30b15541
UW
3635 /* In the first pass of the loop, we only accept functions matching
3636 context_type. If none are found, we add a second pass of the loop
3637 where every function is accepted. */
3638 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3639 {
3640 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3641 {
61ee279c 3642 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
4c4b4cd2
PH
3643
3644 if (ada_args_match (syms[k].sym, args, nargs)
30b15541 3645 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3646 {
3647 syms[m] = syms[k];
3648 m += 1;
3649 }
3650 }
14f9c5c9
AS
3651 }
3652
3653 if (m == 0)
3654 return -1;
3655 else if (m > 1)
3656 {
323e0a4a 3657 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3658 user_select_syms (syms, m, 1);
14f9c5c9
AS
3659 return 0;
3660 }
3661 return 0;
3662}
3663
4c4b4cd2
PH
3664/* Returns true (non-zero) iff decoded name N0 should appear before N1
3665 in a listing of choices during disambiguation (see sort_choices, below).
3666 The idea is that overloadings of a subprogram name from the
3667 same package should sort in their source order. We settle for ordering
3668 such symbols by their trailing number (__N or $N). */
3669
14f9c5c9 3670static int
0d5cff50 3671encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9
AS
3672{
3673 if (N1 == NULL)
3674 return 0;
3675 else if (N0 == NULL)
3676 return 1;
3677 else
3678 {
3679 int k0, k1;
5b4ee69b 3680
d2e4a39e 3681 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3682 ;
d2e4a39e 3683 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3684 ;
d2e4a39e 3685 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3686 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3687 {
3688 int n0, n1;
5b4ee69b 3689
4c4b4cd2
PH
3690 n0 = k0;
3691 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3692 n0 -= 1;
3693 n1 = k1;
3694 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3695 n1 -= 1;
3696 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3697 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3698 }
14f9c5c9
AS
3699 return (strcmp (N0, N1) < 0);
3700 }
3701}
d2e4a39e 3702
4c4b4cd2
PH
3703/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3704 encoded names. */
3705
d2e4a39e 3706static void
4c4b4cd2 3707sort_choices (struct ada_symbol_info syms[], int nsyms)
14f9c5c9 3708{
4c4b4cd2 3709 int i;
5b4ee69b 3710
d2e4a39e 3711 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3712 {
4c4b4cd2 3713 struct ada_symbol_info sym = syms[i];
14f9c5c9
AS
3714 int j;
3715
d2e4a39e 3716 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2
PH
3717 {
3718 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3719 SYMBOL_LINKAGE_NAME (sym.sym)))
3720 break;
3721 syms[j + 1] = syms[j];
3722 }
d2e4a39e 3723 syms[j + 1] = sym;
14f9c5c9
AS
3724 }
3725}
3726
4c4b4cd2
PH
3727/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3728 by asking the user (if necessary), returning the number selected,
3729 and setting the first elements of SYMS items. Error if no symbols
3730 selected. */
14f9c5c9
AS
3731
3732/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3733 to be re-integrated one of these days. */
14f9c5c9
AS
3734
3735int
4c4b4cd2 3736user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
14f9c5c9
AS
3737{
3738 int i;
d2e4a39e 3739 int *chosen = (int *) alloca (sizeof (int) * nsyms);
14f9c5c9
AS
3740 int n_chosen;
3741 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3742 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3743
3744 if (max_results < 1)
323e0a4a 3745 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3746 if (nsyms <= 1)
3747 return nsyms;
3748
717d2f5a
JB
3749 if (select_mode == multiple_symbols_cancel)
3750 error (_("\
3751canceled because the command is ambiguous\n\
3752See set/show multiple-symbol."));
3753
3754 /* If select_mode is "all", then return all possible symbols.
3755 Only do that if more than one symbol can be selected, of course.
3756 Otherwise, display the menu as usual. */
3757 if (select_mode == multiple_symbols_all && max_results > 1)
3758 return nsyms;
3759
323e0a4a 3760 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3761 if (max_results > 1)
323e0a4a 3762 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3763
4c4b4cd2 3764 sort_choices (syms, nsyms);
14f9c5c9
AS
3765
3766 for (i = 0; i < nsyms; i += 1)
3767 {
4c4b4cd2
PH
3768 if (syms[i].sym == NULL)
3769 continue;
3770
3771 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3772 {
76a01679
JB
3773 struct symtab_and_line sal =
3774 find_function_start_sal (syms[i].sym, 1);
5b4ee69b 3775
323e0a4a
AC
3776 if (sal.symtab == NULL)
3777 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3778 i + first_choice,
3779 SYMBOL_PRINT_NAME (syms[i].sym),
3780 sal.line);
3781 else
3782 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3783 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3784 symtab_to_filename_for_display (sal.symtab),
3785 sal.line);
4c4b4cd2
PH
3786 continue;
3787 }
d2e4a39e 3788 else
4c4b4cd2
PH
3789 {
3790 int is_enumeral =
3791 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3792 && SYMBOL_TYPE (syms[i].sym) != NULL
3793 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
1994afbf
DE
3794 struct symtab *symtab = NULL;
3795
3796 if (SYMBOL_OBJFILE_OWNED (syms[i].sym))
3797 symtab = symbol_symtab (syms[i].sym);
4c4b4cd2
PH
3798
3799 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
323e0a4a 3800 printf_unfiltered (_("[%d] %s at %s:%d\n"),
4c4b4cd2
PH
3801 i + first_choice,
3802 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3803 symtab_to_filename_for_display (symtab),
3804 SYMBOL_LINE (syms[i].sym));
76a01679
JB
3805 else if (is_enumeral
3806 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
4c4b4cd2 3807 {
a3f17187 3808 printf_unfiltered (("[%d] "), i + first_choice);
76a01679 3809 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
79d43c61 3810 gdb_stdout, -1, 0, &type_print_raw_options);
323e0a4a 3811 printf_unfiltered (_("'(%s) (enumeral)\n"),
4c4b4cd2
PH
3812 SYMBOL_PRINT_NAME (syms[i].sym));
3813 }
3814 else if (symtab != NULL)
3815 printf_unfiltered (is_enumeral
323e0a4a
AC
3816 ? _("[%d] %s in %s (enumeral)\n")
3817 : _("[%d] %s at %s:?\n"),
4c4b4cd2
PH
3818 i + first_choice,
3819 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821 3820 symtab_to_filename_for_display (symtab));
4c4b4cd2
PH
3821 else
3822 printf_unfiltered (is_enumeral
323e0a4a
AC
3823 ? _("[%d] %s (enumeral)\n")
3824 : _("[%d] %s at ?\n"),
4c4b4cd2
PH
3825 i + first_choice,
3826 SYMBOL_PRINT_NAME (syms[i].sym));
3827 }
14f9c5c9 3828 }
d2e4a39e 3829
14f9c5c9 3830 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 3831 "overload-choice");
14f9c5c9
AS
3832
3833 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 3834 syms[i] = syms[chosen[i]];
14f9c5c9
AS
3835
3836 return n_chosen;
3837}
3838
3839/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 3840 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
3841 order in CHOICES[0 .. N-1], and return N.
3842
3843 The user types choices as a sequence of numbers on one line
3844 separated by blanks, encoding them as follows:
3845
4c4b4cd2 3846 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
3847 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3848 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3849
4c4b4cd2 3850 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
3851
3852 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 3853 prompts (for use with the -f switch). */
14f9c5c9
AS
3854
3855int
d2e4a39e 3856get_selections (int *choices, int n_choices, int max_results,
4c4b4cd2 3857 int is_all_choice, char *annotation_suffix)
14f9c5c9 3858{
d2e4a39e 3859 char *args;
0bcd0149 3860 char *prompt;
14f9c5c9
AS
3861 int n_chosen;
3862 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 3863
14f9c5c9
AS
3864 prompt = getenv ("PS2");
3865 if (prompt == NULL)
0bcd0149 3866 prompt = "> ";
14f9c5c9 3867
0bcd0149 3868 args = command_line_input (prompt, 0, annotation_suffix);
d2e4a39e 3869
14f9c5c9 3870 if (args == NULL)
323e0a4a 3871 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
3872
3873 n_chosen = 0;
76a01679 3874
4c4b4cd2
PH
3875 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3876 order, as given in args. Choices are validated. */
14f9c5c9
AS
3877 while (1)
3878 {
d2e4a39e 3879 char *args2;
14f9c5c9
AS
3880 int choice, j;
3881
0fcd72ba 3882 args = skip_spaces (args);
14f9c5c9 3883 if (*args == '\0' && n_chosen == 0)
323e0a4a 3884 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3885 else if (*args == '\0')
4c4b4cd2 3886 break;
14f9c5c9
AS
3887
3888 choice = strtol (args, &args2, 10);
d2e4a39e 3889 if (args == args2 || choice < 0
4c4b4cd2 3890 || choice > n_choices + first_choice - 1)
323e0a4a 3891 error (_("Argument must be choice number"));
14f9c5c9
AS
3892 args = args2;
3893
d2e4a39e 3894 if (choice == 0)
323e0a4a 3895 error (_("cancelled"));
14f9c5c9
AS
3896
3897 if (choice < first_choice)
4c4b4cd2
PH
3898 {
3899 n_chosen = n_choices;
3900 for (j = 0; j < n_choices; j += 1)
3901 choices[j] = j;
3902 break;
3903 }
14f9c5c9
AS
3904 choice -= first_choice;
3905
d2e4a39e 3906 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
3907 {
3908 }
14f9c5c9
AS
3909
3910 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
3911 {
3912 int k;
5b4ee69b 3913
4c4b4cd2
PH
3914 for (k = n_chosen - 1; k > j; k -= 1)
3915 choices[k + 1] = choices[k];
3916 choices[j + 1] = choice;
3917 n_chosen += 1;
3918 }
14f9c5c9
AS
3919 }
3920
3921 if (n_chosen > max_results)
323e0a4a 3922 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 3923
14f9c5c9
AS
3924 return n_chosen;
3925}
3926
4c4b4cd2
PH
3927/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3928 on the function identified by SYM and BLOCK, and taking NARGS
3929 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3930
3931static void
d2e4a39e 3932replace_operator_with_call (struct expression **expp, int pc, int nargs,
4c4b4cd2 3933 int oplen, struct symbol *sym,
270140bd 3934 const struct block *block)
14f9c5c9
AS
3935{
3936 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 3937 symbol, -oplen for operator being replaced). */
d2e4a39e 3938 struct expression *newexp = (struct expression *)
8c1a34e7 3939 xzalloc (sizeof (struct expression)
4c4b4cd2 3940 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
d2e4a39e 3941 struct expression *exp = *expp;
14f9c5c9
AS
3942
3943 newexp->nelts = exp->nelts + 7 - oplen;
3944 newexp->language_defn = exp->language_defn;
3489610d 3945 newexp->gdbarch = exp->gdbarch;
14f9c5c9 3946 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 3947 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 3948 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
3949
3950 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3951 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3952
3953 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3954 newexp->elts[pc + 4].block = block;
3955 newexp->elts[pc + 5].symbol = sym;
3956
3957 *expp = newexp;
aacb1f0a 3958 xfree (exp);
d2e4a39e 3959}
14f9c5c9
AS
3960
3961/* Type-class predicates */
3962
4c4b4cd2
PH
3963/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3964 or FLOAT). */
14f9c5c9
AS
3965
3966static int
d2e4a39e 3967numeric_type_p (struct type *type)
14f9c5c9
AS
3968{
3969 if (type == NULL)
3970 return 0;
d2e4a39e
AS
3971 else
3972 {
3973 switch (TYPE_CODE (type))
4c4b4cd2
PH
3974 {
3975 case TYPE_CODE_INT:
3976 case TYPE_CODE_FLT:
3977 return 1;
3978 case TYPE_CODE_RANGE:
3979 return (type == TYPE_TARGET_TYPE (type)
3980 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3981 default:
3982 return 0;
3983 }
d2e4a39e 3984 }
14f9c5c9
AS
3985}
3986
4c4b4cd2 3987/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
3988
3989static int
d2e4a39e 3990integer_type_p (struct type *type)
14f9c5c9
AS
3991{
3992 if (type == NULL)
3993 return 0;
d2e4a39e
AS
3994 else
3995 {
3996 switch (TYPE_CODE (type))
4c4b4cd2
PH
3997 {
3998 case TYPE_CODE_INT:
3999 return 1;
4000 case TYPE_CODE_RANGE:
4001 return (type == TYPE_TARGET_TYPE (type)
4002 || integer_type_p (TYPE_TARGET_TYPE (type)));
4003 default:
4004 return 0;
4005 }
d2e4a39e 4006 }
14f9c5c9
AS
4007}
4008
4c4b4cd2 4009/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4010
4011static int
d2e4a39e 4012scalar_type_p (struct type *type)
14f9c5c9
AS
4013{
4014 if (type == NULL)
4015 return 0;
d2e4a39e
AS
4016 else
4017 {
4018 switch (TYPE_CODE (type))
4c4b4cd2
PH
4019 {
4020 case TYPE_CODE_INT:
4021 case TYPE_CODE_RANGE:
4022 case TYPE_CODE_ENUM:
4023 case TYPE_CODE_FLT:
4024 return 1;
4025 default:
4026 return 0;
4027 }
d2e4a39e 4028 }
14f9c5c9
AS
4029}
4030
4c4b4cd2 4031/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4032
4033static int
d2e4a39e 4034discrete_type_p (struct type *type)
14f9c5c9
AS
4035{
4036 if (type == NULL)
4037 return 0;
d2e4a39e
AS
4038 else
4039 {
4040 switch (TYPE_CODE (type))
4c4b4cd2
PH
4041 {
4042 case TYPE_CODE_INT:
4043 case TYPE_CODE_RANGE:
4044 case TYPE_CODE_ENUM:
872f0337 4045 case TYPE_CODE_BOOL:
4c4b4cd2
PH
4046 return 1;
4047 default:
4048 return 0;
4049 }
d2e4a39e 4050 }
14f9c5c9
AS
4051}
4052
4c4b4cd2
PH
4053/* Returns non-zero if OP with operands in the vector ARGS could be
4054 a user-defined function. Errs on the side of pre-defined operators
4055 (i.e., result 0). */
14f9c5c9
AS
4056
4057static int
d2e4a39e 4058possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4059{
76a01679 4060 struct type *type0 =
df407dfe 4061 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4062 struct type *type1 =
df407dfe 4063 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4064
4c4b4cd2
PH
4065 if (type0 == NULL)
4066 return 0;
4067
14f9c5c9
AS
4068 switch (op)
4069 {
4070 default:
4071 return 0;
4072
4073 case BINOP_ADD:
4074 case BINOP_SUB:
4075 case BINOP_MUL:
4076 case BINOP_DIV:
d2e4a39e 4077 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4078
4079 case BINOP_REM:
4080 case BINOP_MOD:
4081 case BINOP_BITWISE_AND:
4082 case BINOP_BITWISE_IOR:
4083 case BINOP_BITWISE_XOR:
d2e4a39e 4084 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4085
4086 case BINOP_EQUAL:
4087 case BINOP_NOTEQUAL:
4088 case BINOP_LESS:
4089 case BINOP_GTR:
4090 case BINOP_LEQ:
4091 case BINOP_GEQ:
d2e4a39e 4092 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4093
4094 case BINOP_CONCAT:
ee90b9ab 4095 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4096
4097 case BINOP_EXP:
d2e4a39e 4098 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4099
4100 case UNOP_NEG:
4101 case UNOP_PLUS:
4102 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4103 case UNOP_ABS:
4104 return (!numeric_type_p (type0));
14f9c5c9
AS
4105
4106 }
4107}
4108\f
4c4b4cd2 4109 /* Renaming */
14f9c5c9 4110
aeb5907d
JB
4111/* NOTES:
4112
4113 1. In the following, we assume that a renaming type's name may
4114 have an ___XD suffix. It would be nice if this went away at some
4115 point.
4116 2. We handle both the (old) purely type-based representation of
4117 renamings and the (new) variable-based encoding. At some point,
4118 it is devoutly to be hoped that the former goes away
4119 (FIXME: hilfinger-2007-07-09).
4120 3. Subprogram renamings are not implemented, although the XRS
4121 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4122
4123/* If SYM encodes a renaming,
4124
4125 <renaming> renames <renamed entity>,
4126
4127 sets *LEN to the length of the renamed entity's name,
4128 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4129 the string describing the subcomponent selected from the renamed
0963b4bd 4130 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4131 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4132 are undefined). Otherwise, returns a value indicating the category
4133 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4134 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4135 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4136 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4137 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4138 may be NULL, in which case they are not assigned.
4139
4140 [Currently, however, GCC does not generate subprogram renamings.] */
4141
4142enum ada_renaming_category
4143ada_parse_renaming (struct symbol *sym,
4144 const char **renamed_entity, int *len,
4145 const char **renaming_expr)
4146{
4147 enum ada_renaming_category kind;
4148 const char *info;
4149 const char *suffix;
4150
4151 if (sym == NULL)
4152 return ADA_NOT_RENAMING;
4153 switch (SYMBOL_CLASS (sym))
14f9c5c9 4154 {
aeb5907d
JB
4155 default:
4156 return ADA_NOT_RENAMING;
4157 case LOC_TYPEDEF:
4158 return parse_old_style_renaming (SYMBOL_TYPE (sym),
4159 renamed_entity, len, renaming_expr);
4160 case LOC_LOCAL:
4161 case LOC_STATIC:
4162 case LOC_COMPUTED:
4163 case LOC_OPTIMIZED_OUT:
4164 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4165 if (info == NULL)
4166 return ADA_NOT_RENAMING;
4167 switch (info[5])
4168 {
4169 case '_':
4170 kind = ADA_OBJECT_RENAMING;
4171 info += 6;
4172 break;
4173 case 'E':
4174 kind = ADA_EXCEPTION_RENAMING;
4175 info += 7;
4176 break;
4177 case 'P':
4178 kind = ADA_PACKAGE_RENAMING;
4179 info += 7;
4180 break;
4181 case 'S':
4182 kind = ADA_SUBPROGRAM_RENAMING;
4183 info += 7;
4184 break;
4185 default:
4186 return ADA_NOT_RENAMING;
4187 }
14f9c5c9 4188 }
4c4b4cd2 4189
aeb5907d
JB
4190 if (renamed_entity != NULL)
4191 *renamed_entity = info;
4192 suffix = strstr (info, "___XE");
4193 if (suffix == NULL || suffix == info)
4194 return ADA_NOT_RENAMING;
4195 if (len != NULL)
4196 *len = strlen (info) - strlen (suffix);
4197 suffix += 5;
4198 if (renaming_expr != NULL)
4199 *renaming_expr = suffix;
4200 return kind;
4201}
4202
4203/* Assuming TYPE encodes a renaming according to the old encoding in
4204 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4205 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
4206 ADA_NOT_RENAMING otherwise. */
4207static enum ada_renaming_category
4208parse_old_style_renaming (struct type *type,
4209 const char **renamed_entity, int *len,
4210 const char **renaming_expr)
4211{
4212 enum ada_renaming_category kind;
4213 const char *name;
4214 const char *info;
4215 const char *suffix;
14f9c5c9 4216
aeb5907d
JB
4217 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4218 || TYPE_NFIELDS (type) != 1)
4219 return ADA_NOT_RENAMING;
14f9c5c9 4220
aeb5907d
JB
4221 name = type_name_no_tag (type);
4222 if (name == NULL)
4223 return ADA_NOT_RENAMING;
4224
4225 name = strstr (name, "___XR");
4226 if (name == NULL)
4227 return ADA_NOT_RENAMING;
4228 switch (name[5])
4229 {
4230 case '\0':
4231 case '_':
4232 kind = ADA_OBJECT_RENAMING;
4233 break;
4234 case 'E':
4235 kind = ADA_EXCEPTION_RENAMING;
4236 break;
4237 case 'P':
4238 kind = ADA_PACKAGE_RENAMING;
4239 break;
4240 case 'S':
4241 kind = ADA_SUBPROGRAM_RENAMING;
4242 break;
4243 default:
4244 return ADA_NOT_RENAMING;
4245 }
14f9c5c9 4246
aeb5907d
JB
4247 info = TYPE_FIELD_NAME (type, 0);
4248 if (info == NULL)
4249 return ADA_NOT_RENAMING;
4250 if (renamed_entity != NULL)
4251 *renamed_entity = info;
4252 suffix = strstr (info, "___XE");
4253 if (renaming_expr != NULL)
4254 *renaming_expr = suffix + 5;
4255 if (suffix == NULL || suffix == info)
4256 return ADA_NOT_RENAMING;
4257 if (len != NULL)
4258 *len = suffix - info;
4259 return kind;
a5ee536b
JB
4260}
4261
4262/* Compute the value of the given RENAMING_SYM, which is expected to
4263 be a symbol encoding a renaming expression. BLOCK is the block
4264 used to evaluate the renaming. */
52ce6436 4265
a5ee536b
JB
4266static struct value *
4267ada_read_renaming_var_value (struct symbol *renaming_sym,
3977b71f 4268 const struct block *block)
a5ee536b 4269{
bbc13ae3 4270 const char *sym_name;
a5ee536b
JB
4271 struct expression *expr;
4272 struct value *value;
4273 struct cleanup *old_chain = NULL;
4274
bbc13ae3 4275 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
1bb9788d 4276 expr = parse_exp_1 (&sym_name, 0, block, 0);
bbc13ae3 4277 old_chain = make_cleanup (free_current_contents, &expr);
a5ee536b
JB
4278 value = evaluate_expression (expr);
4279
4280 do_cleanups (old_chain);
4281 return value;
4282}
14f9c5c9 4283\f
d2e4a39e 4284
4c4b4cd2 4285 /* Evaluation: Function Calls */
14f9c5c9 4286
4c4b4cd2 4287/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4288 lvalues, and otherwise has the side-effect of allocating memory
4289 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4290
d2e4a39e 4291static struct value *
40bc484c 4292ensure_lval (struct value *val)
14f9c5c9 4293{
40bc484c
JB
4294 if (VALUE_LVAL (val) == not_lval
4295 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4296 {
df407dfe 4297 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4298 const CORE_ADDR addr =
4299 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4300
40bc484c 4301 set_value_address (val, addr);
a84a8a0d 4302 VALUE_LVAL (val) = lval_memory;
40bc484c 4303 write_memory (addr, value_contents (val), len);
c3e5cd34 4304 }
14f9c5c9
AS
4305
4306 return val;
4307}
4308
4309/* Return the value ACTUAL, converted to be an appropriate value for a
4310 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4311 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4312 values not residing in memory, updating it as needed. */
14f9c5c9 4313
a93c0eb6 4314struct value *
40bc484c 4315ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4316{
df407dfe 4317 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4318 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4319 struct type *formal_target =
4320 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4321 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4322 struct type *actual_target =
4323 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4324 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4325
4c4b4cd2 4326 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4327 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4328 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4329 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4330 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4331 {
a84a8a0d 4332 struct value *result;
5b4ee69b 4333
14f9c5c9 4334 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4335 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4336 result = desc_data (actual);
14f9c5c9 4337 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4338 {
4339 if (VALUE_LVAL (actual) != lval_memory)
4340 {
4341 struct value *val;
5b4ee69b 4342
df407dfe 4343 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4344 val = allocate_value (actual_type);
990a07ab 4345 memcpy ((char *) value_contents_raw (val),
0fd88904 4346 (char *) value_contents (actual),
4c4b4cd2 4347 TYPE_LENGTH (actual_type));
40bc484c 4348 actual = ensure_lval (val);
4c4b4cd2 4349 }
a84a8a0d 4350 result = value_addr (actual);
4c4b4cd2 4351 }
a84a8a0d
JB
4352 else
4353 return actual;
b1af9e97 4354 return value_cast_pointers (formal_type, result, 0);
14f9c5c9
AS
4355 }
4356 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4357 return ada_value_ind (actual);
8344af1e
JB
4358 else if (ada_is_aligner_type (formal_type))
4359 {
4360 /* We need to turn this parameter into an aligner type
4361 as well. */
4362 struct value *aligner = allocate_value (formal_type);
4363 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4364
4365 value_assign_to_component (aligner, component, actual);
4366 return aligner;
4367 }
14f9c5c9
AS
4368
4369 return actual;
4370}
4371
438c98a1
JB
4372/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4373 type TYPE. This is usually an inefficient no-op except on some targets
4374 (such as AVR) where the representation of a pointer and an address
4375 differs. */
4376
4377static CORE_ADDR
4378value_pointer (struct value *value, struct type *type)
4379{
4380 struct gdbarch *gdbarch = get_type_arch (type);
4381 unsigned len = TYPE_LENGTH (type);
4382 gdb_byte *buf = alloca (len);
4383 CORE_ADDR addr;
4384
4385 addr = value_address (value);
4386 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4387 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4388 return addr;
4389}
4390
14f9c5c9 4391
4c4b4cd2
PH
4392/* Push a descriptor of type TYPE for array value ARR on the stack at
4393 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4394 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4395 to-descriptor type rather than a descriptor type), a struct value *
4396 representing a pointer to this descriptor. */
14f9c5c9 4397
d2e4a39e 4398static struct value *
40bc484c 4399make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4400{
d2e4a39e
AS
4401 struct type *bounds_type = desc_bounds_type (type);
4402 struct type *desc_type = desc_base_type (type);
4403 struct value *descriptor = allocate_value (desc_type);
4404 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4405 int i;
d2e4a39e 4406
0963b4bd
MS
4407 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4408 i > 0; i -= 1)
14f9c5c9 4409 {
19f220c3
JK
4410 modify_field (value_type (bounds), value_contents_writeable (bounds),
4411 ada_array_bound (arr, i, 0),
4412 desc_bound_bitpos (bounds_type, i, 0),
4413 desc_bound_bitsize (bounds_type, i, 0));
4414 modify_field (value_type (bounds), value_contents_writeable (bounds),
4415 ada_array_bound (arr, i, 1),
4416 desc_bound_bitpos (bounds_type, i, 1),
4417 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4418 }
d2e4a39e 4419
40bc484c 4420 bounds = ensure_lval (bounds);
d2e4a39e 4421
19f220c3
JK
4422 modify_field (value_type (descriptor),
4423 value_contents_writeable (descriptor),
4424 value_pointer (ensure_lval (arr),
4425 TYPE_FIELD_TYPE (desc_type, 0)),
4426 fat_pntr_data_bitpos (desc_type),
4427 fat_pntr_data_bitsize (desc_type));
4428
4429 modify_field (value_type (descriptor),
4430 value_contents_writeable (descriptor),
4431 value_pointer (bounds,
4432 TYPE_FIELD_TYPE (desc_type, 1)),
4433 fat_pntr_bounds_bitpos (desc_type),
4434 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4435
40bc484c 4436 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4437
4438 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4439 return value_addr (descriptor);
4440 else
4441 return descriptor;
4442}
14f9c5c9 4443\f
3d9434b5
JB
4444 /* Symbol Cache Module */
4445
3d9434b5 4446/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4447 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4448 on the type of entity being printed, the cache can make it as much
4449 as an order of magnitude faster than without it.
4450
4451 The descriptive type DWARF extension has significantly reduced
4452 the need for this cache, at least when DWARF is being used. However,
4453 even in this case, some expensive name-based symbol searches are still
4454 sometimes necessary - to find an XVZ variable, mostly. */
4455
ee01b665 4456/* Initialize the contents of SYM_CACHE. */
3d9434b5 4457
ee01b665
JB
4458static void
4459ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4460{
4461 obstack_init (&sym_cache->cache_space);
4462 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4463}
3d9434b5 4464
ee01b665
JB
4465/* Free the memory used by SYM_CACHE. */
4466
4467static void
4468ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
3d9434b5 4469{
ee01b665
JB
4470 obstack_free (&sym_cache->cache_space, NULL);
4471 xfree (sym_cache);
4472}
3d9434b5 4473
ee01b665
JB
4474/* Return the symbol cache associated to the given program space PSPACE.
4475 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4476
ee01b665
JB
4477static struct ada_symbol_cache *
4478ada_get_symbol_cache (struct program_space *pspace)
4479{
4480 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4481
66c168ae 4482 if (pspace_data->sym_cache == NULL)
ee01b665 4483 {
66c168ae
JB
4484 pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4485 ada_init_symbol_cache (pspace_data->sym_cache);
ee01b665
JB
4486 }
4487
66c168ae 4488 return pspace_data->sym_cache;
ee01b665 4489}
3d9434b5
JB
4490
4491/* Clear all entries from the symbol cache. */
4492
4493static void
4494ada_clear_symbol_cache (void)
4495{
ee01b665
JB
4496 struct ada_symbol_cache *sym_cache
4497 = ada_get_symbol_cache (current_program_space);
4498
4499 obstack_free (&sym_cache->cache_space, NULL);
4500 ada_init_symbol_cache (sym_cache);
3d9434b5
JB
4501}
4502
fe978cb0 4503/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4504 Return it if found, or NULL otherwise. */
4505
4506static struct cache_entry **
fe978cb0 4507find_entry (const char *name, domain_enum domain)
3d9434b5 4508{
ee01b665
JB
4509 struct ada_symbol_cache *sym_cache
4510 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4511 int h = msymbol_hash (name) % HASH_SIZE;
4512 struct cache_entry **e;
4513
ee01b665 4514 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4515 {
fe978cb0 4516 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
3d9434b5
JB
4517 return e;
4518 }
4519 return NULL;
4520}
4521
fe978cb0 4522/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4523 Return 1 if found, 0 otherwise.
4524
4525 If an entry was found and SYM is not NULL, set *SYM to the entry's
4526 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4527
96d887e8 4528static int
fe978cb0 4529lookup_cached_symbol (const char *name, domain_enum domain,
f0c5f9b2 4530 struct symbol **sym, const struct block **block)
96d887e8 4531{
fe978cb0 4532 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4533
4534 if (e == NULL)
4535 return 0;
4536 if (sym != NULL)
4537 *sym = (*e)->sym;
4538 if (block != NULL)
4539 *block = (*e)->block;
4540 return 1;
96d887e8
PH
4541}
4542
3d9434b5 4543/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4544 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4545
96d887e8 4546static void
fe978cb0 4547cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
270140bd 4548 const struct block *block)
96d887e8 4549{
ee01b665
JB
4550 struct ada_symbol_cache *sym_cache
4551 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4552 int h;
4553 char *copy;
4554 struct cache_entry *e;
4555
1994afbf
DE
4556 /* Symbols for builtin types don't have a block.
4557 For now don't cache such symbols. */
4558 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4559 return;
4560
3d9434b5
JB
4561 /* If the symbol is a local symbol, then do not cache it, as a search
4562 for that symbol depends on the context. To determine whether
4563 the symbol is local or not, we check the block where we found it
4564 against the global and static blocks of its associated symtab. */
4565 if (sym
08be3fe3 4566 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4567 GLOBAL_BLOCK) != block
08be3fe3 4568 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4569 STATIC_BLOCK) != block)
3d9434b5
JB
4570 return;
4571
4572 h = msymbol_hash (name) % HASH_SIZE;
ee01b665
JB
4573 e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4574 sizeof (*e));
4575 e->next = sym_cache->root[h];
4576 sym_cache->root[h] = e;
4577 e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
3d9434b5
JB
4578 strcpy (copy, name);
4579 e->sym = sym;
fe978cb0 4580 e->domain = domain;
3d9434b5 4581 e->block = block;
96d887e8 4582}
4c4b4cd2
PH
4583\f
4584 /* Symbol Lookup */
4585
c0431670
JB
4586/* Return nonzero if wild matching should be used when searching for
4587 all symbols matching LOOKUP_NAME.
4588
4589 LOOKUP_NAME is expected to be a symbol name after transformation
4590 for Ada lookups (see ada_name_for_lookup). */
4591
4592static int
4593should_use_wild_match (const char *lookup_name)
4594{
4595 return (strstr (lookup_name, "__") == NULL);
4596}
4597
4c4b4cd2
PH
4598/* Return the result of a standard (literal, C-like) lookup of NAME in
4599 given DOMAIN, visible from lexical block BLOCK. */
4600
4601static struct symbol *
4602standard_lookup (const char *name, const struct block *block,
4603 domain_enum domain)
4604{
acbd605d
MGD
4605 /* Initialize it just to avoid a GCC false warning. */
4606 struct symbol *sym = NULL;
4c4b4cd2 4607
2570f2b7 4608 if (lookup_cached_symbol (name, domain, &sym, NULL))
4c4b4cd2 4609 return sym;
2570f2b7
UW
4610 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4611 cache_symbol (name, domain, sym, block_found);
4c4b4cd2
PH
4612 return sym;
4613}
4614
4615
4616/* Non-zero iff there is at least one non-function/non-enumeral symbol
4617 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4618 since they contend in overloading in the same way. */
4619static int
4620is_nonfunction (struct ada_symbol_info syms[], int n)
4621{
4622 int i;
4623
4624 for (i = 0; i < n; i += 1)
4625 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4626 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4627 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
14f9c5c9
AS
4628 return 1;
4629
4630 return 0;
4631}
4632
4633/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4634 struct types. Otherwise, they may not. */
14f9c5c9
AS
4635
4636static int
d2e4a39e 4637equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4638{
d2e4a39e 4639 if (type0 == type1)
14f9c5c9 4640 return 1;
d2e4a39e 4641 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4642 || TYPE_CODE (type0) != TYPE_CODE (type1))
4643 return 0;
d2e4a39e 4644 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4645 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4646 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4647 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4648 return 1;
d2e4a39e 4649
14f9c5c9
AS
4650 return 0;
4651}
4652
4653/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4654 no more defined than that of SYM1. */
14f9c5c9
AS
4655
4656static int
d2e4a39e 4657lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4658{
4659 if (sym0 == sym1)
4660 return 1;
176620f1 4661 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4662 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4663 return 0;
4664
d2e4a39e 4665 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4666 {
4667 case LOC_UNDEF:
4668 return 1;
4669 case LOC_TYPEDEF:
4670 {
4c4b4cd2
PH
4671 struct type *type0 = SYMBOL_TYPE (sym0);
4672 struct type *type1 = SYMBOL_TYPE (sym1);
0d5cff50
DE
4673 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4674 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4c4b4cd2 4675 int len0 = strlen (name0);
5b4ee69b 4676
4c4b4cd2
PH
4677 return
4678 TYPE_CODE (type0) == TYPE_CODE (type1)
4679 && (equiv_types (type0, type1)
4680 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
61012eef 4681 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4682 }
4683 case LOC_CONST:
4684 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4685 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4686 default:
4687 return 0;
14f9c5c9
AS
4688 }
4689}
4690
4c4b4cd2
PH
4691/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4692 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4693
4694static void
76a01679
JB
4695add_defn_to_vec (struct obstack *obstackp,
4696 struct symbol *sym,
f0c5f9b2 4697 const struct block *block)
14f9c5c9
AS
4698{
4699 int i;
4c4b4cd2 4700 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4701
529cad9c
PH
4702 /* Do not try to complete stub types, as the debugger is probably
4703 already scanning all symbols matching a certain name at the
4704 time when this function is called. Trying to replace the stub
4705 type by its associated full type will cause us to restart a scan
4706 which may lead to an infinite recursion. Instead, the client
4707 collecting the matching symbols will end up collecting several
4708 matches, with at least one of them complete. It can then filter
4709 out the stub ones if needed. */
4710
4c4b4cd2
PH
4711 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4712 {
4713 if (lesseq_defined_than (sym, prevDefns[i].sym))
4714 return;
4715 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4716 {
4717 prevDefns[i].sym = sym;
4718 prevDefns[i].block = block;
4c4b4cd2 4719 return;
76a01679 4720 }
4c4b4cd2
PH
4721 }
4722
4723 {
4724 struct ada_symbol_info info;
4725
4726 info.sym = sym;
4727 info.block = block;
4c4b4cd2
PH
4728 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4729 }
4730}
4731
4732/* Number of ada_symbol_info structures currently collected in
4733 current vector in *OBSTACKP. */
4734
76a01679
JB
4735static int
4736num_defns_collected (struct obstack *obstackp)
4c4b4cd2
PH
4737{
4738 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4739}
4740
4741/* Vector of ada_symbol_info structures currently collected in current
4742 vector in *OBSTACKP. If FINISH, close off the vector and return
4743 its final address. */
4744
76a01679 4745static struct ada_symbol_info *
4c4b4cd2
PH
4746defns_collected (struct obstack *obstackp, int finish)
4747{
4748 if (finish)
4749 return obstack_finish (obstackp);
4750 else
4751 return (struct ada_symbol_info *) obstack_base (obstackp);
4752}
4753
7c7b6655
TT
4754/* Return a bound minimal symbol matching NAME according to Ada
4755 decoding rules. Returns an invalid symbol if there is no such
4756 minimal symbol. Names prefixed with "standard__" are handled
4757 specially: "standard__" is first stripped off, and only static and
4758 global symbols are searched. */
4c4b4cd2 4759
7c7b6655 4760struct bound_minimal_symbol
96d887e8 4761ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4762{
7c7b6655 4763 struct bound_minimal_symbol result;
4c4b4cd2 4764 struct objfile *objfile;
96d887e8 4765 struct minimal_symbol *msymbol;
dc4024cd 4766 const int wild_match_p = should_use_wild_match (name);
4c4b4cd2 4767
7c7b6655
TT
4768 memset (&result, 0, sizeof (result));
4769
c0431670
JB
4770 /* Special case: If the user specifies a symbol name inside package
4771 Standard, do a non-wild matching of the symbol name without
4772 the "standard__" prefix. This was primarily introduced in order
4773 to allow the user to specifically access the standard exceptions
4774 using, for instance, Standard.Constraint_Error when Constraint_Error
4775 is ambiguous (due to the user defining its own Constraint_Error
4776 entity inside its program). */
61012eef 4777 if (startswith (name, "standard__"))
c0431670 4778 name += sizeof ("standard__") - 1;
4c4b4cd2 4779
96d887e8
PH
4780 ALL_MSYMBOLS (objfile, msymbol)
4781 {
efd66ac6 4782 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
96d887e8 4783 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
7c7b6655
TT
4784 {
4785 result.minsym = msymbol;
4786 result.objfile = objfile;
4787 break;
4788 }
96d887e8 4789 }
4c4b4cd2 4790
7c7b6655 4791 return result;
96d887e8 4792}
4c4b4cd2 4793
96d887e8
PH
4794/* For all subprograms that statically enclose the subprogram of the
4795 selected frame, add symbols matching identifier NAME in DOMAIN
4796 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
4797 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4798 with a wildcard prefix. */
4c4b4cd2 4799
96d887e8
PH
4800static void
4801add_symbols_from_enclosing_procs (struct obstack *obstackp,
fe978cb0 4802 const char *name, domain_enum domain,
48b78332 4803 int wild_match_p)
96d887e8 4804{
96d887e8 4805}
14f9c5c9 4806
96d887e8
PH
4807/* True if TYPE is definitely an artificial type supplied to a symbol
4808 for which no debugging information was given in the symbol file. */
14f9c5c9 4809
96d887e8
PH
4810static int
4811is_nondebugging_type (struct type *type)
4812{
0d5cff50 4813 const char *name = ada_type_name (type);
5b4ee69b 4814
96d887e8
PH
4815 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4816}
4c4b4cd2 4817
8f17729f
JB
4818/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4819 that are deemed "identical" for practical purposes.
4820
4821 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4822 types and that their number of enumerals is identical (in other
4823 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
4824
4825static int
4826ada_identical_enum_types_p (struct type *type1, struct type *type2)
4827{
4828 int i;
4829
4830 /* The heuristic we use here is fairly conservative. We consider
4831 that 2 enumerate types are identical if they have the same
4832 number of enumerals and that all enumerals have the same
4833 underlying value and name. */
4834
4835 /* All enums in the type should have an identical underlying value. */
4836 for (i = 0; i < TYPE_NFIELDS (type1); i++)
14e75d8e 4837 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4838 return 0;
4839
4840 /* All enumerals should also have the same name (modulo any numerical
4841 suffix). */
4842 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4843 {
0d5cff50
DE
4844 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4845 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4846 int len_1 = strlen (name_1);
4847 int len_2 = strlen (name_2);
4848
4849 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4850 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4851 if (len_1 != len_2
4852 || strncmp (TYPE_FIELD_NAME (type1, i),
4853 TYPE_FIELD_NAME (type2, i),
4854 len_1) != 0)
4855 return 0;
4856 }
4857
4858 return 1;
4859}
4860
4861/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4862 that are deemed "identical" for practical purposes. Sometimes,
4863 enumerals are not strictly identical, but their types are so similar
4864 that they can be considered identical.
4865
4866 For instance, consider the following code:
4867
4868 type Color is (Black, Red, Green, Blue, White);
4869 type RGB_Color is new Color range Red .. Blue;
4870
4871 Type RGB_Color is a subrange of an implicit type which is a copy
4872 of type Color. If we call that implicit type RGB_ColorB ("B" is
4873 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4874 As a result, when an expression references any of the enumeral
4875 by name (Eg. "print green"), the expression is technically
4876 ambiguous and the user should be asked to disambiguate. But
4877 doing so would only hinder the user, since it wouldn't matter
4878 what choice he makes, the outcome would always be the same.
4879 So, for practical purposes, we consider them as the same. */
4880
4881static int
4882symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4883{
4884 int i;
4885
4886 /* Before performing a thorough comparison check of each type,
4887 we perform a series of inexpensive checks. We expect that these
4888 checks will quickly fail in the vast majority of cases, and thus
4889 help prevent the unnecessary use of a more expensive comparison.
4890 Said comparison also expects us to make some of these checks
4891 (see ada_identical_enum_types_p). */
4892
4893 /* Quick check: All symbols should have an enum type. */
4894 for (i = 0; i < nsyms; i++)
4895 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4896 return 0;
4897
4898 /* Quick check: They should all have the same value. */
4899 for (i = 1; i < nsyms; i++)
4900 if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4901 return 0;
4902
4903 /* Quick check: They should all have the same number of enumerals. */
4904 for (i = 1; i < nsyms; i++)
4905 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4906 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4907 return 0;
4908
4909 /* All the sanity checks passed, so we might have a set of
4910 identical enumeration types. Perform a more complete
4911 comparison of the type of each symbol. */
4912 for (i = 1; i < nsyms; i++)
4913 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4914 SYMBOL_TYPE (syms[0].sym)))
4915 return 0;
4916
4917 return 1;
4918}
4919
96d887e8
PH
4920/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4921 duplicate other symbols in the list (The only case I know of where
4922 this happens is when object files containing stabs-in-ecoff are
4923 linked with files containing ordinary ecoff debugging symbols (or no
4924 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4925 Returns the number of items in the modified list. */
4c4b4cd2 4926
96d887e8
PH
4927static int
4928remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4929{
4930 int i, j;
4c4b4cd2 4931
8f17729f
JB
4932 /* We should never be called with less than 2 symbols, as there
4933 cannot be any extra symbol in that case. But it's easy to
4934 handle, since we have nothing to do in that case. */
4935 if (nsyms < 2)
4936 return nsyms;
4937
96d887e8
PH
4938 i = 0;
4939 while (i < nsyms)
4940 {
a35ddb44 4941 int remove_p = 0;
339c13b6
JB
4942
4943 /* If two symbols have the same name and one of them is a stub type,
4944 the get rid of the stub. */
4945
4946 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4947 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4948 {
4949 for (j = 0; j < nsyms; j++)
4950 {
4951 if (j != i
4952 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4953 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4954 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4955 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
a35ddb44 4956 remove_p = 1;
339c13b6
JB
4957 }
4958 }
4959
4960 /* Two symbols with the same name, same class and same address
4961 should be identical. */
4962
4963 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
96d887e8
PH
4964 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4965 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4966 {
4967 for (j = 0; j < nsyms; j += 1)
4968 {
4969 if (i != j
4970 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4971 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
76a01679 4972 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
96d887e8
PH
4973 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4974 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4975 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
a35ddb44 4976 remove_p = 1;
4c4b4cd2 4977 }
4c4b4cd2 4978 }
339c13b6 4979
a35ddb44 4980 if (remove_p)
339c13b6
JB
4981 {
4982 for (j = i + 1; j < nsyms; j += 1)
4983 syms[j - 1] = syms[j];
4984 nsyms -= 1;
4985 }
4986
96d887e8 4987 i += 1;
14f9c5c9 4988 }
8f17729f
JB
4989
4990 /* If all the remaining symbols are identical enumerals, then
4991 just keep the first one and discard the rest.
4992
4993 Unlike what we did previously, we do not discard any entry
4994 unless they are ALL identical. This is because the symbol
4995 comparison is not a strict comparison, but rather a practical
4996 comparison. If all symbols are considered identical, then
4997 we can just go ahead and use the first one and discard the rest.
4998 But if we cannot reduce the list to a single element, we have
4999 to ask the user to disambiguate anyways. And if we have to
5000 present a multiple-choice menu, it's less confusing if the list
5001 isn't missing some choices that were identical and yet distinct. */
5002 if (symbols_are_identical_enums (syms, nsyms))
5003 nsyms = 1;
5004
96d887e8 5005 return nsyms;
14f9c5c9
AS
5006}
5007
96d887e8
PH
5008/* Given a type that corresponds to a renaming entity, use the type name
5009 to extract the scope (package name or function name, fully qualified,
5010 and following the GNAT encoding convention) where this renaming has been
5011 defined. The string returned needs to be deallocated after use. */
4c4b4cd2 5012
96d887e8
PH
5013static char *
5014xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5015{
96d887e8 5016 /* The renaming types adhere to the following convention:
0963b4bd 5017 <scope>__<rename>___<XR extension>.
96d887e8
PH
5018 So, to extract the scope, we search for the "___XR" extension,
5019 and then backtrack until we find the first "__". */
76a01679 5020
96d887e8
PH
5021 const char *name = type_name_no_tag (renaming_type);
5022 char *suffix = strstr (name, "___XR");
5023 char *last;
5024 int scope_len;
5025 char *scope;
14f9c5c9 5026
96d887e8
PH
5027 /* Now, backtrack a bit until we find the first "__". Start looking
5028 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5029
96d887e8
PH
5030 for (last = suffix - 3; last > name; last--)
5031 if (last[0] == '_' && last[1] == '_')
5032 break;
76a01679 5033
96d887e8 5034 /* Make a copy of scope and return it. */
14f9c5c9 5035
96d887e8
PH
5036 scope_len = last - name;
5037 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
14f9c5c9 5038
96d887e8
PH
5039 strncpy (scope, name, scope_len);
5040 scope[scope_len] = '\0';
4c4b4cd2 5041
96d887e8 5042 return scope;
4c4b4cd2
PH
5043}
5044
96d887e8 5045/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5046
96d887e8
PH
5047static int
5048is_package_name (const char *name)
4c4b4cd2 5049{
96d887e8
PH
5050 /* Here, We take advantage of the fact that no symbols are generated
5051 for packages, while symbols are generated for each function.
5052 So the condition for NAME represent a package becomes equivalent
5053 to NAME not existing in our list of symbols. There is only one
5054 small complication with library-level functions (see below). */
4c4b4cd2 5055
96d887e8 5056 char *fun_name;
76a01679 5057
96d887e8
PH
5058 /* If it is a function that has not been defined at library level,
5059 then we should be able to look it up in the symbols. */
5060 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5061 return 0;
14f9c5c9 5062
96d887e8
PH
5063 /* Library-level function names start with "_ada_". See if function
5064 "_ada_" followed by NAME can be found. */
14f9c5c9 5065
96d887e8 5066 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5067 functions names cannot contain "__" in them. */
96d887e8
PH
5068 if (strstr (name, "__") != NULL)
5069 return 0;
4c4b4cd2 5070
b435e160 5071 fun_name = xstrprintf ("_ada_%s", name);
14f9c5c9 5072
96d887e8
PH
5073 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
5074}
14f9c5c9 5075
96d887e8 5076/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5077 not visible from FUNCTION_NAME. */
14f9c5c9 5078
96d887e8 5079static int
0d5cff50 5080old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5081{
aeb5907d 5082 char *scope;
1509e573 5083 struct cleanup *old_chain;
aeb5907d
JB
5084
5085 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5086 return 0;
5087
5088 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
1509e573 5089 old_chain = make_cleanup (xfree, scope);
14f9c5c9 5090
96d887e8
PH
5091 /* If the rename has been defined in a package, then it is visible. */
5092 if (is_package_name (scope))
1509e573
JB
5093 {
5094 do_cleanups (old_chain);
5095 return 0;
5096 }
14f9c5c9 5097
96d887e8
PH
5098 /* Check that the rename is in the current function scope by checking
5099 that its name starts with SCOPE. */
76a01679 5100
96d887e8
PH
5101 /* If the function name starts with "_ada_", it means that it is
5102 a library-level function. Strip this prefix before doing the
5103 comparison, as the encoding for the renaming does not contain
5104 this prefix. */
61012eef 5105 if (startswith (function_name, "_ada_"))
96d887e8 5106 function_name += 5;
f26caa11 5107
1509e573 5108 {
61012eef 5109 int is_invisible = !startswith (function_name, scope);
1509e573
JB
5110
5111 do_cleanups (old_chain);
5112 return is_invisible;
5113 }
f26caa11
PH
5114}
5115
aeb5907d
JB
5116/* Remove entries from SYMS that corresponds to a renaming entity that
5117 is not visible from the function associated with CURRENT_BLOCK or
5118 that is superfluous due to the presence of more specific renaming
5119 information. Places surviving symbols in the initial entries of
5120 SYMS and returns the number of surviving symbols.
96d887e8
PH
5121
5122 Rationale:
aeb5907d
JB
5123 First, in cases where an object renaming is implemented as a
5124 reference variable, GNAT may produce both the actual reference
5125 variable and the renaming encoding. In this case, we discard the
5126 latter.
5127
5128 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5129 entity. Unfortunately, STABS currently does not support the definition
5130 of types that are local to a given lexical block, so all renamings types
5131 are emitted at library level. As a consequence, if an application
5132 contains two renaming entities using the same name, and a user tries to
5133 print the value of one of these entities, the result of the ada symbol
5134 lookup will also contain the wrong renaming type.
f26caa11 5135
96d887e8
PH
5136 This function partially covers for this limitation by attempting to
5137 remove from the SYMS list renaming symbols that should be visible
5138 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5139 method with the current information available. The implementation
5140 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5141
5142 - When the user tries to print a rename in a function while there
5143 is another rename entity defined in a package: Normally, the
5144 rename in the function has precedence over the rename in the
5145 package, so the latter should be removed from the list. This is
5146 currently not the case.
5147
5148 - This function will incorrectly remove valid renames if
5149 the CURRENT_BLOCK corresponds to a function which symbol name
5150 has been changed by an "Export" pragma. As a consequence,
5151 the user will be unable to print such rename entities. */
4c4b4cd2 5152
14f9c5c9 5153static int
aeb5907d
JB
5154remove_irrelevant_renamings (struct ada_symbol_info *syms,
5155 int nsyms, const struct block *current_block)
4c4b4cd2
PH
5156{
5157 struct symbol *current_function;
0d5cff50 5158 const char *current_function_name;
4c4b4cd2 5159 int i;
aeb5907d
JB
5160 int is_new_style_renaming;
5161
5162 /* If there is both a renaming foo___XR... encoded as a variable and
5163 a simple variable foo in the same block, discard the latter.
0963b4bd 5164 First, zero out such symbols, then compress. */
aeb5907d
JB
5165 is_new_style_renaming = 0;
5166 for (i = 0; i < nsyms; i += 1)
5167 {
5168 struct symbol *sym = syms[i].sym;
270140bd 5169 const struct block *block = syms[i].block;
aeb5907d
JB
5170 const char *name;
5171 const char *suffix;
5172
5173 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5174 continue;
5175 name = SYMBOL_LINKAGE_NAME (sym);
5176 suffix = strstr (name, "___XR");
5177
5178 if (suffix != NULL)
5179 {
5180 int name_len = suffix - name;
5181 int j;
5b4ee69b 5182
aeb5907d
JB
5183 is_new_style_renaming = 1;
5184 for (j = 0; j < nsyms; j += 1)
5185 if (i != j && syms[j].sym != NULL
5186 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5187 name_len) == 0
5188 && block == syms[j].block)
5189 syms[j].sym = NULL;
5190 }
5191 }
5192 if (is_new_style_renaming)
5193 {
5194 int j, k;
5195
5196 for (j = k = 0; j < nsyms; j += 1)
5197 if (syms[j].sym != NULL)
5198 {
5199 syms[k] = syms[j];
5200 k += 1;
5201 }
5202 return k;
5203 }
4c4b4cd2
PH
5204
5205 /* Extract the function name associated to CURRENT_BLOCK.
5206 Abort if unable to do so. */
76a01679 5207
4c4b4cd2
PH
5208 if (current_block == NULL)
5209 return nsyms;
76a01679 5210
7f0df278 5211 current_function = block_linkage_function (current_block);
4c4b4cd2
PH
5212 if (current_function == NULL)
5213 return nsyms;
5214
5215 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5216 if (current_function_name == NULL)
5217 return nsyms;
5218
5219 /* Check each of the symbols, and remove it from the list if it is
5220 a type corresponding to a renaming that is out of the scope of
5221 the current block. */
5222
5223 i = 0;
5224 while (i < nsyms)
5225 {
aeb5907d
JB
5226 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5227 == ADA_OBJECT_RENAMING
5228 && old_renaming_is_invisible (syms[i].sym, current_function_name))
4c4b4cd2
PH
5229 {
5230 int j;
5b4ee69b 5231
aeb5907d 5232 for (j = i + 1; j < nsyms; j += 1)
76a01679 5233 syms[j - 1] = syms[j];
4c4b4cd2
PH
5234 nsyms -= 1;
5235 }
5236 else
5237 i += 1;
5238 }
5239
5240 return nsyms;
5241}
5242
339c13b6
JB
5243/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5244 whose name and domain match NAME and DOMAIN respectively.
5245 If no match was found, then extend the search to "enclosing"
5246 routines (in other words, if we're inside a nested function,
5247 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5248 If WILD_MATCH_P is nonzero, perform the naming matching in
5249 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
5250
5251 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5252
5253static void
5254ada_add_local_symbols (struct obstack *obstackp, const char *name,
f0c5f9b2 5255 const struct block *block, domain_enum domain,
d0a8ab18 5256 int wild_match_p)
339c13b6
JB
5257{
5258 int block_depth = 0;
5259
5260 while (block != NULL)
5261 {
5262 block_depth += 1;
d0a8ab18
JB
5263 ada_add_block_symbols (obstackp, block, name, domain, NULL,
5264 wild_match_p);
339c13b6
JB
5265
5266 /* If we found a non-function match, assume that's the one. */
5267 if (is_nonfunction (defns_collected (obstackp, 0),
5268 num_defns_collected (obstackp)))
5269 return;
5270
5271 block = BLOCK_SUPERBLOCK (block);
5272 }
5273
5274 /* If no luck so far, try to find NAME as a local symbol in some lexically
5275 enclosing subprogram. */
5276 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
d0a8ab18 5277 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
339c13b6
JB
5278}
5279
ccefe4c4 5280/* An object of this type is used as the user_data argument when
40658b94 5281 calling the map_matching_symbols method. */
ccefe4c4 5282
40658b94 5283struct match_data
ccefe4c4 5284{
40658b94 5285 struct objfile *objfile;
ccefe4c4 5286 struct obstack *obstackp;
40658b94
PH
5287 struct symbol *arg_sym;
5288 int found_sym;
ccefe4c4
TT
5289};
5290
40658b94
PH
5291/* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5292 to a list of symbols. DATA0 is a pointer to a struct match_data *
5293 containing the obstack that collects the symbol list, the file that SYM
5294 must come from, a flag indicating whether a non-argument symbol has
5295 been found in the current block, and the last argument symbol
5296 passed in SYM within the current block (if any). When SYM is null,
5297 marking the end of a block, the argument symbol is added if no
5298 other has been found. */
ccefe4c4 5299
40658b94
PH
5300static int
5301aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
ccefe4c4 5302{
40658b94
PH
5303 struct match_data *data = (struct match_data *) data0;
5304
5305 if (sym == NULL)
5306 {
5307 if (!data->found_sym && data->arg_sym != NULL)
5308 add_defn_to_vec (data->obstackp,
5309 fixup_symbol_section (data->arg_sym, data->objfile),
5310 block);
5311 data->found_sym = 0;
5312 data->arg_sym = NULL;
5313 }
5314 else
5315 {
5316 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5317 return 0;
5318 else if (SYMBOL_IS_ARGUMENT (sym))
5319 data->arg_sym = sym;
5320 else
5321 {
5322 data->found_sym = 1;
5323 add_defn_to_vec (data->obstackp,
5324 fixup_symbol_section (sym, data->objfile),
5325 block);
5326 }
5327 }
5328 return 0;
5329}
5330
db230ce3
JB
5331/* Implements compare_names, but only applying the comparision using
5332 the given CASING. */
5b4ee69b 5333
40658b94 5334static int
db230ce3
JB
5335compare_names_with_case (const char *string1, const char *string2,
5336 enum case_sensitivity casing)
40658b94
PH
5337{
5338 while (*string1 != '\0' && *string2 != '\0')
5339 {
db230ce3
JB
5340 char c1, c2;
5341
40658b94
PH
5342 if (isspace (*string1) || isspace (*string2))
5343 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5344
5345 if (casing == case_sensitive_off)
5346 {
5347 c1 = tolower (*string1);
5348 c2 = tolower (*string2);
5349 }
5350 else
5351 {
5352 c1 = *string1;
5353 c2 = *string2;
5354 }
5355 if (c1 != c2)
40658b94 5356 break;
db230ce3 5357
40658b94
PH
5358 string1 += 1;
5359 string2 += 1;
5360 }
db230ce3 5361
40658b94
PH
5362 switch (*string1)
5363 {
5364 case '(':
5365 return strcmp_iw_ordered (string1, string2);
5366 case '_':
5367 if (*string2 == '\0')
5368 {
052874e8 5369 if (is_name_suffix (string1))
40658b94
PH
5370 return 0;
5371 else
1a1d5513 5372 return 1;
40658b94 5373 }
dbb8534f 5374 /* FALLTHROUGH */
40658b94
PH
5375 default:
5376 if (*string2 == '(')
5377 return strcmp_iw_ordered (string1, string2);
5378 else
db230ce3
JB
5379 {
5380 if (casing == case_sensitive_off)
5381 return tolower (*string1) - tolower (*string2);
5382 else
5383 return *string1 - *string2;
5384 }
40658b94 5385 }
ccefe4c4
TT
5386}
5387
db230ce3
JB
5388/* Compare STRING1 to STRING2, with results as for strcmp.
5389 Compatible with strcmp_iw_ordered in that...
5390
5391 strcmp_iw_ordered (STRING1, STRING2) <= 0
5392
5393 ... implies...
5394
5395 compare_names (STRING1, STRING2) <= 0
5396
5397 (they may differ as to what symbols compare equal). */
5398
5399static int
5400compare_names (const char *string1, const char *string2)
5401{
5402 int result;
5403
5404 /* Similar to what strcmp_iw_ordered does, we need to perform
5405 a case-insensitive comparison first, and only resort to
5406 a second, case-sensitive, comparison if the first one was
5407 not sufficient to differentiate the two strings. */
5408
5409 result = compare_names_with_case (string1, string2, case_sensitive_off);
5410 if (result == 0)
5411 result = compare_names_with_case (string1, string2, case_sensitive_on);
5412
5413 return result;
5414}
5415
339c13b6
JB
5416/* Add to OBSTACKP all non-local symbols whose name and domain match
5417 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
5418 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
5419
5420static void
40658b94
PH
5421add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5422 domain_enum domain, int global,
5423 int is_wild_match)
339c13b6
JB
5424{
5425 struct objfile *objfile;
40658b94 5426 struct match_data data;
339c13b6 5427
6475f2fe 5428 memset (&data, 0, sizeof data);
ccefe4c4 5429 data.obstackp = obstackp;
339c13b6 5430
ccefe4c4 5431 ALL_OBJFILES (objfile)
40658b94
PH
5432 {
5433 data.objfile = objfile;
5434
5435 if (is_wild_match)
4186eb54
KS
5436 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5437 aux_add_nonlocal_symbols, &data,
5438 wild_match, NULL);
40658b94 5439 else
4186eb54
KS
5440 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5441 aux_add_nonlocal_symbols, &data,
5442 full_match, compare_names);
40658b94
PH
5443 }
5444
5445 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5446 {
5447 ALL_OBJFILES (objfile)
5448 {
5449 char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5450 strcpy (name1, "_ada_");
5451 strcpy (name1 + sizeof ("_ada_") - 1, name);
5452 data.objfile = objfile;
ade7ed9e
DE
5453 objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5454 global,
0963b4bd
MS
5455 aux_add_nonlocal_symbols,
5456 &data,
40658b94
PH
5457 full_match, compare_names);
5458 }
5459 }
339c13b6
JB
5460}
5461
4eeaa230
DE
5462/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5463 non-zero, enclosing scope and in global scopes, returning the number of
5464 matches.
9f88c959 5465 Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4c4b4cd2 5466 indicating the symbols found and the blocks and symbol tables (if
4eeaa230
DE
5467 any) in which they were found. This vector is transient---good only to
5468 the next call of ada_lookup_symbol_list.
5469
5470 When full_search is non-zero, any non-function/non-enumeral
4c4b4cd2
PH
5471 symbol match within the nest of blocks whose innermost member is BLOCK0,
5472 is the one match returned (no other matches in that or
d9680e73 5473 enclosing blocks is returned). If there are any matches in or
4eeaa230
DE
5474 surrounding BLOCK0, then these alone are returned.
5475
9f88c959 5476 Names prefixed with "standard__" are handled specially: "standard__"
4c4b4cd2 5477 is first stripped off, and only static and global symbols are searched. */
14f9c5c9 5478
4eeaa230
DE
5479static int
5480ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
fe978cb0 5481 domain_enum domain,
4eeaa230
DE
5482 struct ada_symbol_info **results,
5483 int full_search)
14f9c5c9
AS
5484{
5485 struct symbol *sym;
f0c5f9b2 5486 const struct block *block;
4c4b4cd2 5487 const char *name;
82ccd55e 5488 const int wild_match_p = should_use_wild_match (name0);
b1eedac9 5489 int syms_from_global_search = 0;
4c4b4cd2 5490 int ndefns;
14f9c5c9 5491
4c4b4cd2
PH
5492 obstack_free (&symbol_list_obstack, NULL);
5493 obstack_init (&symbol_list_obstack);
14f9c5c9 5494
14f9c5c9
AS
5495 /* Search specified block and its superiors. */
5496
4c4b4cd2 5497 name = name0;
f0c5f9b2 5498 block = block0;
339c13b6
JB
5499
5500 /* Special case: If the user specifies a symbol name inside package
5501 Standard, do a non-wild matching of the symbol name without
5502 the "standard__" prefix. This was primarily introduced in order
5503 to allow the user to specifically access the standard exceptions
5504 using, for instance, Standard.Constraint_Error when Constraint_Error
5505 is ambiguous (due to the user defining its own Constraint_Error
5506 entity inside its program). */
61012eef 5507 if (startswith (name0, "standard__"))
4c4b4cd2 5508 {
4c4b4cd2
PH
5509 block = NULL;
5510 name = name0 + sizeof ("standard__") - 1;
5511 }
5512
339c13b6 5513 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5514
4eeaa230
DE
5515 if (block != NULL)
5516 {
5517 if (full_search)
5518 {
5519 ada_add_local_symbols (&symbol_list_obstack, name, block,
fe978cb0 5520 domain, wild_match_p);
4eeaa230
DE
5521 }
5522 else
5523 {
5524 /* In the !full_search case we're are being called by
5525 ada_iterate_over_symbols, and we don't want to search
5526 superblocks. */
5527 ada_add_block_symbols (&symbol_list_obstack, block, name,
fe978cb0 5528 domain, NULL, wild_match_p);
4eeaa230
DE
5529 }
5530 if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5531 goto done;
5532 }
d2e4a39e 5533
339c13b6
JB
5534 /* No non-global symbols found. Check our cache to see if we have
5535 already performed this search before. If we have, then return
5536 the same result. */
5537
fe978cb0 5538 if (lookup_cached_symbol (name0, domain, &sym, &block))
4c4b4cd2
PH
5539 {
5540 if (sym != NULL)
2570f2b7 5541 add_defn_to_vec (&symbol_list_obstack, sym, block);
4c4b4cd2
PH
5542 goto done;
5543 }
14f9c5c9 5544
b1eedac9
JB
5545 syms_from_global_search = 1;
5546
339c13b6
JB
5547 /* Search symbols from all global blocks. */
5548
fe978cb0 5549 add_nonlocal_symbols (&symbol_list_obstack, name, domain, 1,
82ccd55e 5550 wild_match_p);
d2e4a39e 5551
4c4b4cd2 5552 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5553 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5554
4c4b4cd2 5555 if (num_defns_collected (&symbol_list_obstack) == 0)
fe978cb0 5556 add_nonlocal_symbols (&symbol_list_obstack, name, domain, 0,
82ccd55e 5557 wild_match_p);
14f9c5c9 5558
4c4b4cd2
PH
5559done:
5560 ndefns = num_defns_collected (&symbol_list_obstack);
5561 *results = defns_collected (&symbol_list_obstack, 1);
5562
5563 ndefns = remove_extra_symbols (*results, ndefns);
5564
b1eedac9 5565 if (ndefns == 0 && full_search && syms_from_global_search)
fe978cb0 5566 cache_symbol (name0, domain, NULL, NULL);
14f9c5c9 5567
b1eedac9 5568 if (ndefns == 1 && full_search && syms_from_global_search)
fe978cb0 5569 cache_symbol (name0, domain, (*results)[0].sym, (*results)[0].block);
14f9c5c9 5570
aeb5907d 5571 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
14f9c5c9 5572
14f9c5c9
AS
5573 return ndefns;
5574}
5575
4eeaa230
DE
5576/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5577 in global scopes, returning the number of matches, and setting *RESULTS
5578 to a vector of (SYM,BLOCK) tuples.
5579 See ada_lookup_symbol_list_worker for further details. */
5580
5581int
5582ada_lookup_symbol_list (const char *name0, const struct block *block0,
5583 domain_enum domain, struct ada_symbol_info **results)
5584{
5585 return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5586}
5587
5588/* Implementation of the la_iterate_over_symbols method. */
5589
5590static void
5591ada_iterate_over_symbols (const struct block *block,
5592 const char *name, domain_enum domain,
5593 symbol_found_callback_ftype *callback,
5594 void *data)
5595{
5596 int ndefs, i;
5597 struct ada_symbol_info *results;
5598
5599 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5600 for (i = 0; i < ndefs; ++i)
5601 {
5602 if (! (*callback) (results[i].sym, data))
5603 break;
5604 }
5605}
5606
f8eba3c6
TT
5607/* If NAME is the name of an entity, return a string that should
5608 be used to look that entity up in Ada units. This string should
5609 be deallocated after use using xfree.
5610
5611 NAME can have any form that the "break" or "print" commands might
5612 recognize. In other words, it does not have to be the "natural"
5613 name, or the "encoded" name. */
5614
5615char *
5616ada_name_for_lookup (const char *name)
5617{
5618 char *canon;
5619 int nlen = strlen (name);
5620
5621 if (name[0] == '<' && name[nlen - 1] == '>')
5622 {
5623 canon = xmalloc (nlen - 1);
5624 memcpy (canon, name + 1, nlen - 2);
5625 canon[nlen - 2] = '\0';
5626 }
5627 else
5628 canon = xstrdup (ada_encode (ada_fold_name (name)));
5629 return canon;
5630}
5631
4e5c77fe
JB
5632/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5633 to 1, but choosing the first symbol found if there are multiple
5634 choices.
5635
5e2336be
JB
5636 The result is stored in *INFO, which must be non-NULL.
5637 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5638
5639void
5640ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5641 domain_enum domain,
5e2336be 5642 struct ada_symbol_info *info)
14f9c5c9 5643{
4c4b4cd2 5644 struct ada_symbol_info *candidates;
14f9c5c9
AS
5645 int n_candidates;
5646
5e2336be
JB
5647 gdb_assert (info != NULL);
5648 memset (info, 0, sizeof (struct ada_symbol_info));
4e5c77fe 5649
fe978cb0 5650 n_candidates = ada_lookup_symbol_list (name, block, domain, &candidates);
14f9c5c9 5651 if (n_candidates == 0)
4e5c77fe 5652 return;
4c4b4cd2 5653
5e2336be
JB
5654 *info = candidates[0];
5655 info->sym = fixup_symbol_section (info->sym, NULL);
4e5c77fe 5656}
aeb5907d
JB
5657
5658/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5659 scope and in global scopes, or NULL if none. NAME is folded and
5660 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5661 choosing the first symbol if there are multiple choices.
4e5c77fe
JB
5662 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5663
aeb5907d
JB
5664struct symbol *
5665ada_lookup_symbol (const char *name, const struct block *block0,
fe978cb0 5666 domain_enum domain, int *is_a_field_of_this)
aeb5907d 5667{
5e2336be 5668 struct ada_symbol_info info;
4e5c77fe 5669
aeb5907d
JB
5670 if (is_a_field_of_this != NULL)
5671 *is_a_field_of_this = 0;
5672
4e5c77fe 5673 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
fe978cb0 5674 block0, domain, &info);
5e2336be 5675 return info.sym;
4c4b4cd2 5676}
14f9c5c9 5677
4c4b4cd2 5678static struct symbol *
f606139a
DE
5679ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5680 const char *name,
76a01679 5681 const struct block *block,
21b556f4 5682 const domain_enum domain)
4c4b4cd2 5683{
04dccad0
JB
5684 struct symbol *sym;
5685
5686 sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5687 if (sym != NULL)
5688 return sym;
5689
5690 /* If we haven't found a match at this point, try the primitive
5691 types. In other languages, this search is performed before
5692 searching for global symbols in order to short-circuit that
5693 global-symbol search if it happens that the name corresponds
5694 to a primitive type. But we cannot do the same in Ada, because
5695 it is perfectly legitimate for a program to declare a type which
5696 has the same name as a standard type. If looking up a type in
5697 that situation, we have traditionally ignored the primitive type
5698 in favor of user-defined types. This is why, unlike most other
5699 languages, we search the primitive types this late and only after
5700 having searched the global symbols without success. */
5701
5702 if (domain == VAR_DOMAIN)
5703 {
5704 struct gdbarch *gdbarch;
5705
5706 if (block == NULL)
5707 gdbarch = target_gdbarch ();
5708 else
5709 gdbarch = block_gdbarch (block);
5710 sym = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5711 if (sym != NULL)
5712 return sym;
5713 }
5714
5715 return NULL;
14f9c5c9
AS
5716}
5717
5718
4c4b4cd2
PH
5719/* True iff STR is a possible encoded suffix of a normal Ada name
5720 that is to be ignored for matching purposes. Suffixes of parallel
5721 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5722 are given by any of the regular expressions:
4c4b4cd2 5723
babe1480
JB
5724 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5725 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5726 TKB [subprogram suffix for task bodies]
babe1480 5727 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5728 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5729
5730 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5731 match is performed. This sequence is used to differentiate homonyms,
5732 is an optional part of a valid name suffix. */
4c4b4cd2 5733
14f9c5c9 5734static int
d2e4a39e 5735is_name_suffix (const char *str)
14f9c5c9
AS
5736{
5737 int k;
4c4b4cd2
PH
5738 const char *matching;
5739 const int len = strlen (str);
5740
babe1480
JB
5741 /* Skip optional leading __[0-9]+. */
5742
4c4b4cd2
PH
5743 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5744 {
babe1480
JB
5745 str += 3;
5746 while (isdigit (str[0]))
5747 str += 1;
4c4b4cd2 5748 }
babe1480
JB
5749
5750 /* [.$][0-9]+ */
4c4b4cd2 5751
babe1480 5752 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5753 {
babe1480 5754 matching = str + 1;
4c4b4cd2
PH
5755 while (isdigit (matching[0]))
5756 matching += 1;
5757 if (matching[0] == '\0')
5758 return 1;
5759 }
5760
5761 /* ___[0-9]+ */
babe1480 5762
4c4b4cd2
PH
5763 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5764 {
5765 matching = str + 3;
5766 while (isdigit (matching[0]))
5767 matching += 1;
5768 if (matching[0] == '\0')
5769 return 1;
5770 }
5771
9ac7f98e
JB
5772 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5773
5774 if (strcmp (str, "TKB") == 0)
5775 return 1;
5776
529cad9c
PH
5777#if 0
5778 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5779 with a N at the end. Unfortunately, the compiler uses the same
5780 convention for other internal types it creates. So treating
529cad9c 5781 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5782 some regressions. For instance, consider the case of an enumerated
5783 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5784 name ends with N.
5785 Having a single character like this as a suffix carrying some
0963b4bd 5786 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5787 to be something like "_N" instead. In the meantime, do not do
5788 the following check. */
5789 /* Protected Object Subprograms */
5790 if (len == 1 && str [0] == 'N')
5791 return 1;
5792#endif
5793
5794 /* _E[0-9]+[bs]$ */
5795 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5796 {
5797 matching = str + 3;
5798 while (isdigit (matching[0]))
5799 matching += 1;
5800 if ((matching[0] == 'b' || matching[0] == 's')
5801 && matching [1] == '\0')
5802 return 1;
5803 }
5804
4c4b4cd2
PH
5805 /* ??? We should not modify STR directly, as we are doing below. This
5806 is fine in this case, but may become problematic later if we find
5807 that this alternative did not work, and want to try matching
5808 another one from the begining of STR. Since we modified it, we
5809 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5810 if (str[0] == 'X')
5811 {
5812 str += 1;
d2e4a39e 5813 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
5814 {
5815 if (str[0] != 'n' && str[0] != 'b')
5816 return 0;
5817 str += 1;
5818 }
14f9c5c9 5819 }
babe1480 5820
14f9c5c9
AS
5821 if (str[0] == '\000')
5822 return 1;
babe1480 5823
d2e4a39e 5824 if (str[0] == '_')
14f9c5c9
AS
5825 {
5826 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 5827 return 0;
d2e4a39e 5828 if (str[2] == '_')
4c4b4cd2 5829 {
61ee279c
PH
5830 if (strcmp (str + 3, "JM") == 0)
5831 return 1;
5832 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5833 the LJM suffix in favor of the JM one. But we will
5834 still accept LJM as a valid suffix for a reasonable
5835 amount of time, just to allow ourselves to debug programs
5836 compiled using an older version of GNAT. */
4c4b4cd2
PH
5837 if (strcmp (str + 3, "LJM") == 0)
5838 return 1;
5839 if (str[3] != 'X')
5840 return 0;
1265e4aa
JB
5841 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5842 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
5843 return 1;
5844 if (str[4] == 'R' && str[5] != 'T')
5845 return 1;
5846 return 0;
5847 }
5848 if (!isdigit (str[2]))
5849 return 0;
5850 for (k = 3; str[k] != '\0'; k += 1)
5851 if (!isdigit (str[k]) && str[k] != '_')
5852 return 0;
14f9c5c9
AS
5853 return 1;
5854 }
4c4b4cd2 5855 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5856 {
4c4b4cd2
PH
5857 for (k = 2; str[k] != '\0'; k += 1)
5858 if (!isdigit (str[k]) && str[k] != '_')
5859 return 0;
14f9c5c9
AS
5860 return 1;
5861 }
5862 return 0;
5863}
d2e4a39e 5864
aeb5907d
JB
5865/* Return non-zero if the string starting at NAME and ending before
5866 NAME_END contains no capital letters. */
529cad9c
PH
5867
5868static int
5869is_valid_name_for_wild_match (const char *name0)
5870{
5871 const char *decoded_name = ada_decode (name0);
5872 int i;
5873
5823c3ef
JB
5874 /* If the decoded name starts with an angle bracket, it means that
5875 NAME0 does not follow the GNAT encoding format. It should then
5876 not be allowed as a possible wild match. */
5877 if (decoded_name[0] == '<')
5878 return 0;
5879
529cad9c
PH
5880 for (i=0; decoded_name[i] != '\0'; i++)
5881 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5882 return 0;
5883
5884 return 1;
5885}
5886
73589123
PH
5887/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5888 that could start a simple name. Assumes that *NAMEP points into
5889 the string beginning at NAME0. */
4c4b4cd2 5890
14f9c5c9 5891static int
73589123 5892advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 5893{
73589123 5894 const char *name = *namep;
5b4ee69b 5895
5823c3ef 5896 while (1)
14f9c5c9 5897 {
aa27d0b3 5898 int t0, t1;
73589123
PH
5899
5900 t0 = *name;
5901 if (t0 == '_')
5902 {
5903 t1 = name[1];
5904 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5905 {
5906 name += 1;
61012eef 5907 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
5908 break;
5909 else
5910 name += 1;
5911 }
aa27d0b3
JB
5912 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5913 || name[2] == target0))
73589123
PH
5914 {
5915 name += 2;
5916 break;
5917 }
5918 else
5919 return 0;
5920 }
5921 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5922 name += 1;
5923 else
5823c3ef 5924 return 0;
73589123
PH
5925 }
5926
5927 *namep = name;
5928 return 1;
5929}
5930
5931/* Return 0 iff NAME encodes a name of the form prefix.PATN. Ignores any
5932 informational suffixes of NAME (i.e., for which is_name_suffix is
5933 true). Assumes that PATN is a lower-cased Ada simple name. */
5934
5935static int
5936wild_match (const char *name, const char *patn)
5937{
22e048c9 5938 const char *p;
73589123
PH
5939 const char *name0 = name;
5940
5941 while (1)
5942 {
5943 const char *match = name;
5944
5945 if (*name == *patn)
5946 {
5947 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5948 if (*p != *name)
5949 break;
5950 if (*p == '\0' && is_name_suffix (name))
5951 return match != name0 && !is_valid_name_for_wild_match (name0);
5952
5953 if (name[-1] == '_')
5954 name -= 1;
5955 }
5956 if (!advance_wild_match (&name, name0, *patn))
5957 return 1;
96d887e8 5958 }
96d887e8
PH
5959}
5960
40658b94
PH
5961/* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5962 informational suffix. */
5963
c4d840bd
PH
5964static int
5965full_match (const char *sym_name, const char *search_name)
5966{
40658b94 5967 return !match_name (sym_name, search_name, 0);
c4d840bd
PH
5968}
5969
5970
96d887e8
PH
5971/* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5972 vector *defn_symbols, updating the list of symbols in OBSTACKP
0963b4bd 5973 (if necessary). If WILD, treat as NAME with a wildcard prefix.
4eeaa230 5974 OBJFILE is the section containing BLOCK. */
96d887e8
PH
5975
5976static void
5977ada_add_block_symbols (struct obstack *obstackp,
f0c5f9b2 5978 const struct block *block, const char *name,
96d887e8 5979 domain_enum domain, struct objfile *objfile,
2570f2b7 5980 int wild)
96d887e8 5981{
8157b174 5982 struct block_iterator iter;
96d887e8
PH
5983 int name_len = strlen (name);
5984 /* A matching argument symbol, if any. */
5985 struct symbol *arg_sym;
5986 /* Set true when we find a matching non-argument symbol. */
5987 int found_sym;
5988 struct symbol *sym;
5989
5990 arg_sym = NULL;
5991 found_sym = 0;
5992 if (wild)
5993 {
8157b174
TT
5994 for (sym = block_iter_match_first (block, name, wild_match, &iter);
5995 sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
76a01679 5996 {
4186eb54
KS
5997 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5998 SYMBOL_DOMAIN (sym), domain)
73589123 5999 && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
76a01679 6000 {
2a2d4dc3
AS
6001 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
6002 continue;
6003 else if (SYMBOL_IS_ARGUMENT (sym))
6004 arg_sym = sym;
6005 else
6006 {
76a01679
JB
6007 found_sym = 1;
6008 add_defn_to_vec (obstackp,
6009 fixup_symbol_section (sym, objfile),
2570f2b7 6010 block);
76a01679
JB
6011 }
6012 }
6013 }
96d887e8
PH
6014 }
6015 else
6016 {
8157b174
TT
6017 for (sym = block_iter_match_first (block, name, full_match, &iter);
6018 sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
76a01679 6019 {
4186eb54
KS
6020 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6021 SYMBOL_DOMAIN (sym), domain))
76a01679 6022 {
c4d840bd
PH
6023 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6024 {
6025 if (SYMBOL_IS_ARGUMENT (sym))
6026 arg_sym = sym;
6027 else
2a2d4dc3 6028 {
c4d840bd
PH
6029 found_sym = 1;
6030 add_defn_to_vec (obstackp,
6031 fixup_symbol_section (sym, objfile),
6032 block);
2a2d4dc3 6033 }
c4d840bd 6034 }
76a01679
JB
6035 }
6036 }
96d887e8
PH
6037 }
6038
6039 if (!found_sym && arg_sym != NULL)
6040 {
76a01679
JB
6041 add_defn_to_vec (obstackp,
6042 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6043 block);
96d887e8
PH
6044 }
6045
6046 if (!wild)
6047 {
6048 arg_sym = NULL;
6049 found_sym = 0;
6050
6051 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6052 {
4186eb54
KS
6053 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6054 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
6055 {
6056 int cmp;
6057
6058 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
6059 if (cmp == 0)
6060 {
61012eef 6061 cmp = !startswith (SYMBOL_LINKAGE_NAME (sym), "_ada_");
76a01679
JB
6062 if (cmp == 0)
6063 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
6064 name_len);
6065 }
6066
6067 if (cmp == 0
6068 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
6069 {
2a2d4dc3
AS
6070 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6071 {
6072 if (SYMBOL_IS_ARGUMENT (sym))
6073 arg_sym = sym;
6074 else
6075 {
6076 found_sym = 1;
6077 add_defn_to_vec (obstackp,
6078 fixup_symbol_section (sym, objfile),
6079 block);
6080 }
6081 }
76a01679
JB
6082 }
6083 }
76a01679 6084 }
96d887e8
PH
6085
6086 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6087 They aren't parameters, right? */
6088 if (!found_sym && arg_sym != NULL)
6089 {
6090 add_defn_to_vec (obstackp,
76a01679 6091 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6092 block);
96d887e8
PH
6093 }
6094 }
6095}
6096\f
41d27058
JB
6097
6098 /* Symbol Completion */
6099
6100/* If SYM_NAME is a completion candidate for TEXT, return this symbol
6101 name in a form that's appropriate for the completion. The result
6102 does not need to be deallocated, but is only good until the next call.
6103
6104 TEXT_LEN is equal to the length of TEXT.
e701b3c0 6105 Perform a wild match if WILD_MATCH_P is set.
6ea35997 6106 ENCODED_P should be set if TEXT represents the start of a symbol name
41d27058
JB
6107 in its encoded form. */
6108
6109static const char *
6110symbol_completion_match (const char *sym_name,
6111 const char *text, int text_len,
6ea35997 6112 int wild_match_p, int encoded_p)
41d27058 6113{
41d27058
JB
6114 const int verbatim_match = (text[0] == '<');
6115 int match = 0;
6116
6117 if (verbatim_match)
6118 {
6119 /* Strip the leading angle bracket. */
6120 text = text + 1;
6121 text_len--;
6122 }
6123
6124 /* First, test against the fully qualified name of the symbol. */
6125
6126 if (strncmp (sym_name, text, text_len) == 0)
6127 match = 1;
6128
6ea35997 6129 if (match && !encoded_p)
41d27058
JB
6130 {
6131 /* One needed check before declaring a positive match is to verify
6132 that iff we are doing a verbatim match, the decoded version
6133 of the symbol name starts with '<'. Otherwise, this symbol name
6134 is not a suitable completion. */
6135 const char *sym_name_copy = sym_name;
6136 int has_angle_bracket;
6137
6138 sym_name = ada_decode (sym_name);
6139 has_angle_bracket = (sym_name[0] == '<');
6140 match = (has_angle_bracket == verbatim_match);
6141 sym_name = sym_name_copy;
6142 }
6143
6144 if (match && !verbatim_match)
6145 {
6146 /* When doing non-verbatim match, another check that needs to
6147 be done is to verify that the potentially matching symbol name
6148 does not include capital letters, because the ada-mode would
6149 not be able to understand these symbol names without the
6150 angle bracket notation. */
6151 const char *tmp;
6152
6153 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6154 if (*tmp != '\0')
6155 match = 0;
6156 }
6157
6158 /* Second: Try wild matching... */
6159
e701b3c0 6160 if (!match && wild_match_p)
41d27058
JB
6161 {
6162 /* Since we are doing wild matching, this means that TEXT
6163 may represent an unqualified symbol name. We therefore must
6164 also compare TEXT against the unqualified name of the symbol. */
6165 sym_name = ada_unqualified_name (ada_decode (sym_name));
6166
6167 if (strncmp (sym_name, text, text_len) == 0)
6168 match = 1;
6169 }
6170
6171 /* Finally: If we found a mach, prepare the result to return. */
6172
6173 if (!match)
6174 return NULL;
6175
6176 if (verbatim_match)
6177 sym_name = add_angle_brackets (sym_name);
6178
6ea35997 6179 if (!encoded_p)
41d27058
JB
6180 sym_name = ada_decode (sym_name);
6181
6182 return sym_name;
6183}
6184
6185/* A companion function to ada_make_symbol_completion_list().
6186 Check if SYM_NAME represents a symbol which name would be suitable
6187 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6188 it is appended at the end of the given string vector SV.
6189
6190 ORIG_TEXT is the string original string from the user command
6191 that needs to be completed. WORD is the entire command on which
6192 completion should be performed. These two parameters are used to
6193 determine which part of the symbol name should be added to the
6194 completion vector.
c0af1706 6195 if WILD_MATCH_P is set, then wild matching is performed.
cb8e9b97 6196 ENCODED_P should be set if TEXT represents a symbol name in its
41d27058
JB
6197 encoded formed (in which case the completion should also be
6198 encoded). */
6199
6200static void
d6565258 6201symbol_completion_add (VEC(char_ptr) **sv,
41d27058
JB
6202 const char *sym_name,
6203 const char *text, int text_len,
6204 const char *orig_text, const char *word,
cb8e9b97 6205 int wild_match_p, int encoded_p)
41d27058
JB
6206{
6207 const char *match = symbol_completion_match (sym_name, text, text_len,
cb8e9b97 6208 wild_match_p, encoded_p);
41d27058
JB
6209 char *completion;
6210
6211 if (match == NULL)
6212 return;
6213
6214 /* We found a match, so add the appropriate completion to the given
6215 string vector. */
6216
6217 if (word == orig_text)
6218 {
6219 completion = xmalloc (strlen (match) + 5);
6220 strcpy (completion, match);
6221 }
6222 else if (word > orig_text)
6223 {
6224 /* Return some portion of sym_name. */
6225 completion = xmalloc (strlen (match) + 5);
6226 strcpy (completion, match + (word - orig_text));
6227 }
6228 else
6229 {
6230 /* Return some of ORIG_TEXT plus sym_name. */
6231 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6232 strncpy (completion, word, orig_text - word);
6233 completion[orig_text - word] = '\0';
6234 strcat (completion, match);
6235 }
6236
d6565258 6237 VEC_safe_push (char_ptr, *sv, completion);
41d27058
JB
6238}
6239
ccefe4c4 6240/* An object of this type is passed as the user_data argument to the
bb4142cf 6241 expand_symtabs_matching method. */
ccefe4c4
TT
6242struct add_partial_datum
6243{
6244 VEC(char_ptr) **completions;
6f937416 6245 const char *text;
ccefe4c4 6246 int text_len;
6f937416
PA
6247 const char *text0;
6248 const char *word;
ccefe4c4
TT
6249 int wild_match;
6250 int encoded;
6251};
6252
bb4142cf
DE
6253/* A callback for expand_symtabs_matching. */
6254
7b08b9eb 6255static int
bb4142cf 6256ada_complete_symbol_matcher (const char *name, void *user_data)
ccefe4c4
TT
6257{
6258 struct add_partial_datum *data = user_data;
7b08b9eb
JK
6259
6260 return symbol_completion_match (name, data->text, data->text_len,
6261 data->wild_match, data->encoded) != NULL;
ccefe4c4
TT
6262}
6263
49c4e619
TT
6264/* Return a list of possible symbol names completing TEXT0. WORD is
6265 the entire command on which completion is made. */
41d27058 6266
49c4e619 6267static VEC (char_ptr) *
6f937416
PA
6268ada_make_symbol_completion_list (const char *text0, const char *word,
6269 enum type_code code)
41d27058
JB
6270{
6271 char *text;
6272 int text_len;
b1ed564a
JB
6273 int wild_match_p;
6274 int encoded_p;
2ba95b9b 6275 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
41d27058 6276 struct symbol *sym;
43f3e411 6277 struct compunit_symtab *s;
41d27058
JB
6278 struct minimal_symbol *msymbol;
6279 struct objfile *objfile;
3977b71f 6280 const struct block *b, *surrounding_static_block = 0;
41d27058 6281 int i;
8157b174 6282 struct block_iterator iter;
b8fea896 6283 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
41d27058 6284
2f68a895
TT
6285 gdb_assert (code == TYPE_CODE_UNDEF);
6286
41d27058
JB
6287 if (text0[0] == '<')
6288 {
6289 text = xstrdup (text0);
6290 make_cleanup (xfree, text);
6291 text_len = strlen (text);
b1ed564a
JB
6292 wild_match_p = 0;
6293 encoded_p = 1;
41d27058
JB
6294 }
6295 else
6296 {
6297 text = xstrdup (ada_encode (text0));
6298 make_cleanup (xfree, text);
6299 text_len = strlen (text);
6300 for (i = 0; i < text_len; i++)
6301 text[i] = tolower (text[i]);
6302
b1ed564a 6303 encoded_p = (strstr (text0, "__") != NULL);
41d27058
JB
6304 /* If the name contains a ".", then the user is entering a fully
6305 qualified entity name, and the match must not be done in wild
6306 mode. Similarly, if the user wants to complete what looks like
6307 an encoded name, the match must not be done in wild mode. */
b1ed564a 6308 wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
41d27058
JB
6309 }
6310
6311 /* First, look at the partial symtab symbols. */
41d27058 6312 {
ccefe4c4
TT
6313 struct add_partial_datum data;
6314
6315 data.completions = &completions;
6316 data.text = text;
6317 data.text_len = text_len;
6318 data.text0 = text0;
6319 data.word = word;
b1ed564a
JB
6320 data.wild_match = wild_match_p;
6321 data.encoded = encoded_p;
276d885b
GB
6322 expand_symtabs_matching (NULL, ada_complete_symbol_matcher, NULL,
6323 ALL_DOMAIN, &data);
41d27058
JB
6324 }
6325
6326 /* At this point scan through the misc symbol vectors and add each
6327 symbol you find to the list. Eventually we want to ignore
6328 anything that isn't a text symbol (everything else will be
6329 handled by the psymtab code above). */
6330
6331 ALL_MSYMBOLS (objfile, msymbol)
6332 {
6333 QUIT;
efd66ac6 6334 symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
b1ed564a
JB
6335 text, text_len, text0, word, wild_match_p,
6336 encoded_p);
41d27058
JB
6337 }
6338
6339 /* Search upwards from currently selected frame (so that we can
6340 complete on local vars. */
6341
6342 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6343 {
6344 if (!BLOCK_SUPERBLOCK (b))
6345 surrounding_static_block = b; /* For elmin of dups */
6346
6347 ALL_BLOCK_SYMBOLS (b, iter, sym)
6348 {
d6565258 6349 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6350 text, text_len, text0, word,
b1ed564a 6351 wild_match_p, encoded_p);
41d27058
JB
6352 }
6353 }
6354
6355 /* Go through the symtabs and check the externs and statics for
43f3e411 6356 symbols which match. */
41d27058 6357
43f3e411 6358 ALL_COMPUNITS (objfile, s)
41d27058
JB
6359 {
6360 QUIT;
43f3e411 6361 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
41d27058
JB
6362 ALL_BLOCK_SYMBOLS (b, iter, sym)
6363 {
d6565258 6364 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6365 text, text_len, text0, word,
b1ed564a 6366 wild_match_p, encoded_p);
41d27058
JB
6367 }
6368 }
6369
43f3e411 6370 ALL_COMPUNITS (objfile, s)
41d27058
JB
6371 {
6372 QUIT;
43f3e411 6373 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
41d27058
JB
6374 /* Don't do this block twice. */
6375 if (b == surrounding_static_block)
6376 continue;
6377 ALL_BLOCK_SYMBOLS (b, iter, sym)
6378 {
d6565258 6379 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6380 text, text_len, text0, word,
b1ed564a 6381 wild_match_p, encoded_p);
41d27058
JB
6382 }
6383 }
6384
b8fea896 6385 do_cleanups (old_chain);
49c4e619 6386 return completions;
41d27058
JB
6387}
6388
963a6417 6389 /* Field Access */
96d887e8 6390
73fb9985
JB
6391/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6392 for tagged types. */
6393
6394static int
6395ada_is_dispatch_table_ptr_type (struct type *type)
6396{
0d5cff50 6397 const char *name;
73fb9985
JB
6398
6399 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6400 return 0;
6401
6402 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6403 if (name == NULL)
6404 return 0;
6405
6406 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6407}
6408
ac4a2da4
JG
6409/* Return non-zero if TYPE is an interface tag. */
6410
6411static int
6412ada_is_interface_tag (struct type *type)
6413{
6414 const char *name = TYPE_NAME (type);
6415
6416 if (name == NULL)
6417 return 0;
6418
6419 return (strcmp (name, "ada__tags__interface_tag") == 0);
6420}
6421
963a6417
PH
6422/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6423 to be invisible to users. */
96d887e8 6424
963a6417
PH
6425int
6426ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6427{
963a6417
PH
6428 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6429 return 1;
ffde82bf 6430
73fb9985
JB
6431 /* Check the name of that field. */
6432 {
6433 const char *name = TYPE_FIELD_NAME (type, field_num);
6434
6435 /* Anonymous field names should not be printed.
6436 brobecker/2007-02-20: I don't think this can actually happen
6437 but we don't want to print the value of annonymous fields anyway. */
6438 if (name == NULL)
6439 return 1;
6440
ffde82bf
JB
6441 /* Normally, fields whose name start with an underscore ("_")
6442 are fields that have been internally generated by the compiler,
6443 and thus should not be printed. The "_parent" field is special,
6444 however: This is a field internally generated by the compiler
6445 for tagged types, and it contains the components inherited from
6446 the parent type. This field should not be printed as is, but
6447 should not be ignored either. */
61012eef 6448 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6449 return 1;
6450 }
6451
ac4a2da4
JG
6452 /* If this is the dispatch table of a tagged type or an interface tag,
6453 then ignore. */
73fb9985 6454 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6455 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6456 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6457 return 1;
6458
6459 /* Not a special field, so it should not be ignored. */
6460 return 0;
963a6417 6461}
96d887e8 6462
963a6417 6463/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6464 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6465
963a6417
PH
6466int
6467ada_is_tagged_type (struct type *type, int refok)
6468{
6469 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6470}
96d887e8 6471
963a6417 6472/* True iff TYPE represents the type of X'Tag */
96d887e8 6473
963a6417
PH
6474int
6475ada_is_tag_type (struct type *type)
6476{
460efde1
JB
6477 type = ada_check_typedef (type);
6478
963a6417
PH
6479 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6480 return 0;
6481 else
96d887e8 6482 {
963a6417 6483 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6484
963a6417
PH
6485 return (name != NULL
6486 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6487 }
96d887e8
PH
6488}
6489
963a6417 6490/* The type of the tag on VAL. */
76a01679 6491
963a6417
PH
6492struct type *
6493ada_tag_type (struct value *val)
96d887e8 6494{
df407dfe 6495 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
963a6417 6496}
96d887e8 6497
b50d69b5
JG
6498/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6499 retired at Ada 05). */
6500
6501static int
6502is_ada95_tag (struct value *tag)
6503{
6504 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6505}
6506
963a6417 6507/* The value of the tag on VAL. */
96d887e8 6508
963a6417
PH
6509struct value *
6510ada_value_tag (struct value *val)
6511{
03ee6b2e 6512 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6513}
6514
963a6417
PH
6515/* The value of the tag on the object of type TYPE whose contents are
6516 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6517 ADDRESS. */
96d887e8 6518
963a6417 6519static struct value *
10a2c479 6520value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6521 const gdb_byte *valaddr,
963a6417 6522 CORE_ADDR address)
96d887e8 6523{
b5385fc0 6524 int tag_byte_offset;
963a6417 6525 struct type *tag_type;
5b4ee69b 6526
963a6417 6527 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6528 NULL, NULL, NULL))
96d887e8 6529 {
fc1a4b47 6530 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6531 ? NULL
6532 : valaddr + tag_byte_offset);
963a6417 6533 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6534
963a6417 6535 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6536 }
963a6417
PH
6537 return NULL;
6538}
96d887e8 6539
963a6417
PH
6540static struct type *
6541type_from_tag (struct value *tag)
6542{
6543 const char *type_name = ada_tag_name (tag);
5b4ee69b 6544
963a6417
PH
6545 if (type_name != NULL)
6546 return ada_find_any_type (ada_encode (type_name));
6547 return NULL;
6548}
96d887e8 6549
b50d69b5
JG
6550/* Given a value OBJ of a tagged type, return a value of this
6551 type at the base address of the object. The base address, as
6552 defined in Ada.Tags, it is the address of the primary tag of
6553 the object, and therefore where the field values of its full
6554 view can be fetched. */
6555
6556struct value *
6557ada_tag_value_at_base_address (struct value *obj)
6558{
b50d69b5
JG
6559 struct value *val;
6560 LONGEST offset_to_top = 0;
6561 struct type *ptr_type, *obj_type;
6562 struct value *tag;
6563 CORE_ADDR base_address;
6564
6565 obj_type = value_type (obj);
6566
6567 /* It is the responsability of the caller to deref pointers. */
6568
6569 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6570 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6571 return obj;
6572
6573 tag = ada_value_tag (obj);
6574 if (!tag)
6575 return obj;
6576
6577 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6578
6579 if (is_ada95_tag (tag))
6580 return obj;
6581
6582 ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6583 ptr_type = lookup_pointer_type (ptr_type);
6584 val = value_cast (ptr_type, tag);
6585 if (!val)
6586 return obj;
6587
6588 /* It is perfectly possible that an exception be raised while
6589 trying to determine the base address, just like for the tag;
6590 see ada_tag_name for more details. We do not print the error
6591 message for the same reason. */
6592
492d29ea 6593 TRY
b50d69b5
JG
6594 {
6595 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6596 }
6597
492d29ea
PA
6598 CATCH (e, RETURN_MASK_ERROR)
6599 {
6600 return obj;
6601 }
6602 END_CATCH
b50d69b5
JG
6603
6604 /* If offset is null, nothing to do. */
6605
6606 if (offset_to_top == 0)
6607 return obj;
6608
6609 /* -1 is a special case in Ada.Tags; however, what should be done
6610 is not quite clear from the documentation. So do nothing for
6611 now. */
6612
6613 if (offset_to_top == -1)
6614 return obj;
6615
6616 base_address = value_address (obj) - offset_to_top;
6617 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6618
6619 /* Make sure that we have a proper tag at the new address.
6620 Otherwise, offset_to_top is bogus (which can happen when
6621 the object is not initialized yet). */
6622
6623 if (!tag)
6624 return obj;
6625
6626 obj_type = type_from_tag (tag);
6627
6628 if (!obj_type)
6629 return obj;
6630
6631 return value_from_contents_and_address (obj_type, NULL, base_address);
6632}
6633
1b611343
JB
6634/* Return the "ada__tags__type_specific_data" type. */
6635
6636static struct type *
6637ada_get_tsd_type (struct inferior *inf)
963a6417 6638{
1b611343 6639 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6640
1b611343
JB
6641 if (data->tsd_type == 0)
6642 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6643 return data->tsd_type;
6644}
529cad9c 6645
1b611343
JB
6646/* Return the TSD (type-specific data) associated to the given TAG.
6647 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6648
1b611343 6649 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6650
1b611343
JB
6651static struct value *
6652ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6653{
4c4b4cd2 6654 struct value *val;
1b611343 6655 struct type *type;
5b4ee69b 6656
1b611343
JB
6657 /* First option: The TSD is simply stored as a field of our TAG.
6658 Only older versions of GNAT would use this format, but we have
6659 to test it first, because there are no visible markers for
6660 the current approach except the absence of that field. */
529cad9c 6661
1b611343
JB
6662 val = ada_value_struct_elt (tag, "tsd", 1);
6663 if (val)
6664 return val;
e802dbe0 6665
1b611343
JB
6666 /* Try the second representation for the dispatch table (in which
6667 there is no explicit 'tsd' field in the referent of the tag pointer,
6668 and instead the tsd pointer is stored just before the dispatch
6669 table. */
e802dbe0 6670
1b611343
JB
6671 type = ada_get_tsd_type (current_inferior());
6672 if (type == NULL)
6673 return NULL;
6674 type = lookup_pointer_type (lookup_pointer_type (type));
6675 val = value_cast (type, tag);
6676 if (val == NULL)
6677 return NULL;
6678 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6679}
6680
1b611343
JB
6681/* Given the TSD of a tag (type-specific data), return a string
6682 containing the name of the associated type.
6683
6684 The returned value is good until the next call. May return NULL
6685 if we are unable to determine the tag name. */
6686
6687static char *
6688ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6689{
529cad9c
PH
6690 static char name[1024];
6691 char *p;
1b611343 6692 struct value *val;
529cad9c 6693
1b611343 6694 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6695 if (val == NULL)
1b611343 6696 return NULL;
4c4b4cd2
PH
6697 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6698 for (p = name; *p != '\0'; p += 1)
6699 if (isalpha (*p))
6700 *p = tolower (*p);
1b611343 6701 return name;
4c4b4cd2
PH
6702}
6703
6704/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6705 a C string.
6706
6707 Return NULL if the TAG is not an Ada tag, or if we were unable to
6708 determine the name of that tag. The result is good until the next
6709 call. */
4c4b4cd2
PH
6710
6711const char *
6712ada_tag_name (struct value *tag)
6713{
1b611343 6714 char *name = NULL;
5b4ee69b 6715
df407dfe 6716 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6717 return NULL;
1b611343
JB
6718
6719 /* It is perfectly possible that an exception be raised while trying
6720 to determine the TAG's name, even under normal circumstances:
6721 The associated variable may be uninitialized or corrupted, for
6722 instance. We do not let any exception propagate past this point.
6723 instead we return NULL.
6724
6725 We also do not print the error message either (which often is very
6726 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6727 the caller print a more meaningful message if necessary. */
492d29ea 6728 TRY
1b611343
JB
6729 {
6730 struct value *tsd = ada_get_tsd_from_tag (tag);
6731
6732 if (tsd != NULL)
6733 name = ada_tag_name_from_tsd (tsd);
6734 }
492d29ea
PA
6735 CATCH (e, RETURN_MASK_ERROR)
6736 {
6737 }
6738 END_CATCH
1b611343
JB
6739
6740 return name;
4c4b4cd2
PH
6741}
6742
6743/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6744
d2e4a39e 6745struct type *
ebf56fd3 6746ada_parent_type (struct type *type)
14f9c5c9
AS
6747{
6748 int i;
6749
61ee279c 6750 type = ada_check_typedef (type);
14f9c5c9
AS
6751
6752 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6753 return NULL;
6754
6755 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6756 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6757 {
6758 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6759
6760 /* If the _parent field is a pointer, then dereference it. */
6761 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6762 parent_type = TYPE_TARGET_TYPE (parent_type);
6763 /* If there is a parallel XVS type, get the actual base type. */
6764 parent_type = ada_get_base_type (parent_type);
6765
6766 return ada_check_typedef (parent_type);
6767 }
14f9c5c9
AS
6768
6769 return NULL;
6770}
6771
4c4b4cd2
PH
6772/* True iff field number FIELD_NUM of structure type TYPE contains the
6773 parent-type (inherited) fields of a derived type. Assumes TYPE is
6774 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6775
6776int
ebf56fd3 6777ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6778{
61ee279c 6779 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6780
4c4b4cd2 6781 return (name != NULL
61012eef
GB
6782 && (startswith (name, "PARENT")
6783 || startswith (name, "_parent")));
14f9c5c9
AS
6784}
6785
4c4b4cd2 6786/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6787 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6788 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6789 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6790 structures. */
14f9c5c9
AS
6791
6792int
ebf56fd3 6793ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6794{
d2e4a39e 6795 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6796
d2e4a39e 6797 return (name != NULL
61012eef 6798 && (startswith (name, "PARENT")
4c4b4cd2 6799 || strcmp (name, "REP") == 0
61012eef 6800 || startswith (name, "_parent")
4c4b4cd2 6801 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6802}
6803
4c4b4cd2
PH
6804/* True iff field number FIELD_NUM of structure or union type TYPE
6805 is a variant wrapper. Assumes TYPE is a structure type with at least
6806 FIELD_NUM+1 fields. */
14f9c5c9
AS
6807
6808int
ebf56fd3 6809ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6810{
d2e4a39e 6811 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 6812
14f9c5c9 6813 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 6814 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
6815 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6816 == TYPE_CODE_UNION)));
14f9c5c9
AS
6817}
6818
6819/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6820 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6821 returns the type of the controlling discriminant for the variant.
6822 May return NULL if the type could not be found. */
14f9c5c9 6823
d2e4a39e 6824struct type *
ebf56fd3 6825ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6826{
d2e4a39e 6827 char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6828
7c964f07 6829 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
14f9c5c9
AS
6830}
6831
4c4b4cd2 6832/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6833 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6834 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
6835
6836int
ebf56fd3 6837ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6838{
d2e4a39e 6839 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6840
14f9c5c9
AS
6841 return (name != NULL && name[0] == 'O');
6842}
6843
6844/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6845 returns the name of the discriminant controlling the variant.
6846 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6847
d2e4a39e 6848char *
ebf56fd3 6849ada_variant_discrim_name (struct type *type0)
14f9c5c9 6850{
d2e4a39e 6851 static char *result = NULL;
14f9c5c9 6852 static size_t result_len = 0;
d2e4a39e
AS
6853 struct type *type;
6854 const char *name;
6855 const char *discrim_end;
6856 const char *discrim_start;
14f9c5c9
AS
6857
6858 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6859 type = TYPE_TARGET_TYPE (type0);
6860 else
6861 type = type0;
6862
6863 name = ada_type_name (type);
6864
6865 if (name == NULL || name[0] == '\000')
6866 return "";
6867
6868 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6869 discrim_end -= 1)
6870 {
61012eef 6871 if (startswith (discrim_end, "___XVN"))
4c4b4cd2 6872 break;
14f9c5c9
AS
6873 }
6874 if (discrim_end == name)
6875 return "";
6876
d2e4a39e 6877 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6878 discrim_start -= 1)
6879 {
d2e4a39e 6880 if (discrim_start == name + 1)
4c4b4cd2 6881 return "";
76a01679 6882 if ((discrim_start > name + 3
61012eef 6883 && startswith (discrim_start - 3, "___"))
4c4b4cd2
PH
6884 || discrim_start[-1] == '.')
6885 break;
14f9c5c9
AS
6886 }
6887
6888 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6889 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 6890 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
6891 return result;
6892}
6893
4c4b4cd2
PH
6894/* Scan STR for a subtype-encoded number, beginning at position K.
6895 Put the position of the character just past the number scanned in
6896 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6897 Return 1 if there was a valid number at the given position, and 0
6898 otherwise. A "subtype-encoded" number consists of the absolute value
6899 in decimal, followed by the letter 'm' to indicate a negative number.
6900 Assumes 0m does not occur. */
14f9c5c9
AS
6901
6902int
d2e4a39e 6903ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6904{
6905 ULONGEST RU;
6906
d2e4a39e 6907 if (!isdigit (str[k]))
14f9c5c9
AS
6908 return 0;
6909
4c4b4cd2 6910 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6911 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6912 LONGEST. */
14f9c5c9
AS
6913 RU = 0;
6914 while (isdigit (str[k]))
6915 {
d2e4a39e 6916 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6917 k += 1;
6918 }
6919
d2e4a39e 6920 if (str[k] == 'm')
14f9c5c9
AS
6921 {
6922 if (R != NULL)
4c4b4cd2 6923 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6924 k += 1;
6925 }
6926 else if (R != NULL)
6927 *R = (LONGEST) RU;
6928
4c4b4cd2 6929 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6930 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6931 number representable as a LONGEST (although either would probably work
6932 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6933 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6934
6935 if (new_k != NULL)
6936 *new_k = k;
6937 return 1;
6938}
6939
4c4b4cd2
PH
6940/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6941 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6942 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6943
d2e4a39e 6944int
ebf56fd3 6945ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6946{
d2e4a39e 6947 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6948 int p;
6949
6950 p = 0;
6951 while (1)
6952 {
d2e4a39e 6953 switch (name[p])
4c4b4cd2
PH
6954 {
6955 case '\0':
6956 return 0;
6957 case 'S':
6958 {
6959 LONGEST W;
5b4ee69b 6960
4c4b4cd2
PH
6961 if (!ada_scan_number (name, p + 1, &W, &p))
6962 return 0;
6963 if (val == W)
6964 return 1;
6965 break;
6966 }
6967 case 'R':
6968 {
6969 LONGEST L, U;
5b4ee69b 6970
4c4b4cd2
PH
6971 if (!ada_scan_number (name, p + 1, &L, &p)
6972 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6973 return 0;
6974 if (val >= L && val <= U)
6975 return 1;
6976 break;
6977 }
6978 case 'O':
6979 return 1;
6980 default:
6981 return 0;
6982 }
6983 }
6984}
6985
0963b4bd 6986/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6987
6988/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6989 ARG_TYPE, extract and return the value of one of its (non-static)
6990 fields. FIELDNO says which field. Differs from value_primitive_field
6991 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6992
4c4b4cd2 6993static struct value *
d2e4a39e 6994ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 6995 struct type *arg_type)
14f9c5c9 6996{
14f9c5c9
AS
6997 struct type *type;
6998
61ee279c 6999 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
7000 type = TYPE_FIELD_TYPE (arg_type, fieldno);
7001
4c4b4cd2 7002 /* Handle packed fields. */
14f9c5c9
AS
7003
7004 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
7005 {
7006 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
7007 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 7008
0fd88904 7009 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
7010 offset + bit_pos / 8,
7011 bit_pos % 8, bit_size, type);
14f9c5c9
AS
7012 }
7013 else
7014 return value_primitive_field (arg1, offset, fieldno, arg_type);
7015}
7016
52ce6436
PH
7017/* Find field with name NAME in object of type TYPE. If found,
7018 set the following for each argument that is non-null:
7019 - *FIELD_TYPE_P to the field's type;
7020 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
7021 an object of that type;
7022 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
7023 - *BIT_SIZE_P to its size in bits if the field is packed, and
7024 0 otherwise;
7025 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
7026 fields up to but not including the desired field, or by the total
7027 number of fields if not found. A NULL value of NAME never
7028 matches; the function just counts visible fields in this case.
7029
0963b4bd 7030 Returns 1 if found, 0 otherwise. */
52ce6436 7031
4c4b4cd2 7032static int
0d5cff50 7033find_struct_field (const char *name, struct type *type, int offset,
76a01679 7034 struct type **field_type_p,
52ce6436
PH
7035 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
7036 int *index_p)
4c4b4cd2
PH
7037{
7038 int i;
7039
61ee279c 7040 type = ada_check_typedef (type);
76a01679 7041
52ce6436
PH
7042 if (field_type_p != NULL)
7043 *field_type_p = NULL;
7044 if (byte_offset_p != NULL)
d5d6fca5 7045 *byte_offset_p = 0;
52ce6436
PH
7046 if (bit_offset_p != NULL)
7047 *bit_offset_p = 0;
7048 if (bit_size_p != NULL)
7049 *bit_size_p = 0;
7050
7051 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
7052 {
7053 int bit_pos = TYPE_FIELD_BITPOS (type, i);
7054 int fld_offset = offset + bit_pos / 8;
0d5cff50 7055 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 7056
4c4b4cd2
PH
7057 if (t_field_name == NULL)
7058 continue;
7059
52ce6436 7060 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
7061 {
7062 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 7063
52ce6436
PH
7064 if (field_type_p != NULL)
7065 *field_type_p = TYPE_FIELD_TYPE (type, i);
7066 if (byte_offset_p != NULL)
7067 *byte_offset_p = fld_offset;
7068 if (bit_offset_p != NULL)
7069 *bit_offset_p = bit_pos % 8;
7070 if (bit_size_p != NULL)
7071 *bit_size_p = bit_size;
76a01679
JB
7072 return 1;
7073 }
4c4b4cd2
PH
7074 else if (ada_is_wrapper_field (type, i))
7075 {
52ce6436
PH
7076 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7077 field_type_p, byte_offset_p, bit_offset_p,
7078 bit_size_p, index_p))
76a01679
JB
7079 return 1;
7080 }
4c4b4cd2
PH
7081 else if (ada_is_variant_part (type, i))
7082 {
52ce6436
PH
7083 /* PNH: Wait. Do we ever execute this section, or is ARG always of
7084 fixed type?? */
4c4b4cd2 7085 int j;
52ce6436
PH
7086 struct type *field_type
7087 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7088
52ce6436 7089 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7090 {
76a01679
JB
7091 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7092 fld_offset
7093 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7094 field_type_p, byte_offset_p,
52ce6436 7095 bit_offset_p, bit_size_p, index_p))
76a01679 7096 return 1;
4c4b4cd2
PH
7097 }
7098 }
52ce6436
PH
7099 else if (index_p != NULL)
7100 *index_p += 1;
4c4b4cd2
PH
7101 }
7102 return 0;
7103}
7104
0963b4bd 7105/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7106
52ce6436
PH
7107static int
7108num_visible_fields (struct type *type)
7109{
7110 int n;
5b4ee69b 7111
52ce6436
PH
7112 n = 0;
7113 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7114 return n;
7115}
14f9c5c9 7116
4c4b4cd2 7117/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7118 and search in it assuming it has (class) type TYPE.
7119 If found, return value, else return NULL.
7120
4c4b4cd2 7121 Searches recursively through wrapper fields (e.g., '_parent'). */
14f9c5c9 7122
4c4b4cd2 7123static struct value *
d2e4a39e 7124ada_search_struct_field (char *name, struct value *arg, int offset,
4c4b4cd2 7125 struct type *type)
14f9c5c9
AS
7126{
7127 int i;
14f9c5c9 7128
5b4ee69b 7129 type = ada_check_typedef (type);
52ce6436 7130 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9 7131 {
0d5cff50 7132 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7133
7134 if (t_field_name == NULL)
4c4b4cd2 7135 continue;
14f9c5c9
AS
7136
7137 else if (field_name_match (t_field_name, name))
4c4b4cd2 7138 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7139
7140 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7141 {
0963b4bd 7142 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
7143 ada_search_struct_field (name, arg,
7144 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7145 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7146
4c4b4cd2
PH
7147 if (v != NULL)
7148 return v;
7149 }
14f9c5c9
AS
7150
7151 else if (ada_is_variant_part (type, i))
4c4b4cd2 7152 {
0963b4bd 7153 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 7154 int j;
5b4ee69b
MS
7155 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7156 i));
4c4b4cd2
PH
7157 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7158
52ce6436 7159 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7160 {
0963b4bd
MS
7161 struct value *v = ada_search_struct_field /* Force line
7162 break. */
06d5cf63
JB
7163 (name, arg,
7164 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7165 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 7166
4c4b4cd2
PH
7167 if (v != NULL)
7168 return v;
7169 }
7170 }
14f9c5c9
AS
7171 }
7172 return NULL;
7173}
d2e4a39e 7174
52ce6436
PH
7175static struct value *ada_index_struct_field_1 (int *, struct value *,
7176 int, struct type *);
7177
7178
7179/* Return field #INDEX in ARG, where the index is that returned by
7180 * find_struct_field through its INDEX_P argument. Adjust the address
7181 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7182 * If found, return value, else return NULL. */
52ce6436
PH
7183
7184static struct value *
7185ada_index_struct_field (int index, struct value *arg, int offset,
7186 struct type *type)
7187{
7188 return ada_index_struct_field_1 (&index, arg, offset, type);
7189}
7190
7191
7192/* Auxiliary function for ada_index_struct_field. Like
7193 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7194 * *INDEX_P. */
52ce6436
PH
7195
7196static struct value *
7197ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7198 struct type *type)
7199{
7200 int i;
7201 type = ada_check_typedef (type);
7202
7203 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7204 {
7205 if (TYPE_FIELD_NAME (type, i) == NULL)
7206 continue;
7207 else if (ada_is_wrapper_field (type, i))
7208 {
0963b4bd 7209 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
7210 ada_index_struct_field_1 (index_p, arg,
7211 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7212 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7213
52ce6436
PH
7214 if (v != NULL)
7215 return v;
7216 }
7217
7218 else if (ada_is_variant_part (type, i))
7219 {
7220 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7221 find_struct_field. */
52ce6436
PH
7222 error (_("Cannot assign this kind of variant record"));
7223 }
7224 else if (*index_p == 0)
7225 return ada_value_primitive_field (arg, offset, i, type);
7226 else
7227 *index_p -= 1;
7228 }
7229 return NULL;
7230}
7231
4c4b4cd2
PH
7232/* Given ARG, a value of type (pointer or reference to a)*
7233 structure/union, extract the component named NAME from the ultimate
7234 target structure/union and return it as a value with its
f5938064 7235 appropriate type.
14f9c5c9 7236
4c4b4cd2
PH
7237 The routine searches for NAME among all members of the structure itself
7238 and (recursively) among all members of any wrapper members
14f9c5c9
AS
7239 (e.g., '_parent').
7240
03ee6b2e
PH
7241 If NO_ERR, then simply return NULL in case of error, rather than
7242 calling error. */
14f9c5c9 7243
d2e4a39e 7244struct value *
03ee6b2e 7245ada_value_struct_elt (struct value *arg, char *name, int no_err)
14f9c5c9 7246{
4c4b4cd2 7247 struct type *t, *t1;
d2e4a39e 7248 struct value *v;
14f9c5c9 7249
4c4b4cd2 7250 v = NULL;
df407dfe 7251 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
7252 if (TYPE_CODE (t) == TYPE_CODE_REF)
7253 {
7254 t1 = TYPE_TARGET_TYPE (t);
7255 if (t1 == NULL)
03ee6b2e 7256 goto BadValue;
61ee279c 7257 t1 = ada_check_typedef (t1);
4c4b4cd2 7258 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 7259 {
994b9211 7260 arg = coerce_ref (arg);
76a01679
JB
7261 t = t1;
7262 }
4c4b4cd2 7263 }
14f9c5c9 7264
4c4b4cd2
PH
7265 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7266 {
7267 t1 = TYPE_TARGET_TYPE (t);
7268 if (t1 == NULL)
03ee6b2e 7269 goto BadValue;
61ee279c 7270 t1 = ada_check_typedef (t1);
4c4b4cd2 7271 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
7272 {
7273 arg = value_ind (arg);
7274 t = t1;
7275 }
4c4b4cd2 7276 else
76a01679 7277 break;
4c4b4cd2 7278 }
14f9c5c9 7279
4c4b4cd2 7280 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 7281 goto BadValue;
14f9c5c9 7282
4c4b4cd2
PH
7283 if (t1 == t)
7284 v = ada_search_struct_field (name, arg, 0, t);
7285 else
7286 {
7287 int bit_offset, bit_size, byte_offset;
7288 struct type *field_type;
7289 CORE_ADDR address;
7290
76a01679 7291 if (TYPE_CODE (t) == TYPE_CODE_PTR)
b50d69b5 7292 address = value_address (ada_value_ind (arg));
4c4b4cd2 7293 else
b50d69b5 7294 address = value_address (ada_coerce_ref (arg));
14f9c5c9 7295
1ed6ede0 7296 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
76a01679
JB
7297 if (find_struct_field (name, t1, 0,
7298 &field_type, &byte_offset, &bit_offset,
52ce6436 7299 &bit_size, NULL))
76a01679
JB
7300 {
7301 if (bit_size != 0)
7302 {
714e53ab
PH
7303 if (TYPE_CODE (t) == TYPE_CODE_REF)
7304 arg = ada_coerce_ref (arg);
7305 else
7306 arg = ada_value_ind (arg);
76a01679
JB
7307 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7308 bit_offset, bit_size,
7309 field_type);
7310 }
7311 else
f5938064 7312 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
7313 }
7314 }
7315
03ee6b2e
PH
7316 if (v != NULL || no_err)
7317 return v;
7318 else
323e0a4a 7319 error (_("There is no member named %s."), name);
14f9c5c9 7320
03ee6b2e
PH
7321 BadValue:
7322 if (no_err)
7323 return NULL;
7324 else
0963b4bd
MS
7325 error (_("Attempt to extract a component of "
7326 "a value that is not a record."));
14f9c5c9
AS
7327}
7328
7329/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7330 If DISPP is non-null, add its byte displacement from the beginning of a
7331 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7332 work for packed fields).
7333
7334 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7335 followed by "___".
14f9c5c9 7336
0963b4bd 7337 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7338 be a (pointer or reference)+ to a struct or union, and the
7339 ultimate target type will be searched.
14f9c5c9
AS
7340
7341 Looks recursively into variant clauses and parent types.
7342
4c4b4cd2
PH
7343 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7344 TYPE is not a type of the right kind. */
14f9c5c9 7345
4c4b4cd2 7346static struct type *
76a01679
JB
7347ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7348 int noerr, int *dispp)
14f9c5c9
AS
7349{
7350 int i;
7351
7352 if (name == NULL)
7353 goto BadName;
7354
76a01679 7355 if (refok && type != NULL)
4c4b4cd2
PH
7356 while (1)
7357 {
61ee279c 7358 type = ada_check_typedef (type);
76a01679
JB
7359 if (TYPE_CODE (type) != TYPE_CODE_PTR
7360 && TYPE_CODE (type) != TYPE_CODE_REF)
7361 break;
7362 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7363 }
14f9c5c9 7364
76a01679 7365 if (type == NULL
1265e4aa
JB
7366 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7367 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 7368 {
4c4b4cd2 7369 if (noerr)
76a01679 7370 return NULL;
4c4b4cd2 7371 else
76a01679
JB
7372 {
7373 target_terminal_ours ();
7374 gdb_flush (gdb_stdout);
323e0a4a
AC
7375 if (type == NULL)
7376 error (_("Type (null) is not a structure or union type"));
7377 else
7378 {
7379 /* XXX: type_sprint */
7380 fprintf_unfiltered (gdb_stderr, _("Type "));
7381 type_print (type, "", gdb_stderr, -1);
7382 error (_(" is not a structure or union type"));
7383 }
76a01679 7384 }
14f9c5c9
AS
7385 }
7386
7387 type = to_static_fixed_type (type);
7388
7389 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7390 {
0d5cff50 7391 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7392 struct type *t;
7393 int disp;
d2e4a39e 7394
14f9c5c9 7395 if (t_field_name == NULL)
4c4b4cd2 7396 continue;
14f9c5c9
AS
7397
7398 else if (field_name_match (t_field_name, name))
4c4b4cd2
PH
7399 {
7400 if (dispp != NULL)
7401 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
460efde1 7402 return TYPE_FIELD_TYPE (type, i);
4c4b4cd2 7403 }
14f9c5c9
AS
7404
7405 else if (ada_is_wrapper_field (type, i))
4c4b4cd2
PH
7406 {
7407 disp = 0;
7408 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7409 0, 1, &disp);
7410 if (t != NULL)
7411 {
7412 if (dispp != NULL)
7413 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7414 return t;
7415 }
7416 }
14f9c5c9
AS
7417
7418 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7419 {
7420 int j;
5b4ee69b
MS
7421 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7422 i));
4c4b4cd2
PH
7423
7424 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7425 {
b1f33ddd
JB
7426 /* FIXME pnh 2008/01/26: We check for a field that is
7427 NOT wrapped in a struct, since the compiler sometimes
7428 generates these for unchecked variant types. Revisit
0963b4bd 7429 if the compiler changes this practice. */
0d5cff50 7430 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
4c4b4cd2 7431 disp = 0;
b1f33ddd
JB
7432 if (v_field_name != NULL
7433 && field_name_match (v_field_name, name))
460efde1 7434 t = TYPE_FIELD_TYPE (field_type, j);
b1f33ddd 7435 else
0963b4bd
MS
7436 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7437 j),
b1f33ddd
JB
7438 name, 0, 1, &disp);
7439
4c4b4cd2
PH
7440 if (t != NULL)
7441 {
7442 if (dispp != NULL)
7443 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7444 return t;
7445 }
7446 }
7447 }
14f9c5c9
AS
7448
7449 }
7450
7451BadName:
d2e4a39e 7452 if (!noerr)
14f9c5c9
AS
7453 {
7454 target_terminal_ours ();
7455 gdb_flush (gdb_stdout);
323e0a4a
AC
7456 if (name == NULL)
7457 {
7458 /* XXX: type_sprint */
7459 fprintf_unfiltered (gdb_stderr, _("Type "));
7460 type_print (type, "", gdb_stderr, -1);
7461 error (_(" has no component named <null>"));
7462 }
7463 else
7464 {
7465 /* XXX: type_sprint */
7466 fprintf_unfiltered (gdb_stderr, _("Type "));
7467 type_print (type, "", gdb_stderr, -1);
7468 error (_(" has no component named %s"), name);
7469 }
14f9c5c9
AS
7470 }
7471
7472 return NULL;
7473}
7474
b1f33ddd
JB
7475/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7476 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7477 represents an unchecked union (that is, the variant part of a
0963b4bd 7478 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7479
7480static int
7481is_unchecked_variant (struct type *var_type, struct type *outer_type)
7482{
7483 char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7484
b1f33ddd
JB
7485 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
7486 == NULL);
7487}
7488
7489
14f9c5c9
AS
7490/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7491 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
7492 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7493 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7494
d2e4a39e 7495int
ebf56fd3 7496ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 7497 const gdb_byte *outer_valaddr)
14f9c5c9
AS
7498{
7499 int others_clause;
7500 int i;
d2e4a39e 7501 char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
7502 struct value *outer;
7503 struct value *discrim;
14f9c5c9
AS
7504 LONGEST discrim_val;
7505
012370f6
TT
7506 /* Using plain value_from_contents_and_address here causes problems
7507 because we will end up trying to resolve a type that is currently
7508 being constructed. */
7509 outer = value_from_contents_and_address_unresolved (outer_type,
7510 outer_valaddr, 0);
0c281816
JB
7511 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7512 if (discrim == NULL)
14f9c5c9 7513 return -1;
0c281816 7514 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7515
7516 others_clause = -1;
7517 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7518 {
7519 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7520 others_clause = i;
14f9c5c9 7521 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7522 return i;
14f9c5c9
AS
7523 }
7524
7525 return others_clause;
7526}
d2e4a39e 7527\f
14f9c5c9
AS
7528
7529
4c4b4cd2 7530 /* Dynamic-Sized Records */
14f9c5c9
AS
7531
7532/* Strategy: The type ostensibly attached to a value with dynamic size
7533 (i.e., a size that is not statically recorded in the debugging
7534 data) does not accurately reflect the size or layout of the value.
7535 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7536 conventional types that are constructed on the fly. */
14f9c5c9
AS
7537
7538/* There is a subtle and tricky problem here. In general, we cannot
7539 determine the size of dynamic records without its data. However,
7540 the 'struct value' data structure, which GDB uses to represent
7541 quantities in the inferior process (the target), requires the size
7542 of the type at the time of its allocation in order to reserve space
7543 for GDB's internal copy of the data. That's why the
7544 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7545 rather than struct value*s.
14f9c5c9
AS
7546
7547 However, GDB's internal history variables ($1, $2, etc.) are
7548 struct value*s containing internal copies of the data that are not, in
7549 general, the same as the data at their corresponding addresses in
7550 the target. Fortunately, the types we give to these values are all
7551 conventional, fixed-size types (as per the strategy described
7552 above), so that we don't usually have to perform the
7553 'to_fixed_xxx_type' conversions to look at their values.
7554 Unfortunately, there is one exception: if one of the internal
7555 history variables is an array whose elements are unconstrained
7556 records, then we will need to create distinct fixed types for each
7557 element selected. */
7558
7559/* The upshot of all of this is that many routines take a (type, host
7560 address, target address) triple as arguments to represent a value.
7561 The host address, if non-null, is supposed to contain an internal
7562 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7563 target at the target address. */
14f9c5c9
AS
7564
7565/* Assuming that VAL0 represents a pointer value, the result of
7566 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7567 dynamic-sized types. */
14f9c5c9 7568
d2e4a39e
AS
7569struct value *
7570ada_value_ind (struct value *val0)
14f9c5c9 7571{
c48db5ca 7572 struct value *val = value_ind (val0);
5b4ee69b 7573
b50d69b5
JG
7574 if (ada_is_tagged_type (value_type (val), 0))
7575 val = ada_tag_value_at_base_address (val);
7576
4c4b4cd2 7577 return ada_to_fixed_value (val);
14f9c5c9
AS
7578}
7579
7580/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7581 qualifiers on VAL0. */
7582
d2e4a39e
AS
7583static struct value *
7584ada_coerce_ref (struct value *val0)
7585{
df407dfe 7586 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
7587 {
7588 struct value *val = val0;
5b4ee69b 7589
994b9211 7590 val = coerce_ref (val);
b50d69b5
JG
7591
7592 if (ada_is_tagged_type (value_type (val), 0))
7593 val = ada_tag_value_at_base_address (val);
7594
4c4b4cd2 7595 return ada_to_fixed_value (val);
d2e4a39e
AS
7596 }
7597 else
14f9c5c9
AS
7598 return val0;
7599}
7600
7601/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 7602 ALIGNMENT (a power of 2). */
14f9c5c9
AS
7603
7604static unsigned int
ebf56fd3 7605align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
7606{
7607 return (off + alignment - 1) & ~(alignment - 1);
7608}
7609
4c4b4cd2 7610/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7611
7612static unsigned int
ebf56fd3 7613field_alignment (struct type *type, int f)
14f9c5c9 7614{
d2e4a39e 7615 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7616 int len;
14f9c5c9
AS
7617 int align_offset;
7618
64a1bf19
JB
7619 /* The field name should never be null, unless the debugging information
7620 is somehow malformed. In this case, we assume the field does not
7621 require any alignment. */
7622 if (name == NULL)
7623 return 1;
7624
7625 len = strlen (name);
7626
4c4b4cd2
PH
7627 if (!isdigit (name[len - 1]))
7628 return 1;
14f9c5c9 7629
d2e4a39e 7630 if (isdigit (name[len - 2]))
14f9c5c9
AS
7631 align_offset = len - 2;
7632 else
7633 align_offset = len - 1;
7634
61012eef 7635 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7636 return TARGET_CHAR_BIT;
7637
4c4b4cd2
PH
7638 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7639}
7640
852dff6c 7641/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7642
852dff6c
JB
7643static struct symbol *
7644ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7645{
7646 struct symbol *sym;
7647
7648 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7649 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7650 return sym;
7651
4186eb54
KS
7652 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7653 return sym;
14f9c5c9
AS
7654}
7655
dddfab26
UW
7656/* Find a type named NAME. Ignores ambiguity. This routine will look
7657 solely for types defined by debug info, it will not search the GDB
7658 primitive types. */
4c4b4cd2 7659
852dff6c 7660static struct type *
ebf56fd3 7661ada_find_any_type (const char *name)
14f9c5c9 7662{
852dff6c 7663 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7664
14f9c5c9 7665 if (sym != NULL)
dddfab26 7666 return SYMBOL_TYPE (sym);
14f9c5c9 7667
dddfab26 7668 return NULL;
14f9c5c9
AS
7669}
7670
739593e0
JB
7671/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7672 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7673 symbol, in which case it is returned. Otherwise, this looks for
7674 symbols whose name is that of NAME_SYM suffixed with "___XR".
7675 Return symbol if found, and NULL otherwise. */
4c4b4cd2
PH
7676
7677struct symbol *
270140bd 7678ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
aeb5907d 7679{
739593e0 7680 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
aeb5907d
JB
7681 struct symbol *sym;
7682
739593e0
JB
7683 if (strstr (name, "___XR") != NULL)
7684 return name_sym;
7685
aeb5907d
JB
7686 sym = find_old_style_renaming_symbol (name, block);
7687
7688 if (sym != NULL)
7689 return sym;
7690
0963b4bd 7691 /* Not right yet. FIXME pnh 7/20/2007. */
852dff6c 7692 sym = ada_find_any_type_symbol (name);
aeb5907d
JB
7693 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7694 return sym;
7695 else
7696 return NULL;
7697}
7698
7699static struct symbol *
270140bd 7700find_old_style_renaming_symbol (const char *name, const struct block *block)
4c4b4cd2 7701{
7f0df278 7702 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
7703 char *rename;
7704
7705 if (function_sym != NULL)
7706 {
7707 /* If the symbol is defined inside a function, NAME is not fully
7708 qualified. This means we need to prepend the function name
7709 as well as adding the ``___XR'' suffix to build the name of
7710 the associated renaming symbol. */
0d5cff50 7711 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
7712 /* Function names sometimes contain suffixes used
7713 for instance to qualify nested subprograms. When building
7714 the XR type name, we need to make sure that this suffix is
7715 not included. So do not include any suffix in the function
7716 name length below. */
69fadcdf 7717 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
7718 const int rename_len = function_name_len + 2 /* "__" */
7719 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 7720
529cad9c 7721 /* Strip the suffix if necessary. */
69fadcdf
JB
7722 ada_remove_trailing_digits (function_name, &function_name_len);
7723 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7724 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 7725
4c4b4cd2
PH
7726 /* Library-level functions are a special case, as GNAT adds
7727 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 7728 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
7729 have this prefix, so we need to skip this prefix if present. */
7730 if (function_name_len > 5 /* "_ada_" */
7731 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
7732 {
7733 function_name += 5;
7734 function_name_len -= 5;
7735 }
4c4b4cd2
PH
7736
7737 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
7738 strncpy (rename, function_name, function_name_len);
7739 xsnprintf (rename + function_name_len, rename_len - function_name_len,
7740 "__%s___XR", name);
4c4b4cd2
PH
7741 }
7742 else
7743 {
7744 const int rename_len = strlen (name) + 6;
5b4ee69b 7745
4c4b4cd2 7746 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 7747 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
7748 }
7749
852dff6c 7750 return ada_find_any_type_symbol (rename);
4c4b4cd2
PH
7751}
7752
14f9c5c9 7753/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7754 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7755 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7756 otherwise return 0. */
7757
14f9c5c9 7758int
d2e4a39e 7759ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7760{
7761 if (type1 == NULL)
7762 return 1;
7763 else if (type0 == NULL)
7764 return 0;
7765 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7766 return 1;
7767 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7768 return 0;
4c4b4cd2
PH
7769 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7770 return 1;
ad82864c 7771 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7772 return 1;
4c4b4cd2
PH
7773 else if (ada_is_array_descriptor_type (type0)
7774 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7775 return 1;
aeb5907d
JB
7776 else
7777 {
7778 const char *type0_name = type_name_no_tag (type0);
7779 const char *type1_name = type_name_no_tag (type1);
7780
7781 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7782 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7783 return 1;
7784 }
14f9c5c9
AS
7785 return 0;
7786}
7787
7788/* The name of TYPE, which is either its TYPE_NAME, or, if that is
4c4b4cd2
PH
7789 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7790
0d5cff50 7791const char *
d2e4a39e 7792ada_type_name (struct type *type)
14f9c5c9 7793{
d2e4a39e 7794 if (type == NULL)
14f9c5c9
AS
7795 return NULL;
7796 else if (TYPE_NAME (type) != NULL)
7797 return TYPE_NAME (type);
7798 else
7799 return TYPE_TAG_NAME (type);
7800}
7801
b4ba55a1
JB
7802/* Search the list of "descriptive" types associated to TYPE for a type
7803 whose name is NAME. */
7804
7805static struct type *
7806find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7807{
931e5bc3 7808 struct type *result, *tmp;
b4ba55a1 7809
c6044dd1
JB
7810 if (ada_ignore_descriptive_types_p)
7811 return NULL;
7812
b4ba55a1
JB
7813 /* If there no descriptive-type info, then there is no parallel type
7814 to be found. */
7815 if (!HAVE_GNAT_AUX_INFO (type))
7816 return NULL;
7817
7818 result = TYPE_DESCRIPTIVE_TYPE (type);
7819 while (result != NULL)
7820 {
0d5cff50 7821 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7822
7823 if (result_name == NULL)
7824 {
7825 warning (_("unexpected null name on descriptive type"));
7826 return NULL;
7827 }
7828
7829 /* If the names match, stop. */
7830 if (strcmp (result_name, name) == 0)
7831 break;
7832
7833 /* Otherwise, look at the next item on the list, if any. */
7834 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
7835 tmp = TYPE_DESCRIPTIVE_TYPE (result);
7836 else
7837 tmp = NULL;
7838
7839 /* If not found either, try after having resolved the typedef. */
7840 if (tmp != NULL)
7841 result = tmp;
b4ba55a1 7842 else
931e5bc3
JG
7843 {
7844 CHECK_TYPEDEF (result);
7845 if (HAVE_GNAT_AUX_INFO (result))
7846 result = TYPE_DESCRIPTIVE_TYPE (result);
7847 else
7848 result = NULL;
7849 }
b4ba55a1
JB
7850 }
7851
7852 /* If we didn't find a match, see whether this is a packed array. With
7853 older compilers, the descriptive type information is either absent or
7854 irrelevant when it comes to packed arrays so the above lookup fails.
7855 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7856 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7857 return ada_find_any_type (name);
7858
7859 return result;
7860}
7861
7862/* Find a parallel type to TYPE with the specified NAME, using the
7863 descriptive type taken from the debugging information, if available,
7864 and otherwise using the (slower) name-based method. */
7865
7866static struct type *
7867ada_find_parallel_type_with_name (struct type *type, const char *name)
7868{
7869 struct type *result = NULL;
7870
7871 if (HAVE_GNAT_AUX_INFO (type))
7872 result = find_parallel_type_by_descriptive_type (type, name);
7873 else
7874 result = ada_find_any_type (name);
7875
7876 return result;
7877}
7878
7879/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7880 SUFFIX to the name of TYPE. */
14f9c5c9 7881
d2e4a39e 7882struct type *
ebf56fd3 7883ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7884{
0d5cff50 7885 char *name;
fe978cb0 7886 const char *type_name = ada_type_name (type);
14f9c5c9 7887 int len;
d2e4a39e 7888
fe978cb0 7889 if (type_name == NULL)
14f9c5c9
AS
7890 return NULL;
7891
fe978cb0 7892 len = strlen (type_name);
14f9c5c9 7893
b4ba55a1 7894 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 7895
fe978cb0 7896 strcpy (name, type_name);
14f9c5c9
AS
7897 strcpy (name + len, suffix);
7898
b4ba55a1 7899 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7900}
7901
14f9c5c9 7902/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7903 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7904
d2e4a39e
AS
7905static struct type *
7906dynamic_template_type (struct type *type)
14f9c5c9 7907{
61ee279c 7908 type = ada_check_typedef (type);
14f9c5c9
AS
7909
7910 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 7911 || ada_type_name (type) == NULL)
14f9c5c9 7912 return NULL;
d2e4a39e 7913 else
14f9c5c9
AS
7914 {
7915 int len = strlen (ada_type_name (type));
5b4ee69b 7916
4c4b4cd2
PH
7917 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7918 return type;
14f9c5c9 7919 else
4c4b4cd2 7920 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7921 }
7922}
7923
7924/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7925 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7926
d2e4a39e
AS
7927static int
7928is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7929{
7930 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7931
d2e4a39e 7932 return name != NULL
14f9c5c9
AS
7933 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7934 && strstr (name, "___XVL") != NULL;
7935}
7936
4c4b4cd2
PH
7937/* The index of the variant field of TYPE, or -1 if TYPE does not
7938 represent a variant record type. */
14f9c5c9 7939
d2e4a39e 7940static int
4c4b4cd2 7941variant_field_index (struct type *type)
14f9c5c9
AS
7942{
7943 int f;
7944
4c4b4cd2
PH
7945 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7946 return -1;
7947
7948 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7949 {
7950 if (ada_is_variant_part (type, f))
7951 return f;
7952 }
7953 return -1;
14f9c5c9
AS
7954}
7955
4c4b4cd2
PH
7956/* A record type with no fields. */
7957
d2e4a39e 7958static struct type *
fe978cb0 7959empty_record (struct type *templ)
14f9c5c9 7960{
fe978cb0 7961 struct type *type = alloc_type_copy (templ);
5b4ee69b 7962
14f9c5c9
AS
7963 TYPE_CODE (type) = TYPE_CODE_STRUCT;
7964 TYPE_NFIELDS (type) = 0;
7965 TYPE_FIELDS (type) = NULL;
b1f33ddd 7966 INIT_CPLUS_SPECIFIC (type);
14f9c5c9
AS
7967 TYPE_NAME (type) = "<empty>";
7968 TYPE_TAG_NAME (type) = NULL;
14f9c5c9
AS
7969 TYPE_LENGTH (type) = 0;
7970 return type;
7971}
7972
7973/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7974 the value of type TYPE at VALADDR or ADDRESS (see comments at
7975 the beginning of this section) VAL according to GNAT conventions.
7976 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7977 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7978 an outer-level type (i.e., as opposed to a branch of a variant.) A
7979 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7980 of the variant.
14f9c5c9 7981
4c4b4cd2
PH
7982 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7983 length are not statically known are discarded. As a consequence,
7984 VALADDR, ADDRESS and DVAL0 are ignored.
7985
7986 NOTE: Limitations: For now, we assume that dynamic fields and
7987 variants occupy whole numbers of bytes. However, they need not be
7988 byte-aligned. */
7989
7990struct type *
10a2c479 7991ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7992 const gdb_byte *valaddr,
4c4b4cd2
PH
7993 CORE_ADDR address, struct value *dval0,
7994 int keep_dynamic_fields)
14f9c5c9 7995{
d2e4a39e
AS
7996 struct value *mark = value_mark ();
7997 struct value *dval;
7998 struct type *rtype;
14f9c5c9 7999 int nfields, bit_len;
4c4b4cd2 8000 int variant_field;
14f9c5c9 8001 long off;
d94e4f4f 8002 int fld_bit_len;
14f9c5c9
AS
8003 int f;
8004
4c4b4cd2
PH
8005 /* Compute the number of fields in this record type that are going
8006 to be processed: unless keep_dynamic_fields, this includes only
8007 fields whose position and length are static will be processed. */
8008 if (keep_dynamic_fields)
8009 nfields = TYPE_NFIELDS (type);
8010 else
8011 {
8012 nfields = 0;
76a01679 8013 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
8014 && !ada_is_variant_part (type, nfields)
8015 && !is_dynamic_field (type, nfields))
8016 nfields++;
8017 }
8018
e9bb382b 8019 rtype = alloc_type_copy (type);
14f9c5c9
AS
8020 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8021 INIT_CPLUS_SPECIFIC (rtype);
8022 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 8023 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
8024 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8025 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
8026 TYPE_NAME (rtype) = ada_type_name (type);
8027 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 8028 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 8029
d2e4a39e
AS
8030 off = 0;
8031 bit_len = 0;
4c4b4cd2
PH
8032 variant_field = -1;
8033
14f9c5c9
AS
8034 for (f = 0; f < nfields; f += 1)
8035 {
6c038f32
PH
8036 off = align_value (off, field_alignment (type, f))
8037 + TYPE_FIELD_BITPOS (type, f);
945b3a32 8038 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
d2e4a39e 8039 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 8040
d2e4a39e 8041 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
8042 {
8043 variant_field = f;
d94e4f4f 8044 fld_bit_len = 0;
4c4b4cd2 8045 }
14f9c5c9 8046 else if (is_dynamic_field (type, f))
4c4b4cd2 8047 {
284614f0
JB
8048 const gdb_byte *field_valaddr = valaddr;
8049 CORE_ADDR field_address = address;
8050 struct type *field_type =
8051 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
8052
4c4b4cd2 8053 if (dval0 == NULL)
b5304971
JG
8054 {
8055 /* rtype's length is computed based on the run-time
8056 value of discriminants. If the discriminants are not
8057 initialized, the type size may be completely bogus and
0963b4bd 8058 GDB may fail to allocate a value for it. So check the
b5304971 8059 size first before creating the value. */
c1b5a1a6 8060 ada_ensure_varsize_limit (rtype);
012370f6
TT
8061 /* Using plain value_from_contents_and_address here
8062 causes problems because we will end up trying to
8063 resolve a type that is currently being
8064 constructed. */
8065 dval = value_from_contents_and_address_unresolved (rtype,
8066 valaddr,
8067 address);
9f1f738a 8068 rtype = value_type (dval);
b5304971 8069 }
4c4b4cd2
PH
8070 else
8071 dval = dval0;
8072
284614f0
JB
8073 /* If the type referenced by this field is an aligner type, we need
8074 to unwrap that aligner type, because its size might not be set.
8075 Keeping the aligner type would cause us to compute the wrong
8076 size for this field, impacting the offset of the all the fields
8077 that follow this one. */
8078 if (ada_is_aligner_type (field_type))
8079 {
8080 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8081
8082 field_valaddr = cond_offset_host (field_valaddr, field_offset);
8083 field_address = cond_offset_target (field_address, field_offset);
8084 field_type = ada_aligned_type (field_type);
8085 }
8086
8087 field_valaddr = cond_offset_host (field_valaddr,
8088 off / TARGET_CHAR_BIT);
8089 field_address = cond_offset_target (field_address,
8090 off / TARGET_CHAR_BIT);
8091
8092 /* Get the fixed type of the field. Note that, in this case,
8093 we do not want to get the real type out of the tag: if
8094 the current field is the parent part of a tagged record,
8095 we will get the tag of the object. Clearly wrong: the real
8096 type of the parent is not the real type of the child. We
8097 would end up in an infinite loop. */
8098 field_type = ada_get_base_type (field_type);
8099 field_type = ada_to_fixed_type (field_type, field_valaddr,
8100 field_address, dval, 0);
27f2a97b
JB
8101 /* If the field size is already larger than the maximum
8102 object size, then the record itself will necessarily
8103 be larger than the maximum object size. We need to make
8104 this check now, because the size might be so ridiculously
8105 large (due to an uninitialized variable in the inferior)
8106 that it would cause an overflow when adding it to the
8107 record size. */
c1b5a1a6 8108 ada_ensure_varsize_limit (field_type);
284614f0
JB
8109
8110 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 8111 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
8112 /* The multiplication can potentially overflow. But because
8113 the field length has been size-checked just above, and
8114 assuming that the maximum size is a reasonable value,
8115 an overflow should not happen in practice. So rather than
8116 adding overflow recovery code to this already complex code,
8117 we just assume that it's not going to happen. */
d94e4f4f 8118 fld_bit_len =
4c4b4cd2
PH
8119 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8120 }
14f9c5c9 8121 else
4c4b4cd2 8122 {
5ded5331
JB
8123 /* Note: If this field's type is a typedef, it is important
8124 to preserve the typedef layer.
8125
8126 Otherwise, we might be transforming a typedef to a fat
8127 pointer (encoding a pointer to an unconstrained array),
8128 into a basic fat pointer (encoding an unconstrained
8129 array). As both types are implemented using the same
8130 structure, the typedef is the only clue which allows us
8131 to distinguish between the two options. Stripping it
8132 would prevent us from printing this field appropriately. */
8133 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
8134 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8135 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 8136 fld_bit_len =
4c4b4cd2
PH
8137 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8138 else
5ded5331
JB
8139 {
8140 struct type *field_type = TYPE_FIELD_TYPE (type, f);
8141
8142 /* We need to be careful of typedefs when computing
8143 the length of our field. If this is a typedef,
8144 get the length of the target type, not the length
8145 of the typedef. */
8146 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8147 field_type = ada_typedef_target_type (field_type);
8148
8149 fld_bit_len =
8150 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8151 }
4c4b4cd2 8152 }
14f9c5c9 8153 if (off + fld_bit_len > bit_len)
4c4b4cd2 8154 bit_len = off + fld_bit_len;
d94e4f4f 8155 off += fld_bit_len;
4c4b4cd2
PH
8156 TYPE_LENGTH (rtype) =
8157 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 8158 }
4c4b4cd2
PH
8159
8160 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 8161 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
8162 the record. This can happen in the presence of representation
8163 clauses. */
8164 if (variant_field >= 0)
8165 {
8166 struct type *branch_type;
8167
8168 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8169
8170 if (dval0 == NULL)
9f1f738a 8171 {
012370f6
TT
8172 /* Using plain value_from_contents_and_address here causes
8173 problems because we will end up trying to resolve a type
8174 that is currently being constructed. */
8175 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8176 address);
9f1f738a
SA
8177 rtype = value_type (dval);
8178 }
4c4b4cd2
PH
8179 else
8180 dval = dval0;
8181
8182 branch_type =
8183 to_fixed_variant_branch_type
8184 (TYPE_FIELD_TYPE (type, variant_field),
8185 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8186 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8187 if (branch_type == NULL)
8188 {
8189 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8190 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8191 TYPE_NFIELDS (rtype) -= 1;
8192 }
8193 else
8194 {
8195 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8196 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8197 fld_bit_len =
8198 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8199 TARGET_CHAR_BIT;
8200 if (off + fld_bit_len > bit_len)
8201 bit_len = off + fld_bit_len;
8202 TYPE_LENGTH (rtype) =
8203 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8204 }
8205 }
8206
714e53ab
PH
8207 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8208 should contain the alignment of that record, which should be a strictly
8209 positive value. If null or negative, then something is wrong, most
8210 probably in the debug info. In that case, we don't round up the size
0963b4bd 8211 of the resulting type. If this record is not part of another structure,
714e53ab
PH
8212 the current RTYPE length might be good enough for our purposes. */
8213 if (TYPE_LENGTH (type) <= 0)
8214 {
323e0a4a
AC
8215 if (TYPE_NAME (rtype))
8216 warning (_("Invalid type size for `%s' detected: %d."),
8217 TYPE_NAME (rtype), TYPE_LENGTH (type));
8218 else
8219 warning (_("Invalid type size for <unnamed> detected: %d."),
8220 TYPE_LENGTH (type));
714e53ab
PH
8221 }
8222 else
8223 {
8224 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8225 TYPE_LENGTH (type));
8226 }
14f9c5c9
AS
8227
8228 value_free_to_mark (mark);
d2e4a39e 8229 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8230 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8231 return rtype;
8232}
8233
4c4b4cd2
PH
8234/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8235 of 1. */
14f9c5c9 8236
d2e4a39e 8237static struct type *
fc1a4b47 8238template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
8239 CORE_ADDR address, struct value *dval0)
8240{
8241 return ada_template_to_fixed_record_type_1 (type, valaddr,
8242 address, dval0, 1);
8243}
8244
8245/* An ordinary record type in which ___XVL-convention fields and
8246 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8247 static approximations, containing all possible fields. Uses
8248 no runtime values. Useless for use in values, but that's OK,
8249 since the results are used only for type determinations. Works on both
8250 structs and unions. Representation note: to save space, we memorize
8251 the result of this function in the TYPE_TARGET_TYPE of the
8252 template type. */
8253
8254static struct type *
8255template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8256{
8257 struct type *type;
8258 int nfields;
8259 int f;
8260
9e195661
PMR
8261 /* No need no do anything if the input type is already fixed. */
8262 if (TYPE_FIXED_INSTANCE (type0))
8263 return type0;
8264
8265 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8266 if (TYPE_TARGET_TYPE (type0) != NULL)
8267 return TYPE_TARGET_TYPE (type0);
8268
9e195661 8269 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8270 type = type0;
9e195661
PMR
8271 nfields = TYPE_NFIELDS (type0);
8272
8273 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8274 recompute all over next time. */
8275 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8276
8277 for (f = 0; f < nfields; f += 1)
8278 {
460efde1 8279 struct type *field_type = TYPE_FIELD_TYPE (type0, f);
4c4b4cd2 8280 struct type *new_type;
14f9c5c9 8281
4c4b4cd2 8282 if (is_dynamic_field (type0, f))
460efde1
JB
8283 {
8284 field_type = ada_check_typedef (field_type);
8285 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8286 }
14f9c5c9 8287 else
f192137b 8288 new_type = static_unwrap_type (field_type);
9e195661
PMR
8289
8290 if (new_type != field_type)
8291 {
8292 /* Clone TYPE0 only the first time we get a new field type. */
8293 if (type == type0)
8294 {
8295 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8296 TYPE_CODE (type) = TYPE_CODE (type0);
8297 INIT_CPLUS_SPECIFIC (type);
8298 TYPE_NFIELDS (type) = nfields;
8299 TYPE_FIELDS (type) = (struct field *)
8300 TYPE_ALLOC (type, nfields * sizeof (struct field));
8301 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8302 sizeof (struct field) * nfields);
8303 TYPE_NAME (type) = ada_type_name (type0);
8304 TYPE_TAG_NAME (type) = NULL;
8305 TYPE_FIXED_INSTANCE (type) = 1;
8306 TYPE_LENGTH (type) = 0;
8307 }
8308 TYPE_FIELD_TYPE (type, f) = new_type;
8309 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8310 }
14f9c5c9 8311 }
9e195661 8312
14f9c5c9
AS
8313 return type;
8314}
8315
4c4b4cd2 8316/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8317 whose address in memory is ADDRESS, returns a revision of TYPE,
8318 which should be a non-dynamic-sized record, in which the variant
8319 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8320 for discriminant values in DVAL0, which can be NULL if the record
8321 contains the necessary discriminant values. */
8322
d2e4a39e 8323static struct type *
fc1a4b47 8324to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 8325 CORE_ADDR address, struct value *dval0)
14f9c5c9 8326{
d2e4a39e 8327 struct value *mark = value_mark ();
4c4b4cd2 8328 struct value *dval;
d2e4a39e 8329 struct type *rtype;
14f9c5c9
AS
8330 struct type *branch_type;
8331 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 8332 int variant_field = variant_field_index (type);
14f9c5c9 8333
4c4b4cd2 8334 if (variant_field == -1)
14f9c5c9
AS
8335 return type;
8336
4c4b4cd2 8337 if (dval0 == NULL)
9f1f738a
SA
8338 {
8339 dval = value_from_contents_and_address (type, valaddr, address);
8340 type = value_type (dval);
8341 }
4c4b4cd2
PH
8342 else
8343 dval = dval0;
8344
e9bb382b 8345 rtype = alloc_type_copy (type);
14f9c5c9 8346 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
8347 INIT_CPLUS_SPECIFIC (rtype);
8348 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
8349 TYPE_FIELDS (rtype) =
8350 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8351 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 8352 sizeof (struct field) * nfields);
14f9c5c9
AS
8353 TYPE_NAME (rtype) = ada_type_name (type);
8354 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 8355 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
8356 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8357
4c4b4cd2
PH
8358 branch_type = to_fixed_variant_branch_type
8359 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 8360 cond_offset_host (valaddr,
4c4b4cd2
PH
8361 TYPE_FIELD_BITPOS (type, variant_field)
8362 / TARGET_CHAR_BIT),
d2e4a39e 8363 cond_offset_target (address,
4c4b4cd2
PH
8364 TYPE_FIELD_BITPOS (type, variant_field)
8365 / TARGET_CHAR_BIT), dval);
d2e4a39e 8366 if (branch_type == NULL)
14f9c5c9 8367 {
4c4b4cd2 8368 int f;
5b4ee69b 8369
4c4b4cd2
PH
8370 for (f = variant_field + 1; f < nfields; f += 1)
8371 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 8372 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
8373 }
8374 else
8375 {
4c4b4cd2
PH
8376 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8377 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8378 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8379 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8380 }
4c4b4cd2 8381 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 8382
4c4b4cd2 8383 value_free_to_mark (mark);
14f9c5c9
AS
8384 return rtype;
8385}
8386
8387/* An ordinary record type (with fixed-length fields) that describes
8388 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8389 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8390 should be in DVAL, a record value; it may be NULL if the object
8391 at ADDR itself contains any necessary discriminant values.
8392 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8393 values from the record are needed. Except in the case that DVAL,
8394 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8395 unchecked) is replaced by a particular branch of the variant.
8396
8397 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8398 is questionable and may be removed. It can arise during the
8399 processing of an unconstrained-array-of-record type where all the
8400 variant branches have exactly the same size. This is because in
8401 such cases, the compiler does not bother to use the XVS convention
8402 when encoding the record. I am currently dubious of this
8403 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8404
d2e4a39e 8405static struct type *
fc1a4b47 8406to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 8407 CORE_ADDR address, struct value *dval)
14f9c5c9 8408{
d2e4a39e 8409 struct type *templ_type;
14f9c5c9 8410
876cecd0 8411 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8412 return type0;
8413
d2e4a39e 8414 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8415
8416 if (templ_type != NULL)
8417 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8418 else if (variant_field_index (type0) >= 0)
8419 {
8420 if (dval == NULL && valaddr == NULL && address == 0)
8421 return type0;
8422 return to_record_with_fixed_variant_part (type0, valaddr, address,
8423 dval);
8424 }
14f9c5c9
AS
8425 else
8426 {
876cecd0 8427 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
8428 return type0;
8429 }
8430
8431}
8432
8433/* An ordinary record type (with fixed-length fields) that describes
8434 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8435 union type. Any necessary discriminants' values should be in DVAL,
8436 a record value. That is, this routine selects the appropriate
8437 branch of the union at ADDR according to the discriminant value
b1f33ddd 8438 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8439 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8440
d2e4a39e 8441static struct type *
fc1a4b47 8442to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8443 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8444{
8445 int which;
d2e4a39e
AS
8446 struct type *templ_type;
8447 struct type *var_type;
14f9c5c9
AS
8448
8449 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8450 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8451 else
14f9c5c9
AS
8452 var_type = var_type0;
8453
8454 templ_type = ada_find_parallel_type (var_type, "___XVU");
8455
8456 if (templ_type != NULL)
8457 var_type = templ_type;
8458
b1f33ddd
JB
8459 if (is_unchecked_variant (var_type, value_type (dval)))
8460 return var_type0;
d2e4a39e
AS
8461 which =
8462 ada_which_variant_applies (var_type,
0fd88904 8463 value_type (dval), value_contents (dval));
14f9c5c9
AS
8464
8465 if (which < 0)
e9bb382b 8466 return empty_record (var_type);
14f9c5c9 8467 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8468 return to_fixed_record_type
d2e4a39e
AS
8469 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8470 valaddr, address, dval);
4c4b4cd2 8471 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8472 return
8473 to_fixed_record_type
8474 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8475 else
8476 return TYPE_FIELD_TYPE (var_type, which);
8477}
8478
8908fca5
JB
8479/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8480 ENCODING_TYPE, a type following the GNAT conventions for discrete
8481 type encodings, only carries redundant information. */
8482
8483static int
8484ada_is_redundant_range_encoding (struct type *range_type,
8485 struct type *encoding_type)
8486{
8487 struct type *fixed_range_type;
8488 char *bounds_str;
8489 int n;
8490 LONGEST lo, hi;
8491
8492 gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8493
005e2509
JB
8494 if (TYPE_CODE (get_base_type (range_type))
8495 != TYPE_CODE (get_base_type (encoding_type)))
8496 {
8497 /* The compiler probably used a simple base type to describe
8498 the range type instead of the range's actual base type,
8499 expecting us to get the real base type from the encoding
8500 anyway. In this situation, the encoding cannot be ignored
8501 as redundant. */
8502 return 0;
8503 }
8504
8908fca5
JB
8505 if (is_dynamic_type (range_type))
8506 return 0;
8507
8508 if (TYPE_NAME (encoding_type) == NULL)
8509 return 0;
8510
8511 bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8512 if (bounds_str == NULL)
8513 return 0;
8514
8515 n = 8; /* Skip "___XDLU_". */
8516 if (!ada_scan_number (bounds_str, n, &lo, &n))
8517 return 0;
8518 if (TYPE_LOW_BOUND (range_type) != lo)
8519 return 0;
8520
8521 n += 2; /* Skip the "__" separator between the two bounds. */
8522 if (!ada_scan_number (bounds_str, n, &hi, &n))
8523 return 0;
8524 if (TYPE_HIGH_BOUND (range_type) != hi)
8525 return 0;
8526
8527 return 1;
8528}
8529
8530/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8531 a type following the GNAT encoding for describing array type
8532 indices, only carries redundant information. */
8533
8534static int
8535ada_is_redundant_index_type_desc (struct type *array_type,
8536 struct type *desc_type)
8537{
8538 struct type *this_layer = check_typedef (array_type);
8539 int i;
8540
8541 for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8542 {
8543 if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8544 TYPE_FIELD_TYPE (desc_type, i)))
8545 return 0;
8546 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8547 }
8548
8549 return 1;
8550}
8551
14f9c5c9
AS
8552/* Assuming that TYPE0 is an array type describing the type of a value
8553 at ADDR, and that DVAL describes a record containing any
8554 discriminants used in TYPE0, returns a type for the value that
8555 contains no dynamic components (that is, no components whose sizes
8556 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8557 true, gives an error message if the resulting type's size is over
4c4b4cd2 8558 varsize_limit. */
14f9c5c9 8559
d2e4a39e
AS
8560static struct type *
8561to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8562 int ignore_too_big)
14f9c5c9 8563{
d2e4a39e
AS
8564 struct type *index_type_desc;
8565 struct type *result;
ad82864c 8566 int constrained_packed_array_p;
931e5bc3 8567 static const char *xa_suffix = "___XA";
14f9c5c9 8568
b0dd7688 8569 type0 = ada_check_typedef (type0);
284614f0 8570 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8571 return type0;
14f9c5c9 8572
ad82864c
JB
8573 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8574 if (constrained_packed_array_p)
8575 type0 = decode_constrained_packed_array_type (type0);
284614f0 8576
931e5bc3
JG
8577 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8578
8579 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8580 encoding suffixed with 'P' may still be generated. If so,
8581 it should be used to find the XA type. */
8582
8583 if (index_type_desc == NULL)
8584 {
1da0522e 8585 const char *type_name = ada_type_name (type0);
931e5bc3 8586
1da0522e 8587 if (type_name != NULL)
931e5bc3 8588 {
1da0522e 8589 const int len = strlen (type_name);
931e5bc3
JG
8590 char *name = (char *) alloca (len + strlen (xa_suffix));
8591
1da0522e 8592 if (type_name[len - 1] == 'P')
931e5bc3 8593 {
1da0522e 8594 strcpy (name, type_name);
931e5bc3
JG
8595 strcpy (name + len - 1, xa_suffix);
8596 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8597 }
8598 }
8599 }
8600
28c85d6c 8601 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8602 if (index_type_desc != NULL
8603 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8604 {
8605 /* Ignore this ___XA parallel type, as it does not bring any
8606 useful information. This allows us to avoid creating fixed
8607 versions of the array's index types, which would be identical
8608 to the original ones. This, in turn, can also help avoid
8609 the creation of fixed versions of the array itself. */
8610 index_type_desc = NULL;
8611 }
8612
14f9c5c9
AS
8613 if (index_type_desc == NULL)
8614 {
61ee279c 8615 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8616
14f9c5c9 8617 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8618 depend on the contents of the array in properly constructed
8619 debugging data. */
529cad9c
PH
8620 /* Create a fixed version of the array element type.
8621 We're not providing the address of an element here,
e1d5a0d2 8622 and thus the actual object value cannot be inspected to do
529cad9c
PH
8623 the conversion. This should not be a problem, since arrays of
8624 unconstrained objects are not allowed. In particular, all
8625 the elements of an array of a tagged type should all be of
8626 the same type specified in the debugging info. No need to
8627 consult the object tag. */
1ed6ede0 8628 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8629
284614f0
JB
8630 /* Make sure we always create a new array type when dealing with
8631 packed array types, since we're going to fix-up the array
8632 type length and element bitsize a little further down. */
ad82864c 8633 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8634 result = type0;
14f9c5c9 8635 else
e9bb382b 8636 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8637 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8638 }
8639 else
8640 {
8641 int i;
8642 struct type *elt_type0;
8643
8644 elt_type0 = type0;
8645 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 8646 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8647
8648 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8649 depend on the contents of the array in properly constructed
8650 debugging data. */
529cad9c
PH
8651 /* Create a fixed version of the array element type.
8652 We're not providing the address of an element here,
e1d5a0d2 8653 and thus the actual object value cannot be inspected to do
529cad9c
PH
8654 the conversion. This should not be a problem, since arrays of
8655 unconstrained objects are not allowed. In particular, all
8656 the elements of an array of a tagged type should all be of
8657 the same type specified in the debugging info. No need to
8658 consult the object tag. */
1ed6ede0
JB
8659 result =
8660 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8661
8662 elt_type0 = type0;
14f9c5c9 8663 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
8664 {
8665 struct type *range_type =
28c85d6c 8666 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 8667
e9bb382b 8668 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 8669 result, range_type);
1ce677a4 8670 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 8671 }
d2e4a39e 8672 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 8673 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8674 }
8675
2e6fda7d
JB
8676 /* We want to preserve the type name. This can be useful when
8677 trying to get the type name of a value that has already been
8678 printed (for instance, if the user did "print VAR; whatis $". */
8679 TYPE_NAME (result) = TYPE_NAME (type0);
8680
ad82864c 8681 if (constrained_packed_array_p)
284614f0
JB
8682 {
8683 /* So far, the resulting type has been created as if the original
8684 type was a regular (non-packed) array type. As a result, the
8685 bitsize of the array elements needs to be set again, and the array
8686 length needs to be recomputed based on that bitsize. */
8687 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8688 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8689
8690 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8691 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8692 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8693 TYPE_LENGTH (result)++;
8694 }
8695
876cecd0 8696 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 8697 return result;
d2e4a39e 8698}
14f9c5c9
AS
8699
8700
8701/* A standard type (containing no dynamically sized components)
8702 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8703 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8704 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8705 ADDRESS or in VALADDR contains these discriminants.
8706
1ed6ede0
JB
8707 If CHECK_TAG is not null, in the case of tagged types, this function
8708 attempts to locate the object's tag and use it to compute the actual
8709 type. However, when ADDRESS is null, we cannot use it to determine the
8710 location of the tag, and therefore compute the tagged type's actual type.
8711 So we return the tagged type without consulting the tag. */
529cad9c 8712
f192137b
JB
8713static struct type *
8714ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 8715 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8716{
61ee279c 8717 type = ada_check_typedef (type);
d2e4a39e
AS
8718 switch (TYPE_CODE (type))
8719 {
8720 default:
14f9c5c9 8721 return type;
d2e4a39e 8722 case TYPE_CODE_STRUCT:
4c4b4cd2 8723 {
76a01679 8724 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
8725 struct type *fixed_record_type =
8726 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 8727
529cad9c
PH
8728 /* If STATIC_TYPE is a tagged type and we know the object's address,
8729 then we can determine its tag, and compute the object's actual
0963b4bd 8730 type from there. Note that we have to use the fixed record
1ed6ede0
JB
8731 type (the parent part of the record may have dynamic fields
8732 and the way the location of _tag is expressed may depend on
8733 them). */
529cad9c 8734
1ed6ede0 8735 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 8736 {
b50d69b5
JG
8737 struct value *tag =
8738 value_tag_from_contents_and_address
8739 (fixed_record_type,
8740 valaddr,
8741 address);
8742 struct type *real_type = type_from_tag (tag);
8743 struct value *obj =
8744 value_from_contents_and_address (fixed_record_type,
8745 valaddr,
8746 address);
9f1f738a 8747 fixed_record_type = value_type (obj);
76a01679 8748 if (real_type != NULL)
b50d69b5
JG
8749 return to_fixed_record_type
8750 (real_type, NULL,
8751 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 8752 }
4af88198
JB
8753
8754 /* Check to see if there is a parallel ___XVZ variable.
8755 If there is, then it provides the actual size of our type. */
8756 else if (ada_type_name (fixed_record_type) != NULL)
8757 {
0d5cff50 8758 const char *name = ada_type_name (fixed_record_type);
4af88198
JB
8759 char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8760 int xvz_found = 0;
8761 LONGEST size;
8762
88c15c34 8763 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
4af88198
JB
8764 size = get_int_var_value (xvz_name, &xvz_found);
8765 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8766 {
8767 fixed_record_type = copy_type (fixed_record_type);
8768 TYPE_LENGTH (fixed_record_type) = size;
8769
8770 /* The FIXED_RECORD_TYPE may have be a stub. We have
8771 observed this when the debugging info is STABS, and
8772 apparently it is something that is hard to fix.
8773
8774 In practice, we don't need the actual type definition
8775 at all, because the presence of the XVZ variable allows us
8776 to assume that there must be a XVS type as well, which we
8777 should be able to use later, when we need the actual type
8778 definition.
8779
8780 In the meantime, pretend that the "fixed" type we are
8781 returning is NOT a stub, because this can cause trouble
8782 when using this type to create new types targeting it.
8783 Indeed, the associated creation routines often check
8784 whether the target type is a stub and will try to replace
0963b4bd 8785 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
8786 might cause the new type to have the wrong size too.
8787 Consider the case of an array, for instance, where the size
8788 of the array is computed from the number of elements in
8789 our array multiplied by the size of its element. */
8790 TYPE_STUB (fixed_record_type) = 0;
8791 }
8792 }
1ed6ede0 8793 return fixed_record_type;
4c4b4cd2 8794 }
d2e4a39e 8795 case TYPE_CODE_ARRAY:
4c4b4cd2 8796 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8797 case TYPE_CODE_UNION:
8798 if (dval == NULL)
4c4b4cd2 8799 return type;
d2e4a39e 8800 else
4c4b4cd2 8801 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8802 }
14f9c5c9
AS
8803}
8804
f192137b
JB
8805/* The same as ada_to_fixed_type_1, except that it preserves the type
8806 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8807
8808 The typedef layer needs be preserved in order to differentiate between
8809 arrays and array pointers when both types are implemented using the same
8810 fat pointer. In the array pointer case, the pointer is encoded as
8811 a typedef of the pointer type. For instance, considering:
8812
8813 type String_Access is access String;
8814 S1 : String_Access := null;
8815
8816 To the debugger, S1 is defined as a typedef of type String. But
8817 to the user, it is a pointer. So if the user tries to print S1,
8818 we should not dereference the array, but print the array address
8819 instead.
8820
8821 If we didn't preserve the typedef layer, we would lose the fact that
8822 the type is to be presented as a pointer (needs de-reference before
8823 being printed). And we would also use the source-level type name. */
f192137b
JB
8824
8825struct type *
8826ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8827 CORE_ADDR address, struct value *dval, int check_tag)
8828
8829{
8830 struct type *fixed_type =
8831 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8832
96dbd2c1
JB
8833 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8834 then preserve the typedef layer.
8835
8836 Implementation note: We can only check the main-type portion of
8837 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8838 from TYPE now returns a type that has the same instance flags
8839 as TYPE. For instance, if TYPE is a "typedef const", and its
8840 target type is a "struct", then the typedef elimination will return
8841 a "const" version of the target type. See check_typedef for more
8842 details about how the typedef layer elimination is done.
8843
8844 brobecker/2010-11-19: It seems to me that the only case where it is
8845 useful to preserve the typedef layer is when dealing with fat pointers.
8846 Perhaps, we could add a check for that and preserve the typedef layer
8847 only in that situation. But this seems unecessary so far, probably
8848 because we call check_typedef/ada_check_typedef pretty much everywhere.
8849 */
f192137b 8850 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 8851 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8852 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8853 return type;
8854
8855 return fixed_type;
8856}
8857
14f9c5c9 8858/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8859 TYPE0, but based on no runtime data. */
14f9c5c9 8860
d2e4a39e
AS
8861static struct type *
8862to_static_fixed_type (struct type *type0)
14f9c5c9 8863{
d2e4a39e 8864 struct type *type;
14f9c5c9
AS
8865
8866 if (type0 == NULL)
8867 return NULL;
8868
876cecd0 8869 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8870 return type0;
8871
61ee279c 8872 type0 = ada_check_typedef (type0);
d2e4a39e 8873
14f9c5c9
AS
8874 switch (TYPE_CODE (type0))
8875 {
8876 default:
8877 return type0;
8878 case TYPE_CODE_STRUCT:
8879 type = dynamic_template_type (type0);
d2e4a39e 8880 if (type != NULL)
4c4b4cd2
PH
8881 return template_to_static_fixed_type (type);
8882 else
8883 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8884 case TYPE_CODE_UNION:
8885 type = ada_find_parallel_type (type0, "___XVU");
8886 if (type != NULL)
4c4b4cd2
PH
8887 return template_to_static_fixed_type (type);
8888 else
8889 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8890 }
8891}
8892
4c4b4cd2
PH
8893/* A static approximation of TYPE with all type wrappers removed. */
8894
d2e4a39e
AS
8895static struct type *
8896static_unwrap_type (struct type *type)
14f9c5c9
AS
8897{
8898 if (ada_is_aligner_type (type))
8899 {
61ee279c 8900 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 8901 if (ada_type_name (type1) == NULL)
4c4b4cd2 8902 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
8903
8904 return static_unwrap_type (type1);
8905 }
d2e4a39e 8906 else
14f9c5c9 8907 {
d2e4a39e 8908 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8909
d2e4a39e 8910 if (raw_real_type == type)
4c4b4cd2 8911 return type;
14f9c5c9 8912 else
4c4b4cd2 8913 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8914 }
8915}
8916
8917/* In some cases, incomplete and private types require
4c4b4cd2 8918 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8919 type Foo;
8920 type FooP is access Foo;
8921 V: FooP;
8922 type Foo is array ...;
4c4b4cd2 8923 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8924 cross-references to such types, we instead substitute for FooP a
8925 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8926 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8927
8928/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8929 exists, otherwise TYPE. */
8930
d2e4a39e 8931struct type *
61ee279c 8932ada_check_typedef (struct type *type)
14f9c5c9 8933{
727e3d2e
JB
8934 if (type == NULL)
8935 return NULL;
8936
720d1a40
JB
8937 /* If our type is a typedef type of a fat pointer, then we're done.
8938 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8939 what allows us to distinguish between fat pointers that represent
8940 array types, and fat pointers that represent array access types
8941 (in both cases, the compiler implements them as fat pointers). */
8942 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8943 && is_thick_pntr (ada_typedef_target_type (type)))
8944 return type;
8945
14f9c5c9
AS
8946 CHECK_TYPEDEF (type);
8947 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 8948 || !TYPE_STUB (type)
14f9c5c9
AS
8949 || TYPE_TAG_NAME (type) == NULL)
8950 return type;
d2e4a39e 8951 else
14f9c5c9 8952 {
0d5cff50 8953 const char *name = TYPE_TAG_NAME (type);
d2e4a39e 8954 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8955
05e522ef
JB
8956 if (type1 == NULL)
8957 return type;
8958
8959 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8960 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8961 types, only for the typedef-to-array types). If that's the case,
8962 strip the typedef layer. */
8963 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8964 type1 = ada_check_typedef (type1);
8965
8966 return type1;
14f9c5c9
AS
8967 }
8968}
8969
8970/* A value representing the data at VALADDR/ADDRESS as described by
8971 type TYPE0, but with a standard (static-sized) type that correctly
8972 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8973 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8974 creation of struct values]. */
14f9c5c9 8975
4c4b4cd2
PH
8976static struct value *
8977ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8978 struct value *val0)
14f9c5c9 8979{
1ed6ede0 8980 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8981
14f9c5c9
AS
8982 if (type == type0 && val0 != NULL)
8983 return val0;
d2e4a39e 8984 else
4c4b4cd2
PH
8985 return value_from_contents_and_address (type, 0, address);
8986}
8987
8988/* A value representing VAL, but with a standard (static-sized) type
8989 that correctly describes it. Does not necessarily create a new
8990 value. */
8991
0c3acc09 8992struct value *
4c4b4cd2
PH
8993ada_to_fixed_value (struct value *val)
8994{
c48db5ca
JB
8995 val = unwrap_value (val);
8996 val = ada_to_fixed_value_create (value_type (val),
8997 value_address (val),
8998 val);
8999 return val;
14f9c5c9 9000}
d2e4a39e 9001\f
14f9c5c9 9002
14f9c5c9
AS
9003/* Attributes */
9004
4c4b4cd2
PH
9005/* Table mapping attribute numbers to names.
9006 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 9007
d2e4a39e 9008static const char *attribute_names[] = {
14f9c5c9
AS
9009 "<?>",
9010
d2e4a39e 9011 "first",
14f9c5c9
AS
9012 "last",
9013 "length",
9014 "image",
14f9c5c9
AS
9015 "max",
9016 "min",
4c4b4cd2
PH
9017 "modulus",
9018 "pos",
9019 "size",
9020 "tag",
14f9c5c9 9021 "val",
14f9c5c9
AS
9022 0
9023};
9024
d2e4a39e 9025const char *
4c4b4cd2 9026ada_attribute_name (enum exp_opcode n)
14f9c5c9 9027{
4c4b4cd2
PH
9028 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
9029 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
9030 else
9031 return attribute_names[0];
9032}
9033
4c4b4cd2 9034/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 9035
4c4b4cd2
PH
9036static LONGEST
9037pos_atr (struct value *arg)
14f9c5c9 9038{
24209737
PH
9039 struct value *val = coerce_ref (arg);
9040 struct type *type = value_type (val);
aa715135 9041 LONGEST result;
14f9c5c9 9042
d2e4a39e 9043 if (!discrete_type_p (type))
323e0a4a 9044 error (_("'POS only defined on discrete types"));
14f9c5c9 9045
aa715135
JG
9046 if (!discrete_position (type, value_as_long (val), &result))
9047 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 9048
aa715135 9049 return result;
4c4b4cd2
PH
9050}
9051
9052static struct value *
3cb382c9 9053value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 9054{
3cb382c9 9055 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
9056}
9057
4c4b4cd2 9058/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 9059
d2e4a39e
AS
9060static struct value *
9061value_val_atr (struct type *type, struct value *arg)
14f9c5c9 9062{
d2e4a39e 9063 if (!discrete_type_p (type))
323e0a4a 9064 error (_("'VAL only defined on discrete types"));
df407dfe 9065 if (!integer_type_p (value_type (arg)))
323e0a4a 9066 error (_("'VAL requires integral argument"));
14f9c5c9
AS
9067
9068 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
9069 {
9070 long pos = value_as_long (arg);
5b4ee69b 9071
14f9c5c9 9072 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 9073 error (_("argument to 'VAL out of range"));
14e75d8e 9074 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
14f9c5c9
AS
9075 }
9076 else
9077 return value_from_longest (type, value_as_long (arg));
9078}
14f9c5c9 9079\f
d2e4a39e 9080
4c4b4cd2 9081 /* Evaluation */
14f9c5c9 9082
4c4b4cd2
PH
9083/* True if TYPE appears to be an Ada character type.
9084 [At the moment, this is true only for Character and Wide_Character;
9085 It is a heuristic test that could stand improvement]. */
14f9c5c9 9086
d2e4a39e
AS
9087int
9088ada_is_character_type (struct type *type)
14f9c5c9 9089{
7b9f71f2
JB
9090 const char *name;
9091
9092 /* If the type code says it's a character, then assume it really is,
9093 and don't check any further. */
9094 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
9095 return 1;
9096
9097 /* Otherwise, assume it's a character type iff it is a discrete type
9098 with a known character type name. */
9099 name = ada_type_name (type);
9100 return (name != NULL
9101 && (TYPE_CODE (type) == TYPE_CODE_INT
9102 || TYPE_CODE (type) == TYPE_CODE_RANGE)
9103 && (strcmp (name, "character") == 0
9104 || strcmp (name, "wide_character") == 0
5a517ebd 9105 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 9106 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
9107}
9108
4c4b4cd2 9109/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
9110
9111int
ebf56fd3 9112ada_is_string_type (struct type *type)
14f9c5c9 9113{
61ee279c 9114 type = ada_check_typedef (type);
d2e4a39e 9115 if (type != NULL
14f9c5c9 9116 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
9117 && (ada_is_simple_array_type (type)
9118 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
9119 && ada_array_arity (type) == 1)
9120 {
9121 struct type *elttype = ada_array_element_type (type, 1);
9122
9123 return ada_is_character_type (elttype);
9124 }
d2e4a39e 9125 else
14f9c5c9
AS
9126 return 0;
9127}
9128
5bf03f13
JB
9129/* The compiler sometimes provides a parallel XVS type for a given
9130 PAD type. Normally, it is safe to follow the PAD type directly,
9131 but older versions of the compiler have a bug that causes the offset
9132 of its "F" field to be wrong. Following that field in that case
9133 would lead to incorrect results, but this can be worked around
9134 by ignoring the PAD type and using the associated XVS type instead.
9135
9136 Set to True if the debugger should trust the contents of PAD types.
9137 Otherwise, ignore the PAD type if there is a parallel XVS type. */
9138static int trust_pad_over_xvs = 1;
14f9c5c9
AS
9139
9140/* True if TYPE is a struct type introduced by the compiler to force the
9141 alignment of a value. Such types have a single field with a
4c4b4cd2 9142 distinctive name. */
14f9c5c9
AS
9143
9144int
ebf56fd3 9145ada_is_aligner_type (struct type *type)
14f9c5c9 9146{
61ee279c 9147 type = ada_check_typedef (type);
714e53ab 9148
5bf03f13 9149 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
9150 return 0;
9151
14f9c5c9 9152 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
9153 && TYPE_NFIELDS (type) == 1
9154 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
9155}
9156
9157/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 9158 the parallel type. */
14f9c5c9 9159
d2e4a39e
AS
9160struct type *
9161ada_get_base_type (struct type *raw_type)
14f9c5c9 9162{
d2e4a39e
AS
9163 struct type *real_type_namer;
9164 struct type *raw_real_type;
14f9c5c9
AS
9165
9166 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9167 return raw_type;
9168
284614f0
JB
9169 if (ada_is_aligner_type (raw_type))
9170 /* The encoding specifies that we should always use the aligner type.
9171 So, even if this aligner type has an associated XVS type, we should
9172 simply ignore it.
9173
9174 According to the compiler gurus, an XVS type parallel to an aligner
9175 type may exist because of a stabs limitation. In stabs, aligner
9176 types are empty because the field has a variable-sized type, and
9177 thus cannot actually be used as an aligner type. As a result,
9178 we need the associated parallel XVS type to decode the type.
9179 Since the policy in the compiler is to not change the internal
9180 representation based on the debugging info format, we sometimes
9181 end up having a redundant XVS type parallel to the aligner type. */
9182 return raw_type;
9183
14f9c5c9 9184 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 9185 if (real_type_namer == NULL
14f9c5c9
AS
9186 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9187 || TYPE_NFIELDS (real_type_namer) != 1)
9188 return raw_type;
9189
f80d3ff2
JB
9190 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9191 {
9192 /* This is an older encoding form where the base type needs to be
9193 looked up by name. We prefer the newer enconding because it is
9194 more efficient. */
9195 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9196 if (raw_real_type == NULL)
9197 return raw_type;
9198 else
9199 return raw_real_type;
9200 }
9201
9202 /* The field in our XVS type is a reference to the base type. */
9203 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 9204}
14f9c5c9 9205
4c4b4cd2 9206/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 9207
d2e4a39e
AS
9208struct type *
9209ada_aligned_type (struct type *type)
14f9c5c9
AS
9210{
9211 if (ada_is_aligner_type (type))
9212 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9213 else
9214 return ada_get_base_type (type);
9215}
9216
9217
9218/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 9219 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9220
fc1a4b47
AC
9221const gdb_byte *
9222ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9223{
d2e4a39e 9224 if (ada_is_aligner_type (type))
14f9c5c9 9225 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
9226 valaddr +
9227 TYPE_FIELD_BITPOS (type,
9228 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9229 else
9230 return valaddr;
9231}
9232
4c4b4cd2
PH
9233
9234
14f9c5c9 9235/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9236 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9237const char *
9238ada_enum_name (const char *name)
14f9c5c9 9239{
4c4b4cd2
PH
9240 static char *result;
9241 static size_t result_len = 0;
d2e4a39e 9242 char *tmp;
14f9c5c9 9243
4c4b4cd2
PH
9244 /* First, unqualify the enumeration name:
9245 1. Search for the last '.' character. If we find one, then skip
177b42fe 9246 all the preceding characters, the unqualified name starts
76a01679 9247 right after that dot.
4c4b4cd2 9248 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9249 translates dots into "__". Search forward for double underscores,
9250 but stop searching when we hit an overloading suffix, which is
9251 of the form "__" followed by digits. */
4c4b4cd2 9252
c3e5cd34
PH
9253 tmp = strrchr (name, '.');
9254 if (tmp != NULL)
4c4b4cd2
PH
9255 name = tmp + 1;
9256 else
14f9c5c9 9257 {
4c4b4cd2
PH
9258 while ((tmp = strstr (name, "__")) != NULL)
9259 {
9260 if (isdigit (tmp[2]))
9261 break;
9262 else
9263 name = tmp + 2;
9264 }
14f9c5c9
AS
9265 }
9266
9267 if (name[0] == 'Q')
9268 {
14f9c5c9 9269 int v;
5b4ee69b 9270
14f9c5c9 9271 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
9272 {
9273 if (sscanf (name + 2, "%x", &v) != 1)
9274 return name;
9275 }
14f9c5c9 9276 else
4c4b4cd2 9277 return name;
14f9c5c9 9278
4c4b4cd2 9279 GROW_VECT (result, result_len, 16);
14f9c5c9 9280 if (isascii (v) && isprint (v))
88c15c34 9281 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 9282 else if (name[1] == 'U')
88c15c34 9283 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 9284 else
88c15c34 9285 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
9286
9287 return result;
9288 }
d2e4a39e 9289 else
4c4b4cd2 9290 {
c3e5cd34
PH
9291 tmp = strstr (name, "__");
9292 if (tmp == NULL)
9293 tmp = strstr (name, "$");
9294 if (tmp != NULL)
4c4b4cd2
PH
9295 {
9296 GROW_VECT (result, result_len, tmp - name + 1);
9297 strncpy (result, name, tmp - name);
9298 result[tmp - name] = '\0';
9299 return result;
9300 }
9301
9302 return name;
9303 }
14f9c5c9
AS
9304}
9305
14f9c5c9
AS
9306/* Evaluate the subexpression of EXP starting at *POS as for
9307 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9308 expression. */
14f9c5c9 9309
d2e4a39e
AS
9310static struct value *
9311evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9312{
4b27a620 9313 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9314}
9315
9316/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9317 value it wraps. */
14f9c5c9 9318
d2e4a39e
AS
9319static struct value *
9320unwrap_value (struct value *val)
14f9c5c9 9321{
df407dfe 9322 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9323
14f9c5c9
AS
9324 if (ada_is_aligner_type (type))
9325 {
de4d072f 9326 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9327 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9328
14f9c5c9 9329 if (ada_type_name (val_type) == NULL)
4c4b4cd2 9330 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
9331
9332 return unwrap_value (v);
9333 }
d2e4a39e 9334 else
14f9c5c9 9335 {
d2e4a39e 9336 struct type *raw_real_type =
61ee279c 9337 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9338
5bf03f13
JB
9339 /* If there is no parallel XVS or XVE type, then the value is
9340 already unwrapped. Return it without further modification. */
9341 if ((type == raw_real_type)
9342 && ada_find_parallel_type (type, "___XVE") == NULL)
9343 return val;
14f9c5c9 9344
d2e4a39e 9345 return
4c4b4cd2
PH
9346 coerce_unspec_val_to_type
9347 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 9348 value_address (val),
1ed6ede0 9349 NULL, 1));
14f9c5c9
AS
9350 }
9351}
d2e4a39e
AS
9352
9353static struct value *
9354cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9
AS
9355{
9356 LONGEST val;
9357
df407dfe 9358 if (type == value_type (arg))
14f9c5c9 9359 return arg;
df407dfe 9360 else if (ada_is_fixed_point_type (value_type (arg)))
d2e4a39e 9361 val = ada_float_to_fixed (type,
df407dfe 9362 ada_fixed_to_float (value_type (arg),
4c4b4cd2 9363 value_as_long (arg)));
d2e4a39e 9364 else
14f9c5c9 9365 {
a53b7a21 9366 DOUBLEST argd = value_as_double (arg);
5b4ee69b 9367
14f9c5c9
AS
9368 val = ada_float_to_fixed (type, argd);
9369 }
9370
9371 return value_from_longest (type, val);
9372}
9373
d2e4a39e 9374static struct value *
a53b7a21 9375cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 9376{
df407dfe 9377 DOUBLEST val = ada_fixed_to_float (value_type (arg),
4c4b4cd2 9378 value_as_long (arg));
5b4ee69b 9379
a53b7a21 9380 return value_from_double (type, val);
14f9c5c9
AS
9381}
9382
d99dcf51
JB
9383/* Given two array types T1 and T2, return nonzero iff both arrays
9384 contain the same number of elements. */
9385
9386static int
9387ada_same_array_size_p (struct type *t1, struct type *t2)
9388{
9389 LONGEST lo1, hi1, lo2, hi2;
9390
9391 /* Get the array bounds in order to verify that the size of
9392 the two arrays match. */
9393 if (!get_array_bounds (t1, &lo1, &hi1)
9394 || !get_array_bounds (t2, &lo2, &hi2))
9395 error (_("unable to determine array bounds"));
9396
9397 /* To make things easier for size comparison, normalize a bit
9398 the case of empty arrays by making sure that the difference
9399 between upper bound and lower bound is always -1. */
9400 if (lo1 > hi1)
9401 hi1 = lo1 - 1;
9402 if (lo2 > hi2)
9403 hi2 = lo2 - 1;
9404
9405 return (hi1 - lo1 == hi2 - lo2);
9406}
9407
9408/* Assuming that VAL is an array of integrals, and TYPE represents
9409 an array with the same number of elements, but with wider integral
9410 elements, return an array "casted" to TYPE. In practice, this
9411 means that the returned array is built by casting each element
9412 of the original array into TYPE's (wider) element type. */
9413
9414static struct value *
9415ada_promote_array_of_integrals (struct type *type, struct value *val)
9416{
9417 struct type *elt_type = TYPE_TARGET_TYPE (type);
9418 LONGEST lo, hi;
9419 struct value *res;
9420 LONGEST i;
9421
9422 /* Verify that both val and type are arrays of scalars, and
9423 that the size of val's elements is smaller than the size
9424 of type's element. */
9425 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9426 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9427 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9428 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9429 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9430 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9431
9432 if (!get_array_bounds (type, &lo, &hi))
9433 error (_("unable to determine array bounds"));
9434
9435 res = allocate_value (type);
9436
9437 /* Promote each array element. */
9438 for (i = 0; i < hi - lo + 1; i++)
9439 {
9440 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9441
9442 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9443 value_contents_all (elt), TYPE_LENGTH (elt_type));
9444 }
9445
9446 return res;
9447}
9448
4c4b4cd2
PH
9449/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9450 return the converted value. */
9451
d2e4a39e
AS
9452static struct value *
9453coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9454{
df407dfe 9455 struct type *type2 = value_type (val);
5b4ee69b 9456
14f9c5c9
AS
9457 if (type == type2)
9458 return val;
9459
61ee279c
PH
9460 type2 = ada_check_typedef (type2);
9461 type = ada_check_typedef (type);
14f9c5c9 9462
d2e4a39e
AS
9463 if (TYPE_CODE (type2) == TYPE_CODE_PTR
9464 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
9465 {
9466 val = ada_value_ind (val);
df407dfe 9467 type2 = value_type (val);
14f9c5c9
AS
9468 }
9469
d2e4a39e 9470 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
9471 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9472 {
d99dcf51
JB
9473 if (!ada_same_array_size_p (type, type2))
9474 error (_("cannot assign arrays of different length"));
9475
9476 if (is_integral_type (TYPE_TARGET_TYPE (type))
9477 && is_integral_type (TYPE_TARGET_TYPE (type2))
9478 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9479 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9480 {
9481 /* Allow implicit promotion of the array elements to
9482 a wider type. */
9483 return ada_promote_array_of_integrals (type, val);
9484 }
9485
9486 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9487 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 9488 error (_("Incompatible types in assignment"));
04624583 9489 deprecated_set_value_type (val, type);
14f9c5c9 9490 }
d2e4a39e 9491 return val;
14f9c5c9
AS
9492}
9493
4c4b4cd2
PH
9494static struct value *
9495ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9496{
9497 struct value *val;
9498 struct type *type1, *type2;
9499 LONGEST v, v1, v2;
9500
994b9211
AC
9501 arg1 = coerce_ref (arg1);
9502 arg2 = coerce_ref (arg2);
18af8284
JB
9503 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9504 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9505
76a01679
JB
9506 if (TYPE_CODE (type1) != TYPE_CODE_INT
9507 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
9508 return value_binop (arg1, arg2, op);
9509
76a01679 9510 switch (op)
4c4b4cd2
PH
9511 {
9512 case BINOP_MOD:
9513 case BINOP_DIV:
9514 case BINOP_REM:
9515 break;
9516 default:
9517 return value_binop (arg1, arg2, op);
9518 }
9519
9520 v2 = value_as_long (arg2);
9521 if (v2 == 0)
323e0a4a 9522 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
9523
9524 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9525 return value_binop (arg1, arg2, op);
9526
9527 v1 = value_as_long (arg1);
9528 switch (op)
9529 {
9530 case BINOP_DIV:
9531 v = v1 / v2;
76a01679
JB
9532 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9533 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9534 break;
9535 case BINOP_REM:
9536 v = v1 % v2;
76a01679
JB
9537 if (v * v1 < 0)
9538 v -= v2;
4c4b4cd2
PH
9539 break;
9540 default:
9541 /* Should not reach this point. */
9542 v = 0;
9543 }
9544
9545 val = allocate_value (type1);
990a07ab 9546 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
9547 TYPE_LENGTH (value_type (val)),
9548 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
9549 return val;
9550}
9551
9552static int
9553ada_value_equal (struct value *arg1, struct value *arg2)
9554{
df407dfe
AC
9555 if (ada_is_direct_array_type (value_type (arg1))
9556 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9557 {
f58b38bf
JB
9558 /* Automatically dereference any array reference before
9559 we attempt to perform the comparison. */
9560 arg1 = ada_coerce_ref (arg1);
9561 arg2 = ada_coerce_ref (arg2);
9562
4c4b4cd2
PH
9563 arg1 = ada_coerce_to_simple_array (arg1);
9564 arg2 = ada_coerce_to_simple_array (arg2);
df407dfe
AC
9565 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9566 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
323e0a4a 9567 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9568 /* FIXME: The following works only for types whose
76a01679
JB
9569 representations use all bits (no padding or undefined bits)
9570 and do not have user-defined equality. */
9571 return
df407dfe 9572 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
0fd88904 9573 && memcmp (value_contents (arg1), value_contents (arg2),
df407dfe 9574 TYPE_LENGTH (value_type (arg1))) == 0;
4c4b4cd2
PH
9575 }
9576 return value_equal (arg1, arg2);
9577}
9578
52ce6436
PH
9579/* Total number of component associations in the aggregate starting at
9580 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9581 OP_AGGREGATE. */
52ce6436
PH
9582
9583static int
9584num_component_specs (struct expression *exp, int pc)
9585{
9586 int n, m, i;
5b4ee69b 9587
52ce6436
PH
9588 m = exp->elts[pc + 1].longconst;
9589 pc += 3;
9590 n = 0;
9591 for (i = 0; i < m; i += 1)
9592 {
9593 switch (exp->elts[pc].opcode)
9594 {
9595 default:
9596 n += 1;
9597 break;
9598 case OP_CHOICES:
9599 n += exp->elts[pc + 1].longconst;
9600 break;
9601 }
9602 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9603 }
9604 return n;
9605}
9606
9607/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9608 component of LHS (a simple array or a record), updating *POS past
9609 the expression, assuming that LHS is contained in CONTAINER. Does
9610 not modify the inferior's memory, nor does it modify LHS (unless
9611 LHS == CONTAINER). */
9612
9613static void
9614assign_component (struct value *container, struct value *lhs, LONGEST index,
9615 struct expression *exp, int *pos)
9616{
9617 struct value *mark = value_mark ();
9618 struct value *elt;
5b4ee69b 9619
52ce6436
PH
9620 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9621 {
22601c15
UW
9622 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9623 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9624
52ce6436
PH
9625 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9626 }
9627 else
9628 {
9629 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9630 elt = ada_to_fixed_value (elt);
52ce6436
PH
9631 }
9632
9633 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9634 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9635 else
9636 value_assign_to_component (container, elt,
9637 ada_evaluate_subexp (NULL, exp, pos,
9638 EVAL_NORMAL));
9639
9640 value_free_to_mark (mark);
9641}
9642
9643/* Assuming that LHS represents an lvalue having a record or array
9644 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9645 of that aggregate's value to LHS, advancing *POS past the
9646 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9647 lvalue containing LHS (possibly LHS itself). Does not modify
9648 the inferior's memory, nor does it modify the contents of
0963b4bd 9649 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9650
9651static struct value *
9652assign_aggregate (struct value *container,
9653 struct value *lhs, struct expression *exp,
9654 int *pos, enum noside noside)
9655{
9656 struct type *lhs_type;
9657 int n = exp->elts[*pos+1].longconst;
9658 LONGEST low_index, high_index;
9659 int num_specs;
9660 LONGEST *indices;
9661 int max_indices, num_indices;
52ce6436 9662 int i;
52ce6436
PH
9663
9664 *pos += 3;
9665 if (noside != EVAL_NORMAL)
9666 {
52ce6436
PH
9667 for (i = 0; i < n; i += 1)
9668 ada_evaluate_subexp (NULL, exp, pos, noside);
9669 return container;
9670 }
9671
9672 container = ada_coerce_ref (container);
9673 if (ada_is_direct_array_type (value_type (container)))
9674 container = ada_coerce_to_simple_array (container);
9675 lhs = ada_coerce_ref (lhs);
9676 if (!deprecated_value_modifiable (lhs))
9677 error (_("Left operand of assignment is not a modifiable lvalue."));
9678
9679 lhs_type = value_type (lhs);
9680 if (ada_is_direct_array_type (lhs_type))
9681 {
9682 lhs = ada_coerce_to_simple_array (lhs);
9683 lhs_type = value_type (lhs);
9684 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9685 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436
PH
9686 }
9687 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9688 {
9689 low_index = 0;
9690 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9691 }
9692 else
9693 error (_("Left-hand side must be array or record."));
9694
9695 num_specs = num_component_specs (exp, *pos - 3);
9696 max_indices = 4 * num_specs + 4;
9697 indices = alloca (max_indices * sizeof (indices[0]));
9698 indices[0] = indices[1] = low_index - 1;
9699 indices[2] = indices[3] = high_index + 1;
9700 num_indices = 4;
9701
9702 for (i = 0; i < n; i += 1)
9703 {
9704 switch (exp->elts[*pos].opcode)
9705 {
1fbf5ada
JB
9706 case OP_CHOICES:
9707 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9708 &num_indices, max_indices,
9709 low_index, high_index);
9710 break;
9711 case OP_POSITIONAL:
9712 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
9713 &num_indices, max_indices,
9714 low_index, high_index);
1fbf5ada
JB
9715 break;
9716 case OP_OTHERS:
9717 if (i != n-1)
9718 error (_("Misplaced 'others' clause"));
9719 aggregate_assign_others (container, lhs, exp, pos, indices,
9720 num_indices, low_index, high_index);
9721 break;
9722 default:
9723 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9724 }
9725 }
9726
9727 return container;
9728}
9729
9730/* Assign into the component of LHS indexed by the OP_POSITIONAL
9731 construct at *POS, updating *POS past the construct, given that
9732 the positions are relative to lower bound LOW, where HIGH is the
9733 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
9734 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 9735 assign_aggregate. */
52ce6436
PH
9736static void
9737aggregate_assign_positional (struct value *container,
9738 struct value *lhs, struct expression *exp,
9739 int *pos, LONGEST *indices, int *num_indices,
9740 int max_indices, LONGEST low, LONGEST high)
9741{
9742 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9743
9744 if (ind - 1 == high)
e1d5a0d2 9745 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9746 if (ind <= high)
9747 {
9748 add_component_interval (ind, ind, indices, num_indices, max_indices);
9749 *pos += 3;
9750 assign_component (container, lhs, ind, exp, pos);
9751 }
9752 else
9753 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9754}
9755
9756/* Assign into the components of LHS indexed by the OP_CHOICES
9757 construct at *POS, updating *POS past the construct, given that
9758 the allowable indices are LOW..HIGH. Record the indices assigned
9759 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 9760 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9761static void
9762aggregate_assign_from_choices (struct value *container,
9763 struct value *lhs, struct expression *exp,
9764 int *pos, LONGEST *indices, int *num_indices,
9765 int max_indices, LONGEST low, LONGEST high)
9766{
9767 int j;
9768 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9769 int choice_pos, expr_pc;
9770 int is_array = ada_is_direct_array_type (value_type (lhs));
9771
9772 choice_pos = *pos += 3;
9773
9774 for (j = 0; j < n_choices; j += 1)
9775 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9776 expr_pc = *pos;
9777 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9778
9779 for (j = 0; j < n_choices; j += 1)
9780 {
9781 LONGEST lower, upper;
9782 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9783
52ce6436
PH
9784 if (op == OP_DISCRETE_RANGE)
9785 {
9786 choice_pos += 1;
9787 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9788 EVAL_NORMAL));
9789 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9790 EVAL_NORMAL));
9791 }
9792 else if (is_array)
9793 {
9794 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9795 EVAL_NORMAL));
9796 upper = lower;
9797 }
9798 else
9799 {
9800 int ind;
0d5cff50 9801 const char *name;
5b4ee69b 9802
52ce6436
PH
9803 switch (op)
9804 {
9805 case OP_NAME:
9806 name = &exp->elts[choice_pos + 2].string;
9807 break;
9808 case OP_VAR_VALUE:
9809 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9810 break;
9811 default:
9812 error (_("Invalid record component association."));
9813 }
9814 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9815 ind = 0;
9816 if (! find_struct_field (name, value_type (lhs), 0,
9817 NULL, NULL, NULL, NULL, &ind))
9818 error (_("Unknown component name: %s."), name);
9819 lower = upper = ind;
9820 }
9821
9822 if (lower <= upper && (lower < low || upper > high))
9823 error (_("Index in component association out of bounds."));
9824
9825 add_component_interval (lower, upper, indices, num_indices,
9826 max_indices);
9827 while (lower <= upper)
9828 {
9829 int pos1;
5b4ee69b 9830
52ce6436
PH
9831 pos1 = expr_pc;
9832 assign_component (container, lhs, lower, exp, &pos1);
9833 lower += 1;
9834 }
9835 }
9836}
9837
9838/* Assign the value of the expression in the OP_OTHERS construct in
9839 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9840 have not been previously assigned. The index intervals already assigned
9841 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 9842 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9843static void
9844aggregate_assign_others (struct value *container,
9845 struct value *lhs, struct expression *exp,
9846 int *pos, LONGEST *indices, int num_indices,
9847 LONGEST low, LONGEST high)
9848{
9849 int i;
5ce64950 9850 int expr_pc = *pos + 1;
52ce6436
PH
9851
9852 for (i = 0; i < num_indices - 2; i += 2)
9853 {
9854 LONGEST ind;
5b4ee69b 9855
52ce6436
PH
9856 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9857 {
5ce64950 9858 int localpos;
5b4ee69b 9859
5ce64950
MS
9860 localpos = expr_pc;
9861 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9862 }
9863 }
9864 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9865}
9866
9867/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9868 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9869 modifying *SIZE as needed. It is an error if *SIZE exceeds
9870 MAX_SIZE. The resulting intervals do not overlap. */
9871static void
9872add_component_interval (LONGEST low, LONGEST high,
9873 LONGEST* indices, int *size, int max_size)
9874{
9875 int i, j;
5b4ee69b 9876
52ce6436
PH
9877 for (i = 0; i < *size; i += 2) {
9878 if (high >= indices[i] && low <= indices[i + 1])
9879 {
9880 int kh;
5b4ee69b 9881
52ce6436
PH
9882 for (kh = i + 2; kh < *size; kh += 2)
9883 if (high < indices[kh])
9884 break;
9885 if (low < indices[i])
9886 indices[i] = low;
9887 indices[i + 1] = indices[kh - 1];
9888 if (high > indices[i + 1])
9889 indices[i + 1] = high;
9890 memcpy (indices + i + 2, indices + kh, *size - kh);
9891 *size -= kh - i - 2;
9892 return;
9893 }
9894 else if (high < indices[i])
9895 break;
9896 }
9897
9898 if (*size == max_size)
9899 error (_("Internal error: miscounted aggregate components."));
9900 *size += 2;
9901 for (j = *size-1; j >= i+2; j -= 1)
9902 indices[j] = indices[j - 2];
9903 indices[i] = low;
9904 indices[i + 1] = high;
9905}
9906
6e48bd2c
JB
9907/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9908 is different. */
9909
9910static struct value *
9911ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9912{
9913 if (type == ada_check_typedef (value_type (arg2)))
9914 return arg2;
9915
9916 if (ada_is_fixed_point_type (type))
9917 return (cast_to_fixed (type, arg2));
9918
9919 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 9920 return cast_from_fixed (type, arg2);
6e48bd2c
JB
9921
9922 return value_cast (type, arg2);
9923}
9924
284614f0
JB
9925/* Evaluating Ada expressions, and printing their result.
9926 ------------------------------------------------------
9927
21649b50
JB
9928 1. Introduction:
9929 ----------------
9930
284614f0
JB
9931 We usually evaluate an Ada expression in order to print its value.
9932 We also evaluate an expression in order to print its type, which
9933 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9934 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9935 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9936 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9937 similar.
9938
9939 Evaluating expressions is a little more complicated for Ada entities
9940 than it is for entities in languages such as C. The main reason for
9941 this is that Ada provides types whose definition might be dynamic.
9942 One example of such types is variant records. Or another example
9943 would be an array whose bounds can only be known at run time.
9944
9945 The following description is a general guide as to what should be
9946 done (and what should NOT be done) in order to evaluate an expression
9947 involving such types, and when. This does not cover how the semantic
9948 information is encoded by GNAT as this is covered separatly. For the
9949 document used as the reference for the GNAT encoding, see exp_dbug.ads
9950 in the GNAT sources.
9951
9952 Ideally, we should embed each part of this description next to its
9953 associated code. Unfortunately, the amount of code is so vast right
9954 now that it's hard to see whether the code handling a particular
9955 situation might be duplicated or not. One day, when the code is
9956 cleaned up, this guide might become redundant with the comments
9957 inserted in the code, and we might want to remove it.
9958
21649b50
JB
9959 2. ``Fixing'' an Entity, the Simple Case:
9960 -----------------------------------------
9961
284614f0
JB
9962 When evaluating Ada expressions, the tricky issue is that they may
9963 reference entities whose type contents and size are not statically
9964 known. Consider for instance a variant record:
9965
9966 type Rec (Empty : Boolean := True) is record
9967 case Empty is
9968 when True => null;
9969 when False => Value : Integer;
9970 end case;
9971 end record;
9972 Yes : Rec := (Empty => False, Value => 1);
9973 No : Rec := (empty => True);
9974
9975 The size and contents of that record depends on the value of the
9976 descriminant (Rec.Empty). At this point, neither the debugging
9977 information nor the associated type structure in GDB are able to
9978 express such dynamic types. So what the debugger does is to create
9979 "fixed" versions of the type that applies to the specific object.
9980 We also informally refer to this opperation as "fixing" an object,
9981 which means creating its associated fixed type.
9982
9983 Example: when printing the value of variable "Yes" above, its fixed
9984 type would look like this:
9985
9986 type Rec is record
9987 Empty : Boolean;
9988 Value : Integer;
9989 end record;
9990
9991 On the other hand, if we printed the value of "No", its fixed type
9992 would become:
9993
9994 type Rec is record
9995 Empty : Boolean;
9996 end record;
9997
9998 Things become a little more complicated when trying to fix an entity
9999 with a dynamic type that directly contains another dynamic type,
10000 such as an array of variant records, for instance. There are
10001 two possible cases: Arrays, and records.
10002
21649b50
JB
10003 3. ``Fixing'' Arrays:
10004 ---------------------
10005
10006 The type structure in GDB describes an array in terms of its bounds,
10007 and the type of its elements. By design, all elements in the array
10008 have the same type and we cannot represent an array of variant elements
10009 using the current type structure in GDB. When fixing an array,
10010 we cannot fix the array element, as we would potentially need one
10011 fixed type per element of the array. As a result, the best we can do
10012 when fixing an array is to produce an array whose bounds and size
10013 are correct (allowing us to read it from memory), but without having
10014 touched its element type. Fixing each element will be done later,
10015 when (if) necessary.
10016
10017 Arrays are a little simpler to handle than records, because the same
10018 amount of memory is allocated for each element of the array, even if
1b536f04 10019 the amount of space actually used by each element differs from element
21649b50 10020 to element. Consider for instance the following array of type Rec:
284614f0
JB
10021
10022 type Rec_Array is array (1 .. 2) of Rec;
10023
1b536f04
JB
10024 The actual amount of memory occupied by each element might be different
10025 from element to element, depending on the value of their discriminant.
21649b50 10026 But the amount of space reserved for each element in the array remains
1b536f04 10027 fixed regardless. So we simply need to compute that size using
21649b50
JB
10028 the debugging information available, from which we can then determine
10029 the array size (we multiply the number of elements of the array by
10030 the size of each element).
10031
10032 The simplest case is when we have an array of a constrained element
10033 type. For instance, consider the following type declarations:
10034
10035 type Bounded_String (Max_Size : Integer) is
10036 Length : Integer;
10037 Buffer : String (1 .. Max_Size);
10038 end record;
10039 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
10040
10041 In this case, the compiler describes the array as an array of
10042 variable-size elements (identified by its XVS suffix) for which
10043 the size can be read in the parallel XVZ variable.
10044
10045 In the case of an array of an unconstrained element type, the compiler
10046 wraps the array element inside a private PAD type. This type should not
10047 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
10048 that we also use the adjective "aligner" in our code to designate
10049 these wrapper types.
10050
1b536f04 10051 In some cases, the size allocated for each element is statically
21649b50
JB
10052 known. In that case, the PAD type already has the correct size,
10053 and the array element should remain unfixed.
10054
10055 But there are cases when this size is not statically known.
10056 For instance, assuming that "Five" is an integer variable:
284614f0
JB
10057
10058 type Dynamic is array (1 .. Five) of Integer;
10059 type Wrapper (Has_Length : Boolean := False) is record
10060 Data : Dynamic;
10061 case Has_Length is
10062 when True => Length : Integer;
10063 when False => null;
10064 end case;
10065 end record;
10066 type Wrapper_Array is array (1 .. 2) of Wrapper;
10067
10068 Hello : Wrapper_Array := (others => (Has_Length => True,
10069 Data => (others => 17),
10070 Length => 1));
10071
10072
10073 The debugging info would describe variable Hello as being an
10074 array of a PAD type. The size of that PAD type is not statically
10075 known, but can be determined using a parallel XVZ variable.
10076 In that case, a copy of the PAD type with the correct size should
10077 be used for the fixed array.
10078
21649b50
JB
10079 3. ``Fixing'' record type objects:
10080 ----------------------------------
10081
10082 Things are slightly different from arrays in the case of dynamic
284614f0
JB
10083 record types. In this case, in order to compute the associated
10084 fixed type, we need to determine the size and offset of each of
10085 its components. This, in turn, requires us to compute the fixed
10086 type of each of these components.
10087
10088 Consider for instance the example:
10089
10090 type Bounded_String (Max_Size : Natural) is record
10091 Str : String (1 .. Max_Size);
10092 Length : Natural;
10093 end record;
10094 My_String : Bounded_String (Max_Size => 10);
10095
10096 In that case, the position of field "Length" depends on the size
10097 of field Str, which itself depends on the value of the Max_Size
21649b50 10098 discriminant. In order to fix the type of variable My_String,
284614f0
JB
10099 we need to fix the type of field Str. Therefore, fixing a variant
10100 record requires us to fix each of its components.
10101
10102 However, if a component does not have a dynamic size, the component
10103 should not be fixed. In particular, fields that use a PAD type
10104 should not fixed. Here is an example where this might happen
10105 (assuming type Rec above):
10106
10107 type Container (Big : Boolean) is record
10108 First : Rec;
10109 After : Integer;
10110 case Big is
10111 when True => Another : Integer;
10112 when False => null;
10113 end case;
10114 end record;
10115 My_Container : Container := (Big => False,
10116 First => (Empty => True),
10117 After => 42);
10118
10119 In that example, the compiler creates a PAD type for component First,
10120 whose size is constant, and then positions the component After just
10121 right after it. The offset of component After is therefore constant
10122 in this case.
10123
10124 The debugger computes the position of each field based on an algorithm
10125 that uses, among other things, the actual position and size of the field
21649b50
JB
10126 preceding it. Let's now imagine that the user is trying to print
10127 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
10128 end up computing the offset of field After based on the size of the
10129 fixed version of field First. And since in our example First has
10130 only one actual field, the size of the fixed type is actually smaller
10131 than the amount of space allocated to that field, and thus we would
10132 compute the wrong offset of field After.
10133
21649b50
JB
10134 To make things more complicated, we need to watch out for dynamic
10135 components of variant records (identified by the ___XVL suffix in
10136 the component name). Even if the target type is a PAD type, the size
10137 of that type might not be statically known. So the PAD type needs
10138 to be unwrapped and the resulting type needs to be fixed. Otherwise,
10139 we might end up with the wrong size for our component. This can be
10140 observed with the following type declarations:
284614f0
JB
10141
10142 type Octal is new Integer range 0 .. 7;
10143 type Octal_Array is array (Positive range <>) of Octal;
10144 pragma Pack (Octal_Array);
10145
10146 type Octal_Buffer (Size : Positive) is record
10147 Buffer : Octal_Array (1 .. Size);
10148 Length : Integer;
10149 end record;
10150
10151 In that case, Buffer is a PAD type whose size is unset and needs
10152 to be computed by fixing the unwrapped type.
10153
21649b50
JB
10154 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10155 ----------------------------------------------------------
10156
10157 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
10158 thus far, be actually fixed?
10159
10160 The answer is: Only when referencing that element. For instance
10161 when selecting one component of a record, this specific component
10162 should be fixed at that point in time. Or when printing the value
10163 of a record, each component should be fixed before its value gets
10164 printed. Similarly for arrays, the element of the array should be
10165 fixed when printing each element of the array, or when extracting
10166 one element out of that array. On the other hand, fixing should
10167 not be performed on the elements when taking a slice of an array!
10168
10169 Note that one of the side-effects of miscomputing the offset and
10170 size of each field is that we end up also miscomputing the size
10171 of the containing type. This can have adverse results when computing
10172 the value of an entity. GDB fetches the value of an entity based
10173 on the size of its type, and thus a wrong size causes GDB to fetch
10174 the wrong amount of memory. In the case where the computed size is
10175 too small, GDB fetches too little data to print the value of our
10176 entiry. Results in this case as unpredicatble, as we usually read
10177 past the buffer containing the data =:-o. */
10178
10179/* Implement the evaluate_exp routine in the exp_descriptor structure
10180 for the Ada language. */
10181
52ce6436 10182static struct value *
ebf56fd3 10183ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 10184 int *pos, enum noside noside)
14f9c5c9
AS
10185{
10186 enum exp_opcode op;
b5385fc0 10187 int tem;
14f9c5c9 10188 int pc;
5ec18f2b 10189 int preeval_pos;
14f9c5c9
AS
10190 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10191 struct type *type;
52ce6436 10192 int nargs, oplen;
d2e4a39e 10193 struct value **argvec;
14f9c5c9 10194
d2e4a39e
AS
10195 pc = *pos;
10196 *pos += 1;
14f9c5c9
AS
10197 op = exp->elts[pc].opcode;
10198
d2e4a39e 10199 switch (op)
14f9c5c9
AS
10200 {
10201 default:
10202 *pos -= 1;
6e48bd2c 10203 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10204
10205 if (noside == EVAL_NORMAL)
10206 arg1 = unwrap_value (arg1);
6e48bd2c
JB
10207
10208 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10209 then we need to perform the conversion manually, because
10210 evaluate_subexp_standard doesn't do it. This conversion is
10211 necessary in Ada because the different kinds of float/fixed
10212 types in Ada have different representations.
10213
10214 Similarly, we need to perform the conversion from OP_LONG
10215 ourselves. */
10216 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10217 arg1 = ada_value_cast (expect_type, arg1, noside);
10218
10219 return arg1;
4c4b4cd2
PH
10220
10221 case OP_STRING:
10222 {
76a01679 10223 struct value *result;
5b4ee69b 10224
76a01679
JB
10225 *pos -= 1;
10226 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10227 /* The result type will have code OP_STRING, bashed there from
10228 OP_ARRAY. Bash it back. */
df407dfe
AC
10229 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10230 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 10231 return result;
4c4b4cd2 10232 }
14f9c5c9
AS
10233
10234 case UNOP_CAST:
10235 (*pos) += 2;
10236 type = exp->elts[pc + 1].type;
10237 arg1 = evaluate_subexp (type, exp, pos, noside);
10238 if (noside == EVAL_SKIP)
4c4b4cd2 10239 goto nosideret;
6e48bd2c 10240 arg1 = ada_value_cast (type, arg1, noside);
14f9c5c9
AS
10241 return arg1;
10242
4c4b4cd2
PH
10243 case UNOP_QUAL:
10244 (*pos) += 2;
10245 type = exp->elts[pc + 1].type;
10246 return ada_evaluate_subexp (type, exp, pos, noside);
10247
14f9c5c9
AS
10248 case BINOP_ASSIGN:
10249 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
10250 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10251 {
10252 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10253 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10254 return arg1;
10255 return ada_value_assign (arg1, arg1);
10256 }
003f3813
JB
10257 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10258 except if the lhs of our assignment is a convenience variable.
10259 In the case of assigning to a convenience variable, the lhs
10260 should be exactly the result of the evaluation of the rhs. */
10261 type = value_type (arg1);
10262 if (VALUE_LVAL (arg1) == lval_internalvar)
10263 type = NULL;
10264 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10265 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10266 return arg1;
df407dfe
AC
10267 if (ada_is_fixed_point_type (value_type (arg1)))
10268 arg2 = cast_to_fixed (value_type (arg1), arg2);
10269 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 10270 error
323e0a4a 10271 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 10272 else
df407dfe 10273 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10274 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10275
10276 case BINOP_ADD:
10277 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10278 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10279 if (noside == EVAL_SKIP)
4c4b4cd2 10280 goto nosideret;
2ac8a782
JB
10281 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10282 return (value_from_longest
10283 (value_type (arg1),
10284 value_as_long (arg1) + value_as_long (arg2)));
c40cc657
JB
10285 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10286 return (value_from_longest
10287 (value_type (arg2),
10288 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
10289 if ((ada_is_fixed_point_type (value_type (arg1))
10290 || ada_is_fixed_point_type (value_type (arg2)))
10291 && value_type (arg1) != value_type (arg2))
323e0a4a 10292 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
10293 /* Do the addition, and cast the result to the type of the first
10294 argument. We cannot cast the result to a reference type, so if
10295 ARG1 is a reference type, find its underlying type. */
10296 type = value_type (arg1);
10297 while (TYPE_CODE (type) == TYPE_CODE_REF)
10298 type = TYPE_TARGET_TYPE (type);
f44316fa 10299 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10300 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
10301
10302 case BINOP_SUB:
10303 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10304 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10305 if (noside == EVAL_SKIP)
4c4b4cd2 10306 goto nosideret;
2ac8a782
JB
10307 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10308 return (value_from_longest
10309 (value_type (arg1),
10310 value_as_long (arg1) - value_as_long (arg2)));
c40cc657
JB
10311 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10312 return (value_from_longest
10313 (value_type (arg2),
10314 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
10315 if ((ada_is_fixed_point_type (value_type (arg1))
10316 || ada_is_fixed_point_type (value_type (arg2)))
10317 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
10318 error (_("Operands of fixed-point subtraction "
10319 "must have the same type"));
b7789565
JB
10320 /* Do the substraction, and cast the result to the type of the first
10321 argument. We cannot cast the result to a reference type, so if
10322 ARG1 is a reference type, find its underlying type. */
10323 type = value_type (arg1);
10324 while (TYPE_CODE (type) == TYPE_CODE_REF)
10325 type = TYPE_TARGET_TYPE (type);
f44316fa 10326 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10327 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
10328
10329 case BINOP_MUL:
10330 case BINOP_DIV:
e1578042
JB
10331 case BINOP_REM:
10332 case BINOP_MOD:
14f9c5c9
AS
10333 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10334 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10335 if (noside == EVAL_SKIP)
4c4b4cd2 10336 goto nosideret;
e1578042 10337 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
10338 {
10339 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10340 return value_zero (value_type (arg1), not_lval);
10341 }
14f9c5c9 10342 else
4c4b4cd2 10343 {
a53b7a21 10344 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 10345 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 10346 arg1 = cast_from_fixed (type, arg1);
df407dfe 10347 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10348 arg2 = cast_from_fixed (type, arg2);
f44316fa 10349 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
10350 return ada_value_binop (arg1, arg2, op);
10351 }
10352
4c4b4cd2
PH
10353 case BINOP_EQUAL:
10354 case BINOP_NOTEQUAL:
14f9c5c9 10355 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 10356 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10357 if (noside == EVAL_SKIP)
76a01679 10358 goto nosideret;
4c4b4cd2 10359 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10360 tem = 0;
4c4b4cd2 10361 else
f44316fa
UW
10362 {
10363 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10364 tem = ada_value_equal (arg1, arg2);
10365 }
4c4b4cd2 10366 if (op == BINOP_NOTEQUAL)
76a01679 10367 tem = !tem;
fbb06eb1
UW
10368 type = language_bool_type (exp->language_defn, exp->gdbarch);
10369 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
10370
10371 case UNOP_NEG:
10372 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10373 if (noside == EVAL_SKIP)
10374 goto nosideret;
df407dfe
AC
10375 else if (ada_is_fixed_point_type (value_type (arg1)))
10376 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 10377 else
f44316fa
UW
10378 {
10379 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10380 return value_neg (arg1);
10381 }
4c4b4cd2 10382
2330c6c6
JB
10383 case BINOP_LOGICAL_AND:
10384 case BINOP_LOGICAL_OR:
10385 case UNOP_LOGICAL_NOT:
000d5124
JB
10386 {
10387 struct value *val;
10388
10389 *pos -= 1;
10390 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
10391 type = language_bool_type (exp->language_defn, exp->gdbarch);
10392 return value_cast (type, val);
000d5124 10393 }
2330c6c6
JB
10394
10395 case BINOP_BITWISE_AND:
10396 case BINOP_BITWISE_IOR:
10397 case BINOP_BITWISE_XOR:
000d5124
JB
10398 {
10399 struct value *val;
10400
10401 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10402 *pos = pc;
10403 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10404
10405 return value_cast (value_type (arg1), val);
10406 }
2330c6c6 10407
14f9c5c9
AS
10408 case OP_VAR_VALUE:
10409 *pos -= 1;
6799def4 10410
14f9c5c9 10411 if (noside == EVAL_SKIP)
4c4b4cd2
PH
10412 {
10413 *pos += 4;
10414 goto nosideret;
10415 }
da5c522f
JB
10416
10417 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
10418 /* Only encountered when an unresolved symbol occurs in a
10419 context other than a function call, in which case, it is
52ce6436 10420 invalid. */
323e0a4a 10421 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 10422 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
da5c522f
JB
10423
10424 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10425 {
0c1f74cf 10426 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
10427 /* Check to see if this is a tagged type. We also need to handle
10428 the case where the type is a reference to a tagged type, but
10429 we have to be careful to exclude pointers to tagged types.
10430 The latter should be shown as usual (as a pointer), whereas
10431 a reference should mostly be transparent to the user. */
10432 if (ada_is_tagged_type (type, 0)
023db19c 10433 || (TYPE_CODE (type) == TYPE_CODE_REF
31dbc1c5 10434 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10435 {
10436 /* Tagged types are a little special in the fact that the real
10437 type is dynamic and can only be determined by inspecting the
10438 object's tag. This means that we need to get the object's
10439 value first (EVAL_NORMAL) and then extract the actual object
10440 type from its tag.
10441
10442 Note that we cannot skip the final step where we extract
10443 the object type from its tag, because the EVAL_NORMAL phase
10444 results in dynamic components being resolved into fixed ones.
10445 This can cause problems when trying to print the type
10446 description of tagged types whose parent has a dynamic size:
10447 We use the type name of the "_parent" component in order
10448 to print the name of the ancestor type in the type description.
10449 If that component had a dynamic size, the resolution into
10450 a fixed type would result in the loss of that type name,
10451 thus preventing us from printing the name of the ancestor
10452 type in the type description. */
10453 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10454
10455 if (TYPE_CODE (type) != TYPE_CODE_REF)
10456 {
10457 struct type *actual_type;
10458
10459 actual_type = type_from_tag (ada_value_tag (arg1));
10460 if (actual_type == NULL)
10461 /* If, for some reason, we were unable to determine
10462 the actual type from the tag, then use the static
10463 approximation that we just computed as a fallback.
10464 This can happen if the debugging information is
10465 incomplete, for instance. */
10466 actual_type = type;
10467 return value_zero (actual_type, not_lval);
10468 }
10469 else
10470 {
10471 /* In the case of a ref, ada_coerce_ref takes care
10472 of determining the actual type. But the evaluation
10473 should return a ref as it should be valid to ask
10474 for its address; so rebuild a ref after coerce. */
10475 arg1 = ada_coerce_ref (arg1);
10476 return value_ref (arg1);
10477 }
10478 }
0c1f74cf 10479
84754697
JB
10480 /* Records and unions for which GNAT encodings have been
10481 generated need to be statically fixed as well.
10482 Otherwise, non-static fixing produces a type where
10483 all dynamic properties are removed, which prevents "ptype"
10484 from being able to completely describe the type.
10485 For instance, a case statement in a variant record would be
10486 replaced by the relevant components based on the actual
10487 value of the discriminants. */
10488 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10489 && dynamic_template_type (type) != NULL)
10490 || (TYPE_CODE (type) == TYPE_CODE_UNION
10491 && ada_find_parallel_type (type, "___XVU") != NULL))
10492 {
10493 *pos += 4;
10494 return value_zero (to_static_fixed_type (type), not_lval);
10495 }
4c4b4cd2 10496 }
da5c522f
JB
10497
10498 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10499 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10500
10501 case OP_FUNCALL:
10502 (*pos) += 2;
10503
10504 /* Allocate arg vector, including space for the function to be
10505 called in argvec[0] and a terminating NULL. */
10506 nargs = longest_to_int (exp->elts[pc + 1].longconst);
10507 argvec =
10508 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10509
10510 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 10511 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 10512 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
10513 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10514 else
10515 {
10516 for (tem = 0; tem <= nargs; tem += 1)
10517 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10518 argvec[tem] = 0;
10519
10520 if (noside == EVAL_SKIP)
10521 goto nosideret;
10522 }
10523
ad82864c
JB
10524 if (ada_is_constrained_packed_array_type
10525 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 10526 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
10527 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10528 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10529 /* This is a packed array that has already been fixed, and
10530 therefore already coerced to a simple array. Nothing further
10531 to do. */
10532 ;
df407dfe
AC
10533 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10534 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
76a01679 10535 && VALUE_LVAL (argvec[0]) == lval_memory))
4c4b4cd2
PH
10536 argvec[0] = value_addr (argvec[0]);
10537
df407dfe 10538 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10539
10540 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10541 them. So, if this is an array typedef (encoding use for array
10542 access types encoded as fat pointers), strip it now. */
720d1a40
JB
10543 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10544 type = ada_typedef_target_type (type);
10545
4c4b4cd2
PH
10546 if (TYPE_CODE (type) == TYPE_CODE_PTR)
10547 {
61ee279c 10548 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
10549 {
10550 case TYPE_CODE_FUNC:
61ee279c 10551 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10552 break;
10553 case TYPE_CODE_ARRAY:
10554 break;
10555 case TYPE_CODE_STRUCT:
10556 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10557 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10558 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10559 break;
10560 default:
323e0a4a 10561 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10562 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10563 break;
10564 }
10565 }
10566
10567 switch (TYPE_CODE (type))
10568 {
10569 case TYPE_CODE_FUNC:
10570 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972
PH
10571 {
10572 struct type *rtype = TYPE_TARGET_TYPE (type);
10573
10574 if (TYPE_GNU_IFUNC (type))
10575 return allocate_value (TYPE_TARGET_TYPE (rtype));
10576 return allocate_value (rtype);
10577 }
4c4b4cd2 10578 return call_function_by_hand (argvec[0], nargs, argvec + 1);
c8ea1972
PH
10579 case TYPE_CODE_INTERNAL_FUNCTION:
10580 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10581 /* We don't know anything about what the internal
10582 function might return, but we have to return
10583 something. */
10584 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10585 not_lval);
10586 else
10587 return call_internal_function (exp->gdbarch, exp->language_defn,
10588 argvec[0], nargs, argvec + 1);
10589
4c4b4cd2
PH
10590 case TYPE_CODE_STRUCT:
10591 {
10592 int arity;
10593
4c4b4cd2
PH
10594 arity = ada_array_arity (type);
10595 type = ada_array_element_type (type, nargs);
10596 if (type == NULL)
323e0a4a 10597 error (_("cannot subscript or call a record"));
4c4b4cd2 10598 if (arity != nargs)
323e0a4a 10599 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 10600 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 10601 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10602 return
10603 unwrap_value (ada_value_subscript
10604 (argvec[0], nargs, argvec + 1));
10605 }
10606 case TYPE_CODE_ARRAY:
10607 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10608 {
10609 type = ada_array_element_type (type, nargs);
10610 if (type == NULL)
323e0a4a 10611 error (_("element type of array unknown"));
4c4b4cd2 10612 else
0a07e705 10613 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10614 }
10615 return
10616 unwrap_value (ada_value_subscript
10617 (ada_coerce_to_simple_array (argvec[0]),
10618 nargs, argvec + 1));
10619 case TYPE_CODE_PTR: /* Pointer to array */
4c4b4cd2
PH
10620 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10621 {
deede10c 10622 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
4c4b4cd2
PH
10623 type = ada_array_element_type (type, nargs);
10624 if (type == NULL)
323e0a4a 10625 error (_("element type of array unknown"));
4c4b4cd2 10626 else
0a07e705 10627 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10628 }
10629 return
deede10c
JB
10630 unwrap_value (ada_value_ptr_subscript (argvec[0],
10631 nargs, argvec + 1));
4c4b4cd2
PH
10632
10633 default:
e1d5a0d2
PH
10634 error (_("Attempt to index or call something other than an "
10635 "array or function"));
4c4b4cd2
PH
10636 }
10637
10638 case TERNOP_SLICE:
10639 {
10640 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10641 struct value *low_bound_val =
10642 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
10643 struct value *high_bound_val =
10644 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10645 LONGEST low_bound;
10646 LONGEST high_bound;
5b4ee69b 10647
994b9211
AC
10648 low_bound_val = coerce_ref (low_bound_val);
10649 high_bound_val = coerce_ref (high_bound_val);
aa715135
JG
10650 low_bound = value_as_long (low_bound_val);
10651 high_bound = value_as_long (high_bound_val);
963a6417 10652
4c4b4cd2
PH
10653 if (noside == EVAL_SKIP)
10654 goto nosideret;
10655
4c4b4cd2
PH
10656 /* If this is a reference to an aligner type, then remove all
10657 the aligners. */
df407dfe
AC
10658 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10659 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10660 TYPE_TARGET_TYPE (value_type (array)) =
10661 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 10662
ad82864c 10663 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 10664 error (_("cannot slice a packed array"));
4c4b4cd2
PH
10665
10666 /* If this is a reference to an array or an array lvalue,
10667 convert to a pointer. */
df407dfe
AC
10668 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10669 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
10670 && VALUE_LVAL (array) == lval_memory))
10671 array = value_addr (array);
10672
1265e4aa 10673 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 10674 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 10675 (value_type (array))))
0b5d8877 10676 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
10677
10678 array = ada_coerce_to_simple_array_ptr (array);
10679
714e53ab
PH
10680 /* If we have more than one level of pointer indirection,
10681 dereference the value until we get only one level. */
df407dfe
AC
10682 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10683 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
10684 == TYPE_CODE_PTR))
10685 array = value_ind (array);
10686
10687 /* Make sure we really do have an array type before going further,
10688 to avoid a SEGV when trying to get the index type or the target
10689 type later down the road if the debug info generated by
10690 the compiler is incorrect or incomplete. */
df407dfe 10691 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 10692 error (_("cannot take slice of non-array"));
714e53ab 10693
828292f2
JB
10694 if (TYPE_CODE (ada_check_typedef (value_type (array)))
10695 == TYPE_CODE_PTR)
4c4b4cd2 10696 {
828292f2
JB
10697 struct type *type0 = ada_check_typedef (value_type (array));
10698
0b5d8877 10699 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
828292f2 10700 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
4c4b4cd2
PH
10701 else
10702 {
10703 struct type *arr_type0 =
828292f2 10704 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 10705
f5938064
JG
10706 return ada_value_slice_from_ptr (array, arr_type0,
10707 longest_to_int (low_bound),
10708 longest_to_int (high_bound));
4c4b4cd2
PH
10709 }
10710 }
10711 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10712 return array;
10713 else if (high_bound < low_bound)
df407dfe 10714 return empty_array (value_type (array), low_bound);
4c4b4cd2 10715 else
529cad9c
PH
10716 return ada_value_slice (array, longest_to_int (low_bound),
10717 longest_to_int (high_bound));
4c4b4cd2 10718 }
14f9c5c9 10719
4c4b4cd2
PH
10720 case UNOP_IN_RANGE:
10721 (*pos) += 2;
10722 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 10723 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 10724
14f9c5c9 10725 if (noside == EVAL_SKIP)
4c4b4cd2 10726 goto nosideret;
14f9c5c9 10727
4c4b4cd2
PH
10728 switch (TYPE_CODE (type))
10729 {
10730 default:
e1d5a0d2
PH
10731 lim_warning (_("Membership test incompletely implemented; "
10732 "always returns true"));
fbb06eb1
UW
10733 type = language_bool_type (exp->language_defn, exp->gdbarch);
10734 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
10735
10736 case TYPE_CODE_RANGE:
030b4912
UW
10737 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10738 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
10739 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10740 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
10741 type = language_bool_type (exp->language_defn, exp->gdbarch);
10742 return
10743 value_from_longest (type,
4c4b4cd2
PH
10744 (value_less (arg1, arg3)
10745 || value_equal (arg1, arg3))
10746 && (value_less (arg2, arg1)
10747 || value_equal (arg2, arg1)));
10748 }
10749
10750 case BINOP_IN_BOUNDS:
14f9c5c9 10751 (*pos) += 2;
4c4b4cd2
PH
10752 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10753 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10754
4c4b4cd2
PH
10755 if (noside == EVAL_SKIP)
10756 goto nosideret;
14f9c5c9 10757
4c4b4cd2 10758 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
10759 {
10760 type = language_bool_type (exp->language_defn, exp->gdbarch);
10761 return value_zero (type, not_lval);
10762 }
14f9c5c9 10763
4c4b4cd2 10764 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10765
1eea4ebd
UW
10766 type = ada_index_type (value_type (arg2), tem, "range");
10767 if (!type)
10768 type = value_type (arg1);
14f9c5c9 10769
1eea4ebd
UW
10770 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10771 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 10772
f44316fa
UW
10773 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10774 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10775 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10776 return
fbb06eb1 10777 value_from_longest (type,
4c4b4cd2
PH
10778 (value_less (arg1, arg3)
10779 || value_equal (arg1, arg3))
10780 && (value_less (arg2, arg1)
10781 || value_equal (arg2, arg1)));
10782
10783 case TERNOP_IN_RANGE:
10784 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10785 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10786 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10787
10788 if (noside == EVAL_SKIP)
10789 goto nosideret;
10790
f44316fa
UW
10791 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10792 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10793 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10794 return
fbb06eb1 10795 value_from_longest (type,
4c4b4cd2
PH
10796 (value_less (arg1, arg3)
10797 || value_equal (arg1, arg3))
10798 && (value_less (arg2, arg1)
10799 || value_equal (arg2, arg1)));
10800
10801 case OP_ATR_FIRST:
10802 case OP_ATR_LAST:
10803 case OP_ATR_LENGTH:
10804 {
76a01679 10805 struct type *type_arg;
5b4ee69b 10806
76a01679
JB
10807 if (exp->elts[*pos].opcode == OP_TYPE)
10808 {
10809 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10810 arg1 = NULL;
5bc23cb3 10811 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
10812 }
10813 else
10814 {
10815 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10816 type_arg = NULL;
10817 }
10818
10819 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 10820 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
10821 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10822 *pos += 4;
10823
10824 if (noside == EVAL_SKIP)
10825 goto nosideret;
10826
10827 if (type_arg == NULL)
10828 {
10829 arg1 = ada_coerce_ref (arg1);
10830
ad82864c 10831 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
10832 arg1 = ada_coerce_to_simple_array (arg1);
10833
aa4fb036 10834 if (op == OP_ATR_LENGTH)
1eea4ebd 10835 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
10836 else
10837 {
10838 type = ada_index_type (value_type (arg1), tem,
10839 ada_attribute_name (op));
10840 if (type == NULL)
10841 type = builtin_type (exp->gdbarch)->builtin_int;
10842 }
76a01679
JB
10843
10844 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 10845 return allocate_value (type);
76a01679
JB
10846
10847 switch (op)
10848 {
10849 default: /* Should never happen. */
323e0a4a 10850 error (_("unexpected attribute encountered"));
76a01679 10851 case OP_ATR_FIRST:
1eea4ebd
UW
10852 return value_from_longest
10853 (type, ada_array_bound (arg1, tem, 0));
76a01679 10854 case OP_ATR_LAST:
1eea4ebd
UW
10855 return value_from_longest
10856 (type, ada_array_bound (arg1, tem, 1));
76a01679 10857 case OP_ATR_LENGTH:
1eea4ebd
UW
10858 return value_from_longest
10859 (type, ada_array_length (arg1, tem));
76a01679
JB
10860 }
10861 }
10862 else if (discrete_type_p (type_arg))
10863 {
10864 struct type *range_type;
0d5cff50 10865 const char *name = ada_type_name (type_arg);
5b4ee69b 10866
76a01679
JB
10867 range_type = NULL;
10868 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 10869 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
10870 if (range_type == NULL)
10871 range_type = type_arg;
10872 switch (op)
10873 {
10874 default:
323e0a4a 10875 error (_("unexpected attribute encountered"));
76a01679 10876 case OP_ATR_FIRST:
690cc4eb 10877 return value_from_longest
43bbcdc2 10878 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 10879 case OP_ATR_LAST:
690cc4eb 10880 return value_from_longest
43bbcdc2 10881 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 10882 case OP_ATR_LENGTH:
323e0a4a 10883 error (_("the 'length attribute applies only to array types"));
76a01679
JB
10884 }
10885 }
10886 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 10887 error (_("unimplemented type attribute"));
76a01679
JB
10888 else
10889 {
10890 LONGEST low, high;
10891
ad82864c
JB
10892 if (ada_is_constrained_packed_array_type (type_arg))
10893 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 10894
aa4fb036 10895 if (op == OP_ATR_LENGTH)
1eea4ebd 10896 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
10897 else
10898 {
10899 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10900 if (type == NULL)
10901 type = builtin_type (exp->gdbarch)->builtin_int;
10902 }
1eea4ebd 10903
76a01679
JB
10904 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10905 return allocate_value (type);
10906
10907 switch (op)
10908 {
10909 default:
323e0a4a 10910 error (_("unexpected attribute encountered"));
76a01679 10911 case OP_ATR_FIRST:
1eea4ebd 10912 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
10913 return value_from_longest (type, low);
10914 case OP_ATR_LAST:
1eea4ebd 10915 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10916 return value_from_longest (type, high);
10917 case OP_ATR_LENGTH:
1eea4ebd
UW
10918 low = ada_array_bound_from_type (type_arg, tem, 0);
10919 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10920 return value_from_longest (type, high - low + 1);
10921 }
10922 }
14f9c5c9
AS
10923 }
10924
4c4b4cd2
PH
10925 case OP_ATR_TAG:
10926 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10927 if (noside == EVAL_SKIP)
76a01679 10928 goto nosideret;
4c4b4cd2
PH
10929
10930 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10931 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
10932
10933 return ada_value_tag (arg1);
10934
10935 case OP_ATR_MIN:
10936 case OP_ATR_MAX:
10937 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10938 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10939 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10940 if (noside == EVAL_SKIP)
76a01679 10941 goto nosideret;
d2e4a39e 10942 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10943 return value_zero (value_type (arg1), not_lval);
14f9c5c9 10944 else
f44316fa
UW
10945 {
10946 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10947 return value_binop (arg1, arg2,
10948 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10949 }
14f9c5c9 10950
4c4b4cd2
PH
10951 case OP_ATR_MODULUS:
10952 {
31dedfee 10953 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 10954
5b4ee69b 10955 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
10956 if (noside == EVAL_SKIP)
10957 goto nosideret;
4c4b4cd2 10958
76a01679 10959 if (!ada_is_modular_type (type_arg))
323e0a4a 10960 error (_("'modulus must be applied to modular type"));
4c4b4cd2 10961
76a01679
JB
10962 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10963 ada_modulus (type_arg));
4c4b4cd2
PH
10964 }
10965
10966
10967 case OP_ATR_POS:
10968 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10969 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10970 if (noside == EVAL_SKIP)
76a01679 10971 goto nosideret;
3cb382c9
UW
10972 type = builtin_type (exp->gdbarch)->builtin_int;
10973 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10974 return value_zero (type, not_lval);
14f9c5c9 10975 else
3cb382c9 10976 return value_pos_atr (type, arg1);
14f9c5c9 10977
4c4b4cd2
PH
10978 case OP_ATR_SIZE:
10979 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
10980 type = value_type (arg1);
10981
10982 /* If the argument is a reference, then dereference its type, since
10983 the user is really asking for the size of the actual object,
10984 not the size of the pointer. */
10985 if (TYPE_CODE (type) == TYPE_CODE_REF)
10986 type = TYPE_TARGET_TYPE (type);
10987
4c4b4cd2 10988 if (noside == EVAL_SKIP)
76a01679 10989 goto nosideret;
4c4b4cd2 10990 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 10991 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 10992 else
22601c15 10993 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 10994 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
10995
10996 case OP_ATR_VAL:
10997 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 10998 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 10999 type = exp->elts[pc + 2].type;
14f9c5c9 11000 if (noside == EVAL_SKIP)
76a01679 11001 goto nosideret;
4c4b4cd2 11002 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11003 return value_zero (type, not_lval);
4c4b4cd2 11004 else
76a01679 11005 return value_val_atr (type, arg1);
4c4b4cd2
PH
11006
11007 case BINOP_EXP:
11008 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11009 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11010 if (noside == EVAL_SKIP)
11011 goto nosideret;
11012 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11013 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 11014 else
f44316fa
UW
11015 {
11016 /* For integer exponentiation operations,
11017 only promote the first argument. */
11018 if (is_integral_type (value_type (arg2)))
11019 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11020 else
11021 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11022
11023 return value_binop (arg1, arg2, op);
11024 }
4c4b4cd2
PH
11025
11026 case UNOP_PLUS:
11027 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11028 if (noside == EVAL_SKIP)
11029 goto nosideret;
11030 else
11031 return arg1;
11032
11033 case UNOP_ABS:
11034 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11035 if (noside == EVAL_SKIP)
11036 goto nosideret;
f44316fa 11037 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 11038 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 11039 return value_neg (arg1);
14f9c5c9 11040 else
4c4b4cd2 11041 return arg1;
14f9c5c9
AS
11042
11043 case UNOP_IND:
5ec18f2b 11044 preeval_pos = *pos;
6b0d7253 11045 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 11046 if (noside == EVAL_SKIP)
4c4b4cd2 11047 goto nosideret;
df407dfe 11048 type = ada_check_typedef (value_type (arg1));
14f9c5c9 11049 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
11050 {
11051 if (ada_is_array_descriptor_type (type))
11052 /* GDB allows dereferencing GNAT array descriptors. */
11053 {
11054 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 11055
4c4b4cd2 11056 if (arrType == NULL)
323e0a4a 11057 error (_("Attempt to dereference null array pointer."));
00a4c844 11058 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
11059 }
11060 else if (TYPE_CODE (type) == TYPE_CODE_PTR
11061 || TYPE_CODE (type) == TYPE_CODE_REF
11062 /* In C you can dereference an array to get the 1st elt. */
11063 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab 11064 {
5ec18f2b
JG
11065 /* As mentioned in the OP_VAR_VALUE case, tagged types can
11066 only be determined by inspecting the object's tag.
11067 This means that we need to evaluate completely the
11068 expression in order to get its type. */
11069
023db19c
JB
11070 if ((TYPE_CODE (type) == TYPE_CODE_REF
11071 || TYPE_CODE (type) == TYPE_CODE_PTR)
5ec18f2b
JG
11072 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11073 {
11074 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11075 EVAL_NORMAL);
11076 type = value_type (ada_value_ind (arg1));
11077 }
11078 else
11079 {
11080 type = to_static_fixed_type
11081 (ada_aligned_type
11082 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11083 }
c1b5a1a6 11084 ada_ensure_varsize_limit (type);
714e53ab
PH
11085 return value_zero (type, lval_memory);
11086 }
4c4b4cd2 11087 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
11088 {
11089 /* GDB allows dereferencing an int. */
11090 if (expect_type == NULL)
11091 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11092 lval_memory);
11093 else
11094 {
11095 expect_type =
11096 to_static_fixed_type (ada_aligned_type (expect_type));
11097 return value_zero (expect_type, lval_memory);
11098 }
11099 }
4c4b4cd2 11100 else
323e0a4a 11101 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 11102 }
0963b4bd 11103 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11104 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11105
96967637
JB
11106 if (TYPE_CODE (type) == TYPE_CODE_INT)
11107 /* GDB allows dereferencing an int. If we were given
11108 the expect_type, then use that as the target type.
11109 Otherwise, assume that the target type is an int. */
11110 {
11111 if (expect_type != NULL)
11112 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11113 arg1));
11114 else
11115 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11116 (CORE_ADDR) value_as_address (arg1));
11117 }
6b0d7253 11118
4c4b4cd2
PH
11119 if (ada_is_array_descriptor_type (type))
11120 /* GDB allows dereferencing GNAT array descriptors. */
11121 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11122 else
4c4b4cd2 11123 return ada_value_ind (arg1);
14f9c5c9
AS
11124
11125 case STRUCTOP_STRUCT:
11126 tem = longest_to_int (exp->elts[pc + 1].longconst);
11127 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11128 preeval_pos = *pos;
14f9c5c9
AS
11129 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11130 if (noside == EVAL_SKIP)
4c4b4cd2 11131 goto nosideret;
14f9c5c9 11132 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11133 {
df407dfe 11134 struct type *type1 = value_type (arg1);
5b4ee69b 11135
76a01679
JB
11136 if (ada_is_tagged_type (type1, 1))
11137 {
11138 type = ada_lookup_struct_elt_type (type1,
11139 &exp->elts[pc + 2].string,
11140 1, 1, NULL);
5ec18f2b
JG
11141
11142 /* If the field is not found, check if it exists in the
11143 extension of this object's type. This means that we
11144 need to evaluate completely the expression. */
11145
76a01679 11146 if (type == NULL)
5ec18f2b
JG
11147 {
11148 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11149 EVAL_NORMAL);
11150 arg1 = ada_value_struct_elt (arg1,
11151 &exp->elts[pc + 2].string,
11152 0);
11153 arg1 = unwrap_value (arg1);
11154 type = value_type (ada_to_fixed_value (arg1));
11155 }
76a01679
JB
11156 }
11157 else
11158 type =
11159 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11160 0, NULL);
11161
11162 return value_zero (ada_aligned_type (type), lval_memory);
11163 }
14f9c5c9 11164 else
284614f0
JB
11165 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11166 arg1 = unwrap_value (arg1);
11167 return ada_to_fixed_value (arg1);
11168
14f9c5c9 11169 case OP_TYPE:
4c4b4cd2
PH
11170 /* The value is not supposed to be used. This is here to make it
11171 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11172 (*pos) += 2;
11173 if (noside == EVAL_SKIP)
4c4b4cd2 11174 goto nosideret;
14f9c5c9 11175 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 11176 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11177 else
323e0a4a 11178 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11179
11180 case OP_AGGREGATE:
11181 case OP_CHOICES:
11182 case OP_OTHERS:
11183 case OP_DISCRETE_RANGE:
11184 case OP_POSITIONAL:
11185 case OP_NAME:
11186 if (noside == EVAL_NORMAL)
11187 switch (op)
11188 {
11189 case OP_NAME:
11190 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11191 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11192 case OP_AGGREGATE:
11193 error (_("Aggregates only allowed on the right of an assignment"));
11194 default:
0963b4bd
MS
11195 internal_error (__FILE__, __LINE__,
11196 _("aggregate apparently mangled"));
52ce6436
PH
11197 }
11198
11199 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11200 *pos += oplen - 1;
11201 for (tem = 0; tem < nargs; tem += 1)
11202 ada_evaluate_subexp (NULL, exp, pos, noside);
11203 goto nosideret;
14f9c5c9
AS
11204 }
11205
11206nosideret:
22601c15 11207 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
14f9c5c9 11208}
14f9c5c9 11209\f
d2e4a39e 11210
4c4b4cd2 11211 /* Fixed point */
14f9c5c9
AS
11212
11213/* If TYPE encodes an Ada fixed-point type, return the suffix of the
11214 type name that encodes the 'small and 'delta information.
4c4b4cd2 11215 Otherwise, return NULL. */
14f9c5c9 11216
d2e4a39e 11217static const char *
ebf56fd3 11218fixed_type_info (struct type *type)
14f9c5c9 11219{
d2e4a39e 11220 const char *name = ada_type_name (type);
14f9c5c9
AS
11221 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11222
d2e4a39e
AS
11223 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11224 {
14f9c5c9 11225 const char *tail = strstr (name, "___XF_");
5b4ee69b 11226
14f9c5c9 11227 if (tail == NULL)
4c4b4cd2 11228 return NULL;
d2e4a39e 11229 else
4c4b4cd2 11230 return tail + 5;
14f9c5c9
AS
11231 }
11232 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11233 return fixed_type_info (TYPE_TARGET_TYPE (type));
11234 else
11235 return NULL;
11236}
11237
4c4b4cd2 11238/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
11239
11240int
ebf56fd3 11241ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
11242{
11243 return fixed_type_info (type) != NULL;
11244}
11245
4c4b4cd2
PH
11246/* Return non-zero iff TYPE represents a System.Address type. */
11247
11248int
11249ada_is_system_address_type (struct type *type)
11250{
11251 return (TYPE_NAME (type)
11252 && strcmp (TYPE_NAME (type), "system__address") == 0);
11253}
11254
14f9c5c9
AS
11255/* Assuming that TYPE is the representation of an Ada fixed-point
11256 type, return its delta, or -1 if the type is malformed and the
4c4b4cd2 11257 delta cannot be determined. */
14f9c5c9
AS
11258
11259DOUBLEST
ebf56fd3 11260ada_delta (struct type *type)
14f9c5c9
AS
11261{
11262 const char *encoding = fixed_type_info (type);
facc390f 11263 DOUBLEST num, den;
14f9c5c9 11264
facc390f
JB
11265 /* Strictly speaking, num and den are encoded as integer. However,
11266 they may not fit into a long, and they will have to be converted
11267 to DOUBLEST anyway. So scan them as DOUBLEST. */
11268 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11269 &num, &den) < 2)
14f9c5c9 11270 return -1.0;
d2e4a39e 11271 else
facc390f 11272 return num / den;
14f9c5c9
AS
11273}
11274
11275/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 11276 factor ('SMALL value) associated with the type. */
14f9c5c9
AS
11277
11278static DOUBLEST
ebf56fd3 11279scaling_factor (struct type *type)
14f9c5c9
AS
11280{
11281 const char *encoding = fixed_type_info (type);
facc390f 11282 DOUBLEST num0, den0, num1, den1;
14f9c5c9 11283 int n;
d2e4a39e 11284
facc390f
JB
11285 /* Strictly speaking, num's and den's are encoded as integer. However,
11286 they may not fit into a long, and they will have to be converted
11287 to DOUBLEST anyway. So scan them as DOUBLEST. */
11288 n = sscanf (encoding,
11289 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11290 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11291 &num0, &den0, &num1, &den1);
14f9c5c9
AS
11292
11293 if (n < 2)
11294 return 1.0;
11295 else if (n == 4)
facc390f 11296 return num1 / den1;
d2e4a39e 11297 else
facc390f 11298 return num0 / den0;
14f9c5c9
AS
11299}
11300
11301
11302/* Assuming that X is the representation of a value of fixed-point
4c4b4cd2 11303 type TYPE, return its floating-point equivalent. */
14f9c5c9
AS
11304
11305DOUBLEST
ebf56fd3 11306ada_fixed_to_float (struct type *type, LONGEST x)
14f9c5c9 11307{
d2e4a39e 11308 return (DOUBLEST) x *scaling_factor (type);
14f9c5c9
AS
11309}
11310
4c4b4cd2
PH
11311/* The representation of a fixed-point value of type TYPE
11312 corresponding to the value X. */
14f9c5c9
AS
11313
11314LONGEST
ebf56fd3 11315ada_float_to_fixed (struct type *type, DOUBLEST x)
14f9c5c9
AS
11316{
11317 return (LONGEST) (x / scaling_factor (type) + 0.5);
11318}
11319
14f9c5c9 11320\f
d2e4a39e 11321
4c4b4cd2 11322 /* Range types */
14f9c5c9
AS
11323
11324/* Scan STR beginning at position K for a discriminant name, and
11325 return the value of that discriminant field of DVAL in *PX. If
11326 PNEW_K is not null, put the position of the character beyond the
11327 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11328 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11329
11330static int
07d8f827 11331scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
76a01679 11332 int *pnew_k)
14f9c5c9
AS
11333{
11334 static char *bound_buffer = NULL;
11335 static size_t bound_buffer_len = 0;
11336 char *bound;
11337 char *pend;
d2e4a39e 11338 struct value *bound_val;
14f9c5c9
AS
11339
11340 if (dval == NULL || str == NULL || str[k] == '\0')
11341 return 0;
11342
d2e4a39e 11343 pend = strstr (str + k, "__");
14f9c5c9
AS
11344 if (pend == NULL)
11345 {
d2e4a39e 11346 bound = str + k;
14f9c5c9
AS
11347 k += strlen (bound);
11348 }
d2e4a39e 11349 else
14f9c5c9 11350 {
d2e4a39e 11351 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
14f9c5c9 11352 bound = bound_buffer;
d2e4a39e
AS
11353 strncpy (bound_buffer, str + k, pend - (str + k));
11354 bound[pend - (str + k)] = '\0';
11355 k = pend - str;
14f9c5c9 11356 }
d2e4a39e 11357
df407dfe 11358 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11359 if (bound_val == NULL)
11360 return 0;
11361
11362 *px = value_as_long (bound_val);
11363 if (pnew_k != NULL)
11364 *pnew_k = k;
11365 return 1;
11366}
11367
11368/* Value of variable named NAME in the current environment. If
11369 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11370 otherwise causes an error with message ERR_MSG. */
11371
d2e4a39e
AS
11372static struct value *
11373get_var_value (char *name, char *err_msg)
14f9c5c9 11374{
4c4b4cd2 11375 struct ada_symbol_info *syms;
14f9c5c9
AS
11376 int nsyms;
11377
4c4b4cd2 11378 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
4eeaa230 11379 &syms);
14f9c5c9
AS
11380
11381 if (nsyms != 1)
11382 {
11383 if (err_msg == NULL)
4c4b4cd2 11384 return 0;
14f9c5c9 11385 else
8a3fe4f8 11386 error (("%s"), err_msg);
14f9c5c9
AS
11387 }
11388
4c4b4cd2 11389 return value_of_variable (syms[0].sym, syms[0].block);
14f9c5c9 11390}
d2e4a39e 11391
14f9c5c9 11392/* Value of integer variable named NAME in the current environment. If
4c4b4cd2
PH
11393 no such variable found, returns 0, and sets *FLAG to 0. If
11394 successful, sets *FLAG to 1. */
11395
14f9c5c9 11396LONGEST
4c4b4cd2 11397get_int_var_value (char *name, int *flag)
14f9c5c9 11398{
4c4b4cd2 11399 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11400
14f9c5c9
AS
11401 if (var_val == 0)
11402 {
11403 if (flag != NULL)
4c4b4cd2 11404 *flag = 0;
14f9c5c9
AS
11405 return 0;
11406 }
11407 else
11408 {
11409 if (flag != NULL)
4c4b4cd2 11410 *flag = 1;
14f9c5c9
AS
11411 return value_as_long (var_val);
11412 }
11413}
d2e4a39e 11414
14f9c5c9
AS
11415
11416/* Return a range type whose base type is that of the range type named
11417 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11418 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11419 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11420 corresponding range type from debug information; fall back to using it
11421 if symbol lookup fails. If a new type must be created, allocate it
11422 like ORIG_TYPE was. The bounds information, in general, is encoded
11423 in NAME, the base type given in the named range type. */
14f9c5c9 11424
d2e4a39e 11425static struct type *
28c85d6c 11426to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11427{
0d5cff50 11428 const char *name;
14f9c5c9 11429 struct type *base_type;
d2e4a39e 11430 char *subtype_info;
14f9c5c9 11431
28c85d6c
JB
11432 gdb_assert (raw_type != NULL);
11433 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 11434
1ce677a4 11435 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
11436 base_type = TYPE_TARGET_TYPE (raw_type);
11437 else
11438 base_type = raw_type;
11439
28c85d6c 11440 name = TYPE_NAME (raw_type);
14f9c5c9
AS
11441 subtype_info = strstr (name, "___XD");
11442 if (subtype_info == NULL)
690cc4eb 11443 {
43bbcdc2
PH
11444 LONGEST L = ada_discrete_type_low_bound (raw_type);
11445 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11446
690cc4eb
PH
11447 if (L < INT_MIN || U > INT_MAX)
11448 return raw_type;
11449 else
0c9c3474
SA
11450 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11451 L, U);
690cc4eb 11452 }
14f9c5c9
AS
11453 else
11454 {
11455 static char *name_buf = NULL;
11456 static size_t name_len = 0;
11457 int prefix_len = subtype_info - name;
11458 LONGEST L, U;
11459 struct type *type;
11460 char *bounds_str;
11461 int n;
11462
11463 GROW_VECT (name_buf, name_len, prefix_len + 5);
11464 strncpy (name_buf, name, prefix_len);
11465 name_buf[prefix_len] = '\0';
11466
11467 subtype_info += 5;
11468 bounds_str = strchr (subtype_info, '_');
11469 n = 1;
11470
d2e4a39e 11471 if (*subtype_info == 'L')
4c4b4cd2
PH
11472 {
11473 if (!ada_scan_number (bounds_str, n, &L, &n)
11474 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11475 return raw_type;
11476 if (bounds_str[n] == '_')
11477 n += 2;
0963b4bd 11478 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
11479 n += 1;
11480 subtype_info += 1;
11481 }
d2e4a39e 11482 else
4c4b4cd2
PH
11483 {
11484 int ok;
5b4ee69b 11485
4c4b4cd2
PH
11486 strcpy (name_buf + prefix_len, "___L");
11487 L = get_int_var_value (name_buf, &ok);
11488 if (!ok)
11489 {
323e0a4a 11490 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
11491 L = 1;
11492 }
11493 }
14f9c5c9 11494
d2e4a39e 11495 if (*subtype_info == 'U')
4c4b4cd2
PH
11496 {
11497 if (!ada_scan_number (bounds_str, n, &U, &n)
11498 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11499 return raw_type;
11500 }
d2e4a39e 11501 else
4c4b4cd2
PH
11502 {
11503 int ok;
5b4ee69b 11504
4c4b4cd2
PH
11505 strcpy (name_buf + prefix_len, "___U");
11506 U = get_int_var_value (name_buf, &ok);
11507 if (!ok)
11508 {
323e0a4a 11509 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
11510 U = L;
11511 }
11512 }
14f9c5c9 11513
0c9c3474
SA
11514 type = create_static_range_type (alloc_type_copy (raw_type),
11515 base_type, L, U);
d2e4a39e 11516 TYPE_NAME (type) = name;
14f9c5c9
AS
11517 return type;
11518 }
11519}
11520
4c4b4cd2
PH
11521/* True iff NAME is the name of a range type. */
11522
14f9c5c9 11523int
d2e4a39e 11524ada_is_range_type_name (const char *name)
14f9c5c9
AS
11525{
11526 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11527}
14f9c5c9 11528\f
d2e4a39e 11529
4c4b4cd2
PH
11530 /* Modular types */
11531
11532/* True iff TYPE is an Ada modular type. */
14f9c5c9 11533
14f9c5c9 11534int
d2e4a39e 11535ada_is_modular_type (struct type *type)
14f9c5c9 11536{
18af8284 11537 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
11538
11539 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 11540 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 11541 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
11542}
11543
4c4b4cd2
PH
11544/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11545
61ee279c 11546ULONGEST
0056e4d5 11547ada_modulus (struct type *type)
14f9c5c9 11548{
43bbcdc2 11549 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 11550}
d2e4a39e 11551\f
f7f9143b
JB
11552
11553/* Ada exception catchpoint support:
11554 ---------------------------------
11555
11556 We support 3 kinds of exception catchpoints:
11557 . catchpoints on Ada exceptions
11558 . catchpoints on unhandled Ada exceptions
11559 . catchpoints on failed assertions
11560
11561 Exceptions raised during failed assertions, or unhandled exceptions
11562 could perfectly be caught with the general catchpoint on Ada exceptions.
11563 However, we can easily differentiate these two special cases, and having
11564 the option to distinguish these two cases from the rest can be useful
11565 to zero-in on certain situations.
11566
11567 Exception catchpoints are a specialized form of breakpoint,
11568 since they rely on inserting breakpoints inside known routines
11569 of the GNAT runtime. The implementation therefore uses a standard
11570 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11571 of breakpoint_ops.
11572
0259addd
JB
11573 Support in the runtime for exception catchpoints have been changed
11574 a few times already, and these changes affect the implementation
11575 of these catchpoints. In order to be able to support several
11576 variants of the runtime, we use a sniffer that will determine
28010a5d 11577 the runtime variant used by the program being debugged. */
f7f9143b 11578
82eacd52
JB
11579/* Ada's standard exceptions.
11580
11581 The Ada 83 standard also defined Numeric_Error. But there so many
11582 situations where it was unclear from the Ada 83 Reference Manual
11583 (RM) whether Constraint_Error or Numeric_Error should be raised,
11584 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11585 Interpretation saying that anytime the RM says that Numeric_Error
11586 should be raised, the implementation may raise Constraint_Error.
11587 Ada 95 went one step further and pretty much removed Numeric_Error
11588 from the list of standard exceptions (it made it a renaming of
11589 Constraint_Error, to help preserve compatibility when compiling
11590 an Ada83 compiler). As such, we do not include Numeric_Error from
11591 this list of standard exceptions. */
3d0b0fa3
JB
11592
11593static char *standard_exc[] = {
11594 "constraint_error",
11595 "program_error",
11596 "storage_error",
11597 "tasking_error"
11598};
11599
0259addd
JB
11600typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11601
11602/* A structure that describes how to support exception catchpoints
11603 for a given executable. */
11604
11605struct exception_support_info
11606{
11607 /* The name of the symbol to break on in order to insert
11608 a catchpoint on exceptions. */
11609 const char *catch_exception_sym;
11610
11611 /* The name of the symbol to break on in order to insert
11612 a catchpoint on unhandled exceptions. */
11613 const char *catch_exception_unhandled_sym;
11614
11615 /* The name of the symbol to break on in order to insert
11616 a catchpoint on failed assertions. */
11617 const char *catch_assert_sym;
11618
11619 /* Assuming that the inferior just triggered an unhandled exception
11620 catchpoint, this function is responsible for returning the address
11621 in inferior memory where the name of that exception is stored.
11622 Return zero if the address could not be computed. */
11623 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11624};
11625
11626static CORE_ADDR ada_unhandled_exception_name_addr (void);
11627static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11628
11629/* The following exception support info structure describes how to
11630 implement exception catchpoints with the latest version of the
11631 Ada runtime (as of 2007-03-06). */
11632
11633static const struct exception_support_info default_exception_support_info =
11634{
11635 "__gnat_debug_raise_exception", /* catch_exception_sym */
11636 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11637 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11638 ada_unhandled_exception_name_addr
11639};
11640
11641/* The following exception support info structure describes how to
11642 implement exception catchpoints with a slightly older version
11643 of the Ada runtime. */
11644
11645static const struct exception_support_info exception_support_info_fallback =
11646{
11647 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11648 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11649 "system__assertions__raise_assert_failure", /* catch_assert_sym */
11650 ada_unhandled_exception_name_addr_from_raise
11651};
11652
f17011e0
JB
11653/* Return nonzero if we can detect the exception support routines
11654 described in EINFO.
11655
11656 This function errors out if an abnormal situation is detected
11657 (for instance, if we find the exception support routines, but
11658 that support is found to be incomplete). */
11659
11660static int
11661ada_has_this_exception_support (const struct exception_support_info *einfo)
11662{
11663 struct symbol *sym;
11664
11665 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11666 that should be compiled with debugging information. As a result, we
11667 expect to find that symbol in the symtabs. */
11668
11669 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11670 if (sym == NULL)
a6af7abe
JB
11671 {
11672 /* Perhaps we did not find our symbol because the Ada runtime was
11673 compiled without debugging info, or simply stripped of it.
11674 It happens on some GNU/Linux distributions for instance, where
11675 users have to install a separate debug package in order to get
11676 the runtime's debugging info. In that situation, let the user
11677 know why we cannot insert an Ada exception catchpoint.
11678
11679 Note: Just for the purpose of inserting our Ada exception
11680 catchpoint, we could rely purely on the associated minimal symbol.
11681 But we would be operating in degraded mode anyway, since we are
11682 still lacking the debugging info needed later on to extract
11683 the name of the exception being raised (this name is printed in
11684 the catchpoint message, and is also used when trying to catch
11685 a specific exception). We do not handle this case for now. */
3b7344d5 11686 struct bound_minimal_symbol msym
1c8e84b0
JB
11687 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11688
3b7344d5 11689 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11690 error (_("Your Ada runtime appears to be missing some debugging "
11691 "information.\nCannot insert Ada exception catchpoint "
11692 "in this configuration."));
11693
11694 return 0;
11695 }
f17011e0
JB
11696
11697 /* Make sure that the symbol we found corresponds to a function. */
11698
11699 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11700 error (_("Symbol \"%s\" is not a function (class = %d)"),
11701 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11702
11703 return 1;
11704}
11705
0259addd
JB
11706/* Inspect the Ada runtime and determine which exception info structure
11707 should be used to provide support for exception catchpoints.
11708
3eecfa55
JB
11709 This function will always set the per-inferior exception_info,
11710 or raise an error. */
0259addd
JB
11711
11712static void
11713ada_exception_support_info_sniffer (void)
11714{
3eecfa55 11715 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11716
11717 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11718 if (data->exception_info != NULL)
0259addd
JB
11719 return;
11720
11721 /* Check the latest (default) exception support info. */
f17011e0 11722 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11723 {
3eecfa55 11724 data->exception_info = &default_exception_support_info;
0259addd
JB
11725 return;
11726 }
11727
11728 /* Try our fallback exception suport info. */
f17011e0 11729 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11730 {
3eecfa55 11731 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11732 return;
11733 }
11734
11735 /* Sometimes, it is normal for us to not be able to find the routine
11736 we are looking for. This happens when the program is linked with
11737 the shared version of the GNAT runtime, and the program has not been
11738 started yet. Inform the user of these two possible causes if
11739 applicable. */
11740
ccefe4c4 11741 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11742 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11743
11744 /* If the symbol does not exist, then check that the program is
11745 already started, to make sure that shared libraries have been
11746 loaded. If it is not started, this may mean that the symbol is
11747 in a shared library. */
11748
11749 if (ptid_get_pid (inferior_ptid) == 0)
11750 error (_("Unable to insert catchpoint. Try to start the program first."));
11751
11752 /* At this point, we know that we are debugging an Ada program and
11753 that the inferior has been started, but we still are not able to
0963b4bd 11754 find the run-time symbols. That can mean that we are in
0259addd
JB
11755 configurable run time mode, or that a-except as been optimized
11756 out by the linker... In any case, at this point it is not worth
11757 supporting this feature. */
11758
7dda8cff 11759 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11760}
11761
f7f9143b
JB
11762/* True iff FRAME is very likely to be that of a function that is
11763 part of the runtime system. This is all very heuristic, but is
11764 intended to be used as advice as to what frames are uninteresting
11765 to most users. */
11766
11767static int
11768is_known_support_routine (struct frame_info *frame)
11769{
4ed6b5be 11770 struct symtab_and_line sal;
55b87a52 11771 char *func_name;
692465f1 11772 enum language func_lang;
f7f9143b 11773 int i;
f35a17b5 11774 const char *fullname;
f7f9143b 11775
4ed6b5be
JB
11776 /* If this code does not have any debugging information (no symtab),
11777 This cannot be any user code. */
f7f9143b 11778
4ed6b5be 11779 find_frame_sal (frame, &sal);
f7f9143b
JB
11780 if (sal.symtab == NULL)
11781 return 1;
11782
4ed6b5be
JB
11783 /* If there is a symtab, but the associated source file cannot be
11784 located, then assume this is not user code: Selecting a frame
11785 for which we cannot display the code would not be very helpful
11786 for the user. This should also take care of case such as VxWorks
11787 where the kernel has some debugging info provided for a few units. */
f7f9143b 11788
f35a17b5
JK
11789 fullname = symtab_to_fullname (sal.symtab);
11790 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11791 return 1;
11792
4ed6b5be
JB
11793 /* Check the unit filename againt the Ada runtime file naming.
11794 We also check the name of the objfile against the name of some
11795 known system libraries that sometimes come with debugging info
11796 too. */
11797
f7f9143b
JB
11798 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11799 {
11800 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11801 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 11802 return 1;
eb822aa6
DE
11803 if (SYMTAB_OBJFILE (sal.symtab) != NULL
11804 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
4ed6b5be 11805 return 1;
f7f9143b
JB
11806 }
11807
4ed6b5be 11808 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11809
e9e07ba6 11810 find_frame_funname (frame, &func_name, &func_lang, NULL);
f7f9143b
JB
11811 if (func_name == NULL)
11812 return 1;
11813
11814 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11815 {
11816 re_comp (known_auxiliary_function_name_patterns[i]);
11817 if (re_exec (func_name))
55b87a52
KS
11818 {
11819 xfree (func_name);
11820 return 1;
11821 }
f7f9143b
JB
11822 }
11823
55b87a52 11824 xfree (func_name);
f7f9143b
JB
11825 return 0;
11826}
11827
11828/* Find the first frame that contains debugging information and that is not
11829 part of the Ada run-time, starting from FI and moving upward. */
11830
0ef643c8 11831void
f7f9143b
JB
11832ada_find_printable_frame (struct frame_info *fi)
11833{
11834 for (; fi != NULL; fi = get_prev_frame (fi))
11835 {
11836 if (!is_known_support_routine (fi))
11837 {
11838 select_frame (fi);
11839 break;
11840 }
11841 }
11842
11843}
11844
11845/* Assuming that the inferior just triggered an unhandled exception
11846 catchpoint, return the address in inferior memory where the name
11847 of the exception is stored.
11848
11849 Return zero if the address could not be computed. */
11850
11851static CORE_ADDR
11852ada_unhandled_exception_name_addr (void)
0259addd
JB
11853{
11854 return parse_and_eval_address ("e.full_name");
11855}
11856
11857/* Same as ada_unhandled_exception_name_addr, except that this function
11858 should be used when the inferior uses an older version of the runtime,
11859 where the exception name needs to be extracted from a specific frame
11860 several frames up in the callstack. */
11861
11862static CORE_ADDR
11863ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11864{
11865 int frame_level;
11866 struct frame_info *fi;
3eecfa55 11867 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
55b87a52 11868 struct cleanup *old_chain;
f7f9143b
JB
11869
11870 /* To determine the name of this exception, we need to select
11871 the frame corresponding to RAISE_SYM_NAME. This frame is
11872 at least 3 levels up, so we simply skip the first 3 frames
11873 without checking the name of their associated function. */
11874 fi = get_current_frame ();
11875 for (frame_level = 0; frame_level < 3; frame_level += 1)
11876 if (fi != NULL)
11877 fi = get_prev_frame (fi);
11878
55b87a52 11879 old_chain = make_cleanup (null_cleanup, NULL);
f7f9143b
JB
11880 while (fi != NULL)
11881 {
55b87a52 11882 char *func_name;
692465f1
JB
11883 enum language func_lang;
11884
e9e07ba6 11885 find_frame_funname (fi, &func_name, &func_lang, NULL);
55b87a52
KS
11886 if (func_name != NULL)
11887 {
11888 make_cleanup (xfree, func_name);
11889
11890 if (strcmp (func_name,
11891 data->exception_info->catch_exception_sym) == 0)
11892 break; /* We found the frame we were looking for... */
11893 fi = get_prev_frame (fi);
11894 }
f7f9143b 11895 }
55b87a52 11896 do_cleanups (old_chain);
f7f9143b
JB
11897
11898 if (fi == NULL)
11899 return 0;
11900
11901 select_frame (fi);
11902 return parse_and_eval_address ("id.full_name");
11903}
11904
11905/* Assuming the inferior just triggered an Ada exception catchpoint
11906 (of any type), return the address in inferior memory where the name
11907 of the exception is stored, if applicable.
11908
11909 Return zero if the address could not be computed, or if not relevant. */
11910
11911static CORE_ADDR
761269c8 11912ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11913 struct breakpoint *b)
11914{
3eecfa55
JB
11915 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11916
f7f9143b
JB
11917 switch (ex)
11918 {
761269c8 11919 case ada_catch_exception:
f7f9143b
JB
11920 return (parse_and_eval_address ("e.full_name"));
11921 break;
11922
761269c8 11923 case ada_catch_exception_unhandled:
3eecfa55 11924 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b
JB
11925 break;
11926
761269c8 11927 case ada_catch_assert:
f7f9143b
JB
11928 return 0; /* Exception name is not relevant in this case. */
11929 break;
11930
11931 default:
11932 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11933 break;
11934 }
11935
11936 return 0; /* Should never be reached. */
11937}
11938
11939/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11940 any error that ada_exception_name_addr_1 might cause to be thrown.
11941 When an error is intercepted, a warning with the error message is printed,
11942 and zero is returned. */
11943
11944static CORE_ADDR
761269c8 11945ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11946 struct breakpoint *b)
11947{
f7f9143b
JB
11948 CORE_ADDR result = 0;
11949
492d29ea 11950 TRY
f7f9143b
JB
11951 {
11952 result = ada_exception_name_addr_1 (ex, b);
11953 }
11954
492d29ea 11955 CATCH (e, RETURN_MASK_ERROR)
f7f9143b
JB
11956 {
11957 warning (_("failed to get exception name: %s"), e.message);
11958 return 0;
11959 }
492d29ea 11960 END_CATCH
f7f9143b
JB
11961
11962 return result;
11963}
11964
28010a5d
PA
11965static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11966
11967/* Ada catchpoints.
11968
11969 In the case of catchpoints on Ada exceptions, the catchpoint will
11970 stop the target on every exception the program throws. When a user
11971 specifies the name of a specific exception, we translate this
11972 request into a condition expression (in text form), and then parse
11973 it into an expression stored in each of the catchpoint's locations.
11974 We then use this condition to check whether the exception that was
11975 raised is the one the user is interested in. If not, then the
11976 target is resumed again. We store the name of the requested
11977 exception, in order to be able to re-set the condition expression
11978 when symbols change. */
11979
11980/* An instance of this type is used to represent an Ada catchpoint
11981 breakpoint location. It includes a "struct bp_location" as a kind
11982 of base class; users downcast to "struct bp_location *" when
11983 needed. */
11984
11985struct ada_catchpoint_location
11986{
11987 /* The base class. */
11988 struct bp_location base;
11989
11990 /* The condition that checks whether the exception that was raised
11991 is the specific exception the user specified on catchpoint
11992 creation. */
11993 struct expression *excep_cond_expr;
11994};
11995
11996/* Implement the DTOR method in the bp_location_ops structure for all
11997 Ada exception catchpoint kinds. */
11998
11999static void
12000ada_catchpoint_location_dtor (struct bp_location *bl)
12001{
12002 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
12003
12004 xfree (al->excep_cond_expr);
12005}
12006
12007/* The vtable to be used in Ada catchpoint locations. */
12008
12009static const struct bp_location_ops ada_catchpoint_location_ops =
12010{
12011 ada_catchpoint_location_dtor
12012};
12013
12014/* An instance of this type is used to represent an Ada catchpoint.
12015 It includes a "struct breakpoint" as a kind of base class; users
12016 downcast to "struct breakpoint *" when needed. */
12017
12018struct ada_catchpoint
12019{
12020 /* The base class. */
12021 struct breakpoint base;
12022
12023 /* The name of the specific exception the user specified. */
12024 char *excep_string;
12025};
12026
12027/* Parse the exception condition string in the context of each of the
12028 catchpoint's locations, and store them for later evaluation. */
12029
12030static void
12031create_excep_cond_exprs (struct ada_catchpoint *c)
12032{
12033 struct cleanup *old_chain;
12034 struct bp_location *bl;
12035 char *cond_string;
12036
12037 /* Nothing to do if there's no specific exception to catch. */
12038 if (c->excep_string == NULL)
12039 return;
12040
12041 /* Same if there are no locations... */
12042 if (c->base.loc == NULL)
12043 return;
12044
12045 /* Compute the condition expression in text form, from the specific
12046 expection we want to catch. */
12047 cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
12048 old_chain = make_cleanup (xfree, cond_string);
12049
12050 /* Iterate over all the catchpoint's locations, and parse an
12051 expression for each. */
12052 for (bl = c->base.loc; bl != NULL; bl = bl->next)
12053 {
12054 struct ada_catchpoint_location *ada_loc
12055 = (struct ada_catchpoint_location *) bl;
12056 struct expression *exp = NULL;
12057
12058 if (!bl->shlib_disabled)
12059 {
bbc13ae3 12060 const char *s;
28010a5d
PA
12061
12062 s = cond_string;
492d29ea 12063 TRY
28010a5d 12064 {
1bb9788d
TT
12065 exp = parse_exp_1 (&s, bl->address,
12066 block_for_pc (bl->address), 0);
28010a5d 12067 }
492d29ea 12068 CATCH (e, RETURN_MASK_ERROR)
849f2b52
JB
12069 {
12070 warning (_("failed to reevaluate internal exception condition "
12071 "for catchpoint %d: %s"),
12072 c->base.number, e.message);
12073 /* There is a bug in GCC on sparc-solaris when building with
12074 optimization which causes EXP to change unexpectedly
12075 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
12076 The problem should be fixed starting with GCC 4.9.
12077 In the meantime, work around it by forcing EXP back
12078 to NULL. */
12079 exp = NULL;
12080 }
492d29ea 12081 END_CATCH
28010a5d
PA
12082 }
12083
12084 ada_loc->excep_cond_expr = exp;
12085 }
12086
12087 do_cleanups (old_chain);
12088}
12089
12090/* Implement the DTOR method in the breakpoint_ops structure for all
12091 exception catchpoint kinds. */
12092
12093static void
761269c8 12094dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
12095{
12096 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12097
12098 xfree (c->excep_string);
348d480f 12099
2060206e 12100 bkpt_breakpoint_ops.dtor (b);
28010a5d
PA
12101}
12102
12103/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12104 structure for all exception catchpoint kinds. */
12105
12106static struct bp_location *
761269c8 12107allocate_location_exception (enum ada_exception_catchpoint_kind ex,
28010a5d
PA
12108 struct breakpoint *self)
12109{
12110 struct ada_catchpoint_location *loc;
12111
12112 loc = XNEW (struct ada_catchpoint_location);
12113 init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
12114 loc->excep_cond_expr = NULL;
12115 return &loc->base;
12116}
12117
12118/* Implement the RE_SET method in the breakpoint_ops structure for all
12119 exception catchpoint kinds. */
12120
12121static void
761269c8 12122re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
12123{
12124 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12125
12126 /* Call the base class's method. This updates the catchpoint's
12127 locations. */
2060206e 12128 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12129
12130 /* Reparse the exception conditional expressions. One for each
12131 location. */
12132 create_excep_cond_exprs (c);
12133}
12134
12135/* Returns true if we should stop for this breakpoint hit. If the
12136 user specified a specific exception, we only want to cause a stop
12137 if the program thrown that exception. */
12138
12139static int
12140should_stop_exception (const struct bp_location *bl)
12141{
12142 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12143 const struct ada_catchpoint_location *ada_loc
12144 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12145 int stop;
12146
12147 /* With no specific exception, should always stop. */
12148 if (c->excep_string == NULL)
12149 return 1;
12150
12151 if (ada_loc->excep_cond_expr == NULL)
12152 {
12153 /* We will have a NULL expression if back when we were creating
12154 the expressions, this location's had failed to parse. */
12155 return 1;
12156 }
12157
12158 stop = 1;
492d29ea 12159 TRY
28010a5d
PA
12160 {
12161 struct value *mark;
12162
12163 mark = value_mark ();
12164 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
12165 value_free_to_mark (mark);
12166 }
492d29ea
PA
12167 CATCH (ex, RETURN_MASK_ALL)
12168 {
12169 exception_fprintf (gdb_stderr, ex,
12170 _("Error in testing exception condition:\n"));
12171 }
12172 END_CATCH
12173
28010a5d
PA
12174 return stop;
12175}
12176
12177/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12178 for all exception catchpoint kinds. */
12179
12180static void
761269c8 12181check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
28010a5d
PA
12182{
12183 bs->stop = should_stop_exception (bs->bp_location_at);
12184}
12185
f7f9143b
JB
12186/* Implement the PRINT_IT method in the breakpoint_ops structure
12187 for all exception catchpoint kinds. */
12188
12189static enum print_stop_action
761269c8 12190print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
f7f9143b 12191{
79a45e25 12192 struct ui_out *uiout = current_uiout;
348d480f
PA
12193 struct breakpoint *b = bs->breakpoint_at;
12194
956a9fb9 12195 annotate_catchpoint (b->number);
f7f9143b 12196
956a9fb9 12197 if (ui_out_is_mi_like_p (uiout))
f7f9143b 12198 {
956a9fb9
JB
12199 ui_out_field_string (uiout, "reason",
12200 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12201 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
f7f9143b
JB
12202 }
12203
00eb2c4a
JB
12204 ui_out_text (uiout,
12205 b->disposition == disp_del ? "\nTemporary catchpoint "
12206 : "\nCatchpoint ");
956a9fb9
JB
12207 ui_out_field_int (uiout, "bkptno", b->number);
12208 ui_out_text (uiout, ", ");
f7f9143b 12209
f7f9143b
JB
12210 switch (ex)
12211 {
761269c8
JB
12212 case ada_catch_exception:
12213 case ada_catch_exception_unhandled:
956a9fb9
JB
12214 {
12215 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12216 char exception_name[256];
12217
12218 if (addr != 0)
12219 {
c714b426
PA
12220 read_memory (addr, (gdb_byte *) exception_name,
12221 sizeof (exception_name) - 1);
956a9fb9
JB
12222 exception_name [sizeof (exception_name) - 1] = '\0';
12223 }
12224 else
12225 {
12226 /* For some reason, we were unable to read the exception
12227 name. This could happen if the Runtime was compiled
12228 without debugging info, for instance. In that case,
12229 just replace the exception name by the generic string
12230 "exception" - it will read as "an exception" in the
12231 notification we are about to print. */
967cff16 12232 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12233 }
12234 /* In the case of unhandled exception breakpoints, we print
12235 the exception name as "unhandled EXCEPTION_NAME", to make
12236 it clearer to the user which kind of catchpoint just got
12237 hit. We used ui_out_text to make sure that this extra
12238 info does not pollute the exception name in the MI case. */
761269c8 12239 if (ex == ada_catch_exception_unhandled)
956a9fb9
JB
12240 ui_out_text (uiout, "unhandled ");
12241 ui_out_field_string (uiout, "exception-name", exception_name);
12242 }
12243 break;
761269c8 12244 case ada_catch_assert:
956a9fb9
JB
12245 /* In this case, the name of the exception is not really
12246 important. Just print "failed assertion" to make it clearer
12247 that his program just hit an assertion-failure catchpoint.
12248 We used ui_out_text because this info does not belong in
12249 the MI output. */
12250 ui_out_text (uiout, "failed assertion");
12251 break;
f7f9143b 12252 }
956a9fb9
JB
12253 ui_out_text (uiout, " at ");
12254 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12255
12256 return PRINT_SRC_AND_LOC;
12257}
12258
12259/* Implement the PRINT_ONE method in the breakpoint_ops structure
12260 for all exception catchpoint kinds. */
12261
12262static void
761269c8 12263print_one_exception (enum ada_exception_catchpoint_kind ex,
a6d9a66e 12264 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12265{
79a45e25 12266 struct ui_out *uiout = current_uiout;
28010a5d 12267 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12268 struct value_print_options opts;
12269
12270 get_user_print_options (&opts);
12271 if (opts.addressprint)
f7f9143b
JB
12272 {
12273 annotate_field (4);
5af949e3 12274 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
12275 }
12276
12277 annotate_field (5);
a6d9a66e 12278 *last_loc = b->loc;
f7f9143b
JB
12279 switch (ex)
12280 {
761269c8 12281 case ada_catch_exception:
28010a5d 12282 if (c->excep_string != NULL)
f7f9143b 12283 {
28010a5d
PA
12284 char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12285
f7f9143b
JB
12286 ui_out_field_string (uiout, "what", msg);
12287 xfree (msg);
12288 }
12289 else
12290 ui_out_field_string (uiout, "what", "all Ada exceptions");
12291
12292 break;
12293
761269c8 12294 case ada_catch_exception_unhandled:
f7f9143b
JB
12295 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12296 break;
12297
761269c8 12298 case ada_catch_assert:
f7f9143b
JB
12299 ui_out_field_string (uiout, "what", "failed Ada assertions");
12300 break;
12301
12302 default:
12303 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12304 break;
12305 }
12306}
12307
12308/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12309 for all exception catchpoint kinds. */
12310
12311static void
761269c8 12312print_mention_exception (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12313 struct breakpoint *b)
12314{
28010a5d 12315 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12316 struct ui_out *uiout = current_uiout;
28010a5d 12317
00eb2c4a
JB
12318 ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12319 : _("Catchpoint "));
12320 ui_out_field_int (uiout, "bkptno", b->number);
12321 ui_out_text (uiout, ": ");
12322
f7f9143b
JB
12323 switch (ex)
12324 {
761269c8 12325 case ada_catch_exception:
28010a5d 12326 if (c->excep_string != NULL)
00eb2c4a
JB
12327 {
12328 char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12329 struct cleanup *old_chain = make_cleanup (xfree, info);
12330
12331 ui_out_text (uiout, info);
12332 do_cleanups (old_chain);
12333 }
f7f9143b 12334 else
00eb2c4a 12335 ui_out_text (uiout, _("all Ada exceptions"));
f7f9143b
JB
12336 break;
12337
761269c8 12338 case ada_catch_exception_unhandled:
00eb2c4a 12339 ui_out_text (uiout, _("unhandled Ada exceptions"));
f7f9143b
JB
12340 break;
12341
761269c8 12342 case ada_catch_assert:
00eb2c4a 12343 ui_out_text (uiout, _("failed Ada assertions"));
f7f9143b
JB
12344 break;
12345
12346 default:
12347 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12348 break;
12349 }
12350}
12351
6149aea9
PA
12352/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12353 for all exception catchpoint kinds. */
12354
12355static void
761269c8 12356print_recreate_exception (enum ada_exception_catchpoint_kind ex,
6149aea9
PA
12357 struct breakpoint *b, struct ui_file *fp)
12358{
28010a5d
PA
12359 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12360
6149aea9
PA
12361 switch (ex)
12362 {
761269c8 12363 case ada_catch_exception:
6149aea9 12364 fprintf_filtered (fp, "catch exception");
28010a5d
PA
12365 if (c->excep_string != NULL)
12366 fprintf_filtered (fp, " %s", c->excep_string);
6149aea9
PA
12367 break;
12368
761269c8 12369 case ada_catch_exception_unhandled:
78076abc 12370 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12371 break;
12372
761269c8 12373 case ada_catch_assert:
6149aea9
PA
12374 fprintf_filtered (fp, "catch assert");
12375 break;
12376
12377 default:
12378 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12379 }
d9b3f62e 12380 print_recreate_thread (b, fp);
6149aea9
PA
12381}
12382
f7f9143b
JB
12383/* Virtual table for "catch exception" breakpoints. */
12384
28010a5d
PA
12385static void
12386dtor_catch_exception (struct breakpoint *b)
12387{
761269c8 12388 dtor_exception (ada_catch_exception, b);
28010a5d
PA
12389}
12390
12391static struct bp_location *
12392allocate_location_catch_exception (struct breakpoint *self)
12393{
761269c8 12394 return allocate_location_exception (ada_catch_exception, self);
28010a5d
PA
12395}
12396
12397static void
12398re_set_catch_exception (struct breakpoint *b)
12399{
761269c8 12400 re_set_exception (ada_catch_exception, b);
28010a5d
PA
12401}
12402
12403static void
12404check_status_catch_exception (bpstat bs)
12405{
761269c8 12406 check_status_exception (ada_catch_exception, bs);
28010a5d
PA
12407}
12408
f7f9143b 12409static enum print_stop_action
348d480f 12410print_it_catch_exception (bpstat bs)
f7f9143b 12411{
761269c8 12412 return print_it_exception (ada_catch_exception, bs);
f7f9143b
JB
12413}
12414
12415static void
a6d9a66e 12416print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12417{
761269c8 12418 print_one_exception (ada_catch_exception, b, last_loc);
f7f9143b
JB
12419}
12420
12421static void
12422print_mention_catch_exception (struct breakpoint *b)
12423{
761269c8 12424 print_mention_exception (ada_catch_exception, b);
f7f9143b
JB
12425}
12426
6149aea9
PA
12427static void
12428print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12429{
761269c8 12430 print_recreate_exception (ada_catch_exception, b, fp);
6149aea9
PA
12431}
12432
2060206e 12433static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
12434
12435/* Virtual table for "catch exception unhandled" breakpoints. */
12436
28010a5d
PA
12437static void
12438dtor_catch_exception_unhandled (struct breakpoint *b)
12439{
761269c8 12440 dtor_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12441}
12442
12443static struct bp_location *
12444allocate_location_catch_exception_unhandled (struct breakpoint *self)
12445{
761269c8 12446 return allocate_location_exception (ada_catch_exception_unhandled, self);
28010a5d
PA
12447}
12448
12449static void
12450re_set_catch_exception_unhandled (struct breakpoint *b)
12451{
761269c8 12452 re_set_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12453}
12454
12455static void
12456check_status_catch_exception_unhandled (bpstat bs)
12457{
761269c8 12458 check_status_exception (ada_catch_exception_unhandled, bs);
28010a5d
PA
12459}
12460
f7f9143b 12461static enum print_stop_action
348d480f 12462print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 12463{
761269c8 12464 return print_it_exception (ada_catch_exception_unhandled, bs);
f7f9143b
JB
12465}
12466
12467static void
a6d9a66e
UW
12468print_one_catch_exception_unhandled (struct breakpoint *b,
12469 struct bp_location **last_loc)
f7f9143b 12470{
761269c8 12471 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
12472}
12473
12474static void
12475print_mention_catch_exception_unhandled (struct breakpoint *b)
12476{
761269c8 12477 print_mention_exception (ada_catch_exception_unhandled, b);
f7f9143b
JB
12478}
12479
6149aea9
PA
12480static void
12481print_recreate_catch_exception_unhandled (struct breakpoint *b,
12482 struct ui_file *fp)
12483{
761269c8 12484 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
6149aea9
PA
12485}
12486
2060206e 12487static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
12488
12489/* Virtual table for "catch assert" breakpoints. */
12490
28010a5d
PA
12491static void
12492dtor_catch_assert (struct breakpoint *b)
12493{
761269c8 12494 dtor_exception (ada_catch_assert, b);
28010a5d
PA
12495}
12496
12497static struct bp_location *
12498allocate_location_catch_assert (struct breakpoint *self)
12499{
761269c8 12500 return allocate_location_exception (ada_catch_assert, self);
28010a5d
PA
12501}
12502
12503static void
12504re_set_catch_assert (struct breakpoint *b)
12505{
761269c8 12506 re_set_exception (ada_catch_assert, b);
28010a5d
PA
12507}
12508
12509static void
12510check_status_catch_assert (bpstat bs)
12511{
761269c8 12512 check_status_exception (ada_catch_assert, bs);
28010a5d
PA
12513}
12514
f7f9143b 12515static enum print_stop_action
348d480f 12516print_it_catch_assert (bpstat bs)
f7f9143b 12517{
761269c8 12518 return print_it_exception (ada_catch_assert, bs);
f7f9143b
JB
12519}
12520
12521static void
a6d9a66e 12522print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12523{
761269c8 12524 print_one_exception (ada_catch_assert, b, last_loc);
f7f9143b
JB
12525}
12526
12527static void
12528print_mention_catch_assert (struct breakpoint *b)
12529{
761269c8 12530 print_mention_exception (ada_catch_assert, b);
f7f9143b
JB
12531}
12532
6149aea9
PA
12533static void
12534print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12535{
761269c8 12536 print_recreate_exception (ada_catch_assert, b, fp);
6149aea9
PA
12537}
12538
2060206e 12539static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 12540
f7f9143b
JB
12541/* Return a newly allocated copy of the first space-separated token
12542 in ARGSP, and then adjust ARGSP to point immediately after that
12543 token.
12544
12545 Return NULL if ARGPS does not contain any more tokens. */
12546
12547static char *
12548ada_get_next_arg (char **argsp)
12549{
12550 char *args = *argsp;
12551 char *end;
12552 char *result;
12553
0fcd72ba 12554 args = skip_spaces (args);
f7f9143b
JB
12555 if (args[0] == '\0')
12556 return NULL; /* No more arguments. */
12557
12558 /* Find the end of the current argument. */
12559
0fcd72ba 12560 end = skip_to_space (args);
f7f9143b
JB
12561
12562 /* Adjust ARGSP to point to the start of the next argument. */
12563
12564 *argsp = end;
12565
12566 /* Make a copy of the current argument and return it. */
12567
12568 result = xmalloc (end - args + 1);
12569 strncpy (result, args, end - args);
12570 result[end - args] = '\0';
12571
12572 return result;
12573}
12574
12575/* Split the arguments specified in a "catch exception" command.
12576 Set EX to the appropriate catchpoint type.
28010a5d 12577 Set EXCEP_STRING to the name of the specific exception if
5845583d
JB
12578 specified by the user.
12579 If a condition is found at the end of the arguments, the condition
12580 expression is stored in COND_STRING (memory must be deallocated
12581 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12582
12583static void
12584catch_ada_exception_command_split (char *args,
761269c8 12585 enum ada_exception_catchpoint_kind *ex,
5845583d
JB
12586 char **excep_string,
12587 char **cond_string)
f7f9143b
JB
12588{
12589 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12590 char *exception_name;
5845583d 12591 char *cond = NULL;
f7f9143b
JB
12592
12593 exception_name = ada_get_next_arg (&args);
5845583d
JB
12594 if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12595 {
12596 /* This is not an exception name; this is the start of a condition
12597 expression for a catchpoint on all exceptions. So, "un-get"
12598 this token, and set exception_name to NULL. */
12599 xfree (exception_name);
12600 exception_name = NULL;
12601 args -= 2;
12602 }
f7f9143b
JB
12603 make_cleanup (xfree, exception_name);
12604
5845583d 12605 /* Check to see if we have a condition. */
f7f9143b 12606
0fcd72ba 12607 args = skip_spaces (args);
61012eef 12608 if (startswith (args, "if")
5845583d
JB
12609 && (isspace (args[2]) || args[2] == '\0'))
12610 {
12611 args += 2;
12612 args = skip_spaces (args);
12613
12614 if (args[0] == '\0')
12615 error (_("Condition missing after `if' keyword"));
12616 cond = xstrdup (args);
12617 make_cleanup (xfree, cond);
12618
12619 args += strlen (args);
12620 }
12621
12622 /* Check that we do not have any more arguments. Anything else
12623 is unexpected. */
f7f9143b
JB
12624
12625 if (args[0] != '\0')
12626 error (_("Junk at end of expression"));
12627
12628 discard_cleanups (old_chain);
12629
12630 if (exception_name == NULL)
12631 {
12632 /* Catch all exceptions. */
761269c8 12633 *ex = ada_catch_exception;
28010a5d 12634 *excep_string = NULL;
f7f9143b
JB
12635 }
12636 else if (strcmp (exception_name, "unhandled") == 0)
12637 {
12638 /* Catch unhandled exceptions. */
761269c8 12639 *ex = ada_catch_exception_unhandled;
28010a5d 12640 *excep_string = NULL;
f7f9143b
JB
12641 }
12642 else
12643 {
12644 /* Catch a specific exception. */
761269c8 12645 *ex = ada_catch_exception;
28010a5d 12646 *excep_string = exception_name;
f7f9143b 12647 }
5845583d 12648 *cond_string = cond;
f7f9143b
JB
12649}
12650
12651/* Return the name of the symbol on which we should break in order to
12652 implement a catchpoint of the EX kind. */
12653
12654static const char *
761269c8 12655ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12656{
3eecfa55
JB
12657 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12658
12659 gdb_assert (data->exception_info != NULL);
0259addd 12660
f7f9143b
JB
12661 switch (ex)
12662 {
761269c8 12663 case ada_catch_exception:
3eecfa55 12664 return (data->exception_info->catch_exception_sym);
f7f9143b 12665 break;
761269c8 12666 case ada_catch_exception_unhandled:
3eecfa55 12667 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 12668 break;
761269c8 12669 case ada_catch_assert:
3eecfa55 12670 return (data->exception_info->catch_assert_sym);
f7f9143b
JB
12671 break;
12672 default:
12673 internal_error (__FILE__, __LINE__,
12674 _("unexpected catchpoint kind (%d)"), ex);
12675 }
12676}
12677
12678/* Return the breakpoint ops "virtual table" used for catchpoints
12679 of the EX kind. */
12680
c0a91b2b 12681static const struct breakpoint_ops *
761269c8 12682ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12683{
12684 switch (ex)
12685 {
761269c8 12686 case ada_catch_exception:
f7f9143b
JB
12687 return (&catch_exception_breakpoint_ops);
12688 break;
761269c8 12689 case ada_catch_exception_unhandled:
f7f9143b
JB
12690 return (&catch_exception_unhandled_breakpoint_ops);
12691 break;
761269c8 12692 case ada_catch_assert:
f7f9143b
JB
12693 return (&catch_assert_breakpoint_ops);
12694 break;
12695 default:
12696 internal_error (__FILE__, __LINE__,
12697 _("unexpected catchpoint kind (%d)"), ex);
12698 }
12699}
12700
12701/* Return the condition that will be used to match the current exception
12702 being raised with the exception that the user wants to catch. This
12703 assumes that this condition is used when the inferior just triggered
12704 an exception catchpoint.
12705
12706 The string returned is a newly allocated string that needs to be
12707 deallocated later. */
12708
12709static char *
28010a5d 12710ada_exception_catchpoint_cond_string (const char *excep_string)
f7f9143b 12711{
3d0b0fa3
JB
12712 int i;
12713
0963b4bd 12714 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12715 runtime units that have been compiled without debugging info; if
28010a5d 12716 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12717 exception (e.g. "constraint_error") then, during the evaluation
12718 of the condition expression, the symbol lookup on this name would
0963b4bd 12719 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12720 may then be set only on user-defined exceptions which have the
12721 same not-fully-qualified name (e.g. my_package.constraint_error).
12722
12723 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12724 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12725 exception constraint_error" is rewritten into "catch exception
12726 standard.constraint_error".
12727
12728 If an exception named contraint_error is defined in another package of
12729 the inferior program, then the only way to specify this exception as a
12730 breakpoint condition is to use its fully-qualified named:
12731 e.g. my_package.constraint_error. */
12732
12733 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12734 {
28010a5d 12735 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3
JB
12736 {
12737 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
28010a5d 12738 excep_string);
3d0b0fa3
JB
12739 }
12740 }
28010a5d 12741 return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
f7f9143b
JB
12742}
12743
12744/* Return the symtab_and_line that should be used to insert an exception
12745 catchpoint of the TYPE kind.
12746
28010a5d
PA
12747 EXCEP_STRING should contain the name of a specific exception that
12748 the catchpoint should catch, or NULL otherwise.
f7f9143b 12749
28010a5d
PA
12750 ADDR_STRING returns the name of the function where the real
12751 breakpoint that implements the catchpoints is set, depending on the
12752 type of catchpoint we need to create. */
f7f9143b
JB
12753
12754static struct symtab_and_line
761269c8 12755ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
c0a91b2b 12756 char **addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12757{
12758 const char *sym_name;
12759 struct symbol *sym;
f7f9143b 12760
0259addd
JB
12761 /* First, find out which exception support info to use. */
12762 ada_exception_support_info_sniffer ();
12763
12764 /* Then lookup the function on which we will break in order to catch
f7f9143b 12765 the Ada exceptions requested by the user. */
f7f9143b
JB
12766 sym_name = ada_exception_sym_name (ex);
12767 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12768
f17011e0
JB
12769 /* We can assume that SYM is not NULL at this stage. If the symbol
12770 did not exist, ada_exception_support_info_sniffer would have
12771 raised an exception.
f7f9143b 12772
f17011e0
JB
12773 Also, ada_exception_support_info_sniffer should have already
12774 verified that SYM is a function symbol. */
12775 gdb_assert (sym != NULL);
12776 gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
f7f9143b
JB
12777
12778 /* Set ADDR_STRING. */
f7f9143b
JB
12779 *addr_string = xstrdup (sym_name);
12780
f7f9143b 12781 /* Set OPS. */
4b9eee8c 12782 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12783
f17011e0 12784 return find_function_start_sal (sym, 1);
f7f9143b
JB
12785}
12786
b4a5b78b 12787/* Create an Ada exception catchpoint.
f7f9143b 12788
b4a5b78b 12789 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12790
2df4d1d5
JB
12791 If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12792 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
12793 of the exception to which this catchpoint applies. When not NULL,
12794 the string must be allocated on the heap, and its deallocation
12795 is no longer the responsibility of the caller.
12796
12797 COND_STRING, if not NULL, is the catchpoint condition. This string
12798 must be allocated on the heap, and its deallocation is no longer
12799 the responsibility of the caller.
f7f9143b 12800
b4a5b78b
JB
12801 TEMPFLAG, if nonzero, means that the underlying breakpoint
12802 should be temporary.
28010a5d 12803
b4a5b78b 12804 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12805
349774ef 12806void
28010a5d 12807create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12808 enum ada_exception_catchpoint_kind ex_kind,
28010a5d 12809 char *excep_string,
5845583d 12810 char *cond_string,
28010a5d 12811 int tempflag,
349774ef 12812 int disabled,
28010a5d
PA
12813 int from_tty)
12814{
12815 struct ada_catchpoint *c;
b4a5b78b
JB
12816 char *addr_string = NULL;
12817 const struct breakpoint_ops *ops = NULL;
12818 struct symtab_and_line sal
12819 = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
28010a5d
PA
12820
12821 c = XNEW (struct ada_catchpoint);
12822 init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
349774ef 12823 ops, tempflag, disabled, from_tty);
28010a5d
PA
12824 c->excep_string = excep_string;
12825 create_excep_cond_exprs (c);
5845583d
JB
12826 if (cond_string != NULL)
12827 set_breakpoint_condition (&c->base, cond_string, from_tty);
3ea46bff 12828 install_breakpoint (0, &c->base, 1);
f7f9143b
JB
12829}
12830
9ac4176b
PA
12831/* Implement the "catch exception" command. */
12832
12833static void
12834catch_ada_exception_command (char *arg, int from_tty,
12835 struct cmd_list_element *command)
12836{
12837 struct gdbarch *gdbarch = get_current_arch ();
12838 int tempflag;
761269c8 12839 enum ada_exception_catchpoint_kind ex_kind;
28010a5d 12840 char *excep_string = NULL;
5845583d 12841 char *cond_string = NULL;
9ac4176b
PA
12842
12843 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12844
12845 if (!arg)
12846 arg = "";
b4a5b78b
JB
12847 catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12848 &cond_string);
12849 create_ada_exception_catchpoint (gdbarch, ex_kind,
12850 excep_string, cond_string,
349774ef
JB
12851 tempflag, 1 /* enabled */,
12852 from_tty);
9ac4176b
PA
12853}
12854
b4a5b78b 12855/* Split the arguments specified in a "catch assert" command.
5845583d 12856
b4a5b78b
JB
12857 ARGS contains the command's arguments (or the empty string if
12858 no arguments were passed).
5845583d
JB
12859
12860 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12861 (the memory needs to be deallocated after use). */
5845583d 12862
b4a5b78b
JB
12863static void
12864catch_ada_assert_command_split (char *args, char **cond_string)
f7f9143b 12865{
5845583d 12866 args = skip_spaces (args);
f7f9143b 12867
5845583d 12868 /* Check whether a condition was provided. */
61012eef 12869 if (startswith (args, "if")
5845583d 12870 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12871 {
5845583d 12872 args += 2;
0fcd72ba 12873 args = skip_spaces (args);
5845583d
JB
12874 if (args[0] == '\0')
12875 error (_("condition missing after `if' keyword"));
12876 *cond_string = xstrdup (args);
f7f9143b
JB
12877 }
12878
5845583d
JB
12879 /* Otherwise, there should be no other argument at the end of
12880 the command. */
12881 else if (args[0] != '\0')
12882 error (_("Junk at end of arguments."));
f7f9143b
JB
12883}
12884
9ac4176b
PA
12885/* Implement the "catch assert" command. */
12886
12887static void
12888catch_assert_command (char *arg, int from_tty,
12889 struct cmd_list_element *command)
12890{
12891 struct gdbarch *gdbarch = get_current_arch ();
12892 int tempflag;
5845583d 12893 char *cond_string = NULL;
9ac4176b
PA
12894
12895 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12896
12897 if (!arg)
12898 arg = "";
b4a5b78b 12899 catch_ada_assert_command_split (arg, &cond_string);
761269c8 12900 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
b4a5b78b 12901 NULL, cond_string,
349774ef
JB
12902 tempflag, 1 /* enabled */,
12903 from_tty);
9ac4176b 12904}
778865d3
JB
12905
12906/* Return non-zero if the symbol SYM is an Ada exception object. */
12907
12908static int
12909ada_is_exception_sym (struct symbol *sym)
12910{
12911 const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12912
12913 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12914 && SYMBOL_CLASS (sym) != LOC_BLOCK
12915 && SYMBOL_CLASS (sym) != LOC_CONST
12916 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12917 && type_name != NULL && strcmp (type_name, "exception") == 0);
12918}
12919
12920/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12921 Ada exception object. This matches all exceptions except the ones
12922 defined by the Ada language. */
12923
12924static int
12925ada_is_non_standard_exception_sym (struct symbol *sym)
12926{
12927 int i;
12928
12929 if (!ada_is_exception_sym (sym))
12930 return 0;
12931
12932 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12933 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12934 return 0; /* A standard exception. */
12935
12936 /* Numeric_Error is also a standard exception, so exclude it.
12937 See the STANDARD_EXC description for more details as to why
12938 this exception is not listed in that array. */
12939 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12940 return 0;
12941
12942 return 1;
12943}
12944
12945/* A helper function for qsort, comparing two struct ada_exc_info
12946 objects.
12947
12948 The comparison is determined first by exception name, and then
12949 by exception address. */
12950
12951static int
12952compare_ada_exception_info (const void *a, const void *b)
12953{
12954 const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12955 const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12956 int result;
12957
12958 result = strcmp (exc_a->name, exc_b->name);
12959 if (result != 0)
12960 return result;
12961
12962 if (exc_a->addr < exc_b->addr)
12963 return -1;
12964 if (exc_a->addr > exc_b->addr)
12965 return 1;
12966
12967 return 0;
12968}
12969
12970/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12971 routine, but keeping the first SKIP elements untouched.
12972
12973 All duplicates are also removed. */
12974
12975static void
12976sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12977 int skip)
12978{
12979 struct ada_exc_info *to_sort
12980 = VEC_address (ada_exc_info, *exceptions) + skip;
12981 int to_sort_len
12982 = VEC_length (ada_exc_info, *exceptions) - skip;
12983 int i, j;
12984
12985 qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12986 compare_ada_exception_info);
12987
12988 for (i = 1, j = 1; i < to_sort_len; i++)
12989 if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12990 to_sort[j++] = to_sort[i];
12991 to_sort_len = j;
12992 VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12993}
12994
12995/* A function intended as the "name_matcher" callback in the struct
12996 quick_symbol_functions' expand_symtabs_matching method.
12997
12998 SEARCH_NAME is the symbol's search name.
12999
13000 If USER_DATA is not NULL, it is a pointer to a regext_t object
13001 used to match the symbol (by natural name). Otherwise, when USER_DATA
13002 is null, no filtering is performed, and all symbols are a positive
13003 match. */
13004
13005static int
13006ada_exc_search_name_matches (const char *search_name, void *user_data)
13007{
13008 regex_t *preg = user_data;
13009
13010 if (preg == NULL)
13011 return 1;
13012
13013 /* In Ada, the symbol "search name" is a linkage name, whereas
13014 the regular expression used to do the matching refers to
13015 the natural name. So match against the decoded name. */
13016 return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
13017}
13018
13019/* Add all exceptions defined by the Ada standard whose name match
13020 a regular expression.
13021
13022 If PREG is not NULL, then this regexp_t object is used to
13023 perform the symbol name matching. Otherwise, no name-based
13024 filtering is performed.
13025
13026 EXCEPTIONS is a vector of exceptions to which matching exceptions
13027 gets pushed. */
13028
13029static void
13030ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13031{
13032 int i;
13033
13034 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13035 {
13036 if (preg == NULL
13037 || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
13038 {
13039 struct bound_minimal_symbol msymbol
13040 = ada_lookup_simple_minsym (standard_exc[i]);
13041
13042 if (msymbol.minsym != NULL)
13043 {
13044 struct ada_exc_info info
77e371c0 13045 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3
JB
13046
13047 VEC_safe_push (ada_exc_info, *exceptions, &info);
13048 }
13049 }
13050 }
13051}
13052
13053/* Add all Ada exceptions defined locally and accessible from the given
13054 FRAME.
13055
13056 If PREG is not NULL, then this regexp_t object is used to
13057 perform the symbol name matching. Otherwise, no name-based
13058 filtering is performed.
13059
13060 EXCEPTIONS is a vector of exceptions to which matching exceptions
13061 gets pushed. */
13062
13063static void
13064ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
13065 VEC(ada_exc_info) **exceptions)
13066{
3977b71f 13067 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
13068
13069 while (block != 0)
13070 {
13071 struct block_iterator iter;
13072 struct symbol *sym;
13073
13074 ALL_BLOCK_SYMBOLS (block, iter, sym)
13075 {
13076 switch (SYMBOL_CLASS (sym))
13077 {
13078 case LOC_TYPEDEF:
13079 case LOC_BLOCK:
13080 case LOC_CONST:
13081 break;
13082 default:
13083 if (ada_is_exception_sym (sym))
13084 {
13085 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
13086 SYMBOL_VALUE_ADDRESS (sym)};
13087
13088 VEC_safe_push (ada_exc_info, *exceptions, &info);
13089 }
13090 }
13091 }
13092 if (BLOCK_FUNCTION (block) != NULL)
13093 break;
13094 block = BLOCK_SUPERBLOCK (block);
13095 }
13096}
13097
13098/* Add all exceptions defined globally whose name name match
13099 a regular expression, excluding standard exceptions.
13100
13101 The reason we exclude standard exceptions is that they need
13102 to be handled separately: Standard exceptions are defined inside
13103 a runtime unit which is normally not compiled with debugging info,
13104 and thus usually do not show up in our symbol search. However,
13105 if the unit was in fact built with debugging info, we need to
13106 exclude them because they would duplicate the entry we found
13107 during the special loop that specifically searches for those
13108 standard exceptions.
13109
13110 If PREG is not NULL, then this regexp_t object is used to
13111 perform the symbol name matching. Otherwise, no name-based
13112 filtering is performed.
13113
13114 EXCEPTIONS is a vector of exceptions to which matching exceptions
13115 gets pushed. */
13116
13117static void
13118ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13119{
13120 struct objfile *objfile;
43f3e411 13121 struct compunit_symtab *s;
778865d3 13122
276d885b 13123 expand_symtabs_matching (NULL, ada_exc_search_name_matches, NULL,
bb4142cf 13124 VARIABLES_DOMAIN, preg);
778865d3 13125
43f3e411 13126 ALL_COMPUNITS (objfile, s)
778865d3 13127 {
43f3e411 13128 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
778865d3
JB
13129 int i;
13130
13131 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13132 {
13133 struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13134 struct block_iterator iter;
13135 struct symbol *sym;
13136
13137 ALL_BLOCK_SYMBOLS (b, iter, sym)
13138 if (ada_is_non_standard_exception_sym (sym)
13139 && (preg == NULL
13140 || regexec (preg, SYMBOL_NATURAL_NAME (sym),
13141 0, NULL, 0) == 0))
13142 {
13143 struct ada_exc_info info
13144 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13145
13146 VEC_safe_push (ada_exc_info, *exceptions, &info);
13147 }
13148 }
13149 }
13150}
13151
13152/* Implements ada_exceptions_list with the regular expression passed
13153 as a regex_t, rather than a string.
13154
13155 If not NULL, PREG is used to filter out exceptions whose names
13156 do not match. Otherwise, all exceptions are listed. */
13157
13158static VEC(ada_exc_info) *
13159ada_exceptions_list_1 (regex_t *preg)
13160{
13161 VEC(ada_exc_info) *result = NULL;
13162 struct cleanup *old_chain
13163 = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13164 int prev_len;
13165
13166 /* First, list the known standard exceptions. These exceptions
13167 need to be handled separately, as they are usually defined in
13168 runtime units that have been compiled without debugging info. */
13169
13170 ada_add_standard_exceptions (preg, &result);
13171
13172 /* Next, find all exceptions whose scope is local and accessible
13173 from the currently selected frame. */
13174
13175 if (has_stack_frames ())
13176 {
13177 prev_len = VEC_length (ada_exc_info, result);
13178 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13179 &result);
13180 if (VEC_length (ada_exc_info, result) > prev_len)
13181 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13182 }
13183
13184 /* Add all exceptions whose scope is global. */
13185
13186 prev_len = VEC_length (ada_exc_info, result);
13187 ada_add_global_exceptions (preg, &result);
13188 if (VEC_length (ada_exc_info, result) > prev_len)
13189 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13190
13191 discard_cleanups (old_chain);
13192 return result;
13193}
13194
13195/* Return a vector of ada_exc_info.
13196
13197 If REGEXP is NULL, all exceptions are included in the result.
13198 Otherwise, it should contain a valid regular expression,
13199 and only the exceptions whose names match that regular expression
13200 are included in the result.
13201
13202 The exceptions are sorted in the following order:
13203 - Standard exceptions (defined by the Ada language), in
13204 alphabetical order;
13205 - Exceptions only visible from the current frame, in
13206 alphabetical order;
13207 - Exceptions whose scope is global, in alphabetical order. */
13208
13209VEC(ada_exc_info) *
13210ada_exceptions_list (const char *regexp)
13211{
13212 VEC(ada_exc_info) *result = NULL;
13213 struct cleanup *old_chain = NULL;
13214 regex_t reg;
13215
13216 if (regexp != NULL)
13217 old_chain = compile_rx_or_error (&reg, regexp,
13218 _("invalid regular expression"));
13219
13220 result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
13221
13222 if (old_chain != NULL)
13223 do_cleanups (old_chain);
13224 return result;
13225}
13226
13227/* Implement the "info exceptions" command. */
13228
13229static void
13230info_exceptions_command (char *regexp, int from_tty)
13231{
13232 VEC(ada_exc_info) *exceptions;
13233 struct cleanup *cleanup;
13234 struct gdbarch *gdbarch = get_current_arch ();
13235 int ix;
13236 struct ada_exc_info *info;
13237
13238 exceptions = ada_exceptions_list (regexp);
13239 cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13240
13241 if (regexp != NULL)
13242 printf_filtered
13243 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13244 else
13245 printf_filtered (_("All defined Ada exceptions:\n"));
13246
13247 for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13248 printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13249
13250 do_cleanups (cleanup);
13251}
13252
4c4b4cd2
PH
13253 /* Operators */
13254/* Information about operators given special treatment in functions
13255 below. */
13256/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13257
13258#define ADA_OPERATORS \
13259 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13260 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13261 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13262 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13263 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13264 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13265 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13266 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13267 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13268 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13269 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13270 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13271 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13272 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13273 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13274 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13275 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13276 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13277 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13278
13279static void
554794dc
SDJ
13280ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13281 int *argsp)
4c4b4cd2
PH
13282{
13283 switch (exp->elts[pc - 1].opcode)
13284 {
76a01679 13285 default:
4c4b4cd2
PH
13286 operator_length_standard (exp, pc, oplenp, argsp);
13287 break;
13288
13289#define OP_DEFN(op, len, args, binop) \
13290 case op: *oplenp = len; *argsp = args; break;
13291 ADA_OPERATORS;
13292#undef OP_DEFN
52ce6436
PH
13293
13294 case OP_AGGREGATE:
13295 *oplenp = 3;
13296 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13297 break;
13298
13299 case OP_CHOICES:
13300 *oplenp = 3;
13301 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13302 break;
4c4b4cd2
PH
13303 }
13304}
13305
c0201579
JK
13306/* Implementation of the exp_descriptor method operator_check. */
13307
13308static int
13309ada_operator_check (struct expression *exp, int pos,
13310 int (*objfile_func) (struct objfile *objfile, void *data),
13311 void *data)
13312{
13313 const union exp_element *const elts = exp->elts;
13314 struct type *type = NULL;
13315
13316 switch (elts[pos].opcode)
13317 {
13318 case UNOP_IN_RANGE:
13319 case UNOP_QUAL:
13320 type = elts[pos + 1].type;
13321 break;
13322
13323 default:
13324 return operator_check_standard (exp, pos, objfile_func, data);
13325 }
13326
13327 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13328
13329 if (type && TYPE_OBJFILE (type)
13330 && (*objfile_func) (TYPE_OBJFILE (type), data))
13331 return 1;
13332
13333 return 0;
13334}
13335
4c4b4cd2
PH
13336static char *
13337ada_op_name (enum exp_opcode opcode)
13338{
13339 switch (opcode)
13340 {
76a01679 13341 default:
4c4b4cd2 13342 return op_name_standard (opcode);
52ce6436 13343
4c4b4cd2
PH
13344#define OP_DEFN(op, len, args, binop) case op: return #op;
13345 ADA_OPERATORS;
13346#undef OP_DEFN
52ce6436
PH
13347
13348 case OP_AGGREGATE:
13349 return "OP_AGGREGATE";
13350 case OP_CHOICES:
13351 return "OP_CHOICES";
13352 case OP_NAME:
13353 return "OP_NAME";
4c4b4cd2
PH
13354 }
13355}
13356
13357/* As for operator_length, but assumes PC is pointing at the first
13358 element of the operator, and gives meaningful results only for the
52ce6436 13359 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13360
13361static void
76a01679
JB
13362ada_forward_operator_length (struct expression *exp, int pc,
13363 int *oplenp, int *argsp)
4c4b4cd2 13364{
76a01679 13365 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13366 {
13367 default:
13368 *oplenp = *argsp = 0;
13369 break;
52ce6436 13370
4c4b4cd2
PH
13371#define OP_DEFN(op, len, args, binop) \
13372 case op: *oplenp = len; *argsp = args; break;
13373 ADA_OPERATORS;
13374#undef OP_DEFN
52ce6436
PH
13375
13376 case OP_AGGREGATE:
13377 *oplenp = 3;
13378 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13379 break;
13380
13381 case OP_CHOICES:
13382 *oplenp = 3;
13383 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13384 break;
13385
13386 case OP_STRING:
13387 case OP_NAME:
13388 {
13389 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13390
52ce6436
PH
13391 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13392 *argsp = 0;
13393 break;
13394 }
4c4b4cd2
PH
13395 }
13396}
13397
13398static int
13399ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13400{
13401 enum exp_opcode op = exp->elts[elt].opcode;
13402 int oplen, nargs;
13403 int pc = elt;
13404 int i;
76a01679 13405
4c4b4cd2
PH
13406 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13407
76a01679 13408 switch (op)
4c4b4cd2 13409 {
76a01679 13410 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13411 case OP_ATR_FIRST:
13412 case OP_ATR_LAST:
13413 case OP_ATR_LENGTH:
13414 case OP_ATR_IMAGE:
13415 case OP_ATR_MAX:
13416 case OP_ATR_MIN:
13417 case OP_ATR_MODULUS:
13418 case OP_ATR_POS:
13419 case OP_ATR_SIZE:
13420 case OP_ATR_TAG:
13421 case OP_ATR_VAL:
13422 break;
13423
13424 case UNOP_IN_RANGE:
13425 case UNOP_QUAL:
323e0a4a
AC
13426 /* XXX: gdb_sprint_host_address, type_sprint */
13427 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13428 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13429 fprintf_filtered (stream, " (");
13430 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13431 fprintf_filtered (stream, ")");
13432 break;
13433 case BINOP_IN_BOUNDS:
52ce6436
PH
13434 fprintf_filtered (stream, " (%d)",
13435 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13436 break;
13437 case TERNOP_IN_RANGE:
13438 break;
13439
52ce6436
PH
13440 case OP_AGGREGATE:
13441 case OP_OTHERS:
13442 case OP_DISCRETE_RANGE:
13443 case OP_POSITIONAL:
13444 case OP_CHOICES:
13445 break;
13446
13447 case OP_NAME:
13448 case OP_STRING:
13449 {
13450 char *name = &exp->elts[elt + 2].string;
13451 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13452
52ce6436
PH
13453 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13454 break;
13455 }
13456
4c4b4cd2
PH
13457 default:
13458 return dump_subexp_body_standard (exp, stream, elt);
13459 }
13460
13461 elt += oplen;
13462 for (i = 0; i < nargs; i += 1)
13463 elt = dump_subexp (exp, stream, elt);
13464
13465 return elt;
13466}
13467
13468/* The Ada extension of print_subexp (q.v.). */
13469
76a01679
JB
13470static void
13471ada_print_subexp (struct expression *exp, int *pos,
13472 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13473{
52ce6436 13474 int oplen, nargs, i;
4c4b4cd2
PH
13475 int pc = *pos;
13476 enum exp_opcode op = exp->elts[pc].opcode;
13477
13478 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13479
52ce6436 13480 *pos += oplen;
4c4b4cd2
PH
13481 switch (op)
13482 {
13483 default:
52ce6436 13484 *pos -= oplen;
4c4b4cd2
PH
13485 print_subexp_standard (exp, pos, stream, prec);
13486 return;
13487
13488 case OP_VAR_VALUE:
4c4b4cd2
PH
13489 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13490 return;
13491
13492 case BINOP_IN_BOUNDS:
323e0a4a 13493 /* XXX: sprint_subexp */
4c4b4cd2 13494 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13495 fputs_filtered (" in ", stream);
4c4b4cd2 13496 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13497 fputs_filtered ("'range", stream);
4c4b4cd2 13498 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
13499 fprintf_filtered (stream, "(%ld)",
13500 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13501 return;
13502
13503 case TERNOP_IN_RANGE:
4c4b4cd2 13504 if (prec >= PREC_EQUAL)
76a01679 13505 fputs_filtered ("(", stream);
323e0a4a 13506 /* XXX: sprint_subexp */
4c4b4cd2 13507 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13508 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13509 print_subexp (exp, pos, stream, PREC_EQUAL);
13510 fputs_filtered (" .. ", stream);
13511 print_subexp (exp, pos, stream, PREC_EQUAL);
13512 if (prec >= PREC_EQUAL)
76a01679
JB
13513 fputs_filtered (")", stream);
13514 return;
4c4b4cd2
PH
13515
13516 case OP_ATR_FIRST:
13517 case OP_ATR_LAST:
13518 case OP_ATR_LENGTH:
13519 case OP_ATR_IMAGE:
13520 case OP_ATR_MAX:
13521 case OP_ATR_MIN:
13522 case OP_ATR_MODULUS:
13523 case OP_ATR_POS:
13524 case OP_ATR_SIZE:
13525 case OP_ATR_TAG:
13526 case OP_ATR_VAL:
4c4b4cd2 13527 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
13528 {
13529 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
79d43c61
TT
13530 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13531 &type_print_raw_options);
76a01679
JB
13532 *pos += 3;
13533 }
4c4b4cd2 13534 else
76a01679 13535 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13536 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13537 if (nargs > 1)
76a01679
JB
13538 {
13539 int tem;
5b4ee69b 13540
76a01679
JB
13541 for (tem = 1; tem < nargs; tem += 1)
13542 {
13543 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13544 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13545 }
13546 fputs_filtered (")", stream);
13547 }
4c4b4cd2 13548 return;
14f9c5c9 13549
4c4b4cd2 13550 case UNOP_QUAL:
4c4b4cd2
PH
13551 type_print (exp->elts[pc + 1].type, "", stream, 0);
13552 fputs_filtered ("'(", stream);
13553 print_subexp (exp, pos, stream, PREC_PREFIX);
13554 fputs_filtered (")", stream);
13555 return;
14f9c5c9 13556
4c4b4cd2 13557 case UNOP_IN_RANGE:
323e0a4a 13558 /* XXX: sprint_subexp */
4c4b4cd2 13559 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13560 fputs_filtered (" in ", stream);
79d43c61
TT
13561 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13562 &type_print_raw_options);
4c4b4cd2 13563 return;
52ce6436
PH
13564
13565 case OP_DISCRETE_RANGE:
13566 print_subexp (exp, pos, stream, PREC_SUFFIX);
13567 fputs_filtered ("..", stream);
13568 print_subexp (exp, pos, stream, PREC_SUFFIX);
13569 return;
13570
13571 case OP_OTHERS:
13572 fputs_filtered ("others => ", stream);
13573 print_subexp (exp, pos, stream, PREC_SUFFIX);
13574 return;
13575
13576 case OP_CHOICES:
13577 for (i = 0; i < nargs-1; i += 1)
13578 {
13579 if (i > 0)
13580 fputs_filtered ("|", stream);
13581 print_subexp (exp, pos, stream, PREC_SUFFIX);
13582 }
13583 fputs_filtered (" => ", stream);
13584 print_subexp (exp, pos, stream, PREC_SUFFIX);
13585 return;
13586
13587 case OP_POSITIONAL:
13588 print_subexp (exp, pos, stream, PREC_SUFFIX);
13589 return;
13590
13591 case OP_AGGREGATE:
13592 fputs_filtered ("(", stream);
13593 for (i = 0; i < nargs; i += 1)
13594 {
13595 if (i > 0)
13596 fputs_filtered (", ", stream);
13597 print_subexp (exp, pos, stream, PREC_SUFFIX);
13598 }
13599 fputs_filtered (")", stream);
13600 return;
4c4b4cd2
PH
13601 }
13602}
14f9c5c9
AS
13603
13604/* Table mapping opcodes into strings for printing operators
13605 and precedences of the operators. */
13606
d2e4a39e
AS
13607static const struct op_print ada_op_print_tab[] = {
13608 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13609 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13610 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13611 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13612 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13613 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13614 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13615 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13616 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13617 {">=", BINOP_GEQ, PREC_ORDER, 0},
13618 {">", BINOP_GTR, PREC_ORDER, 0},
13619 {"<", BINOP_LESS, PREC_ORDER, 0},
13620 {">>", BINOP_RSH, PREC_SHIFT, 0},
13621 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13622 {"+", BINOP_ADD, PREC_ADD, 0},
13623 {"-", BINOP_SUB, PREC_ADD, 0},
13624 {"&", BINOP_CONCAT, PREC_ADD, 0},
13625 {"*", BINOP_MUL, PREC_MUL, 0},
13626 {"/", BINOP_DIV, PREC_MUL, 0},
13627 {"rem", BINOP_REM, PREC_MUL, 0},
13628 {"mod", BINOP_MOD, PREC_MUL, 0},
13629 {"**", BINOP_EXP, PREC_REPEAT, 0},
13630 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13631 {"-", UNOP_NEG, PREC_PREFIX, 0},
13632 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13633 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13634 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13635 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13636 {".all", UNOP_IND, PREC_SUFFIX, 1},
13637 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13638 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
d2e4a39e 13639 {NULL, 0, 0, 0}
14f9c5c9
AS
13640};
13641\f
72d5681a
PH
13642enum ada_primitive_types {
13643 ada_primitive_type_int,
13644 ada_primitive_type_long,
13645 ada_primitive_type_short,
13646 ada_primitive_type_char,
13647 ada_primitive_type_float,
13648 ada_primitive_type_double,
13649 ada_primitive_type_void,
13650 ada_primitive_type_long_long,
13651 ada_primitive_type_long_double,
13652 ada_primitive_type_natural,
13653 ada_primitive_type_positive,
13654 ada_primitive_type_system_address,
13655 nr_ada_primitive_types
13656};
6c038f32
PH
13657
13658static void
d4a9a881 13659ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
13660 struct language_arch_info *lai)
13661{
d4a9a881 13662 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 13663
72d5681a 13664 lai->primitive_type_vector
d4a9a881 13665 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 13666 struct type *);
e9bb382b
UW
13667
13668 lai->primitive_type_vector [ada_primitive_type_int]
13669 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13670 0, "integer");
13671 lai->primitive_type_vector [ada_primitive_type_long]
13672 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13673 0, "long_integer");
13674 lai->primitive_type_vector [ada_primitive_type_short]
13675 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13676 0, "short_integer");
13677 lai->string_char_type
13678 = lai->primitive_type_vector [ada_primitive_type_char]
13679 = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13680 lai->primitive_type_vector [ada_primitive_type_float]
13681 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13682 "float", NULL);
13683 lai->primitive_type_vector [ada_primitive_type_double]
13684 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13685 "long_float", NULL);
13686 lai->primitive_type_vector [ada_primitive_type_long_long]
13687 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13688 0, "long_long_integer");
13689 lai->primitive_type_vector [ada_primitive_type_long_double]
13690 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13691 "long_long_float", NULL);
13692 lai->primitive_type_vector [ada_primitive_type_natural]
13693 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13694 0, "natural");
13695 lai->primitive_type_vector [ada_primitive_type_positive]
13696 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13697 0, "positive");
13698 lai->primitive_type_vector [ada_primitive_type_void]
13699 = builtin->builtin_void;
13700
13701 lai->primitive_type_vector [ada_primitive_type_system_address]
13702 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
72d5681a
PH
13703 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13704 = "system__address";
fbb06eb1 13705
47e729a8 13706 lai->bool_type_symbol = NULL;
fbb06eb1 13707 lai->bool_type_default = builtin->builtin_bool;
6c038f32 13708}
6c038f32
PH
13709\f
13710 /* Language vector */
13711
13712/* Not really used, but needed in the ada_language_defn. */
13713
13714static void
6c7a06a3 13715emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 13716{
6c7a06a3 13717 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
13718}
13719
13720static int
410a0ff2 13721parse (struct parser_state *ps)
6c038f32
PH
13722{
13723 warnings_issued = 0;
410a0ff2 13724 return ada_parse (ps);
6c038f32
PH
13725}
13726
13727static const struct exp_descriptor ada_exp_descriptor = {
13728 ada_print_subexp,
13729 ada_operator_length,
c0201579 13730 ada_operator_check,
6c038f32
PH
13731 ada_op_name,
13732 ada_dump_subexp_body,
13733 ada_evaluate_subexp
13734};
13735
1a119f36 13736/* Implement the "la_get_symbol_name_cmp" language_defn method
74ccd7f5
JB
13737 for Ada. */
13738
1a119f36
JB
13739static symbol_name_cmp_ftype
13740ada_get_symbol_name_cmp (const char *lookup_name)
74ccd7f5
JB
13741{
13742 if (should_use_wild_match (lookup_name))
13743 return wild_match;
13744 else
13745 return compare_names;
13746}
13747
a5ee536b
JB
13748/* Implement the "la_read_var_value" language_defn method for Ada. */
13749
13750static struct value *
13751ada_read_var_value (struct symbol *var, struct frame_info *frame)
13752{
3977b71f 13753 const struct block *frame_block = NULL;
a5ee536b
JB
13754 struct symbol *renaming_sym = NULL;
13755
13756 /* The only case where default_read_var_value is not sufficient
13757 is when VAR is a renaming... */
13758 if (frame)
13759 frame_block = get_frame_block (frame, NULL);
13760 if (frame_block)
13761 renaming_sym = ada_find_renaming_symbol (var, frame_block);
13762 if (renaming_sym != NULL)
13763 return ada_read_renaming_var_value (renaming_sym, frame_block);
13764
13765 /* This is a typical case where we expect the default_read_var_value
13766 function to work. */
13767 return default_read_var_value (var, frame);
13768}
13769
6c038f32
PH
13770const struct language_defn ada_language_defn = {
13771 "ada", /* Language name */
6abde28f 13772 "Ada",
6c038f32 13773 language_ada,
6c038f32 13774 range_check_off,
6c038f32
PH
13775 case_sensitive_on, /* Yes, Ada is case-insensitive, but
13776 that's not quite what this means. */
6c038f32 13777 array_row_major,
9a044a89 13778 macro_expansion_no,
6c038f32
PH
13779 &ada_exp_descriptor,
13780 parse,
13781 ada_error,
13782 resolve,
13783 ada_printchar, /* Print a character constant */
13784 ada_printstr, /* Function to print string constant */
13785 emit_char, /* Function to print single char (not used) */
6c038f32 13786 ada_print_type, /* Print a type using appropriate syntax */
be942545 13787 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
13788 ada_val_print, /* Print a value using appropriate syntax */
13789 ada_value_print, /* Print a top-level value */
a5ee536b 13790 ada_read_var_value, /* la_read_var_value */
6c038f32 13791 NULL, /* Language specific skip_trampoline */
2b2d9e11 13792 NULL, /* name_of_this */
6c038f32
PH
13793 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
13794 basic_lookup_transparent_type, /* lookup_transparent_type */
13795 ada_la_decode, /* Language specific symbol demangler */
0963b4bd
MS
13796 NULL, /* Language specific
13797 class_name_from_physname */
6c038f32
PH
13798 ada_op_print_tab, /* expression operators for printing */
13799 0, /* c-style arrays */
13800 1, /* String lower bound */
6c038f32 13801 ada_get_gdb_completer_word_break_characters,
41d27058 13802 ada_make_symbol_completion_list,
72d5681a 13803 ada_language_arch_info,
e79af960 13804 ada_print_array_index,
41f1b697 13805 default_pass_by_reference,
ae6a3a4c 13806 c_get_string,
1a119f36 13807 ada_get_symbol_name_cmp, /* la_get_symbol_name_cmp */
f8eba3c6 13808 ada_iterate_over_symbols,
a53b64ea 13809 &ada_varobj_ops,
bb2ec1b3
TT
13810 NULL,
13811 NULL,
6c038f32
PH
13812 LANG_MAGIC
13813};
13814
2c0b251b
PA
13815/* Provide a prototype to silence -Wmissing-prototypes. */
13816extern initialize_file_ftype _initialize_ada_language;
13817
5bf03f13
JB
13818/* Command-list for the "set/show ada" prefix command. */
13819static struct cmd_list_element *set_ada_list;
13820static struct cmd_list_element *show_ada_list;
13821
13822/* Implement the "set ada" prefix command. */
13823
13824static void
13825set_ada_command (char *arg, int from_tty)
13826{
13827 printf_unfiltered (_(\
13828"\"set ada\" must be followed by the name of a setting.\n"));
635c7e8a 13829 help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
5bf03f13
JB
13830}
13831
13832/* Implement the "show ada" prefix command. */
13833
13834static void
13835show_ada_command (char *args, int from_tty)
13836{
13837 cmd_show_list (show_ada_list, from_tty, "");
13838}
13839
2060206e
PA
13840static void
13841initialize_ada_catchpoint_ops (void)
13842{
13843 struct breakpoint_ops *ops;
13844
13845 initialize_breakpoint_ops ();
13846
13847 ops = &catch_exception_breakpoint_ops;
13848 *ops = bkpt_breakpoint_ops;
13849 ops->dtor = dtor_catch_exception;
13850 ops->allocate_location = allocate_location_catch_exception;
13851 ops->re_set = re_set_catch_exception;
13852 ops->check_status = check_status_catch_exception;
13853 ops->print_it = print_it_catch_exception;
13854 ops->print_one = print_one_catch_exception;
13855 ops->print_mention = print_mention_catch_exception;
13856 ops->print_recreate = print_recreate_catch_exception;
13857
13858 ops = &catch_exception_unhandled_breakpoint_ops;
13859 *ops = bkpt_breakpoint_ops;
13860 ops->dtor = dtor_catch_exception_unhandled;
13861 ops->allocate_location = allocate_location_catch_exception_unhandled;
13862 ops->re_set = re_set_catch_exception_unhandled;
13863 ops->check_status = check_status_catch_exception_unhandled;
13864 ops->print_it = print_it_catch_exception_unhandled;
13865 ops->print_one = print_one_catch_exception_unhandled;
13866 ops->print_mention = print_mention_catch_exception_unhandled;
13867 ops->print_recreate = print_recreate_catch_exception_unhandled;
13868
13869 ops = &catch_assert_breakpoint_ops;
13870 *ops = bkpt_breakpoint_ops;
13871 ops->dtor = dtor_catch_assert;
13872 ops->allocate_location = allocate_location_catch_assert;
13873 ops->re_set = re_set_catch_assert;
13874 ops->check_status = check_status_catch_assert;
13875 ops->print_it = print_it_catch_assert;
13876 ops->print_one = print_one_catch_assert;
13877 ops->print_mention = print_mention_catch_assert;
13878 ops->print_recreate = print_recreate_catch_assert;
13879}
13880
3d9434b5
JB
13881/* This module's 'new_objfile' observer. */
13882
13883static void
13884ada_new_objfile_observer (struct objfile *objfile)
13885{
13886 ada_clear_symbol_cache ();
13887}
13888
13889/* This module's 'free_objfile' observer. */
13890
13891static void
13892ada_free_objfile_observer (struct objfile *objfile)
13893{
13894 ada_clear_symbol_cache ();
13895}
13896
d2e4a39e 13897void
6c038f32 13898_initialize_ada_language (void)
14f9c5c9 13899{
6c038f32
PH
13900 add_language (&ada_language_defn);
13901
2060206e
PA
13902 initialize_ada_catchpoint_ops ();
13903
5bf03f13
JB
13904 add_prefix_cmd ("ada", no_class, set_ada_command,
13905 _("Prefix command for changing Ada-specfic settings"),
13906 &set_ada_list, "set ada ", 0, &setlist);
13907
13908 add_prefix_cmd ("ada", no_class, show_ada_command,
13909 _("Generic command for showing Ada-specific settings."),
13910 &show_ada_list, "show ada ", 0, &showlist);
13911
13912 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13913 &trust_pad_over_xvs, _("\
13914Enable or disable an optimization trusting PAD types over XVS types"), _("\
13915Show whether an optimization trusting PAD types over XVS types is activated"),
13916 _("\
13917This is related to the encoding used by the GNAT compiler. The debugger\n\
13918should normally trust the contents of PAD types, but certain older versions\n\
13919of GNAT have a bug that sometimes causes the information in the PAD type\n\
13920to be incorrect. Turning this setting \"off\" allows the debugger to\n\
13921work around this bug. It is always safe to turn this option \"off\", but\n\
13922this incurs a slight performance penalty, so it is recommended to NOT change\n\
13923this option to \"off\" unless necessary."),
13924 NULL, NULL, &set_ada_list, &show_ada_list);
13925
9ac4176b
PA
13926 add_catch_command ("exception", _("\
13927Catch Ada exceptions, when raised.\n\
13928With an argument, catch only exceptions with the given name."),
13929 catch_ada_exception_command,
13930 NULL,
13931 CATCH_PERMANENT,
13932 CATCH_TEMPORARY);
13933 add_catch_command ("assert", _("\
13934Catch failed Ada assertions, when raised.\n\
13935With an argument, catch only exceptions with the given name."),
13936 catch_assert_command,
13937 NULL,
13938 CATCH_PERMANENT,
13939 CATCH_TEMPORARY);
13940
6c038f32 13941 varsize_limit = 65536;
6c038f32 13942
778865d3
JB
13943 add_info ("exceptions", info_exceptions_command,
13944 _("\
13945List all Ada exception names.\n\
13946If a regular expression is passed as an argument, only those matching\n\
13947the regular expression are listed."));
13948
c6044dd1
JB
13949 add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13950 _("Set Ada maintenance-related variables."),
13951 &maint_set_ada_cmdlist, "maintenance set ada ",
13952 0/*allow-unknown*/, &maintenance_set_cmdlist);
13953
13954 add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13955 _("Show Ada maintenance-related variables"),
13956 &maint_show_ada_cmdlist, "maintenance show ada ",
13957 0/*allow-unknown*/, &maintenance_show_cmdlist);
13958
13959 add_setshow_boolean_cmd
13960 ("ignore-descriptive-types", class_maintenance,
13961 &ada_ignore_descriptive_types_p,
13962 _("Set whether descriptive types generated by GNAT should be ignored."),
13963 _("Show whether descriptive types generated by GNAT should be ignored."),
13964 _("\
13965When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13966DWARF attribute."),
13967 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13968
6c038f32
PH
13969 obstack_init (&symbol_list_obstack);
13970
13971 decoded_names_store = htab_create_alloc
13972 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13973 NULL, xcalloc, xfree);
6b69afc4 13974
3d9434b5
JB
13975 /* The ada-lang observers. */
13976 observer_attach_new_objfile (ada_new_objfile_observer);
13977 observer_attach_free_objfile (ada_free_objfile_observer);
e802dbe0 13978 observer_attach_inferior_exit (ada_inferior_exit);
ee01b665
JB
13979
13980 /* Setup various context-specific data. */
e802dbe0 13981 ada_inferior_data
8e260fc0 13982 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
ee01b665
JB
13983 ada_pspace_data_handle
13984 = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14f9c5c9 13985}